diff options
Diffstat (limited to 'include/uapi/linux')
402 files changed, 64110 insertions, 0 deletions
diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild index b0fd4d03499..e194387ef78 100644 --- a/include/uapi/linux/Kbuild +++ b/include/uapi/linux/Kbuild @@ -22,3 +22,396 @@ header-y += usb/  header-y += wimax/  genhdr-y += version.h + +ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/a.out.h \ +		  $(srctree)/arch/$(SRCARCH)/include/asm/a.out.h),) +header-y += a.out.h +endif + +header-y += acct.h +header-y += adb.h +header-y += adfs_fs.h +header-y += affs_hardblocks.h +header-y += agpgart.h +header-y += aio_abi.h +header-y += apm_bios.h +header-y += arcfb.h +header-y += atalk.h +header-y += atm.h +header-y += atm_eni.h +header-y += atm_he.h +header-y += atm_idt77105.h +header-y += atm_nicstar.h +header-y += atm_tcp.h +header-y += atm_zatm.h +header-y += atmapi.h +header-y += atmarp.h +header-y += atmbr2684.h +header-y += atmclip.h +header-y += atmdev.h +header-y += atmioc.h +header-y += atmlec.h +header-y += atmmpc.h +header-y += atmppp.h +header-y += atmsap.h +header-y += atmsvc.h +header-y += audit.h +header-y += auto_fs.h +header-y += auto_fs4.h +header-y += auxvec.h +header-y += ax25.h +header-y += b1lli.h +header-y += baycom.h +header-y += bfs_fs.h +header-y += binfmts.h +header-y += blkpg.h +header-y += blktrace_api.h +header-y += bpqether.h +header-y += bsg.h +header-y += can.h +header-y += capability.h +header-y += capi.h +header-y += cciss_defs.h +header-y += cciss_ioctl.h +header-y += cdrom.h +header-y += cgroupstats.h +header-y += chio.h +header-y += cm4000_cs.h +header-y += cn_proc.h +header-y += coda.h +header-y += coda_psdev.h +header-y += coff.h +header-y += connector.h +header-y += const.h +header-y += cramfs_fs.h +header-y += cuda.h +header-y += cyclades.h +header-y += cycx_cfm.h +header-y += dcbnl.h +header-y += dccp.h +header-y += dlm.h +header-y += dlm_device.h +header-y += dlm_netlink.h +header-y += dlm_plock.h +header-y += dlmconstants.h +header-y += dm-ioctl.h +header-y += dm-log-userspace.h +header-y += dn.h +header-y += dqblk_xfs.h +header-y += edd.h +header-y += efs_fs_sb.h +header-y += elf-em.h +header-y += elf-fdpic.h +header-y += elf.h +header-y += elfcore.h +header-y += errno.h +header-y += errqueue.h +header-y += ethtool.h +header-y += eventpoll.h +header-y += fadvise.h +header-y += falloc.h +header-y += fanotify.h +header-y += fb.h +header-y += fcntl.h +header-y += fd.h +header-y += fdreg.h +header-y += fib_rules.h +header-y += fiemap.h +header-y += filter.h +header-y += firewire-cdev.h +header-y += firewire-constants.h +header-y += flat.h +header-y += fs.h +header-y += fsl_hypervisor.h +header-y += fuse.h +header-y += futex.h +header-y += gameport.h +header-y += gen_stats.h +header-y += genetlink.h +header-y += gfs2_ondisk.h +header-y += gigaset_dev.h +header-y += hdlc.h +header-y += hdlcdrv.h +header-y += hdreg.h +header-y += hid.h +header-y += hiddev.h +header-y += hidraw.h +header-y += hpet.h +header-y += hysdn_if.h +header-y += i2c-dev.h +header-y += i2c.h +header-y += i2o-dev.h +header-y += i8k.h +header-y += icmp.h +header-y += icmpv6.h +header-y += if.h +header-y += if_addr.h +header-y += if_addrlabel.h +header-y += if_alg.h +header-y += if_arcnet.h +header-y += if_arp.h +header-y += if_bonding.h +header-y += if_bridge.h +header-y += if_cablemodem.h +header-y += if_eql.h +header-y += if_ether.h +header-y += if_fc.h +header-y += if_fddi.h +header-y += if_frad.h +header-y += if_hippi.h +header-y += if_infiniband.h +header-y += if_link.h +header-y += if_ltalk.h +header-y += if_packet.h +header-y += if_phonet.h +header-y += if_plip.h +header-y += if_ppp.h +header-y += if_pppol2tp.h +header-y += if_pppox.h +header-y += if_slip.h +header-y += if_team.h +header-y += if_tun.h +header-y += if_tunnel.h +header-y += if_vlan.h +header-y += if_x25.h +header-y += igmp.h +header-y += in.h +header-y += in6.h +header-y += in_route.h +header-y += inet_diag.h +header-y += inotify.h +header-y += input.h +header-y += ioctl.h +header-y += ip.h +header-y += ip6_tunnel.h +header-y += ip_vs.h +header-y += ipc.h +header-y += ipmi.h +header-y += ipmi_msgdefs.h +header-y += ipsec.h +header-y += ipv6.h +header-y += ipv6_route.h +header-y += ipx.h +header-y += irda.h +header-y += irqnr.h +header-y += isdn.h +header-y += isdn_divertif.h +header-y += isdn_ppp.h +header-y += isdnif.h +header-y += iso_fs.h +header-y += ivtv.h +header-y += ivtvfb.h +header-y += ixjuser.h +header-y += jffs2.h +header-y += joystick.h +header-y += kd.h +header-y += kdev_t.h +header-y += kernel-page-flags.h +header-y += kernel.h +header-y += kernelcapi.h +header-y += kexec.h +header-y += keyboard.h +header-y += keyctl.h + +ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/kvm.h \ +		  $(srctree)/arch/$(SRCARCH)/include/asm/kvm.h),) +header-y += kvm.h +endif + + +ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/kvm_para.h \ +		  $(srctree)/arch/$(SRCARCH)/include/asm/kvm_para.h),) +header-y += kvm_para.h +endif + +header-y += l2tp.h +header-y += limits.h +header-y += llc.h +header-y += loop.h +header-y += lp.h +header-y += magic.h +header-y += major.h +header-y += map_to_7segment.h +header-y += matroxfb.h +header-y += mdio.h +header-y += media.h +header-y += mei.h +header-y += mempolicy.h +header-y += meye.h +header-y += mii.h +header-y += minix_fs.h +header-y += mman.h +header-y += mmtimer.h +header-y += mqueue.h +header-y += mroute.h +header-y += mroute6.h +header-y += msdos_fs.h +header-y += msg.h +header-y += mtio.h +header-y += n_r3964.h +header-y += nbd.h +header-y += ncp.h +header-y += ncp_fs.h +header-y += ncp_mount.h +header-y += ncp_no.h +header-y += neighbour.h +header-y += net.h +header-y += net_dropmon.h +header-y += net_tstamp.h +header-y += netdevice.h +header-y += netfilter.h +header-y += netfilter_arp.h +header-y += netfilter_bridge.h +header-y += netfilter_decnet.h +header-y += netfilter_ipv4.h +header-y += netfilter_ipv6.h +header-y += netlink.h +header-y += netrom.h +header-y += nfc.h +header-y += nfs.h +header-y += nfs2.h +header-y += nfs3.h +header-y += nfs4.h +header-y += nfs4_mount.h +header-y += nfs_fs.h +header-y += nfs_idmap.h +header-y += nfs_mount.h +header-y += nfsacl.h +header-y += nl80211.h +header-y += nubus.h +header-y += nvram.h +header-y += omap3isp.h +header-y += omapfb.h +header-y += oom.h +header-y += packet_diag.h +header-y += param.h +header-y += parport.h +header-y += patchkey.h +header-y += pci.h +header-y += pci_regs.h +header-y += perf_event.h +header-y += personality.h +header-y += pfkeyv2.h +header-y += pg.h +header-y += phantom.h +header-y += phonet.h +header-y += pkt_cls.h +header-y += pkt_sched.h +header-y += pktcdvd.h +header-y += pmu.h +header-y += poll.h +header-y += posix_types.h +header-y += ppdev.h +header-y += ppp-comp.h +header-y += ppp-ioctl.h +header-y += ppp_defs.h +header-y += pps.h +header-y += prctl.h +header-y += ptp_clock.h +header-y += ptrace.h +header-y += qnx4_fs.h +header-y += qnxtypes.h +header-y += quota.h +header-y += radeonfb.h +header-y += random.h +header-y += raw.h +header-y += rds.h +header-y += reboot.h +header-y += reiserfs_fs.h +header-y += reiserfs_xattr.h +header-y += resource.h +header-y += rfkill.h +header-y += romfs_fs.h +header-y += rose.h +header-y += route.h +header-y += rtc.h +header-y += rtnetlink.h +header-y += scc.h +header-y += sched.h +header-y += screen_info.h +header-y += sdla.h +header-y += seccomp.h +header-y += securebits.h +header-y += selinux_netlink.h +header-y += sem.h +header-y += serial.h +header-y += serial_core.h +header-y += serial_reg.h +header-y += serio.h +header-y += shm.h +header-y += signal.h +header-y += signalfd.h +header-y += snmp.h +header-y += sock_diag.h +header-y += socket.h +header-y += sockios.h +header-y += som.h +header-y += sonet.h +header-y += sonypi.h +header-y += sound.h +header-y += soundcard.h +header-y += stat.h +header-y += stddef.h +header-y += string.h +header-y += suspend_ioctls.h +header-y += swab.h +header-y += synclink.h +header-y += sysctl.h +header-y += sysinfo.h +header-y += taskstats.h +header-y += tcp.h +header-y += tcp_metrics.h +header-y += telephony.h +header-y += termios.h +header-y += time.h +header-y += times.h +header-y += timex.h +header-y += tiocl.h +header-y += tipc.h +header-y += tipc_config.h +header-y += toshiba.h +header-y += tty.h +header-y += tty_flags.h +header-y += types.h +header-y += udf_fs_i.h +header-y += udp.h +header-y += uhid.h +header-y += uinput.h +header-y += uio.h +header-y += ultrasound.h +header-y += un.h +header-y += unistd.h +header-y += unix_diag.h +header-y += usbdevice_fs.h +header-y += utime.h +header-y += utsname.h +header-y += uuid.h +header-y += uvcvideo.h +header-y += v4l2-common.h +header-y += v4l2-controls.h +header-y += v4l2-dv-timings.h +header-y += v4l2-mediabus.h +header-y += v4l2-subdev.h +header-y += veth.h +header-y += vfio.h +header-y += vhost.h +header-y += videodev2.h +header-y += virtio_9p.h +header-y += virtio_balloon.h +header-y += virtio_blk.h +header-y += virtio_config.h +header-y += virtio_console.h +header-y += virtio_ids.h +header-y += virtio_net.h +header-y += virtio_pci.h +header-y += virtio_ring.h +header-y += virtio_rng.h +header-y += vt.h +header-y += wait.h +header-y += wanrouter.h +header-y += watchdog.h +header-y += wimax.h +header-y += wireless.h +header-y += x25.h +header-y += xattr.h +header-y += xfrm.h diff --git a/include/uapi/linux/a.out.h b/include/uapi/linux/a.out.h new file mode 100644 index 00000000000..7caf44c7fa5 --- /dev/null +++ b/include/uapi/linux/a.out.h @@ -0,0 +1,274 @@ +#ifndef _UAPI__A_OUT_GNU_H__ +#define _UAPI__A_OUT_GNU_H__ + +#define __GNU_EXEC_MACROS__ + +#ifndef __STRUCT_EXEC_OVERRIDE__ + +#include <asm/a.out.h> + +#endif /* __STRUCT_EXEC_OVERRIDE__ */ + +#ifndef __ASSEMBLY__ + +/* these go in the N_MACHTYPE field */ +enum machine_type { +#if defined (M_OLDSUN2) +  M__OLDSUN2 = M_OLDSUN2, +#else +  M_OLDSUN2 = 0, +#endif +#if defined (M_68010) +  M__68010 = M_68010, +#else +  M_68010 = 1, +#endif +#if defined (M_68020) +  M__68020 = M_68020, +#else +  M_68020 = 2, +#endif +#if defined (M_SPARC) +  M__SPARC = M_SPARC, +#else +  M_SPARC = 3, +#endif +  /* skip a bunch so we don't run into any of sun's numbers */ +  M_386 = 100, +  M_MIPS1 = 151,	/* MIPS R3000/R3000 binary */ +  M_MIPS2 = 152		/* MIPS R6000/R4000 binary */ +}; + +#if !defined (N_MAGIC) +#define N_MAGIC(exec) ((exec).a_info & 0xffff) +#endif +#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff)) +#define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff) +#define N_SET_INFO(exec, magic, type, flags) \ +	((exec).a_info = ((magic) & 0xffff) \ +	 | (((int)(type) & 0xff) << 16) \ +	 | (((flags) & 0xff) << 24)) +#define N_SET_MAGIC(exec, magic) \ +	((exec).a_info = (((exec).a_info & 0xffff0000) | ((magic) & 0xffff))) + +#define N_SET_MACHTYPE(exec, machtype) \ +	((exec).a_info = \ +	 ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16)) + +#define N_SET_FLAGS(exec, flags) \ +	((exec).a_info = \ +	 ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24)) + +/* Code indicating object file or impure executable.  */ +#define OMAGIC 0407 +/* Code indicating pure executable.  */ +#define NMAGIC 0410 +/* Code indicating demand-paged executable.  */ +#define ZMAGIC 0413 +/* This indicates a demand-paged executable with the header in the text.  +   The first page is unmapped to help trap NULL pointer references */ +#define QMAGIC 0314 + +/* Code indicating core file.  */ +#define CMAGIC 0421 + +#if !defined (N_BADMAG) +#define N_BADMAG(x)	  (N_MAGIC(x) != OMAGIC		\ +			&& N_MAGIC(x) != NMAGIC		\ +  			&& N_MAGIC(x) != ZMAGIC \ +		        && N_MAGIC(x) != QMAGIC) +#endif + +#define _N_HDROFF(x) (1024 - sizeof (struct exec)) + +#if !defined (N_TXTOFF) +#define N_TXTOFF(x) \ + (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : \ +  (N_MAGIC(x) == QMAGIC ? 0 : sizeof (struct exec))) +#endif + +#if !defined (N_DATOFF) +#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text) +#endif + +#if !defined (N_TRELOFF) +#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data) +#endif + +#if !defined (N_DRELOFF) +#define N_DRELOFF(x) (N_TRELOFF(x) + N_TRSIZE(x)) +#endif + +#if !defined (N_SYMOFF) +#define N_SYMOFF(x) (N_DRELOFF(x) + N_DRSIZE(x)) +#endif + +#if !defined (N_STROFF) +#define N_STROFF(x) (N_SYMOFF(x) + N_SYMSIZE(x)) +#endif + +/* Address of text segment in memory after it is loaded.  */ +#if !defined (N_TXTADDR) +#define N_TXTADDR(x) (N_MAGIC(x) == QMAGIC ? PAGE_SIZE : 0) +#endif + +/* Address of data segment in memory after it is loaded. +   Note that it is up to you to define SEGMENT_SIZE +   on machines not listed here.  */ +#if defined(vax) || defined(hp300) || defined(pyr) +#define SEGMENT_SIZE page_size +#endif +#ifdef	sony +#define	SEGMENT_SIZE	0x2000 +#endif	/* Sony.  */ +#ifdef is68k +#define SEGMENT_SIZE 0x20000 +#endif +#if defined(m68k) && defined(PORTAR) +#define PAGE_SIZE 0x400 +#define SEGMENT_SIZE PAGE_SIZE +#endif + +#ifdef linux +#ifndef __KERNEL__ +#include <unistd.h> +#endif +#if defined(__i386__) || defined(__mc68000__) +#define SEGMENT_SIZE	1024 +#else +#ifndef SEGMENT_SIZE +#ifndef __KERNEL__ +#define SEGMENT_SIZE   getpagesize() +#endif +#endif +#endif +#endif + +#define _N_SEGMENT_ROUND(x) ALIGN(x, SEGMENT_SIZE) + +#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text) + +#ifndef N_DATADDR +#define N_DATADDR(x) \ +    (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \ +     : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x)))) +#endif + +/* Address of bss segment in memory after it is loaded.  */ +#if !defined (N_BSSADDR) +#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data) +#endif + +#if !defined (N_NLIST_DECLARED) +struct nlist { +  union { +    char *n_name; +    struct nlist *n_next; +    long n_strx; +  } n_un; +  unsigned char n_type; +  char n_other; +  short n_desc; +  unsigned long n_value; +}; +#endif /* no N_NLIST_DECLARED.  */ + +#if !defined (N_UNDF) +#define N_UNDF 0 +#endif +#if !defined (N_ABS) +#define N_ABS 2 +#endif +#if !defined (N_TEXT) +#define N_TEXT 4 +#endif +#if !defined (N_DATA) +#define N_DATA 6 +#endif +#if !defined (N_BSS) +#define N_BSS 8 +#endif +#if !defined (N_FN) +#define N_FN 15 +#endif + +#if !defined (N_EXT) +#define N_EXT 1 +#endif +#if !defined (N_TYPE) +#define N_TYPE 036 +#endif +#if !defined (N_STAB) +#define N_STAB 0340 +#endif + +/* The following type indicates the definition of a symbol as being +   an indirect reference to another symbol.  The other symbol +   appears as an undefined reference, immediately following this symbol. + +   Indirection is asymmetrical.  The other symbol's value will be used +   to satisfy requests for the indirect symbol, but not vice versa. +   If the other symbol does not have a definition, libraries will +   be searched to find a definition.  */ +#define N_INDR 0xa + +/* The following symbols refer to set elements. +   All the N_SET[ATDB] symbols with the same name form one set. +   Space is allocated for the set in the text section, and each set +   element's value is stored into one word of the space. +   The first word of the space is the length of the set (number of elements). + +   The address of the set is made into an N_SETV symbol +   whose name is the same as the name of the set. +   This symbol acts like a N_DATA global symbol +   in that it can satisfy undefined external references.  */ + +/* These appear as input to LD, in a .o file.  */ +#define	N_SETA	0x14		/* Absolute set element symbol */ +#define	N_SETT	0x16		/* Text set element symbol */ +#define	N_SETD	0x18		/* Data set element symbol */ +#define	N_SETB	0x1A		/* Bss set element symbol */ + +/* This is output from LD.  */ +#define N_SETV	0x1C		/* Pointer to set vector in data area.  */ + +#if !defined (N_RELOCATION_INFO_DECLARED) +/* This structure describes a single relocation to be performed. +   The text-relocation section of the file is a vector of these structures, +   all of which apply to the text section. +   Likewise, the data-relocation section applies to the data section.  */ + +struct relocation_info +{ +  /* Address (within segment) to be relocated.  */ +  int r_address; +  /* The meaning of r_symbolnum depends on r_extern.  */ +  unsigned int r_symbolnum:24; +  /* Nonzero means value is a pc-relative offset +     and it should be relocated for changes in its own address +     as well as for changes in the symbol or section specified.  */ +  unsigned int r_pcrel:1; +  /* Length (as exponent of 2) of the field to be relocated. +     Thus, a value of 2 indicates 1<<2 bytes.  */ +  unsigned int r_length:2; +  /* 1 => relocate with value of symbol. +          r_symbolnum is the index of the symbol +	  in file's the symbol table. +     0 => relocate with the address of a segment. +          r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS +	  (the N_EXT bit may be set also, but signifies nothing).  */ +  unsigned int r_extern:1; +  /* Four bits that aren't used, but when writing an object file +     it is desirable to clear them.  */ +#ifdef NS32K +  unsigned r_bsr:1; +  unsigned r_disp:1; +  unsigned r_pad:2; +#else +  unsigned int r_pad:4; +#endif +}; +#endif /* no N_RELOCATION_INFO_DECLARED.  */ + +#endif /*__ASSEMBLY__ */ +#endif /* _UAPI__A_OUT_GNU_H__ */ diff --git a/include/uapi/linux/acct.h b/include/uapi/linux/acct.h new file mode 100644 index 00000000000..11b6ca3e087 --- /dev/null +++ b/include/uapi/linux/acct.h @@ -0,0 +1,122 @@ +/* + *  BSD Process Accounting for Linux - Definitions + * + *  Author: Marco van Wieringen (mvw@planets.elm.net) + * + *  This header file contains the definitions needed to implement + *  BSD-style process accounting. The kernel accounting code and all + *  user-level programs that try to do something useful with the + *  process accounting log must include this file. + * + *  Copyright (C) 1995 - 1997 Marco van Wieringen - ELM Consultancy B.V. + * + */ + +#ifndef _UAPI_LINUX_ACCT_H +#define _UAPI_LINUX_ACCT_H + +#include <linux/types.h> + +#include <asm/param.h> +#include <asm/byteorder.h> + +/*  + *  comp_t is a 16-bit "floating" point number with a 3-bit base 8 + *  exponent and a 13-bit fraction. + *  comp2_t is 24-bit with 5-bit base 2 exponent and 20 bit fraction + *  (leading 1 not stored). + *  See linux/kernel/acct.c for the specific encoding systems used. + */ + +typedef __u16	comp_t; +typedef __u32	comp2_t; + +/* + *   accounting file record + * + *   This structure contains all of the information written out to the + *   process accounting file whenever a process exits. + */ + +#define ACCT_COMM	16 + +struct acct +{ +	char		ac_flag;		/* Flags */ +	char		ac_version;		/* Always set to ACCT_VERSION */ +	/* for binary compatibility back until 2.0 */ +	__u16		ac_uid16;		/* LSB of Real User ID */ +	__u16		ac_gid16;		/* LSB of Real Group ID */ +	__u16		ac_tty;			/* Control Terminal */ +	__u32		ac_btime;		/* Process Creation Time */ +	comp_t		ac_utime;		/* User Time */ +	comp_t		ac_stime;		/* System Time */ +	comp_t		ac_etime;		/* Elapsed Time */ +	comp_t		ac_mem;			/* Average Memory Usage */ +	comp_t		ac_io;			/* Chars Transferred */ +	comp_t		ac_rw;			/* Blocks Read or Written */ +	comp_t		ac_minflt;		/* Minor Pagefaults */ +	comp_t		ac_majflt;		/* Major Pagefaults */ +	comp_t		ac_swaps;		/* Number of Swaps */ +/* m68k had no padding here. */ +#if !defined(CONFIG_M68K) || !defined(__KERNEL__) +	__u16		ac_ahz;			/* AHZ */ +#endif +	__u32		ac_exitcode;		/* Exitcode */ +	char		ac_comm[ACCT_COMM + 1];	/* Command Name */ +	__u8		ac_etime_hi;		/* Elapsed Time MSB */ +	__u16		ac_etime_lo;		/* Elapsed Time LSB */ +	__u32		ac_uid;			/* Real User ID */ +	__u32		ac_gid;			/* Real Group ID */ +}; + +struct acct_v3 +{ +	char		ac_flag;		/* Flags */ +	char		ac_version;		/* Always set to ACCT_VERSION */ +	__u16		ac_tty;			/* Control Terminal */ +	__u32		ac_exitcode;		/* Exitcode */ +	__u32		ac_uid;			/* Real User ID */ +	__u32		ac_gid;			/* Real Group ID */ +	__u32		ac_pid;			/* Process ID */ +	__u32		ac_ppid;		/* Parent Process ID */ +	__u32		ac_btime;		/* Process Creation Time */ +#ifdef __KERNEL__ +	__u32		ac_etime;		/* Elapsed Time */ +#else +	float		ac_etime;		/* Elapsed Time */ +#endif +	comp_t		ac_utime;		/* User Time */ +	comp_t		ac_stime;		/* System Time */ +	comp_t		ac_mem;			/* Average Memory Usage */ +	comp_t		ac_io;			/* Chars Transferred */ +	comp_t		ac_rw;			/* Blocks Read or Written */ +	comp_t		ac_minflt;		/* Minor Pagefaults */ +	comp_t		ac_majflt;		/* Major Pagefaults */ +	comp_t		ac_swaps;		/* Number of Swaps */ +	char		ac_comm[ACCT_COMM];	/* Command Name */ +}; + +/* + *  accounting flags + */ +				/* bit set when the process ... */ +#define AFORK		0x01	/* ... executed fork, but did not exec */ +#define ASU		0x02	/* ... used super-user privileges */ +#define ACOMPAT		0x04	/* ... used compatibility mode (VAX only not used) */ +#define ACORE		0x08	/* ... dumped core */ +#define AXSIG		0x10	/* ... was killed by a signal */ + +#ifdef __BIG_ENDIAN +#define ACCT_BYTEORDER	0x80	/* accounting file is big endian */ +#else +#define ACCT_BYTEORDER	0x00	/* accounting file is little endian */ +#endif + +#ifndef __KERNEL__ +#define ACCT_VERSION	2 +#define AHZ		(HZ) +#endif	/* __KERNEL */ + + +#endif /* _UAPI_LINUX_ACCT_H */ diff --git a/include/uapi/linux/adb.h b/include/uapi/linux/adb.h new file mode 100644 index 00000000000..0ea1075fc4a --- /dev/null +++ b/include/uapi/linux/adb.h @@ -0,0 +1,44 @@ +/* + * Definitions for ADB (Apple Desktop Bus) support. + */ +#ifndef _UAPI__ADB_H +#define _UAPI__ADB_H + +/* ADB commands */ +#define ADB_BUSRESET		0 +#define ADB_FLUSH(id)		(0x01 | ((id) << 4)) +#define ADB_WRITEREG(id, reg)	(0x08 | (reg) | ((id) << 4)) +#define ADB_READREG(id, reg)	(0x0C | (reg) | ((id) << 4)) + +/* ADB default device IDs (upper 4 bits of ADB command byte) */ +#define ADB_DONGLE	1	/* "software execution control" devices */ +#define ADB_KEYBOARD	2 +#define ADB_MOUSE	3 +#define ADB_TABLET	4 +#define ADB_MODEM	5 +#define ADB_MISC	7	/* maybe a monitor */ + +#define ADB_RET_OK	0 +#define ADB_RET_TIMEOUT	3 + +/* The kind of ADB request. The controller may emulate some +   or all of those CUDA/PMU packet kinds */ +#define ADB_PACKET	0 +#define CUDA_PACKET	1 +#define ERROR_PACKET	2 +#define TIMER_PACKET	3 +#define POWER_PACKET	4 +#define MACIIC_PACKET	5 +#define PMU_PACKET	6 +#define ADB_QUERY	7 + +/* ADB queries */ + +/* ADB_QUERY_GETDEVINFO + * Query ADB slot for device presence + * data[2] = id, rep[0] = orig addr, rep[1] = handler_id + */ +#define ADB_QUERY_GETDEVINFO	1 + + +#endif /* _UAPI__ADB_H */ diff --git a/include/uapi/linux/adfs_fs.h b/include/uapi/linux/adfs_fs.h new file mode 100644 index 00000000000..a1bf43754dd --- /dev/null +++ b/include/uapi/linux/adfs_fs.h @@ -0,0 +1,44 @@ +#ifndef _UAPI_ADFS_FS_H +#define _UAPI_ADFS_FS_H + +#include <linux/types.h> +#include <linux/magic.h> + +/* + * Disc Record at disc address 0xc00 + */ +struct adfs_discrecord { +    __u8  log2secsize; +    __u8  secspertrack; +    __u8  heads; +    __u8  density; +    __u8  idlen; +    __u8  log2bpmb; +    __u8  skew; +    __u8  bootoption; +    __u8  lowsector; +    __u8  nzones; +    __le16 zone_spare; +    __le32 root; +    __le32 disc_size; +    __le16 disc_id; +    __u8  disc_name[10]; +    __le32 disc_type; +    __le32 disc_size_high; +    __u8  log2sharesize:4; +    __u8  unused40:4; +    __u8  big_flag:1; +    __u8  unused41:1; +    __u8  nzones_high; +    __le32 format_version; +    __le32 root_size; +    __u8  unused52[60 - 52]; +}; + +#define ADFS_DISCRECORD		(0xc00) +#define ADFS_DR_OFFSET		(0x1c0) +#define ADFS_DR_SIZE		 60 +#define ADFS_DR_SIZE_BITS	(ADFS_DR_SIZE << 3) + + +#endif /* _UAPI_ADFS_FS_H */ diff --git a/include/uapi/linux/affs_hardblocks.h b/include/uapi/linux/affs_hardblocks.h new file mode 100644 index 00000000000..f1b948c1f59 --- /dev/null +++ b/include/uapi/linux/affs_hardblocks.h @@ -0,0 +1,68 @@ +#ifndef	AFFS_HARDBLOCKS_H +#define	AFFS_HARDBLOCKS_H + +#include <linux/types.h> + +/* Just the needed definitions for the RDB of an Amiga HD. */ + +struct RigidDiskBlock { +	__u32	rdb_ID; +	__be32	rdb_SummedLongs; +	__s32	rdb_ChkSum; +	__u32	rdb_HostID; +	__be32	rdb_BlockBytes; +	__u32	rdb_Flags; +	__u32	rdb_BadBlockList; +	__be32	rdb_PartitionList; +	__u32	rdb_FileSysHeaderList; +	__u32	rdb_DriveInit; +	__u32	rdb_Reserved1[6]; +	__u32	rdb_Cylinders; +	__u32	rdb_Sectors; +	__u32	rdb_Heads; +	__u32	rdb_Interleave; +	__u32	rdb_Park; +	__u32	rdb_Reserved2[3]; +	__u32	rdb_WritePreComp; +	__u32	rdb_ReducedWrite; +	__u32	rdb_StepRate; +	__u32	rdb_Reserved3[5]; +	__u32	rdb_RDBBlocksLo; +	__u32	rdb_RDBBlocksHi; +	__u32	rdb_LoCylinder; +	__u32	rdb_HiCylinder; +	__u32	rdb_CylBlocks; +	__u32	rdb_AutoParkSeconds; +	__u32	rdb_HighRDSKBlock; +	__u32	rdb_Reserved4; +	char	rdb_DiskVendor[8]; +	char	rdb_DiskProduct[16]; +	char	rdb_DiskRevision[4]; +	char	rdb_ControllerVendor[8]; +	char	rdb_ControllerProduct[16]; +	char	rdb_ControllerRevision[4]; +	__u32	rdb_Reserved5[10]; +}; + +#define	IDNAME_RIGIDDISK	0x5244534B	/* "RDSK" */ + +struct PartitionBlock { +	__be32	pb_ID; +	__be32	pb_SummedLongs; +	__s32	pb_ChkSum; +	__u32	pb_HostID; +	__be32	pb_Next; +	__u32	pb_Flags; +	__u32	pb_Reserved1[2]; +	__u32	pb_DevFlags; +	__u8	pb_DriveName[32]; +	__u32	pb_Reserved2[15]; +	__be32	pb_Environment[17]; +	__u32	pb_EReserved[15]; +}; + +#define	IDNAME_PARTITION	0x50415254	/* "PART" */ + +#define RDB_ALLOCATION_LIMIT	16 + +#endif	/* AFFS_HARDBLOCKS_H */ diff --git a/include/uapi/linux/agpgart.h b/include/uapi/linux/agpgart.h new file mode 100644 index 00000000000..4e828cf487b --- /dev/null +++ b/include/uapi/linux/agpgart.h @@ -0,0 +1,113 @@ +/* + * AGPGART module version 0.99 + * Copyright (C) 1999 Jeff Hartmann + * Copyright (C) 1999 Precision Insight, Inc. + * Copyright (C) 1999 Xi Graphics, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,  + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR  + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE  + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef _UAPI_AGP_H +#define _UAPI_AGP_H + +#define AGPIOC_BASE       'A' +#define AGPIOC_INFO       _IOR (AGPIOC_BASE, 0, struct agp_info*) +#define AGPIOC_ACQUIRE    _IO  (AGPIOC_BASE, 1) +#define AGPIOC_RELEASE    _IO  (AGPIOC_BASE, 2) +#define AGPIOC_SETUP      _IOW (AGPIOC_BASE, 3, struct agp_setup*) +#define AGPIOC_RESERVE    _IOW (AGPIOC_BASE, 4, struct agp_region*) +#define AGPIOC_PROTECT    _IOW (AGPIOC_BASE, 5, struct agp_region*) +#define AGPIOC_ALLOCATE   _IOWR(AGPIOC_BASE, 6, struct agp_allocate*) +#define AGPIOC_DEALLOCATE _IOW (AGPIOC_BASE, 7, int) +#define AGPIOC_BIND       _IOW (AGPIOC_BASE, 8, struct agp_bind*) +#define AGPIOC_UNBIND     _IOW (AGPIOC_BASE, 9, struct agp_unbind*) +#define AGPIOC_CHIPSET_FLUSH _IO (AGPIOC_BASE, 10) + +#define AGP_DEVICE      "/dev/agpgart" + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef __KERNEL__ +#include <linux/types.h> + +struct agp_version { +	__u16 major; +	__u16 minor; +}; + +typedef struct _agp_info { +	struct agp_version version;	/* version of the driver        */ +	__u32 bridge_id;	/* bridge vendor/device         */ +	__u32 agp_mode;		/* mode info of bridge          */ +	unsigned long aper_base;/* base of aperture             */ +	size_t aper_size;	/* size of aperture             */ +	size_t pg_total;	/* max pages (swap + system)    */ +	size_t pg_system;	/* max pages (system)           */ +	size_t pg_used;		/* current pages used           */ +} agp_info; + +typedef struct _agp_setup { +	__u32 agp_mode;		/* mode info of bridge          */ +} agp_setup; + +/* + * The "prot" down below needs still a "sleep" flag somehow ... + */ +typedef struct _agp_segment { +	__kernel_off_t pg_start;	/* starting page to populate    */ +	__kernel_size_t pg_count;	/* number of pages              */ +	int prot;			/* prot flags for mmap          */ +} agp_segment; + +typedef struct _agp_region { +	__kernel_pid_t pid;		/* pid of process       */ +	__kernel_size_t seg_count;	/* number of segments   */ +	struct _agp_segment *seg_list; +} agp_region; + +typedef struct _agp_allocate { +	int key;		/* tag of allocation            */ +	__kernel_size_t pg_count;/* number of pages             */ +	__u32 type;		/* 0 == normal, other devspec   */ +   	__u32 physical;         /* device specific (some devices   +				 * need a phys address of the      +				 * actual page behind the gatt     +				 * table)                        */ +} agp_allocate; + +typedef struct _agp_bind { +	int key;		/* tag of allocation            */ +	__kernel_off_t pg_start;/* starting page to populate    */ +} agp_bind; + +typedef struct _agp_unbind { +	int key;		/* tag of allocation            */ +	__u32 priority;		/* priority for paging out      */ +} agp_unbind; + +#endif				/* __KERNEL__ */ + +#endif /* _UAPI_AGP_H */ diff --git a/include/uapi/linux/aio_abi.h b/include/uapi/linux/aio_abi.h new file mode 100644 index 00000000000..86fa7a71336 --- /dev/null +++ b/include/uapi/linux/aio_abi.h @@ -0,0 +1,111 @@ +/* include/linux/aio_abi.h + * + * Copyright 2000,2001,2002 Red Hat. + * + * Written by Benjamin LaHaise <bcrl@kvack.org> + * + * Distribute under the terms of the GPLv2 (see ../../COPYING) or under  + * the following terms. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation is hereby granted, provided that the above copyright + * notice appears in all copies.  This software is provided without any + * warranty, express or implied.  Red Hat makes no representations about + * the suitability of this software for any purpose. + * + * IN NO EVENT SHALL RED HAT BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + * SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF + * THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RED HAT HAS BEEN ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * RED HAT DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND + * RED HAT HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + * ENHANCEMENTS, OR MODIFICATIONS. + */ +#ifndef __LINUX__AIO_ABI_H +#define __LINUX__AIO_ABI_H + +#include <linux/types.h> +#include <asm/byteorder.h> + +typedef __kernel_ulong_t aio_context_t; + +enum { +	IOCB_CMD_PREAD = 0, +	IOCB_CMD_PWRITE = 1, +	IOCB_CMD_FSYNC = 2, +	IOCB_CMD_FDSYNC = 3, +	/* These two are experimental. +	 * IOCB_CMD_PREADX = 4, +	 * IOCB_CMD_POLL = 5, +	 */ +	IOCB_CMD_NOOP = 6, +	IOCB_CMD_PREADV = 7, +	IOCB_CMD_PWRITEV = 8, +}; + +/* + * Valid flags for the "aio_flags" member of the "struct iocb". + * + * IOCB_FLAG_RESFD - Set if the "aio_resfd" member of the "struct iocb" + *                   is valid. + */ +#define IOCB_FLAG_RESFD		(1 << 0) + +/* read() from /dev/aio returns these structures. */ +struct io_event { +	__u64		data;		/* the data field from the iocb */ +	__u64		obj;		/* what iocb this event came from */ +	__s64		res;		/* result code for this event */ +	__s64		res2;		/* secondary result */ +}; + +#if defined(__LITTLE_ENDIAN) +#define PADDED(x,y)	x, y +#elif defined(__BIG_ENDIAN) +#define PADDED(x,y)	y, x +#else +#error edit for your odd byteorder. +#endif + +/* + * we always use a 64bit off_t when communicating + * with userland.  its up to libraries to do the + * proper padding and aio_error abstraction + */ + +struct iocb { +	/* these are internal to the kernel/libc. */ +	__u64	aio_data;	/* data to be returned in event's data */ +	__u32	PADDED(aio_key, aio_reserved1); +				/* the kernel sets aio_key to the req # */ + +	/* common fields */ +	__u16	aio_lio_opcode;	/* see IOCB_CMD_ above */ +	__s16	aio_reqprio; +	__u32	aio_fildes; + +	__u64	aio_buf; +	__u64	aio_nbytes; +	__s64	aio_offset; + +	/* extra parameters */ +	__u64	aio_reserved2;	/* TODO: use this for a (struct sigevent *) */ + +	/* flags for the "struct iocb" */ +	__u32	aio_flags; + +	/* +	 * if the IOCB_FLAG_RESFD flag of "aio_flags" is set, this is an +	 * eventfd to signal AIO readiness to +	 */ +	__u32	aio_resfd; +}; /* 64 bytes */ + +#undef IFBIG +#undef IFLITTLE + +#endif /* __LINUX__AIO_ABI_H */ + diff --git a/include/uapi/linux/apm_bios.h b/include/uapi/linux/apm_bios.h new file mode 100644 index 00000000000..724f409adae --- /dev/null +++ b/include/uapi/linux/apm_bios.h @@ -0,0 +1,135 @@ +/* + * Include file for the interface to an APM BIOS + * Copyright 1994-2001 Stephen Rothwell (sfr@canb.auug.org.au) + * + * 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, 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. + */ +#ifndef _UAPI_LINUX_APM_H +#define _UAPI_LINUX_APM_H + + +#include <linux/types.h> + +typedef unsigned short	apm_event_t; +typedef unsigned short	apm_eventinfo_t; + +struct apm_bios_info { +	__u16	version; +	__u16	cseg; +	__u32	offset; +	__u16	cseg_16; +	__u16	dseg; +	__u16	flags; +	__u16	cseg_len; +	__u16	cseg_16_len; +	__u16	dseg_len; +}; + + +/* + * Power states + */ +#define APM_STATE_READY		0x0000 +#define APM_STATE_STANDBY	0x0001 +#define APM_STATE_SUSPEND	0x0002 +#define APM_STATE_OFF		0x0003 +#define APM_STATE_BUSY		0x0004 +#define APM_STATE_REJECT	0x0005 +#define APM_STATE_OEM_SYS	0x0020 +#define APM_STATE_OEM_DEV	0x0040 + +#define APM_STATE_DISABLE	0x0000 +#define APM_STATE_ENABLE	0x0001 + +#define APM_STATE_DISENGAGE	0x0000 +#define APM_STATE_ENGAGE	0x0001 + +/* + * Events (results of Get PM Event) + */ +#define APM_SYS_STANDBY		0x0001 +#define APM_SYS_SUSPEND		0x0002 +#define APM_NORMAL_RESUME	0x0003 +#define APM_CRITICAL_RESUME	0x0004 +#define APM_LOW_BATTERY		0x0005 +#define APM_POWER_STATUS_CHANGE	0x0006 +#define APM_UPDATE_TIME		0x0007 +#define APM_CRITICAL_SUSPEND	0x0008 +#define APM_USER_STANDBY	0x0009 +#define APM_USER_SUSPEND	0x000a +#define APM_STANDBY_RESUME	0x000b +#define APM_CAPABILITY_CHANGE	0x000c + +/* + * Error codes + */ +#define APM_SUCCESS		0x00 +#define APM_DISABLED		0x01 +#define APM_CONNECTED		0x02 +#define APM_NOT_CONNECTED	0x03 +#define APM_16_CONNECTED	0x05 +#define APM_16_UNSUPPORTED	0x06 +#define APM_32_CONNECTED	0x07 +#define APM_32_UNSUPPORTED	0x08 +#define APM_BAD_DEVICE		0x09 +#define APM_BAD_PARAM		0x0a +#define APM_NOT_ENGAGED		0x0b +#define APM_BAD_FUNCTION	0x0c +#define APM_RESUME_DISABLED	0x0d +#define APM_NO_ERROR		0x53 +#define APM_BAD_STATE		0x60 +#define APM_NO_EVENTS		0x80 +#define APM_NOT_PRESENT		0x86 + +/* + * APM Device IDs + */ +#define APM_DEVICE_BIOS		0x0000 +#define APM_DEVICE_ALL		0x0001 +#define APM_DEVICE_DISPLAY	0x0100 +#define APM_DEVICE_STORAGE	0x0200 +#define APM_DEVICE_PARALLEL	0x0300 +#define APM_DEVICE_SERIAL	0x0400 +#define APM_DEVICE_NETWORK	0x0500 +#define APM_DEVICE_PCMCIA	0x0600 +#define APM_DEVICE_BATTERY	0x8000 +#define APM_DEVICE_OEM		0xe000 +#define APM_DEVICE_OLD_ALL	0xffff +#define APM_DEVICE_CLASS	0x00ff +#define APM_DEVICE_MASK		0xff00 + + +/* + * Battery status + */ +#define APM_MAX_BATTERIES	2 + +/* + * APM defined capability bit flags + */ +#define APM_CAP_GLOBAL_STANDBY		0x0001 +#define APM_CAP_GLOBAL_SUSPEND		0x0002 +#define APM_CAP_RESUME_STANDBY_TIMER	0x0004 /* Timer resume from standby */ +#define APM_CAP_RESUME_SUSPEND_TIMER	0x0008 /* Timer resume from suspend */ +#define APM_CAP_RESUME_STANDBY_RING	0x0010 /* Resume on Ring fr standby */ +#define APM_CAP_RESUME_SUSPEND_RING	0x0020 /* Resume on Ring fr suspend */ +#define APM_CAP_RESUME_STANDBY_PCMCIA	0x0040 /* Resume on PCMCIA Ring	*/ +#define APM_CAP_RESUME_SUSPEND_PCMCIA	0x0080 /* Resume on PCMCIA Ring	*/ + +/* + * ioctl operations + */ +#include <linux/ioctl.h> + +#define APM_IOC_STANDBY		_IO('A', 1) +#define APM_IOC_SUSPEND		_IO('A', 2) + +#endif /* _UAPI_LINUX_APM_H */ diff --git a/include/uapi/linux/arcfb.h b/include/uapi/linux/arcfb.h new file mode 100644 index 00000000000..721e7654dae --- /dev/null +++ b/include/uapi/linux/arcfb.h @@ -0,0 +1,8 @@ +#ifndef __LINUX_ARCFB_H__ +#define __LINUX_ARCFB_H__ + +#define FBIO_WAITEVENT		_IO('F', 0x88) +#define FBIO_GETCONTROL2	_IOR('F', 0x89, size_t) + +#endif + diff --git a/include/uapi/linux/atalk.h b/include/uapi/linux/atalk.h new file mode 100644 index 00000000000..4bcd596e638 --- /dev/null +++ b/include/uapi/linux/atalk.h @@ -0,0 +1,44 @@ +#ifndef _UAPI__LINUX_ATALK_H__ +#define _UAPI__LINUX_ATALK_H__ + +#include <linux/types.h> +#include <asm/byteorder.h> +#include <linux/socket.h> + +/* + * AppleTalk networking structures + * + * The following are directly referenced from the University Of Michigan + * netatalk for compatibility reasons. + */ +#define ATPORT_FIRST	1 +#define ATPORT_RESERVED	128 +#define ATPORT_LAST	254		/* 254 is only legal on localtalk */  +#define ATADDR_ANYNET	(__u16)0 +#define ATADDR_ANYNODE	(__u8)0 +#define ATADDR_ANYPORT  (__u8)0 +#define ATADDR_BCAST	(__u8)255 +#define DDP_MAXSZ	587 +#define DDP_MAXHOPS     15		/* 4 bits of hop counter */ + +#define SIOCATALKDIFADDR       (SIOCPROTOPRIVATE + 0) + +struct atalk_addr { +	__be16	s_net; +	__u8	s_node; +}; + +struct sockaddr_at { +	__kernel_sa_family_t sat_family; +	__u8		  sat_port; +	struct atalk_addr sat_addr; +	char		  sat_zero[8]; +}; + +struct atalk_netrange { +	__u8	nr_phase; +	__be16	nr_firstnet; +	__be16	nr_lastnet; +}; + +#endif /* _UAPI__LINUX_ATALK_H__ */ diff --git a/include/uapi/linux/atm.h b/include/uapi/linux/atm.h new file mode 100644 index 00000000000..88399db602a --- /dev/null +++ b/include/uapi/linux/atm.h @@ -0,0 +1,241 @@ +/* atm.h - general ATM declarations */ +  +/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */ +  + +/* + * WARNING: User-space programs should not #include <linux/atm.h> directly. + *          Instead, #include <atm.h> + */ + +#ifndef _UAPI_LINUX_ATM_H +#define _UAPI_LINUX_ATM_H + +/* + * BEGIN_xx and END_xx markers are used for automatic generation of + * documentation. Do not change them. + */ + +#include <linux/compiler.h> +#include <linux/atmapi.h> +#include <linux/atmsap.h> +#include <linux/atmioc.h> +#include <linux/types.h> + + +/* general ATM constants */ +#define ATM_CELL_SIZE		    53	/* ATM cell size incl. header */ +#define ATM_CELL_PAYLOAD	    48	/* ATM payload size */ +#define ATM_AAL0_SDU		    52	/* AAL0 SDU size */ +#define ATM_MAX_AAL34_PDU	 65535	/* maximum AAL3/4 PDU payload */ +#define ATM_AAL5_TRAILER	     8	/* AAL5 trailer size */ +#define ATM_MAX_AAL5_PDU	 65535	/* maximum AAL5 PDU payload */ +#define ATM_MAX_CDV		  9999	/* maximum (default) CDV */ +#define ATM_NOT_RSV_VCI		    32	/* first non-reserved VCI value */ + +#define ATM_MAX_VPI		   255	/* maximum VPI at the UNI */ +#define ATM_MAX_VPI_NNI		  4096	/* maximum VPI at the NNI */ +#define ATM_MAX_VCI		 65535	/* maximum VCI */ + + +/* "protcol" values for the socket system call */ +#define ATM_NO_AAL	0		/* AAL not specified */ +#define ATM_AAL0	13		/* "raw" ATM cells */ +#define ATM_AAL1	1		/* AAL1 (CBR) */ +#define ATM_AAL2	2		/* AAL2 (VBR) */ +#define ATM_AAL34	3		/* AAL3/4 (data) */ +#define ATM_AAL5	5		/* AAL5 (data) */ + +/* + * socket option name coding functions + * + * Note that __SO_ENCODE and __SO_LEVEL are somewhat a hack since the + * << 22 only reserves 9 bits for the level.  On some architectures + * SOL_SOCKET is 0xFFFF, so that's a bit of a problem + */ + +#define __SO_ENCODE(l,n,t)	((((l) & 0x1FF) << 22) | ((n) << 16) | \ +				sizeof(t)) +#define __SO_LEVEL_MATCH(c,m)	(((c) >> 22) == ((m) & 0x1FF)) +#define __SO_NUMBER(c)		(((c) >> 16) & 0x3f) +#define __SO_SIZE(c)		((c) & 0x3fff) + +/* + * ATM layer + */ + +#define SO_SETCLP	__SO_ENCODE(SOL_ATM,0,int) +			    /* set CLP bit value - TODO */ +#define SO_CIRANGE	__SO_ENCODE(SOL_ATM,1,struct atm_cirange) +			    /* connection identifier range; socket must be +			       bound or connected */ +#define SO_ATMQOS	__SO_ENCODE(SOL_ATM,2,struct atm_qos) +			    /* Quality of Service setting */ +#define SO_ATMSAP	__SO_ENCODE(SOL_ATM,3,struct atm_sap) +			    /* Service Access Point */ +#define SO_ATMPVC	__SO_ENCODE(SOL_ATM,4,struct sockaddr_atmpvc) +			    /* "PVC" address (also for SVCs); get only */ +#define SO_MULTIPOINT	__SO_ENCODE(SOL_ATM, 5, int) +			    /* make this vc a p2mp */ + + +/* + * Note @@@: since the socket layers don't really distinguish the control and + * the data plane but generally seems to be data plane-centric, any layer is + * about equally wrong for the SAP. If you have a better idea about this, + * please speak up ... + */ + + +/* ATM cell header (for AAL0) */ + +/* BEGIN_CH */ +#define ATM_HDR_GFC_MASK	0xf0000000 +#define ATM_HDR_GFC_SHIFT	28 +#define ATM_HDR_VPI_MASK	0x0ff00000 +#define ATM_HDR_VPI_SHIFT	20 +#define ATM_HDR_VCI_MASK	0x000ffff0 +#define ATM_HDR_VCI_SHIFT	4 +#define ATM_HDR_PTI_MASK	0x0000000e +#define ATM_HDR_PTI_SHIFT	1 +#define ATM_HDR_CLP		0x00000001 +/* END_CH */ + + +/* PTI codings */ + +/* BEGIN_PTI */ +#define ATM_PTI_US0	0  /* user data cell, congestion not exp, SDU-type 0 */ +#define ATM_PTI_US1	1  /* user data cell, congestion not exp, SDU-type 1 */ +#define ATM_PTI_UCES0	2  /* user data cell, cong. experienced, SDU-type 0 */ +#define ATM_PTI_UCES1	3  /* user data cell, cong. experienced, SDU-type 1 */ +#define ATM_PTI_SEGF5	4  /* segment OAM F5 flow related cell */ +#define ATM_PTI_E2EF5	5  /* end-to-end OAM F5 flow related cell */ +#define ATM_PTI_RSV_RM	6  /* reserved for traffic control/resource mgmt */ +#define ATM_PTI_RSV	7  /* reserved */ +/* END_PTI */ + + +/* + * The following items should stay in linux/atm.h, which should be linked to + * netatm/atm.h + */ + +/* Traffic description */ + +#define ATM_NONE	0		/* no traffic */ +#define ATM_UBR		1 +#define ATM_CBR		2 +#define ATM_VBR		3 +#define ATM_ABR		4 +#define ATM_ANYCLASS	5		/* compatible with everything */ + +#define ATM_MAX_PCR	-1		/* maximum available PCR */ + +struct atm_trafprm { +	unsigned char	traffic_class;	/* traffic class (ATM_UBR, ...) */ +	int		max_pcr;	/* maximum PCR in cells per second */ +	int		pcr;		/* desired PCR in cells per second */ +	int		min_pcr;	/* minimum PCR in cells per second */ +	int		max_cdv;	/* maximum CDV in microseconds */ +	int		max_sdu;	/* maximum SDU in bytes */ +        /* extra params for ABR */ +        unsigned int 	icr;         	/* Initial Cell Rate (24-bit) */ +        unsigned int	tbe;		/* Transient Buffer Exposure (24-bit) */  +        unsigned int 	frtt : 24;	/* Fixed Round Trip Time (24-bit) */ +        unsigned int 	rif  : 4;       /* Rate Increment Factor (4-bit) */ +        unsigned int 	rdf  : 4;       /* Rate Decrease Factor (4-bit) */ +        unsigned int nrm_pres  :1;      /* nrm present bit */ +        unsigned int trm_pres  :1;     	/* rm present bit */ +        unsigned int adtf_pres :1;     	/* adtf present bit */ +        unsigned int cdf_pres  :1;    	/* cdf present bit*/ +        unsigned int nrm       :3;     	/* Max # of Cells for each forward RM cell (3-bit) */ +        unsigned int trm       :3;    	/* Time between forward RM cells (3-bit) */     +	unsigned int adtf      :10;     /* ACR Decrease Time Factor (10-bit) */ +	unsigned int cdf       :3;      /* Cutoff Decrease Factor (3-bit) */ +        unsigned int spare     :9;      /* spare bits */  +}; + +struct atm_qos { +	struct atm_trafprm txtp;	/* parameters in TX direction */ +	struct atm_trafprm rxtp __ATM_API_ALIGN; +					/* parameters in RX direction */ +	unsigned char aal __ATM_API_ALIGN; +}; + +/* PVC addressing */ + +#define ATM_ITF_ANY	-1		/* "magic" PVC address values */ +#define ATM_VPI_ANY	-1 +#define ATM_VCI_ANY	-1 +#define ATM_VPI_UNSPEC	-2 +#define ATM_VCI_UNSPEC	-2 + + +struct sockaddr_atmpvc { +	unsigned short 	sap_family;	/* address family, AF_ATMPVC  */ +	struct {			/* PVC address */ +		short	itf;		/* ATM interface */ +		short	vpi;		/* VPI (only 8 bits at UNI) */ +		int	vci;		/* VCI (only 16 bits at UNI) */ +	} sap_addr __ATM_API_ALIGN;	/* PVC address */ +}; + +/* SVC addressing */ + +#define	ATM_ESA_LEN	20		/* ATM End System Address length */ +#define ATM_E164_LEN	12		/* maximum E.164 number length */ + +#define ATM_AFI_DCC	0x39		/* DCC ATM Format */ +#define ATM_AFI_ICD	0x47		/* ICD ATM Format */ +#define ATM_AFI_E164	0x45		/* E.164 ATM Format */ +#define ATM_AFI_LOCAL	0x49		/* Local ATM Format */  + +#define ATM_AFI_DCC_GROUP	0xBD	/* DCC ATM Group Format */ +#define ATM_AFI_ICD_GROUP	0xC5	/* ICD ATM Group Format */ +#define ATM_AFI_E164_GROUP	0xC3	/* E.164 ATM Group Format */ +#define ATM_AFI_LOCAL_GROUP	0xC7	/* Local ATM Group Format */ + +#define ATM_LIJ_NONE	0		/* no leaf-initiated join */ +#define ATM_LIJ		1		/* request joining */ +#define ATM_LIJ_RPJ	2		/* set to root-prompted join */ +#define ATM_LIJ_NJ	3		/* set to network join */ + + +struct sockaddr_atmsvc { +    unsigned short 	sas_family;	/* address family, AF_ATMSVC */ +    struct {				/* SVC address */ +        unsigned char	prv[ATM_ESA_LEN];/* private ATM address */ +        char		pub[ATM_E164_LEN+1]; /* public address (E.164) */ +    					/* unused addresses must be bzero'ed */ +	char		lij_type;	/* role in LIJ call; one of ATM_LIJ* */ +	__u32	lij_id;		/* LIJ call identifier */ +    } sas_addr __ATM_API_ALIGN;		/* SVC address */ +}; + + +static __inline__ int atmsvc_addr_in_use(struct sockaddr_atmsvc addr) +{ +	return *addr.sas_addr.prv || *addr.sas_addr.pub; +} + + +static __inline__ int atmpvc_addr_in_use(struct sockaddr_atmpvc addr) +{ +	return addr.sap_addr.itf || addr.sap_addr.vpi || addr.sap_addr.vci; +} + + +/* + * Some stuff for linux/sockios.h + */ + +struct atmif_sioc { +	int number; +	int length; +	void __user *arg; +}; + + +typedef unsigned short atm_backend_t; +#endif /* _UAPI_LINUX_ATM_H */ diff --git a/include/uapi/linux/atm_eni.h b/include/uapi/linux/atm_eni.h new file mode 100644 index 00000000000..34f31797255 --- /dev/null +++ b/include/uapi/linux/atm_eni.h @@ -0,0 +1,23 @@ +/* atm_eni.h - Driver-specific declarations of the ENI driver (for use by +	       driver-specific utilities) */ + +/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */ + + +#ifndef LINUX_ATM_ENI_H +#define LINUX_ATM_ENI_H + +#include <linux/atmioc.h> + + +struct eni_multipliers { +	int tx,rx;	/* values are in percent and must be > 100 */ +}; + + +#define ENI_MEMDUMP     _IOW('a',ATMIOC_SARPRV,struct atmif_sioc) +                                                /* printk memory map */ +#define ENI_SETMULT	_IOW('a',ATMIOC_SARPRV+7,struct atmif_sioc) +						/* set buffer multipliers */ + +#endif diff --git a/include/uapi/linux/atm_he.h b/include/uapi/linux/atm_he.h new file mode 100644 index 00000000000..2a7713b597c --- /dev/null +++ b/include/uapi/linux/atm_he.h @@ -0,0 +1,20 @@ +/* atm_he.h */ + +#ifndef LINUX_ATM_HE_H +#define LINUX_ATM_HE_H + +#include <linux/atmioc.h> + +#define HE_GET_REG	_IOW('a', ATMIOC_SARPRV, struct atmif_sioc) + +#define HE_REGTYPE_PCI	1 +#define HE_REGTYPE_RCM	2 +#define HE_REGTYPE_TCM	3 +#define HE_REGTYPE_MBOX	4 + +struct he_ioctl_reg { +	unsigned addr, val; +	char type; +}; + +#endif /* LINUX_ATM_HE_H */ diff --git a/include/uapi/linux/atm_idt77105.h b/include/uapi/linux/atm_idt77105.h new file mode 100644 index 00000000000..8b724000aa5 --- /dev/null +++ b/include/uapi/linux/atm_idt77105.h @@ -0,0 +1,28 @@ +/* atm_idt77105.h - Driver-specific declarations of the IDT77105 driver (for + * use by driver-specific utilities) */ + +/* Written 1999 by Greg Banks <gnb@linuxfan.com>. Copied from atm_suni.h. */ + + +#ifndef LINUX_ATM_IDT77105_H +#define LINUX_ATM_IDT77105_H + +#include <linux/types.h> +#include <linux/atmioc.h> +#include <linux/atmdev.h> + +/* + * Structure for IDT77105_GETSTAT and IDT77105_GETSTATZ ioctls. + * Pointed to by `arg' in atmif_sioc. + */ +struct idt77105_stats { +        __u32 symbol_errors;  /* wire symbol errors */ +        __u32 tx_cells;       /* cells transmitted */ +        __u32 rx_cells;       /* cells received */ +        __u32 rx_hec_errors;  /* Header Error Check errors on receive */ +}; + +#define IDT77105_GETSTAT	_IOW('a',ATMIOC_PHYPRV+2,struct atmif_sioc)	/* get stats */ +#define IDT77105_GETSTATZ	_IOW('a',ATMIOC_PHYPRV+3,struct atmif_sioc)	/* get stats and zero */ + +#endif diff --git a/include/uapi/linux/atm_nicstar.h b/include/uapi/linux/atm_nicstar.h new file mode 100644 index 00000000000..577b79f33e8 --- /dev/null +++ b/include/uapi/linux/atm_nicstar.h @@ -0,0 +1,53 @@ +/****************************************************************************** + * + * atm_nicstar.h + * + * Driver-specific declarations for use by NICSTAR driver specific utils. + * + * Author: Rui Prior + * + * (C) INESC 1998 + * + ******************************************************************************/ + + +#ifndef LINUX_ATM_NICSTAR_H +#define LINUX_ATM_NICSTAR_H + +/* Note: non-kernel programs including this file must also include + * sys/types.h for struct timeval + */ + +#include <linux/atmapi.h> +#include <linux/atmioc.h> + +#define NS_GETPSTAT	_IOWR('a',ATMIOC_SARPRV+1,struct atmif_sioc) +						/* get pool statistics */ +#define NS_SETBUFLEV	_IOW('a',ATMIOC_SARPRV+2,struct atmif_sioc) +						/* set buffer level markers */ +#define NS_ADJBUFLEV	_IO('a',ATMIOC_SARPRV+3) +						/* adjust buffer level */ + +typedef struct buf_nr +{ +   unsigned min; +   unsigned init; +   unsigned max; +}buf_nr; + + +typedef struct pool_levels +{ +   int buftype; +   int count;		/* (At least for now) only used in NS_GETPSTAT */ +   buf_nr level; +} pool_levels; + +/* type must be one of the following: */ +#define NS_BUFTYPE_SMALL 1 +#define NS_BUFTYPE_LARGE 2 +#define NS_BUFTYPE_HUGE 3 +#define NS_BUFTYPE_IOVEC 4 + + +#endif /* LINUX_ATM_NICSTAR_H */ diff --git a/include/uapi/linux/atm_tcp.h b/include/uapi/linux/atm_tcp.h new file mode 100644 index 00000000000..914e821da64 --- /dev/null +++ b/include/uapi/linux/atm_tcp.h @@ -0,0 +1,61 @@ +/* atm_tcp.h - Driver-specific declarations of the ATMTCP driver (for use by +	       driver-specific utilities) */ + +/* Written 1997-2000 by Werner Almesberger, EPFL LRC/ICA */ + + +#ifndef _UAPILINUX_ATM_TCP_H +#define _UAPILINUX_ATM_TCP_H + +#include <linux/atmapi.h> +#include <linux/atm.h> +#include <linux/atmioc.h> +#include <linux/types.h> + + +/* + * All values in struct atmtcp_hdr are in network byte order + */ + +struct atmtcp_hdr { +	__u16	vpi; +	__u16	vci; +	__u32	length;		/* ... of data part */ +}; + +/* + * All values in struct atmtcp_command are in host byte order + */ + +#define ATMTCP_HDR_MAGIC	(~0)	/* this length indicates a command */ +#define ATMTCP_CTRL_OPEN	1	/* request/reply */ +#define ATMTCP_CTRL_CLOSE	2	/* request/reply */ + +struct atmtcp_control { +	struct atmtcp_hdr hdr;	/* must be first */ +	int type;		/* message type; both directions */ +	atm_kptr_t vcc;		/* both directions */ +	struct sockaddr_atmpvc addr; /* suggested value from kernel */ +	struct atm_qos	qos;	/* both directions */ +	int result;		/* to kernel only */ +} __ATM_API_ALIGN; + +/* + * Field usage: + * Messge type	dir.	hdr.v?i	type	addr	qos	vcc	result + * -----------  ----	------- ----	----	---	---	------ + * OPEN		K->D	Y	Y	Y	Y	Y	0 + * OPEN		D->K	-	Y	Y	Y	Y	Y + * CLOSE	K->D	-	-	Y	-	Y	0 + * CLOSE	D->K	-	-	-	-	Y	Y + */ + +#define SIOCSIFATMTCP	_IO('a',ATMIOC_ITF)	/* set ATMTCP mode */ +#define ATMTCP_CREATE	_IO('a',ATMIOC_ITF+14)	/* create persistent ATMTCP +						   interface */ +#define ATMTCP_REMOVE	_IO('a',ATMIOC_ITF+15)	/* destroy persistent ATMTCP +						   interface */ + + + +#endif /* _UAPILINUX_ATM_TCP_H */ diff --git a/include/uapi/linux/atm_zatm.h b/include/uapi/linux/atm_zatm.h new file mode 100644 index 00000000000..10f0fa29454 --- /dev/null +++ b/include/uapi/linux/atm_zatm.h @@ -0,0 +1,52 @@ +/* atm_zatm.h - Driver-specific declarations of the ZATM driver (for use by +		driver-specific utilities) */ + +/* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */ + + +#ifndef LINUX_ATM_ZATM_H +#define LINUX_ATM_ZATM_H + +/* + * Note: non-kernel programs including this file must also include + * sys/types.h for struct timeval + */ + +#include <linux/atmapi.h> +#include <linux/atmioc.h> + +#define ZATM_GETPOOL	_IOW('a',ATMIOC_SARPRV+1,struct atmif_sioc) +						/* get pool statistics */ +#define ZATM_GETPOOLZ	_IOW('a',ATMIOC_SARPRV+2,struct atmif_sioc) +						/* get statistics and zero */ +#define ZATM_SETPOOL	_IOW('a',ATMIOC_SARPRV+3,struct atmif_sioc) +						/* set pool parameters */ + +struct zatm_pool_info { +	int ref_count;			/* free buffer pool usage counters */ +	int low_water,high_water;	/* refill parameters */ +	int rqa_count,rqu_count;	/* queue condition counters */ +	int offset,next_off;		/* alignment optimizations: offset */ +	int next_cnt,next_thres;	/* repetition counter and threshold */ +}; + +struct zatm_pool_req { +	int pool_num;			/* pool number */ +	struct zatm_pool_info info;	/* actual information */ +}; + +struct zatm_t_hist { +	struct timeval real;		/* real (wall-clock) time */ +	struct timeval expected;	/* expected real time */ +}; + + +#define ZATM_OAM_POOL		0	/* free buffer pool for OAM cells */ +#define ZATM_AAL0_POOL		1	/* free buffer pool for AAL0 cells */ +#define ZATM_AAL5_POOL_BASE	2	/* first AAL5 free buffer pool */ +#define ZATM_LAST_POOL	ZATM_AAL5_POOL_BASE+10 /* max. 64 kB */ + +#define ZATM_TIMER_HISTORY_SIZE	16	/* number of timer adjustments to +					   record; must be 2^n */ + +#endif diff --git a/include/uapi/linux/atmapi.h b/include/uapi/linux/atmapi.h new file mode 100644 index 00000000000..8fe54d90d95 --- /dev/null +++ b/include/uapi/linux/atmapi.h @@ -0,0 +1,29 @@ +/* atmapi.h - ATM API user space/kernel compatibility */ +  +/* Written 1999,2000 by Werner Almesberger, EPFL ICA */ +  + +#ifndef _LINUX_ATMAPI_H +#define _LINUX_ATMAPI_H + +#if defined(__sparc__) || defined(__ia64__) +/* such alignment is not required on 32 bit sparcs, but we can't +   figure that we are on a sparc64 while compiling user-space programs. */ +#define __ATM_API_ALIGN	__attribute__((aligned(8))) +#else +#define __ATM_API_ALIGN +#endif + + +/* + * Opaque type for kernel pointers. Note that _ is never accessed. We need + * the struct in order hide the array, so that we can make simple assignments + * instead of being forced to use memcpy. It also improves error reporting for + * code that still assumes that we're passing unsigned longs. + * + * Convention: NULL pointers are passed as a field of all zeroes. + */ +  +typedef struct { unsigned char _[8]; } __ATM_API_ALIGN atm_kptr_t; + +#endif diff --git a/include/uapi/linux/atmarp.h b/include/uapi/linux/atmarp.h new file mode 100644 index 00000000000..231f4bdec73 --- /dev/null +++ b/include/uapi/linux/atmarp.h @@ -0,0 +1,41 @@ +/* atmarp.h - ATM ARP protocol and kernel-demon interface definitions */ +  +/* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */ +  + +#ifndef _LINUX_ATMARP_H +#define _LINUX_ATMARP_H + +#include <linux/types.h> +#include <linux/atmapi.h> +#include <linux/atmioc.h> + + +#define ATMARP_RETRY_DELAY 30		/* request next resolution or forget +					   NAK after 30 sec - should go into +					   atmclip.h */ +#define ATMARP_MAX_UNRES_PACKETS 5	/* queue that many packets while +					   waiting for the resolver */ + + +#define ATMARPD_CTRL	_IO('a',ATMIOC_CLIP+1)	/* become atmarpd ctrl sock */ +#define ATMARP_MKIP	_IO('a',ATMIOC_CLIP+2)	/* attach socket to IP */ +#define ATMARP_SETENTRY	_IO('a',ATMIOC_CLIP+3)	/* fill or hide ARP entry */ +#define ATMARP_ENCAP	_IO('a',ATMIOC_CLIP+5)	/* change encapsulation */ + + +enum atmarp_ctrl_type { +	act_invalid,		/* catch uninitialized structures */ +	act_need,		/* need address resolution */ +	act_up,			/* interface is coming up */ +	act_down,		/* interface is going down */ +	act_change		/* interface configuration has changed */ +}; + +struct atmarp_ctrl { +	enum atmarp_ctrl_type	type;	/* message type */ +	int			itf_num;/* interface number (if present) */ +	__be32			ip;	/* IP address (act_need only) */ +}; + +#endif diff --git a/include/uapi/linux/atmbr2684.h b/include/uapi/linux/atmbr2684.h new file mode 100644 index 00000000000..fdb2629b618 --- /dev/null +++ b/include/uapi/linux/atmbr2684.h @@ -0,0 +1,117 @@ +#ifndef _LINUX_ATMBR2684_H +#define _LINUX_ATMBR2684_H + +#include <linux/types.h> +#include <linux/atm.h> +#include <linux/if.h>		/* For IFNAMSIZ */ + +/* + * Type of media we're bridging (ethernet, token ring, etc)  Currently only + * ethernet is supported + */ +#define BR2684_MEDIA_ETHERNET	(0)	/* 802.3 */ +#define BR2684_MEDIA_802_4	(1)	/* 802.4 */ +#define BR2684_MEDIA_TR		(2)	/* 802.5 - token ring */ +#define BR2684_MEDIA_FDDI	(3) +#define BR2684_MEDIA_802_6	(4)	/* 802.6 */ + +					/* used only at device creation:  */ +#define BR2684_FLAG_ROUTED	(1<<16)	/* payload is routed, not bridged */ + +/* + * Is there FCS inbound on this VC?  This currently isn't supported. + */ +#define BR2684_FCSIN_NO		(0) +#define BR2684_FCSIN_IGNORE	(1) +#define BR2684_FCSIN_VERIFY	(2) + +/* + * Is there FCS outbound on this VC?  This currently isn't supported. + */ +#define BR2684_FCSOUT_NO	(0) +#define BR2684_FCSOUT_SENDZERO	(1) +#define BR2684_FCSOUT_GENERATE	(2) + +/* + * Does this VC include LLC encapsulation? + */ +#define BR2684_ENCAPS_VC	(0)	/* VC-mux */ +#define BR2684_ENCAPS_LLC	(1) +#define BR2684_ENCAPS_AUTODETECT (2)	/* Unsuported */ + +/* + * Is this VC bridged or routed? + */ + +#define BR2684_PAYLOAD_ROUTED   (0) +#define BR2684_PAYLOAD_BRIDGED  (1) + +/* + * This is for the ATM_NEWBACKENDIF call - these are like socket families: + * the first element of the structure is the backend number and the rest + * is per-backend specific + */ +struct atm_newif_br2684 { +	atm_backend_t backend_num;	/* ATM_BACKEND_BR2684 */ +	int media;		/* BR2684_MEDIA_*, flags in upper bits */ +	char ifname[IFNAMSIZ]; +	int mtu; +}; + +/* + * This structure is used to specify a br2684 interface - either by a + * positive integer (returned by ATM_NEWBACKENDIF) or the interfaces name + */ +#define BR2684_FIND_BYNOTHING	(0) +#define BR2684_FIND_BYNUM	(1) +#define BR2684_FIND_BYIFNAME	(2) +struct br2684_if_spec { +	int method;		/* BR2684_FIND_* */ +	union { +		char ifname[IFNAMSIZ]; +		int devnum; +	} spec; +}; + +/* + * This is for the ATM_SETBACKEND call - these are like socket families: + * the first element of the structure is the backend number and the rest + * is per-backend specific + */ +struct atm_backend_br2684 { +	atm_backend_t backend_num;	/* ATM_BACKEND_BR2684 */ +	struct br2684_if_spec ifspec; +	int fcs_in;		/* BR2684_FCSIN_* */ +	int fcs_out;		/* BR2684_FCSOUT_* */ +	int fcs_auto;		/* 1: fcs_{in,out} disabled if no FCS rx'ed */ +	int encaps;		/* BR2684_ENCAPS_* */ +	int has_vpiid;		/* 1: use vpn_id - Unsupported */ +	__u8 vpn_id[7]; +	int send_padding;	/* unsupported */ +	int min_size;		/* we will pad smaller packets than this */ +}; + +/* + * The BR2684_SETFILT ioctl is an experimental mechanism for folks + * terminating a large number of IP-only vcc's.  When netfilter allows + * efficient per-if in/out filters, this support will be removed + */ +struct br2684_filter { +	__be32 prefix;		/* network byte order */ +	__be32 netmask;		/* 0 = disable filter */ +}; + +struct br2684_filter_set { +	struct br2684_if_spec ifspec; +	struct br2684_filter filter; +}; + +enum br2684_payload { +	p_routed = BR2684_PAYLOAD_ROUTED, +	p_bridged = BR2684_PAYLOAD_BRIDGED, +}; + +#define BR2684_SETFILT	_IOW( 'a', ATMIOC_BACKEND + 0, \ +				struct br2684_filter_set) + +#endif /* _LINUX_ATMBR2684_H */ diff --git a/include/uapi/linux/atmclip.h b/include/uapi/linux/atmclip.h new file mode 100644 index 00000000000..02c94c448dd --- /dev/null +++ b/include/uapi/linux/atmclip.h @@ -0,0 +1,21 @@ +/* atmclip.h - Classical IP over ATM */ +  +/* Written 1995-1998 by Werner Almesberger, EPFL LRC/ICA */ +  + +#ifndef LINUX_ATMCLIP_H +#define LINUX_ATMCLIP_H + +#include <linux/sockios.h> +#include <linux/atmioc.h> + + +#define RFC1483LLC_LEN	8		/* LLC+OUI+PID = 8 */ +#define RFC1626_MTU	9180		/* RFC1626 default MTU */ + +#define CLIP_DEFAULT_IDLETIMER 1200	/* 20 minutes, see RFC1755 */ +#define CLIP_CHECK_INTERVAL	 10	/* check every ten seconds */ + +#define	SIOCMKCLIP	_IO('a',ATMIOC_CLIP)	/* create IP interface */ + +#endif diff --git a/include/uapi/linux/atmdev.h b/include/uapi/linux/atmdev.h new file mode 100644 index 00000000000..93e0ec008ca --- /dev/null +++ b/include/uapi/linux/atmdev.h @@ -0,0 +1,215 @@ +/* atmdev.h - ATM device driver declarations and various related items */ +  +/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */ +  + +#ifndef _UAPILINUX_ATMDEV_H +#define _UAPILINUX_ATMDEV_H + + +#include <linux/atmapi.h> +#include <linux/atm.h> +#include <linux/atmioc.h> + + +#define ESI_LEN		6 + +#define ATM_OC3_PCR	(155520000/270*260/8/53) +			/* OC3 link rate:  155520000 bps +			   SONET overhead: /270*260 (9 section, 1 path) +			   bits per cell:  /8/53 +			   max cell rate:  353207.547 cells/sec */ +#define ATM_25_PCR	((25600000/8-8000)/54) +			/* 25 Mbps ATM cell rate (59111) */ +#define ATM_OC12_PCR	(622080000/1080*1040/8/53) +			/* OC12 link rate: 622080000 bps +			   SONET overhead: /1080*1040 +			   bits per cell:  /8/53 +			   max cell rate:  1412830.188 cells/sec */ +#define ATM_DS3_PCR	(8000*12) +			/* DS3: 12 cells in a 125 usec time slot */ + + +#define __AAL_STAT_ITEMS \ +    __HANDLE_ITEM(tx);			/* TX okay */ \ +    __HANDLE_ITEM(tx_err);		/* TX errors */ \ +    __HANDLE_ITEM(rx);			/* RX okay */ \ +    __HANDLE_ITEM(rx_err);		/* RX errors */ \ +    __HANDLE_ITEM(rx_drop);		/* RX out of memory */ + +struct atm_aal_stats { +#define __HANDLE_ITEM(i) int i +	__AAL_STAT_ITEMS +#undef __HANDLE_ITEM +}; + + +struct atm_dev_stats { +	struct atm_aal_stats aal0; +	struct atm_aal_stats aal34; +	struct atm_aal_stats aal5; +} __ATM_API_ALIGN; + + +#define ATM_GETLINKRATE	_IOW('a',ATMIOC_ITF+1,struct atmif_sioc) +					/* get link rate */ +#define ATM_GETNAMES	_IOW('a',ATMIOC_ITF+3,struct atm_iobuf) +					/* get interface names (numbers) */ +#define ATM_GETTYPE	_IOW('a',ATMIOC_ITF+4,struct atmif_sioc) +					/* get interface type name */ +#define ATM_GETESI	_IOW('a',ATMIOC_ITF+5,struct atmif_sioc) +					/* get interface ESI */ +#define ATM_GETADDR	_IOW('a',ATMIOC_ITF+6,struct atmif_sioc) +					/* get itf's local ATM addr. list */ +#define ATM_RSTADDR	_IOW('a',ATMIOC_ITF+7,struct atmif_sioc) +					/* reset itf's ATM address list */ +#define ATM_ADDADDR	_IOW('a',ATMIOC_ITF+8,struct atmif_sioc) +					/* add a local ATM address */ +#define ATM_DELADDR	_IOW('a',ATMIOC_ITF+9,struct atmif_sioc) +					/* remove a local ATM address */ +#define ATM_GETCIRANGE	_IOW('a',ATMIOC_ITF+10,struct atmif_sioc) +					/* get connection identifier range */ +#define ATM_SETCIRANGE	_IOW('a',ATMIOC_ITF+11,struct atmif_sioc) +					/* set connection identifier range */ +#define ATM_SETESI	_IOW('a',ATMIOC_ITF+12,struct atmif_sioc) +					/* set interface ESI */ +#define ATM_SETESIF	_IOW('a',ATMIOC_ITF+13,struct atmif_sioc) +					/* force interface ESI */ +#define ATM_ADDLECSADDR	_IOW('a', ATMIOC_ITF+14, struct atmif_sioc) +					/* register a LECS address */ +#define ATM_DELLECSADDR	_IOW('a', ATMIOC_ITF+15, struct atmif_sioc) +					/* unregister a LECS address */ +#define ATM_GETLECSADDR	_IOW('a', ATMIOC_ITF+16, struct atmif_sioc) +					/* retrieve LECS address(es) */ + +#define ATM_GETSTAT	_IOW('a',ATMIOC_SARCOM+0,struct atmif_sioc) +					/* get AAL layer statistics */ +#define ATM_GETSTATZ	_IOW('a',ATMIOC_SARCOM+1,struct atmif_sioc) +					/* get AAL layer statistics and zero */ +#define ATM_GETLOOP	_IOW('a',ATMIOC_SARCOM+2,struct atmif_sioc) +					/* get loopback mode */ +#define ATM_SETLOOP	_IOW('a',ATMIOC_SARCOM+3,struct atmif_sioc) +					/* set loopback mode */ +#define ATM_QUERYLOOP	_IOW('a',ATMIOC_SARCOM+4,struct atmif_sioc) +					/* query supported loopback modes */ +#define ATM_SETSC	_IOW('a',ATMIOC_SPECIAL+1,int) +					/* enable or disable single-copy */ +#define ATM_SETBACKEND	_IOW('a',ATMIOC_SPECIAL+2,atm_backend_t) +					/* set backend handler */ +#define ATM_NEWBACKENDIF _IOW('a',ATMIOC_SPECIAL+3,atm_backend_t) +					/* use backend to make new if */ +#define ATM_ADDPARTY  	_IOW('a', ATMIOC_SPECIAL+4,struct atm_iobuf) + 					/* add party to p2mp call */ +#ifdef CONFIG_COMPAT +/* It actually takes struct sockaddr_atmsvc, not struct atm_iobuf */ +#define COMPAT_ATM_ADDPARTY  	_IOW('a', ATMIOC_SPECIAL+4,struct compat_atm_iobuf) +#endif +#define ATM_DROPPARTY 	_IOW('a', ATMIOC_SPECIAL+5,int) +					/* drop party from p2mp call */ + +/* + * These are backend handkers that can be set via the ATM_SETBACKEND call + * above.  In the future we may support dynamic loading of these - for now, + * they're just being used to share the ATMIOC_BACKEND ioctls + */ +#define ATM_BACKEND_RAW		0	 +#define ATM_BACKEND_PPP		1	/* PPPoATM - RFC2364 */ +#define ATM_BACKEND_BR2684	2	/* Bridged RFC1483/2684 */ + +/* for ATM_GETTYPE */ +#define ATM_ITFTYP_LEN	8	/* maximum length of interface type name */ + +/* + * Loopback modes for ATM_{PHY,SAR}_{GET,SET}LOOP + */ + +/* Point of loopback				CPU-->SAR-->PHY-->line--> ... */ +#define __ATM_LM_NONE	0	/* no loop back     ^     ^     ^      ^      */ +#define __ATM_LM_AAL	1	/* loop back PDUs --'     |     |      |      */ +#define __ATM_LM_ATM	2	/* loop back ATM cells ---'     |      |      */ +/* RESERVED		4	loop back on PHY side  ---'		      */ +#define __ATM_LM_PHY	8	/* loop back bits (digital) ----'      |      */ +#define __ATM_LM_ANALOG 16	/* loop back the analog signal --------'      */ + +/* Direction of loopback */ +#define __ATM_LM_MKLOC(n)	((n))	    /* Local (i.e. loop TX to RX) */ +#define __ATM_LM_MKRMT(n)	((n) << 8)  /* Remote (i.e. loop RX to TX) */ + +#define __ATM_LM_XTLOC(n)	((n) & 0xff) +#define __ATM_LM_XTRMT(n)	(((n) >> 8) & 0xff) + +#define ATM_LM_NONE	0	/* no loopback */ + +#define ATM_LM_LOC_AAL	__ATM_LM_MKLOC(__ATM_LM_AAL) +#define ATM_LM_LOC_ATM	__ATM_LM_MKLOC(__ATM_LM_ATM) +#define ATM_LM_LOC_PHY	__ATM_LM_MKLOC(__ATM_LM_PHY) +#define ATM_LM_LOC_ANALOG __ATM_LM_MKLOC(__ATM_LM_ANALOG) + +#define ATM_LM_RMT_AAL	__ATM_LM_MKRMT(__ATM_LM_AAL) +#define ATM_LM_RMT_ATM	__ATM_LM_MKRMT(__ATM_LM_ATM) +#define ATM_LM_RMT_PHY	__ATM_LM_MKRMT(__ATM_LM_PHY) +#define ATM_LM_RMT_ANALOG __ATM_LM_MKRMT(__ATM_LM_ANALOG) + +/* + * Note: ATM_LM_LOC_* and ATM_LM_RMT_* can be combined, provided that + * __ATM_LM_XTLOC(x) <= __ATM_LM_XTRMT(x) + */ + + +struct atm_iobuf { +	int length; +	void __user *buffer; +}; + +/* for ATM_GETCIRANGE / ATM_SETCIRANGE */ + +#define ATM_CI_MAX      -1              /* use maximum range of VPI/VCI */ +  +struct atm_cirange { +	signed char	vpi_bits;	/* 1..8, ATM_CI_MAX (-1) for maximum */ +	signed char	vci_bits;	/* 1..16, ATM_CI_MAX (-1) for maximum */ +}; + +/* for ATM_SETSC; actually taken from the ATM_VF number space */ + +#define ATM_SC_RX	1024		/* enable RX single-copy */ +#define ATM_SC_TX	2048		/* enable TX single-copy */ + +#define ATM_BACKLOG_DEFAULT 32 /* if we get more, we're likely to time out +				  anyway */ + +/* MF: change_qos (Modify) flags */ + +#define ATM_MF_IMMED	 1	/* Block until change is effective */ +#define ATM_MF_INC_RSV	 2	/* Change reservation on increase */ +#define ATM_MF_INC_SHP	 4	/* Change shaping on increase */ +#define ATM_MF_DEC_RSV	 8	/* Change reservation on decrease */ +#define ATM_MF_DEC_SHP	16	/* Change shaping on decrease */ +#define ATM_MF_BWD	32	/* Set the backward direction parameters */ + +#define ATM_MF_SET	(ATM_MF_INC_RSV | ATM_MF_INC_SHP | ATM_MF_DEC_RSV | \ +			  ATM_MF_DEC_SHP | ATM_MF_BWD) + +/* + * ATM_VS_* are used to express VC state in a human-friendly way. + */ + +#define ATM_VS_IDLE	0	/* VC is not used */ +#define ATM_VS_CONNECTED 1	/* VC is connected */ +#define ATM_VS_CLOSING	2	/* VC is closing */ +#define ATM_VS_LISTEN	3	/* VC is listening for incoming setups */ +#define ATM_VS_INUSE	4	/* VC is in use (registered with atmsigd) */ +#define ATM_VS_BOUND	5	/* VC is bound */ + +#define ATM_VS2TXT_MAP \ +    "IDLE", "CONNECTED", "CLOSING", "LISTEN", "INUSE", "BOUND" + +#define ATM_VF2TXT_MAP \ +    "ADDR",	"READY",	"PARTIAL",	"REGIS", \ +    "RELEASED", "HASQOS",	"LISTEN",	"META", \ +    "256",	"512",		"1024",		"2048", \ +    "SESSION",	"HASSAP",	"BOUND",	"CLOSE" + + + +#endif /* _UAPILINUX_ATMDEV_H */ diff --git a/include/uapi/linux/atmioc.h b/include/uapi/linux/atmioc.h new file mode 100644 index 00000000000..37f67aa8f1c --- /dev/null +++ b/include/uapi/linux/atmioc.h @@ -0,0 +1,41 @@ +/* atmioc.h - ranges for ATM-related ioctl numbers */ +  +/* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */ + + +/* + * See http://icawww1.epfl.ch/linux-atm/magic.html for the complete list of + * "magic" ioctl numbers. + */ + + +#ifndef _LINUX_ATMIOC_H +#define _LINUX_ATMIOC_H + +#include <asm/ioctl.h> +		/* everybody including atmioc.h will also need _IO{,R,W,WR} */ + +#define ATMIOC_PHYCOM	  0x00 /* PHY device common ioctls, globally unique */ +#define ATMIOC_PHYCOM_END 0x0f +#define ATMIOC_PHYTYP	  0x10 /* PHY dev type ioctls, unique per PHY type */ +#define ATMIOC_PHYTYP_END 0x2f +#define ATMIOC_PHYPRV	  0x30 /* PHY dev private ioctls, unique per driver */ +#define ATMIOC_PHYPRV_END 0x4f +#define ATMIOC_SARCOM	  0x50 /* SAR device common ioctls, globally unique */ +#define ATMIOC_SARCOM_END 0x50 +#define ATMIOC_SARPRV	  0x60 /* SAR dev private ioctls, unique per driver */ +#define ATMIOC_SARPRV_END 0x7f +#define ATMIOC_ITF	  0x80 /* Interface ioctls, globally unique */ +#define ATMIOC_ITF_END	  0x8f +#define ATMIOC_BACKEND	  0x90 /* ATM generic backend ioctls, u. per backend */ +#define ATMIOC_BACKEND_END 0xaf +/* 0xb0-0xbf: Reserved for future use */ +#define ATMIOC_AREQUIPA	  0xc0 /* Application requested IP over ATM, glob. u. */ +#define ATMIOC_LANE	  0xd0 /* LAN Emulation, globally unique */ +#define ATMIOC_MPOA       0xd8 /* MPOA, globally unique */ +#define	ATMIOC_CLIP	  0xe0 /* Classical IP over ATM control, globally u. */ +#define	ATMIOC_CLIP_END	  0xef +#define	ATMIOC_SPECIAL	  0xf0 /* Special-purpose controls, globally unique */ +#define	ATMIOC_SPECIAL_END 0xff + +#endif diff --git a/include/uapi/linux/atmlec.h b/include/uapi/linux/atmlec.h new file mode 100644 index 00000000000..302791e3ab2 --- /dev/null +++ b/include/uapi/linux/atmlec.h @@ -0,0 +1,91 @@ +/* + * ATM Lan Emulation Daemon driver interface + * + * Marko Kiiskila <mkiiskila@yahoo.com> + */ + +#ifndef _ATMLEC_H_ +#define _ATMLEC_H_ + +#include <linux/atmapi.h> +#include <linux/atmioc.h> +#include <linux/atm.h> +#include <linux/if_ether.h> +#include <linux/types.h> + +/* ATM lec daemon control socket */ +#define ATMLEC_CTRL	_IO('a', ATMIOC_LANE) +#define ATMLEC_DATA	_IO('a', ATMIOC_LANE+1) +#define ATMLEC_MCAST	_IO('a', ATMIOC_LANE+2) + +/* Maximum number of LEC interfaces (tweakable) */ +#define MAX_LEC_ITF 48 + +typedef enum { +	l_set_mac_addr, +	l_del_mac_addr, +	l_svc_setup, +	l_addr_delete, +	l_topology_change, +	l_flush_complete, +	l_arp_update, +	l_narp_req,		/* LANE2 mandates the use of this */ +	l_config, +	l_flush_tran_id, +	l_set_lecid, +	l_arp_xmt, +	l_rdesc_arp_xmt, +	l_associate_req, +	l_should_bridge		/* should we bridge this MAC? */ +} atmlec_msg_type; + +#define ATMLEC_MSG_TYPE_MAX l_should_bridge + +struct atmlec_config_msg { +	unsigned int maximum_unknown_frame_count; +	unsigned int max_unknown_frame_time; +	unsigned short max_retry_count; +	unsigned int aging_time; +	unsigned int forward_delay_time; +	unsigned int arp_response_time; +	unsigned int flush_timeout; +	unsigned int path_switching_delay; +	unsigned int lane_version;	/* LANE2: 1 for LANEv1, 2 for LANEv2 */ +	int mtu; +	int is_proxy; +}; + +struct atmlec_msg { +	atmlec_msg_type type; +	int sizeoftlvs;		/* LANE2: if != 0, tlvs follow */ +	union { +		struct { +			unsigned char mac_addr[ETH_ALEN]; +			unsigned char atm_addr[ATM_ESA_LEN]; +			unsigned int flag;	/* +						 * Topology_change flag, +						 * remoteflag, permanent flag, +						 * lecid, transaction id +						 */ +			unsigned int targetless_le_arp;	/* LANE2 */ +			unsigned int no_source_le_narp;	/* LANE2 */ +		} normal; +		struct atmlec_config_msg config; +		struct { +			__u16 lec_id;				/* requestor lec_id  */ +			__u32 tran_id;				/* transaction id    */ +			unsigned char mac_addr[ETH_ALEN];	/* dst mac addr      */ +			unsigned char atm_addr[ATM_ESA_LEN];	/* reqestor ATM addr */ +		} proxy;	/* +				 * For mapping LE_ARP requests to responses. Filled by +				 * zeppelin, returned by kernel. Used only when proxying +				 */ +	} content; +} __ATM_API_ALIGN; + +struct atmlec_ioc { +	int dev_num; +	unsigned char atm_addr[ATM_ESA_LEN]; +	unsigned char receive;	/* 1= receive vcc, 0 = send vcc */ +}; +#endif /* _ATMLEC_H_ */ diff --git a/include/uapi/linux/atmmpc.h b/include/uapi/linux/atmmpc.h new file mode 100644 index 00000000000..2aba5787fa6 --- /dev/null +++ b/include/uapi/linux/atmmpc.h @@ -0,0 +1,126 @@ +#ifndef _ATMMPC_H_ +#define _ATMMPC_H_ + +#include <linux/atmapi.h> +#include <linux/atmioc.h> +#include <linux/atm.h> +#include <linux/types.h> + +#define ATMMPC_CTRL _IO('a', ATMIOC_MPOA) +#define ATMMPC_DATA _IO('a', ATMIOC_MPOA+1) + +#define MPC_SOCKET_INGRESS 1 +#define MPC_SOCKET_EGRESS  2 + +struct atmmpc_ioc { +        int dev_num; +        __be32 ipaddr;              /* the IP address of the shortcut    */ +        int type;                     /* ingress or egress                 */ +}; + +typedef struct in_ctrl_info { +        __u8   Last_NHRP_CIE_code; +        __u8   Last_Q2931_cause_value; +        __u8   eg_MPC_ATM_addr[ATM_ESA_LEN]; +        __be32  tag; +        __be32  in_dst_ip;      /* IP address this ingress MPC sends packets to */ +        __u16  holding_time; +        __u32  request_id; +} in_ctrl_info; + +typedef struct eg_ctrl_info { +        __u8   DLL_header[256]; +        __u8   DH_length; +        __be32  cache_id; +        __be32  tag; +        __be32  mps_ip; +        __be32  eg_dst_ip;      /* IP address to which ingress MPC sends packets */ +        __u8   in_MPC_data_ATM_addr[ATM_ESA_LEN]; +        __u16  holding_time; +} eg_ctrl_info; + +struct mpc_parameters { +        __u16 mpc_p1;   /* Shortcut-Setup Frame Count    */ +        __u16 mpc_p2;   /* Shortcut-Setup Frame Time     */ +        __u8 mpc_p3[8]; /* Flow-detection Protocols      */ +        __u16 mpc_p4;   /* MPC Initial Retry Time        */ +        __u16 mpc_p5;   /* MPC Retry Time Maximum        */ +        __u16 mpc_p6;   /* Hold Down Time                */ +} ; + +struct k_message { +        __u16 type; +        __be32 ip_mask; +        __u8  MPS_ctrl[ATM_ESA_LEN]; +        union { +                in_ctrl_info in_info; +                eg_ctrl_info eg_info; +                struct mpc_parameters params; +        } content; +        struct atm_qos qos;        +} __ATM_API_ALIGN; + +struct llc_snap_hdr { +	/* RFC 1483 LLC/SNAP encapsulation for routed IP PDUs */ +        __u8  dsap;    /* Destination Service Access Point (0xAA)     */ +        __u8  ssap;    /* Source Service Access Point      (0xAA)     */ +        __u8  ui;      /* Unnumbered Information           (0x03)     */ +        __u8  org[3];  /* Organizational identification    (0x000000) */ +        __u8  type[2]; /* Ether type (for IP)              (0x0800)   */ +}; + +/* TLVs this MPC recognizes */ +#define TLV_MPOA_DEVICE_TYPE         0x00a03e2a   + +/* MPOA device types in MPOA Device Type TLV */ +#define NON_MPOA    0 +#define MPS         1 +#define MPC         2 +#define MPS_AND_MPC 3 + + +/* MPC parameter defaults */ + +#define MPC_P1 10  /* Shortcut-Setup Frame Count  */  +#define MPC_P2 1   /* Shortcut-Setup Frame Time   */ +#define MPC_P3 0   /* Flow-detection Protocols    */ +#define MPC_P4 5   /* MPC Initial Retry Time      */ +#define MPC_P5 40  /* MPC Retry Time Maximum      */ +#define MPC_P6 160 /* Hold Down Time              */ +#define HOLDING_TIME_DEFAULT 1200 /* same as MPS-p7 */ + +/* MPC constants */ + +#define MPC_C1 2   /* Retry Time Multiplier       */ +#define MPC_C2 60  /* Initial Keep-Alive Lifetime */ + +/* Message types - to MPOA daemon */ + +#define SND_MPOA_RES_RQST    201 +#define SET_MPS_CTRL_ADDR    202 +#define SND_MPOA_RES_RTRY    203 /* Different type in a retry due to req id         */ +#define STOP_KEEP_ALIVE_SM   204 +#define EGRESS_ENTRY_REMOVED 205 +#define SND_EGRESS_PURGE     206 +#define DIE                  207 /* tell the daemon to exit()                       */ +#define DATA_PLANE_PURGE     208 /* Data plane purge because of egress cache hit miss or dead MPS */ +#define OPEN_INGRESS_SVC     209 + +/* Message types - from MPOA daemon */ + +#define MPOA_TRIGGER_RCVD     101 +#define MPOA_RES_REPLY_RCVD   102 +#define INGRESS_PURGE_RCVD    103 +#define EGRESS_PURGE_RCVD     104 +#define MPS_DEATH             105 +#define CACHE_IMPOS_RCVD      106 +#define SET_MPC_CTRL_ADDR     107 /* Our MPC's control ATM address   */ +#define SET_MPS_MAC_ADDR      108 +#define CLEAN_UP_AND_EXIT     109 +#define SET_MPC_PARAMS        110 /* MPC configuration parameters    */ + +/* Message types - bidirectional */        + +#define RELOAD                301 /* kill -HUP the daemon for reload */ + +#endif /* _ATMMPC_H_ */ diff --git a/include/uapi/linux/atmppp.h b/include/uapi/linux/atmppp.h new file mode 100644 index 00000000000..300dcce0c83 --- /dev/null +++ b/include/uapi/linux/atmppp.h @@ -0,0 +1,24 @@ +/* atmppp.h - RFC2364 PPPoATM */ + +/* Written 2000 by Mitchell Blank Jr */ + +#ifndef _LINUX_ATMPPP_H +#define _LINUX_ATMPPP_H + +#include <linux/atm.h> + +#define PPPOATM_ENCAPS_AUTODETECT	(0) +#define PPPOATM_ENCAPS_VC		(1) +#define PPPOATM_ENCAPS_LLC		(2) + +/* + * This is for the ATM_SETBACKEND call - these are like socket families: + * the first element of the structure is the backend number and the rest + * is per-backend specific + */ +struct atm_backend_ppp { +	atm_backend_t	backend_num;	/* ATM_BACKEND_PPP */ +	int		encaps;		/* PPPOATM_ENCAPS_* */ +}; + +#endif	/* _LINUX_ATMPPP_H */ diff --git a/include/uapi/linux/atmsap.h b/include/uapi/linux/atmsap.h new file mode 100644 index 00000000000..799b104515d --- /dev/null +++ b/include/uapi/linux/atmsap.h @@ -0,0 +1,162 @@ +/* atmsap.h - ATM Service Access Point addressing definitions */ + +/* Written 1995-1999 by Werner Almesberger, EPFL LRC/ICA */ + + +#ifndef _LINUX_ATMSAP_H +#define _LINUX_ATMSAP_H + +#include <linux/atmapi.h> + +/* + * BEGIN_xx and END_xx markers are used for automatic generation of + * documentation. Do not change them. + */ + + +/* + * Layer 2 protocol identifiers + */ + +/* BEGIN_L2 */ +#define ATM_L2_NONE	0	/* L2 not specified */ +#define ATM_L2_ISO1745  0x01	/* Basic mode ISO 1745 */ +#define ATM_L2_Q291	0x02	/* ITU-T Q.291 (Rec. I.441) */ +#define ATM_L2_X25_LL	0x06	/* ITU-T X.25, link layer */ +#define ATM_L2_X25_ML	0x07	/* ITU-T X.25, multilink */ +#define ATM_L2_LAPB	0x08	/* Extended LAPB, half-duplex (Rec. T.71) */ +#define ATM_L2_HDLC_ARM	0x09	/* HDLC ARM (ISO/IEC 4335) */ +#define ATM_L2_HDLC_NRM	0x0a	/* HDLC NRM (ISO/IEC 4335) */ +#define ATM_L2_HDLC_ABM	0x0b	/* HDLC ABM (ISO/IEC 4335) */ +#define ATM_L2_ISO8802	0x0c	/* LAN LLC (ISO/IEC 8802/2) */ +#define ATM_L2_X75	0x0d	/* ITU-T X.75, SLP */ +#define ATM_L2_Q922	0x0e	/* ITU-T Q.922 */ +#define ATM_L2_USER	0x10	/* user-specified */ +#define ATM_L2_ISO7776	0x11	/* ISO 7776 DTE-DTE */ +/* END_L2 */ + + +/* + * Layer 3 protocol identifiers + */ + +/* BEGIN_L3 */ +#define ATM_L3_NONE	0	/* L3 not specified */ +#define ATM_L3_X25	0x06	/* ITU-T X.25, packet layer */ +#define ATM_L3_ISO8208	0x07	/* ISO/IEC 8208 */ +#define ATM_L3_X223	0x08	/* ITU-T X.223 | ISO/IEC 8878 */ +#define ATM_L3_ISO8473	0x09	/* ITU-T X.233 | ISO/IEC 8473 */ +#define ATM_L3_T70	0x0a	/* ITU-T T.70 minimum network layer */ +#define ATM_L3_TR9577	0x0b	/* ISO/IEC TR 9577 */ +#define ATM_L3_H310	0x0c	/* ITU-T Recommendation H.310 */ +#define ATM_L3_H321	0x0d	/* ITU-T Recommendation H.321 */ +#define ATM_L3_USER	0x10	/* user-specified */ +/* END_L3 */ + + +/* + * High layer identifiers + */ + +/* BEGIN_HL */ +#define ATM_HL_NONE	0	/* HL not specified */ +#define ATM_HL_ISO	0x01	/* ISO */ +#define ATM_HL_USER	0x02	/* user-specific */ +#define ATM_HL_HLP	0x03	/* high layer profile - UNI 3.0 only */ +#define ATM_HL_VENDOR	0x04	/* vendor-specific application identifier */ +/* END_HL */ + + +/* + * ITU-T coded mode of operation + */ + +/* BEGIN_IMD */ +#define ATM_IMD_NONE	 0	/* mode not specified */ +#define ATM_IMD_NORMAL	 1	/* normal mode of operation */ +#define ATM_IMD_EXTENDED 2	/* extended mode of operation */ +/* END_IMD */ + +/* + * H.310 code points + */ + +#define ATM_TT_NONE	0	/* terminal type not specified */ +#define ATM_TT_RX	1	/* receive only */ +#define ATM_TT_TX	2	/* send only */ +#define ATM_TT_RXTX	3	/* receive and send */ + +#define ATM_MC_NONE	0	/* no multiplexing */ +#define ATM_MC_TS	1	/* transport stream (TS) */ +#define ATM_MC_TS_FEC	2	/* transport stream with forward error corr. */ +#define ATM_MC_PS	3	/* program stream (PS) */ +#define ATM_MC_PS_FEC	4	/* program stream with forward error corr. */ +#define ATM_MC_H221	5	/* ITU-T Rec. H.221 */ + +/* + * SAP structures + */ + +#define ATM_MAX_HLI	8	/* maximum high-layer information length */ + + +struct atm_blli { +    unsigned char l2_proto;	/* layer 2 protocol */ +    union { +	struct { +	    unsigned char mode;	/* mode of operation (ATM_IMD_xxx), 0 if */ +				/* absent */ +	    unsigned char window; /* window size (k), 1-127 (0 to omit) */ +	} itu;			/* ITU-T encoding */ +	unsigned char user;	/* user-specified l2 information */ +    } l2; +    unsigned char l3_proto;	/* layer 3 protocol */ +    union { +	struct { +	    unsigned char mode;	/* mode of operation (ATM_IMD_xxx), 0 if */ +				/* absent */ +	    unsigned char def_size; /* default packet size (log2), 4-12 (0 to */ +				    /* omit) */ +	    unsigned char window;/* packet window size, 1-127 (0 to omit) */ +	} itu;			/* ITU-T encoding */ +	unsigned char user;	/* user specified l3 information */ +	struct {		      /* if l3_proto = ATM_L3_H310 */ +	    unsigned char term_type;  /* terminal type */ +	    unsigned char fw_mpx_cap; /* forward multiplexing capability */ +				      /* only if term_type != ATM_TT_NONE */ +	    unsigned char bw_mpx_cap; /* backward multiplexing capability */ +				      /* only if term_type != ATM_TT_NONE */ +	} h310; +	struct {		  /* if l3_proto = ATM_L3_TR9577 */ +	    unsigned char ipi;	  /* initial protocol id */ +	    unsigned char snap[5];/* IEEE 802.1 SNAP identifier */ +				  /* (only if ipi == NLPID_IEEE802_1_SNAP) */ +	} tr9577; +    } l3; +} __ATM_API_ALIGN; + + +struct atm_bhli { +    unsigned char hl_type;	/* high layer information type */ +    unsigned char hl_length;	/* length (only if hl_type == ATM_HL_USER || */ +				/* hl_type == ATM_HL_ISO) */ +    unsigned char hl_info[ATM_MAX_HLI];/* high layer information */ +}; + + +#define ATM_MAX_BLLI	3		/* maximum number of BLLI elements */ + + +struct atm_sap { +	struct atm_bhli bhli;		/* local SAP, high-layer information */ +	struct atm_blli blli[ATM_MAX_BLLI] __ATM_API_ALIGN; +					/* local SAP, low-layer info */ +}; + + +static __inline__ int blli_in_use(struct atm_blli blli) +{ +	return blli.l2_proto || blli.l3_proto; +} + +#endif diff --git a/include/uapi/linux/atmsvc.h b/include/uapi/linux/atmsvc.h new file mode 100644 index 00000000000..aa71583b8da --- /dev/null +++ b/include/uapi/linux/atmsvc.h @@ -0,0 +1,55 @@ +/* atmsvc.h - ATM signaling kernel-demon interface definitions */ +  +/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */ +  + +#ifndef _LINUX_ATMSVC_H +#define _LINUX_ATMSVC_H + +#include <linux/atmapi.h> +#include <linux/atm.h> +#include <linux/atmioc.h> + + +#define ATMSIGD_CTRL _IO('a',ATMIOC_SPECIAL) +				/* become ATM signaling demon control socket */ + +enum atmsvc_msg_type { as_catch_null, as_bind, as_connect, as_accept, as_reject, +		       as_listen, as_okay, as_error, as_indicate, as_close, +		       as_itf_notify, as_modify, as_identify, as_terminate, +		       as_addparty, as_dropparty }; + +struct atmsvc_msg { +	enum atmsvc_msg_type type; +	atm_kptr_t vcc; +	atm_kptr_t listen_vcc;		/* indicate */ +	int reply;			/* for okay and close:		   */ +					/*   < 0: error before active	   */ +					/*        (sigd has discarded ctx) */ +					/*   ==0: success		   */ +				        /*   > 0: error when active (still */ +					/*        need to close)	   */ +	struct sockaddr_atmpvc pvc;	/* indicate, okay (connect) */ +	struct sockaddr_atmsvc local;	/* local SVC address */ +	struct atm_qos qos;		/* QOS parameters */ +	struct atm_sap sap;		/* SAP */ +	unsigned int session;		/* for p2pm */ +	struct sockaddr_atmsvc svc;	/* SVC address */ +} __ATM_API_ALIGN; + +/* + * Message contents: see ftp://icaftp.epfl.ch/pub/linux/atm/docs/isp-*.tar.gz + */ + +/* + * Some policy stuff for atmsigd and for net/atm/svc.c. Both have to agree on + * what PCR is used to request bandwidth from the device driver. net/atm/svc.c + * tries to do better than that, but only if there's no routing decision (i.e. + * if signaling only uses one ATM interface). + */ + +#define SELECT_TOP_PCR(tp) ((tp).pcr ? (tp).pcr : \ +  (tp).max_pcr && (tp).max_pcr != ATM_MAX_PCR ? (tp).max_pcr : \ +  (tp).min_pcr ? (tp).min_pcr : ATM_MAX_PCR) + +#endif diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h new file mode 100644 index 00000000000..76352ac45f2 --- /dev/null +++ b/include/uapi/linux/audit.h @@ -0,0 +1,404 @@ +/* audit.h -- Auditing support + * + * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina. + * 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; 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + * + * Written by Rickard E. (Rik) Faith <faith@redhat.com> + * + */ + +#ifndef _UAPI_LINUX_AUDIT_H_ +#define _UAPI_LINUX_AUDIT_H_ + +#include <linux/types.h> +#include <linux/elf-em.h> +#include <linux/ptrace.h> + +/* The netlink messages for the audit system is divided into blocks: + * 1000 - 1099 are for commanding the audit system + * 1100 - 1199 user space trusted application messages + * 1200 - 1299 messages internal to the audit daemon + * 1300 - 1399 audit event messages + * 1400 - 1499 SE Linux use + * 1500 - 1599 kernel LSPP events + * 1600 - 1699 kernel crypto events + * 1700 - 1799 kernel anomaly records + * 1800 - 1899 kernel integrity events + * 1900 - 1999 future kernel use + * 2000 is for otherwise unclassified kernel audit messages (legacy) + * 2001 - 2099 unused (kernel) + * 2100 - 2199 user space anomaly records + * 2200 - 2299 user space actions taken in response to anomalies + * 2300 - 2399 user space generated LSPP events + * 2400 - 2499 user space crypto events + * 2500 - 2999 future user space (maybe integrity labels and related events) + * + * Messages from 1000-1199 are bi-directional. 1200-1299 & 2100 - 2999 are + * exclusively user space. 1300-2099 is kernel --> user space  + * communication. + */ +#define AUDIT_GET		1000	/* Get status */ +#define AUDIT_SET		1001	/* Set status (enable/disable/auditd) */ +#define AUDIT_LIST		1002	/* List syscall rules -- deprecated */ +#define AUDIT_ADD		1003	/* Add syscall rule -- deprecated */ +#define AUDIT_DEL		1004	/* Delete syscall rule -- deprecated */ +#define AUDIT_USER		1005	/* Message from userspace -- deprecated */ +#define AUDIT_LOGIN		1006	/* Define the login id and information */ +#define AUDIT_WATCH_INS		1007	/* Insert file/dir watch entry */ +#define AUDIT_WATCH_REM		1008	/* Remove file/dir watch entry */ +#define AUDIT_WATCH_LIST	1009	/* List all file/dir watches */ +#define AUDIT_SIGNAL_INFO	1010	/* Get info about sender of signal to auditd */ +#define AUDIT_ADD_RULE		1011	/* Add syscall filtering rule */ +#define AUDIT_DEL_RULE		1012	/* Delete syscall filtering rule */ +#define AUDIT_LIST_RULES	1013	/* List syscall filtering rules */ +#define AUDIT_TRIM		1014	/* Trim junk from watched tree */ +#define AUDIT_MAKE_EQUIV	1015	/* Append to watched tree */ +#define AUDIT_TTY_GET		1016	/* Get TTY auditing status */ +#define AUDIT_TTY_SET		1017	/* Set TTY auditing status */ + +#define AUDIT_FIRST_USER_MSG	1100	/* Userspace messages mostly uninteresting to kernel */ +#define AUDIT_USER_AVC		1107	/* We filter this differently */ +#define AUDIT_USER_TTY		1124	/* Non-ICANON TTY input meaning */ +#define AUDIT_LAST_USER_MSG	1199 +#define AUDIT_FIRST_USER_MSG2	2100	/* More user space messages */ +#define AUDIT_LAST_USER_MSG2	2999 +  +#define AUDIT_DAEMON_START      1200    /* Daemon startup record */ +#define AUDIT_DAEMON_END        1201    /* Daemon normal stop record */ +#define AUDIT_DAEMON_ABORT      1202    /* Daemon error stop record */ +#define AUDIT_DAEMON_CONFIG     1203    /* Daemon config change */ + +#define AUDIT_SYSCALL		1300	/* Syscall event */ +/* #define AUDIT_FS_WATCH	1301	 * Deprecated */ +#define AUDIT_PATH		1302	/* Filename path information */ +#define AUDIT_IPC		1303	/* IPC record */ +#define AUDIT_SOCKETCALL	1304	/* sys_socketcall arguments */ +#define AUDIT_CONFIG_CHANGE	1305	/* Audit system configuration change */ +#define AUDIT_SOCKADDR		1306	/* sockaddr copied as syscall arg */ +#define AUDIT_CWD		1307	/* Current working directory */ +#define AUDIT_EXECVE		1309	/* execve arguments */ +#define AUDIT_IPC_SET_PERM	1311	/* IPC new permissions record type */ +#define AUDIT_MQ_OPEN		1312	/* POSIX MQ open record type */ +#define AUDIT_MQ_SENDRECV	1313	/* POSIX MQ send/receive record type */ +#define AUDIT_MQ_NOTIFY		1314	/* POSIX MQ notify record type */ +#define AUDIT_MQ_GETSETATTR	1315	/* POSIX MQ get/set attribute record type */ +#define AUDIT_KERNEL_OTHER	1316	/* For use by 3rd party modules */ +#define AUDIT_FD_PAIR		1317    /* audit record for pipe/socketpair */ +#define AUDIT_OBJ_PID		1318	/* ptrace target */ +#define AUDIT_TTY		1319	/* Input on an administrative TTY */ +#define AUDIT_EOE		1320	/* End of multi-record event */ +#define AUDIT_BPRM_FCAPS	1321	/* Information about fcaps increasing perms */ +#define AUDIT_CAPSET		1322	/* Record showing argument to sys_capset */ +#define AUDIT_MMAP		1323	/* Record showing descriptor and flags in mmap */ +#define AUDIT_NETFILTER_PKT	1324	/* Packets traversing netfilter chains */ +#define AUDIT_NETFILTER_CFG	1325	/* Netfilter chain modifications */ + +#define AUDIT_AVC		1400	/* SE Linux avc denial or grant */ +#define AUDIT_SELINUX_ERR	1401	/* Internal SE Linux Errors */ +#define AUDIT_AVC_PATH		1402	/* dentry, vfsmount pair from avc */ +#define AUDIT_MAC_POLICY_LOAD	1403	/* Policy file load */ +#define AUDIT_MAC_STATUS	1404	/* Changed enforcing,permissive,off */ +#define AUDIT_MAC_CONFIG_CHANGE	1405	/* Changes to booleans */ +#define AUDIT_MAC_UNLBL_ALLOW	1406	/* NetLabel: allow unlabeled traffic */ +#define AUDIT_MAC_CIPSOV4_ADD	1407	/* NetLabel: add CIPSOv4 DOI entry */ +#define AUDIT_MAC_CIPSOV4_DEL	1408	/* NetLabel: del CIPSOv4 DOI entry */ +#define AUDIT_MAC_MAP_ADD	1409	/* NetLabel: add LSM domain mapping */ +#define AUDIT_MAC_MAP_DEL	1410	/* NetLabel: del LSM domain mapping */ +#define AUDIT_MAC_IPSEC_ADDSA	1411	/* Not used */ +#define AUDIT_MAC_IPSEC_DELSA	1412	/* Not used  */ +#define AUDIT_MAC_IPSEC_ADDSPD	1413	/* Not used */ +#define AUDIT_MAC_IPSEC_DELSPD	1414	/* Not used */ +#define AUDIT_MAC_IPSEC_EVENT	1415	/* Audit an IPSec event */ +#define AUDIT_MAC_UNLBL_STCADD	1416	/* NetLabel: add a static label */ +#define AUDIT_MAC_UNLBL_STCDEL	1417	/* NetLabel: del a static label */ + +#define AUDIT_FIRST_KERN_ANOM_MSG   1700 +#define AUDIT_LAST_KERN_ANOM_MSG    1799 +#define AUDIT_ANOM_PROMISCUOUS      1700 /* Device changed promiscuous mode */ +#define AUDIT_ANOM_ABEND            1701 /* Process ended abnormally */ +#define AUDIT_ANOM_LINK		    1702 /* Suspicious use of file links */ +#define AUDIT_INTEGRITY_DATA	    1800 /* Data integrity verification */ +#define AUDIT_INTEGRITY_METADATA    1801 /* Metadata integrity verification */ +#define AUDIT_INTEGRITY_STATUS	    1802 /* Integrity enable status */ +#define AUDIT_INTEGRITY_HASH	    1803 /* Integrity HASH type */ +#define AUDIT_INTEGRITY_PCR	    1804 /* PCR invalidation msgs */ +#define AUDIT_INTEGRITY_RULE	    1805 /* policy rule */ + +#define AUDIT_KERNEL		2000	/* Asynchronous audit record. NOT A REQUEST. */ + +/* Rule flags */ +#define AUDIT_FILTER_USER	0x00	/* Apply rule to user-generated messages */ +#define AUDIT_FILTER_TASK	0x01	/* Apply rule at task creation (not syscall) */ +#define AUDIT_FILTER_ENTRY	0x02	/* Apply rule at syscall entry */ +#define AUDIT_FILTER_WATCH	0x03	/* Apply rule to file system watches */ +#define AUDIT_FILTER_EXIT	0x04	/* Apply rule at syscall exit */ +#define AUDIT_FILTER_TYPE	0x05	/* Apply rule at audit_log_start */ + +#define AUDIT_NR_FILTERS	6 + +#define AUDIT_FILTER_PREPEND	0x10	/* Prepend to front of list */ + +/* Rule actions */ +#define AUDIT_NEVER    0	/* Do not build context if rule matches */ +#define AUDIT_POSSIBLE 1	/* Build context if rule matches  */ +#define AUDIT_ALWAYS   2	/* Generate audit record if rule matches */ + +/* Rule structure sizes -- if these change, different AUDIT_ADD and + * AUDIT_LIST commands must be implemented. */ +#define AUDIT_MAX_FIELDS   64 +#define AUDIT_MAX_KEY_LEN  256 +#define AUDIT_BITMASK_SIZE 64 +#define AUDIT_WORD(nr) ((__u32)((nr)/32)) +#define AUDIT_BIT(nr)  (1 << ((nr) - AUDIT_WORD(nr)*32)) + +#define AUDIT_SYSCALL_CLASSES 16 +#define AUDIT_CLASS_DIR_WRITE 0 +#define AUDIT_CLASS_DIR_WRITE_32 1 +#define AUDIT_CLASS_CHATTR 2 +#define AUDIT_CLASS_CHATTR_32 3 +#define AUDIT_CLASS_READ 4 +#define AUDIT_CLASS_READ_32 5 +#define AUDIT_CLASS_WRITE 6 +#define AUDIT_CLASS_WRITE_32 7 +#define AUDIT_CLASS_SIGNAL 8 +#define AUDIT_CLASS_SIGNAL_32 9 + +/* This bitmask is used to validate user input.  It represents all bits that + * are currently used in an audit field constant understood by the kernel. + * If you are adding a new #define AUDIT_<whatever>, please ensure that + * AUDIT_UNUSED_BITS is updated if need be. */ +#define AUDIT_UNUSED_BITS	0x07FFFC00 + +/* AUDIT_FIELD_COMPARE rule list */ +#define AUDIT_COMPARE_UID_TO_OBJ_UID	1 +#define AUDIT_COMPARE_GID_TO_OBJ_GID	2 +#define AUDIT_COMPARE_EUID_TO_OBJ_UID	3 +#define AUDIT_COMPARE_EGID_TO_OBJ_GID	4 +#define AUDIT_COMPARE_AUID_TO_OBJ_UID	5 +#define AUDIT_COMPARE_SUID_TO_OBJ_UID	6 +#define AUDIT_COMPARE_SGID_TO_OBJ_GID	7 +#define AUDIT_COMPARE_FSUID_TO_OBJ_UID	8 +#define AUDIT_COMPARE_FSGID_TO_OBJ_GID	9 + +#define AUDIT_COMPARE_UID_TO_AUID	10 +#define AUDIT_COMPARE_UID_TO_EUID	11 +#define AUDIT_COMPARE_UID_TO_FSUID	12 +#define AUDIT_COMPARE_UID_TO_SUID	13 + +#define AUDIT_COMPARE_AUID_TO_FSUID	14 +#define AUDIT_COMPARE_AUID_TO_SUID	15 +#define AUDIT_COMPARE_AUID_TO_EUID	16 + +#define AUDIT_COMPARE_EUID_TO_SUID	17 +#define AUDIT_COMPARE_EUID_TO_FSUID	18 + +#define AUDIT_COMPARE_SUID_TO_FSUID	19 + +#define AUDIT_COMPARE_GID_TO_EGID	20 +#define AUDIT_COMPARE_GID_TO_FSGID	21 +#define AUDIT_COMPARE_GID_TO_SGID	22 + +#define AUDIT_COMPARE_EGID_TO_FSGID	23 +#define AUDIT_COMPARE_EGID_TO_SGID	24 +#define AUDIT_COMPARE_SGID_TO_FSGID	25 + +#define AUDIT_MAX_FIELD_COMPARE		AUDIT_COMPARE_SGID_TO_FSGID + +/* Rule fields */ +				/* These are useful when checking the +				 * task structure at task creation time +				 * (AUDIT_PER_TASK).  */ +#define AUDIT_PID	0 +#define AUDIT_UID	1 +#define AUDIT_EUID	2 +#define AUDIT_SUID	3 +#define AUDIT_FSUID	4 +#define AUDIT_GID	5 +#define AUDIT_EGID	6 +#define AUDIT_SGID	7 +#define AUDIT_FSGID	8 +#define AUDIT_LOGINUID	9 +#define AUDIT_PERS	10 +#define AUDIT_ARCH	11 +#define AUDIT_MSGTYPE	12 +#define AUDIT_SUBJ_USER	13	/* security label user */ +#define AUDIT_SUBJ_ROLE	14	/* security label role */ +#define AUDIT_SUBJ_TYPE	15	/* security label type */ +#define AUDIT_SUBJ_SEN	16	/* security label sensitivity label */ +#define AUDIT_SUBJ_CLR	17	/* security label clearance label */ +#define AUDIT_PPID	18 +#define AUDIT_OBJ_USER	19 +#define AUDIT_OBJ_ROLE	20 +#define AUDIT_OBJ_TYPE	21 +#define AUDIT_OBJ_LEV_LOW	22 +#define AUDIT_OBJ_LEV_HIGH	23 + +				/* These are ONLY useful when checking +				 * at syscall exit time (AUDIT_AT_EXIT). */ +#define AUDIT_DEVMAJOR	100 +#define AUDIT_DEVMINOR	101 +#define AUDIT_INODE	102 +#define AUDIT_EXIT	103 +#define AUDIT_SUCCESS   104	/* exit >= 0; value ignored */ +#define AUDIT_WATCH	105 +#define AUDIT_PERM	106 +#define AUDIT_DIR	107 +#define AUDIT_FILETYPE	108 +#define AUDIT_OBJ_UID	109 +#define AUDIT_OBJ_GID	110 +#define AUDIT_FIELD_COMPARE	111 + +#define AUDIT_ARG0      200 +#define AUDIT_ARG1      (AUDIT_ARG0+1) +#define AUDIT_ARG2      (AUDIT_ARG0+2) +#define AUDIT_ARG3      (AUDIT_ARG0+3) + +#define AUDIT_FILTERKEY	210 + +#define AUDIT_NEGATE			0x80000000 + +/* These are the supported operators. + *	4  2  1  8 + *	=  >  <  ? + *	---------- + *	0  0  0	 0	00	nonsense + *	0  0  0	 1	08	&  bit mask + *	0  0  1	 0	10	< + *	0  1  0	 0	20	> + *	0  1  1	 0	30	!= + *	1  0  0	 0	40	= + *	1  0  0	 1	48	&=  bit test + *	1  0  1	 0	50	<= + *	1  1  0	 0	60	>= + *	1  1  1	 1	78	all operators + */ +#define AUDIT_BIT_MASK			0x08000000 +#define AUDIT_LESS_THAN			0x10000000 +#define AUDIT_GREATER_THAN		0x20000000 +#define AUDIT_NOT_EQUAL			0x30000000 +#define AUDIT_EQUAL			0x40000000 +#define AUDIT_BIT_TEST			(AUDIT_BIT_MASK|AUDIT_EQUAL) +#define AUDIT_LESS_THAN_OR_EQUAL	(AUDIT_LESS_THAN|AUDIT_EQUAL) +#define AUDIT_GREATER_THAN_OR_EQUAL	(AUDIT_GREATER_THAN|AUDIT_EQUAL) +#define AUDIT_OPERATORS			(AUDIT_EQUAL|AUDIT_NOT_EQUAL|AUDIT_BIT_MASK) + +enum { +	Audit_equal, +	Audit_not_equal, +	Audit_bitmask, +	Audit_bittest, +	Audit_lt, +	Audit_gt, +	Audit_le, +	Audit_ge, +	Audit_bad +}; + +/* Status symbols */ +				/* Mask values */ +#define AUDIT_STATUS_ENABLED		0x0001 +#define AUDIT_STATUS_FAILURE		0x0002 +#define AUDIT_STATUS_PID		0x0004 +#define AUDIT_STATUS_RATE_LIMIT		0x0008 +#define AUDIT_STATUS_BACKLOG_LIMIT	0x0010 +				/* Failure-to-log actions */ +#define AUDIT_FAIL_SILENT	0 +#define AUDIT_FAIL_PRINTK	1 +#define AUDIT_FAIL_PANIC	2 + +/* distinguish syscall tables */ +#define __AUDIT_ARCH_64BIT 0x80000000 +#define __AUDIT_ARCH_LE	   0x40000000 +#define AUDIT_ARCH_ALPHA	(EM_ALPHA|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) +#define AUDIT_ARCH_ARM		(EM_ARM|__AUDIT_ARCH_LE) +#define AUDIT_ARCH_ARMEB	(EM_ARM) +#define AUDIT_ARCH_CRIS		(EM_CRIS|__AUDIT_ARCH_LE) +#define AUDIT_ARCH_FRV		(EM_FRV) +#define AUDIT_ARCH_H8300	(EM_H8_300) +#define AUDIT_ARCH_I386		(EM_386|__AUDIT_ARCH_LE) +#define AUDIT_ARCH_IA64		(EM_IA_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) +#define AUDIT_ARCH_M32R		(EM_M32R) +#define AUDIT_ARCH_M68K		(EM_68K) +#define AUDIT_ARCH_MIPS		(EM_MIPS) +#define AUDIT_ARCH_MIPSEL	(EM_MIPS|__AUDIT_ARCH_LE) +#define AUDIT_ARCH_MIPS64	(EM_MIPS|__AUDIT_ARCH_64BIT) +#define AUDIT_ARCH_MIPSEL64	(EM_MIPS|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) +#define AUDIT_ARCH_OPENRISC	(EM_OPENRISC) +#define AUDIT_ARCH_PARISC	(EM_PARISC) +#define AUDIT_ARCH_PARISC64	(EM_PARISC|__AUDIT_ARCH_64BIT) +#define AUDIT_ARCH_PPC		(EM_PPC) +#define AUDIT_ARCH_PPC64	(EM_PPC64|__AUDIT_ARCH_64BIT) +#define AUDIT_ARCH_S390		(EM_S390) +#define AUDIT_ARCH_S390X	(EM_S390|__AUDIT_ARCH_64BIT) +#define AUDIT_ARCH_SH		(EM_SH) +#define AUDIT_ARCH_SHEL		(EM_SH|__AUDIT_ARCH_LE) +#define AUDIT_ARCH_SH64		(EM_SH|__AUDIT_ARCH_64BIT) +#define AUDIT_ARCH_SHEL64	(EM_SH|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) +#define AUDIT_ARCH_SPARC	(EM_SPARC) +#define AUDIT_ARCH_SPARC64	(EM_SPARCV9|__AUDIT_ARCH_64BIT) +#define AUDIT_ARCH_X86_64	(EM_X86_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) + +#define AUDIT_PERM_EXEC		1 +#define AUDIT_PERM_WRITE	2 +#define AUDIT_PERM_READ		4 +#define AUDIT_PERM_ATTR		8 + +struct audit_status { +	__u32		mask;		/* Bit mask for valid entries */ +	__u32		enabled;	/* 1 = enabled, 0 = disabled */ +	__u32		failure;	/* Failure-to-log action */ +	__u32		pid;		/* pid of auditd process */ +	__u32		rate_limit;	/* messages rate limit (per second) */ +	__u32		backlog_limit;	/* waiting messages limit */ +	__u32		lost;		/* messages lost */ +	__u32		backlog;	/* messages waiting in queue */ +}; + +struct audit_tty_status { +	__u32		enabled; /* 1 = enabled, 0 = disabled */ +}; + +/* audit_rule_data supports filter rules with both integer and string + * fields.  It corresponds with AUDIT_ADD_RULE, AUDIT_DEL_RULE and + * AUDIT_LIST_RULES requests. + */ +struct audit_rule_data { +	__u32		flags;	/* AUDIT_PER_{TASK,CALL}, AUDIT_PREPEND */ +	__u32		action;	/* AUDIT_NEVER, AUDIT_POSSIBLE, AUDIT_ALWAYS */ +	__u32		field_count; +	__u32		mask[AUDIT_BITMASK_SIZE]; /* syscall(s) affected */ +	__u32		fields[AUDIT_MAX_FIELDS]; +	__u32		values[AUDIT_MAX_FIELDS]; +	__u32		fieldflags[AUDIT_MAX_FIELDS]; +	__u32		buflen;	/* total length of string fields */ +	char		buf[0];	/* string fields buffer */ +}; + +/* audit_rule is supported to maintain backward compatibility with + * userspace.  It supports integer fields only and corresponds to + * AUDIT_ADD, AUDIT_DEL and AUDIT_LIST requests. + */ +struct audit_rule {		/* for AUDIT_LIST, AUDIT_ADD, and AUDIT_DEL */ +	__u32		flags;	/* AUDIT_PER_{TASK,CALL}, AUDIT_PREPEND */ +	__u32		action;	/* AUDIT_NEVER, AUDIT_POSSIBLE, AUDIT_ALWAYS */ +	__u32		field_count; +	__u32		mask[AUDIT_BITMASK_SIZE]; +	__u32		fields[AUDIT_MAX_FIELDS]; +	__u32		values[AUDIT_MAX_FIELDS]; +}; + +#endif /* _UAPI_LINUX_AUDIT_H_ */ diff --git a/include/uapi/linux/auto_fs.h b/include/uapi/linux/auto_fs.h new file mode 100644 index 00000000000..77cdba9df27 --- /dev/null +++ b/include/uapi/linux/auto_fs.h @@ -0,0 +1,83 @@ +/* -*- linux-c -*- ------------------------------------------------------- * + *    + * linux/include/linux/auto_fs.h + * + *   Copyright 1997 Transmeta Corporation - All Rights Reserved + * + * This file is part of the Linux kernel and is made available under + * the terms of the GNU General Public License, version 2, or at your + * option, any later version, incorporated herein by reference. + * + * ----------------------------------------------------------------------- */ + + +#ifndef _UAPI_LINUX_AUTO_FS_H +#define _UAPI_LINUX_AUTO_FS_H + +#include <linux/types.h> +#ifndef __KERNEL__ +#include <sys/ioctl.h> +#endif /* __KERNEL__ */ + + +/* This file describes autofs v3 */ +#define AUTOFS_PROTO_VERSION	3 + +/* Range of protocol versions defined */ +#define AUTOFS_MAX_PROTO_VERSION	AUTOFS_PROTO_VERSION +#define AUTOFS_MIN_PROTO_VERSION	AUTOFS_PROTO_VERSION + +/* + * Architectures where both 32- and 64-bit binaries can be executed + * on 64-bit kernels need this.  This keeps the structure format + * uniform, and makes sure the wait_queue_token isn't too big to be + * passed back down to the kernel. + * + * This assumes that on these architectures: + * mode     32 bit    64 bit + * ------------------------- + * int      32 bit    32 bit + * long     32 bit    64 bit + * + * If so, 32-bit user-space code should be backwards compatible. + */ + +#if defined(__sparc__) || defined(__mips__) || defined(__x86_64__) \ + || defined(__powerpc__) || defined(__s390__) +typedef unsigned int autofs_wqt_t; +#else +typedef unsigned long autofs_wqt_t; +#endif + +/* Packet types */ +#define autofs_ptype_missing	0	/* Missing entry (mount request) */ +#define autofs_ptype_expire	1	/* Expire entry (umount request) */ + +struct autofs_packet_hdr { +	int proto_version;		/* Protocol version */ +	int type;			/* Type of packet */ +}; + +struct autofs_packet_missing { +	struct autofs_packet_hdr hdr; +        autofs_wqt_t wait_queue_token; +	int len; +	char name[NAME_MAX+1]; +};	 + +/* v3 expire (via ioctl) */ +struct autofs_packet_expire { +	struct autofs_packet_hdr hdr; +	int len; +	char name[NAME_MAX+1]; +}; + +#define AUTOFS_IOC_READY      _IO(0x93,0x60) +#define AUTOFS_IOC_FAIL       _IO(0x93,0x61) +#define AUTOFS_IOC_CATATONIC  _IO(0x93,0x62) +#define AUTOFS_IOC_PROTOVER   _IOR(0x93,0x63,int) +#define AUTOFS_IOC_SETTIMEOUT32 _IOWR(0x93,0x64,compat_ulong_t) +#define AUTOFS_IOC_SETTIMEOUT _IOWR(0x93,0x64,unsigned long) +#define AUTOFS_IOC_EXPIRE     _IOR(0x93,0x65,struct autofs_packet_expire) + +#endif /* _UAPI_LINUX_AUTO_FS_H */ diff --git a/include/uapi/linux/auto_fs4.h b/include/uapi/linux/auto_fs4.h new file mode 100644 index 00000000000..e02982fa295 --- /dev/null +++ b/include/uapi/linux/auto_fs4.h @@ -0,0 +1,164 @@ +/* -*- c -*- + * linux/include/linux/auto_fs4.h + * + * Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org> + * + * This file is part of the Linux kernel and is made available under + * the terms of the GNU General Public License, version 2, or at your + * option, any later version, incorporated herein by reference. + */ + +#ifndef _LINUX_AUTO_FS4_H +#define _LINUX_AUTO_FS4_H + +/* Include common v3 definitions */ +#include <linux/types.h> +#include <linux/auto_fs.h> + +/* autofs v4 definitions */ +#undef AUTOFS_PROTO_VERSION +#undef AUTOFS_MIN_PROTO_VERSION +#undef AUTOFS_MAX_PROTO_VERSION + +#define AUTOFS_PROTO_VERSION		5 +#define AUTOFS_MIN_PROTO_VERSION	3 +#define AUTOFS_MAX_PROTO_VERSION	5 + +#define AUTOFS_PROTO_SUBVERSION		2 + +/* Mask for expire behaviour */ +#define AUTOFS_EXP_IMMEDIATE		1 +#define AUTOFS_EXP_LEAVES		2 + +#define AUTOFS_TYPE_ANY			0U +#define AUTOFS_TYPE_INDIRECT		1U +#define AUTOFS_TYPE_DIRECT		2U +#define AUTOFS_TYPE_OFFSET		4U + +static inline void set_autofs_type_indirect(unsigned int *type) +{ +	*type = AUTOFS_TYPE_INDIRECT; +	return; +} + +static inline unsigned int autofs_type_indirect(unsigned int type) +{ +	return (type == AUTOFS_TYPE_INDIRECT); +} + +static inline void set_autofs_type_direct(unsigned int *type) +{ +	*type = AUTOFS_TYPE_DIRECT; +	return; +} + +static inline unsigned int autofs_type_direct(unsigned int type) +{ +	return (type == AUTOFS_TYPE_DIRECT); +} + +static inline void set_autofs_type_offset(unsigned int *type) +{ +	*type = AUTOFS_TYPE_OFFSET; +	return; +} + +static inline unsigned int autofs_type_offset(unsigned int type) +{ +	return (type == AUTOFS_TYPE_OFFSET); +} + +static inline unsigned int autofs_type_trigger(unsigned int type) +{ +	return (type == AUTOFS_TYPE_DIRECT || type == AUTOFS_TYPE_OFFSET); +} + +/* + * This isn't really a type as we use it to say "no type set" to + * indicate we want to search for "any" mount in the + * autofs_dev_ioctl_ismountpoint() device ioctl function. + */ +static inline void set_autofs_type_any(unsigned int *type) +{ +	*type = AUTOFS_TYPE_ANY; +	return; +} + +static inline unsigned int autofs_type_any(unsigned int type) +{ +	return (type == AUTOFS_TYPE_ANY); +} + +/* Daemon notification packet types */ +enum autofs_notify { +	NFY_NONE, +	NFY_MOUNT, +	NFY_EXPIRE +}; + +/* Kernel protocol version 4 packet types */ + +/* Expire entry (umount request) */ +#define autofs_ptype_expire_multi	2 + +/* Kernel protocol version 5 packet types */ + +/* Indirect mount missing and expire requests. */ +#define autofs_ptype_missing_indirect	3 +#define autofs_ptype_expire_indirect	4 + +/* Direct mount missing and expire requests */ +#define autofs_ptype_missing_direct	5 +#define autofs_ptype_expire_direct	6 + +/* v4 multi expire (via pipe) */ +struct autofs_packet_expire_multi { +	struct autofs_packet_hdr hdr; +        autofs_wqt_t wait_queue_token; +	int len; +	char name[NAME_MAX+1]; +}; + +union autofs_packet_union { +	struct autofs_packet_hdr hdr; +	struct autofs_packet_missing missing; +	struct autofs_packet_expire expire; +	struct autofs_packet_expire_multi expire_multi; +}; + +/* autofs v5 common packet struct */ +struct autofs_v5_packet { +	struct autofs_packet_hdr hdr; +	autofs_wqt_t wait_queue_token; +	__u32 dev; +	__u64 ino; +	__u32 uid; +	__u32 gid; +	__u32 pid; +	__u32 tgid; +	__u32 len; +	char name[NAME_MAX+1]; +}; + +typedef struct autofs_v5_packet autofs_packet_missing_indirect_t; +typedef struct autofs_v5_packet autofs_packet_expire_indirect_t; +typedef struct autofs_v5_packet autofs_packet_missing_direct_t; +typedef struct autofs_v5_packet autofs_packet_expire_direct_t; + +union autofs_v5_packet_union { +	struct autofs_packet_hdr hdr; +	struct autofs_v5_packet v5_packet; +	autofs_packet_missing_indirect_t missing_indirect; +	autofs_packet_expire_indirect_t expire_indirect; +	autofs_packet_missing_direct_t missing_direct; +	autofs_packet_expire_direct_t expire_direct; +}; + +#define AUTOFS_IOC_EXPIRE_MULTI		_IOW(0x93,0x66,int) +#define AUTOFS_IOC_EXPIRE_INDIRECT	AUTOFS_IOC_EXPIRE_MULTI +#define AUTOFS_IOC_EXPIRE_DIRECT	AUTOFS_IOC_EXPIRE_MULTI +#define AUTOFS_IOC_PROTOSUBVER		_IOR(0x93,0x67,int) +#define AUTOFS_IOC_ASKUMOUNT		_IOR(0x93,0x70,int) + + +#endif /* _LINUX_AUTO_FS4_H */ diff --git a/include/uapi/linux/auxvec.h b/include/uapi/linux/auxvec.h new file mode 100644 index 00000000000..61594d598e7 --- /dev/null +++ b/include/uapi/linux/auxvec.h @@ -0,0 +1,35 @@ +#ifndef _UAPI_LINUX_AUXVEC_H +#define _UAPI_LINUX_AUXVEC_H + +#include <asm/auxvec.h> + +/* Symbolic values for the entries in the auxiliary table +   put on the initial stack */ +#define AT_NULL   0	/* end of vector */ +#define AT_IGNORE 1	/* entry should be ignored */ +#define AT_EXECFD 2	/* file descriptor of program */ +#define AT_PHDR   3	/* program headers for program */ +#define AT_PHENT  4	/* size of program header entry */ +#define AT_PHNUM  5	/* number of program headers */ +#define AT_PAGESZ 6	/* system page size */ +#define AT_BASE   7	/* base address of interpreter */ +#define AT_FLAGS  8	/* flags */ +#define AT_ENTRY  9	/* entry point of program */ +#define AT_NOTELF 10	/* program is not ELF */ +#define AT_UID    11	/* real uid */ +#define AT_EUID   12	/* effective uid */ +#define AT_GID    13	/* real gid */ +#define AT_EGID   14	/* effective gid */ +#define AT_PLATFORM 15  /* string identifying CPU for optimizations */ +#define AT_HWCAP  16    /* arch dependent hints at CPU capabilities */ +#define AT_CLKTCK 17	/* frequency at which times() increments */ +/* AT_* values 18 through 22 are reserved */ +#define AT_SECURE 23   /* secure mode boolean */ +#define AT_BASE_PLATFORM 24	/* string identifying real platform, may +				 * differ from AT_PLATFORM. */ +#define AT_RANDOM 25	/* address of 16 random bytes */ + +#define AT_EXECFN  31	/* filename of program */ + + +#endif /* _UAPI_LINUX_AUXVEC_H */ diff --git a/include/uapi/linux/ax25.h b/include/uapi/linux/ax25.h new file mode 100644 index 00000000000..74c89a41732 --- /dev/null +++ b/include/uapi/linux/ax25.h @@ -0,0 +1,116 @@ +/* + * These are the public elements of the Linux kernel AX.25 code. A similar + * file netrom.h exists for the NET/ROM protocol. + */ + +#ifndef	AX25_KERNEL_H +#define	AX25_KERNEL_H + +#include <linux/socket.h> + +#define AX25_MTU	256 +#define AX25_MAX_DIGIS  8 + +#define AX25_WINDOW	1 +#define AX25_T1		2 +#define AX25_N2		3 +#define AX25_T3		4 +#define AX25_T2		5 +#define	AX25_BACKOFF	6 +#define	AX25_EXTSEQ	7 +#define	AX25_PIDINCL	8 +#define AX25_IDLE	9 +#define AX25_PACLEN	10 +#define AX25_IAMDIGI	12 + +#define AX25_KILL	99 + +#define SIOCAX25GETUID		(SIOCPROTOPRIVATE+0) +#define SIOCAX25ADDUID		(SIOCPROTOPRIVATE+1) +#define SIOCAX25DELUID		(SIOCPROTOPRIVATE+2) +#define SIOCAX25NOUID		(SIOCPROTOPRIVATE+3) +#define SIOCAX25OPTRT		(SIOCPROTOPRIVATE+7) +#define SIOCAX25CTLCON		(SIOCPROTOPRIVATE+8) +#define SIOCAX25GETINFOOLD	(SIOCPROTOPRIVATE+9) +#define SIOCAX25ADDFWD		(SIOCPROTOPRIVATE+10) +#define SIOCAX25DELFWD		(SIOCPROTOPRIVATE+11) +#define SIOCAX25DEVCTL          (SIOCPROTOPRIVATE+12) +#define SIOCAX25GETINFO         (SIOCPROTOPRIVATE+13) + +#define AX25_SET_RT_IPMODE	2 + +#define AX25_NOUID_DEFAULT	0 +#define AX25_NOUID_BLOCK	1 + +typedef struct { +	char		ax25_call[7];	/* 6 call + SSID (shifted ascii!) */ +} ax25_address; + +struct sockaddr_ax25 { +	__kernel_sa_family_t sax25_family; +	ax25_address	sax25_call; +	int		sax25_ndigis; +	/* Digipeater ax25_address sets follow */ +}; + +#define sax25_uid	sax25_ndigis + +struct full_sockaddr_ax25 { +	struct sockaddr_ax25 fsa_ax25; +	ax25_address	fsa_digipeater[AX25_MAX_DIGIS]; +}; + +struct ax25_routes_struct { +	ax25_address	port_addr; +	ax25_address	dest_addr; +	unsigned char	digi_count; +	ax25_address	digi_addr[AX25_MAX_DIGIS]; +}; + +struct ax25_route_opt_struct { +	ax25_address	port_addr; +	ax25_address	dest_addr; +	int		cmd; +	int		arg; +}; + +struct ax25_ctl_struct { +        ax25_address            port_addr; +        ax25_address            source_addr; +        ax25_address            dest_addr; +        unsigned int            cmd; +        unsigned long           arg; +        unsigned char           digi_count; +        ax25_address            digi_addr[AX25_MAX_DIGIS]; +}; + +/* this will go away. Please do not export to user land */ +struct ax25_info_struct_deprecated { +	unsigned int	n2, n2count; +	unsigned int	t1, t1timer; +	unsigned int	t2, t2timer; +	unsigned int	t3, t3timer; +	unsigned int	idle, idletimer; +	unsigned int	state; +	unsigned int	rcv_q, snd_q; +}; + +struct ax25_info_struct { +	unsigned int	n2, n2count; +	unsigned int	t1, t1timer; +	unsigned int	t2, t2timer; +	unsigned int	t3, t3timer; +	unsigned int	idle, idletimer; +	unsigned int	state; +	unsigned int	rcv_q, snd_q; +	unsigned int	vs, vr, va, vs_max; +	unsigned int	paclen; +	unsigned int	window; +}; + +struct ax25_fwd_struct { +	ax25_address	port_from; +	ax25_address	port_to; +}; + +#endif diff --git a/include/uapi/linux/b1lli.h b/include/uapi/linux/b1lli.h new file mode 100644 index 00000000000..713f712685d --- /dev/null +++ b/include/uapi/linux/b1lli.h @@ -0,0 +1,73 @@ +/* $Id: b1lli.h,v 1.8.8.3 2001/09/23 22:25:05 kai Exp $ + * + * ISDN lowlevel-module for AVM B1-card. + * + * Copyright 1996 by Carsten Paeth (calle@calle.in-berlin.de) + * + * This software may be used and distributed according to the terms + * of the GNU General Public License, incorporated herein by reference. + * + */ + +#ifndef _B1LLI_H_ +#define _B1LLI_H_ +/* + * struct for loading t4 file  + */ +typedef struct avmb1_t4file { +	int len; +	unsigned char *data; +} avmb1_t4file; + +typedef struct avmb1_loaddef { +	int contr; +	avmb1_t4file t4file; +} avmb1_loaddef; + +typedef struct avmb1_loadandconfigdef { +	int contr; +	avmb1_t4file t4file; +        avmb1_t4file t4config;  +} avmb1_loadandconfigdef; + +typedef struct avmb1_resetdef { +	int contr; +} avmb1_resetdef; + +typedef struct avmb1_getdef { +	int contr; +	int cardtype; +	int cardstate; +} avmb1_getdef; + +/* + * struct for adding new cards  + */ +typedef struct avmb1_carddef { +	int port; +	int irq; +} avmb1_carddef; + +#define AVM_CARDTYPE_B1		0 +#define AVM_CARDTYPE_T1		1 +#define AVM_CARDTYPE_M1		2 +#define AVM_CARDTYPE_M2		3 + +typedef struct avmb1_extcarddef { +	int port; +	int irq; +        int cardtype; +        int cardnr;  /* for HEMA/T1 */ +} avmb1_extcarddef; + +#define	AVMB1_LOAD		0	/* load image to card */ +#define AVMB1_ADDCARD		1	/* add a new card - OBSOLETE */ +#define AVMB1_RESETCARD		2	/* reset a card */ +#define	AVMB1_LOAD_AND_CONFIG	3	/* load image and config to card */ +#define	AVMB1_ADDCARD_WITH_TYPE	4	/* add a new card, with cardtype */ +#define AVMB1_GET_CARDINFO	5	/* get cardtype */ +#define AVMB1_REMOVECARD	6	/* remove a card - OBSOLETE */ + +#define	AVMB1_REGISTERCARD_IS_OBSOLETE + +#endif				/* _B1LLI_H_ */ diff --git a/include/uapi/linux/baycom.h b/include/uapi/linux/baycom.h new file mode 100644 index 00000000000..81249e029da --- /dev/null +++ b/include/uapi/linux/baycom.h @@ -0,0 +1,39 @@ +/* + * The Linux BAYCOM driver for the Baycom serial 1200 baud modem + * and the parallel 9600 baud modem + * (C) 1997-1998 by Thomas Sailer, HB9JNX/AE4WA + */ + +#ifndef _BAYCOM_H +#define _BAYCOM_H + +/* -------------------------------------------------------------------- */ +/* + * structs for the IOCTL commands + */ + +struct baycom_debug_data { +	unsigned long debug1; +	unsigned long debug2; +	long debug3; +}; + +struct baycom_ioctl { +	int cmd; +	union { +		struct baycom_debug_data dbg; +	} data; +}; + +/* -------------------------------------------------------------------- */ + +/* + * ioctl values change for baycom + */ +#define BAYCOMCTL_GETDEBUG       0x92 + +/* -------------------------------------------------------------------- */ + +#endif /* _BAYCOM_H */ + +/* --------------------------------------------------------------------- */ diff --git a/include/uapi/linux/bfs_fs.h b/include/uapi/linux/bfs_fs.h new file mode 100644 index 00000000000..1c0b355aa51 --- /dev/null +++ b/include/uapi/linux/bfs_fs.h @@ -0,0 +1,81 @@ +/* + *	include/linux/bfs_fs.h - BFS data structures on disk. + *	Copyright (C) 1999 Tigran Aivazian <tigran@veritas.com> + */ + +#ifndef _LINUX_BFS_FS_H +#define _LINUX_BFS_FS_H + +#include <linux/types.h> + +#define BFS_BSIZE_BITS		9 +#define BFS_BSIZE		(1<<BFS_BSIZE_BITS) + +#define BFS_MAGIC		0x1BADFACE +#define BFS_ROOT_INO		2 +#define BFS_INODES_PER_BLOCK	8 + +/* SVR4 vnode type values (bfs_inode->i_vtype) */ +#define BFS_VDIR 2L +#define BFS_VREG 1L + +/* BFS inode layout on disk */ +struct bfs_inode { +	__le16 i_ino; +	__u16 i_unused; +	__le32 i_sblock; +	__le32 i_eblock; +	__le32 i_eoffset; +	__le32 i_vtype; +	__le32 i_mode; +	__le32 i_uid; +	__le32 i_gid; +	__le32 i_nlink; +	__le32 i_atime; +	__le32 i_mtime; +	__le32 i_ctime; +	__u32 i_padding[4]; +}; + +#define BFS_NAMELEN		14	 +#define BFS_DIRENT_SIZE		16 +#define BFS_DIRS_PER_BLOCK	32 + +struct bfs_dirent { +	__le16 ino; +	char name[BFS_NAMELEN]; +}; + +/* BFS superblock layout on disk */ +struct bfs_super_block { +	__le32 s_magic; +	__le32 s_start; +	__le32 s_end; +	__le32 s_from; +	__le32 s_to; +	__s32 s_bfrom; +	__s32 s_bto; +	char  s_fsname[6]; +	char  s_volume[6]; +	__u32 s_padding[118]; +}; + + +#define BFS_OFF2INO(offset) \ +        ((((offset) - BFS_BSIZE) / sizeof(struct bfs_inode)) + BFS_ROOT_INO) + +#define BFS_INO2OFF(ino) \ +	((__u32)(((ino) - BFS_ROOT_INO) * sizeof(struct bfs_inode)) + BFS_BSIZE) +#define BFS_NZFILESIZE(ip) \ +        ((le32_to_cpu((ip)->i_eoffset) + 1) -  le32_to_cpu((ip)->i_sblock) * BFS_BSIZE) + +#define BFS_FILESIZE(ip) \ +        ((ip)->i_sblock == 0 ? 0 : BFS_NZFILESIZE(ip)) + +#define BFS_FILEBLOCKS(ip) \ +        ((ip)->i_sblock == 0 ? 0 : (le32_to_cpu((ip)->i_eblock) + 1) -  le32_to_cpu((ip)->i_sblock)) +#define BFS_UNCLEAN(bfs_sb, sb)	\ +	((le32_to_cpu(bfs_sb->s_from) != -1) && (le32_to_cpu(bfs_sb->s_to) != -1) && !(sb->s_flags & MS_RDONLY)) + + +#endif	/* _LINUX_BFS_FS_H */ diff --git a/include/uapi/linux/binfmts.h b/include/uapi/linux/binfmts.h new file mode 100644 index 00000000000..4eb5972867c --- /dev/null +++ b/include/uapi/linux/binfmts.h @@ -0,0 +1,20 @@ +#ifndef _UAPI_LINUX_BINFMTS_H +#define _UAPI_LINUX_BINFMTS_H + +#include <linux/capability.h> + +struct pt_regs; + +/* + * These are the maximum length and maximum number of strings passed to the + * execve() system call.  MAX_ARG_STRLEN is essentially random but serves to + * prevent the kernel from being unduly impacted by misaddressed pointers. + * MAX_ARG_STRINGS is chosen to fit in a signed 32-bit integer. + */ +#define MAX_ARG_STRLEN (PAGE_SIZE * 32) +#define MAX_ARG_STRINGS 0x7FFFFFFF + +/* sizeof(linux_binprm->buf) */ +#define BINPRM_BUF_SIZE 128 + +#endif /* _UAPI_LINUX_BINFMTS_H */ diff --git a/include/uapi/linux/blkpg.h b/include/uapi/linux/blkpg.h new file mode 100644 index 00000000000..a8519446c11 --- /dev/null +++ b/include/uapi/linux/blkpg.h @@ -0,0 +1,59 @@ +#ifndef _LINUX_BLKPG_H +#define _LINUX_BLKPG_H + +/* + * Partition table and disk geometry handling + * + * A single ioctl with lots of subfunctions: + * + * Device number stuff: + *    get_whole_disk()		(given the device number of a partition, + *                               find the device number of the encompassing disk) + *    get_all_partitions()	(given the device number of a disk, return the + *				 device numbers of all its known partitions) + * + * Partition stuff: + *    add_partition() + *    delete_partition() + *    test_partition_in_use()	(also for test_disk_in_use) + * + * Geometry stuff: + *    get_geometry() + *    set_geometry() + *    get_bios_drivedata() + * + * For today, only the partition stuff - aeb, 990515 + */ +#include <linux/compiler.h> +#include <linux/ioctl.h> + +#define BLKPG      _IO(0x12,105) + +/* The argument structure */ +struct blkpg_ioctl_arg { +        int op; +        int flags; +        int datalen; +        void __user *data; +}; + +/* The subfunctions (for the op field) */ +#define BLKPG_ADD_PARTITION	1 +#define BLKPG_DEL_PARTITION	2 +#define BLKPG_RESIZE_PARTITION	3 + +/* Sizes of name fields. Unused at present. */ +#define BLKPG_DEVNAMELTH	64 +#define BLKPG_VOLNAMELTH	64 + +/* The data structure for ADD_PARTITION and DEL_PARTITION */ +struct blkpg_partition { +	long long start;		/* starting offset in bytes */ +	long long length;		/* length in bytes */ +	int pno;			/* partition number */ +	char devname[BLKPG_DEVNAMELTH];	/* partition name, like sda5 or c0d1p2, +					   to be used in kernel messages */ +	char volname[BLKPG_VOLNAMELTH];	/* volume label */ +}; + +#endif /* _LINUX_BLKPG_H */ diff --git a/include/uapi/linux/blktrace_api.h b/include/uapi/linux/blktrace_api.h new file mode 100644 index 00000000000..c590ca6bfbd --- /dev/null +++ b/include/uapi/linux/blktrace_api.h @@ -0,0 +1,142 @@ +#ifndef _UAPIBLKTRACE_H +#define _UAPIBLKTRACE_H + +#include <linux/types.h> + +/* + * Trace categories + */ +enum blktrace_cat { +	BLK_TC_READ	= 1 << 0,	/* reads */ +	BLK_TC_WRITE	= 1 << 1,	/* writes */ +	BLK_TC_FLUSH	= 1 << 2,	/* flush */ +	BLK_TC_SYNC	= 1 << 3,	/* sync IO */ +	BLK_TC_SYNCIO	= BLK_TC_SYNC, +	BLK_TC_QUEUE	= 1 << 4,	/* queueing/merging */ +	BLK_TC_REQUEUE	= 1 << 5,	/* requeueing */ +	BLK_TC_ISSUE	= 1 << 6,	/* issue */ +	BLK_TC_COMPLETE	= 1 << 7,	/* completions */ +	BLK_TC_FS	= 1 << 8,	/* fs requests */ +	BLK_TC_PC	= 1 << 9,	/* pc requests */ +	BLK_TC_NOTIFY	= 1 << 10,	/* special message */ +	BLK_TC_AHEAD	= 1 << 11,	/* readahead */ +	BLK_TC_META	= 1 << 12,	/* metadata */ +	BLK_TC_DISCARD	= 1 << 13,	/* discard requests */ +	BLK_TC_DRV_DATA	= 1 << 14,	/* binary per-driver data */ +	BLK_TC_FUA	= 1 << 15,	/* fua requests */ + +	BLK_TC_END	= 1 << 15,	/* we've run out of bits! */ +}; + +#define BLK_TC_SHIFT		(16) +#define BLK_TC_ACT(act)		((act) << BLK_TC_SHIFT) + +/* + * Basic trace actions + */ +enum blktrace_act { +	__BLK_TA_QUEUE = 1,		/* queued */ +	__BLK_TA_BACKMERGE,		/* back merged to existing rq */ +	__BLK_TA_FRONTMERGE,		/* front merge to existing rq */ +	__BLK_TA_GETRQ,			/* allocated new request */ +	__BLK_TA_SLEEPRQ,		/* sleeping on rq allocation */ +	__BLK_TA_REQUEUE,		/* request requeued */ +	__BLK_TA_ISSUE,			/* sent to driver */ +	__BLK_TA_COMPLETE,		/* completed by driver */ +	__BLK_TA_PLUG,			/* queue was plugged */ +	__BLK_TA_UNPLUG_IO,		/* queue was unplugged by io */ +	__BLK_TA_UNPLUG_TIMER,		/* queue was unplugged by timer */ +	__BLK_TA_INSERT,		/* insert request */ +	__BLK_TA_SPLIT,			/* bio was split */ +	__BLK_TA_BOUNCE,		/* bio was bounced */ +	__BLK_TA_REMAP,			/* bio was remapped */ +	__BLK_TA_ABORT,			/* request aborted */ +	__BLK_TA_DRV_DATA,		/* driver-specific binary data */ +}; + +/* + * Notify events. + */ +enum blktrace_notify { +	__BLK_TN_PROCESS = 0,		/* establish pid/name mapping */ +	__BLK_TN_TIMESTAMP,		/* include system clock */ +	__BLK_TN_MESSAGE,		/* Character string message */ +}; + + +/* + * Trace actions in full. Additionally, read or write is masked + */ +#define BLK_TA_QUEUE		(__BLK_TA_QUEUE | BLK_TC_ACT(BLK_TC_QUEUE)) +#define BLK_TA_BACKMERGE	(__BLK_TA_BACKMERGE | BLK_TC_ACT(BLK_TC_QUEUE)) +#define BLK_TA_FRONTMERGE	(__BLK_TA_FRONTMERGE | BLK_TC_ACT(BLK_TC_QUEUE)) +#define	BLK_TA_GETRQ		(__BLK_TA_GETRQ | BLK_TC_ACT(BLK_TC_QUEUE)) +#define	BLK_TA_SLEEPRQ		(__BLK_TA_SLEEPRQ | BLK_TC_ACT(BLK_TC_QUEUE)) +#define	BLK_TA_REQUEUE		(__BLK_TA_REQUEUE | BLK_TC_ACT(BLK_TC_REQUEUE)) +#define BLK_TA_ISSUE		(__BLK_TA_ISSUE | BLK_TC_ACT(BLK_TC_ISSUE)) +#define BLK_TA_COMPLETE		(__BLK_TA_COMPLETE| BLK_TC_ACT(BLK_TC_COMPLETE)) +#define BLK_TA_PLUG		(__BLK_TA_PLUG | BLK_TC_ACT(BLK_TC_QUEUE)) +#define BLK_TA_UNPLUG_IO	(__BLK_TA_UNPLUG_IO | BLK_TC_ACT(BLK_TC_QUEUE)) +#define BLK_TA_UNPLUG_TIMER	(__BLK_TA_UNPLUG_TIMER | BLK_TC_ACT(BLK_TC_QUEUE)) +#define BLK_TA_INSERT		(__BLK_TA_INSERT | BLK_TC_ACT(BLK_TC_QUEUE)) +#define BLK_TA_SPLIT		(__BLK_TA_SPLIT) +#define BLK_TA_BOUNCE		(__BLK_TA_BOUNCE) +#define BLK_TA_REMAP		(__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE)) +#define BLK_TA_ABORT		(__BLK_TA_ABORT | BLK_TC_ACT(BLK_TC_QUEUE)) +#define BLK_TA_DRV_DATA	(__BLK_TA_DRV_DATA | BLK_TC_ACT(BLK_TC_DRV_DATA)) + +#define BLK_TN_PROCESS		(__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY)) +#define BLK_TN_TIMESTAMP	(__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY)) +#define BLK_TN_MESSAGE		(__BLK_TN_MESSAGE | BLK_TC_ACT(BLK_TC_NOTIFY)) + +#define BLK_IO_TRACE_MAGIC	0x65617400 +#define BLK_IO_TRACE_VERSION	0x07 + +/* + * The trace itself + */ +struct blk_io_trace { +	__u32 magic;		/* MAGIC << 8 | version */ +	__u32 sequence;		/* event number */ +	__u64 time;		/* in microseconds */ +	__u64 sector;		/* disk offset */ +	__u32 bytes;		/* transfer length */ +	__u32 action;		/* what happened */ +	__u32 pid;		/* who did it */ +	__u32 device;		/* device number */ +	__u32 cpu;		/* on what cpu did it happen */ +	__u16 error;		/* completion error */ +	__u16 pdu_len;		/* length of data after this trace */ +}; + +/* + * The remap event + */ +struct blk_io_trace_remap { +	__be32 device_from; +	__be32 device_to; +	__be64 sector_from; +}; + +enum { +	Blktrace_setup = 1, +	Blktrace_running, +	Blktrace_stopped, +}; + +#define BLKTRACE_BDEV_SIZE	32 + +/* + * User setup structure passed with BLKTRACESTART + */ +struct blk_user_trace_setup { +	char name[BLKTRACE_BDEV_SIZE];	/* output */ +	__u16 act_mask;			/* input */ +	__u32 buf_size;			/* input */ +	__u32 buf_nr;			/* input */ +	__u64 start_lba; +	__u64 end_lba; +	__u32 pid; +}; + +#endif /* _UAPIBLKTRACE_H */ diff --git a/include/uapi/linux/bpqether.h b/include/uapi/linux/bpqether.h new file mode 100644 index 00000000000..a6c35e1a89a --- /dev/null +++ b/include/uapi/linux/bpqether.h @@ -0,0 +1,41 @@ +#ifndef	__BPQETHER_H +#define	__BPQETHER_H + +/* + * 	Defines for the BPQETHER pseudo device driver + */ + +#ifndef __LINUX_IF_ETHER_H +#include <linux/if_ether.h> +#endif + +#define SIOCSBPQETHOPT		(SIOCDEVPRIVATE+0)	/* reserved */ +#define SIOCSBPQETHADDR		(SIOCDEVPRIVATE+1) +  +struct bpq_ethaddr { +	unsigned char destination[ETH_ALEN]; +	unsigned char accept[ETH_ALEN]; +}; + +/*  + * For SIOCSBPQETHOPT - this is compatible with PI2/PacketTwin card drivers, + * currently not implemented, though. If someone wants to hook a radio + * to his Ethernet card he may find this useful. ;-) + */ + +#define SIOCGBPQETHPARAM	0x5000  /* get Level 1 parameters */ +#define SIOCSBPQETHPARAM	0x5001  /* set */ + +struct bpq_req  { +    int cmd; +    int speed;			/* unused */ +    int clockmode;		/* unused */ +    int txdelay; +    unsigned char persist;	/* unused */ +    int slotime;		/* unused */ +    int squeldelay; +    int dmachan;		/* unused */ +    int irq;			/* unused */ +}; + +#endif diff --git a/include/uapi/linux/bsg.h b/include/uapi/linux/bsg.h new file mode 100644 index 00000000000..7a12e1c0f37 --- /dev/null +++ b/include/uapi/linux/bsg.h @@ -0,0 +1,65 @@ +#ifndef _UAPIBSG_H +#define _UAPIBSG_H + +#include <linux/types.h> + +#define BSG_PROTOCOL_SCSI		0 + +#define BSG_SUB_PROTOCOL_SCSI_CMD	0 +#define BSG_SUB_PROTOCOL_SCSI_TMF	1 +#define BSG_SUB_PROTOCOL_SCSI_TRANSPORT	2 + +/* + * For flags member below + * sg.h sg_io_hdr also has bits defined for it's flags member. However + * none of these bits are implemented/used by bsg. The bits below are + * allocated to not conflict with sg.h ones anyway. + */ +#define BSG_FLAG_Q_AT_TAIL 0x10 /* default, == 0 at this bit, is Q_AT_HEAD */ + +struct sg_io_v4 { +	__s32 guard;		/* [i] 'Q' to differentiate from v3 */ +	__u32 protocol;		/* [i] 0 -> SCSI , .... */ +	__u32 subprotocol;	/* [i] 0 -> SCSI command, 1 -> SCSI task +				   management function, .... */ + +	__u32 request_len;	/* [i] in bytes */ +	__u64 request;		/* [i], [*i] {SCSI: cdb} */ +	__u64 request_tag;	/* [i] {SCSI: task tag (only if flagged)} */ +	__u32 request_attr;	/* [i] {SCSI: task attribute} */ +	__u32 request_priority;	/* [i] {SCSI: task priority} */ +	__u32 request_extra;	/* [i] {spare, for padding} */ +	__u32 max_response_len;	/* [i] in bytes */ +	__u64 response;		/* [i], [*o] {SCSI: (auto)sense data} */ + +        /* "dout_": data out (to device); "din_": data in (from device) */ +	__u32 dout_iovec_count;	/* [i] 0 -> "flat" dout transfer else +				   dout_xfer points to array of iovec */ +	__u32 dout_xfer_len;	/* [i] bytes to be transferred to device */ +	__u32 din_iovec_count;	/* [i] 0 -> "flat" din transfer */ +	__u32 din_xfer_len;	/* [i] bytes to be transferred from device */ +	__u64 dout_xferp;	/* [i], [*i] */ +	__u64 din_xferp;	/* [i], [*o] */ + +	__u32 timeout;		/* [i] units: millisecond */ +	__u32 flags;		/* [i] bit mask */ +	__u64 usr_ptr;		/* [i->o] unused internally */ +	__u32 spare_in;		/* [i] */ + +	__u32 driver_status;	/* [o] 0 -> ok */ +	__u32 transport_status;	/* [o] 0 -> ok */ +	__u32 device_status;	/* [o] {SCSI: command completion status} */ +	__u32 retry_delay;	/* [o] {SCSI: status auxiliary information} */ +	__u32 info;		/* [o] additional information */ +	__u32 duration;		/* [o] time to complete, in milliseconds */ +	__u32 response_len;	/* [o] bytes of response actually written */ +	__s32 din_resid;	/* [o] din_xfer_len - actual_din_xfer_len */ +	__s32 dout_resid;	/* [o] dout_xfer_len - actual_dout_xfer_len */ +	__u64 generated_tag;	/* [o] {SCSI: transport generated task tag} */ +	__u32 spare_out;	/* [o] */ + +	__u32 padding; +}; + + +#endif /* _UAPIBSG_H */ diff --git a/include/uapi/linux/byteorder/Kbuild b/include/uapi/linux/byteorder/Kbuild index aafaa5aa54d..619225b9ff2 100644 --- a/include/uapi/linux/byteorder/Kbuild +++ b/include/uapi/linux/byteorder/Kbuild @@ -1 +1,3 @@  # UAPI Header export list +header-y += big_endian.h +header-y += little_endian.h diff --git a/include/uapi/linux/byteorder/big_endian.h b/include/uapi/linux/byteorder/big_endian.h new file mode 100644 index 00000000000..67237445009 --- /dev/null +++ b/include/uapi/linux/byteorder/big_endian.h @@ -0,0 +1,105 @@ +#ifndef _UAPI_LINUX_BYTEORDER_BIG_ENDIAN_H +#define _UAPI_LINUX_BYTEORDER_BIG_ENDIAN_H + +#ifndef __BIG_ENDIAN +#define __BIG_ENDIAN 4321 +#endif +#ifndef __BIG_ENDIAN_BITFIELD +#define __BIG_ENDIAN_BITFIELD +#endif + +#include <linux/types.h> +#include <linux/swab.h> + +#define __constant_htonl(x) ((__force __be32)(__u32)(x)) +#define __constant_ntohl(x) ((__force __u32)(__be32)(x)) +#define __constant_htons(x) ((__force __be16)(__u16)(x)) +#define __constant_ntohs(x) ((__force __u16)(__be16)(x)) +#define __constant_cpu_to_le64(x) ((__force __le64)___constant_swab64((x))) +#define __constant_le64_to_cpu(x) ___constant_swab64((__force __u64)(__le64)(x)) +#define __constant_cpu_to_le32(x) ((__force __le32)___constant_swab32((x))) +#define __constant_le32_to_cpu(x) ___constant_swab32((__force __u32)(__le32)(x)) +#define __constant_cpu_to_le16(x) ((__force __le16)___constant_swab16((x))) +#define __constant_le16_to_cpu(x) ___constant_swab16((__force __u16)(__le16)(x)) +#define __constant_cpu_to_be64(x) ((__force __be64)(__u64)(x)) +#define __constant_be64_to_cpu(x) ((__force __u64)(__be64)(x)) +#define __constant_cpu_to_be32(x) ((__force __be32)(__u32)(x)) +#define __constant_be32_to_cpu(x) ((__force __u32)(__be32)(x)) +#define __constant_cpu_to_be16(x) ((__force __be16)(__u16)(x)) +#define __constant_be16_to_cpu(x) ((__force __u16)(__be16)(x)) +#define __cpu_to_le64(x) ((__force __le64)__swab64((x))) +#define __le64_to_cpu(x) __swab64((__force __u64)(__le64)(x)) +#define __cpu_to_le32(x) ((__force __le32)__swab32((x))) +#define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x)) +#define __cpu_to_le16(x) ((__force __le16)__swab16((x))) +#define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x)) +#define __cpu_to_be64(x) ((__force __be64)(__u64)(x)) +#define __be64_to_cpu(x) ((__force __u64)(__be64)(x)) +#define __cpu_to_be32(x) ((__force __be32)(__u32)(x)) +#define __be32_to_cpu(x) ((__force __u32)(__be32)(x)) +#define __cpu_to_be16(x) ((__force __be16)(__u16)(x)) +#define __be16_to_cpu(x) ((__force __u16)(__be16)(x)) + +static inline __le64 __cpu_to_le64p(const __u64 *p) +{ +	return (__force __le64)__swab64p(p); +} +static inline __u64 __le64_to_cpup(const __le64 *p) +{ +	return __swab64p((__u64 *)p); +} +static inline __le32 __cpu_to_le32p(const __u32 *p) +{ +	return (__force __le32)__swab32p(p); +} +static inline __u32 __le32_to_cpup(const __le32 *p) +{ +	return __swab32p((__u32 *)p); +} +static inline __le16 __cpu_to_le16p(const __u16 *p) +{ +	return (__force __le16)__swab16p(p); +} +static inline __u16 __le16_to_cpup(const __le16 *p) +{ +	return __swab16p((__u16 *)p); +} +static inline __be64 __cpu_to_be64p(const __u64 *p) +{ +	return (__force __be64)*p; +} +static inline __u64 __be64_to_cpup(const __be64 *p) +{ +	return (__force __u64)*p; +} +static inline __be32 __cpu_to_be32p(const __u32 *p) +{ +	return (__force __be32)*p; +} +static inline __u32 __be32_to_cpup(const __be32 *p) +{ +	return (__force __u32)*p; +} +static inline __be16 __cpu_to_be16p(const __u16 *p) +{ +	return (__force __be16)*p; +} +static inline __u16 __be16_to_cpup(const __be16 *p) +{ +	return (__force __u16)*p; +} +#define __cpu_to_le64s(x) __swab64s((x)) +#define __le64_to_cpus(x) __swab64s((x)) +#define __cpu_to_le32s(x) __swab32s((x)) +#define __le32_to_cpus(x) __swab32s((x)) +#define __cpu_to_le16s(x) __swab16s((x)) +#define __le16_to_cpus(x) __swab16s((x)) +#define __cpu_to_be64s(x) do { (void)(x); } while (0) +#define __be64_to_cpus(x) do { (void)(x); } while (0) +#define __cpu_to_be32s(x) do { (void)(x); } while (0) +#define __be32_to_cpus(x) do { (void)(x); } while (0) +#define __cpu_to_be16s(x) do { (void)(x); } while (0) +#define __be16_to_cpus(x) do { (void)(x); } while (0) + + +#endif /* _UAPI_LINUX_BYTEORDER_BIG_ENDIAN_H */ diff --git a/include/uapi/linux/byteorder/little_endian.h b/include/uapi/linux/byteorder/little_endian.h new file mode 100644 index 00000000000..d876736a001 --- /dev/null +++ b/include/uapi/linux/byteorder/little_endian.h @@ -0,0 +1,105 @@ +#ifndef _UAPI_LINUX_BYTEORDER_LITTLE_ENDIAN_H +#define _UAPI_LINUX_BYTEORDER_LITTLE_ENDIAN_H + +#ifndef __LITTLE_ENDIAN +#define __LITTLE_ENDIAN 1234 +#endif +#ifndef __LITTLE_ENDIAN_BITFIELD +#define __LITTLE_ENDIAN_BITFIELD +#endif + +#include <linux/types.h> +#include <linux/swab.h> + +#define __constant_htonl(x) ((__force __be32)___constant_swab32((x))) +#define __constant_ntohl(x) ___constant_swab32((__force __be32)(x)) +#define __constant_htons(x) ((__force __be16)___constant_swab16((x))) +#define __constant_ntohs(x) ___constant_swab16((__force __be16)(x)) +#define __constant_cpu_to_le64(x) ((__force __le64)(__u64)(x)) +#define __constant_le64_to_cpu(x) ((__force __u64)(__le64)(x)) +#define __constant_cpu_to_le32(x) ((__force __le32)(__u32)(x)) +#define __constant_le32_to_cpu(x) ((__force __u32)(__le32)(x)) +#define __constant_cpu_to_le16(x) ((__force __le16)(__u16)(x)) +#define __constant_le16_to_cpu(x) ((__force __u16)(__le16)(x)) +#define __constant_cpu_to_be64(x) ((__force __be64)___constant_swab64((x))) +#define __constant_be64_to_cpu(x) ___constant_swab64((__force __u64)(__be64)(x)) +#define __constant_cpu_to_be32(x) ((__force __be32)___constant_swab32((x))) +#define __constant_be32_to_cpu(x) ___constant_swab32((__force __u32)(__be32)(x)) +#define __constant_cpu_to_be16(x) ((__force __be16)___constant_swab16((x))) +#define __constant_be16_to_cpu(x) ___constant_swab16((__force __u16)(__be16)(x)) +#define __cpu_to_le64(x) ((__force __le64)(__u64)(x)) +#define __le64_to_cpu(x) ((__force __u64)(__le64)(x)) +#define __cpu_to_le32(x) ((__force __le32)(__u32)(x)) +#define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) +#define __cpu_to_le16(x) ((__force __le16)(__u16)(x)) +#define __le16_to_cpu(x) ((__force __u16)(__le16)(x)) +#define __cpu_to_be64(x) ((__force __be64)__swab64((x))) +#define __be64_to_cpu(x) __swab64((__force __u64)(__be64)(x)) +#define __cpu_to_be32(x) ((__force __be32)__swab32((x))) +#define __be32_to_cpu(x) __swab32((__force __u32)(__be32)(x)) +#define __cpu_to_be16(x) ((__force __be16)__swab16((x))) +#define __be16_to_cpu(x) __swab16((__force __u16)(__be16)(x)) + +static inline __le64 __cpu_to_le64p(const __u64 *p) +{ +	return (__force __le64)*p; +} +static inline __u64 __le64_to_cpup(const __le64 *p) +{ +	return (__force __u64)*p; +} +static inline __le32 __cpu_to_le32p(const __u32 *p) +{ +	return (__force __le32)*p; +} +static inline __u32 __le32_to_cpup(const __le32 *p) +{ +	return (__force __u32)*p; +} +static inline __le16 __cpu_to_le16p(const __u16 *p) +{ +	return (__force __le16)*p; +} +static inline __u16 __le16_to_cpup(const __le16 *p) +{ +	return (__force __u16)*p; +} +static inline __be64 __cpu_to_be64p(const __u64 *p) +{ +	return (__force __be64)__swab64p(p); +} +static inline __u64 __be64_to_cpup(const __be64 *p) +{ +	return __swab64p((__u64 *)p); +} +static inline __be32 __cpu_to_be32p(const __u32 *p) +{ +	return (__force __be32)__swab32p(p); +} +static inline __u32 __be32_to_cpup(const __be32 *p) +{ +	return __swab32p((__u32 *)p); +} +static inline __be16 __cpu_to_be16p(const __u16 *p) +{ +	return (__force __be16)__swab16p(p); +} +static inline __u16 __be16_to_cpup(const __be16 *p) +{ +	return __swab16p((__u16 *)p); +} +#define __cpu_to_le64s(x) do { (void)(x); } while (0) +#define __le64_to_cpus(x) do { (void)(x); } while (0) +#define __cpu_to_le32s(x) do { (void)(x); } while (0) +#define __le32_to_cpus(x) do { (void)(x); } while (0) +#define __cpu_to_le16s(x) do { (void)(x); } while (0) +#define __le16_to_cpus(x) do { (void)(x); } while (0) +#define __cpu_to_be64s(x) __swab64s((x)) +#define __be64_to_cpus(x) __swab64s((x)) +#define __cpu_to_be32s(x) __swab32s((x)) +#define __be32_to_cpus(x) __swab32s((x)) +#define __cpu_to_be16s(x) __swab16s((x)) +#define __be16_to_cpus(x) __swab16s((x)) + + +#endif /* _UAPI_LINUX_BYTEORDER_LITTLE_ENDIAN_H */ diff --git a/include/uapi/linux/can.h b/include/uapi/linux/can.h new file mode 100644 index 00000000000..e52958d7c2d --- /dev/null +++ b/include/uapi/linux/can.h @@ -0,0 +1,162 @@ +/* + * linux/can.h + * + * Definitions for CAN network layer (socket addr / CAN frame / CAN filter) + * + * Authors: Oliver Hartkopp <oliver.hartkopp@volkswagen.de> + *          Urs Thuermann   <urs.thuermann@volkswagen.de> + * Copyright (c) 2002-2007 Volkswagen Group Electronic Research + * All rights reserved. + * + */ + +#ifndef CAN_H +#define CAN_H + +#include <linux/types.h> +#include <linux/socket.h> + +/* controller area network (CAN) kernel definitions */ + +/* special address description flags for the CAN_ID */ +#define CAN_EFF_FLAG 0x80000000U /* EFF/SFF is set in the MSB */ +#define CAN_RTR_FLAG 0x40000000U /* remote transmission request */ +#define CAN_ERR_FLAG 0x20000000U /* error message frame */ + +/* valid bits in CAN ID for frame formats */ +#define CAN_SFF_MASK 0x000007FFU /* standard frame format (SFF) */ +#define CAN_EFF_MASK 0x1FFFFFFFU /* extended frame format (EFF) */ +#define CAN_ERR_MASK 0x1FFFFFFFU /* omit EFF, RTR, ERR flags */ + +/* + * Controller Area Network Identifier structure + * + * bit 0-28	: CAN identifier (11/29 bit) + * bit 29	: error message frame flag (0 = data frame, 1 = error message) + * bit 30	: remote transmission request flag (1 = rtr frame) + * bit 31	: frame format flag (0 = standard 11 bit, 1 = extended 29 bit) + */ +typedef __u32 canid_t; + +#define CAN_SFF_ID_BITS		11 +#define CAN_EFF_ID_BITS		29 + +/* + * Controller Area Network Error Message Frame Mask structure + * + * bit 0-28	: error class mask (see include/linux/can/error.h) + * bit 29-31	: set to zero + */ +typedef __u32 can_err_mask_t; + +/* CAN payload length and DLC definitions according to ISO 11898-1 */ +#define CAN_MAX_DLC 8 +#define CAN_MAX_DLEN 8 + +/* CAN FD payload length and DLC definitions according to ISO 11898-7 */ +#define CANFD_MAX_DLC 15 +#define CANFD_MAX_DLEN 64 + +/** + * struct can_frame - basic CAN frame structure + * @can_id:  CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition + * @can_dlc: frame payload length in byte (0 .. 8) aka data length code + *           N.B. the DLC field from ISO 11898-1 Chapter 8.4.2.3 has a 1:1 + *           mapping of the 'data length code' to the real payload length + * @data:    CAN frame payload (up to 8 byte) + */ +struct can_frame { +	canid_t can_id;  /* 32 bit CAN_ID + EFF/RTR/ERR flags */ +	__u8    can_dlc; /* frame payload length in byte (0 .. CAN_MAX_DLEN) */ +	__u8    data[CAN_MAX_DLEN] __attribute__((aligned(8))); +}; + +/* + * defined bits for canfd_frame.flags + * + * The use of struct canfd_frame implies the Extended Data Length (EDL) bit to + * be set in the CAN frame bitstream on the wire. The EDL bit switch turns + * the CAN controllers bitstream processor into the CAN FD mode which creates + * two new options within the CAN FD frame specification: + * + * Bit Rate Switch - to indicate a second bitrate is/was used for the payload + * Error State Indicator - represents the error state of the transmitting node + * + * As the CANFD_ESI bit is internally generated by the transmitting CAN + * controller only the CANFD_BRS bit is relevant for real CAN controllers when + * building a CAN FD frame for transmission. Setting the CANFD_ESI bit can make + * sense for virtual CAN interfaces to test applications with echoed frames. + */ +#define CANFD_BRS 0x01 /* bit rate switch (second bitrate for payload data) */ +#define CANFD_ESI 0x02 /* error state indicator of the transmitting node */ + +/** + * struct canfd_frame - CAN flexible data rate frame structure + * @can_id: CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition + * @len:    frame payload length in byte (0 .. CANFD_MAX_DLEN) + * @flags:  additional flags for CAN FD + * @__res0: reserved / padding + * @__res1: reserved / padding + * @data:   CAN FD frame payload (up to CANFD_MAX_DLEN byte) + */ +struct canfd_frame { +	canid_t can_id;  /* 32 bit CAN_ID + EFF/RTR/ERR flags */ +	__u8    len;     /* frame payload length in byte */ +	__u8    flags;   /* additional flags for CAN FD */ +	__u8    __res0;  /* reserved / padding */ +	__u8    __res1;  /* reserved / padding */ +	__u8    data[CANFD_MAX_DLEN] __attribute__((aligned(8))); +}; + +#define CAN_MTU		(sizeof(struct can_frame)) +#define CANFD_MTU	(sizeof(struct canfd_frame)) + +/* particular protocols of the protocol family PF_CAN */ +#define CAN_RAW		1 /* RAW sockets */ +#define CAN_BCM		2 /* Broadcast Manager */ +#define CAN_TP16	3 /* VAG Transport Protocol v1.6 */ +#define CAN_TP20	4 /* VAG Transport Protocol v2.0 */ +#define CAN_MCNET	5 /* Bosch MCNet */ +#define CAN_ISOTP	6 /* ISO 15765-2 Transport Protocol */ +#define CAN_NPROTO	7 + +#define SOL_CAN_BASE 100 + +/** + * struct sockaddr_can - the sockaddr structure for CAN sockets + * @can_family:  address family number AF_CAN. + * @can_ifindex: CAN network interface index. + * @can_addr:    protocol specific address information + */ +struct sockaddr_can { +	__kernel_sa_family_t can_family; +	int         can_ifindex; +	union { +		/* transport protocol class address information (e.g. ISOTP) */ +		struct { canid_t rx_id, tx_id; } tp; + +		/* reserved for future CAN protocols address information */ +	} can_addr; +}; + +/** + * struct can_filter - CAN ID based filter in can_register(). + * @can_id:   relevant bits of CAN ID which are not masked out. + * @can_mask: CAN mask (see description) + * + * Description: + * A filter matches, when + * + *          <received_can_id> & mask == can_id & mask + * + * The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can + * filter for error message frames (CAN_ERR_FLAG bit set in mask). + */ +struct can_filter { +	canid_t can_id; +	canid_t can_mask; +}; + +#define CAN_INV_FILTER 0x20000000U /* to be set in can_filter.can_id */ + +#endif /* CAN_H */ diff --git a/include/uapi/linux/can/Kbuild b/include/uapi/linux/can/Kbuild index aafaa5aa54d..21c91bf25a2 100644 --- a/include/uapi/linux/can/Kbuild +++ b/include/uapi/linux/can/Kbuild @@ -1 +1,6 @@  # UAPI Header export list +header-y += bcm.h +header-y += error.h +header-y += gw.h +header-y += netlink.h +header-y += raw.h diff --git a/include/uapi/linux/can/bcm.h b/include/uapi/linux/can/bcm.h new file mode 100644 index 00000000000..3ebe387fea4 --- /dev/null +++ b/include/uapi/linux/can/bcm.h @@ -0,0 +1,66 @@ +/* + * linux/can/bcm.h + * + * Definitions for CAN Broadcast Manager (BCM) + * + * Author: Oliver Hartkopp <oliver.hartkopp@volkswagen.de> + * Copyright (c) 2002-2007 Volkswagen Group Electronic Research + * All rights reserved. + * + */ + +#ifndef CAN_BCM_H +#define CAN_BCM_H + +#include <linux/types.h> +#include <linux/can.h> + +/** + * struct bcm_msg_head - head of messages to/from the broadcast manager + * @opcode:    opcode, see enum below. + * @flags:     special flags, see below. + * @count:     number of frames to send before changing interval. + * @ival1:     interval for the first @count frames. + * @ival2:     interval for the following frames. + * @can_id:    CAN ID of frames to be sent or received. + * @nframes:   number of frames appended to the message head. + * @frames:    array of CAN frames. + */ +struct bcm_msg_head { +	__u32 opcode; +	__u32 flags; +	__u32 count; +	struct timeval ival1, ival2; +	canid_t can_id; +	__u32 nframes; +	struct can_frame frames[0]; +}; + +enum { +	TX_SETUP = 1,	/* create (cyclic) transmission task */ +	TX_DELETE,	/* remove (cyclic) transmission task */ +	TX_READ,	/* read properties of (cyclic) transmission task */ +	TX_SEND,	/* send one CAN frame */ +	RX_SETUP,	/* create RX content filter subscription */ +	RX_DELETE,	/* remove RX content filter subscription */ +	RX_READ,	/* read properties of RX content filter subscription */ +	TX_STATUS,	/* reply to TX_READ request */ +	TX_EXPIRED,	/* notification on performed transmissions (count=0) */ +	RX_STATUS,	/* reply to RX_READ request */ +	RX_TIMEOUT,	/* cyclic message is absent */ +	RX_CHANGED	/* updated CAN frame (detected content change) */ +}; + +#define SETTIMER            0x0001 +#define STARTTIMER          0x0002 +#define TX_COUNTEVT         0x0004 +#define TX_ANNOUNCE         0x0008 +#define TX_CP_CAN_ID        0x0010 +#define RX_FILTER_ID        0x0020 +#define RX_CHECK_DLC        0x0040 +#define RX_NO_AUTOTIMER     0x0080 +#define RX_ANNOUNCE_RESUME  0x0100 +#define TX_RESET_MULTI_IDX  0x0200 +#define RX_RTR_FRAME        0x0400 + +#endif /* CAN_BCM_H */ diff --git a/include/uapi/linux/can/error.h b/include/uapi/linux/can/error.h new file mode 100644 index 00000000000..7b7148bded7 --- /dev/null +++ b/include/uapi/linux/can/error.h @@ -0,0 +1,91 @@ +/* + * linux/can/error.h + * + * Definitions of the CAN error messages to be filtered and passed to the user. + * + * Author: Oliver Hartkopp <oliver.hartkopp@volkswagen.de> + * Copyright (c) 2002-2007 Volkswagen Group Electronic Research + * All rights reserved. + * + */ + +#ifndef CAN_ERROR_H +#define CAN_ERROR_H + +#define CAN_ERR_DLC 8 /* dlc for error message frames */ + +/* error class (mask) in can_id */ +#define CAN_ERR_TX_TIMEOUT   0x00000001U /* TX timeout (by netdevice driver) */ +#define CAN_ERR_LOSTARB      0x00000002U /* lost arbitration    / data[0]    */ +#define CAN_ERR_CRTL         0x00000004U /* controller problems / data[1]    */ +#define CAN_ERR_PROT         0x00000008U /* protocol violations / data[2..3] */ +#define CAN_ERR_TRX          0x00000010U /* transceiver status  / data[4]    */ +#define CAN_ERR_ACK          0x00000020U /* received no ACK on transmission */ +#define CAN_ERR_BUSOFF       0x00000040U /* bus off */ +#define CAN_ERR_BUSERROR     0x00000080U /* bus error (may flood!) */ +#define CAN_ERR_RESTARTED    0x00000100U /* controller restarted */ + +/* arbitration lost in bit ... / data[0] */ +#define CAN_ERR_LOSTARB_UNSPEC   0x00 /* unspecified */ +				      /* else bit number in bitstream */ + +/* error status of CAN-controller / data[1] */ +#define CAN_ERR_CRTL_UNSPEC      0x00 /* unspecified */ +#define CAN_ERR_CRTL_RX_OVERFLOW 0x01 /* RX buffer overflow */ +#define CAN_ERR_CRTL_TX_OVERFLOW 0x02 /* TX buffer overflow */ +#define CAN_ERR_CRTL_RX_WARNING  0x04 /* reached warning level for RX errors */ +#define CAN_ERR_CRTL_TX_WARNING  0x08 /* reached warning level for TX errors */ +#define CAN_ERR_CRTL_RX_PASSIVE  0x10 /* reached error passive status RX */ +#define CAN_ERR_CRTL_TX_PASSIVE  0x20 /* reached error passive status TX */ +				      /* (at least one error counter exceeds */ +				      /* the protocol-defined level of 127)  */ + +/* error in CAN protocol (type) / data[2] */ +#define CAN_ERR_PROT_UNSPEC      0x00 /* unspecified */ +#define CAN_ERR_PROT_BIT         0x01 /* single bit error */ +#define CAN_ERR_PROT_FORM        0x02 /* frame format error */ +#define CAN_ERR_PROT_STUFF       0x04 /* bit stuffing error */ +#define CAN_ERR_PROT_BIT0        0x08 /* unable to send dominant bit */ +#define CAN_ERR_PROT_BIT1        0x10 /* unable to send recessive bit */ +#define CAN_ERR_PROT_OVERLOAD    0x20 /* bus overload */ +#define CAN_ERR_PROT_ACTIVE      0x40 /* active error announcement */ +#define CAN_ERR_PROT_TX          0x80 /* error occurred on transmission */ + +/* error in CAN protocol (location) / data[3] */ +#define CAN_ERR_PROT_LOC_UNSPEC  0x00 /* unspecified */ +#define CAN_ERR_PROT_LOC_SOF     0x03 /* start of frame */ +#define CAN_ERR_PROT_LOC_ID28_21 0x02 /* ID bits 28 - 21 (SFF: 10 - 3) */ +#define CAN_ERR_PROT_LOC_ID20_18 0x06 /* ID bits 20 - 18 (SFF: 2 - 0 )*/ +#define CAN_ERR_PROT_LOC_SRTR    0x04 /* substitute RTR (SFF: RTR) */ +#define CAN_ERR_PROT_LOC_IDE     0x05 /* identifier extension */ +#define CAN_ERR_PROT_LOC_ID17_13 0x07 /* ID bits 17-13 */ +#define CAN_ERR_PROT_LOC_ID12_05 0x0F /* ID bits 12-5 */ +#define CAN_ERR_PROT_LOC_ID04_00 0x0E /* ID bits 4-0 */ +#define CAN_ERR_PROT_LOC_RTR     0x0C /* RTR */ +#define CAN_ERR_PROT_LOC_RES1    0x0D /* reserved bit 1 */ +#define CAN_ERR_PROT_LOC_RES0    0x09 /* reserved bit 0 */ +#define CAN_ERR_PROT_LOC_DLC     0x0B /* data length code */ +#define CAN_ERR_PROT_LOC_DATA    0x0A /* data section */ +#define CAN_ERR_PROT_LOC_CRC_SEQ 0x08 /* CRC sequence */ +#define CAN_ERR_PROT_LOC_CRC_DEL 0x18 /* CRC delimiter */ +#define CAN_ERR_PROT_LOC_ACK     0x19 /* ACK slot */ +#define CAN_ERR_PROT_LOC_ACK_DEL 0x1B /* ACK delimiter */ +#define CAN_ERR_PROT_LOC_EOF     0x1A /* end of frame */ +#define CAN_ERR_PROT_LOC_INTERM  0x12 /* intermission */ + +/* error status of CAN-transceiver / data[4] */ +/*                                             CANH CANL */ +#define CAN_ERR_TRX_UNSPEC             0x00 /* 0000 0000 */ +#define CAN_ERR_TRX_CANH_NO_WIRE       0x04 /* 0000 0100 */ +#define CAN_ERR_TRX_CANH_SHORT_TO_BAT  0x05 /* 0000 0101 */ +#define CAN_ERR_TRX_CANH_SHORT_TO_VCC  0x06 /* 0000 0110 */ +#define CAN_ERR_TRX_CANH_SHORT_TO_GND  0x07 /* 0000 0111 */ +#define CAN_ERR_TRX_CANL_NO_WIRE       0x40 /* 0100 0000 */ +#define CAN_ERR_TRX_CANL_SHORT_TO_BAT  0x50 /* 0101 0000 */ +#define CAN_ERR_TRX_CANL_SHORT_TO_VCC  0x60 /* 0110 0000 */ +#define CAN_ERR_TRX_CANL_SHORT_TO_GND  0x70 /* 0111 0000 */ +#define CAN_ERR_TRX_CANL_SHORT_TO_CANH 0x80 /* 1000 0000 */ + +/* controller specific additional information / data[5..7] */ + +#endif /* CAN_ERROR_H */ diff --git a/include/uapi/linux/can/gw.h b/include/uapi/linux/can/gw.h new file mode 100644 index 00000000000..8e1db18c3cb --- /dev/null +++ b/include/uapi/linux/can/gw.h @@ -0,0 +1,162 @@ +/* + * linux/can/gw.h + * + * Definitions for CAN frame Gateway/Router/Bridge + * + * Author: Oliver Hartkopp <oliver.hartkopp@volkswagen.de> + * Copyright (c) 2011 Volkswagen Group Electronic Research + * All rights reserved. + * + */ + +#ifndef CAN_GW_H +#define CAN_GW_H + +#include <linux/types.h> +#include <linux/can.h> + +struct rtcanmsg { +	__u8  can_family; +	__u8  gwtype; +	__u16 flags; +}; + +/* CAN gateway types */ +enum { +	CGW_TYPE_UNSPEC, +	CGW_TYPE_CAN_CAN,	/* CAN->CAN routing */ +	__CGW_TYPE_MAX +}; + +#define CGW_TYPE_MAX (__CGW_TYPE_MAX - 1) + +/* CAN rtnetlink attribute definitions */ +enum { +	CGW_UNSPEC, +	CGW_MOD_AND,	/* CAN frame modification binary AND */ +	CGW_MOD_OR,	/* CAN frame modification binary OR */ +	CGW_MOD_XOR,	/* CAN frame modification binary XOR */ +	CGW_MOD_SET,	/* CAN frame modification set alternate values */ +	CGW_CS_XOR,	/* set data[] XOR checksum into data[index] */ +	CGW_CS_CRC8,	/* set data[] CRC8 checksum into data[index] */ +	CGW_HANDLED,	/* number of handled CAN frames */ +	CGW_DROPPED,	/* number of dropped CAN frames */ +	CGW_SRC_IF,	/* ifindex of source network interface */ +	CGW_DST_IF,	/* ifindex of destination network interface */ +	CGW_FILTER,	/* specify struct can_filter on source CAN device */ +	__CGW_MAX +}; + +#define CGW_MAX (__CGW_MAX - 1) + +#define CGW_FLAGS_CAN_ECHO 0x01 +#define CGW_FLAGS_CAN_SRC_TSTAMP 0x02 + +#define CGW_MOD_FUNCS 4 /* AND OR XOR SET */ + +/* CAN frame elements that are affected by curr. 3 CAN frame modifications */ +#define CGW_MOD_ID	0x01 +#define CGW_MOD_DLC	0x02 +#define CGW_MOD_DATA	0x04 + +#define CGW_FRAME_MODS 3 /* ID DLC DATA */ + +#define MAX_MODFUNCTIONS (CGW_MOD_FUNCS * CGW_FRAME_MODS) + +struct cgw_frame_mod { +	struct can_frame cf; +	__u8 modtype; +} __attribute__((packed)); + +#define CGW_MODATTR_LEN sizeof(struct cgw_frame_mod) + +struct cgw_csum_xor { +	__s8 from_idx; +	__s8 to_idx; +	__s8 result_idx; +	__u8 init_xor_val; +} __attribute__((packed)); + +struct cgw_csum_crc8 { +	__s8 from_idx; +	__s8 to_idx; +	__s8 result_idx; +	__u8 init_crc_val; +	__u8 final_xor_val; +	__u8 crctab[256]; +	__u8 profile; +	__u8 profile_data[20]; +} __attribute__((packed)); + +/* length of checksum operation parameters. idx = index in CAN frame data[] */ +#define CGW_CS_XOR_LEN  sizeof(struct cgw_csum_xor) +#define CGW_CS_CRC8_LEN  sizeof(struct cgw_csum_crc8) + +/* CRC8 profiles (compute CRC for additional data elements - see below) */ +enum { +	CGW_CRC8PRF_UNSPEC, +	CGW_CRC8PRF_1U8,	/* compute one additional u8 value */ +	CGW_CRC8PRF_16U8,	/* u8 value table indexed by data[1] & 0xF */ +	CGW_CRC8PRF_SFFID_XOR,	/* (can_id & 0xFF) ^ (can_id >> 8 & 0xFF) */ +	__CGW_CRC8PRF_MAX +}; + +#define CGW_CRC8PRF_MAX (__CGW_CRC8PRF_MAX - 1) + +/* + * CAN rtnetlink attribute contents in detail + * + * CGW_XXX_IF (length 4 bytes): + * Sets an interface index for source/destination network interfaces. + * For the CAN->CAN gwtype the indices of _two_ CAN interfaces are mandatory. + * + * CGW_FILTER (length 8 bytes): + * Sets a CAN receive filter for the gateway job specified by the + * struct can_filter described in include/linux/can.h + * + * CGW_MOD_XXX (length 17 bytes): + * Specifies a modification that's done to a received CAN frame before it is + * send out to the destination interface. + * + * <struct can_frame> data used as operator + * <u8> affected CAN frame elements + * + * CGW_CS_XOR (length 4 bytes): + * Set a simple XOR checksum starting with an initial value into + * data[result-idx] using data[start-idx] .. data[end-idx] + * + * The XOR checksum is calculated like this: + * + * xor = init_xor_val + * + * for (i = from_idx .. to_idx) + *      xor ^= can_frame.data[i] + * + * can_frame.data[ result_idx ] = xor + * + * CGW_CS_CRC8 (length 282 bytes): + * Set a CRC8 value into data[result-idx] using a given 256 byte CRC8 table, + * a given initial value and a defined input data[start-idx] .. data[end-idx]. + * Finally the result value is XOR'ed with the final_xor_val. + * + * The CRC8 checksum is calculated like this: + * + * crc = init_crc_val + * + * for (i = from_idx .. to_idx) + *      crc = crctab[ crc ^ can_frame.data[i] ] + * + * can_frame.data[ result_idx ] = crc ^ final_xor_val + * + * The calculated CRC may contain additional source data elements that can be + * defined in the handling of 'checksum profiles' e.g. shown in AUTOSAR specs + * like http://www.autosar.org/download/R4.0/AUTOSAR_SWS_E2ELibrary.pdf + * E.g. the profile_data[] may contain additional u8 values (called DATA_IDs) + * that are used depending on counter values inside the CAN frame data[]. + * So far only three profiles have been implemented for illustration. + * + * Remark: In general the attribute data is a linear buffer. + *         Beware of sending unpacked or aligned structs! + */ + +#endif diff --git a/include/uapi/linux/can/netlink.h b/include/uapi/linux/can/netlink.h new file mode 100644 index 00000000000..14966ddb7df --- /dev/null +++ b/include/uapi/linux/can/netlink.h @@ -0,0 +1,122 @@ +/* + * linux/can/netlink.h + * + * Definitions for the CAN netlink interface + * + * Copyright (c) 2009 Wolfgang Grandegger <wg@grandegger.com> + * + */ + +#ifndef CAN_NETLINK_H +#define CAN_NETLINK_H + +#include <linux/types.h> + +/* + * CAN bit-timing parameters + * + * For further information, please read chapter "8 BIT TIMING + * REQUIREMENTS" of the "Bosch CAN Specification version 2.0" + * at http://www.semiconductors.bosch.de/pdf/can2spec.pdf. + */ +struct can_bittiming { +	__u32 bitrate;		/* Bit-rate in bits/second */ +	__u32 sample_point;	/* Sample point in one-tenth of a percent */ +	__u32 tq;		/* Time quanta (TQ) in nanoseconds */ +	__u32 prop_seg;		/* Propagation segment in TQs */ +	__u32 phase_seg1;	/* Phase buffer segment 1 in TQs */ +	__u32 phase_seg2;	/* Phase buffer segment 2 in TQs */ +	__u32 sjw;		/* Synchronisation jump width in TQs */ +	__u32 brp;		/* Bit-rate prescaler */ +}; + +/* + * CAN harware-dependent bit-timing constant + * + * Used for calculating and checking bit-timing parameters + */ +struct can_bittiming_const { +	char name[16];		/* Name of the CAN controller hardware */ +	__u32 tseg1_min;	/* Time segement 1 = prop_seg + phase_seg1 */ +	__u32 tseg1_max; +	__u32 tseg2_min;	/* Time segement 2 = phase_seg2 */ +	__u32 tseg2_max; +	__u32 sjw_max;		/* Synchronisation jump width */ +	__u32 brp_min;		/* Bit-rate prescaler */ +	__u32 brp_max; +	__u32 brp_inc; +}; + +/* + * CAN clock parameters + */ +struct can_clock { +	__u32 freq;		/* CAN system clock frequency in Hz */ +}; + +/* + * CAN operational and error states + */ +enum can_state { +	CAN_STATE_ERROR_ACTIVE = 0,	/* RX/TX error count < 96 */ +	CAN_STATE_ERROR_WARNING,	/* RX/TX error count < 128 */ +	CAN_STATE_ERROR_PASSIVE,	/* RX/TX error count < 256 */ +	CAN_STATE_BUS_OFF,		/* RX/TX error count >= 256 */ +	CAN_STATE_STOPPED,		/* Device is stopped */ +	CAN_STATE_SLEEPING,		/* Device is sleeping */ +	CAN_STATE_MAX +}; + +/* + * CAN bus error counters + */ +struct can_berr_counter { +	__u16 txerr; +	__u16 rxerr; +}; + +/* + * CAN controller mode + */ +struct can_ctrlmode { +	__u32 mask; +	__u32 flags; +}; + +#define CAN_CTRLMODE_LOOPBACK		0x01	/* Loopback mode */ +#define CAN_CTRLMODE_LISTENONLY		0x02 	/* Listen-only mode */ +#define CAN_CTRLMODE_3_SAMPLES		0x04	/* Triple sampling mode */ +#define CAN_CTRLMODE_ONE_SHOT		0x08	/* One-Shot mode */ +#define CAN_CTRLMODE_BERR_REPORTING	0x10	/* Bus-error reporting */ + +/* + * CAN device statistics + */ +struct can_device_stats { +	__u32 bus_error;	/* Bus errors */ +	__u32 error_warning;	/* Changes to error warning state */ +	__u32 error_passive;	/* Changes to error passive state */ +	__u32 bus_off;		/* Changes to bus off state */ +	__u32 arbitration_lost; /* Arbitration lost errors */ +	__u32 restarts;		/* CAN controller re-starts */ +}; + +/* + * CAN netlink interface + */ +enum { +	IFLA_CAN_UNSPEC, +	IFLA_CAN_BITTIMING, +	IFLA_CAN_BITTIMING_CONST, +	IFLA_CAN_CLOCK, +	IFLA_CAN_STATE, +	IFLA_CAN_CTRLMODE, +	IFLA_CAN_RESTART_MS, +	IFLA_CAN_RESTART, +	IFLA_CAN_BERR_COUNTER, +	__IFLA_CAN_MAX +}; + +#define IFLA_CAN_MAX	(__IFLA_CAN_MAX - 1) + +#endif /* CAN_NETLINK_H */ diff --git a/include/uapi/linux/can/raw.h b/include/uapi/linux/can/raw.h new file mode 100644 index 00000000000..a814062b071 --- /dev/null +++ b/include/uapi/linux/can/raw.h @@ -0,0 +1,30 @@ +/* + * linux/can/raw.h + * + * Definitions for raw CAN sockets + * + * Authors: Oliver Hartkopp <oliver.hartkopp@volkswagen.de> + *          Urs Thuermann   <urs.thuermann@volkswagen.de> + * Copyright (c) 2002-2007 Volkswagen Group Electronic Research + * All rights reserved. + * + */ + +#ifndef CAN_RAW_H +#define CAN_RAW_H + +#include <linux/can.h> + +#define SOL_CAN_RAW (SOL_CAN_BASE + CAN_RAW) + +/* for socket options affecting the socket (not the global system) */ + +enum { +	CAN_RAW_FILTER = 1,	/* set 0 .. n can_filter(s)          */ +	CAN_RAW_ERR_FILTER,	/* set filter for error frames       */ +	CAN_RAW_LOOPBACK,	/* local loopback (default:on)       */ +	CAN_RAW_RECV_OWN_MSGS,	/* receive my own msgs (default:off) */ +	CAN_RAW_FD_FRAMES,	/* allow CAN FD frames (default:off) */ +}; + +#endif diff --git a/include/uapi/linux/capability.h b/include/uapi/linux/capability.h new file mode 100644 index 00000000000..ba478fa3012 --- /dev/null +++ b/include/uapi/linux/capability.h @@ -0,0 +1,358 @@ +/* + * This is <linux/capability.h> + * + * Andrew G. Morgan <morgan@kernel.org> + * Alexander Kjeldaas <astor@guardian.no> + * with help from Aleph1, Roland Buresund and Andrew Main. + * + * See here for the libcap library ("POSIX draft" compliance): + * + * ftp://www.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.6/ + */ + +#ifndef _UAPI_LINUX_CAPABILITY_H +#define _UAPI_LINUX_CAPABILITY_H + +#include <linux/types.h> + +struct task_struct; + +/* User-level do most of the mapping between kernel and user +   capabilities based on the version tag given by the kernel. The +   kernel might be somewhat backwards compatible, but don't bet on +   it. */ + +/* Note, cap_t, is defined by POSIX (draft) to be an "opaque" pointer to +   a set of three capability sets.  The transposition of 3*the +   following structure to such a composite is better handled in a user +   library since the draft standard requires the use of malloc/free +   etc.. */ + +#define _LINUX_CAPABILITY_VERSION_1  0x19980330 +#define _LINUX_CAPABILITY_U32S_1     1 + +#define _LINUX_CAPABILITY_VERSION_2  0x20071026  /* deprecated - use v3 */ +#define _LINUX_CAPABILITY_U32S_2     2 + +#define _LINUX_CAPABILITY_VERSION_3  0x20080522 +#define _LINUX_CAPABILITY_U32S_3     2 + +typedef struct __user_cap_header_struct { +	__u32 version; +	int pid; +} __user *cap_user_header_t; + +typedef struct __user_cap_data_struct { +        __u32 effective; +        __u32 permitted; +        __u32 inheritable; +} __user *cap_user_data_t; + + +#define VFS_CAP_REVISION_MASK	0xFF000000 +#define VFS_CAP_REVISION_SHIFT	24 +#define VFS_CAP_FLAGS_MASK	~VFS_CAP_REVISION_MASK +#define VFS_CAP_FLAGS_EFFECTIVE	0x000001 + +#define VFS_CAP_REVISION_1	0x01000000 +#define VFS_CAP_U32_1           1 +#define XATTR_CAPS_SZ_1         (sizeof(__le32)*(1 + 2*VFS_CAP_U32_1)) + +#define VFS_CAP_REVISION_2	0x02000000 +#define VFS_CAP_U32_2           2 +#define XATTR_CAPS_SZ_2         (sizeof(__le32)*(1 + 2*VFS_CAP_U32_2)) + +#define XATTR_CAPS_SZ           XATTR_CAPS_SZ_2 +#define VFS_CAP_U32             VFS_CAP_U32_2 +#define VFS_CAP_REVISION	VFS_CAP_REVISION_2 + +struct vfs_cap_data { +	__le32 magic_etc;            /* Little endian */ +	struct { +		__le32 permitted;    /* Little endian */ +		__le32 inheritable;  /* Little endian */ +	} data[VFS_CAP_U32]; +}; + +#ifndef __KERNEL__ + +/* + * Backwardly compatible definition for source code - trapped in a + * 32-bit world. If you find you need this, please consider using + * libcap to untrap yourself... + */ +#define _LINUX_CAPABILITY_VERSION  _LINUX_CAPABILITY_VERSION_1 +#define _LINUX_CAPABILITY_U32S     _LINUX_CAPABILITY_U32S_1 + +#endif + + +/** + ** POSIX-draft defined capabilities. + **/ + +/* In a system with the [_POSIX_CHOWN_RESTRICTED] option defined, this +   overrides the restriction of changing file ownership and group +   ownership. */ + +#define CAP_CHOWN            0 + +/* Override all DAC access, including ACL execute access if +   [_POSIX_ACL] is defined. Excluding DAC access covered by +   CAP_LINUX_IMMUTABLE. */ + +#define CAP_DAC_OVERRIDE     1 + +/* Overrides all DAC restrictions regarding read and search on files +   and directories, including ACL restrictions if [_POSIX_ACL] is +   defined. Excluding DAC access covered by CAP_LINUX_IMMUTABLE. */ + +#define CAP_DAC_READ_SEARCH  2 + +/* Overrides all restrictions about allowed operations on files, where +   file owner ID must be equal to the user ID, except where CAP_FSETID +   is applicable. It doesn't override MAC and DAC restrictions. */ + +#define CAP_FOWNER           3 + +/* Overrides the following restrictions that the effective user ID +   shall match the file owner ID when setting the S_ISUID and S_ISGID +   bits on that file; that the effective group ID (or one of the +   supplementary group IDs) shall match the file owner ID when setting +   the S_ISGID bit on that file; that the S_ISUID and S_ISGID bits are +   cleared on successful return from chown(2) (not implemented). */ + +#define CAP_FSETID           4 + +/* Overrides the restriction that the real or effective user ID of a +   process sending a signal must match the real or effective user ID +   of the process receiving the signal. */ + +#define CAP_KILL             5 + +/* Allows setgid(2) manipulation */ +/* Allows setgroups(2) */ +/* Allows forged gids on socket credentials passing. */ + +#define CAP_SETGID           6 + +/* Allows set*uid(2) manipulation (including fsuid). */ +/* Allows forged pids on socket credentials passing. */ + +#define CAP_SETUID           7 + + +/** + ** Linux-specific capabilities + **/ + +/* Without VFS support for capabilities: + *   Transfer any capability in your permitted set to any pid, + *   remove any capability in your permitted set from any pid + * With VFS support for capabilities (neither of above, but) + *   Add any capability from current's capability bounding set + *       to the current process' inheritable set + *   Allow taking bits out of capability bounding set + *   Allow modification of the securebits for a process + */ + +#define CAP_SETPCAP          8 + +/* Allow modification of S_IMMUTABLE and S_APPEND file attributes */ + +#define CAP_LINUX_IMMUTABLE  9 + +/* Allows binding to TCP/UDP sockets below 1024 */ +/* Allows binding to ATM VCIs below 32 */ + +#define CAP_NET_BIND_SERVICE 10 + +/* Allow broadcasting, listen to multicast */ + +#define CAP_NET_BROADCAST    11 + +/* Allow interface configuration */ +/* Allow administration of IP firewall, masquerading and accounting */ +/* Allow setting debug option on sockets */ +/* Allow modification of routing tables */ +/* Allow setting arbitrary process / process group ownership on +   sockets */ +/* Allow binding to any address for transparent proxying (also via NET_RAW) */ +/* Allow setting TOS (type of service) */ +/* Allow setting promiscuous mode */ +/* Allow clearing driver statistics */ +/* Allow multicasting */ +/* Allow read/write of device-specific registers */ +/* Allow activation of ATM control sockets */ + +#define CAP_NET_ADMIN        12 + +/* Allow use of RAW sockets */ +/* Allow use of PACKET sockets */ +/* Allow binding to any address for transparent proxying (also via NET_ADMIN) */ + +#define CAP_NET_RAW          13 + +/* Allow locking of shared memory segments */ +/* Allow mlock and mlockall (which doesn't really have anything to do +   with IPC) */ + +#define CAP_IPC_LOCK         14 + +/* Override IPC ownership checks */ + +#define CAP_IPC_OWNER        15 + +/* Insert and remove kernel modules - modify kernel without limit */ +#define CAP_SYS_MODULE       16 + +/* Allow ioperm/iopl access */ +/* Allow sending USB messages to any device via /proc/bus/usb */ + +#define CAP_SYS_RAWIO        17 + +/* Allow use of chroot() */ + +#define CAP_SYS_CHROOT       18 + +/* Allow ptrace() of any process */ + +#define CAP_SYS_PTRACE       19 + +/* Allow configuration of process accounting */ + +#define CAP_SYS_PACCT        20 + +/* Allow configuration of the secure attention key */ +/* Allow administration of the random device */ +/* Allow examination and configuration of disk quotas */ +/* Allow setting the domainname */ +/* Allow setting the hostname */ +/* Allow calling bdflush() */ +/* Allow mount() and umount(), setting up new smb connection */ +/* Allow some autofs root ioctls */ +/* Allow nfsservctl */ +/* Allow VM86_REQUEST_IRQ */ +/* Allow to read/write pci config on alpha */ +/* Allow irix_prctl on mips (setstacksize) */ +/* Allow flushing all cache on m68k (sys_cacheflush) */ +/* Allow removing semaphores */ +/* Used instead of CAP_CHOWN to "chown" IPC message queues, semaphores +   and shared memory */ +/* Allow locking/unlocking of shared memory segment */ +/* Allow turning swap on/off */ +/* Allow forged pids on socket credentials passing */ +/* Allow setting readahead and flushing buffers on block devices */ +/* Allow setting geometry in floppy driver */ +/* Allow turning DMA on/off in xd driver */ +/* Allow administration of md devices (mostly the above, but some +   extra ioctls) */ +/* Allow tuning the ide driver */ +/* Allow access to the nvram device */ +/* Allow administration of apm_bios, serial and bttv (TV) device */ +/* Allow manufacturer commands in isdn CAPI support driver */ +/* Allow reading non-standardized portions of pci configuration space */ +/* Allow DDI debug ioctl on sbpcd driver */ +/* Allow setting up serial ports */ +/* Allow sending raw qic-117 commands */ +/* Allow enabling/disabling tagged queuing on SCSI controllers and sending +   arbitrary SCSI commands */ +/* Allow setting encryption key on loopback filesystem */ +/* Allow setting zone reclaim policy */ + +#define CAP_SYS_ADMIN        21 + +/* Allow use of reboot() */ + +#define CAP_SYS_BOOT         22 + +/* Allow raising priority and setting priority on other (different +   UID) processes */ +/* Allow use of FIFO and round-robin (realtime) scheduling on own +   processes and setting the scheduling algorithm used by another +   process. */ +/* Allow setting cpu affinity on other processes */ + +#define CAP_SYS_NICE         23 + +/* Override resource limits. Set resource limits. */ +/* Override quota limits. */ +/* Override reserved space on ext2 filesystem */ +/* Modify data journaling mode on ext3 filesystem (uses journaling +   resources) */ +/* NOTE: ext2 honors fsuid when checking for resource overrides, so +   you can override using fsuid too */ +/* Override size restrictions on IPC message queues */ +/* Allow more than 64hz interrupts from the real-time clock */ +/* Override max number of consoles on console allocation */ +/* Override max number of keymaps */ + +#define CAP_SYS_RESOURCE     24 + +/* Allow manipulation of system clock */ +/* Allow irix_stime on mips */ +/* Allow setting the real-time clock */ + +#define CAP_SYS_TIME         25 + +/* Allow configuration of tty devices */ +/* Allow vhangup() of tty */ + +#define CAP_SYS_TTY_CONFIG   26 + +/* Allow the privileged aspects of mknod() */ + +#define CAP_MKNOD            27 + +/* Allow taking of leases on files */ + +#define CAP_LEASE            28 + +#define CAP_AUDIT_WRITE      29 + +#define CAP_AUDIT_CONTROL    30 + +#define CAP_SETFCAP	     31 + +/* Override MAC access. +   The base kernel enforces no MAC policy. +   An LSM may enforce a MAC policy, and if it does and it chooses +   to implement capability based overrides of that policy, this is +   the capability it should use to do so. */ + +#define CAP_MAC_OVERRIDE     32 + +/* Allow MAC configuration or state changes. +   The base kernel requires no MAC configuration. +   An LSM may enforce a MAC policy, and if it does and it chooses +   to implement capability based checks on modifications to that +   policy or the data required to maintain it, this is the +   capability it should use to do so. */ + +#define CAP_MAC_ADMIN        33 + +/* Allow configuring the kernel's syslog (printk behaviour) */ + +#define CAP_SYSLOG           34 + +/* Allow triggering something that will wake the system */ + +#define CAP_WAKE_ALARM            35 + +/* Allow preventing system suspends */ + +#define CAP_BLOCK_SUSPEND    36 + +#define CAP_LAST_CAP         CAP_BLOCK_SUSPEND + +#define cap_valid(x) ((x) >= 0 && (x) <= CAP_LAST_CAP) + +/* + * Bit location of each capability (used by user-space library and kernel) + */ + +#define CAP_TO_INDEX(x)     ((x) >> 5)        /* 1 << 5 == bits in __u32 */ +#define CAP_TO_MASK(x)      (1 << ((x) & 31)) /* mask for indexed __u32 */ + + +#endif /* _UAPI_LINUX_CAPABILITY_H */ diff --git a/include/uapi/linux/capi.h b/include/uapi/linux/capi.h new file mode 100644 index 00000000000..65100d6cb89 --- /dev/null +++ b/include/uapi/linux/capi.h @@ -0,0 +1,133 @@ +/* $Id: capi.h,v 1.4.6.1 2001/09/23 22:25:05 kai Exp $ + *  + * CAPI 2.0 Interface for Linux + *  + * Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de) + *  + * This software may be used and distributed according to the terms + * of the GNU General Public License, incorporated herein by reference. + * + */ + +#ifndef __LINUX_CAPI_H__ +#define __LINUX_CAPI_H__ + +#include <linux/types.h> +#include <linux/ioctl.h> +#ifndef __KERNEL__ +#include <linux/kernelcapi.h> +#endif + +/* + * CAPI_REGISTER + */ + +typedef struct capi_register_params {	/* CAPI_REGISTER */ +	__u32 level3cnt;	/* No. of simulatneous user data connections */ +	__u32 datablkcnt;	/* No. of buffered data messages */ +	__u32 datablklen;	/* Size of buffered data messages */ +} capi_register_params; + +#define	CAPI_REGISTER	_IOW('C',0x01,struct capi_register_params) + +/* + * CAPI_GET_MANUFACTURER + */ + +#define CAPI_MANUFACTURER_LEN		64 + +#define	CAPI_GET_MANUFACTURER	_IOWR('C',0x06,int)	/* broken: wanted size 64 (CAPI_MANUFACTURER_LEN) */ + +/* + * CAPI_GET_VERSION + */ + +typedef struct capi_version { +	__u32 majorversion; +	__u32 minorversion; +	__u32 majormanuversion; +	__u32 minormanuversion; +} capi_version; + +#define CAPI_GET_VERSION	_IOWR('C',0x07,struct capi_version) + +/* + * CAPI_GET_SERIAL + */ + +#define CAPI_SERIAL_LEN		8 +#define CAPI_GET_SERIAL		_IOWR('C',0x08,int)	/* broken: wanted size 8 (CAPI_SERIAL_LEN) */ + +/* + * CAPI_GET_PROFILE + */ + +typedef struct capi_profile { +	__u16 ncontroller;	/* number of installed controller */ +	__u16 nbchannel;	/* number of B-Channels */ +	__u32 goptions;		/* global options */ +	__u32 support1;		/* B1 protocols support */ +	__u32 support2;		/* B2 protocols support */ +	__u32 support3;		/* B3 protocols support */ +	__u32 reserved[6];	/* reserved */ +	__u32 manu[5];		/* manufacturer specific information */ +} capi_profile; + +#define CAPI_GET_PROFILE	_IOWR('C',0x09,struct capi_profile) + +typedef struct capi_manufacturer_cmd { +	unsigned long cmd; +	void __user *data; +} capi_manufacturer_cmd; + +/* + * CAPI_MANUFACTURER_CMD + */ + +#define CAPI_MANUFACTURER_CMD	_IOWR('C',0x20, struct capi_manufacturer_cmd) + +/* + * CAPI_GET_ERRCODE + * capi errcode is set, * if read, write, or ioctl returns EIO, + * ioctl returns errcode directly, and in arg, if != 0 + */ + +#define CAPI_GET_ERRCODE	_IOR('C',0x21, __u16) + +/* + * CAPI_INSTALLED + */ +#define CAPI_INSTALLED		_IOR('C',0x22, __u16) + + +/* + * member contr is input for + * CAPI_GET_MANUFACTURER, CAPI_VERSION, CAPI_GET_SERIAL + * and CAPI_GET_PROFILE + */ +typedef union capi_ioctl_struct { +	__u32 contr; +	capi_register_params rparams; +	__u8 manufacturer[CAPI_MANUFACTURER_LEN]; +	capi_version version; +	__u8 serial[CAPI_SERIAL_LEN]; +	capi_profile profile; +	capi_manufacturer_cmd cmd; +	__u16 errcode; +} capi_ioctl_struct; + +/* + * Middleware extension + */ + +#define CAPIFLAG_HIGHJACKING	0x0001 + +#define CAPI_GET_FLAGS		_IOR('C',0x23, unsigned) +#define CAPI_SET_FLAGS		_IOR('C',0x24, unsigned) +#define CAPI_CLR_FLAGS		_IOR('C',0x25, unsigned) + +#define CAPI_NCCI_OPENCOUNT	_IOR('C',0x26, unsigned) + +#define CAPI_NCCI_GETUNIT	_IOR('C',0x27, unsigned) + +#endif				/* __LINUX_CAPI_H__ */ diff --git a/include/uapi/linux/cciss_defs.h b/include/uapi/linux/cciss_defs.h new file mode 100644 index 00000000000..316b670d4e3 --- /dev/null +++ b/include/uapi/linux/cciss_defs.h @@ -0,0 +1,130 @@ +#ifndef CCISS_DEFS_H +#define CCISS_DEFS_H + +#include <linux/types.h> + +/* general boundary definitions */ +#define SENSEINFOBYTES          32 /* note that this value may vary +				      between host implementations */ + +/* Command Status value */ +#define CMD_SUCCESS             0x0000 +#define CMD_TARGET_STATUS       0x0001 +#define CMD_DATA_UNDERRUN       0x0002 +#define CMD_DATA_OVERRUN        0x0003 +#define CMD_INVALID             0x0004 +#define CMD_PROTOCOL_ERR        0x0005 +#define CMD_HARDWARE_ERR        0x0006 +#define CMD_CONNECTION_LOST     0x0007 +#define CMD_ABORTED             0x0008 +#define CMD_ABORT_FAILED        0x0009 +#define CMD_UNSOLICITED_ABORT   0x000A +#define CMD_TIMEOUT             0x000B +#define CMD_UNABORTABLE		0x000C + +/* transfer direction */ +#define XFER_NONE               0x00 +#define XFER_WRITE              0x01 +#define XFER_READ               0x02 +#define XFER_RSVD               0x03 + +/* task attribute */ +#define ATTR_UNTAGGED           0x00 +#define ATTR_SIMPLE             0x04 +#define ATTR_HEADOFQUEUE        0x05 +#define ATTR_ORDERED            0x06 +#define ATTR_ACA                0x07 + +/* cdb type */ +#define TYPE_CMD				0x00 +#define TYPE_MSG				0x01 + +/* Type defs used in the following structs */ +#define BYTE __u8 +#define WORD __u16 +#define HWORD __u16 +#define DWORD __u32 + +#define CISS_MAX_LUN	1024 + +#define LEVEL2LUN   1 /* index into Target(x) structure, due to byte swapping */ +#define LEVEL3LUN   0 + +#pragma pack(1) + +/* Command List Structure */ +typedef union _SCSI3Addr_struct { +   struct { +    BYTE Dev; +    BYTE Bus:6; +    BYTE Mode:2;        /* b00 */ +  } PeripDev; +   struct { +    BYTE DevLSB; +    BYTE DevMSB:6; +    BYTE Mode:2;        /* b01 */ +  } LogDev; +   struct { +    BYTE Dev:5; +    BYTE Bus:3; +    BYTE Targ:6; +    BYTE Mode:2;        /* b10 */ +  } LogUnit; +} SCSI3Addr_struct; + +typedef struct _PhysDevAddr_struct { +  DWORD             TargetId:24; +  DWORD             Bus:6; +  DWORD             Mode:2; +  SCSI3Addr_struct  Target[2]; /* 2 level target device addr */ +} PhysDevAddr_struct; + +typedef struct _LogDevAddr_struct { +  DWORD            VolId:30; +  DWORD            Mode:2; +  BYTE             reserved[4]; +} LogDevAddr_struct; + +typedef union _LUNAddr_struct { +  BYTE               LunAddrBytes[8]; +  SCSI3Addr_struct   SCSI3Lun[4]; +  PhysDevAddr_struct PhysDev; +  LogDevAddr_struct  LogDev; +} LUNAddr_struct; + +typedef struct _RequestBlock_struct { +  BYTE   CDBLen; +  struct { +    BYTE Type:3; +    BYTE Attribute:3; +    BYTE Direction:2; +  } Type; +  HWORD  Timeout; +  BYTE   CDB[16]; +} RequestBlock_struct; + +typedef union _MoreErrInfo_struct{ +  struct { +    BYTE  Reserved[3]; +    BYTE  Type; +    DWORD ErrorInfo; +  } Common_Info; +  struct{ +    BYTE  Reserved[2]; +    BYTE  offense_size; /* size of offending entry */ +    BYTE  offense_num;  /* byte # of offense 0-base */ +    DWORD offense_value; +  } Invalid_Cmd; +} MoreErrInfo_struct; +typedef struct _ErrorInfo_struct { +  BYTE               ScsiStatus; +  BYTE               SenseLen; +  HWORD              CommandStatus; +  DWORD              ResidualCnt; +  MoreErrInfo_struct MoreErrInfo; +  BYTE               SenseInfo[SENSEINFOBYTES]; +} ErrorInfo_struct; + +#pragma pack() + +#endif /* CCISS_DEFS_H */ diff --git a/include/uapi/linux/cciss_ioctl.h b/include/uapi/linux/cciss_ioctl.h new file mode 100644 index 00000000000..bb0b9ddf7ee --- /dev/null +++ b/include/uapi/linux/cciss_ioctl.h @@ -0,0 +1,88 @@ +#ifndef _UAPICCISS_IOCTLH +#define _UAPICCISS_IOCTLH + +#include <linux/types.h> +#include <linux/ioctl.h> +#include <linux/cciss_defs.h> + +#define CCISS_IOC_MAGIC 'B' + + +typedef struct _cciss_pci_info_struct +{ +	unsigned char 	bus; +	unsigned char 	dev_fn; +	unsigned short	domain; +	__u32 		board_id; +} cciss_pci_info_struct;  + +typedef struct _cciss_coalint_struct +{ +	__u32  delay; +	__u32  count; +} cciss_coalint_struct; + +typedef char NodeName_type[16]; + +typedef __u32 Heartbeat_type; + +#define CISS_PARSCSIU2 	0x0001 +#define CISS_PARCSCIU3 	0x0002 +#define CISS_FIBRE1G	0x0100 +#define CISS_FIBRE2G	0x0200 +typedef __u32 BusTypes_type; + +typedef char FirmwareVer_type[4]; +typedef __u32 DriverVer_type; + +#define MAX_KMALLOC_SIZE 128000 + +typedef struct _IOCTL_Command_struct { +  LUNAddr_struct	   LUN_info; +  RequestBlock_struct      Request; +  ErrorInfo_struct  	   error_info;  +  WORD			   buf_size;  /* size in bytes of the buf */ +  BYTE			   __user *buf; +} IOCTL_Command_struct; + +typedef struct _BIG_IOCTL_Command_struct { +  LUNAddr_struct	   LUN_info; +  RequestBlock_struct      Request; +  ErrorInfo_struct  	   error_info; +  DWORD			   malloc_size; /* < MAX_KMALLOC_SIZE in cciss.c */ +  DWORD			   buf_size;    /* size in bytes of the buf */ +  				        /* < malloc_size * MAXSGENTRIES */ +  BYTE			   __user *buf; +} BIG_IOCTL_Command_struct; + +typedef struct _LogvolInfo_struct{ +	__u32	LunID; +	int	num_opens;  /* number of opens on the logical volume */ +	int	num_parts;  /* number of partitions configured on logvol */ +} LogvolInfo_struct; + +#define CCISS_GETPCIINFO _IOR(CCISS_IOC_MAGIC, 1, cciss_pci_info_struct) + +#define CCISS_GETINTINFO _IOR(CCISS_IOC_MAGIC, 2, cciss_coalint_struct) +#define CCISS_SETINTINFO _IOW(CCISS_IOC_MAGIC, 3, cciss_coalint_struct) + +#define CCISS_GETNODENAME _IOR(CCISS_IOC_MAGIC, 4, NodeName_type) +#define CCISS_SETNODENAME _IOW(CCISS_IOC_MAGIC, 5, NodeName_type) + +#define CCISS_GETHEARTBEAT _IOR(CCISS_IOC_MAGIC, 6, Heartbeat_type) +#define CCISS_GETBUSTYPES  _IOR(CCISS_IOC_MAGIC, 7, BusTypes_type) +#define CCISS_GETFIRMVER   _IOR(CCISS_IOC_MAGIC, 8, FirmwareVer_type) +#define CCISS_GETDRIVVER   _IOR(CCISS_IOC_MAGIC, 9, DriverVer_type) +#define CCISS_REVALIDVOLS  _IO(CCISS_IOC_MAGIC, 10) +#define CCISS_PASSTHRU	   _IOWR(CCISS_IOC_MAGIC, 11, IOCTL_Command_struct) +#define CCISS_DEREGDISK	   _IO(CCISS_IOC_MAGIC, 12) + +/* no longer used... use REGNEWD instead */  +#define CCISS_REGNEWDISK  _IOW(CCISS_IOC_MAGIC, 13, int) + +#define CCISS_REGNEWD	   _IO(CCISS_IOC_MAGIC, 14) +#define CCISS_RESCANDISK   _IO(CCISS_IOC_MAGIC, 16) +#define CCISS_GETLUNINFO   _IOR(CCISS_IOC_MAGIC, 17, LogvolInfo_struct) +#define CCISS_BIG_PASSTHRU _IOWR(CCISS_IOC_MAGIC, 18, BIG_IOCTL_Command_struct) + +#endif /* _UAPICCISS_IOCTLH */ diff --git a/include/uapi/linux/cdrom.h b/include/uapi/linux/cdrom.h new file mode 100644 index 00000000000..898b866b300 --- /dev/null +++ b/include/uapi/linux/cdrom.h @@ -0,0 +1,912 @@ +/* + * -- <linux/cdrom.h> + * General header file for linux CD-ROM drivers  + * Copyright (C) 1992         David Giller, rafetmad@oxy.edu + *               1994, 1995   Eberhard Mönkeberg, emoenke@gwdg.de + *               1996         David van Leeuwen, david@tm.tno.nl + *               1997, 1998   Erik Andersen, andersee@debian.org + *               1998-2002    Jens Axboe, axboe@suse.de + */ +  +#ifndef _UAPI_LINUX_CDROM_H +#define _UAPI_LINUX_CDROM_H + +#include <linux/types.h> +#include <asm/byteorder.h> + +/******************************************************* + * As of Linux 2.1.x, all Linux CD-ROM application programs will use this  + * (and only this) include file.  It is my hope to provide Linux with + * a uniform interface between software accessing CD-ROMs and the various  + * device drivers that actually talk to the drives.  There may still be + * 23 different kinds of strange CD-ROM drives, but at least there will  + * now be one, and only one, Linux CD-ROM interface. + * + * Additionally, as of Linux 2.1.x, all Linux application programs  + * should use the O_NONBLOCK option when opening a CD-ROM device  + * for subsequent ioctl commands.  This allows for neat system errors  + * like "No medium found" or "Wrong medium type" upon attempting to  + * mount or play an empty slot, mount an audio disc, or play a data disc. + * Generally, changing an application program to support O_NONBLOCK + * is as easy as the following: + *       -    drive = open("/dev/cdrom", O_RDONLY); + *       +    drive = open("/dev/cdrom", O_RDONLY | O_NONBLOCK); + * It is worth the small change. + * + *  Patches for many common CD programs (provided by David A. van Leeuwen) + *  can be found at:  ftp://ftp.gwdg.de/pub/linux/cdrom/drivers/cm206/ + *  + *******************************************************/ + +/* When a driver supports a certain function, but the cdrom drive we are  + * using doesn't, we will return the error EDRIVE_CANT_DO_THIS.  We will  + * borrow the "Operation not supported" error from the network folks to  + * accomplish this.  Maybe someday we will get a more targeted error code,  + * but this will do for now... */ +#define EDRIVE_CANT_DO_THIS  EOPNOTSUPP + +/******************************************************* + * The CD-ROM IOCTL commands  -- these should be supported by  + * all the various cdrom drivers.  For the CD-ROM ioctls, we  + * will commandeer byte 0x53, or 'S'. + *******************************************************/ +#define CDROMPAUSE		0x5301 /* Pause Audio Operation */  +#define CDROMRESUME		0x5302 /* Resume paused Audio Operation */ +#define CDROMPLAYMSF		0x5303 /* Play Audio MSF (struct cdrom_msf) */ +#define CDROMPLAYTRKIND		0x5304 /* Play Audio Track/index  +                                           (struct cdrom_ti) */ +#define CDROMREADTOCHDR		0x5305 /* Read TOC header  +                                           (struct cdrom_tochdr) */ +#define CDROMREADTOCENTRY	0x5306 /* Read TOC entry  +                                           (struct cdrom_tocentry) */ +#define CDROMSTOP		0x5307 /* Stop the cdrom drive */ +#define CDROMSTART		0x5308 /* Start the cdrom drive */ +#define CDROMEJECT		0x5309 /* Ejects the cdrom media */ +#define CDROMVOLCTRL		0x530a /* Control output volume  +                                           (struct cdrom_volctrl) */ +#define CDROMSUBCHNL		0x530b /* Read subchannel data  +                                           (struct cdrom_subchnl) */ +#define CDROMREADMODE2		0x530c /* Read CDROM mode 2 data (2336 Bytes)  +                                           (struct cdrom_read) */ +#define CDROMREADMODE1		0x530d /* Read CDROM mode 1 data (2048 Bytes) +                                           (struct cdrom_read) */ +#define CDROMREADAUDIO		0x530e /* (struct cdrom_read_audio) */ +#define CDROMEJECT_SW		0x530f /* enable(1)/disable(0) auto-ejecting */ +#define CDROMMULTISESSION	0x5310 /* Obtain the start-of-last-session  +                                           address of multi session disks  +                                           (struct cdrom_multisession) */ +#define CDROM_GET_MCN		0x5311 /* Obtain the "Universal Product Code"  +                                           if available (struct cdrom_mcn) */ +#define CDROM_GET_UPC		CDROM_GET_MCN  /* This one is deprecated,  +                                          but here anyway for compatibility */ +#define CDROMRESET		0x5312 /* hard-reset the drive */ +#define CDROMVOLREAD		0x5313 /* Get the drive's volume setting  +                                          (struct cdrom_volctrl) */ +#define CDROMREADRAW		0x5314	/* read data in raw mode (2352 Bytes) +                                           (struct cdrom_read) */ +/*  + * These ioctls are used only used in aztcd.c and optcd.c + */ +#define CDROMREADCOOKED		0x5315	/* read data in cooked mode */ +#define CDROMSEEK		0x5316  /* seek msf address */ +   +/* + * This ioctl is only used by the scsi-cd driver.   +   It is for playing audio in logical block addressing mode. + */ +#define CDROMPLAYBLK		0x5317	/* (struct cdrom_blk) */ + +/*  + * These ioctls are only used in optcd.c + */ +#define CDROMREADALL		0x5318	/* read all 2646 bytes */ + +/*  + * These ioctls are (now) only in ide-cd.c for controlling  + * drive spindown time.  They should be implemented in the + * Uniform driver, via generic packet commands, GPCMD_MODE_SELECT_10, + * GPCMD_MODE_SENSE_10 and the GPMODE_POWER_PAGE... + *  -Erik + */ +#define CDROMGETSPINDOWN        0x531d +#define CDROMSETSPINDOWN        0x531e + +/*  + * These ioctls are implemented through the uniform CD-ROM driver + * They _will_ be adopted by all CD-ROM drivers, when all the CD-ROM + * drivers are eventually ported to the uniform CD-ROM driver interface. + */ +#define CDROMCLOSETRAY		0x5319	/* pendant of CDROMEJECT */ +#define CDROM_SET_OPTIONS	0x5320  /* Set behavior options */ +#define CDROM_CLEAR_OPTIONS	0x5321  /* Clear behavior options */ +#define CDROM_SELECT_SPEED	0x5322  /* Set the CD-ROM speed */ +#define CDROM_SELECT_DISC	0x5323  /* Select disc (for juke-boxes) */ +#define CDROM_MEDIA_CHANGED	0x5325  /* Check is media changed  */ +#define CDROM_DRIVE_STATUS	0x5326  /* Get tray position, etc. */ +#define CDROM_DISC_STATUS	0x5327  /* Get disc type, etc. */ +#define CDROM_CHANGER_NSLOTS    0x5328  /* Get number of slots */ +#define CDROM_LOCKDOOR		0x5329  /* lock or unlock door */ +#define CDROM_DEBUG		0x5330	/* Turn debug messages on/off */ +#define CDROM_GET_CAPABILITY	0x5331	/* get capabilities */ + +/* Note that scsi/scsi_ioctl.h also uses 0x5382 - 0x5386. + * Future CDROM ioctls should be kept below 0x537F + */ + +/* This ioctl is only used by sbpcd at the moment */ +#define CDROMAUDIOBUFSIZ        0x5382	/* set the audio buffer size */ +					/* conflict with SCSI_IOCTL_GET_IDLUN */ + +/* DVD-ROM Specific ioctls */ +#define DVD_READ_STRUCT		0x5390  /* Read structure */ +#define DVD_WRITE_STRUCT	0x5391  /* Write structure */ +#define DVD_AUTH		0x5392  /* Authentication */ + +#define CDROM_SEND_PACKET	0x5393	/* send a packet to the drive */ +#define CDROM_NEXT_WRITABLE	0x5394	/* get next writable block */ +#define CDROM_LAST_WRITTEN	0x5395	/* get last block written on disc */ + +/******************************************************* + * CDROM IOCTL structures + *******************************************************/ + +/* Address in MSF format */ +struct cdrom_msf0		 +{ +	__u8	minute; +	__u8	second; +	__u8	frame; +}; + +/* Address in either MSF or logical format */ +union cdrom_addr		 +{ +	struct cdrom_msf0	msf; +	int			lba; +}; + +/* This struct is used by the CDROMPLAYMSF ioctl */  +struct cdrom_msf  +{ +	__u8	cdmsf_min0;	/* start minute */ +	__u8	cdmsf_sec0;	/* start second */ +	__u8	cdmsf_frame0;	/* start frame */ +	__u8	cdmsf_min1;	/* end minute */ +	__u8	cdmsf_sec1;	/* end second */ +	__u8	cdmsf_frame1;	/* end frame */ +}; + +/* This struct is used by the CDROMPLAYTRKIND ioctl */ +struct cdrom_ti  +{ +	__u8	cdti_trk0;	/* start track */ +	__u8	cdti_ind0;	/* start index */ +	__u8	cdti_trk1;	/* end track */ +	__u8	cdti_ind1;	/* end index */ +}; + +/* This struct is used by the CDROMREADTOCHDR ioctl */ +struct cdrom_tochdr 	 +{ +	__u8	cdth_trk0;	/* start track */ +	__u8	cdth_trk1;	/* end track */ +}; + +/* This struct is used by the CDROMVOLCTRL and CDROMVOLREAD ioctls */ +struct cdrom_volctrl +{ +	__u8	channel0; +	__u8	channel1; +	__u8	channel2; +	__u8	channel3; +}; + +/* This struct is used by the CDROMSUBCHNL ioctl */ +struct cdrom_subchnl  +{ +	__u8	cdsc_format; +	__u8	cdsc_audiostatus; +	__u8	cdsc_adr:	4; +	__u8	cdsc_ctrl:	4; +	__u8	cdsc_trk; +	__u8	cdsc_ind; +	union cdrom_addr cdsc_absaddr; +	union cdrom_addr cdsc_reladdr; +}; + + +/* This struct is used by the CDROMREADTOCENTRY ioctl */ +struct cdrom_tocentry  +{ +	__u8	cdte_track; +	__u8	cdte_adr	:4; +	__u8	cdte_ctrl	:4; +	__u8	cdte_format; +	union cdrom_addr cdte_addr; +	__u8	cdte_datamode; +}; + +/* This struct is used by the CDROMREADMODE1, and CDROMREADMODE2 ioctls */ +struct cdrom_read       +{ +	int	cdread_lba; +	char 	*cdread_bufaddr; +	int	cdread_buflen; +}; + +/* This struct is used by the CDROMREADAUDIO ioctl */ +struct cdrom_read_audio +{ +	union cdrom_addr addr; /* frame address */ +	__u8 addr_format;      /* CDROM_LBA or CDROM_MSF */ +	int nframes;           /* number of 2352-byte-frames to read at once */ +	__u8 __user *buf;      /* frame buffer (size: nframes*2352 bytes) */ +}; + +/* This struct is used with the CDROMMULTISESSION ioctl */ +struct cdrom_multisession +{ +	union cdrom_addr addr; /* frame address: start-of-last-session  +	                           (not the new "frame 16"!).  Only valid +	                           if the "xa_flag" is true. */ +	__u8 xa_flag;        /* 1: "is XA disk" */ +	__u8 addr_format;    /* CDROM_LBA or CDROM_MSF */ +}; + +/* This struct is used with the CDROM_GET_MCN ioctl.   + * Very few audio discs actually have Universal Product Code information,  + * which should just be the Medium Catalog Number on the box.  Also note  + * that the way the codeis written on CD is _not_ uniform across all discs! + */   +struct cdrom_mcn  +{ +  __u8 medium_catalog_number[14]; /* 13 ASCII digits, null-terminated */ +}; + +/* This is used by the CDROMPLAYBLK ioctl */ +struct cdrom_blk  +{ +	unsigned from; +	unsigned short len; +}; + +#define CDROM_PACKET_SIZE	12 + +#define CGC_DATA_UNKNOWN	0 +#define CGC_DATA_WRITE		1 +#define CGC_DATA_READ		2 +#define CGC_DATA_NONE		3 + +/* for CDROM_PACKET_COMMAND ioctl */ +struct cdrom_generic_command +{ +	unsigned char 		cmd[CDROM_PACKET_SIZE]; +	unsigned char		__user *buffer; +	unsigned int 		buflen; +	int			stat; +	struct request_sense	__user *sense; +	unsigned char		data_direction; +	int			quiet; +	int			timeout; +	void			__user *reserved[1];	/* unused, actually */ +}; + +/* + * A CD-ROM physical sector size is 2048, 2052, 2056, 2324, 2332, 2336,  + * 2340, or 2352 bytes long.   + +*         Sector types of the standard CD-ROM data formats: + * + * format   sector type               user data size (bytes) + * ----------------------------------------------------------------------------- + *   1     (Red Book)    CD-DA          2352    (CD_FRAMESIZE_RAW) + *   2     (Yellow Book) Mode1 Form1    2048    (CD_FRAMESIZE) + *   3     (Yellow Book) Mode1 Form2    2336    (CD_FRAMESIZE_RAW0) + *   4     (Green Book)  Mode2 Form1    2048    (CD_FRAMESIZE) + *   5     (Green Book)  Mode2 Form2    2328    (2324+4 spare bytes) + * + * + *       The layout of the standard CD-ROM data formats: + * ----------------------------------------------------------------------------- + * - audio (red):                  | audio_sample_bytes | + *                                 |        2352        | + * + * - data (yellow, mode1):         | sync - head - data - EDC - zero - ECC | + *                                 |  12  -   4  - 2048 -  4  -   8  - 276 | + * + * - data (yellow, mode2):         | sync - head - data | + *                                 |  12  -   4  - 2336 | + * + * - XA data (green, mode2 form1): | sync - head - sub - data - EDC - ECC | + *                                 |  12  -   4  -  8  - 2048 -  4  - 276 | + * + * - XA data (green, mode2 form2): | sync - head - sub - data - Spare | + *                                 |  12  -   4  -  8  - 2324 -  4    | + * + */ + +/* Some generally useful CD-ROM information -- mostly based on the above */ +#define CD_MINS              74 /* max. minutes per CD, not really a limit */ +#define CD_SECS              60 /* seconds per minute */ +#define CD_FRAMES            75 /* frames per second */ +#define CD_SYNC_SIZE         12 /* 12 sync bytes per raw data frame */ +#define CD_MSF_OFFSET       150 /* MSF numbering offset of first frame */ +#define CD_CHUNK_SIZE        24 /* lowest-level "data bytes piece" */ +#define CD_NUM_OF_CHUNKS     98 /* chunks per frame */ +#define CD_FRAMESIZE_SUB     96 /* subchannel data "frame" size */ +#define CD_HEAD_SIZE          4 /* header (address) bytes per raw data frame */ +#define CD_SUBHEAD_SIZE       8 /* subheader bytes per raw XA data frame */ +#define CD_EDC_SIZE           4 /* bytes EDC per most raw data frame types */ +#define CD_ZERO_SIZE          8 /* bytes zero per yellow book mode 1 frame */ +#define CD_ECC_SIZE         276 /* bytes ECC per most raw data frame types */ +#define CD_FRAMESIZE       2048 /* bytes per frame, "cooked" mode */ +#define CD_FRAMESIZE_RAW   2352 /* bytes per frame, "raw" mode */ +#define CD_FRAMESIZE_RAWER 2646 /* The maximum possible returned bytes */  +/* most drives don't deliver everything: */ +#define CD_FRAMESIZE_RAW1 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE) /*2340*/ +#define CD_FRAMESIZE_RAW0 (CD_FRAMESIZE_RAW-CD_SYNC_SIZE-CD_HEAD_SIZE) /*2336*/ + +#define CD_XA_HEAD        (CD_HEAD_SIZE+CD_SUBHEAD_SIZE) /* "before data" part of raw XA frame */ +#define CD_XA_TAIL        (CD_EDC_SIZE+CD_ECC_SIZE) /* "after data" part of raw XA frame */ +#define CD_XA_SYNC_HEAD   (CD_SYNC_SIZE+CD_XA_HEAD) /* sync bytes + header of XA frame */ + +/* CD-ROM address types (cdrom_tocentry.cdte_format) */ +#define	CDROM_LBA 0x01 /* "logical block": first frame is #0 */ +#define	CDROM_MSF 0x02 /* "minute-second-frame": binary, not bcd here! */ + +/* bit to tell whether track is data or audio (cdrom_tocentry.cdte_ctrl) */ +#define	CDROM_DATA_TRACK	0x04 + +/* The leadout track is always 0xAA, regardless of # of tracks on disc */ +#define	CDROM_LEADOUT		0xAA + +/* audio states (from SCSI-2, but seen with other drives, too) */ +#define	CDROM_AUDIO_INVALID	0x00	/* audio status not supported */ +#define	CDROM_AUDIO_PLAY	0x11	/* audio play operation in progress */ +#define	CDROM_AUDIO_PAUSED	0x12	/* audio play operation paused */ +#define	CDROM_AUDIO_COMPLETED	0x13	/* audio play successfully completed */ +#define	CDROM_AUDIO_ERROR	0x14	/* audio play stopped due to error */ +#define	CDROM_AUDIO_NO_STATUS	0x15	/* no current audio status to return */ + +/* capability flags used with the uniform CD-ROM driver */  +#define CDC_CLOSE_TRAY		0x1     /* caddy systems _can't_ close */ +#define CDC_OPEN_TRAY		0x2     /* but _can_ eject.  */ +#define CDC_LOCK		0x4     /* disable manual eject */ +#define CDC_SELECT_SPEED 	0x8     /* programmable speed */ +#define CDC_SELECT_DISC		0x10    /* select disc from juke-box */ +#define CDC_MULTI_SESSION 	0x20    /* read sessions>1 */ +#define CDC_MCN			0x40    /* Medium Catalog Number */ +#define CDC_MEDIA_CHANGED 	0x80    /* media changed */ +#define CDC_PLAY_AUDIO		0x100   /* audio functions */ +#define CDC_RESET               0x200   /* hard reset device */ +#define CDC_DRIVE_STATUS        0x800   /* driver implements drive status */ +#define CDC_GENERIC_PACKET	0x1000	/* driver implements generic packets */ +#define CDC_CD_R		0x2000	/* drive is a CD-R */ +#define CDC_CD_RW		0x4000	/* drive is a CD-RW */ +#define CDC_DVD			0x8000	/* drive is a DVD */ +#define CDC_DVD_R		0x10000	/* drive can write DVD-R */ +#define CDC_DVD_RAM		0x20000	/* drive can write DVD-RAM */ +#define CDC_MO_DRIVE		0x40000 /* drive is an MO device */ +#define CDC_MRW			0x80000 /* drive can read MRW */ +#define CDC_MRW_W		0x100000 /* drive can write MRW */ +#define CDC_RAM			0x200000 /* ok to open for WRITE */ + +/* drive status possibilities returned by CDROM_DRIVE_STATUS ioctl */ +#define CDS_NO_INFO		0	/* if not implemented */ +#define CDS_NO_DISC		1 +#define CDS_TRAY_OPEN		2 +#define CDS_DRIVE_NOT_READY	3 +#define CDS_DISC_OK		4 + +/* return values for the CDROM_DISC_STATUS ioctl */ +/* can also return CDS_NO_[INFO|DISC], from above */ +#define CDS_AUDIO		100 +#define CDS_DATA_1		101 +#define CDS_DATA_2		102 +#define CDS_XA_2_1		103 +#define CDS_XA_2_2		104 +#define CDS_MIXED		105 + +/* User-configurable behavior options for the uniform CD-ROM driver */ +#define CDO_AUTO_CLOSE		0x1     /* close tray on first open() */ +#define CDO_AUTO_EJECT		0x2     /* open tray on last release() */ +#define CDO_USE_FFLAGS		0x4     /* use O_NONBLOCK information on open */ +#define CDO_LOCK		0x8     /* lock tray on open files */ +#define CDO_CHECK_TYPE		0x10    /* check type on open for data */ + +/* Special codes used when specifying changer slots. */ +#define CDSL_NONE       	(INT_MAX-1) +#define CDSL_CURRENT    	INT_MAX + +/* For partition based multisession access. IDE can handle 64 partitions + * per drive - SCSI CD-ROM's use minors to differentiate between the + * various drives, so we can't do multisessions the same way there. + * Use the -o session=x option to mount on them. + */ +#define CD_PART_MAX		64 +#define CD_PART_MASK		(CD_PART_MAX - 1) + +/********************************************************************* + * Generic Packet commands, MMC commands, and such + *********************************************************************/ + + /* The generic packet command opcodes for CD/DVD Logical Units, + * From Table 57 of the SFF8090 Ver. 3 (Mt. Fuji) draft standard. */ +#define GPCMD_BLANK			    0xa1 +#define GPCMD_CLOSE_TRACK		    0x5b +#define GPCMD_FLUSH_CACHE		    0x35 +#define GPCMD_FORMAT_UNIT		    0x04 +#define GPCMD_GET_CONFIGURATION		    0x46 +#define GPCMD_GET_EVENT_STATUS_NOTIFICATION 0x4a +#define GPCMD_GET_PERFORMANCE		    0xac +#define GPCMD_INQUIRY			    0x12 +#define GPCMD_LOAD_UNLOAD		    0xa6 +#define GPCMD_MECHANISM_STATUS		    0xbd +#define GPCMD_MODE_SELECT_10		    0x55 +#define GPCMD_MODE_SENSE_10		    0x5a +#define GPCMD_PAUSE_RESUME		    0x4b +#define GPCMD_PLAY_AUDIO_10		    0x45 +#define GPCMD_PLAY_AUDIO_MSF		    0x47 +#define GPCMD_PLAY_AUDIO_TI		    0x48 +#define GPCMD_PLAY_CD			    0xbc +#define GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL  0x1e +#define GPCMD_READ_10			    0x28 +#define GPCMD_READ_12			    0xa8 +#define GPCMD_READ_BUFFER		    0x3c +#define GPCMD_READ_BUFFER_CAPACITY	    0x5c +#define GPCMD_READ_CDVD_CAPACITY	    0x25 +#define GPCMD_READ_CD			    0xbe +#define GPCMD_READ_CD_MSF		    0xb9 +#define GPCMD_READ_DISC_INFO		    0x51 +#define GPCMD_READ_DVD_STRUCTURE	    0xad +#define GPCMD_READ_FORMAT_CAPACITIES	    0x23 +#define GPCMD_READ_HEADER		    0x44 +#define GPCMD_READ_TRACK_RZONE_INFO	    0x52 +#define GPCMD_READ_SUBCHANNEL		    0x42 +#define GPCMD_READ_TOC_PMA_ATIP		    0x43 +#define GPCMD_REPAIR_RZONE_TRACK	    0x58 +#define GPCMD_REPORT_KEY		    0xa4 +#define GPCMD_REQUEST_SENSE		    0x03 +#define GPCMD_RESERVE_RZONE_TRACK	    0x53 +#define GPCMD_SEND_CUE_SHEET		    0x5d +#define GPCMD_SCAN			    0xba +#define GPCMD_SEEK			    0x2b +#define GPCMD_SEND_DVD_STRUCTURE	    0xbf +#define GPCMD_SEND_EVENT		    0xa2 +#define GPCMD_SEND_KEY			    0xa3 +#define GPCMD_SEND_OPC			    0x54 +#define GPCMD_SET_READ_AHEAD		    0xa7 +#define GPCMD_SET_STREAMING		    0xb6 +#define GPCMD_START_STOP_UNIT		    0x1b +#define GPCMD_STOP_PLAY_SCAN		    0x4e +#define GPCMD_TEST_UNIT_READY		    0x00 +#define GPCMD_VERIFY_10			    0x2f +#define GPCMD_WRITE_10			    0x2a +#define GPCMD_WRITE_12			    0xaa +#define GPCMD_WRITE_AND_VERIFY_10	    0x2e +#define GPCMD_WRITE_BUFFER		    0x3b +/* This is listed as optional in ATAPI 2.6, but is (curiously)  + * missing from Mt. Fuji, Table 57.  It _is_ mentioned in Mt. Fuji + * Table 377 as an MMC command for SCSi devices though...  Most ATAPI + * drives support it. */ +#define GPCMD_SET_SPEED			    0xbb +/* This seems to be a SCSI specific CD-ROM opcode  + * to play data at track/index */ +#define GPCMD_PLAYAUDIO_TI		    0x48 +/* + * From MS Media Status Notification Support Specification. For + * older drives only. + */ +#define GPCMD_GET_MEDIA_STATUS		    0xda + +/* Mode page codes for mode sense/set */ +#define GPMODE_VENDOR_PAGE		0x00 +#define GPMODE_R_W_ERROR_PAGE		0x01 +#define GPMODE_WRITE_PARMS_PAGE		0x05 +#define GPMODE_WCACHING_PAGE		0x08 +#define GPMODE_AUDIO_CTL_PAGE		0x0e +#define GPMODE_POWER_PAGE		0x1a +#define GPMODE_FAULT_FAIL_PAGE		0x1c +#define GPMODE_TO_PROTECT_PAGE		0x1d +#define GPMODE_CAPABILITIES_PAGE	0x2a +#define GPMODE_ALL_PAGES		0x3f +/* Not in Mt. Fuji, but in ATAPI 2.6 -- deprecated now in favor + * of MODE_SENSE_POWER_PAGE */ +#define GPMODE_CDROM_PAGE		0x0d + + + +/* DVD struct types */ +#define DVD_STRUCT_PHYSICAL	0x00 +#define DVD_STRUCT_COPYRIGHT	0x01 +#define DVD_STRUCT_DISCKEY	0x02 +#define DVD_STRUCT_BCA		0x03 +#define DVD_STRUCT_MANUFACT	0x04 + +struct dvd_layer { +	__u8 book_version	: 4; +	__u8 book_type		: 4; +	__u8 min_rate		: 4; +	__u8 disc_size		: 4; +	__u8 layer_type		: 4; +	__u8 track_path		: 1; +	__u8 nlayers		: 2; +	__u8 track_density	: 4; +	__u8 linear_density	: 4; +	__u8 bca		: 1; +	__u32 start_sector; +	__u32 end_sector; +	__u32 end_sector_l0; +}; + +#define DVD_LAYERS	4 + +struct dvd_physical { +	__u8 type; +	__u8 layer_num; +	struct dvd_layer layer[DVD_LAYERS]; +}; + +struct dvd_copyright { +	__u8 type; + +	__u8 layer_num; +	__u8 cpst; +	__u8 rmi; +}; + +struct dvd_disckey { +	__u8 type; + +	unsigned agid		: 2; +	__u8 value[2048]; +}; + +struct dvd_bca { +	__u8 type; + +	int len; +	__u8 value[188]; +}; + +struct dvd_manufact { +	__u8 type; + +	__u8 layer_num; +	int len; +	__u8 value[2048]; +}; + +typedef union { +	__u8 type; + +	struct dvd_physical	physical; +	struct dvd_copyright	copyright; +	struct dvd_disckey	disckey; +	struct dvd_bca		bca; +	struct dvd_manufact	manufact; +} dvd_struct; + +/* + * DVD authentication ioctl + */ + +/* Authentication states */ +#define DVD_LU_SEND_AGID	0 +#define DVD_HOST_SEND_CHALLENGE	1 +#define DVD_LU_SEND_KEY1	2 +#define DVD_LU_SEND_CHALLENGE	3 +#define DVD_HOST_SEND_KEY2	4 + +/* Termination states */ +#define DVD_AUTH_ESTABLISHED	5 +#define DVD_AUTH_FAILURE	6 + +/* Other functions */ +#define DVD_LU_SEND_TITLE_KEY	7 +#define DVD_LU_SEND_ASF		8 +#define DVD_INVALIDATE_AGID	9 +#define DVD_LU_SEND_RPC_STATE	10 +#define DVD_HOST_SEND_RPC_STATE	11 + +/* State data */ +typedef __u8 dvd_key[5];		/* 40-bit value, MSB is first elem. */ +typedef __u8 dvd_challenge[10];	/* 80-bit value, MSB is first elem. */ + +struct dvd_lu_send_agid { +	__u8 type; +	unsigned agid		: 2; +}; + +struct dvd_host_send_challenge { +	__u8 type; +	unsigned agid		: 2; + +	dvd_challenge chal; +}; + +struct dvd_send_key { +	__u8 type; +	unsigned agid		: 2; + +	dvd_key key; +}; + +struct dvd_lu_send_challenge { +	__u8 type; +	unsigned agid		: 2; + +	dvd_challenge chal; +}; + +#define DVD_CPM_NO_COPYRIGHT	0 +#define DVD_CPM_COPYRIGHTED	1 + +#define DVD_CP_SEC_NONE		0 +#define DVD_CP_SEC_EXIST	1 + +#define DVD_CGMS_UNRESTRICTED	0 +#define DVD_CGMS_SINGLE		2 +#define DVD_CGMS_RESTRICTED	3 + +struct dvd_lu_send_title_key { +	__u8 type; +	unsigned agid		: 2; + +	dvd_key title_key; +	int lba; +	unsigned cpm		: 1; +	unsigned cp_sec		: 1; +	unsigned cgms		: 2; +}; + +struct dvd_lu_send_asf { +	__u8 type; +	unsigned agid		: 2; + +	unsigned asf		: 1; +}; + +struct dvd_host_send_rpcstate { +	__u8 type; +	__u8 pdrc; +}; + +struct dvd_lu_send_rpcstate { +	__u8 type		: 2; +	__u8 vra		: 3; +	__u8 ucca		: 3; +	__u8 region_mask; +	__u8 rpc_scheme; +}; + +typedef union { +	__u8 type; + +	struct dvd_lu_send_agid		lsa; +	struct dvd_host_send_challenge	hsc; +	struct dvd_send_key		lsk; +	struct dvd_lu_send_challenge	lsc; +	struct dvd_send_key		hsk; +	struct dvd_lu_send_title_key	lstk; +	struct dvd_lu_send_asf		lsasf; +	struct dvd_host_send_rpcstate	hrpcs; +	struct dvd_lu_send_rpcstate	lrpcs; +} dvd_authinfo; + +struct request_sense { +#if defined(__BIG_ENDIAN_BITFIELD) +	__u8 valid		: 1; +	__u8 error_code		: 7; +#elif defined(__LITTLE_ENDIAN_BITFIELD) +	__u8 error_code		: 7; +	__u8 valid		: 1; +#endif +	__u8 segment_number; +#if defined(__BIG_ENDIAN_BITFIELD) +	__u8 reserved1		: 2; +	__u8 ili		: 1; +	__u8 reserved2		: 1; +	__u8 sense_key		: 4; +#elif defined(__LITTLE_ENDIAN_BITFIELD) +	__u8 sense_key		: 4; +	__u8 reserved2		: 1; +	__u8 ili		: 1; +	__u8 reserved1		: 2; +#endif +	__u8 information[4]; +	__u8 add_sense_len; +	__u8 command_info[4]; +	__u8 asc; +	__u8 ascq; +	__u8 fruc; +	__u8 sks[3]; +	__u8 asb[46]; +}; + +/* + * feature profile + */ +#define CDF_RWRT	0x0020	/* "Random Writable" */ +#define CDF_HWDM	0x0024	/* "Hardware Defect Management" */ +#define CDF_MRW 	0x0028 + +/* + * media status bits + */ +#define CDM_MRW_NOTMRW			0 +#define CDM_MRW_BGFORMAT_INACTIVE	1 +#define CDM_MRW_BGFORMAT_ACTIVE		2 +#define CDM_MRW_BGFORMAT_COMPLETE	3 + +/* + * mrw address spaces + */ +#define MRW_LBA_DMA			0 +#define MRW_LBA_GAA			1 + +/* + * mrw mode pages (first is deprecated) -- probed at init time and + * cdi->mrw_mode_page is set + */ +#define MRW_MODE_PC_PRE1		0x2c +#define MRW_MODE_PC			0x03 + +struct mrw_feature_desc { +	__be16 feature_code; +#if defined(__BIG_ENDIAN_BITFIELD) +	__u8 reserved1		: 2; +	__u8 feature_version	: 4; +	__u8 persistent		: 1; +	__u8 curr		: 1; +#elif defined(__LITTLE_ENDIAN_BITFIELD) +	__u8 curr		: 1; +	__u8 persistent		: 1; +	__u8 feature_version	: 4; +	__u8 reserved1		: 2; +#endif +	__u8 add_len; +#if defined(__BIG_ENDIAN_BITFIELD) +	__u8 reserved2		: 7; +	__u8 write		: 1; +#elif defined(__LITTLE_ENDIAN_BITFIELD) +	__u8 write		: 1; +	__u8 reserved2		: 7; +#endif +	__u8 reserved3; +	__u8 reserved4; +	__u8 reserved5; +}; + +/* cf. mmc4r02g.pdf 5.3.10 Random Writable Feature (0020h) pg 197 of 635 */ +struct rwrt_feature_desc { +	__be16 feature_code; +#if defined(__BIG_ENDIAN_BITFIELD) +	__u8 reserved1		: 2; +	__u8 feature_version	: 4; +	__u8 persistent		: 1; +	__u8 curr		: 1; +#elif defined(__LITTLE_ENDIAN_BITFIELD) +	__u8 curr		: 1; +	__u8 persistent		: 1; +	__u8 feature_version	: 4; +	__u8 reserved1		: 2; +#endif +	__u8 add_len; +	__u32 last_lba; +	__u32 block_size; +	__u16 blocking; +#if defined(__BIG_ENDIAN_BITFIELD) +	__u8 reserved2		: 7; +	__u8 page_present	: 1; +#elif defined(__LITTLE_ENDIAN_BITFIELD) +	__u8 page_present	: 1; +	__u8 reserved2		: 7; +#endif +	__u8 reserved3; +}; + +typedef struct { +	__be16 disc_information_length; +#if defined(__BIG_ENDIAN_BITFIELD) +	__u8 reserved1			: 3; +        __u8 erasable			: 1; +        __u8 border_status		: 2; +        __u8 disc_status		: 2; +#elif defined(__LITTLE_ENDIAN_BITFIELD) +        __u8 disc_status		: 2; +        __u8 border_status		: 2; +        __u8 erasable			: 1; +	__u8 reserved1			: 3; +#else +#error "Please fix <asm/byteorder.h>" +#endif +	__u8 n_first_track; +	__u8 n_sessions_lsb; +	__u8 first_track_lsb; +	__u8 last_track_lsb; +#if defined(__BIG_ENDIAN_BITFIELD) +	__u8 did_v			: 1; +        __u8 dbc_v			: 1; +        __u8 uru			: 1; +        __u8 reserved2			: 2; +	__u8 dbit			: 1; +	__u8 mrw_status			: 2; +#elif defined(__LITTLE_ENDIAN_BITFIELD) +	__u8 mrw_status			: 2; +	__u8 dbit			: 1; +        __u8 reserved2			: 2; +        __u8 uru			: 1; +        __u8 dbc_v			: 1; +	__u8 did_v			: 1; +#endif +	__u8 disc_type; +	__u8 n_sessions_msb; +	__u8 first_track_msb; +	__u8 last_track_msb; +	__u32 disc_id; +	__u32 lead_in; +	__u32 lead_out; +	__u8 disc_bar_code[8]; +	__u8 reserved3; +	__u8 n_opc; +} disc_information; + +typedef struct { +	__be16 track_information_length; +	__u8 track_lsb; +	__u8 session_lsb; +	__u8 reserved1; +#if defined(__BIG_ENDIAN_BITFIELD) +	__u8 reserved2			: 2; +        __u8 damage			: 1; +        __u8 copy			: 1; +        __u8 track_mode			: 4; +	__u8 rt				: 1; +	__u8 blank			: 1; +	__u8 packet			: 1; +	__u8 fp				: 1; +	__u8 data_mode			: 4; +	__u8 reserved3			: 6; +	__u8 lra_v			: 1; +	__u8 nwa_v			: 1; +#elif defined(__LITTLE_ENDIAN_BITFIELD) +        __u8 track_mode			: 4; +        __u8 copy			: 1; +        __u8 damage			: 1; +	__u8 reserved2			: 2; +	__u8 data_mode			: 4; +	__u8 fp				: 1; +	__u8 packet			: 1; +	__u8 blank			: 1; +	__u8 rt				: 1; +	__u8 nwa_v			: 1; +	__u8 lra_v			: 1; +	__u8 reserved3			: 6; +#endif +	__be32 track_start; +	__be32 next_writable; +	__be32 free_blocks; +	__be32 fixed_packet_size; +	__be32 track_size; +	__be32 last_rec_address; +} track_information; + +struct feature_header { +	__u32 data_len; +	__u8 reserved1; +	__u8 reserved2; +	__u16 curr_profile; +}; + +struct mode_page_header { +	__be16 mode_data_length; +	__u8 medium_type; +	__u8 reserved1; +	__u8 reserved2; +	__u8 reserved3; +	__be16 desc_length; +}; + + +#endif /* _UAPI_LINUX_CDROM_H */ diff --git a/include/uapi/linux/cgroupstats.h b/include/uapi/linux/cgroupstats.h new file mode 100644 index 00000000000..3753c33160d --- /dev/null +++ b/include/uapi/linux/cgroupstats.h @@ -0,0 +1,71 @@ +/* cgroupstats.h - exporting per-cgroup statistics + * + * Copyright IBM Corporation, 2007 + * Author Balbir Singh <balbir@linux.vnet.ibm.com> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2.1 of the GNU Lesser General Public License + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + +#ifndef _LINUX_CGROUPSTATS_H +#define _LINUX_CGROUPSTATS_H + +#include <linux/types.h> +#include <linux/taskstats.h> + +/* + * Data shared between user space and kernel space on a per cgroup + * basis. This data is shared using taskstats. + * + * Most of these states are derived by looking at the task->state value + * For the nr_io_wait state, a flag in the delay accounting structure + * indicates that the task is waiting on IO + * + * Each member is aligned to a 8 byte boundary. + */ +struct cgroupstats { +	__u64	nr_sleeping;		/* Number of tasks sleeping */ +	__u64	nr_running;		/* Number of tasks running */ +	__u64	nr_stopped;		/* Number of tasks in stopped state */ +	__u64	nr_uninterruptible;	/* Number of tasks in uninterruptible */ +					/* state */ +	__u64	nr_io_wait;		/* Number of tasks waiting on IO */ +}; + +/* + * Commands sent from userspace + * Not versioned. New commands should only be inserted at the enum's end + * prior to __CGROUPSTATS_CMD_MAX + */ + +enum { +	CGROUPSTATS_CMD_UNSPEC = __TASKSTATS_CMD_MAX,	/* Reserved */ +	CGROUPSTATS_CMD_GET,		/* user->kernel request/get-response */ +	CGROUPSTATS_CMD_NEW,		/* kernel->user event */ +	__CGROUPSTATS_CMD_MAX, +}; + +#define CGROUPSTATS_CMD_MAX (__CGROUPSTATS_CMD_MAX - 1) + +enum { +	CGROUPSTATS_TYPE_UNSPEC = 0,	/* Reserved */ +	CGROUPSTATS_TYPE_CGROUP_STATS,	/* contains name + stats */ +	__CGROUPSTATS_TYPE_MAX, +}; + +#define CGROUPSTATS_TYPE_MAX (__CGROUPSTATS_TYPE_MAX - 1) + +enum { +	CGROUPSTATS_CMD_ATTR_UNSPEC = 0, +	CGROUPSTATS_CMD_ATTR_FD, +	__CGROUPSTATS_CMD_ATTR_MAX, +}; + +#define CGROUPSTATS_CMD_ATTR_MAX (__CGROUPSTATS_CMD_ATTR_MAX - 1) + +#endif /* _LINUX_CGROUPSTATS_H */ diff --git a/include/uapi/linux/chio.h b/include/uapi/linux/chio.h new file mode 100644 index 00000000000..d9bac7f9728 --- /dev/null +++ b/include/uapi/linux/chio.h @@ -0,0 +1,168 @@ +/* + * ioctl interface for the scsi media changer driver + */ + +/* changer element types */ +#define CHET_MT   0	/* media transport element (robot) */ +#define CHET_ST   1	/* storage element (media slots) */ +#define CHET_IE   2	/* import/export element */ +#define CHET_DT   3	/* data transfer element (tape/cdrom/whatever) */ +#define CHET_V1   4	/* vendor specific #1 */ +#define CHET_V2   5	/* vendor specific #2 */ +#define CHET_V3   6	/* vendor specific #3 */ +#define CHET_V4   7	/* vendor specific #4 */ + + +/* + * CHIOGPARAMS + *    query changer properties + * + * CHIOVGPARAMS + *    query vendor-specific element types + * + *    accessing elements works by specifing type and unit of the element. + *    for example, storage elements are addressed with type = CHET_ST and + *    unit = 0 .. cp_nslots-1 + * + */ +struct changer_params { +	int cp_curpicker;  /* current transport element */ +	int cp_npickers;   /* number of transport elements      (CHET_MT) */ +	int cp_nslots;     /* number of storage elements        (CHET_ST) */ +	int cp_nportals;   /* number of import/export elements  (CHET_IE) */ +	int cp_ndrives;    /* number of data transfer elements  (CHET_DT) */ +}; +struct changer_vendor_params { +	int  cvp_n1;       /* number of vendor specific elems   (CHET_V1) */ +	char cvp_label1[16]; +	int  cvp_n2;       /* number of vendor specific elems   (CHET_V2) */ +	char cvp_label2[16]; +	int  cvp_n3;       /* number of vendor specific elems   (CHET_V3) */ +	char cvp_label3[16]; +	int  cvp_n4;       /* number of vendor specific elems   (CHET_V4) */ +	char cvp_label4[16]; +	int  reserved[8]; +}; + + +/* + * CHIOMOVE + *    move a medium from one element to another + */ +struct changer_move { +	int cm_fromtype;	/* type/unit of source element */ +	int cm_fromunit;	 +	int cm_totype;	/* type/unit of destination element */ +	int cm_tounit; +	int cm_flags; +}; +#define CM_INVERT   1   /* flag: rotate media (for double-sided like MOD) */ + + +/* + * CHIOEXCHANGE + *    move one medium from element #1 to element #2, + *    and another one from element #2 to element #3. + *    element #1 and #3 are allowed to be identical. + */ +struct changer_exchange { +	int ce_srctype;	    /* type/unit of element #1 */ +	int ce_srcunit; +	int ce_fdsttype;    /* type/unit of element #2 */ +	int ce_fdstunit; +	int ce_sdsttype;    /* type/unit of element #3 */ +	int ce_sdstunit; +	int ce_flags; +}; +#define CE_INVERT1   1 +#define CE_INVERT2   2 + + +/* + * CHIOPOSITION + *    move the transport element (robot arm) to a specific element. + */ +struct changer_position { +	int cp_type; +	int cp_unit; +	int cp_flags; +}; +#define CP_INVERT   1 + + +/* + * CHIOGSTATUS + *    get element status for all elements of a specific type + */ +struct changer_element_status { +	int             ces_type; +	unsigned char   __user *ces_data; +}; +#define CESTATUS_FULL     0x01 /* full */ +#define CESTATUS_IMPEXP   0x02	/* media was imported (inserted by sysop) */ +#define CESTATUS_EXCEPT   0x04	/* error condition */ +#define CESTATUS_ACCESS   0x08	/* access allowed */ +#define CESTATUS_EXENAB   0x10	/* element can export media */ +#define CESTATUS_INENAB   0x20	/* element can import media */ + + +/* + * CHIOGELEM + *    get more detailed status information for a single element + */ +struct changer_get_element { +	int	cge_type;	 /* type/unit */ +	int	cge_unit; +	int	cge_status;      /* status */ +	int     cge_errno;       /* errno */ +	int     cge_srctype;     /* source element of the last move/exchange */ +	int     cge_srcunit; +	int     cge_id;          /* scsi id  (for data transfer elements) */ +	int     cge_lun;         /* scsi lun (for data transfer elements) */ +	char    cge_pvoltag[36]; /* primary volume tag */ +	char    cge_avoltag[36]; /* alternate volume tag */ +	int     cge_flags; +}; +/* flags */ +#define CGE_ERRNO     0x01       /* errno available       */ +#define CGE_INVERT    0x02       /* media inverted        */ +#define CGE_SRC       0x04       /* media src available   */ +#define CGE_IDLUN     0x08       /* ID+LUN available      */ +#define CGE_PVOLTAG   0x10       /* primary volume tag available */ +#define CGE_AVOLTAG   0x20       /* alternate volume tag available */ + + +/* + * CHIOSVOLTAG + *    set volume tag + */ +struct changer_set_voltag { +	int	csv_type;	 /* type/unit */ +	int	csv_unit; +	char    csv_voltag[36];  /* volume tag */ +	int     csv_flags; +}; +#define CSV_PVOLTAG   0x01       /* primary volume tag */ +#define CSV_AVOLTAG   0x02       /* alternate volume tag */ +#define CSV_CLEARTAG  0x04       /* clear volume tag */ + +/* ioctls */ +#define CHIOMOVE       _IOW('c', 1,struct changer_move) +#define CHIOEXCHANGE   _IOW('c', 2,struct changer_exchange) +#define CHIOPOSITION   _IOW('c', 3,struct changer_position) +#define CHIOGPICKER    _IOR('c', 4,int)                        /* not impl. */ +#define CHIOSPICKER    _IOW('c', 5,int)                        /* not impl. */ +#define CHIOGPARAMS    _IOR('c', 6,struct changer_params) +#define CHIOGSTATUS    _IOW('c', 8,struct changer_element_status) +#define CHIOGELEM      _IOW('c',16,struct changer_get_element) +#define CHIOINITELEM   _IO('c',17) +#define CHIOSVOLTAG    _IOW('c',18,struct changer_set_voltag) +#define CHIOGVPARAMS   _IOR('c',19,struct changer_vendor_params) + +/* ---------------------------------------------------------------------- */ + +/* + * Local variables: + * c-basic-offset: 8 + * End: + */ diff --git a/include/uapi/linux/cm4000_cs.h b/include/uapi/linux/cm4000_cs.h new file mode 100644 index 00000000000..bc51f77db91 --- /dev/null +++ b/include/uapi/linux/cm4000_cs.h @@ -0,0 +1,62 @@ +#ifndef _UAPI_CM4000_H_ +#define _UAPI_CM4000_H_ + +#include <linux/types.h> + +#define	MAX_ATR			33 + +#define	CM4000_MAX_DEV		4 + +/* those two structures are passed via ioctl() from/to userspace.  They are + * used by existing userspace programs, so I kepth the awkward "bIFSD" naming + * not to break compilation of userspace apps. -HW */ + +typedef struct atreq { +	__s32 atr_len; +	unsigned char atr[64]; +	__s32 power_act; +	unsigned char bIFSD; +	unsigned char bIFSC; +} atreq_t; + + +/* what is particularly stupid in the original driver is the arch-dependent + * member sizes. This leads to CONFIG_COMPAT breakage, since 32bit userspace + * will lay out the structure members differently than the 64bit kernel. + * + * I've changed "ptsreq.protocol" from "unsigned long" to "__u32". + * On 32bit this will make no difference.  With 64bit kernels, it will make + * 32bit apps work, too. + */ + +typedef struct ptsreq { +	__u32 protocol; /*T=0: 2^0, T=1:  2^1*/ + 	unsigned char flags; + 	unsigned char pts1; + 	unsigned char pts2; +	unsigned char pts3; +} ptsreq_t; + +#define	CM_IOC_MAGIC		'c' +#define	CM_IOC_MAXNR	        255 + +#define	CM_IOCGSTATUS		_IOR (CM_IOC_MAGIC, 0, unsigned char *) +#define	CM_IOCGATR		_IOWR(CM_IOC_MAGIC, 1, atreq_t *) +#define	CM_IOCSPTS		_IOW (CM_IOC_MAGIC, 2, ptsreq_t *) +#define	CM_IOCSRDR		_IO  (CM_IOC_MAGIC, 3) +#define CM_IOCARDOFF            _IO  (CM_IOC_MAGIC, 4) + +#define CM_IOSDBGLVL            _IOW(CM_IOC_MAGIC, 250, int*) + +/* card and device states */ +#define	CM_CARD_INSERTED		0x01 +#define	CM_CARD_POWERED			0x02 +#define	CM_ATR_PRESENT			0x04 +#define	CM_ATR_VALID	 		0x08 +#define	CM_STATE_VALID			0x0f +/* extra info only from CM4000 */ +#define	CM_NO_READER			0x10 +#define	CM_BAD_CARD			0x20 + + +#endif /* _UAPI_CM4000_H_ */ diff --git a/include/uapi/linux/cn_proc.h b/include/uapi/linux/cn_proc.h new file mode 100644 index 00000000000..0d7b49973bb --- /dev/null +++ b/include/uapi/linux/cn_proc.h @@ -0,0 +1,121 @@ +/* + * cn_proc.h - process events connector + * + * Copyright (C) Matt Helsley, IBM Corp. 2005 + * Based on cn_fork.h by Nguyen Anh Quynh and Guillaume Thouvenin + * Copyright (C) 2005 Nguyen Anh Quynh <aquynh@gmail.com> + * Copyright (C) 2005 Guillaume Thouvenin <guillaume.thouvenin@bull.net> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2.1 of the GNU Lesser General Public License + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + +#ifndef _UAPICN_PROC_H +#define _UAPICN_PROC_H + +#include <linux/types.h> + +/* + * Userspace sends this enum to register with the kernel that it is listening + * for events on the connector. + */ +enum proc_cn_mcast_op { +	PROC_CN_MCAST_LISTEN = 1, +	PROC_CN_MCAST_IGNORE = 2 +}; + +/* + * From the user's point of view, the process + * ID is the thread group ID and thread ID is the internal + * kernel "pid". So, fields are assigned as follow: + * + *  In user space     -  In  kernel space + * + * parent process ID  =  parent->tgid + * parent thread  ID  =  parent->pid + * child  process ID  =  child->tgid + * child  thread  ID  =  child->pid + */ + +struct proc_event { +	enum what { +		/* Use successive bits so the enums can be used to record +		 * sets of events as well +		 */ +		PROC_EVENT_NONE = 0x00000000, +		PROC_EVENT_FORK = 0x00000001, +		PROC_EVENT_EXEC = 0x00000002, +		PROC_EVENT_UID  = 0x00000004, +		PROC_EVENT_GID  = 0x00000040, +		PROC_EVENT_SID  = 0x00000080, +		PROC_EVENT_PTRACE = 0x00000100, +		PROC_EVENT_COMM = 0x00000200, +		/* "next" should be 0x00000400 */ +		/* "last" is the last process event: exit */ +		PROC_EVENT_EXIT = 0x80000000 +	} what; +	__u32 cpu; +	__u64 __attribute__((aligned(8))) timestamp_ns; +		/* Number of nano seconds since system boot */ +	union { /* must be last field of proc_event struct */ +		struct { +			__u32 err; +		} ack; + +		struct fork_proc_event { +			__kernel_pid_t parent_pid; +			__kernel_pid_t parent_tgid; +			__kernel_pid_t child_pid; +			__kernel_pid_t child_tgid; +		} fork; + +		struct exec_proc_event { +			__kernel_pid_t process_pid; +			__kernel_pid_t process_tgid; +		} exec; + +		struct id_proc_event { +			__kernel_pid_t process_pid; +			__kernel_pid_t process_tgid; +			union { +				__u32 ruid; /* task uid */ +				__u32 rgid; /* task gid */ +			} r; +			union { +				__u32 euid; +				__u32 egid; +			} e; +		} id; + +		struct sid_proc_event { +			__kernel_pid_t process_pid; +			__kernel_pid_t process_tgid; +		} sid; + +		struct ptrace_proc_event { +			__kernel_pid_t process_pid; +			__kernel_pid_t process_tgid; +			__kernel_pid_t tracer_pid; +			__kernel_pid_t tracer_tgid; +		} ptrace; + +		struct comm_proc_event { +			__kernel_pid_t process_pid; +			__kernel_pid_t process_tgid; +			char           comm[16]; +		} comm; + +		struct exit_proc_event { +			__kernel_pid_t process_pid; +			__kernel_pid_t process_tgid; +			__u32 exit_code, exit_signal; +		} exit; +	} event_data; +}; + +#endif /* _UAPICN_PROC_H */ diff --git a/include/uapi/linux/coda.h b/include/uapi/linux/coda.h new file mode 100644 index 00000000000..695fade33c6 --- /dev/null +++ b/include/uapi/linux/coda.h @@ -0,0 +1,741 @@ +/*  +   You may distribute this file under either of the two licenses that +   follow at your discretion. +*/ + +/* BLURB lgpl + +                           Coda File System +                              Release 5 + +          Copyright (c) 1987-1999 Carnegie Mellon University +                  Additional copyrights listed below + +This code is distributed "AS IS" without warranty of any kind under +the terms of the GNU Library General Public Licence Version 2, as +shown in the file LICENSE, or under the license shown below. The +technical and financial contributors to Coda are listed in the file +CREDITS. + +                        Additional copyrights  +*/ + +/* + +            Coda: an Experimental Distributed File System +                             Release 4.0 + +          Copyright (c) 1987-1999 Carnegie Mellon University +                         All Rights Reserved + +Permission  to  use, copy, modify and distribute this software and its +documentation is hereby granted,  provided  that  both  the  copyright +notice  and  this  permission  notice  appear  in  all  copies  of the +software, derivative works or  modified  versions,  and  any  portions +thereof, and that both notices appear in supporting documentation, and +that credit is given to Carnegie Mellon University  in  all  documents +and publicity pertaining to direct or indirect use of this code or its +derivatives. + +CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS, +SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS +FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON +DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER +RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF +ANY DERIVATIVE WORK. + +Carnegie  Mellon  encourages  users  of  this  software  to return any +improvements or extensions that  they  make,  and  to  grant  Carnegie +Mellon the rights to redistribute these changes without encumbrance. +*/ + +/* + * + * Based on cfs.h from Mach, but revamped for increased simplicity. + * Linux modifications by  + * Peter Braam, Aug 1996 + */ + +#ifndef _UAPI_CODA_HEADER_ +#define _UAPI_CODA_HEADER_ + + +/* Catch new _KERNEL defn for NetBSD and DJGPP/__CYGWIN32__ */ +#if defined(__NetBSD__) || \ +  ((defined(DJGPP) || defined(__CYGWIN32__)) && !defined(KERNEL)) +#include <sys/types.h> +#endif  + +#ifndef CODA_MAXSYMLINKS +#define CODA_MAXSYMLINKS 10 +#endif + +#if defined(DJGPP) || defined(__CYGWIN32__) +#ifdef KERNEL +typedef unsigned long u_long; +typedef unsigned int u_int; +typedef unsigned short u_short; +typedef u_long ino_t; +typedef u_long dev_t; +typedef void * caddr_t; +#ifdef DOS +typedef unsigned __int64 u_quad_t; +#else  +typedef unsigned long long u_quad_t; +#endif + +#define inline + +struct timespec { +        long       ts_sec; +        long       ts_nsec; +}; +#else  /* DJGPP but not KERNEL */ +#include <sys/time.h> +typedef unsigned long long u_quad_t; +#endif /* !KERNEL */ +#endif /* !DJGPP */ + + +#if defined(__linux__) +#include <linux/time.h> +#define cdev_t u_quad_t +#ifndef __KERNEL__ +#if !defined(_UQUAD_T_) && (!defined(__GLIBC__) || __GLIBC__ < 2) +#define _UQUAD_T_ 1 +typedef unsigned long long u_quad_t; +#endif +#endif /* __KERNEL__ */ +#else +#define cdev_t dev_t +#endif + +#ifdef __CYGWIN32__ +struct timespec { +        time_t  tv_sec;         /* seconds */ +        long    tv_nsec;        /* nanoseconds */ +}; +#endif + +#ifndef __BIT_TYPES_DEFINED__ +#define __BIT_TYPES_DEFINED__ +typedef signed char	      int8_t; +typedef unsigned char	    u_int8_t; +typedef short		     int16_t; +typedef unsigned short	   u_int16_t; +typedef int		     int32_t; +typedef unsigned int	   u_int32_t; +#endif + + +/* + * Cfs constants + */ +#define CODA_MAXNAMLEN   255 +#define CODA_MAXPATHLEN  1024 +#define CODA_MAXSYMLINK  10 + +/* these are Coda's version of O_RDONLY etc combinations + * to deal with VFS open modes + */ +#define	C_O_READ	0x001 +#define	C_O_WRITE       0x002 +#define C_O_TRUNC       0x010 +#define C_O_EXCL	0x100 +#define C_O_CREAT	0x200 + +/* these are to find mode bits in Venus */  +#define C_M_READ  00400 +#define C_M_WRITE 00200 + +/* for access Venus will use */ +#define C_A_C_OK    8               /* Test for writing upon create.  */ +#define C_A_R_OK    4               /* Test for read permission.  */ +#define C_A_W_OK    2               /* Test for write permission.  */ +#define C_A_X_OK    1               /* Test for execute permission.  */ +#define C_A_F_OK    0               /* Test for existence.  */ + + + +#ifndef _VENUS_DIRENT_T_ +#define _VENUS_DIRENT_T_ 1 +struct venus_dirent { +        u_int32_t d_fileno;		/* file number of entry */ +        u_int16_t d_reclen;		/* length of this record */ +        u_int8_t  d_type;			/* file type, see below */ +        u_int8_t  d_namlen;		/* length of string in d_name */ +        char	  d_name[CODA_MAXNAMLEN + 1];/* name must be no longer than this */ +}; +#undef DIRSIZ +#define DIRSIZ(dp)      ((sizeof (struct venus_dirent) - (CODA_MAXNAMLEN+1)) + \ +                         (((dp)->d_namlen+1 + 3) &~ 3)) + +/* + * File types + */ +#define	CDT_UNKNOWN	 0 +#define	CDT_FIFO	 1 +#define	CDT_CHR		 2 +#define	CDT_DIR		 4 +#define	CDT_BLK		 6 +#define	CDT_REG		 8 +#define	CDT_LNK		10 +#define	CDT_SOCK	12 +#define	CDT_WHT		14 + +/* + * Convert between stat structure types and directory types. + */ +#define	IFTOCDT(mode)	(((mode) & 0170000) >> 12) +#define	CDTTOIF(dirtype)	((dirtype) << 12) + +#endif + +#ifndef _VUID_T_ +#define _VUID_T_ +typedef u_int32_t vuid_t; +typedef u_int32_t vgid_t; +#endif /*_VUID_T_ */ + +struct CodaFid { +	u_int32_t opaque[4]; +}; + +#define coda_f2i(fid)\ +	(fid ? (fid->opaque[3] ^ (fid->opaque[2]<<10) ^ (fid->opaque[1]<<20) ^ fid->opaque[0]) : 0) + +#ifndef _VENUS_VATTR_T_ +#define _VENUS_VATTR_T_ +/* + * Vnode types.  VNON means no type. + */ +enum coda_vtype	{ C_VNON, C_VREG, C_VDIR, C_VBLK, C_VCHR, C_VLNK, C_VSOCK, C_VFIFO, C_VBAD }; + +struct coda_vattr { +	long     	va_type;	/* vnode type (for create) */ +	u_short		va_mode;	/* files access mode and type */ +	short		va_nlink;	/* number of references to file */ +	vuid_t		va_uid;		/* owner user id */ +	vgid_t		va_gid;		/* owner group id */ +	long		va_fileid;	/* file id */ +	u_quad_t	va_size;	/* file size in bytes */ +	long		va_blocksize;	/* blocksize preferred for i/o */ +	struct timespec	va_atime;	/* time of last access */ +	struct timespec	va_mtime;	/* time of last modification */ +	struct timespec	va_ctime;	/* time file changed */ +	u_long		va_gen;		/* generation number of file */ +	u_long		va_flags;	/* flags defined for file */ +	cdev_t	        va_rdev;	/* device special file represents */ +	u_quad_t	va_bytes;	/* bytes of disk space held by file */ +	u_quad_t	va_filerev;	/* file modification number */ +}; + +#endif  + +/* structure used by CODA_STATFS for getting cache information from venus */ +struct coda_statfs { +    int32_t f_blocks; +    int32_t f_bfree; +    int32_t f_bavail; +    int32_t f_files; +    int32_t f_ffree; +}; + +/* + * Kernel <--> Venus communications. + */ + +#define CODA_ROOT	2 +#define CODA_OPEN_BY_FD	3 +#define CODA_OPEN	4 +#define CODA_CLOSE	5 +#define CODA_IOCTL	6 +#define CODA_GETATTR	7 +#define CODA_SETATTR	8 +#define CODA_ACCESS	9 +#define CODA_LOOKUP	10 +#define CODA_CREATE	11 +#define CODA_REMOVE	12 +#define CODA_LINK	13 +#define CODA_RENAME	14 +#define CODA_MKDIR	15 +#define CODA_RMDIR	16 +#define CODA_SYMLINK	18 +#define CODA_READLINK	19 +#define CODA_FSYNC	20 +#define CODA_VGET	22 +#define CODA_SIGNAL	23 +#define CODA_REPLACE	 24 /* DOWNCALL */ +#define CODA_FLUSH       25 /* DOWNCALL */ +#define CODA_PURGEUSER   26 /* DOWNCALL */ +#define CODA_ZAPFILE     27 /* DOWNCALL */ +#define CODA_ZAPDIR      28 /* DOWNCALL */ +#define CODA_PURGEFID    30 /* DOWNCALL */ +#define CODA_OPEN_BY_PATH 31 +#define CODA_RESOLVE     32 +#define CODA_REINTEGRATE 33 +#define CODA_STATFS	 34 +#define CODA_STORE	 35 +#define CODA_RELEASE	 36 +#define CODA_NCALLS 37 + +#define DOWNCALL(opcode) (opcode >= CODA_REPLACE && opcode <= CODA_PURGEFID) + +#define VC_MAXDATASIZE	    8192 +#define VC_MAXMSGSIZE      sizeof(union inputArgs)+sizeof(union outputArgs) +\ +                            VC_MAXDATASIZE   + +#define CIOC_KERNEL_VERSION _IOWR('c', 10, size_t) + +#define CODA_KERNEL_VERSION 3 /* 128-bit file identifiers */ + +/* + *        Venus <-> Coda  RPC arguments + */ +struct coda_in_hdr { +    u_int32_t opcode; +    u_int32_t unique;	    /* Keep multiple outstanding msgs distinct */ +    pid_t pid; +    pid_t pgid; +    vuid_t uid; +}; + +/* Really important that opcode and unique are 1st two fields! */ +struct coda_out_hdr { +    u_int32_t opcode; +    u_int32_t unique;	 +    u_int32_t result; +}; + +/* coda_root: NO_IN */ +struct coda_root_out { +    struct coda_out_hdr oh; +    struct CodaFid VFid; +}; + +struct coda_root_in { +    struct coda_in_hdr in; +}; + +/* coda_open: */ +struct coda_open_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +    int	flags; +}; + +struct coda_open_out { +    struct coda_out_hdr oh; +    cdev_t	dev; +    ino_t	inode; +}; + + +/* coda_store: */ +struct coda_store_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +    int	flags; +}; + +struct coda_store_out { +    struct coda_out_hdr out; +}; + +/* coda_release: */ +struct coda_release_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +    int	flags; +}; + +struct coda_release_out { +    struct coda_out_hdr out; +}; + +/* coda_close: */ +struct coda_close_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +    int	flags; +}; + +struct coda_close_out { +    struct coda_out_hdr out; +}; + +/* coda_ioctl: */ +struct coda_ioctl_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +    int	cmd; +    int	len; +    int	rwflag; +    char *data;			/* Place holder for data. */ +}; + +struct coda_ioctl_out { +    struct coda_out_hdr oh; +    int	len; +    caddr_t	data;		/* Place holder for data. */ +}; + + +/* coda_getattr: */ +struct coda_getattr_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +}; + +struct coda_getattr_out { +    struct coda_out_hdr oh; +    struct coda_vattr attr; +}; + + +/* coda_setattr: NO_OUT */ +struct coda_setattr_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +    struct coda_vattr attr; +}; + +struct coda_setattr_out { +    struct coda_out_hdr out; +}; + +/* coda_access: NO_OUT */ +struct coda_access_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +    int	flags; +}; + +struct coda_access_out { +    struct coda_out_hdr out; +}; + + +/* lookup flags */ +#define CLU_CASE_SENSITIVE     0x01 +#define CLU_CASE_INSENSITIVE   0x02 + +/* coda_lookup: */ +struct  coda_lookup_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +    int         name;		/* Place holder for data. */ +    int         flags;	 +}; + +struct coda_lookup_out { +    struct coda_out_hdr oh; +    struct CodaFid VFid; +    int	vtype; +}; + + +/* coda_create: */ +struct coda_create_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +    struct coda_vattr attr; +    int excl; +    int mode; +    int 	name;		/* Place holder for data. */ +}; + +struct coda_create_out { +    struct coda_out_hdr oh; +    struct CodaFid VFid; +    struct coda_vattr attr; +}; + + +/* coda_remove: NO_OUT */ +struct coda_remove_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +    int name;		/* Place holder for data. */ +}; + +struct coda_remove_out { +    struct coda_out_hdr out; +}; + +/* coda_link: NO_OUT */ +struct coda_link_in { +    struct coda_in_hdr ih; +    struct CodaFid sourceFid;	/* cnode to link *to* */ +    struct CodaFid destFid;	/* Directory in which to place link */ +    int tname;		/* Place holder for data. */ +}; + +struct coda_link_out { +    struct coda_out_hdr out; +}; + + +/* coda_rename: NO_OUT */ +struct coda_rename_in { +    struct coda_in_hdr ih; +    struct CodaFid sourceFid; +    int 	srcname; +    struct CodaFid destFid; +    int 	destname; +}; + +struct coda_rename_out { +    struct coda_out_hdr out; +}; + +/* coda_mkdir: */ +struct coda_mkdir_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +    struct coda_vattr attr; +    int	   name;		/* Place holder for data. */ +}; + +struct coda_mkdir_out { +    struct coda_out_hdr oh; +    struct CodaFid VFid; +    struct coda_vattr attr; +}; + + +/* coda_rmdir: NO_OUT */ +struct coda_rmdir_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +    int name;		/* Place holder for data. */ +}; + +struct coda_rmdir_out { +    struct coda_out_hdr out; +}; + +/* coda_symlink: NO_OUT */ +struct coda_symlink_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid;	/* Directory to put symlink in */ +    int srcname; +    struct coda_vattr attr; +    int tname; +}; + +struct coda_symlink_out { +    struct coda_out_hdr out; +}; + +/* coda_readlink: */ +struct coda_readlink_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +}; + +struct coda_readlink_out { +    struct coda_out_hdr oh; +    int	count; +    caddr_t	data;		/* Place holder for data. */ +}; + + +/* coda_fsync: NO_OUT */ +struct coda_fsync_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +}; + +struct coda_fsync_out { +    struct coda_out_hdr out; +}; + +/* coda_vget: */ +struct coda_vget_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +}; + +struct coda_vget_out { +    struct coda_out_hdr oh; +    struct CodaFid VFid; +    int	vtype; +}; + + +/* CODA_SIGNAL is out-of-band, doesn't need data. */ +/* CODA_INVALIDATE is a venus->kernel call */ +/* CODA_FLUSH is a venus->kernel call */ + +/* coda_purgeuser: */ +/* CODA_PURGEUSER is a venus->kernel call */ +struct coda_purgeuser_out { +    struct coda_out_hdr oh; +    vuid_t uid; +}; + +/* coda_zapfile: */ +/* CODA_ZAPFILE is a venus->kernel call */ +struct coda_zapfile_out {   +    struct coda_out_hdr oh; +    struct CodaFid CodaFid; +}; + +/* coda_zapdir: */ +/* CODA_ZAPDIR is a venus->kernel call */	 +struct coda_zapdir_out {	   +    struct coda_out_hdr oh; +    struct CodaFid CodaFid; +}; + +/* coda_purgefid: */ +/* CODA_PURGEFID is a venus->kernel call */	 +struct coda_purgefid_out {  +    struct coda_out_hdr oh; +    struct CodaFid CodaFid; +}; + +/* coda_replace: */ +/* CODA_REPLACE is a venus->kernel call */	 +struct coda_replace_out { /* coda_replace is a venus->kernel call */ +    struct coda_out_hdr oh; +    struct CodaFid NewFid; +    struct CodaFid OldFid; +}; + +/* coda_open_by_fd: */ +struct coda_open_by_fd_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +    int        flags; +}; + +struct coda_open_by_fd_out { +    struct coda_out_hdr oh; +    int fd; + +#ifdef __KERNEL__ +    struct file *fh; /* not passed from userspace but used in-kernel only */ +#endif +}; + +/* coda_open_by_path: */ +struct coda_open_by_path_in { +    struct coda_in_hdr ih; +    struct CodaFid VFid; +    int	flags; +}; + +struct coda_open_by_path_out { +    struct coda_out_hdr oh; +	int path; +}; + +/* coda_statfs: NO_IN */ +struct coda_statfs_in { +    struct coda_in_hdr in; +}; + +struct coda_statfs_out { +    struct coda_out_hdr oh; +    struct coda_statfs stat; +}; + +/*  + * Occasionally, we don't cache the fid returned by CODA_LOOKUP.  + * For instance, if the fid is inconsistent.  + * This case is handled by setting the top bit of the type result parameter. + */ +#define CODA_NOCACHE          0x80000000 + +union inputArgs { +    struct coda_in_hdr ih;		/* NB: every struct below begins with an ih */ +    struct coda_open_in coda_open; +    struct coda_store_in coda_store; +    struct coda_release_in coda_release; +    struct coda_close_in coda_close; +    struct coda_ioctl_in coda_ioctl; +    struct coda_getattr_in coda_getattr; +    struct coda_setattr_in coda_setattr; +    struct coda_access_in coda_access; +    struct coda_lookup_in coda_lookup; +    struct coda_create_in coda_create; +    struct coda_remove_in coda_remove; +    struct coda_link_in coda_link; +    struct coda_rename_in coda_rename; +    struct coda_mkdir_in coda_mkdir; +    struct coda_rmdir_in coda_rmdir; +    struct coda_symlink_in coda_symlink; +    struct coda_readlink_in coda_readlink; +    struct coda_fsync_in coda_fsync; +    struct coda_vget_in coda_vget; +    struct coda_open_by_fd_in coda_open_by_fd; +    struct coda_open_by_path_in coda_open_by_path; +    struct coda_statfs_in coda_statfs; +}; + +union outputArgs { +    struct coda_out_hdr oh;		/* NB: every struct below begins with an oh */ +    struct coda_root_out coda_root; +    struct coda_open_out coda_open; +    struct coda_ioctl_out coda_ioctl; +    struct coda_getattr_out coda_getattr; +    struct coda_lookup_out coda_lookup; +    struct coda_create_out coda_create; +    struct coda_mkdir_out coda_mkdir; +    struct coda_readlink_out coda_readlink; +    struct coda_vget_out coda_vget; +    struct coda_purgeuser_out coda_purgeuser; +    struct coda_zapfile_out coda_zapfile; +    struct coda_zapdir_out coda_zapdir; +    struct coda_purgefid_out coda_purgefid; +    struct coda_replace_out coda_replace; +    struct coda_open_by_fd_out coda_open_by_fd; +    struct coda_open_by_path_out coda_open_by_path; +    struct coda_statfs_out coda_statfs; +};     + +union coda_downcalls { +    /* CODA_INVALIDATE is a venus->kernel call */ +    /* CODA_FLUSH is a venus->kernel call */ +    struct coda_purgeuser_out purgeuser; +    struct coda_zapfile_out zapfile; +    struct coda_zapdir_out zapdir; +    struct coda_purgefid_out purgefid; +    struct coda_replace_out replace; +}; + + +/* + * Used for identifying usage of "Control" and pioctls + */ + +#define PIOCPARM_MASK 0x0000ffff +struct ViceIoctl { +        void __user *in;        /* Data to be transferred in */ +        void __user *out;       /* Data to be transferred out */ +        u_short in_size;        /* Size of input buffer <= 2K */ +        u_short out_size;       /* Maximum size of output buffer, <= 2K */ +}; + +struct PioctlData { +        const char __user *path; +        int follow; +        struct ViceIoctl vi; +}; + +#define CODA_CONTROL		".CONTROL" +#define CODA_CONTROLLEN		8 +#define CTL_INO			-1 + +/* Data passed to mount */ + +#define CODA_MOUNT_VERSION 1 + +struct coda_mount_data { +	int		version; +	int		fd;       /* Opened device */ +}; + +#endif /* _UAPI_CODA_HEADER_ */ diff --git a/include/uapi/linux/coda_psdev.h b/include/uapi/linux/coda_psdev.h new file mode 100644 index 00000000000..79d05981fc4 --- /dev/null +++ b/include/uapi/linux/coda_psdev.h @@ -0,0 +1,27 @@ +#ifndef _UAPI__CODA_PSDEV_H +#define _UAPI__CODA_PSDEV_H + +#include <linux/magic.h> + +#define CODA_PSDEV_MAJOR 67 +#define MAX_CODADEVS  5	   /* how many do we allow */ + + +/* messages between coda filesystem in kernel and Venus */ +struct upc_req { +	struct list_head    uc_chain; +	caddr_t	            uc_data; +	u_short	            uc_flags; +	u_short             uc_inSize;  /* Size is at most 5000 bytes */ +	u_short	            uc_outSize; +	u_short	            uc_opcode;  /* copied from data to save lookup */ +	int		    uc_unique; +	wait_queue_head_t   uc_sleep;   /* process' wait queue */ +}; + +#define CODA_REQ_ASYNC  0x1 +#define CODA_REQ_READ   0x2 +#define CODA_REQ_WRITE  0x4 +#define CODA_REQ_ABORT  0x8 + +#endif /* _UAPI__CODA_PSDEV_H */ diff --git a/include/uapi/linux/coff.h b/include/uapi/linux/coff.h new file mode 100644 index 00000000000..6354a7fe22b --- /dev/null +++ b/include/uapi/linux/coff.h @@ -0,0 +1,351 @@ +/* This file is derived from the GAS 2.1.4 assembler control file. +   The GAS product is under the GNU General Public License, version 2 or later. +   As such, this file is also under that license. + +   If the file format changes in the COFF object, this file should be +   subsequently updated to reflect the changes. + +   The actual loader module only uses a few of these structures. The full +   set is documented here because I received the full set. If you wish +   more information about COFF, then O'Reilly has a very excellent book. +*/ + +#define  E_SYMNMLEN  8   /* Number of characters in a symbol name         */ +#define  E_FILNMLEN 14   /* Number of characters in a file name           */ +#define  E_DIMNUM    4   /* Number of array dimensions in auxiliary entry */ + +/* + * These defines are byte order independent. There is no alignment of fields + * permitted in the structures. Therefore they are declared as characters + * and the values loaded from the character positions. It also makes it + * nice to have it "endian" independent. + */ +  +/* Load a short int from the following tables with little-endian formats */ +#define COFF_SHORT_L(ps) ((short)(((unsigned short)((unsigned char)ps[1])<<8)|\ +				  ((unsigned short)((unsigned char)ps[0])))) + +/* Load a long int from the following tables with little-endian formats */ +#define COFF_LONG_L(ps) (((long)(((unsigned long)((unsigned char)ps[3])<<24) |\ +				 ((unsigned long)((unsigned char)ps[2])<<16) |\ +				 ((unsigned long)((unsigned char)ps[1])<<8)  |\ +				 ((unsigned long)((unsigned char)ps[0]))))) +  +/* Load a short int from the following tables with big-endian formats */ +#define COFF_SHORT_H(ps) ((short)(((unsigned short)((unsigned char)ps[0])<<8)|\ +				  ((unsigned short)((unsigned char)ps[1])))) + +/* Load a long int from the following tables with big-endian formats */ +#define COFF_LONG_H(ps) (((long)(((unsigned long)((unsigned char)ps[0])<<24) |\ +				 ((unsigned long)((unsigned char)ps[1])<<16) |\ +				 ((unsigned long)((unsigned char)ps[2])<<8)  |\ +				 ((unsigned long)((unsigned char)ps[3]))))) + +/* These may be overridden later by brain dead implementations which generate +   a big-endian header with little-endian data. In that case, generate a +   replacement macro which tests a flag and uses either of the two above +   as appropriate. */ + +#define COFF_LONG(v)   COFF_LONG_L(v) +#define COFF_SHORT(v)  COFF_SHORT_L(v) + +/*** coff information for Intel 386/486.  */ + +/********************** FILE HEADER **********************/ + +struct COFF_filehdr { +	char f_magic[2];	/* magic number			*/ +	char f_nscns[2];	/* number of sections		*/ +	char f_timdat[4];	/* time & date stamp		*/ +	char f_symptr[4];	/* file pointer to symtab	*/ +	char f_nsyms[4];	/* number of symtab entries	*/ +	char f_opthdr[2];	/* sizeof(optional hdr)		*/ +	char f_flags[2];	/* flags			*/ +}; + +/* + *   Bits for f_flags: + * + *	F_RELFLG	relocation info stripped from file + *	F_EXEC		file is executable  (i.e. no unresolved external + *			references) + *	F_LNNO		line numbers stripped from file + *	F_LSYMS		local symbols stripped from file + *	F_MINMAL	this is a minimal object file (".m") output of fextract + *	F_UPDATE	this is a fully bound update file, output of ogen + *	F_SWABD		this file has had its bytes swabbed (in names) + *	F_AR16WR	this file has the byte ordering of an AR16WR + *			(e.g. 11/70) machine + *	F_AR32WR	this file has the byte ordering of an AR32WR machine + *			(e.g. vax and iNTEL 386) + *	F_AR32W		this file has the byte ordering of an AR32W machine + *			(e.g. 3b,maxi) + *	F_PATCH		file contains "patch" list in optional header + *	F_NODF		(minimal file only) no decision functions for + *			replaced functions + */ + +#define  COFF_F_RELFLG		0000001 +#define  COFF_F_EXEC		0000002 +#define  COFF_F_LNNO		0000004 +#define  COFF_F_LSYMS		0000010 +#define  COFF_F_MINMAL		0000020 +#define  COFF_F_UPDATE		0000040 +#define  COFF_F_SWABD		0000100 +#define  COFF_F_AR16WR		0000200 +#define  COFF_F_AR32WR		0000400 +#define  COFF_F_AR32W		0001000 +#define  COFF_F_PATCH		0002000 +#define  COFF_F_NODF		0002000 + +#define	COFF_I386MAGIC	        0x14c   /* Linux's system    */ + +#if 0   /* Perhaps, someday, these formats may be used.      */ +#define COFF_I386PTXMAGIC	0x154 +#define COFF_I386AIXMAGIC	0x175   /* IBM's AIX system  */ +#define COFF_I386BADMAG(x) ((COFF_SHORT((x).f_magic) != COFF_I386MAGIC) \ +			  && COFF_SHORT((x).f_magic) != COFF_I386PTXMAGIC \ +			  && COFF_SHORT((x).f_magic) != COFF_I386AIXMAGIC) +#else +#define COFF_I386BADMAG(x) (COFF_SHORT((x).f_magic) != COFF_I386MAGIC) +#endif + +#define	COFF_FILHDR	struct COFF_filehdr +#define	COFF_FILHSZ	sizeof(COFF_FILHDR) + +/********************** AOUT "OPTIONAL HEADER" **********************/ + +/* Linux COFF must have this "optional" header. Standard COFF has no entry +   location for the "entry" point. They normally would start with the first +   location of the .text section. This is not a good idea for linux. So, +   the use of this "optional" header is not optional. It is required. + +   Do not be tempted to assume that the size of the optional header is +   a constant and simply index the next byte by the size of this structure. +   Use the 'f_opthdr' field in the main coff header for the size of the +   structure actually written to the file!! +*/ + +typedef struct  +{ +  char 	magic[2];		/* type of file				 */ +  char	vstamp[2];		/* version stamp			 */ +  char	tsize[4];		/* text size in bytes, padded to FW bdry */ +  char	dsize[4];		/* initialized   data "   "		 */ +  char	bsize[4];		/* uninitialized data "   "		 */ +  char	entry[4];		/* entry pt.				 */ +  char 	text_start[4];		/* base of text used for this file       */ +  char 	data_start[4];		/* base of data used for this file       */ +} +COFF_AOUTHDR; + +#define COFF_AOUTSZ (sizeof(COFF_AOUTHDR)) + +#define COFF_STMAGIC	0401 +#define COFF_OMAGIC     0404 +#define COFF_JMAGIC     0407    /* dirty text and data image, can't share  */ +#define COFF_DMAGIC     0410    /* dirty text segment, data aligned        */ +#define COFF_ZMAGIC     0413    /* The proper magic number for executables  */ +#define COFF_SHMAGIC	0443	/* shared library header                   */ + +/********************** SECTION HEADER **********************/ + +struct COFF_scnhdr { +  char		s_name[8];	/* section name			    */ +  char		s_paddr[4];	/* physical address, aliased s_nlib */ +  char		s_vaddr[4];	/* virtual address		    */ +  char		s_size[4];	/* section size			    */ +  char		s_scnptr[4];	/* file ptr to raw data for section */ +  char		s_relptr[4];	/* file ptr to relocation	    */ +  char		s_lnnoptr[4];	/* file ptr to line numbers	    */ +  char		s_nreloc[2];	/* number of relocation entries	    */ +  char		s_nlnno[2];	/* number of line number entries    */ +  char		s_flags[4];	/* flags			    */ +}; + +#define	COFF_SCNHDR	struct COFF_scnhdr +#define	COFF_SCNHSZ	sizeof(COFF_SCNHDR) + +/* + * names of "special" sections + */ + +#define COFF_TEXT	".text" +#define COFF_DATA	".data" +#define COFF_BSS	".bss" +#define COFF_COMMENT    ".comment" +#define COFF_LIB        ".lib" + +#define COFF_SECT_TEXT  0      /* Section for instruction code             */ +#define COFF_SECT_DATA  1      /* Section for initialized globals          */ +#define COFF_SECT_BSS   2      /* Section for un-initialized globals       */ +#define COFF_SECT_REQD  3      /* Minimum number of sections for good file */ + +#define COFF_STYP_REG     0x00 /* regular segment                          */ +#define COFF_STYP_DSECT   0x01 /* dummy segment                            */ +#define COFF_STYP_NOLOAD  0x02 /* no-load segment                          */ +#define COFF_STYP_GROUP   0x04 /* group segment                            */ +#define COFF_STYP_PAD     0x08 /* .pad segment                             */ +#define COFF_STYP_COPY    0x10 /* copy section                             */ +#define COFF_STYP_TEXT    0x20 /* .text segment                            */ +#define COFF_STYP_DATA    0x40 /* .data segment                            */ +#define COFF_STYP_BSS     0x80 /* .bss segment                             */ +#define COFF_STYP_INFO   0x200 /* .comment section                         */ +#define COFF_STYP_OVER   0x400 /* overlay section                          */ +#define COFF_STYP_LIB    0x800 /* library section                          */ + +/* + * Shared libraries have the following section header in the data field for + * each library. + */ + +struct COFF_slib { +  char		sl_entsz[4];	/* Size of this entry               */ +  char		sl_pathndx[4];	/* size of the header field         */ +}; + +#define	COFF_SLIBHD	struct COFF_slib +#define	COFF_SLIBSZ	sizeof(COFF_SLIBHD) + +/********************** LINE NUMBERS **********************/ + +/* 1 line number entry for every "breakpointable" source line in a section. + * Line numbers are grouped on a per function basis; first entry in a function + * grouping will have l_lnno = 0 and in place of physical address will be the + * symbol table index of the function name. + */ + +struct COFF_lineno { +  union { +    char l_symndx[4];	/* function name symbol index, iff l_lnno == 0*/ +    char l_paddr[4];	/* (physical) address of line number	*/ +  } l_addr; +  char l_lnno[2];	/* line number		*/ +}; + +#define	COFF_LINENO	struct COFF_lineno +#define	COFF_LINESZ	6 + +/********************** SYMBOLS **********************/ + +#define COFF_E_SYMNMLEN	 8	/* # characters in a short symbol name	*/ +#define COFF_E_FILNMLEN	14	/* # characters in a file name		*/ +#define COFF_E_DIMNUM	 4	/* # array dimensions in auxiliary entry */ + +/* + *  All symbols and sections have the following definition + */ + +struct COFF_syment  +{ +  union { +    char e_name[E_SYMNMLEN];    /* Symbol name (first 8 characters) */ +    struct { +      char e_zeroes[4];         /* Leading zeros */ +      char e_offset[4];         /* Offset if this is a header section */ +    } e; +  } e; + +  char e_value[4];              /* Value (address) of the segment */ +  char e_scnum[2];              /* Section number */ +  char e_type[2];               /* Type of section */ +  char e_sclass[1];             /* Loader class */ +  char e_numaux[1];             /* Number of auxiliary entries which follow */ +}; + +#define COFF_N_BTMASK	(0xf)   /* Mask for important class bits */ +#define COFF_N_TMASK	(0x30)  /* Mask for important type bits  */ +#define COFF_N_BTSHFT	(4)     /* # bits to shift class field   */ +#define COFF_N_TSHIFT	(2)     /* # bits to shift type field    */ + +/* + *  Auxiliary entries because the main table is too limiting. + */ +   +union COFF_auxent { + +/* + *  Debugger information + */ + +  struct { +    char x_tagndx[4];	        /* str, un, or enum tag indx */ +    union { +      struct { +	char  x_lnno[2];        /* declaration line number */ +	char  x_size[2];        /* str/union/array size */ +      } x_lnsz; +      char x_fsize[4];	        /* size of function */ +    } x_misc; + +    union { +      struct {		        /* if ISFCN, tag, or .bb */ +	char x_lnnoptr[4];	/* ptr to fcn line # */ +	char x_endndx[4];	/* entry ndx past block end */ +      } x_fcn; + +      struct {		        /* if ISARY, up to 4 dimen. */ +	char x_dimen[E_DIMNUM][2]; +      } x_ary; +    } x_fcnary; + +    char x_tvndx[2];	/* tv index */ +  } x_sym; + +/* + *   Source file names (debugger information) + */ + +  union { +    char x_fname[E_FILNMLEN]; +    struct { +      char x_zeroes[4]; +      char x_offset[4]; +    } x_n; +  } x_file; + +/* + *   Section information + */ + +  struct { +    char x_scnlen[4];	/* section length */ +    char x_nreloc[2];	/* # relocation entries */ +    char x_nlinno[2];	/* # line numbers */ +  } x_scn; + +/* + *   Transfer vector (branch table) + */ +   +  struct { +    char x_tvfill[4];	/* tv fill value */ +    char x_tvlen[2];	/* length of .tv */ +    char x_tvran[2][2];	/* tv range */ +  } x_tv;		/* info about .tv section (in auxent of symbol .tv)) */ +}; + +#define	COFF_SYMENT	struct COFF_syment +#define	COFF_SYMESZ	18	 +#define	COFF_AUXENT	union COFF_auxent +#define	COFF_AUXESZ	18 + +#define COFF_ETEXT	"etext" + +/********************** RELOCATION DIRECTIVES **********************/ + +struct COFF_reloc { +  char r_vaddr[4];        /* Virtual address of item    */ +  char r_symndx[4];       /* Symbol index in the symtab */ +  char r_type[2];         /* Relocation type            */ +}; + +#define COFF_RELOC struct COFF_reloc +#define COFF_RELSZ 10 + +#define COFF_DEF_DATA_SECTION_ALIGNMENT  4 +#define COFF_DEF_BSS_SECTION_ALIGNMENT   4 +#define COFF_DEF_TEXT_SECTION_ALIGNMENT  4 + +/* For new sections we haven't heard of before */ +#define COFF_DEF_SECTION_ALIGNMENT       4 diff --git a/include/uapi/linux/connector.h b/include/uapi/linux/connector.h new file mode 100644 index 00000000000..8761a0349c7 --- /dev/null +++ b/include/uapi/linux/connector.h @@ -0,0 +1,77 @@ +/* + * 	connector.h + *  + * 2004-2005 Copyright (c) Evgeniy Polyakov <zbr@ioremap.net> + * 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; 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + */ + +#ifndef _UAPI__CONNECTOR_H +#define _UAPI__CONNECTOR_H + +#include <linux/types.h> + +/* + * Process Events connector unique ids -- used for message routing + */ +#define CN_IDX_PROC			0x1 +#define CN_VAL_PROC			0x1 +#define CN_IDX_CIFS			0x2 +#define CN_VAL_CIFS                     0x1 +#define CN_W1_IDX			0x3	/* w1 communication */ +#define CN_W1_VAL			0x1 +#define CN_IDX_V86D			0x4 +#define CN_VAL_V86D_UVESAFB		0x1 +#define CN_IDX_BB			0x5	/* BlackBoard, from the TSP GPL sampling framework */ +#define CN_DST_IDX			0x6 +#define CN_DST_VAL			0x1 +#define CN_IDX_DM			0x7	/* Device Mapper */ +#define CN_VAL_DM_USERSPACE_LOG		0x1 +#define CN_IDX_DRBD			0x8 +#define CN_VAL_DRBD			0x1 +#define CN_KVP_IDX			0x9	/* HyperV KVP */ +#define CN_KVP_VAL			0x1	/* queries from the kernel */ + +#define CN_NETLINK_USERS		10	/* Highest index + 1 */ + +/* + * Maximum connector's message size. + */ +#define CONNECTOR_MAX_MSG_SIZE		16384 + +/* + * idx and val are unique identifiers which  + * are used for message routing and  + * must be registered in connector.h for in-kernel usage. + */ + +struct cb_id { +	__u32 idx; +	__u32 val; +}; + +struct cn_msg { +	struct cb_id id; + +	__u32 seq; +	__u32 ack; + +	__u16 len;		/* Length of the following data */ +	__u16 flags; +	__u8 data[0]; +}; + +#endif /* _UAPI__CONNECTOR_H */ diff --git a/include/uapi/linux/const.h b/include/uapi/linux/const.h new file mode 100644 index 00000000000..c22c707c455 --- /dev/null +++ b/include/uapi/linux/const.h @@ -0,0 +1,24 @@ +/* const.h: Macros for dealing with constants.  */ + +#ifndef _LINUX_CONST_H +#define _LINUX_CONST_H + +/* Some constant macros are used in both assembler and + * C code.  Therefore we cannot annotate them always with + * 'UL' and other type specifiers unilaterally.  We + * use the following macros to deal with this. + * + * Similarly, _AT() will cast an expression with a type in C, but + * leave it unchanged in asm. + */ + +#ifdef __ASSEMBLY__ +#define _AC(X,Y)	X +#define _AT(T,X)	X +#else +#define __AC(X,Y)	(X##Y) +#define _AC(X,Y)	__AC(X,Y) +#define _AT(T,X)	((T)(X)) +#endif + +#endif /* !(_LINUX_CONST_H) */ diff --git a/include/uapi/linux/cramfs_fs.h b/include/uapi/linux/cramfs_fs.h new file mode 100644 index 00000000000..e4611a9b924 --- /dev/null +++ b/include/uapi/linux/cramfs_fs.h @@ -0,0 +1,88 @@ +#ifndef _UAPI__CRAMFS_H +#define _UAPI__CRAMFS_H + +#include <linux/types.h> +#include <linux/magic.h> + +#define CRAMFS_SIGNATURE	"Compressed ROMFS" + +/* + * Width of various bitfields in struct cramfs_inode. + * Primarily used to generate warnings in mkcramfs. + */ +#define CRAMFS_MODE_WIDTH 16 +#define CRAMFS_UID_WIDTH 16 +#define CRAMFS_SIZE_WIDTH 24 +#define CRAMFS_GID_WIDTH 8 +#define CRAMFS_NAMELEN_WIDTH 6 +#define CRAMFS_OFFSET_WIDTH 26 + +/* + * Since inode.namelen is a unsigned 6-bit number, the maximum cramfs + * path length is 63 << 2 = 252. + */ +#define CRAMFS_MAXPATHLEN (((1 << CRAMFS_NAMELEN_WIDTH) - 1) << 2) + +/* + * Reasonably terse representation of the inode data. + */ +struct cramfs_inode { +	__u32 mode:CRAMFS_MODE_WIDTH, uid:CRAMFS_UID_WIDTH; +	/* SIZE for device files is i_rdev */ +	__u32 size:CRAMFS_SIZE_WIDTH, gid:CRAMFS_GID_WIDTH; +	/* NAMELEN is the length of the file name, divided by 4 and +           rounded up.  (cramfs doesn't support hard links.) */ +	/* OFFSET: For symlinks and non-empty regular files, this +	   contains the offset (divided by 4) of the file data in +	   compressed form (starting with an array of block pointers; +	   see README).  For non-empty directories it is the offset +	   (divided by 4) of the inode of the first file in that +	   directory.  For anything else, offset is zero. */ +	__u32 namelen:CRAMFS_NAMELEN_WIDTH, offset:CRAMFS_OFFSET_WIDTH; +}; + +struct cramfs_info { +	__u32 crc; +	__u32 edition; +	__u32 blocks; +	__u32 files; +}; + +/* + * Superblock information at the beginning of the FS. + */ +struct cramfs_super { +	__u32 magic;			/* 0x28cd3d45 - random number */ +	__u32 size;			/* length in bytes */ +	__u32 flags;			/* feature flags */ +	__u32 future;			/* reserved for future use */ +	__u8 signature[16];		/* "Compressed ROMFS" */ +	struct cramfs_info fsid;	/* unique filesystem info */ +	__u8 name[16];			/* user-defined name */ +	struct cramfs_inode root;	/* root inode data */ +}; + +/* + * Feature flags + * + * 0x00000000 - 0x000000ff: features that work for all past kernels + * 0x00000100 - 0xffffffff: features that don't work for past kernels + */ +#define CRAMFS_FLAG_FSID_VERSION_2	0x00000001	/* fsid version #2 */ +#define CRAMFS_FLAG_SORTED_DIRS		0x00000002	/* sorted dirs */ +#define CRAMFS_FLAG_HOLES		0x00000100	/* support for holes */ +#define CRAMFS_FLAG_WRONG_SIGNATURE	0x00000200	/* reserved */ +#define CRAMFS_FLAG_SHIFTED_ROOT_OFFSET	0x00000400	/* shifted root fs */ + +/* + * Valid values in super.flags.  Currently we refuse to mount + * if (flags & ~CRAMFS_SUPPORTED_FLAGS).  Maybe that should be + * changed to test super.future instead. + */ +#define CRAMFS_SUPPORTED_FLAGS	( 0x000000ff \ +				| CRAMFS_FLAG_HOLES \ +				| CRAMFS_FLAG_WRONG_SIGNATURE \ +				| CRAMFS_FLAG_SHIFTED_ROOT_OFFSET ) + + +#endif /* _UAPI__CRAMFS_H */ diff --git a/include/uapi/linux/cuda.h b/include/uapi/linux/cuda.h new file mode 100644 index 00000000000..286f9f10fce --- /dev/null +++ b/include/uapi/linux/cuda.h @@ -0,0 +1,33 @@ +/* + * Definitions for talking to the CUDA.  The CUDA is a microcontroller + * which controls the ADB, system power, RTC, and various other things. + * + * Copyright (C) 1996 Paul Mackerras. + */ + +#ifndef _UAPI_LINUX_CUDA_H +#define _UAPI_LINUX_CUDA_H + +/* CUDA commands (2nd byte) */ +#define CUDA_WARM_START		0 +#define CUDA_AUTOPOLL		1 +#define CUDA_GET_6805_ADDR	2 +#define CUDA_GET_TIME		3 +#define CUDA_GET_PRAM		7 +#define CUDA_SET_6805_ADDR	8 +#define CUDA_SET_TIME		9 +#define CUDA_POWERDOWN		0xa +#define CUDA_POWERUP_TIME	0xb +#define CUDA_SET_PRAM		0xc +#define CUDA_MS_RESET		0xd +#define CUDA_SEND_DFAC		0xe +#define CUDA_RESET_SYSTEM	0x11 +#define CUDA_SET_IPL		0x12 +#define CUDA_SET_AUTO_RATE	0x14 +#define CUDA_GET_AUTO_RATE	0x16 +#define CUDA_SET_DEVICE_LIST	0x19 +#define CUDA_GET_DEVICE_LIST	0x1a +#define CUDA_GET_SET_IIC	0x22 + + +#endif /* _UAPI_LINUX_CUDA_H */ diff --git a/include/uapi/linux/cyclades.h b/include/uapi/linux/cyclades.h new file mode 100644 index 00000000000..12b587aa361 --- /dev/null +++ b/include/uapi/linux/cyclades.h @@ -0,0 +1,493 @@ +/* $Revision: 3.0 $$Date: 1998/11/02 14:20:59 $ + * linux/include/linux/cyclades.h + * + * This file was initially written by + * Randolph Bentson <bentson@grieg.seaslug.org> and is maintained by + * Ivan Passos <ivan@cyclades.com>. + * + * This file contains the general definitions for the cyclades.c driver + *$Log: cyclades.h,v $ + *Revision 3.1  2002/01/29 11:36:16  henrique + *added throttle field on struct cyclades_port to indicate whether the + *port is throttled or not + * + *Revision 3.1  2000/04/19 18:52:52  ivan + *converted address fields to unsigned long and added fields for physical + *addresses on cyclades_card structure; + * + *Revision 3.0  1998/11/02 14:20:59  ivan + *added nports field on cyclades_card structure; + * + *Revision 2.5  1998/08/03 16:57:01  ivan + *added cyclades_idle_stats structure; + *  + *Revision 2.4  1998/06/01 12:09:53  ivan + *removed closing_wait2 from cyclades_port structure; + * + *Revision 2.3  1998/03/16 18:01:12  ivan + *changes in the cyclades_port structure to get it closer to the  + *standard serial port structure; + *added constants for new ioctls; + * + *Revision 2.2  1998/02/17 16:50:00  ivan + *changes in the cyclades_port structure (addition of shutdown_wait and  + *chip_rev variables); + *added constants for new ioctls and for CD1400 rev. numbers. + * + *Revision 2.1	1997/10/24 16:03:00  ivan + *added rflow (which allows enabling the CD1400 special flow control  + *feature) and rtsdtr_inv (which allows DTR/RTS pin inversion) to  + *cyclades_port structure; + *added Alpha support + * + *Revision 2.0  1997/06/30 10:30:00  ivan + *added some new doorbell command constants related to IOCTLW and + *UART error signaling + * + *Revision 1.8  1997/06/03 15:30:00  ivan + *added constant ZFIRM_HLT + *added constant CyPCI_Ze_win ( = 2 * Cy_PCI_Zwin) + * + *Revision 1.7  1997/03/26 10:30:00  daniel + *new entries at the end of cyclades_port struct to reallocate + *variables illegally allocated within card memory. + * + *Revision 1.6  1996/09/09 18:35:30  bentson + *fold in changes for Cyclom-Z -- including structures for + *communicating with board as well modest changes to original + *structures to support new features. + * + *Revision 1.5  1995/11/13 21:13:31  bentson + *changes suggested by Michael Chastain <mec@duracef.shout.net> + *to support use of this file in non-kernel applications + * + * + */ + +#ifndef _UAPI_LINUX_CYCLADES_H +#define _UAPI_LINUX_CYCLADES_H + +#include <linux/types.h> + +struct cyclades_monitor { +        unsigned long           int_count; +        unsigned long           char_count; +        unsigned long           char_max; +        unsigned long           char_last; +}; + +/* + * These stats all reflect activity since the device was last initialized. + * (i.e., since the port was opened with no other processes already having it + * open) + */ +struct cyclades_idle_stats { +    __kernel_time_t in_use;	/* Time device has been in use (secs) */ +    __kernel_time_t recv_idle;	/* Time since last char received (secs) */ +    __kernel_time_t xmit_idle;	/* Time since last char transmitted (secs) */ +    unsigned long  recv_bytes;	/* Bytes received */ +    unsigned long  xmit_bytes;	/* Bytes transmitted */ +    unsigned long  overruns;	/* Input overruns */ +    unsigned long  frame_errs;	/* Input framing errors */ +    unsigned long  parity_errs;	/* Input parity errors */ +}; + +#define CYCLADES_MAGIC  0x4359 + +#define CYGETMON                0x435901 +#define CYGETTHRESH             0x435902 +#define CYSETTHRESH             0x435903 +#define CYGETDEFTHRESH          0x435904 +#define CYSETDEFTHRESH          0x435905 +#define CYGETTIMEOUT            0x435906 +#define CYSETTIMEOUT            0x435907 +#define CYGETDEFTIMEOUT         0x435908 +#define CYSETDEFTIMEOUT         0x435909 +#define CYSETRFLOW		0x43590a +#define CYGETRFLOW		0x43590b +#define CYSETRTSDTR_INV		0x43590c +#define CYGETRTSDTR_INV		0x43590d +#define CYZSETPOLLCYCLE		0x43590e +#define CYZGETPOLLCYCLE		0x43590f +#define CYGETCD1400VER		0x435910 +#define	CYSETWAIT		0x435912 +#define	CYGETWAIT		0x435913 + +/*************** CYCLOM-Z ADDITIONS ***************/ + +#define CZIOC           ('M' << 8) +#define CZ_NBOARDS      (CZIOC|0xfa) +#define CZ_BOOT_START   (CZIOC|0xfb) +#define CZ_BOOT_DATA    (CZIOC|0xfc) +#define CZ_BOOT_END     (CZIOC|0xfd) +#define CZ_TEST         (CZIOC|0xfe) + +#define CZ_DEF_POLL	(HZ/25) + +#define MAX_BOARD       4       /* Max number of boards */ +#define MAX_DEV         256     /* Max number of ports total */ +#define	CYZ_MAX_SPEED	921600 + +#define	CYZ_FIFO_SIZE	16 + +#define CYZ_BOOT_NWORDS 0x100 +struct CYZ_BOOT_CTRL { +        unsigned short  nboard; +        int             status[MAX_BOARD]; +        int             nchannel[MAX_BOARD]; +        int             fw_rev[MAX_BOARD]; +        unsigned long   offset; +        unsigned long   data[CYZ_BOOT_NWORDS]; +}; + + +#ifndef DP_WINDOW_SIZE +/* + *	Memory Window Sizes + */ + +#define	DP_WINDOW_SIZE		(0x00080000)	/* window size 512 Kb */ +#define	ZE_DP_WINDOW_SIZE	(0x00100000)	/* window size 1 Mb (Ze and +						  8Zo V.2 */ +#define	CTRL_WINDOW_SIZE	(0x00000080)	/* runtime regs 128 bytes */ + +/* + *	CUSTOM_REG - Cyclom-Z/PCI Custom Registers Set. The driver + *	normally will access only interested on the fpga_id, fpga_version, + *	start_cpu and stop_cpu. + */ + +struct	CUSTOM_REG { +	__u32	fpga_id;		/* FPGA Identification Register */ +	__u32	fpga_version;		/* FPGA Version Number Register */ +	__u32	cpu_start;		/* CPU start Register (write) */ +	__u32	cpu_stop;		/* CPU stop Register (write) */ +	__u32	misc_reg;		/* Miscellaneous Register */ +	__u32	idt_mode;		/* IDT mode Register */ +	__u32	uart_irq_status;	/* UART IRQ status Register */ +	__u32	clear_timer0_irq;	/* Clear timer interrupt Register */ +	__u32	clear_timer1_irq;	/* Clear timer interrupt Register */ +	__u32	clear_timer2_irq;	/* Clear timer interrupt Register */ +	__u32	test_register;		/* Test Register */ +	__u32	test_count;		/* Test Count Register */ +	__u32	timer_select;		/* Timer select register */ +	__u32	pr_uart_irq_status;	/* Prioritized UART IRQ stat Reg */ +	__u32	ram_wait_state;		/* RAM wait-state Register */ +	__u32	uart_wait_state;	/* UART wait-state Register */ +	__u32	timer_wait_state;	/* timer wait-state Register */ +	__u32	ack_wait_state;		/* ACK wait State Register */ +}; + +/* + *	RUNTIME_9060 - PLX PCI9060ES local configuration and shared runtime + *	registers. This structure can be used to access the 9060 registers + *	(memory mapped). + */ + +struct RUNTIME_9060 { +	__u32	loc_addr_range;	/* 00h - Local Address Range */ +	__u32	loc_addr_base;	/* 04h - Local Address Base */ +	__u32	loc_arbitr;	/* 08h - Local Arbitration */ +	__u32	endian_descr;	/* 0Ch - Big/Little Endian Descriptor */ +	__u32	loc_rom_range;	/* 10h - Local ROM Range */ +	__u32	loc_rom_base;	/* 14h - Local ROM Base */ +	__u32	loc_bus_descr;	/* 18h - Local Bus descriptor */ +	__u32	loc_range_mst;	/* 1Ch - Local Range for Master to PCI */ +	__u32	loc_base_mst;	/* 20h - Local Base for Master PCI */ +	__u32	loc_range_io;	/* 24h - Local Range for Master IO */ +	__u32	pci_base_mst;	/* 28h - PCI Base for Master PCI */ +	__u32	pci_conf_io;	/* 2Ch - PCI configuration for Master IO */ +	__u32	filler1;	/* 30h */ +	__u32	filler2;	/* 34h */ +	__u32	filler3;	/* 38h */ +	__u32	filler4;	/* 3Ch */ +	__u32	mail_box_0;	/* 40h - Mail Box 0 */ +	__u32	mail_box_1;	/* 44h - Mail Box 1 */ +	__u32	mail_box_2;	/* 48h - Mail Box 2 */ +	__u32	mail_box_3;	/* 4Ch - Mail Box 3 */ +	__u32	filler5;	/* 50h */ +	__u32	filler6;	/* 54h */ +	__u32	filler7;	/* 58h */ +	__u32	filler8;	/* 5Ch */ +	__u32	pci_doorbell;	/* 60h - PCI to Local Doorbell */ +	__u32	loc_doorbell;	/* 64h - Local to PCI Doorbell */ +	__u32	intr_ctrl_stat;	/* 68h - Interrupt Control/Status */ +	__u32	init_ctrl;	/* 6Ch - EEPROM control, Init Control, etc */ +}; + +/* Values for the Local Base Address re-map register */ + +#define	WIN_RAM		0x00000001L	/* set the sliding window to RAM */ +#define	WIN_CREG	0x14000001L	/* set the window to custom Registers */ + +/* Values timer select registers */ + +#define	TIMER_BY_1M	0x00		/* clock divided by 1M */ +#define	TIMER_BY_256K	0x01		/* clock divided by 256k */ +#define	TIMER_BY_128K	0x02		/* clock divided by 128k */ +#define	TIMER_BY_32K	0x03		/* clock divided by 32k */ + +/****************** ****************** *******************/ +#endif + +#ifndef ZFIRM_ID +/* #include "zfwint.h" */ +/****************** ****************** *******************/ +/* + *	This file contains the definitions for interfacing with the + *	Cyclom-Z ZFIRM Firmware. + */ + +/* General Constant definitions */ + +#define	MAX_CHAN	64		/* max number of channels per board */ + +/* firmware id structure (set after boot) */ + +#define ID_ADDRESS	0x00000180L	/* signature/pointer address */ +#define	ZFIRM_ID	0x5557465AL	/* ZFIRM/U signature */ +#define	ZFIRM_HLT	0x59505B5CL	/* ZFIRM needs external power supply */ +#define	ZFIRM_RST	0x56040674L	/* RST signal (due to FW reset) */ + +#define	ZF_TINACT_DEF	1000		/* default inactivity timeout  +					   (1000 ms) */ +#define	ZF_TINACT	ZF_TINACT_DEF + +struct	FIRM_ID { +	__u32	signature;		/* ZFIRM/U signature */ +	__u32	zfwctrl_addr;		/* pointer to ZFW_CTRL structure */ +}; + +/* Op. System id */ + +#define	C_OS_LINUX	0x00000030	/* generic Linux system */ + +/* channel op_mode */ + +#define	C_CH_DISABLE	0x00000000	/* channel is disabled */ +#define	C_CH_TXENABLE	0x00000001	/* channel Tx enabled */ +#define	C_CH_RXENABLE	0x00000002	/* channel Rx enabled */ +#define	C_CH_ENABLE	0x00000003	/* channel Tx/Rx enabled */ +#define	C_CH_LOOPBACK	0x00000004	/* Loopback mode */ + +/* comm_parity - parity */ + +#define	C_PR_NONE	0x00000000	/* None */ +#define	C_PR_ODD	0x00000001	/* Odd */ +#define C_PR_EVEN	0x00000002	/* Even */ +#define C_PR_MARK	0x00000004	/* Mark */ +#define C_PR_SPACE	0x00000008	/* Space */ +#define C_PR_PARITY	0x000000ff + +#define	C_PR_DISCARD	0x00000100	/* discard char with frame/par error */ +#define C_PR_IGNORE	0x00000200	/* ignore frame/par error */ + +/* comm_data_l - data length and stop bits */ + +#define C_DL_CS5	0x00000001 +#define C_DL_CS6	0x00000002 +#define C_DL_CS7	0x00000004 +#define C_DL_CS8	0x00000008 +#define	C_DL_CS		0x0000000f +#define C_DL_1STOP	0x00000010 +#define C_DL_15STOP	0x00000020 +#define C_DL_2STOP	0x00000040 +#define	C_DL_STOP	0x000000f0 + +/* interrupt enabling/status */ + +#define	C_IN_DISABLE	0x00000000	/* zero, disable interrupts */ +#define	C_IN_TXBEMPTY	0x00000001	/* tx buffer empty */ +#define	C_IN_TXLOWWM	0x00000002	/* tx buffer below LWM */ +#define	C_IN_RXHIWM	0x00000010	/* rx buffer above HWM */ +#define	C_IN_RXNNDT	0x00000020	/* rx no new data timeout */ +#define	C_IN_MDCD	0x00000100	/* modem DCD change */ +#define	C_IN_MDSR	0x00000200	/* modem DSR change */ +#define	C_IN_MRI	0x00000400	/* modem RI change */ +#define	C_IN_MCTS	0x00000800	/* modem CTS change */ +#define	C_IN_RXBRK	0x00001000	/* Break received */ +#define	C_IN_PR_ERROR	0x00002000	/* parity error */ +#define	C_IN_FR_ERROR	0x00004000	/* frame error */ +#define C_IN_OVR_ERROR  0x00008000      /* overrun error */ +#define C_IN_RXOFL	0x00010000      /* RX buffer overflow */ +#define C_IN_IOCTLW	0x00020000      /* I/O control w/ wait */ +#define C_IN_MRTS	0x00040000	/* modem RTS drop */ +#define C_IN_ICHAR	0x00080000 +  +/* flow control */ + +#define	C_FL_OXX	0x00000001	/* output Xon/Xoff flow control */ +#define	C_FL_IXX	0x00000002	/* output Xon/Xoff flow control */ +#define C_FL_OIXANY	0x00000004	/* output Xon/Xoff (any xon) */ +#define	C_FL_SWFLOW	0x0000000f + +/* flow status */ + +#define	C_FS_TXIDLE	0x00000000	/* no Tx data in the buffer or UART */ +#define	C_FS_SENDING	0x00000001	/* UART is sending data */ +#define	C_FS_SWFLOW	0x00000002	/* Tx is stopped by received Xoff */ + +/* rs_control/rs_status RS-232 signals */ + +#define C_RS_PARAM	0x80000000	/* Indicates presence of parameter in  +					   IOCTLM command */ +#define	C_RS_RTS	0x00000001	/* RTS */ +#define	C_RS_DTR	0x00000004	/* DTR */ +#define	C_RS_DCD	0x00000100	/* CD */ +#define	C_RS_DSR	0x00000200	/* DSR */ +#define	C_RS_RI		0x00000400	/* RI */ +#define	C_RS_CTS	0x00000800	/* CTS */ + +/* commands Host <-> Board */ + +#define	C_CM_RESET	0x01		/* reset/flush buffers */ +#define	C_CM_IOCTL	0x02		/* re-read CH_CTRL */ +#define	C_CM_IOCTLW	0x03		/* re-read CH_CTRL, intr when done */ +#define	C_CM_IOCTLM	0x04		/* RS-232 outputs change */ +#define	C_CM_SENDXOFF	0x10		/* send Xoff */ +#define	C_CM_SENDXON	0x11		/* send Xon */ +#define C_CM_CLFLOW	0x12		/* Clear flow control (resume) */ +#define	C_CM_SENDBRK	0x41		/* send break */ +#define	C_CM_INTBACK	0x42		/* Interrupt back */ +#define	C_CM_SET_BREAK	0x43		/* Tx break on */ +#define	C_CM_CLR_BREAK	0x44		/* Tx break off */ +#define	C_CM_CMD_DONE	0x45		/* Previous command done */ +#define C_CM_INTBACK2	0x46		/* Alternate Interrupt back */ +#define	C_CM_TINACT	0x51		/* set inactivity detection */ +#define	C_CM_IRQ_ENBL	0x52		/* enable generation of interrupts */ +#define	C_CM_IRQ_DSBL	0x53		/* disable generation of interrupts */ +#define	C_CM_ACK_ENBL	0x54		/* enable acknowledged interrupt mode */ +#define	C_CM_ACK_DSBL	0x55		/* disable acknowledged intr mode */ +#define	C_CM_FLUSH_RX	0x56		/* flushes Rx buffer */ +#define	C_CM_FLUSH_TX	0x57		/* flushes Tx buffer */ +#define C_CM_Q_ENABLE	0x58		/* enables queue access from the  +					   driver */ +#define C_CM_Q_DISABLE  0x59            /* disables queue access from the  +					   driver */ + +#define	C_CM_TXBEMPTY	0x60		/* Tx buffer is empty */ +#define	C_CM_TXLOWWM	0x61		/* Tx buffer low water mark */ +#define	C_CM_RXHIWM	0x62		/* Rx buffer high water mark */ +#define	C_CM_RXNNDT	0x63		/* rx no new data timeout */ +#define	C_CM_TXFEMPTY	0x64 +#define	C_CM_ICHAR	0x65 +#define	C_CM_MDCD	0x70		/* modem DCD change */ +#define	C_CM_MDSR	0x71		/* modem DSR change */ +#define	C_CM_MRI	0x72		/* modem RI change */ +#define	C_CM_MCTS	0x73		/* modem CTS change */ +#define C_CM_MRTS	0x74		/* modem RTS drop */ +#define	C_CM_RXBRK	0x84		/* Break received */ +#define	C_CM_PR_ERROR	0x85		/* Parity error */ +#define	C_CM_FR_ERROR	0x86		/* Frame error */ +#define C_CM_OVR_ERROR  0x87            /* Overrun error */ +#define C_CM_RXOFL	0x88            /* RX buffer overflow */ +#define	C_CM_CMDERROR	0x90		/* command error */ +#define	C_CM_FATAL	0x91		/* fatal error */ +#define	C_CM_HW_RESET	0x92		/* reset board */ + +/* + *	CH_CTRL - This per port structure contains all parameters + *	that control an specific port. It can be seen as the + *	configuration registers of a "super-serial-controller". + */ + +struct CH_CTRL { +	__u32	op_mode;	/* operation mode */ +	__u32	intr_enable;	/* interrupt masking */ +	__u32	sw_flow;	/* SW flow control */ +	__u32	flow_status;	/* output flow status */ +	__u32	comm_baud;	/* baud rate  - numerically specified */ +	__u32	comm_parity;	/* parity */ +	__u32	comm_data_l;	/* data length/stop */ +	__u32	comm_flags;	/* other flags */ +	__u32	hw_flow;	/* HW flow control */ +	__u32	rs_control;	/* RS-232 outputs */ +	__u32	rs_status;	/* RS-232 inputs */ +	__u32	flow_xon;	/* xon char */ +	__u32	flow_xoff;	/* xoff char */ +	__u32	hw_overflow;	/* hw overflow counter */ +	__u32	sw_overflow;	/* sw overflow counter */ +	__u32	comm_error;	/* frame/parity error counter */ +	__u32 ichar; +	__u32 filler[7]; +}; + + +/* + *	BUF_CTRL - This per channel structure contains + *	all Tx and Rx buffer control for a given channel. + */ + +struct	BUF_CTRL	{ +	__u32	flag_dma;	/* buffers are in Host memory */ +	__u32	tx_bufaddr;	/* address of the tx buffer */ +	__u32	tx_bufsize;	/* tx buffer size */ +	__u32	tx_threshold;	/* tx low water mark */ +	__u32	tx_get;		/* tail index tx buf */ +	__u32	tx_put;		/* head index tx buf */ +	__u32	rx_bufaddr;	/* address of the rx buffer */ +	__u32	rx_bufsize;	/* rx buffer size */ +	__u32	rx_threshold;	/* rx high water mark */ +	__u32	rx_get;		/* tail index rx buf */ +	__u32	rx_put;		/* head index rx buf */ +	__u32	filler[5];	/* filler to align structures */ +}; + +/* + *	BOARD_CTRL - This per board structure contains all global  + *	control fields related to the board. + */ + +struct BOARD_CTRL { + +	/* static info provided by the on-board CPU */ +	__u32	n_channel;	/* number of channels */ +	__u32	fw_version;	/* firmware version */ + +	/* static info provided by the driver */ +	__u32	op_system;	/* op_system id */ +	__u32	dr_version;	/* driver version */ + +	/* board control area */ +	__u32	inactivity;	/* inactivity control */ + +	/* host to FW commands */ +	__u32	hcmd_channel;	/* channel number */ +	__u32	hcmd_param;	/* pointer to parameters */ + +	/* FW to Host commands */ +	__u32	fwcmd_channel;	/* channel number */ +	__u32	fwcmd_param;	/* pointer to parameters */ +	__u32	zf_int_queue_addr; /* offset for INT_QUEUE structure */ + +	/* filler so the structures are aligned */ +	__u32	filler[6]; +}; + +/* Host Interrupt Queue */ + +#define QUEUE_SIZE	(10*MAX_CHAN) + +struct	INT_QUEUE { +	unsigned char	intr_code[QUEUE_SIZE]; +	unsigned long	channel[QUEUE_SIZE]; +	unsigned long	param[QUEUE_SIZE]; +	unsigned long	put; +	unsigned long	get; +}; + +/* + *	ZFW_CTRL - This is the data structure that includes all other + *	data structures used by the Firmware. + */ +  +struct ZFW_CTRL { +	struct BOARD_CTRL	board_ctrl; +	struct CH_CTRL		ch_ctrl[MAX_CHAN]; +	struct BUF_CTRL		buf_ctrl[MAX_CHAN]; +}; + +/****************** ****************** *******************/ +#endif + +#endif /* _UAPI_LINUX_CYCLADES_H */ diff --git a/include/uapi/linux/cycx_cfm.h b/include/uapi/linux/cycx_cfm.h new file mode 100644 index 00000000000..032d26ed838 --- /dev/null +++ b/include/uapi/linux/cycx_cfm.h @@ -0,0 +1,101 @@ +/* +* cycx_cfm.h	Cyclom 2X WAN Link Driver. +*		Definitions for the Cyclom 2X Firmware Module (CFM). +* +* Author:	Arnaldo Carvalho de Melo <acme@conectiva.com.br> +* +* Copyright:	(c) 1998-2003 Arnaldo Carvalho de Melo +* +* Based on sdlasfm.h by Gene Kozin <74604.152@compuserve.com> +* +*		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. +* ============================================================================ +* 1998/08/08	acme		Initial version. +*/ +#ifndef	_CYCX_CFM_H +#define	_CYCX_CFM_H + +/* Defines */ + +#define	CFM_VERSION	2 +#define	CFM_SIGNATURE	"CFM - Cyclades CYCX Firmware Module" + +/* min/max */ +#define	CFM_IMAGE_SIZE	0x20000	/* max size of CYCX code image file */ +#define	CFM_DESCR_LEN	256	/* max length of description string */ +#define	CFM_MAX_CYCX	1	/* max number of compatible adapters */ +#define	CFM_LOAD_BUFSZ	0x400	/* buffer size for reset code (buffer_load) */ + +/* Firmware Commands */ +#define GEN_POWER_ON	0x1280 + +#define GEN_SET_SEG	0x1401	/* boot segment setting. */ +#define GEN_BOOT_DAT	0x1402	/* boot data. */ +#define GEN_START	0x1403	/* board start. */ +#define GEN_DEFPAR	0x1404	/* buffer length for boot. */ + +/* Adapter Types */ +#define CYCX_2X		2 +/* for now only the 2X is supported, no plans to support 8X or 16X */ +#define CYCX_8X		8 +#define CYCX_16X	16 + +#define	CFID_X25_2X	5200 + +/** + *	struct cycx_fw_info - firmware module information. + *	@codeid - firmware ID + *	@version - firmware version number + *	@adapter - compatible adapter types + *	@memsize - minimum memory size + *	@reserved - reserved + *	@startoffs - entry point offset + *	@winoffs - dual-port memory window offset + *	@codeoffs - code load offset + *	@codesize - code size + *	@dataoffs - configuration data load offset + *	@datasize - configuration data size + */ +struct cycx_fw_info { +	unsigned short	codeid; +	unsigned short	version; +	unsigned short	adapter[CFM_MAX_CYCX]; +	unsigned long	memsize; +	unsigned short	reserved[2]; +	unsigned short	startoffs; +	unsigned short	winoffs; +	unsigned short	codeoffs; +	unsigned long	codesize; +	unsigned short	dataoffs; +	unsigned long	datasize; +}; + +/** + *	struct cycx_firmware - CYCX firmware file structure + *	@signature - CFM file signature + *	@version - file format version + *	@checksum - info + image + *	@reserved - reserved + *	@descr - description string + *	@info - firmware module info + *	@image - code image (variable size) + */ +struct cycx_firmware { +	char		    signature[80]; +	unsigned short	    version; +	unsigned short	    checksum; +	unsigned short	    reserved[6]; +	char		    descr[CFM_DESCR_LEN]; +	struct cycx_fw_info info; +	unsigned char	    image[0]; +}; + +struct cycx_fw_header { +	unsigned long  reset_size; +	unsigned long  data_size; +	unsigned long  code_size; +}; +#endif	/* _CYCX_CFM_H */ diff --git a/include/uapi/linux/dcbnl.h b/include/uapi/linux/dcbnl.h new file mode 100644 index 00000000000..6bb43382f3f --- /dev/null +++ b/include/uapi/linux/dcbnl.h @@ -0,0 +1,684 @@ +/* + * Copyright (c) 2008-2011, Intel Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope 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., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Author: Lucy Liu <lucy.liu@intel.com> + */ + +#ifndef __LINUX_DCBNL_H__ +#define __LINUX_DCBNL_H__ + +#include <linux/types.h> + +/* IEEE 802.1Qaz std supported values */ +#define IEEE_8021QAZ_MAX_TCS	8 + +#define IEEE_8021QAZ_TSA_STRICT		0 +#define IEEE_8021QAZ_TSA_CB_SHAPER	1 +#define IEEE_8021QAZ_TSA_ETS		2 +#define IEEE_8021QAZ_TSA_VENDOR		255 + +/* This structure contains the IEEE 802.1Qaz ETS managed object + * + * @willing: willing bit in ETS configuration TLV + * @ets_cap: indicates supported capacity of ets feature + * @cbs: credit based shaper ets algorithm supported + * @tc_tx_bw: tc tx bandwidth indexed by traffic class + * @tc_rx_bw: tc rx bandwidth indexed by traffic class + * @tc_tsa: TSA Assignment table, indexed by traffic class + * @prio_tc: priority assignment table mapping 8021Qp to traffic class + * @tc_reco_bw: recommended tc bandwidth indexed by traffic class for TLV + * @tc_reco_tsa: recommended tc bandwidth indexed by traffic class for TLV + * @reco_prio_tc: recommended tc tx bandwidth indexed by traffic class for TLV + * + * Recommended values are used to set fields in the ETS recommendation TLV + * with hardware offloaded LLDP. + * + * ---- + *  TSA Assignment 8 bit identifiers + *	0	strict priority + *	1	credit-based shaper + *	2	enhanced transmission selection + *	3-254	reserved + *	255	vendor specific + */ +struct ieee_ets { +	__u8	willing; +	__u8	ets_cap; +	__u8	cbs; +	__u8	tc_tx_bw[IEEE_8021QAZ_MAX_TCS]; +	__u8	tc_rx_bw[IEEE_8021QAZ_MAX_TCS]; +	__u8	tc_tsa[IEEE_8021QAZ_MAX_TCS]; +	__u8	prio_tc[IEEE_8021QAZ_MAX_TCS]; +	__u8	tc_reco_bw[IEEE_8021QAZ_MAX_TCS]; +	__u8	tc_reco_tsa[IEEE_8021QAZ_MAX_TCS]; +	__u8	reco_prio_tc[IEEE_8021QAZ_MAX_TCS]; +}; + +/* This structure contains rate limit extension to the IEEE 802.1Qaz ETS + * managed object. + * Values are 64 bits long and specified in Kbps to enable usage over both + * slow and very fast networks. + * + * @tc_maxrate: maximal tc tx bandwidth indexed by traffic class + */ +struct ieee_maxrate { +	__u64	tc_maxrate[IEEE_8021QAZ_MAX_TCS]; +}; + +/* This structure contains the IEEE 802.1Qaz PFC managed object + * + * @pfc_cap: Indicates the number of traffic classes on the local device + *	     that may simultaneously have PFC enabled. + * @pfc_en: bitmap indicating pfc enabled traffic classes + * @mbc: enable macsec bypass capability + * @delay: the allowance made for a round-trip propagation delay of the + *	   link in bits. + * @requests: count of the sent pfc frames + * @indications: count of the received pfc frames + */ +struct ieee_pfc { +	__u8	pfc_cap; +	__u8	pfc_en; +	__u8	mbc; +	__u16	delay; +	__u64	requests[IEEE_8021QAZ_MAX_TCS]; +	__u64	indications[IEEE_8021QAZ_MAX_TCS]; +}; + +/* CEE DCBX std supported values */ +#define CEE_DCBX_MAX_PGS	8 +#define CEE_DCBX_MAX_PRIO	8 + +/** + * struct cee_pg - CEE Priority-Group managed object + * + * @willing: willing bit in the PG tlv + * @error: error bit in the PG tlv + * @pg_en: enable bit of the PG feature + * @tcs_supported: number of traffic classes supported + * @pg_bw: bandwidth percentage for each priority group + * @prio_pg: priority to PG mapping indexed by priority + */ +struct cee_pg { +	__u8    willing; +	__u8    error; +	__u8    pg_en; +	__u8    tcs_supported; +	__u8    pg_bw[CEE_DCBX_MAX_PGS]; +	__u8    prio_pg[CEE_DCBX_MAX_PGS]; +}; + +/** + * struct cee_pfc - CEE PFC managed object + * + * @willing: willing bit in the PFC tlv + * @error: error bit in the PFC tlv + * @pfc_en: bitmap indicating pfc enabled traffic classes + * @tcs_supported: number of traffic classes supported + */ +struct cee_pfc { +	__u8    willing; +	__u8    error; +	__u8    pfc_en; +	__u8    tcs_supported; +}; + +/* IEEE 802.1Qaz std supported values */ +#define IEEE_8021QAZ_APP_SEL_ETHERTYPE	1 +#define IEEE_8021QAZ_APP_SEL_STREAM	2 +#define IEEE_8021QAZ_APP_SEL_DGRAM	3 +#define IEEE_8021QAZ_APP_SEL_ANY	4 + +/* This structure contains the IEEE 802.1Qaz APP managed object. This + * object is also used for the CEE std as well. There is no difference + * between the objects. + * + * @selector: protocol identifier type + * @protocol: protocol of type indicated + * @priority: 3-bit unsigned integer indicating priority + * + * ---- + *  Selector field values + *	0	Reserved + *	1	Ethertype + *	2	Well known port number over TCP or SCTP + *	3	Well known port number over UDP or DCCP + *	4	Well known port number over TCP, SCTP, UDP, or DCCP + *	5-7	Reserved + */ +struct dcb_app { +	__u8	selector; +	__u8	priority; +	__u16	protocol; +}; + +/** + * struct dcb_peer_app_info - APP feature information sent by the peer + * + * @willing: willing bit in the peer APP tlv + * @error: error bit in the peer APP tlv + * + * In addition to this information the full peer APP tlv also contains + * a table of 'app_count' APP objects defined above. + */ +struct dcb_peer_app_info { +	__u8	willing; +	__u8	error; +}; + +struct dcbmsg { +	__u8               dcb_family; +	__u8               cmd; +	__u16              dcb_pad; +}; + +/** + * enum dcbnl_commands - supported DCB commands + * + * @DCB_CMD_UNDEFINED: unspecified command to catch errors + * @DCB_CMD_GSTATE: request the state of DCB in the device + * @DCB_CMD_SSTATE: set the state of DCB in the device + * @DCB_CMD_PGTX_GCFG: request the priority group configuration for Tx + * @DCB_CMD_PGTX_SCFG: set the priority group configuration for Tx + * @DCB_CMD_PGRX_GCFG: request the priority group configuration for Rx + * @DCB_CMD_PGRX_SCFG: set the priority group configuration for Rx + * @DCB_CMD_PFC_GCFG: request the priority flow control configuration + * @DCB_CMD_PFC_SCFG: set the priority flow control configuration + * @DCB_CMD_SET_ALL: apply all changes to the underlying device + * @DCB_CMD_GPERM_HWADDR: get the permanent MAC address of the underlying + *                        device.  Only useful when using bonding. + * @DCB_CMD_GCAP: request the DCB capabilities of the device + * @DCB_CMD_GNUMTCS: get the number of traffic classes currently supported + * @DCB_CMD_SNUMTCS: set the number of traffic classes + * @DCB_CMD_GBCN: set backward congestion notification configuration + * @DCB_CMD_SBCN: get backward congestion notification configration. + * @DCB_CMD_GAPP: get application protocol configuration + * @DCB_CMD_SAPP: set application protocol configuration + * @DCB_CMD_IEEE_SET: set IEEE 802.1Qaz configuration + * @DCB_CMD_IEEE_GET: get IEEE 802.1Qaz configuration + * @DCB_CMD_GDCBX: get DCBX engine configuration + * @DCB_CMD_SDCBX: set DCBX engine configuration + * @DCB_CMD_GFEATCFG: get DCBX features flags + * @DCB_CMD_SFEATCFG: set DCBX features negotiation flags + * @DCB_CMD_CEE_GET: get CEE aggregated configuration + * @DCB_CMD_IEEE_DEL: delete IEEE 802.1Qaz configuration + */ +enum dcbnl_commands { +	DCB_CMD_UNDEFINED, + +	DCB_CMD_GSTATE, +	DCB_CMD_SSTATE, + +	DCB_CMD_PGTX_GCFG, +	DCB_CMD_PGTX_SCFG, +	DCB_CMD_PGRX_GCFG, +	DCB_CMD_PGRX_SCFG, + +	DCB_CMD_PFC_GCFG, +	DCB_CMD_PFC_SCFG, + +	DCB_CMD_SET_ALL, + +	DCB_CMD_GPERM_HWADDR, + +	DCB_CMD_GCAP, + +	DCB_CMD_GNUMTCS, +	DCB_CMD_SNUMTCS, + +	DCB_CMD_PFC_GSTATE, +	DCB_CMD_PFC_SSTATE, + +	DCB_CMD_BCN_GCFG, +	DCB_CMD_BCN_SCFG, + +	DCB_CMD_GAPP, +	DCB_CMD_SAPP, + +	DCB_CMD_IEEE_SET, +	DCB_CMD_IEEE_GET, + +	DCB_CMD_GDCBX, +	DCB_CMD_SDCBX, + +	DCB_CMD_GFEATCFG, +	DCB_CMD_SFEATCFG, + +	DCB_CMD_CEE_GET, +	DCB_CMD_IEEE_DEL, + +	__DCB_CMD_ENUM_MAX, +	DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1, +}; + +/** + * enum dcbnl_attrs - DCB top-level netlink attributes + * + * @DCB_ATTR_UNDEFINED: unspecified attribute to catch errors + * @DCB_ATTR_IFNAME: interface name of the underlying device (NLA_STRING) + * @DCB_ATTR_STATE: enable state of DCB in the device (NLA_U8) + * @DCB_ATTR_PFC_STATE: enable state of PFC in the device (NLA_U8) + * @DCB_ATTR_PFC_CFG: priority flow control configuration (NLA_NESTED) + * @DCB_ATTR_NUM_TC: number of traffic classes supported in the device (NLA_U8) + * @DCB_ATTR_PG_CFG: priority group configuration (NLA_NESTED) + * @DCB_ATTR_SET_ALL: bool to commit changes to hardware or not (NLA_U8) + * @DCB_ATTR_PERM_HWADDR: MAC address of the physical device (NLA_NESTED) + * @DCB_ATTR_CAP: DCB capabilities of the device (NLA_NESTED) + * @DCB_ATTR_NUMTCS: number of traffic classes supported (NLA_NESTED) + * @DCB_ATTR_BCN: backward congestion notification configuration (NLA_NESTED) + * @DCB_ATTR_IEEE: IEEE 802.1Qaz supported attributes (NLA_NESTED) + * @DCB_ATTR_DCBX: DCBX engine configuration in the device (NLA_U8) + * @DCB_ATTR_FEATCFG: DCBX features flags (NLA_NESTED) + * @DCB_ATTR_CEE: CEE std supported attributes (NLA_NESTED) + */ +enum dcbnl_attrs { +	DCB_ATTR_UNDEFINED, + +	DCB_ATTR_IFNAME, +	DCB_ATTR_STATE, +	DCB_ATTR_PFC_STATE, +	DCB_ATTR_PFC_CFG, +	DCB_ATTR_NUM_TC, +	DCB_ATTR_PG_CFG, +	DCB_ATTR_SET_ALL, +	DCB_ATTR_PERM_HWADDR, +	DCB_ATTR_CAP, +	DCB_ATTR_NUMTCS, +	DCB_ATTR_BCN, +	DCB_ATTR_APP, + +	/* IEEE std attributes */ +	DCB_ATTR_IEEE, + +	DCB_ATTR_DCBX, +	DCB_ATTR_FEATCFG, + +	/* CEE nested attributes */ +	DCB_ATTR_CEE, + +	__DCB_ATTR_ENUM_MAX, +	DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1, +}; + +/** + * enum ieee_attrs - IEEE 802.1Qaz get/set attributes + * + * @DCB_ATTR_IEEE_UNSPEC: unspecified + * @DCB_ATTR_IEEE_ETS: negotiated ETS configuration + * @DCB_ATTR_IEEE_PFC: negotiated PFC configuration + * @DCB_ATTR_IEEE_APP_TABLE: negotiated APP configuration + * @DCB_ATTR_IEEE_PEER_ETS: peer ETS configuration - get only + * @DCB_ATTR_IEEE_PEER_PFC: peer PFC configuration - get only + * @DCB_ATTR_IEEE_PEER_APP: peer APP tlv - get only + */ +enum ieee_attrs { +	DCB_ATTR_IEEE_UNSPEC, +	DCB_ATTR_IEEE_ETS, +	DCB_ATTR_IEEE_PFC, +	DCB_ATTR_IEEE_APP_TABLE, +	DCB_ATTR_IEEE_PEER_ETS, +	DCB_ATTR_IEEE_PEER_PFC, +	DCB_ATTR_IEEE_PEER_APP, +	DCB_ATTR_IEEE_MAXRATE, +	__DCB_ATTR_IEEE_MAX +}; +#define DCB_ATTR_IEEE_MAX (__DCB_ATTR_IEEE_MAX - 1) + +enum ieee_attrs_app { +	DCB_ATTR_IEEE_APP_UNSPEC, +	DCB_ATTR_IEEE_APP, +	__DCB_ATTR_IEEE_APP_MAX +}; +#define DCB_ATTR_IEEE_APP_MAX (__DCB_ATTR_IEEE_APP_MAX - 1) + +/** + * enum cee_attrs - CEE DCBX get attributes. + * + * @DCB_ATTR_CEE_UNSPEC: unspecified + * @DCB_ATTR_CEE_PEER_PG: peer PG configuration - get only + * @DCB_ATTR_CEE_PEER_PFC: peer PFC configuration - get only + * @DCB_ATTR_CEE_PEER_APP_TABLE: peer APP tlv - get only + * @DCB_ATTR_CEE_TX_PG: TX PG configuration (DCB_CMD_PGTX_GCFG) + * @DCB_ATTR_CEE_RX_PG: RX PG configuration (DCB_CMD_PGRX_GCFG) + * @DCB_ATTR_CEE_PFC: PFC configuration (DCB_CMD_PFC_GCFG) + * @DCB_ATTR_CEE_APP_TABLE: APP configuration (multi DCB_CMD_GAPP) + * @DCB_ATTR_CEE_FEAT: DCBX features flags (DCB_CMD_GFEATCFG) + * + * An aggregated collection of the cee std negotiated parameters. + */ +enum cee_attrs { +	DCB_ATTR_CEE_UNSPEC, +	DCB_ATTR_CEE_PEER_PG, +	DCB_ATTR_CEE_PEER_PFC, +	DCB_ATTR_CEE_PEER_APP_TABLE, +	DCB_ATTR_CEE_TX_PG, +	DCB_ATTR_CEE_RX_PG, +	DCB_ATTR_CEE_PFC, +	DCB_ATTR_CEE_APP_TABLE, +	DCB_ATTR_CEE_FEAT, +	__DCB_ATTR_CEE_MAX +}; +#define DCB_ATTR_CEE_MAX (__DCB_ATTR_CEE_MAX - 1) + +enum peer_app_attr { +	DCB_ATTR_CEE_PEER_APP_UNSPEC, +	DCB_ATTR_CEE_PEER_APP_INFO, +	DCB_ATTR_CEE_PEER_APP, +	__DCB_ATTR_CEE_PEER_APP_MAX +}; +#define DCB_ATTR_CEE_PEER_APP_MAX (__DCB_ATTR_CEE_PEER_APP_MAX - 1) + +enum cee_attrs_app { +	DCB_ATTR_CEE_APP_UNSPEC, +	DCB_ATTR_CEE_APP, +	__DCB_ATTR_CEE_APP_MAX +}; +#define DCB_ATTR_CEE_APP_MAX (__DCB_ATTR_CEE_APP_MAX - 1) + +/** + * enum dcbnl_pfc_attrs - DCB Priority Flow Control user priority nested attrs + * + * @DCB_PFC_UP_ATTR_UNDEFINED: unspecified attribute to catch errors + * @DCB_PFC_UP_ATTR_0: Priority Flow Control value for User Priority 0 (NLA_U8) + * @DCB_PFC_UP_ATTR_1: Priority Flow Control value for User Priority 1 (NLA_U8) + * @DCB_PFC_UP_ATTR_2: Priority Flow Control value for User Priority 2 (NLA_U8) + * @DCB_PFC_UP_ATTR_3: Priority Flow Control value for User Priority 3 (NLA_U8) + * @DCB_PFC_UP_ATTR_4: Priority Flow Control value for User Priority 4 (NLA_U8) + * @DCB_PFC_UP_ATTR_5: Priority Flow Control value for User Priority 5 (NLA_U8) + * @DCB_PFC_UP_ATTR_6: Priority Flow Control value for User Priority 6 (NLA_U8) + * @DCB_PFC_UP_ATTR_7: Priority Flow Control value for User Priority 7 (NLA_U8) + * @DCB_PFC_UP_ATTR_MAX: highest attribute number currently defined + * @DCB_PFC_UP_ATTR_ALL: apply to all priority flow control attrs (NLA_FLAG) + * + */ +enum dcbnl_pfc_up_attrs { +	DCB_PFC_UP_ATTR_UNDEFINED, + +	DCB_PFC_UP_ATTR_0, +	DCB_PFC_UP_ATTR_1, +	DCB_PFC_UP_ATTR_2, +	DCB_PFC_UP_ATTR_3, +	DCB_PFC_UP_ATTR_4, +	DCB_PFC_UP_ATTR_5, +	DCB_PFC_UP_ATTR_6, +	DCB_PFC_UP_ATTR_7, +	DCB_PFC_UP_ATTR_ALL, + +	__DCB_PFC_UP_ATTR_ENUM_MAX, +	DCB_PFC_UP_ATTR_MAX = __DCB_PFC_UP_ATTR_ENUM_MAX - 1, +}; + +/** + * enum dcbnl_pg_attrs - DCB Priority Group attributes + * + * @DCB_PG_ATTR_UNDEFINED: unspecified attribute to catch errors + * @DCB_PG_ATTR_TC_0: Priority Group Traffic Class 0 configuration (NLA_NESTED) + * @DCB_PG_ATTR_TC_1: Priority Group Traffic Class 1 configuration (NLA_NESTED) + * @DCB_PG_ATTR_TC_2: Priority Group Traffic Class 2 configuration (NLA_NESTED) + * @DCB_PG_ATTR_TC_3: Priority Group Traffic Class 3 configuration (NLA_NESTED) + * @DCB_PG_ATTR_TC_4: Priority Group Traffic Class 4 configuration (NLA_NESTED) + * @DCB_PG_ATTR_TC_5: Priority Group Traffic Class 5 configuration (NLA_NESTED) + * @DCB_PG_ATTR_TC_6: Priority Group Traffic Class 6 configuration (NLA_NESTED) + * @DCB_PG_ATTR_TC_7: Priority Group Traffic Class 7 configuration (NLA_NESTED) + * @DCB_PG_ATTR_TC_MAX: highest attribute number currently defined + * @DCB_PG_ATTR_TC_ALL: apply to all traffic classes (NLA_NESTED) + * @DCB_PG_ATTR_BW_ID_0: Percent of link bandwidth for Priority Group 0 (NLA_U8) + * @DCB_PG_ATTR_BW_ID_1: Percent of link bandwidth for Priority Group 1 (NLA_U8) + * @DCB_PG_ATTR_BW_ID_2: Percent of link bandwidth for Priority Group 2 (NLA_U8) + * @DCB_PG_ATTR_BW_ID_3: Percent of link bandwidth for Priority Group 3 (NLA_U8) + * @DCB_PG_ATTR_BW_ID_4: Percent of link bandwidth for Priority Group 4 (NLA_U8) + * @DCB_PG_ATTR_BW_ID_5: Percent of link bandwidth for Priority Group 5 (NLA_U8) + * @DCB_PG_ATTR_BW_ID_6: Percent of link bandwidth for Priority Group 6 (NLA_U8) + * @DCB_PG_ATTR_BW_ID_7: Percent of link bandwidth for Priority Group 7 (NLA_U8) + * @DCB_PG_ATTR_BW_ID_MAX: highest attribute number currently defined + * @DCB_PG_ATTR_BW_ID_ALL: apply to all priority groups (NLA_FLAG) + * + */ +enum dcbnl_pg_attrs { +	DCB_PG_ATTR_UNDEFINED, + +	DCB_PG_ATTR_TC_0, +	DCB_PG_ATTR_TC_1, +	DCB_PG_ATTR_TC_2, +	DCB_PG_ATTR_TC_3, +	DCB_PG_ATTR_TC_4, +	DCB_PG_ATTR_TC_5, +	DCB_PG_ATTR_TC_6, +	DCB_PG_ATTR_TC_7, +	DCB_PG_ATTR_TC_MAX, +	DCB_PG_ATTR_TC_ALL, + +	DCB_PG_ATTR_BW_ID_0, +	DCB_PG_ATTR_BW_ID_1, +	DCB_PG_ATTR_BW_ID_2, +	DCB_PG_ATTR_BW_ID_3, +	DCB_PG_ATTR_BW_ID_4, +	DCB_PG_ATTR_BW_ID_5, +	DCB_PG_ATTR_BW_ID_6, +	DCB_PG_ATTR_BW_ID_7, +	DCB_PG_ATTR_BW_ID_MAX, +	DCB_PG_ATTR_BW_ID_ALL, + +	__DCB_PG_ATTR_ENUM_MAX, +	DCB_PG_ATTR_MAX = __DCB_PG_ATTR_ENUM_MAX - 1, +}; + +/** + * enum dcbnl_tc_attrs - DCB Traffic Class attributes + * + * @DCB_TC_ATTR_PARAM_UNDEFINED: unspecified attribute to catch errors + * @DCB_TC_ATTR_PARAM_PGID: (NLA_U8) Priority group the traffic class belongs to + *                          Valid values are:  0-7 + * @DCB_TC_ATTR_PARAM_UP_MAPPING: (NLA_U8) Traffic class to user priority map + *                                Some devices may not support changing the + *                                user priority map of a TC. + * @DCB_TC_ATTR_PARAM_STRICT_PRIO: (NLA_U8) Strict priority setting + *                                 0 - none + *                                 1 - group strict + *                                 2 - link strict + * @DCB_TC_ATTR_PARAM_BW_PCT: optional - (NLA_U8) If supported by the device and + *                            not configured to use link strict priority, + *                            this is the percentage of bandwidth of the + *                            priority group this traffic class belongs to + * @DCB_TC_ATTR_PARAM_ALL: (NLA_FLAG) all traffic class parameters + * + */ +enum dcbnl_tc_attrs { +	DCB_TC_ATTR_PARAM_UNDEFINED, + +	DCB_TC_ATTR_PARAM_PGID, +	DCB_TC_ATTR_PARAM_UP_MAPPING, +	DCB_TC_ATTR_PARAM_STRICT_PRIO, +	DCB_TC_ATTR_PARAM_BW_PCT, +	DCB_TC_ATTR_PARAM_ALL, + +	__DCB_TC_ATTR_PARAM_ENUM_MAX, +	DCB_TC_ATTR_PARAM_MAX = __DCB_TC_ATTR_PARAM_ENUM_MAX - 1, +}; + +/** + * enum dcbnl_cap_attrs - DCB Capability attributes + * + * @DCB_CAP_ATTR_UNDEFINED: unspecified attribute to catch errors + * @DCB_CAP_ATTR_ALL: (NLA_FLAG) all capability parameters + * @DCB_CAP_ATTR_PG: (NLA_U8) device supports Priority Groups + * @DCB_CAP_ATTR_PFC: (NLA_U8) device supports Priority Flow Control + * @DCB_CAP_ATTR_UP2TC: (NLA_U8) device supports user priority to + *                               traffic class mapping + * @DCB_CAP_ATTR_PG_TCS: (NLA_U8) bitmap where each bit represents a + *                                number of traffic classes the device + *                                can be configured to use for Priority Groups + * @DCB_CAP_ATTR_PFC_TCS: (NLA_U8) bitmap where each bit represents a + *                                 number of traffic classes the device can be + *                                 configured to use for Priority Flow Control + * @DCB_CAP_ATTR_GSP: (NLA_U8) device supports group strict priority + * @DCB_CAP_ATTR_BCN: (NLA_U8) device supports Backwards Congestion + *                             Notification + * @DCB_CAP_ATTR_DCBX: (NLA_U8) device supports DCBX engine + * + */ +enum dcbnl_cap_attrs { +	DCB_CAP_ATTR_UNDEFINED, +	DCB_CAP_ATTR_ALL, +	DCB_CAP_ATTR_PG, +	DCB_CAP_ATTR_PFC, +	DCB_CAP_ATTR_UP2TC, +	DCB_CAP_ATTR_PG_TCS, +	DCB_CAP_ATTR_PFC_TCS, +	DCB_CAP_ATTR_GSP, +	DCB_CAP_ATTR_BCN, +	DCB_CAP_ATTR_DCBX, + +	__DCB_CAP_ATTR_ENUM_MAX, +	DCB_CAP_ATTR_MAX = __DCB_CAP_ATTR_ENUM_MAX - 1, +}; + +/** + * DCBX capability flags + * + * @DCB_CAP_DCBX_HOST: DCBX negotiation is performed by the host LLDP agent. + *                     'set' routines are used to configure the device with + *                     the negotiated parameters + * + * @DCB_CAP_DCBX_LLD_MANAGED: DCBX negotiation is not performed in the host but + *                            by another entity + *                            'get' routines are used to retrieve the + *                            negotiated parameters + *                            'set' routines can be used to set the initial + *                            negotiation configuration + * + * @DCB_CAP_DCBX_VER_CEE: for a non-host DCBX engine, indicates the engine + *                        supports the CEE protocol flavor + * + * @DCB_CAP_DCBX_VER_IEEE: for a non-host DCBX engine, indicates the engine + *                         supports the IEEE protocol flavor + * + * @DCB_CAP_DCBX_STATIC: for a non-host DCBX engine, indicates the engine + *                       supports static configuration (i.e no actual + *                       negotiation is performed negotiated parameters equal + *                       the initial configuration) + * + */ +#define DCB_CAP_DCBX_HOST		0x01 +#define DCB_CAP_DCBX_LLD_MANAGED	0x02 +#define DCB_CAP_DCBX_VER_CEE		0x04 +#define DCB_CAP_DCBX_VER_IEEE		0x08 +#define DCB_CAP_DCBX_STATIC		0x10 + +/** + * enum dcbnl_numtcs_attrs - number of traffic classes + * + * @DCB_NUMTCS_ATTR_UNDEFINED: unspecified attribute to catch errors + * @DCB_NUMTCS_ATTR_ALL: (NLA_FLAG) all traffic class attributes + * @DCB_NUMTCS_ATTR_PG: (NLA_U8) number of traffic classes used for + *                               priority groups + * @DCB_NUMTCS_ATTR_PFC: (NLA_U8) number of traffic classes which can + *                                support priority flow control + */ +enum dcbnl_numtcs_attrs { +	DCB_NUMTCS_ATTR_UNDEFINED, +	DCB_NUMTCS_ATTR_ALL, +	DCB_NUMTCS_ATTR_PG, +	DCB_NUMTCS_ATTR_PFC, + +	__DCB_NUMTCS_ATTR_ENUM_MAX, +	DCB_NUMTCS_ATTR_MAX = __DCB_NUMTCS_ATTR_ENUM_MAX - 1, +}; + +enum dcbnl_bcn_attrs{ +	DCB_BCN_ATTR_UNDEFINED = 0, + +	DCB_BCN_ATTR_RP_0, +	DCB_BCN_ATTR_RP_1, +	DCB_BCN_ATTR_RP_2, +	DCB_BCN_ATTR_RP_3, +	DCB_BCN_ATTR_RP_4, +	DCB_BCN_ATTR_RP_5, +	DCB_BCN_ATTR_RP_6, +	DCB_BCN_ATTR_RP_7, +	DCB_BCN_ATTR_RP_ALL, + +	DCB_BCN_ATTR_BCNA_0, +	DCB_BCN_ATTR_BCNA_1, +	DCB_BCN_ATTR_ALPHA, +	DCB_BCN_ATTR_BETA, +	DCB_BCN_ATTR_GD, +	DCB_BCN_ATTR_GI, +	DCB_BCN_ATTR_TMAX, +	DCB_BCN_ATTR_TD, +	DCB_BCN_ATTR_RMIN, +	DCB_BCN_ATTR_W, +	DCB_BCN_ATTR_RD, +	DCB_BCN_ATTR_RU, +	DCB_BCN_ATTR_WRTT, +	DCB_BCN_ATTR_RI, +	DCB_BCN_ATTR_C, +	DCB_BCN_ATTR_ALL, + +	__DCB_BCN_ATTR_ENUM_MAX, +	DCB_BCN_ATTR_MAX = __DCB_BCN_ATTR_ENUM_MAX - 1, +}; + +/** + * enum dcb_general_attr_values - general DCB attribute values + * + * @DCB_ATTR_UNDEFINED: value used to indicate an attribute is not supported + * + */ +enum dcb_general_attr_values { +	DCB_ATTR_VALUE_UNDEFINED = 0xff +}; + +#define DCB_APP_IDTYPE_ETHTYPE	0x00 +#define DCB_APP_IDTYPE_PORTNUM	0x01 +enum dcbnl_app_attrs { +	DCB_APP_ATTR_UNDEFINED, + +	DCB_APP_ATTR_IDTYPE, +	DCB_APP_ATTR_ID, +	DCB_APP_ATTR_PRIORITY, + +	__DCB_APP_ATTR_ENUM_MAX, +	DCB_APP_ATTR_MAX = __DCB_APP_ATTR_ENUM_MAX - 1, +}; + +/** + * enum dcbnl_featcfg_attrs - features conifiguration flags + * + * @DCB_FEATCFG_ATTR_UNDEFINED: unspecified attribute to catch errors + * @DCB_FEATCFG_ATTR_ALL: (NLA_FLAG) all features configuration attributes + * @DCB_FEATCFG_ATTR_PG: (NLA_U8) configuration flags for priority groups + * @DCB_FEATCFG_ATTR_PFC: (NLA_U8) configuration flags for priority + *                                 flow control + * @DCB_FEATCFG_ATTR_APP: (NLA_U8) configuration flags for application TLV + * + */ +#define DCB_FEATCFG_ERROR	0x01	/* error in feature resolution */ +#define DCB_FEATCFG_ENABLE	0x02	/* enable feature */ +#define DCB_FEATCFG_WILLING	0x04	/* feature is willing */ +#define DCB_FEATCFG_ADVERTISE	0x08	/* advertise feature */ +enum dcbnl_featcfg_attrs { +	DCB_FEATCFG_ATTR_UNDEFINED, +	DCB_FEATCFG_ATTR_ALL, +	DCB_FEATCFG_ATTR_PG, +	DCB_FEATCFG_ATTR_PFC, +	DCB_FEATCFG_ATTR_APP, + +	__DCB_FEATCFG_ATTR_ENUM_MAX, +	DCB_FEATCFG_ATTR_MAX = __DCB_FEATCFG_ATTR_ENUM_MAX - 1, +}; + +#endif /* __LINUX_DCBNL_H__ */ diff --git a/include/uapi/linux/dccp.h b/include/uapi/linux/dccp.h new file mode 100644 index 00000000000..52a9cd7307e --- /dev/null +++ b/include/uapi/linux/dccp.h @@ -0,0 +1,237 @@ +#ifndef _UAPI_LINUX_DCCP_H +#define _UAPI_LINUX_DCCP_H + +#include <linux/types.h> +#include <asm/byteorder.h> + +/** + * struct dccp_hdr - generic part of DCCP packet header + * + * @dccph_sport - Relevant port on the endpoint that sent this packet + * @dccph_dport - Relevant port on the other endpoint + * @dccph_doff - Data Offset from the start of the DCCP header, in 32-bit words + * @dccph_ccval - Used by the HC-Sender CCID + * @dccph_cscov - Parts of the packet that are covered by the Checksum field + * @dccph_checksum - Internet checksum, depends on dccph_cscov + * @dccph_x - 0 = 24 bit sequence number, 1 = 48 + * @dccph_type - packet type, see DCCP_PKT_ prefixed macros + * @dccph_seq - sequence number high or low order 24 bits, depends on dccph_x + */ +struct dccp_hdr { +	__be16	dccph_sport, +		dccph_dport; +	__u8	dccph_doff; +#if defined(__LITTLE_ENDIAN_BITFIELD) +	__u8	dccph_cscov:4, +		dccph_ccval:4; +#elif defined(__BIG_ENDIAN_BITFIELD) +	__u8	dccph_ccval:4, +		dccph_cscov:4; +#else +#error  "Adjust your <asm/byteorder.h> defines" +#endif +	__sum16	dccph_checksum; +#if defined(__LITTLE_ENDIAN_BITFIELD) +	__u8	dccph_x:1, +		dccph_type:4, +		dccph_reserved:3; +#elif defined(__BIG_ENDIAN_BITFIELD) +	__u8	dccph_reserved:3, +		dccph_type:4, +		dccph_x:1; +#else +#error  "Adjust your <asm/byteorder.h> defines" +#endif +	__u8	dccph_seq2; +	__be16	dccph_seq; +}; + +/** + * struct dccp_hdr_ext - the low bits of a 48 bit seq packet + * + * @dccph_seq_low - low 24 bits of a 48 bit seq packet + */ +struct dccp_hdr_ext { +	__be32	dccph_seq_low; +}; + +/** + * struct dccp_hdr_request - Connection initiation request header + * + * @dccph_req_service - Service to which the client app wants to connect + */ +struct dccp_hdr_request { +	__be32	dccph_req_service; +}; +/** + * struct dccp_hdr_ack_bits - acknowledgment bits common to most packets + * + * @dccph_resp_ack_nr_high - 48 bit ack number high order bits, contains GSR + * @dccph_resp_ack_nr_low - 48 bit ack number low order bits, contains GSR + */ +struct dccp_hdr_ack_bits { +	__be16	dccph_reserved1; +	__be16	dccph_ack_nr_high; +	__be32	dccph_ack_nr_low; +}; +/** + * struct dccp_hdr_response - Connection initiation response header + * + * @dccph_resp_ack - 48 bit Acknowledgment Number Subheader (5.3) + * @dccph_resp_service - Echoes the Service Code on a received DCCP-Request + */ +struct dccp_hdr_response { +	struct dccp_hdr_ack_bits	dccph_resp_ack; +	__be32				dccph_resp_service; +}; + +/** + * struct dccp_hdr_reset - Unconditionally shut down a connection + * + * @dccph_reset_ack - 48 bit Acknowledgment Number Subheader (5.6) + * @dccph_reset_code - one of %dccp_reset_codes + * @dccph_reset_data - the Data 1 ... Data 3 fields from 5.6 + */ +struct dccp_hdr_reset { +	struct dccp_hdr_ack_bits	dccph_reset_ack; +	__u8				dccph_reset_code, +					dccph_reset_data[3]; +}; + +enum dccp_pkt_type { +	DCCP_PKT_REQUEST = 0, +	DCCP_PKT_RESPONSE, +	DCCP_PKT_DATA, +	DCCP_PKT_ACK, +	DCCP_PKT_DATAACK, +	DCCP_PKT_CLOSEREQ, +	DCCP_PKT_CLOSE, +	DCCP_PKT_RESET, +	DCCP_PKT_SYNC, +	DCCP_PKT_SYNCACK, +	DCCP_PKT_INVALID, +}; + +#define DCCP_NR_PKT_TYPES DCCP_PKT_INVALID + +static inline unsigned int dccp_packet_hdr_len(const __u8 type) +{ +	if (type == DCCP_PKT_DATA) +		return 0; +	if (type == DCCP_PKT_DATAACK	|| +	    type == DCCP_PKT_ACK	|| +	    type == DCCP_PKT_SYNC	|| +	    type == DCCP_PKT_SYNCACK	|| +	    type == DCCP_PKT_CLOSE	|| +	    type == DCCP_PKT_CLOSEREQ) +		return sizeof(struct dccp_hdr_ack_bits); +	if (type == DCCP_PKT_REQUEST) +		return sizeof(struct dccp_hdr_request); +	if (type == DCCP_PKT_RESPONSE) +		return sizeof(struct dccp_hdr_response); +	return sizeof(struct dccp_hdr_reset); +} +enum dccp_reset_codes { +	DCCP_RESET_CODE_UNSPECIFIED = 0, +	DCCP_RESET_CODE_CLOSED, +	DCCP_RESET_CODE_ABORTED, +	DCCP_RESET_CODE_NO_CONNECTION, +	DCCP_RESET_CODE_PACKET_ERROR, +	DCCP_RESET_CODE_OPTION_ERROR, +	DCCP_RESET_CODE_MANDATORY_ERROR, +	DCCP_RESET_CODE_CONNECTION_REFUSED, +	DCCP_RESET_CODE_BAD_SERVICE_CODE, +	DCCP_RESET_CODE_TOO_BUSY, +	DCCP_RESET_CODE_BAD_INIT_COOKIE, +	DCCP_RESET_CODE_AGGRESSION_PENALTY, + +	DCCP_MAX_RESET_CODES		/* Leave at the end!  */ +}; + +/* DCCP options */ +enum { +	DCCPO_PADDING = 0, +	DCCPO_MANDATORY = 1, +	DCCPO_MIN_RESERVED = 3, +	DCCPO_MAX_RESERVED = 31, +	DCCPO_CHANGE_L = 32, +	DCCPO_CONFIRM_L = 33, +	DCCPO_CHANGE_R = 34, +	DCCPO_CONFIRM_R = 35, +	DCCPO_NDP_COUNT = 37, +	DCCPO_ACK_VECTOR_0 = 38, +	DCCPO_ACK_VECTOR_1 = 39, +	DCCPO_TIMESTAMP = 41, +	DCCPO_TIMESTAMP_ECHO = 42, +	DCCPO_ELAPSED_TIME = 43, +	DCCPO_MAX = 45, +	DCCPO_MIN_RX_CCID_SPECIFIC = 128,	/* from sender to receiver */ +	DCCPO_MAX_RX_CCID_SPECIFIC = 191, +	DCCPO_MIN_TX_CCID_SPECIFIC = 192,	/* from receiver to sender */ +	DCCPO_MAX_TX_CCID_SPECIFIC = 255, +}; +/* maximum size of a single TLV-encoded DCCP option (sans type/len bytes) */ +#define DCCP_SINGLE_OPT_MAXLEN	253 + +/* DCCP CCIDS */ +enum { +	DCCPC_CCID2 = 2, +	DCCPC_CCID3 = 3, +}; + +/* DCCP features (RFC 4340 section 6.4) */ +enum dccp_feature_numbers { +	DCCPF_RESERVED = 0, +	DCCPF_CCID = 1, +	DCCPF_SHORT_SEQNOS = 2, +	DCCPF_SEQUENCE_WINDOW = 3, +	DCCPF_ECN_INCAPABLE = 4, +	DCCPF_ACK_RATIO = 5, +	DCCPF_SEND_ACK_VECTOR = 6, +	DCCPF_SEND_NDP_COUNT = 7, +	DCCPF_MIN_CSUM_COVER = 8, +	DCCPF_DATA_CHECKSUM = 9, +	/* 10-127 reserved */ +	DCCPF_MIN_CCID_SPECIFIC = 128, +	DCCPF_SEND_LEV_RATE = 192,	/* RFC 4342, sec. 8.4 */ +	DCCPF_MAX_CCID_SPECIFIC = 255, +}; + +/* DCCP socket control message types for cmsg */ +enum dccp_cmsg_type { +	DCCP_SCM_PRIORITY = 1, +	DCCP_SCM_QPOLICY_MAX = 0xFFFF, +	/* ^-- Up to here reserved exclusively for qpolicy parameters */ +	DCCP_SCM_MAX +}; + +/* DCCP priorities for outgoing/queued packets */ +enum dccp_packet_dequeueing_policy { +	DCCPQ_POLICY_SIMPLE, +	DCCPQ_POLICY_PRIO, +	DCCPQ_POLICY_MAX +}; + +/* DCCP socket options */ +#define DCCP_SOCKOPT_PACKET_SIZE	1 /* XXX deprecated, without effect */ +#define DCCP_SOCKOPT_SERVICE		2 +#define DCCP_SOCKOPT_CHANGE_L		3 +#define DCCP_SOCKOPT_CHANGE_R		4 +#define DCCP_SOCKOPT_GET_CUR_MPS	5 +#define DCCP_SOCKOPT_SERVER_TIMEWAIT	6 +#define DCCP_SOCKOPT_SEND_CSCOV		10 +#define DCCP_SOCKOPT_RECV_CSCOV		11 +#define DCCP_SOCKOPT_AVAILABLE_CCIDS	12 +#define DCCP_SOCKOPT_CCID		13 +#define DCCP_SOCKOPT_TX_CCID		14 +#define DCCP_SOCKOPT_RX_CCID		15 +#define DCCP_SOCKOPT_QPOLICY_ID		16 +#define DCCP_SOCKOPT_QPOLICY_TXQLEN	17 +#define DCCP_SOCKOPT_CCID_RX_INFO	128 +#define DCCP_SOCKOPT_CCID_TX_INFO	192 + +/* maximum number of services provided on the same listening port */ +#define DCCP_SERVICE_LIST_MAX_LEN      32 + + +#endif /* _UAPI_LINUX_DCCP_H */ diff --git a/include/uapi/linux/dlm.h b/include/uapi/linux/dlm.h new file mode 100644 index 00000000000..1f73cc06168 --- /dev/null +++ b/include/uapi/linux/dlm.h @@ -0,0 +1,75 @@ +/****************************************************************************** +******************************************************************************* +** +**  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved. +**  Copyright (C) 2004-2011 Red Hat, Inc.  All rights reserved. +** +**  This copyrighted material is made available to anyone wishing to use, +**  modify, copy, or redistribute it subject to the terms and conditions +**  of the GNU General Public License v.2. +** +******************************************************************************* +******************************************************************************/ + +#ifndef _UAPI__DLM_DOT_H__ +#define _UAPI__DLM_DOT_H__ + +/* + * Interface to Distributed Lock Manager (DLM) + * routines and structures to use DLM lockspaces + */ + +/* Lock levels and flags are here */ +#include <linux/dlmconstants.h> +#include <linux/types.h> + +typedef void dlm_lockspace_t; + +/* + * Lock status block + * + * Use this structure to specify the contents of the lock value block.  For a + * conversion request, this structure is used to specify the lock ID of the + * lock.  DLM writes the status of the lock request and the lock ID assigned + * to the request in the lock status block. + * + * sb_lkid: the returned lock ID.  It is set on new (non-conversion) requests. + * It is available when dlm_lock returns. + * + * sb_lvbptr: saves or returns the contents of the lock's LVB according to rules + * shown for the DLM_LKF_VALBLK flag. + * + * sb_flags: DLM_SBF_DEMOTED is returned if in the process of promoting a lock, + * it was first demoted to NL to avoid conversion deadlock. + * DLM_SBF_VALNOTVALID is returned if the resource's LVB is marked invalid. + * + * sb_status: the returned status of the lock request set prior to AST + * execution.  Possible return values: + * + * 0 if lock request was successful + * -EAGAIN if request would block and is flagged DLM_LKF_NOQUEUE + * -DLM_EUNLOCK if unlock request was successful + * -DLM_ECANCEL if a cancel completed successfully + * -EDEADLK if a deadlock was detected + * -ETIMEDOUT if the lock request was canceled due to a timeout + */ + +#define DLM_SBF_DEMOTED		0x01 +#define DLM_SBF_VALNOTVALID	0x02 +#define DLM_SBF_ALTMODE		0x04 + +struct dlm_lksb { +	int 	 sb_status; +	__u32	 sb_lkid; +	char 	 sb_flags; +	char *	 sb_lvbptr; +}; + +/* dlm_new_lockspace() flags */ + +#define DLM_LSFL_TIMEWARN	0x00000002 +#define DLM_LSFL_FS     	0x00000004 +#define DLM_LSFL_NEWEXCL     	0x00000008 + + +#endif /* _UAPI__DLM_DOT_H__ */ diff --git a/include/uapi/linux/dlm_device.h b/include/uapi/linux/dlm_device.h new file mode 100644 index 00000000000..3060783c419 --- /dev/null +++ b/include/uapi/linux/dlm_device.h @@ -0,0 +1,108 @@ +/****************************************************************************** +******************************************************************************* +** +**  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved. +**  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved. +** +**  This copyrighted material is made available to anyone wishing to use, +**  modify, copy, or redistribute it subject to the terms and conditions +**  of the GNU General Public License v.2. +** +******************************************************************************* +******************************************************************************/ + +#ifndef _LINUX_DLM_DEVICE_H +#define _LINUX_DLM_DEVICE_H + +/* This is the device interface for dlm, most users will use a library + * interface. + */ + +#include <linux/dlm.h> +#include <linux/types.h> + +#define DLM_USER_LVB_LEN	32 + +/* Version of the device interface */ +#define DLM_DEVICE_VERSION_MAJOR 6 +#define DLM_DEVICE_VERSION_MINOR 0 +#define DLM_DEVICE_VERSION_PATCH 1 + +/* struct passed to the lock write */ +struct dlm_lock_params { +	__u8 mode; +	__u8 namelen; +	__u16 unused; +	__u32 flags; +	__u32 lkid; +	__u32 parent; +	__u64 xid; +	__u64 timeout; +	void __user *castparam; +	void __user *castaddr; +	void __user *bastparam; +	void __user *bastaddr; +	struct dlm_lksb __user *lksb; +	char lvb[DLM_USER_LVB_LEN]; +	char name[0]; +}; + +struct dlm_lspace_params { +	__u32 flags; +	__u32 minor; +	char name[0]; +}; + +struct dlm_purge_params { +	__u32 nodeid; +	__u32 pid; +}; + +struct dlm_write_request { +	__u32 version[3]; +	__u8 cmd; +	__u8 is64bit; +	__u8 unused[2]; + +	union  { +		struct dlm_lock_params   lock; +		struct dlm_lspace_params lspace; +		struct dlm_purge_params  purge; +	} i; +}; + +struct dlm_device_version { +	__u32 version[3]; +}; + +/* struct read from the "device" fd, +   consists mainly of userspace pointers for the library to use */ + +struct dlm_lock_result { +	__u32 version[3]; +	__u32 length; +	void __user * user_astaddr; +	void __user * user_astparam; +	struct dlm_lksb __user * user_lksb; +	struct dlm_lksb lksb; +	__u8 bast_mode; +	__u8 unused[3]; +	/* Offsets may be zero if no data is present */ +	__u32 lvb_offset; +}; + +/* Commands passed to the device */ +#define DLM_USER_LOCK         1 +#define DLM_USER_UNLOCK       2 +#define DLM_USER_QUERY        3 +#define DLM_USER_CREATE_LOCKSPACE  4 +#define DLM_USER_REMOVE_LOCKSPACE  5 +#define DLM_USER_PURGE        6 +#define DLM_USER_DEADLOCK     7 + +/* Lockspace flags */ +#define DLM_USER_LSFLG_AUTOFREE   1 +#define DLM_USER_LSFLG_FORCEFREE  2 + +#endif + diff --git a/include/uapi/linux/dlm_netlink.h b/include/uapi/linux/dlm_netlink.h new file mode 100644 index 00000000000..647c8ef2722 --- /dev/null +++ b/include/uapi/linux/dlm_netlink.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2007 Red Hat, Inc.  All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU General Public License v.2. + */ + +#ifndef _DLM_NETLINK_H +#define _DLM_NETLINK_H + +#include <linux/types.h> + +enum { +	DLM_STATUS_WAITING = 1, +	DLM_STATUS_GRANTED = 2, +	DLM_STATUS_CONVERT = 3, +}; + +#define DLM_LOCK_DATA_VERSION 1 + +struct dlm_lock_data { +	__u16 version; +	__u32 lockspace_id; +	int nodeid; +	int ownpid; +	__u32 id; +	__u32 remid; +	__u64 xid; +	__s8 status; +	__s8 grmode; +	__s8 rqmode; +	unsigned long timestamp; +	int resource_namelen; +	char resource_name[DLM_RESNAME_MAXLEN]; +}; + +enum { +	DLM_CMD_UNSPEC = 0, +	DLM_CMD_HELLO,		/* user->kernel */ +	DLM_CMD_TIMEOUT,	/* kernel->user */ +	__DLM_CMD_MAX, +}; + +#define DLM_CMD_MAX (__DLM_CMD_MAX - 1) + +enum { +	DLM_TYPE_UNSPEC = 0, +	DLM_TYPE_LOCK, +	__DLM_TYPE_MAX, +}; + +#define DLM_TYPE_MAX (__DLM_TYPE_MAX - 1) + +#define DLM_GENL_VERSION 0x1 +#define DLM_GENL_NAME "DLM" + +#endif /* _DLM_NETLINK_H */ diff --git a/include/uapi/linux/dlm_plock.h b/include/uapi/linux/dlm_plock.h new file mode 100644 index 00000000000..6ae692c909c --- /dev/null +++ b/include/uapi/linux/dlm_plock.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2005-2008 Red Hat, Inc.  All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU General Public License v.2. + */ + +#ifndef _UAPI__DLM_PLOCK_DOT_H__ +#define _UAPI__DLM_PLOCK_DOT_H__ + +#include <linux/types.h> + +#define DLM_PLOCK_MISC_NAME		"dlm_plock" + +#define DLM_PLOCK_VERSION_MAJOR	1 +#define DLM_PLOCK_VERSION_MINOR	2 +#define DLM_PLOCK_VERSION_PATCH	0 + +enum { +	DLM_PLOCK_OP_LOCK = 1, +	DLM_PLOCK_OP_UNLOCK, +	DLM_PLOCK_OP_GET, +}; + +#define DLM_PLOCK_FL_CLOSE 1 + +struct dlm_plock_info { +	__u32 version[3]; +	__u8 optype; +	__u8 ex; +	__u8 wait; +	__u8 flags; +	__u32 pid; +	__s32 nodeid; +	__s32 rv; +	__u32 fsid; +	__u64 number; +	__u64 start; +	__u64 end; +	__u64 owner; +}; + + +#endif /* _UAPI__DLM_PLOCK_DOT_H__ */ diff --git a/include/uapi/linux/dlmconstants.h b/include/uapi/linux/dlmconstants.h new file mode 100644 index 00000000000..47bf08dc756 --- /dev/null +++ b/include/uapi/linux/dlmconstants.h @@ -0,0 +1,163 @@ +/****************************************************************************** +******************************************************************************* +** +**  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved. +**  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved. +** +**  This copyrighted material is made available to anyone wishing to use, +**  modify, copy, or redistribute it subject to the terms and conditions +**  of the GNU General Public License v.2. +** +******************************************************************************* +******************************************************************************/ + +#ifndef __DLMCONSTANTS_DOT_H__ +#define __DLMCONSTANTS_DOT_H__ + +/* + * Constants used by DLM interface. + */ + +#define DLM_LOCKSPACE_LEN       64 +#define DLM_RESNAME_MAXLEN      64 + + +/* + * Lock Modes + */ + +#define DLM_LOCK_IV		(-1)	/* invalid */ +#define DLM_LOCK_NL		0	/* null */ +#define DLM_LOCK_CR		1	/* concurrent read */ +#define DLM_LOCK_CW		2	/* concurrent write */ +#define DLM_LOCK_PR		3	/* protected read */ +#define DLM_LOCK_PW		4	/* protected write */ +#define DLM_LOCK_EX		5	/* exclusive */ + + +/* + * Flags to dlm_lock + * + * DLM_LKF_NOQUEUE + * + * Do not queue the lock request on the wait queue if it cannot be granted + * immediately.  If the lock cannot be granted because of this flag, DLM will + * either return -EAGAIN from the dlm_lock call or will return 0 from + * dlm_lock and -EAGAIN in the lock status block when the AST is executed. + * + * DLM_LKF_CANCEL + * + * Used to cancel a pending lock request or conversion.  A converting lock is + * returned to its previously granted mode. + * + * DLM_LKF_CONVERT + * + * Indicates a lock conversion request.  For conversions the name and namelen + * are ignored and the lock ID in the LKSB is used to identify the lock. + * + * DLM_LKF_VALBLK + * + * Requests DLM to return the current contents of the lock value block in the + * lock status block.  When this flag is set in a lock conversion from PW or EX + * modes, DLM assigns the value specified in the lock status block to the lock + * value block of the lock resource.  The LVB is a DLM_LVB_LEN size array + * containing application-specific information. + * + * DLM_LKF_QUECVT + * + * Force a conversion request to be queued, even if it is compatible with + * the granted modes of other locks on the same resource. + * + * DLM_LKF_IVVALBLK + * + * Invalidate the lock value block. + * + * DLM_LKF_CONVDEADLK + * + * Allows the dlm to resolve conversion deadlocks internally by demoting the + * granted mode of a converting lock to NL.  The DLM_SBF_DEMOTED flag is + * returned for a conversion that's been effected by this. + * + * DLM_LKF_PERSISTENT + * + * Only relevant to locks originating in userspace.  A persistent lock will not + * be removed if the process holding the lock exits. + * + * DLM_LKF_NODLCKWT + * + * Do not cancel the lock if it gets into conversion deadlock. + * Exclude this lock from being monitored due to DLM_LSFL_TIMEWARN. + * + * DLM_LKF_NODLCKBLK + * + * net yet implemented + * + * DLM_LKF_EXPEDITE + * + * Used only with new requests for NL mode locks.  Tells the lock manager + * to grant the lock, ignoring other locks in convert and wait queues. + * + * DLM_LKF_NOQUEUEBAST + * + * Send blocking AST's before returning -EAGAIN to the caller.  It is only + * used along with the NOQUEUE flag.  Blocking AST's are not sent for failed + * NOQUEUE requests otherwise. + * + * DLM_LKF_HEADQUE + * + * Add a lock to the head of the convert or wait queue rather than the tail. + * + * DLM_LKF_NOORDER + * + * Disregard the standard grant order rules and grant a lock as soon as it + * is compatible with other granted locks. + * + * DLM_LKF_ORPHAN + * + * not yet implemented + * + * DLM_LKF_ALTPR + * + * If the requested mode cannot be granted immediately, try to grant the lock + * in PR mode instead.  If this alternate mode is granted instead of the + * requested mode, DLM_SBF_ALTMODE is returned in the lksb. + * + * DLM_LKF_ALTCW + * + * The same as ALTPR, but the alternate mode is CW. + * + * DLM_LKF_FORCEUNLOCK + * + * Unlock the lock even if it is converting or waiting or has sublocks. + * Only really for use by the userland device.c code. + * + */ + +#define DLM_LKF_NOQUEUE		0x00000001 +#define DLM_LKF_CANCEL		0x00000002 +#define DLM_LKF_CONVERT		0x00000004 +#define DLM_LKF_VALBLK		0x00000008 +#define DLM_LKF_QUECVT		0x00000010 +#define DLM_LKF_IVVALBLK	0x00000020 +#define DLM_LKF_CONVDEADLK	0x00000040 +#define DLM_LKF_PERSISTENT	0x00000080 +#define DLM_LKF_NODLCKWT	0x00000100 +#define DLM_LKF_NODLCKBLK	0x00000200 +#define DLM_LKF_EXPEDITE	0x00000400 +#define DLM_LKF_NOQUEUEBAST	0x00000800 +#define DLM_LKF_HEADQUE		0x00001000 +#define DLM_LKF_NOORDER		0x00002000 +#define DLM_LKF_ORPHAN		0x00004000 +#define DLM_LKF_ALTPR		0x00008000 +#define DLM_LKF_ALTCW		0x00010000 +#define DLM_LKF_FORCEUNLOCK	0x00020000 +#define DLM_LKF_TIMEOUT		0x00040000 + +/* + * Some return codes that are not in errno.h + */ + +#define DLM_ECANCEL		0x10001 +#define DLM_EUNLOCK		0x10002 + +#endif  /* __DLMCONSTANTS_DOT_H__ */ diff --git a/include/uapi/linux/dm-ioctl.h b/include/uapi/linux/dm-ioctl.h new file mode 100644 index 00000000000..91e3a360f61 --- /dev/null +++ b/include/uapi/linux/dm-ioctl.h @@ -0,0 +1,339 @@ +/* + * Copyright (C) 2001 - 2003 Sistina Software (UK) Limited. + * Copyright (C) 2004 - 2009 Red Hat, Inc. All rights reserved. + * + * This file is released under the LGPL. + */ + +#ifndef _LINUX_DM_IOCTL_V4_H +#define _LINUX_DM_IOCTL_V4_H + +#include <linux/types.h> + +#define DM_DIR "mapper"		/* Slashes not supported */ +#define DM_CONTROL_NODE "control" +#define DM_MAX_TYPE_NAME 16 +#define DM_NAME_LEN 128 +#define DM_UUID_LEN 129 + +/* + * A traditional ioctl interface for the device mapper. + * + * Each device can have two tables associated with it, an + * 'active' table which is the one currently used by io passing + * through the device, and an 'inactive' one which is a table + * that is being prepared as a replacement for the 'active' one. + * + * DM_VERSION: + * Just get the version information for the ioctl interface. + * + * DM_REMOVE_ALL: + * Remove all dm devices, destroy all tables.  Only really used + * for debug. + * + * DM_LIST_DEVICES: + * Get a list of all the dm device names. + * + * DM_DEV_CREATE: + * Create a new device, neither the 'active' or 'inactive' table + * slots will be filled.  The device will be in suspended state + * after creation, however any io to the device will get errored + * since it will be out-of-bounds. + * + * DM_DEV_REMOVE: + * Remove a device, destroy any tables. + * + * DM_DEV_RENAME: + * Rename a device or set its uuid if none was previously supplied. + * + * DM_SUSPEND: + * This performs both suspend and resume, depending which flag is + * passed in. + * Suspend: This command will not return until all pending io to + * the device has completed.  Further io will be deferred until + * the device is resumed. + * Resume: It is no longer an error to issue this command on an + * unsuspended device.  If a table is present in the 'inactive' + * slot, it will be moved to the active slot, then the old table + * from the active slot will be _destroyed_.  Finally the device + * is resumed. + * + * DM_DEV_STATUS: + * Retrieves the status for the table in the 'active' slot. + * + * DM_DEV_WAIT: + * Wait for a significant event to occur to the device.  This + * could either be caused by an event triggered by one of the + * targets of the table in the 'active' slot, or a table change. + * + * DM_TABLE_LOAD: + * Load a table into the 'inactive' slot for the device.  The + * device does _not_ need to be suspended prior to this command. + * + * DM_TABLE_CLEAR: + * Destroy any table in the 'inactive' slot (ie. abort). + * + * DM_TABLE_DEPS: + * Return a set of device dependencies for the 'active' table. + * + * DM_TABLE_STATUS: + * Return the targets status for the 'active' table. + * + * DM_TARGET_MSG: + * Pass a message string to the target at a specific offset of a device. + * + * DM_DEV_SET_GEOMETRY: + * Set the geometry of a device by passing in a string in this format: + * + * "cylinders heads sectors_per_track start_sector" + * + * Beware that CHS geometry is nearly obsolete and only provided + * for compatibility with dm devices that can be booted by a PC + * BIOS.  See struct hd_geometry for range limits.  Also note that + * the geometry is erased if the device size changes. + */ + +/* + * All ioctl arguments consist of a single chunk of memory, with + * this structure at the start.  If a uuid is specified any + * lookup (eg. for a DM_INFO) will be done on that, *not* the + * name. + */ +struct dm_ioctl { +	/* +	 * The version number is made up of three parts: +	 * major - no backward or forward compatibility, +	 * minor - only backwards compatible, +	 * patch - both backwards and forwards compatible. +	 * +	 * All clients of the ioctl interface should fill in the +	 * version number of the interface that they were +	 * compiled with. +	 * +	 * All recognised ioctl commands (ie. those that don't +	 * return -ENOTTY) fill out this field, even if the +	 * command failed. +	 */ +	__u32 version[3];	/* in/out */ +	__u32 data_size;	/* total size of data passed in +				 * including this struct */ + +	__u32 data_start;	/* offset to start of data +				 * relative to start of this struct */ + +	__u32 target_count;	/* in/out */ +	__s32 open_count;	/* out */ +	__u32 flags;		/* in/out */ + +	/* +	 * event_nr holds either the event number (input and output) or the +	 * udev cookie value (input only). +	 * The DM_DEV_WAIT ioctl takes an event number as input. +	 * The DM_SUSPEND, DM_DEV_REMOVE and DM_DEV_RENAME ioctls +	 * use the field as a cookie to return in the DM_COOKIE +	 * variable with the uevents they issue. +	 * For output, the ioctls return the event number, not the cookie. +	 */ +	__u32 event_nr;      	/* in/out */ +	__u32 padding; + +	__u64 dev;		/* in/out */ + +	char name[DM_NAME_LEN];	/* device name */ +	char uuid[DM_UUID_LEN];	/* unique identifier for +				 * the block device */ +	char data[7];		/* padding or data */ +}; + +/* + * Used to specify tables.  These structures appear after the + * dm_ioctl. + */ +struct dm_target_spec { +	__u64 sector_start; +	__u64 length; +	__s32 status;		/* used when reading from kernel only */ + +	/* +	 * Location of the next dm_target_spec. +	 * - When specifying targets on a DM_TABLE_LOAD command, this value is +	 *   the number of bytes from the start of the "current" dm_target_spec +	 *   to the start of the "next" dm_target_spec. +	 * - When retrieving targets on a DM_TABLE_STATUS command, this value +	 *   is the number of bytes from the start of the first dm_target_spec +	 *   (that follows the dm_ioctl struct) to the start of the "next" +	 *   dm_target_spec. +	 */ +	__u32 next; + +	char target_type[DM_MAX_TYPE_NAME]; + +	/* +	 * Parameter string starts immediately after this object. +	 * Be careful to add padding after string to ensure correct +	 * alignment of subsequent dm_target_spec. +	 */ +}; + +/* + * Used to retrieve the target dependencies. + */ +struct dm_target_deps { +	__u32 count;	/* Array size */ +	__u32 padding;	/* unused */ +	__u64 dev[0];	/* out */ +}; + +/* + * Used to get a list of all dm devices. + */ +struct dm_name_list { +	__u64 dev; +	__u32 next;		/* offset to the next record from +				   the _start_ of this */ +	char name[0]; +}; + +/* + * Used to retrieve the target versions + */ +struct dm_target_versions { +        __u32 next; +        __u32 version[3]; + +        char name[0]; +}; + +/* + * Used to pass message to a target + */ +struct dm_target_msg { +	__u64 sector;	/* Device sector */ + +	char message[0]; +}; + +/* + * If you change this make sure you make the corresponding change + * to dm-ioctl.c:lookup_ioctl() + */ +enum { +	/* Top level cmds */ +	DM_VERSION_CMD = 0, +	DM_REMOVE_ALL_CMD, +	DM_LIST_DEVICES_CMD, + +	/* device level cmds */ +	DM_DEV_CREATE_CMD, +	DM_DEV_REMOVE_CMD, +	DM_DEV_RENAME_CMD, +	DM_DEV_SUSPEND_CMD, +	DM_DEV_STATUS_CMD, +	DM_DEV_WAIT_CMD, + +	/* Table level cmds */ +	DM_TABLE_LOAD_CMD, +	DM_TABLE_CLEAR_CMD, +	DM_TABLE_DEPS_CMD, +	DM_TABLE_STATUS_CMD, + +	/* Added later */ +	DM_LIST_VERSIONS_CMD, +	DM_TARGET_MSG_CMD, +	DM_DEV_SET_GEOMETRY_CMD +}; + +#define DM_IOCTL 0xfd + +#define DM_VERSION       _IOWR(DM_IOCTL, DM_VERSION_CMD, struct dm_ioctl) +#define DM_REMOVE_ALL    _IOWR(DM_IOCTL, DM_REMOVE_ALL_CMD, struct dm_ioctl) +#define DM_LIST_DEVICES  _IOWR(DM_IOCTL, DM_LIST_DEVICES_CMD, struct dm_ioctl) + +#define DM_DEV_CREATE    _IOWR(DM_IOCTL, DM_DEV_CREATE_CMD, struct dm_ioctl) +#define DM_DEV_REMOVE    _IOWR(DM_IOCTL, DM_DEV_REMOVE_CMD, struct dm_ioctl) +#define DM_DEV_RENAME    _IOWR(DM_IOCTL, DM_DEV_RENAME_CMD, struct dm_ioctl) +#define DM_DEV_SUSPEND   _IOWR(DM_IOCTL, DM_DEV_SUSPEND_CMD, struct dm_ioctl) +#define DM_DEV_STATUS    _IOWR(DM_IOCTL, DM_DEV_STATUS_CMD, struct dm_ioctl) +#define DM_DEV_WAIT      _IOWR(DM_IOCTL, DM_DEV_WAIT_CMD, struct dm_ioctl) + +#define DM_TABLE_LOAD    _IOWR(DM_IOCTL, DM_TABLE_LOAD_CMD, struct dm_ioctl) +#define DM_TABLE_CLEAR   _IOWR(DM_IOCTL, DM_TABLE_CLEAR_CMD, struct dm_ioctl) +#define DM_TABLE_DEPS    _IOWR(DM_IOCTL, DM_TABLE_DEPS_CMD, struct dm_ioctl) +#define DM_TABLE_STATUS  _IOWR(DM_IOCTL, DM_TABLE_STATUS_CMD, struct dm_ioctl) + +#define DM_LIST_VERSIONS _IOWR(DM_IOCTL, DM_LIST_VERSIONS_CMD, struct dm_ioctl) + +#define DM_TARGET_MSG	 _IOWR(DM_IOCTL, DM_TARGET_MSG_CMD, struct dm_ioctl) +#define DM_DEV_SET_GEOMETRY	_IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl) + +#define DM_VERSION_MAJOR	4 +#define DM_VERSION_MINOR	23 +#define DM_VERSION_PATCHLEVEL	0 +#define DM_VERSION_EXTRA	"-ioctl (2012-07-25)" + +/* Status bits */ +#define DM_READONLY_FLAG	(1 << 0) /* In/Out */ +#define DM_SUSPEND_FLAG		(1 << 1) /* In/Out */ +#define DM_PERSISTENT_DEV_FLAG	(1 << 3) /* In */ + +/* + * Flag passed into ioctl STATUS command to get table information + * rather than current status. + */ +#define DM_STATUS_TABLE_FLAG	(1 << 4) /* In */ + +/* + * Flags that indicate whether a table is present in either of + * the two table slots that a device has. + */ +#define DM_ACTIVE_PRESENT_FLAG   (1 << 5) /* Out */ +#define DM_INACTIVE_PRESENT_FLAG (1 << 6) /* Out */ + +/* + * Indicates that the buffer passed in wasn't big enough for the + * results. + */ +#define DM_BUFFER_FULL_FLAG	(1 << 8) /* Out */ + +/* + * This flag is now ignored. + */ +#define DM_SKIP_BDGET_FLAG	(1 << 9) /* In */ + +/* + * Set this to avoid attempting to freeze any filesystem when suspending. + */ +#define DM_SKIP_LOCKFS_FLAG	(1 << 10) /* In */ + +/* + * Set this to suspend without flushing queued ios. + * Also disables flushing uncommitted changes in the thin target before + * generating statistics for DM_TABLE_STATUS and DM_DEV_WAIT. + */ +#define DM_NOFLUSH_FLAG		(1 << 11) /* In */ + +/* + * If set, any table information returned will relate to the inactive + * table instead of the live one.  Always check DM_INACTIVE_PRESENT_FLAG + * is set before using the data returned. + */ +#define DM_QUERY_INACTIVE_TABLE_FLAG	(1 << 12) /* In */ + +/* + * If set, a uevent was generated for which the caller may need to wait. + */ +#define DM_UEVENT_GENERATED_FLAG	(1 << 13) /* Out */ + +/* + * If set, rename changes the uuid not the name.  Only permitted + * if no uuid was previously supplied: an existing uuid cannot be changed. + */ +#define DM_UUID_FLAG			(1 << 14) /* In */ + +/* + * If set, all buffers are wiped after use. Use when sending + * or requesting sensitive data such as an encryption key. + */ +#define DM_SECURE_DATA_FLAG		(1 << 15) /* In */ + +#endif				/* _LINUX_DM_IOCTL_H */ diff --git a/include/uapi/linux/dm-log-userspace.h b/include/uapi/linux/dm-log-userspace.h new file mode 100644 index 00000000000..0678c2adc42 --- /dev/null +++ b/include/uapi/linux/dm-log-userspace.h @@ -0,0 +1,416 @@ +/* + * Copyright (C) 2006-2009 Red Hat, Inc. + * + * This file is released under the LGPL. + */ + +#ifndef __DM_LOG_USERSPACE_H__ +#define __DM_LOG_USERSPACE_H__ + +#include <linux/dm-ioctl.h> /* For DM_UUID_LEN */ + +/* + * The device-mapper userspace log module consists of a kernel component and + * a user-space component.  The kernel component implements the API defined + * in dm-dirty-log.h.  Its purpose is simply to pass the parameters and + * return values of those API functions between kernel and user-space. + * + * Below are defined the 'request_types' - DM_ULOG_CTR, DM_ULOG_DTR, etc. + * These request types represent the different functions in the device-mapper + * dirty log API.  Each of these is described in more detail below. + * + * The user-space program must listen for requests from the kernel (representing + * the various API functions) and process them. + * + * User-space begins by setting up the communication link (error checking + * removed for clarity): + *	fd = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_CONNECTOR); + *	addr.nl_family = AF_NETLINK; + *	addr.nl_groups = CN_IDX_DM; + *	addr.nl_pid = 0; + *	r = bind(fd, (struct sockaddr *) &addr, sizeof(addr)); + *	opt = addr.nl_groups; + *	setsockopt(fd, SOL_NETLINK, NETLINK_ADD_MEMBERSHIP, &opt, sizeof(opt)); + * + * User-space will then wait to receive requests form the kernel, which it + * will process as described below.  The requests are received in the form, + * ((struct dm_ulog_request) + (additional data)).  Depending on the request + * type, there may or may not be 'additional data'.  In the descriptions below, + * you will see 'Payload-to-userspace' and 'Payload-to-kernel'.  The + * 'Payload-to-userspace' is what the kernel sends in 'additional data' as + * necessary parameters to complete the request.  The 'Payload-to-kernel' is + * the 'additional data' returned to the kernel that contains the necessary + * results of the request.  The 'data_size' field in the dm_ulog_request + * structure denotes the availability and amount of payload data. + */ + +/* + * DM_ULOG_CTR corresponds to (found in dm-dirty-log.h): + * int (*ctr)(struct dm_dirty_log *log, struct dm_target *ti, + *	      unsigned argc, char **argv); + * + * Payload-to-userspace: + *	A single string containing all the argv arguments separated by ' 's + * Payload-to-kernel: + *	A NUL-terminated string that is the name of the device that is used + *	as the backing store for the log data.  'dm_get_device' will be called + *	on this device.  ('dm_put_device' will be called on this device + *	automatically after calling DM_ULOG_DTR.)  If there is no device needed + *	for log data, 'data_size' in the dm_ulog_request struct should be 0. + * + * The UUID contained in the dm_ulog_request structure is the reference that + * will be used by all request types to a specific log.  The constructor must + * record this association with the instance created. + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field, filling the + * data field with the log device if necessary, and setting 'data_size' + * appropriately. + */ +#define DM_ULOG_CTR                    1 + +/* + * DM_ULOG_DTR corresponds to (found in dm-dirty-log.h): + * void (*dtr)(struct dm_dirty_log *log); + * + * Payload-to-userspace: + *	A single string containing all the argv arguments separated by ' 's + * Payload-to-kernel: + *	None.  ('data_size' in the dm_ulog_request struct should be 0.) + * + * The UUID contained in the dm_ulog_request structure is all that is + * necessary to identify the log instance being destroyed.  There is no + * payload data. + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field and clearing + * 'data_size' appropriately. + */ +#define DM_ULOG_DTR                    2 + +/* + * DM_ULOG_PRESUSPEND corresponds to (found in dm-dirty-log.h): + * int (*presuspend)(struct dm_dirty_log *log); + * + * Payload-to-userspace: + *	None. + * Payload-to-kernel: + *	None. + * + * The UUID contained in the dm_ulog_request structure is all that is + * necessary to identify the log instance being presuspended.  There is no + * payload data. + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field and + * 'data_size' appropriately. + */ +#define DM_ULOG_PRESUSPEND             3 + +/* + * DM_ULOG_POSTSUSPEND corresponds to (found in dm-dirty-log.h): + * int (*postsuspend)(struct dm_dirty_log *log); + * + * Payload-to-userspace: + *	None. + * Payload-to-kernel: + *	None. + * + * The UUID contained in the dm_ulog_request structure is all that is + * necessary to identify the log instance being postsuspended.  There is no + * payload data. + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field and + * 'data_size' appropriately. + */ +#define DM_ULOG_POSTSUSPEND            4 + +/* + * DM_ULOG_RESUME corresponds to (found in dm-dirty-log.h): + * int (*resume)(struct dm_dirty_log *log); + * + * Payload-to-userspace: + *	None. + * Payload-to-kernel: + *	None. + * + * The UUID contained in the dm_ulog_request structure is all that is + * necessary to identify the log instance being resumed.  There is no + * payload data. + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field and + * 'data_size' appropriately. + */ +#define DM_ULOG_RESUME                 5 + +/* + * DM_ULOG_GET_REGION_SIZE corresponds to (found in dm-dirty-log.h): + * uint32_t (*get_region_size)(struct dm_dirty_log *log); + * + * Payload-to-userspace: + *	None. + * Payload-to-kernel: + *	uint64_t - contains the region size + * + * The region size is something that was determined at constructor time. + * It is returned in the payload area and 'data_size' is set to + * reflect this. + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field appropriately. + */ +#define DM_ULOG_GET_REGION_SIZE        6 + +/* + * DM_ULOG_IS_CLEAN corresponds to (found in dm-dirty-log.h): + * int (*is_clean)(struct dm_dirty_log *log, region_t region); + * + * Payload-to-userspace: + *	uint64_t - the region to get clean status on + * Payload-to-kernel: + *	int64_t  - 1 if clean, 0 otherwise + * + * Payload is sizeof(uint64_t) and contains the region for which the clean + * status is being made. + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - filling the payload with 0 (not clean) or + * 1 (clean), setting 'data_size' and 'error' appropriately. + */ +#define DM_ULOG_IS_CLEAN               7 + +/* + * DM_ULOG_IN_SYNC corresponds to (found in dm-dirty-log.h): + * int (*in_sync)(struct dm_dirty_log *log, region_t region, + *		  int can_block); + * + * Payload-to-userspace: + *	uint64_t - the region to get sync status on + * Payload-to-kernel: + *	int64_t - 1 if in-sync, 0 otherwise + * + * Exactly the same as 'is_clean' above, except this time asking "has the + * region been recovered?" vs. "is the region not being modified?" + */ +#define DM_ULOG_IN_SYNC                8 + +/* + * DM_ULOG_FLUSH corresponds to (found in dm-dirty-log.h): + * int (*flush)(struct dm_dirty_log *log); + * + * Payload-to-userspace: + *	None. + * Payload-to-kernel: + *	None. + * + * No incoming or outgoing payload.  Simply flush log state to disk. + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field and clearing + * 'data_size' appropriately. + */ +#define DM_ULOG_FLUSH                  9 + +/* + * DM_ULOG_MARK_REGION corresponds to (found in dm-dirty-log.h): + * void (*mark_region)(struct dm_dirty_log *log, region_t region); + * + * Payload-to-userspace: + *	uint64_t [] - region(s) to mark + * Payload-to-kernel: + *	None. + * + * Incoming payload contains the one or more regions to mark dirty. + * The number of regions contained in the payload can be determined from + * 'data_size/sizeof(uint64_t)'. + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field and clearing + * 'data_size' appropriately. + */ +#define DM_ULOG_MARK_REGION           10 + +/* + * DM_ULOG_CLEAR_REGION corresponds to (found in dm-dirty-log.h): + * void (*clear_region)(struct dm_dirty_log *log, region_t region); + * + * Payload-to-userspace: + *	uint64_t [] - region(s) to clear + * Payload-to-kernel: + *	None. + * + * Incoming payload contains the one or more regions to mark clean. + * The number of regions contained in the payload can be determined from + * 'data_size/sizeof(uint64_t)'. + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field and clearing + * 'data_size' appropriately. + */ +#define DM_ULOG_CLEAR_REGION          11 + +/* + * DM_ULOG_GET_RESYNC_WORK corresponds to (found in dm-dirty-log.h): + * int (*get_resync_work)(struct dm_dirty_log *log, region_t *region); + * + * Payload-to-userspace: + *	None. + * Payload-to-kernel: + *	{ + *		int64_t i; -- 1 if recovery necessary, 0 otherwise + *		uint64_t r; -- The region to recover if i=1 + *	} + * 'data_size' should be set appropriately. + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field appropriately. + */ +#define DM_ULOG_GET_RESYNC_WORK       12 + +/* + * DM_ULOG_SET_REGION_SYNC corresponds to (found in dm-dirty-log.h): + * void (*set_region_sync)(struct dm_dirty_log *log, + *			   region_t region, int in_sync); + * + * Payload-to-userspace: + *	{ + *		uint64_t - region to set sync state on + *		int64_t  - 0 if not-in-sync, 1 if in-sync + *	} + * Payload-to-kernel: + *	None. + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field and clearing + * 'data_size' appropriately. + */ +#define DM_ULOG_SET_REGION_SYNC       13 + +/* + * DM_ULOG_GET_SYNC_COUNT corresponds to (found in dm-dirty-log.h): + * region_t (*get_sync_count)(struct dm_dirty_log *log); + * + * Payload-to-userspace: + *	None. + * Payload-to-kernel: + *	uint64_t - the number of in-sync regions + * + * No incoming payload.  Kernel-bound payload contains the number of + * regions that are in-sync (in a size_t). + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field and + * 'data_size' appropriately. + */ +#define DM_ULOG_GET_SYNC_COUNT        14 + +/* + * DM_ULOG_STATUS_INFO corresponds to (found in dm-dirty-log.h): + * int (*status)(struct dm_dirty_log *log, STATUSTYPE_INFO, + *		 char *result, unsigned maxlen); + * + * Payload-to-userspace: + *	None. + * Payload-to-kernel: + *	Character string containing STATUSTYPE_INFO + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field and + * 'data_size' appropriately. + */ +#define DM_ULOG_STATUS_INFO           15 + +/* + * DM_ULOG_STATUS_TABLE corresponds to (found in dm-dirty-log.h): + * int (*status)(struct dm_dirty_log *log, STATUSTYPE_TABLE, + *		 char *result, unsigned maxlen); + * + * Payload-to-userspace: + *	None. + * Payload-to-kernel: + *	Character string containing STATUSTYPE_TABLE + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field and + * 'data_size' appropriately. + */ +#define DM_ULOG_STATUS_TABLE          16 + +/* + * DM_ULOG_IS_REMOTE_RECOVERING corresponds to (found in dm-dirty-log.h): + * int (*is_remote_recovering)(struct dm_dirty_log *log, region_t region); + * + * Payload-to-userspace: + *	uint64_t - region to determine recovery status on + * Payload-to-kernel: + *	{ + *		int64_t is_recovering;  -- 0 if no, 1 if yes + *		uint64_t in_sync_hint;  -- lowest region still needing resync + *	} + * + * When the request has been processed, user-space must return the + * dm_ulog_request to the kernel - setting the 'error' field and + * 'data_size' appropriately. + */ +#define DM_ULOG_IS_REMOTE_RECOVERING  17 + +/* + * (DM_ULOG_REQUEST_MASK & request_type) to get the request type + * + * Payload-to-userspace: + *	A single string containing all the argv arguments separated by ' 's + * Payload-to-kernel: + *	None.  ('data_size' in the dm_ulog_request struct should be 0.) + * + * We are reserving 8 bits of the 32-bit 'request_type' field for the + * various request types above.  The remaining 24-bits are currently + * set to zero and are reserved for future use and compatibility concerns. + * + * User-space should always use DM_ULOG_REQUEST_TYPE to acquire the + * request type from the 'request_type' field to maintain forward compatibility. + */ +#define DM_ULOG_REQUEST_MASK 0xFF +#define DM_ULOG_REQUEST_TYPE(request_type) \ +	(DM_ULOG_REQUEST_MASK & (request_type)) + +/* + * DM_ULOG_REQUEST_VERSION is incremented when there is a + * change to the way information is passed between kernel + * and userspace.  This could be a structure change of + * dm_ulog_request or a change in the way requests are + * issued/handled.  Changes are outlined here: + *	version 1:  Initial implementation + *	version 2:  DM_ULOG_CTR allowed to return a string containing a + *	            device name that is to be registered with DM via + *	            'dm_get_device'. + */ +#define DM_ULOG_REQUEST_VERSION 2 + +struct dm_ulog_request { +	/* +	 * The local unique identifier (luid) and the universally unique +	 * identifier (uuid) are used to tie a request to a specific +	 * mirror log.  A single machine log could probably make due with +	 * just the 'luid', but a cluster-aware log must use the 'uuid' and +	 * the 'luid'.  The uuid is what is required for node to node +	 * communication concerning a particular log, but the 'luid' helps +	 * differentiate between logs that are being swapped and have the +	 * same 'uuid'.  (Think "live" and "inactive" device-mapper tables.) +	 */ +	uint64_t luid; +	char uuid[DM_UUID_LEN]; +	char padding[3];        /* Padding because DM_UUID_LEN = 129 */ + +	uint32_t version;       /* See DM_ULOG_REQUEST_VERSION */ +	int32_t error;          /* Used to report back processing errors */ + +	uint32_t seq;           /* Sequence number for request */ +	uint32_t request_type;  /* DM_ULOG_* defined above */ +	uint32_t data_size;     /* How much data (not including this struct) */ + +	char data[0]; +}; + +#endif /* __DM_LOG_USERSPACE_H__ */ diff --git a/include/uapi/linux/dn.h b/include/uapi/linux/dn.h new file mode 100644 index 00000000000..9c50445462d --- /dev/null +++ b/include/uapi/linux/dn.h @@ -0,0 +1,146 @@ +#ifndef _LINUX_DN_H +#define _LINUX_DN_H + +#include <linux/types.h> + +/* + +	DECnet Data Structures and Constants + +*/ + +/*  + * DNPROTO_NSP can't be the same as SOL_SOCKET,  + * so increment each by one (compared to ULTRIX) + */ +#define DNPROTO_NSP     2                       /* NSP protocol number       */ +#define DNPROTO_ROU     3                       /* Routing protocol number   */ +#define DNPROTO_NML     4                       /* Net mgt protocol number   */ +#define DNPROTO_EVL     5                       /* Evl protocol number (usr) */ +#define DNPROTO_EVR     6                       /* Evl protocol number (evl) */ +#define DNPROTO_NSPT    7                       /* NSP trace protocol number */ + + +#define DN_ADDL		2 +#define DN_MAXADDL	2 /* ULTRIX headers have 20 here, but pathworks has 2 */ +#define DN_MAXOPTL	16 +#define DN_MAXOBJL	16 +#define DN_MAXACCL	40 +#define DN_MAXALIASL	128 +#define DN_MAXNODEL	256 +#define DNBUFSIZE	65023 + +/*  + * SET/GET Socket options  - must match the DSO_ numbers below + */ +#define SO_CONDATA      1 +#define SO_CONACCESS    2 +#define SO_PROXYUSR     3 +#define SO_LINKINFO     7 + +#define DSO_CONDATA     1        /* Set/Get connect data                */ +#define DSO_DISDATA     10       /* Set/Get disconnect data             */ +#define DSO_CONACCESS   2        /* Set/Get connect access data         */ +#define DSO_ACCEPTMODE  4        /* Set/Get accept mode                 */ +#define DSO_CONACCEPT   5        /* Accept deferred connection          */ +#define DSO_CONREJECT   6        /* Reject deferred connection          */ +#define DSO_LINKINFO    7        /* Set/Get link information            */ +#define DSO_STREAM      8        /* Set socket type to stream           */ +#define DSO_SEQPACKET   9        /* Set socket type to sequenced packet */ +#define DSO_MAXWINDOW   11       /* Maximum window size allowed         */ +#define DSO_NODELAY	12       /* Turn off nagle                      */ +#define DSO_CORK        13       /* Wait for more data!                 */ +#define DSO_SERVICES	14       /* NSP Services field                  */ +#define DSO_INFO	15       /* NSP Info field                      */ +#define DSO_MAX         15       /* Maximum option number               */ + + +/* LINK States */ +#define LL_INACTIVE	0 +#define LL_CONNECTING	1 +#define LL_RUNNING	2 +#define LL_DISCONNECTING 3 + +#define ACC_IMMED 0 +#define ACC_DEFER 1 + +#define SDF_WILD        1                  /* Wild card object          */ +#define SDF_PROXY       2                  /* Addr eligible for proxy   */ +#define SDF_UICPROXY    4                  /* Use uic-based proxy       */ + +/* Structures */ + + +struct dn_naddr { +	__le16		a_len; +	__u8 a_addr[DN_MAXADDL]; /* Two bytes little endian */ +}; + +struct sockaddr_dn { +	__u16		sdn_family; +	__u8		sdn_flags; +	__u8		sdn_objnum; +	__le16		sdn_objnamel; +	__u8		sdn_objname[DN_MAXOBJL]; +	struct   dn_naddr	sdn_add; +}; +#define sdn_nodeaddrl   sdn_add.a_len   /* Node address length  */ +#define sdn_nodeaddr    sdn_add.a_addr  /* Node address         */ + + + +/* + * DECnet set/get DSO_CONDATA, DSO_DISDATA (optional data) structure + */ +struct optdata_dn { +        __le16  opt_status;     /* Extended status return */ +#define opt_sts opt_status +        __le16  opt_optl;       /* Length of user data    */ +        __u8   opt_data[16];   /* User data              */ +}; + +struct accessdata_dn { +	__u8		acc_accl; +	__u8		acc_acc[DN_MAXACCL]; +	__u8 		acc_passl; +	__u8		acc_pass[DN_MAXACCL]; +	__u8 		acc_userl; +	__u8		acc_user[DN_MAXACCL]; +}; + +/* + * DECnet logical link information structure + */ +struct linkinfo_dn { +        __u16  idn_segsize;    /* Segment size for link */ +        __u8   idn_linkstate;  /* Logical link state    */ +}; + +/* + * Ethernet address format (for DECnet) + */ +union etheraddress { +        __u8 dne_addr[6];             /* Full ethernet address */ +  struct { +                __u8 dne_hiord[4];    /* DECnet HIORD prefix   */ +                __u8 dne_nodeaddr[2]; /* DECnet node address   */ +  } dne_remote; +}; + + +/* + * DECnet physical socket address format + */ +struct dn_addr { +        __le16 dna_family;      /* AF_DECnet               */ +        union etheraddress dna_netaddr; /* DECnet ethernet address */ +}; + +#define DECNET_IOCTL_BASE 0x89 /* PROTOPRIVATE range */ + +#define SIOCSNETADDR  _IOW(DECNET_IOCTL_BASE, 0xe0, struct dn_naddr) +#define SIOCGNETADDR  _IOR(DECNET_IOCTL_BASE, 0xe1, struct dn_naddr) +#define OSIOCSNETADDR _IOW(DECNET_IOCTL_BASE, 0xe0, int) +#define OSIOCGNETADDR _IOR(DECNET_IOCTL_BASE, 0xe1, int) + +#endif /* _LINUX_DN_H */ diff --git a/include/uapi/linux/dqblk_xfs.h b/include/uapi/linux/dqblk_xfs.h new file mode 100644 index 00000000000..86552807aed --- /dev/null +++ b/include/uapi/linux/dqblk_xfs.h @@ -0,0 +1,166 @@ +/* + * Copyright (c) 1995-2001,2004 Silicon Graphics, Inc.  All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation. + * + * 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesset General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA + */ +#ifndef _LINUX_DQBLK_XFS_H +#define _LINUX_DQBLK_XFS_H + +#include <linux/types.h> + +/* + * Disk quota - quotactl(2) commands for the XFS Quota Manager (XQM). + */ + +#define XQM_CMD(x)	(('X'<<8)+(x))	/* note: forms first QCMD argument */ +#define XQM_COMMAND(x)	(((x) & (0xff<<8)) == ('X'<<8))	/* test if for XFS */ + +#define XQM_USRQUOTA	0	/* system call user quota type */ +#define XQM_GRPQUOTA	1	/* system call group quota type */ +#define XQM_PRJQUOTA	2	/* system call project quota type */ +#define XQM_MAXQUOTAS	3 + +#define Q_XQUOTAON	XQM_CMD(1)	/* enable accounting/enforcement */ +#define Q_XQUOTAOFF	XQM_CMD(2)	/* disable accounting/enforcement */ +#define Q_XGETQUOTA	XQM_CMD(3)	/* get disk limits and usage */ +#define Q_XSETQLIM	XQM_CMD(4)	/* set disk limits */ +#define Q_XGETQSTAT	XQM_CMD(5)	/* get quota subsystem status */ +#define Q_XQUOTARM	XQM_CMD(6)	/* free disk space used by dquots */ +#define Q_XQUOTASYNC	XQM_CMD(7)	/* delalloc flush, updates dquots */ + +/* + * fs_disk_quota structure: + * + * This contains the current quota information regarding a user/proj/group. + * It is 64-bit aligned, and all the blk units are in BBs (Basic Blocks) of + * 512 bytes. + */ +#define FS_DQUOT_VERSION	1	/* fs_disk_quota.d_version */ +typedef struct fs_disk_quota { +	__s8		d_version;	/* version of this structure */ +	__s8		d_flags;	/* FS_{USER,PROJ,GROUP}_QUOTA */ +	__u16		d_fieldmask;	/* field specifier */ +	__u32		d_id;		/* user, project, or group ID */ +	__u64		d_blk_hardlimit;/* absolute limit on disk blks */ +	__u64		d_blk_softlimit;/* preferred limit on disk blks */ +	__u64		d_ino_hardlimit;/* maximum # allocated inodes */ +	__u64		d_ino_softlimit;/* preferred inode limit */ +	__u64		d_bcount;	/* # disk blocks owned by the user */ +	__u64		d_icount;	/* # inodes owned by the user */ +	__s32		d_itimer;	/* zero if within inode limits */ +					/* if not, we refuse service */ +	__s32		d_btimer;	/* similar to above; for disk blocks */ +	__u16	  	d_iwarns;       /* # warnings issued wrt num inodes */ +	__u16	  	d_bwarns;       /* # warnings issued wrt disk blocks */ +	__s32		d_padding2;	/* padding2 - for future use */ +	__u64		d_rtb_hardlimit;/* absolute limit on realtime blks */ +	__u64		d_rtb_softlimit;/* preferred limit on RT disk blks */ +	__u64		d_rtbcount;	/* # realtime blocks owned */ +	__s32		d_rtbtimer;	/* similar to above; for RT disk blks */ +	__u16	  	d_rtbwarns;     /* # warnings issued wrt RT disk blks */ +	__s16		d_padding3;	/* padding3 - for future use */	 +	char		d_padding4[8];	/* yet more padding */ +} fs_disk_quota_t; + +/* + * These fields are sent to Q_XSETQLIM to specify fields that need to change. + */ +#define FS_DQ_ISOFT	(1<<0) +#define FS_DQ_IHARD	(1<<1) +#define FS_DQ_BSOFT	(1<<2) +#define FS_DQ_BHARD 	(1<<3) +#define FS_DQ_RTBSOFT	(1<<4) +#define FS_DQ_RTBHARD	(1<<5) +#define FS_DQ_LIMIT_MASK	(FS_DQ_ISOFT | FS_DQ_IHARD | FS_DQ_BSOFT | \ +				 FS_DQ_BHARD | FS_DQ_RTBSOFT | FS_DQ_RTBHARD) +/* + * These timers can only be set in super user's dquot. For others, timers are + * automatically started and stopped. Superusers timer values set the limits + * for the rest.  In case these values are zero, the DQ_{F,B}TIMELIMIT values + * defined below are used.  + * These values also apply only to the d_fieldmask field for Q_XSETQLIM. + */ +#define FS_DQ_BTIMER	(1<<6) +#define FS_DQ_ITIMER	(1<<7) +#define FS_DQ_RTBTIMER 	(1<<8) +#define FS_DQ_TIMER_MASK	(FS_DQ_BTIMER | FS_DQ_ITIMER | FS_DQ_RTBTIMER) + +/* + * Warning counts are set in both super user's dquot and others. For others, + * warnings are set/cleared by the administrators (or automatically by going + * below the soft limit).  Superusers warning values set the warning limits + * for the rest.  In case these values are zero, the DQ_{F,B}WARNLIMIT values + * defined below are used.  + * These values also apply only to the d_fieldmask field for Q_XSETQLIM. + */ +#define FS_DQ_BWARNS	(1<<9) +#define FS_DQ_IWARNS	(1<<10) +#define FS_DQ_RTBWARNS	(1<<11) +#define FS_DQ_WARNS_MASK	(FS_DQ_BWARNS | FS_DQ_IWARNS | FS_DQ_RTBWARNS) + +/* + * Accounting values.  These can only be set for filesystem with + * non-transactional quotas that require quotacheck(8) in userspace. + */ +#define FS_DQ_BCOUNT		(1<<12) +#define FS_DQ_ICOUNT		(1<<13) +#define FS_DQ_RTBCOUNT		(1<<14) +#define FS_DQ_ACCT_MASK		(FS_DQ_BCOUNT | FS_DQ_ICOUNT | FS_DQ_RTBCOUNT) + +/* + * Various flags related to quotactl(2). + */ +#define FS_QUOTA_UDQ_ACCT	(1<<0)  /* user quota accounting */ +#define FS_QUOTA_UDQ_ENFD	(1<<1)  /* user quota limits enforcement */ +#define FS_QUOTA_GDQ_ACCT	(1<<2)  /* group quota accounting */ +#define FS_QUOTA_GDQ_ENFD	(1<<3)  /* group quota limits enforcement */ +#define FS_QUOTA_PDQ_ACCT	(1<<4)  /* project quota accounting */ +#define FS_QUOTA_PDQ_ENFD	(1<<5)  /* project quota limits enforcement */ + +#define FS_USER_QUOTA		(1<<0)	/* user quota type */ +#define FS_PROJ_QUOTA		(1<<1)	/* project quota type */ +#define FS_GROUP_QUOTA		(1<<2)	/* group quota type */ + +/* + * fs_quota_stat is the struct returned in Q_XGETQSTAT for a given file system. + * Provides a centralized way to get meta information about the quota subsystem. + * eg. space taken up for user and group quotas, number of dquots currently + * incore. + */ +#define FS_QSTAT_VERSION	1	/* fs_quota_stat.qs_version */ + +/* + * Some basic information about 'quota files'. + */ +typedef struct fs_qfilestat { +	__u64		qfs_ino;	/* inode number */ +	__u64		qfs_nblks;	/* number of BBs 512-byte-blks */ +	__u32		qfs_nextents;	/* number of extents */ +} fs_qfilestat_t; + +typedef struct fs_quota_stat { +	__s8		qs_version;	/* version number for future changes */ +	__u16		qs_flags;	/* FS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */ +	__s8		qs_pad;		/* unused */ +	fs_qfilestat_t	qs_uquota;	/* user quota storage information */ +	fs_qfilestat_t	qs_gquota;	/* group quota storage information */ +	__u32		qs_incoredqs;	/* number of dquots incore */ +	__s32		qs_btimelimit;  /* limit for blks timer */	 +	__s32		qs_itimelimit;  /* limit for inodes timer */	 +	__s32		qs_rtbtimelimit;/* limit for rt blks timer */	 +	__u16		qs_bwarnlimit;	/* limit for num warnings */ +	__u16		qs_iwarnlimit;	/* limit for num warnings */ +} fs_quota_stat_t; + +#endif	/* _LINUX_DQBLK_XFS_H */ diff --git a/include/uapi/linux/edd.h b/include/uapi/linux/edd.h new file mode 100644 index 00000000000..89240a04e4c --- /dev/null +++ b/include/uapi/linux/edd.h @@ -0,0 +1,191 @@ +/* + * linux/include/linux/edd.h + *  Copyright (C) 2002, 2003, 2004 Dell Inc. + *  by Matt Domsch <Matt_Domsch@dell.com> + * + * structures and definitions for the int 13h, ax={41,48}h + * BIOS Enhanced Disk Drive Services + * This is based on the T13 group document D1572 Revision 0 (August 14 2002) + * available at http://www.t13.org/docs2002/d1572r0.pdf.  It is + * very similar to D1484 Revision 3 http://www.t13.org/docs2002/d1484r3.pdf + * + * In a nutshell, arch/{i386,x86_64}/boot/setup.S populates a scratch + * table in the boot_params that contains a list of BIOS-enumerated + * boot devices. + * In arch/{i386,x86_64}/kernel/setup.c, this information is + * transferred into the edd structure, and in drivers/firmware/edd.c, that + * information is used to identify BIOS boot disk.  The code in setup.S + * is very sensitive to the size of these structures. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License v2.0 as published by + * the Free Software Foundation + * + * 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. + * + */ +#ifndef _UAPI_LINUX_EDD_H +#define _UAPI_LINUX_EDD_H + +#include <linux/types.h> + +#define EDDNR 0x1e9		/* addr of number of edd_info structs at EDDBUF +				   in boot_params - treat this as 1 byte  */ +#define EDDBUF	0xd00		/* addr of edd_info structs in boot_params */ +#define EDDMAXNR 6		/* number of edd_info structs starting at EDDBUF  */ +#define EDDEXTSIZE 8		/* change these if you muck with the structures */ +#define EDDPARMSIZE 74 +#define CHECKEXTENSIONSPRESENT 0x41 +#define GETDEVICEPARAMETERS 0x48 +#define LEGACYGETDEVICEPARAMETERS 0x08 +#define EDDMAGIC1 0x55AA +#define EDDMAGIC2 0xAA55 + + +#define READ_SECTORS 0x02         /* int13 AH=0x02 is READ_SECTORS command */ +#define EDD_MBR_SIG_OFFSET 0x1B8  /* offset of signature in the MBR */ +#define EDD_MBR_SIG_BUF    0x290  /* addr in boot params */ +#define EDD_MBR_SIG_MAX 16        /* max number of signatures to store */ +#define EDD_MBR_SIG_NR_BUF 0x1ea  /* addr of number of MBR signtaures at EDD_MBR_SIG_BUF +				     in boot_params - treat this as 1 byte  */ + +#ifndef __ASSEMBLY__ + +#define EDD_EXT_FIXED_DISK_ACCESS           (1 << 0) +#define EDD_EXT_DEVICE_LOCKING_AND_EJECTING (1 << 1) +#define EDD_EXT_ENHANCED_DISK_DRIVE_SUPPORT (1 << 2) +#define EDD_EXT_64BIT_EXTENSIONS            (1 << 3) + +#define EDD_INFO_DMA_BOUNDARY_ERROR_TRANSPARENT (1 << 0) +#define EDD_INFO_GEOMETRY_VALID                (1 << 1) +#define EDD_INFO_REMOVABLE                     (1 << 2) +#define EDD_INFO_WRITE_VERIFY                  (1 << 3) +#define EDD_INFO_MEDIA_CHANGE_NOTIFICATION     (1 << 4) +#define EDD_INFO_LOCKABLE                      (1 << 5) +#define EDD_INFO_NO_MEDIA_PRESENT              (1 << 6) +#define EDD_INFO_USE_INT13_FN50                (1 << 7) + +struct edd_device_params { +	__u16 length; +	__u16 info_flags; +	__u32 num_default_cylinders; +	__u32 num_default_heads; +	__u32 sectors_per_track; +	__u64 number_of_sectors; +	__u16 bytes_per_sector; +	__u32 dpte_ptr;		/* 0xFFFFFFFF for our purposes */ +	__u16 key;		/* = 0xBEDD */ +	__u8 device_path_info_length;	/* = 44 */ +	__u8 reserved2; +	__u16 reserved3; +	__u8 host_bus_type[4]; +	__u8 interface_type[8]; +	union { +		struct { +			__u16 base_address; +			__u16 reserved1; +			__u32 reserved2; +		} __attribute__ ((packed)) isa; +		struct { +			__u8 bus; +			__u8 slot; +			__u8 function; +			__u8 channel; +			__u32 reserved; +		} __attribute__ ((packed)) pci; +		/* pcix is same as pci */ +		struct { +			__u64 reserved; +		} __attribute__ ((packed)) ibnd; +		struct { +			__u64 reserved; +		} __attribute__ ((packed)) xprs; +		struct { +			__u64 reserved; +		} __attribute__ ((packed)) htpt; +		struct { +			__u64 reserved; +		} __attribute__ ((packed)) unknown; +	} interface_path; +	union { +		struct { +			__u8 device; +			__u8 reserved1; +			__u16 reserved2; +			__u32 reserved3; +			__u64 reserved4; +		} __attribute__ ((packed)) ata; +		struct { +			__u8 device; +			__u8 lun; +			__u8 reserved1; +			__u8 reserved2; +			__u32 reserved3; +			__u64 reserved4; +		} __attribute__ ((packed)) atapi; +		struct { +			__u16 id; +			__u64 lun; +			__u16 reserved1; +			__u32 reserved2; +		} __attribute__ ((packed)) scsi; +		struct { +			__u64 serial_number; +			__u64 reserved; +		} __attribute__ ((packed)) usb; +		struct { +			__u64 eui; +			__u64 reserved; +		} __attribute__ ((packed)) i1394; +		struct { +			__u64 wwid; +			__u64 lun; +		} __attribute__ ((packed)) fibre; +		struct { +			__u64 identity_tag; +			__u64 reserved; +		} __attribute__ ((packed)) i2o; +		struct { +			__u32 array_number; +			__u32 reserved1; +			__u64 reserved2; +		} __attribute__ ((packed)) raid; +		struct { +			__u8 device; +			__u8 reserved1; +			__u16 reserved2; +			__u32 reserved3; +			__u64 reserved4; +		} __attribute__ ((packed)) sata; +		struct { +			__u64 reserved1; +			__u64 reserved2; +		} __attribute__ ((packed)) unknown; +	} device_path; +	__u8 reserved4; +	__u8 checksum; +} __attribute__ ((packed)); + +struct edd_info { +	__u8 device; +	__u8 version; +	__u16 interface_support; +	__u16 legacy_max_cylinder; +	__u8 legacy_max_head; +	__u8 legacy_sectors_per_track; +	struct edd_device_params params; +} __attribute__ ((packed)); + +struct edd { +	unsigned int mbr_signature[EDD_MBR_SIG_MAX]; +	struct edd_info edd_info[EDDMAXNR]; +	unsigned char mbr_signature_nr; +	unsigned char edd_info_nr; +}; + +#endif				/*!__ASSEMBLY__ */ + +#endif /* _UAPI_LINUX_EDD_H */ diff --git a/include/uapi/linux/efs_fs_sb.h b/include/uapi/linux/efs_fs_sb.h new file mode 100644 index 00000000000..a01be90c58c --- /dev/null +++ b/include/uapi/linux/efs_fs_sb.h @@ -0,0 +1,62 @@ +/* + * efs_fs_sb.h + * + * Copyright (c) 1999 Al Smith + * + * Portions derived from IRIX header files (c) 1988 Silicon Graphics + */ + +#ifndef __EFS_FS_SB_H__ +#define __EFS_FS_SB_H__ + +#include <linux/types.h> +#include <linux/magic.h> + +/* EFS superblock magic numbers */ +#define EFS_MAGIC	0x072959 +#define EFS_NEWMAGIC	0x07295a + +#define IS_EFS_MAGIC(x)	((x == EFS_MAGIC) || (x == EFS_NEWMAGIC)) + +#define EFS_SUPER		1 +#define EFS_ROOTINODE		2 + +/* efs superblock on disk */ +struct efs_super { +	__be32		fs_size;        /* size of filesystem, in sectors */ +	__be32		fs_firstcg;     /* bb offset to first cg */ +	__be32		fs_cgfsize;     /* size of cylinder group in bb's */ +	__be16		fs_cgisize;     /* bb's of inodes per cylinder group */ +	__be16		fs_sectors;     /* sectors per track */ +	__be16		fs_heads;       /* heads per cylinder */ +	__be16		fs_ncg;         /* # of cylinder groups in filesystem */ +	__be16		fs_dirty;       /* fs needs to be fsck'd */ +	__be32		fs_time;        /* last super-block update */ +	__be32		fs_magic;       /* magic number */ +	char		fs_fname[6];    /* file system name */ +	char		fs_fpack[6];    /* file system pack name */ +	__be32		fs_bmsize;      /* size of bitmap in bytes */ +	__be32		fs_tfree;       /* total free data blocks */ +	__be32		fs_tinode;      /* total free inodes */ +	__be32		fs_bmblock;     /* bitmap location. */ +	__be32		fs_replsb;      /* Location of replicated superblock. */ +	__be32		fs_lastialloc;  /* last allocated inode */ +	char		fs_spare[20];   /* space for expansion - MUST BE ZERO */ +	__be32		fs_checksum;    /* checksum of volume portion of fs */ +}; + +/* efs superblock information in memory */ +struct efs_sb_info { +	__u32	fs_magic;	/* superblock magic number */ +	__u32	fs_start;	/* first block of filesystem */ +	__u32	first_block;	/* first data block in filesystem */ +	__u32	total_blocks;	/* total number of blocks in filesystem */ +	__u32	group_size;	/* # of blocks a group consists of */  +	__u32	data_free;	/* # of free data blocks */ +	__u32	inode_free;	/* # of free inodes */ +	__u16	inode_blocks;	/* # of blocks used for inodes in every grp */ +	__u16	total_groups;	/* # of groups */ +}; + +#endif /* __EFS_FS_SB_H__ */ + diff --git a/include/uapi/linux/elf-em.h b/include/uapi/linux/elf-em.h new file mode 100644 index 00000000000..8e2b7bac437 --- /dev/null +++ b/include/uapi/linux/elf-em.h @@ -0,0 +1,56 @@ +#ifndef _LINUX_ELF_EM_H +#define _LINUX_ELF_EM_H + +/* These constants define the various ELF target machines */ +#define EM_NONE		0 +#define EM_M32		1 +#define EM_SPARC	2 +#define EM_386		3 +#define EM_68K		4 +#define EM_88K		5 +#define EM_486		6	/* Perhaps disused */ +#define EM_860		7 +#define EM_MIPS		8	/* MIPS R3000 (officially, big-endian only) */ +				/* Next two are historical and binaries and +				   modules of these types will be rejected by +				   Linux.  */ +#define EM_MIPS_RS3_LE	10	/* MIPS R3000 little-endian */ +#define EM_MIPS_RS4_BE	10	/* MIPS R4000 big-endian */ + +#define EM_PARISC	15	/* HPPA */ +#define EM_SPARC32PLUS	18	/* Sun's "v8plus" */ +#define EM_PPC		20	/* PowerPC */ +#define EM_PPC64	21	 /* PowerPC64 */ +#define EM_SPU		23	/* Cell BE SPU */ +#define EM_SH		42	/* SuperH */ +#define EM_SPARCV9	43	/* SPARC v9 64-bit */ +#define EM_IA_64	50	/* HP/Intel IA-64 */ +#define EM_X86_64	62	/* AMD x86-64 */ +#define EM_S390		22	/* IBM S/390 */ +#define EM_CRIS		76	/* Axis Communications 32-bit embedded processor */ +#define EM_V850		87	/* NEC v850 */ +#define EM_M32R		88	/* Renesas M32R */ +#define EM_H8_300	46	/* Renesas H8/300,300H,H8S */ +#define EM_MN10300	89	/* Panasonic/MEI MN10300, AM33 */ +#define EM_BLACKFIN     106     /* ADI Blackfin Processor */ +#define EM_TI_C6000	140	/* TI C6X DSPs */ +#define EM_FRV		0x5441	/* Fujitsu FR-V */ +#define EM_AVR32	0x18ad	/* Atmel AVR32 */ + +/* + * This is an interim value that we will use until the committee comes + * up with a final number. + */ +#define EM_ALPHA	0x9026 + +/* Bogus old v850 magic number, used by old tools. */ +#define EM_CYGNUS_V850	0x9080 +/* Bogus old m32r magic number, used by old tools. */ +#define EM_CYGNUS_M32R	0x9041 +/* This is the old interim value for S/390 architecture */ +#define EM_S390_OLD	0xA390 +/* Also Panasonic/MEI MN10300, AM33 */ +#define EM_CYGNUS_MN10300 0xbeef + + +#endif /* _LINUX_ELF_EM_H */ diff --git a/include/uapi/linux/elf-fdpic.h b/include/uapi/linux/elf-fdpic.h new file mode 100644 index 00000000000..1065078938f --- /dev/null +++ b/include/uapi/linux/elf-fdpic.h @@ -0,0 +1,70 @@ +/* elf-fdpic.h: FDPIC ELF load map + * + * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * 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. + */ + +#ifndef _LINUX_ELF_FDPIC_H +#define _LINUX_ELF_FDPIC_H + +#include <linux/elf.h> + +#define PT_GNU_STACK    (PT_LOOS + 0x474e551) + +/* segment mappings for ELF FDPIC libraries/executables/interpreters */ +struct elf32_fdpic_loadseg { +	Elf32_Addr	addr;		/* core address to which mapped */ +	Elf32_Addr	p_vaddr;	/* VMA recorded in file */ +	Elf32_Word	p_memsz;	/* allocation size recorded in file */ +}; + +struct elf32_fdpic_loadmap { +	Elf32_Half	version;	/* version of these structures, just in case... */ +	Elf32_Half	nsegs;		/* number of segments */ +	struct elf32_fdpic_loadseg segs[]; +}; + +#define ELF32_FDPIC_LOADMAP_VERSION	0x0000 + +#ifndef __KERNEL__ +/* + * binfmt binary parameters structure + */ +struct elf_fdpic_params { +	struct elfhdr			hdr;		/* ref copy of ELF header */ +	struct elf_phdr			*phdrs;		/* ref copy of PT_PHDR table */ +	struct elf32_fdpic_loadmap	*loadmap;	/* loadmap to be passed to userspace */ +	unsigned long			elfhdr_addr;	/* mapped ELF header user address */ +	unsigned long			ph_addr;	/* mapped PT_PHDR user address */ +	unsigned long			map_addr;	/* mapped loadmap user address */ +	unsigned long			entry_addr;	/* mapped entry user address */ +	unsigned long			stack_size;	/* stack size requested (PT_GNU_STACK) */ +	unsigned long			dynamic_addr;	/* mapped PT_DYNAMIC user address */ +	unsigned long			load_addr;	/* user address at which to map binary */ +	unsigned long			flags; +#define ELF_FDPIC_FLAG_ARRANGEMENT	0x0000000f	/* PT_LOAD arrangement flags */ +#define ELF_FDPIC_FLAG_INDEPENDENT	0x00000000	/* PT_LOADs can be put anywhere */ +#define ELF_FDPIC_FLAG_HONOURVADDR	0x00000001	/* PT_LOAD.vaddr must be honoured */ +#define ELF_FDPIC_FLAG_CONSTDISP	0x00000002	/* PT_LOADs require constant +							 * displacement */ +#define ELF_FDPIC_FLAG_CONTIGUOUS	0x00000003	/* PT_LOADs should be contiguous */ +#define ELF_FDPIC_FLAG_EXEC_STACK	0x00000010	/* T if stack to be executable */ +#define ELF_FDPIC_FLAG_NOEXEC_STACK	0x00000020	/* T if stack not to be executable */ +#define ELF_FDPIC_FLAG_EXECUTABLE	0x00000040	/* T if this object is the executable */ +#define ELF_FDPIC_FLAG_PRESENT		0x80000000	/* T if this object is present */ +}; + +#ifdef CONFIG_MMU +extern void elf_fdpic_arch_lay_out_mm(struct elf_fdpic_params *exec_params, +				      struct elf_fdpic_params *interp_params, +				      unsigned long *start_stack, +				      unsigned long *start_brk); +#endif +#endif /* __KERNEL__ */ + +#endif /* _LINUX_ELF_FDPIC_H */ diff --git a/include/uapi/linux/elf.h b/include/uapi/linux/elf.h new file mode 100644 index 00000000000..126a8175e3e --- /dev/null +++ b/include/uapi/linux/elf.h @@ -0,0 +1,414 @@ +#ifndef _UAPI_LINUX_ELF_H +#define _UAPI_LINUX_ELF_H + +#include <linux/types.h> +#include <linux/elf-em.h> + +/* 32-bit ELF base types. */ +typedef __u32	Elf32_Addr; +typedef __u16	Elf32_Half; +typedef __u32	Elf32_Off; +typedef __s32	Elf32_Sword; +typedef __u32	Elf32_Word; + +/* 64-bit ELF base types. */ +typedef __u64	Elf64_Addr; +typedef __u16	Elf64_Half; +typedef __s16	Elf64_SHalf; +typedef __u64	Elf64_Off; +typedef __s32	Elf64_Sword; +typedef __u32	Elf64_Word; +typedef __u64	Elf64_Xword; +typedef __s64	Elf64_Sxword; + +/* These constants are for the segment types stored in the image headers */ +#define PT_NULL    0 +#define PT_LOAD    1 +#define PT_DYNAMIC 2 +#define PT_INTERP  3 +#define PT_NOTE    4 +#define PT_SHLIB   5 +#define PT_PHDR    6 +#define PT_TLS     7               /* Thread local storage segment */ +#define PT_LOOS    0x60000000      /* OS-specific */ +#define PT_HIOS    0x6fffffff      /* OS-specific */ +#define PT_LOPROC  0x70000000 +#define PT_HIPROC  0x7fffffff +#define PT_GNU_EH_FRAME		0x6474e550 + +#define PT_GNU_STACK	(PT_LOOS + 0x474e551) + +/* + * Extended Numbering + * + * If the real number of program header table entries is larger than + * or equal to PN_XNUM(0xffff), it is set to sh_info field of the + * section header at index 0, and PN_XNUM is set to e_phnum + * field. Otherwise, the section header at index 0 is zero + * initialized, if it exists. + * + * Specifications are available in: + * + * - Sun microsystems: Linker and Libraries. + *   Part No: 817-1984-17, September 2008. + *   URL: http://docs.sun.com/app/docs/doc/817-1984 + * + * - System V ABI AMD64 Architecture Processor Supplement + *   Draft Version 0.99., + *   May 11, 2009. + *   URL: http://www.x86-64.org/ + */ +#define PN_XNUM 0xffff + +/* These constants define the different elf file types */ +#define ET_NONE   0 +#define ET_REL    1 +#define ET_EXEC   2 +#define ET_DYN    3 +#define ET_CORE   4 +#define ET_LOPROC 0xff00 +#define ET_HIPROC 0xffff + +/* This is the info that is needed to parse the dynamic section of the file */ +#define DT_NULL		0 +#define DT_NEEDED	1 +#define DT_PLTRELSZ	2 +#define DT_PLTGOT	3 +#define DT_HASH		4 +#define DT_STRTAB	5 +#define DT_SYMTAB	6 +#define DT_RELA		7 +#define DT_RELASZ	8 +#define DT_RELAENT	9 +#define DT_STRSZ	10 +#define DT_SYMENT	11 +#define DT_INIT		12 +#define DT_FINI		13 +#define DT_SONAME	14 +#define DT_RPATH 	15 +#define DT_SYMBOLIC	16 +#define DT_REL	        17 +#define DT_RELSZ	18 +#define DT_RELENT	19 +#define DT_PLTREL	20 +#define DT_DEBUG	21 +#define DT_TEXTREL	22 +#define DT_JMPREL	23 +#define DT_ENCODING	32 +#define OLD_DT_LOOS	0x60000000 +#define DT_LOOS		0x6000000d +#define DT_HIOS		0x6ffff000 +#define DT_VALRNGLO	0x6ffffd00 +#define DT_VALRNGHI	0x6ffffdff +#define DT_ADDRRNGLO	0x6ffffe00 +#define DT_ADDRRNGHI	0x6ffffeff +#define DT_VERSYM	0x6ffffff0 +#define DT_RELACOUNT	0x6ffffff9 +#define DT_RELCOUNT	0x6ffffffa +#define DT_FLAGS_1	0x6ffffffb +#define DT_VERDEF	0x6ffffffc +#define	DT_VERDEFNUM	0x6ffffffd +#define DT_VERNEED	0x6ffffffe +#define	DT_VERNEEDNUM	0x6fffffff +#define OLD_DT_HIOS     0x6fffffff +#define DT_LOPROC	0x70000000 +#define DT_HIPROC	0x7fffffff + +/* This info is needed when parsing the symbol table */ +#define STB_LOCAL  0 +#define STB_GLOBAL 1 +#define STB_WEAK   2 + +#define STT_NOTYPE  0 +#define STT_OBJECT  1 +#define STT_FUNC    2 +#define STT_SECTION 3 +#define STT_FILE    4 +#define STT_COMMON  5 +#define STT_TLS     6 + +#define ELF_ST_BIND(x)		((x) >> 4) +#define ELF_ST_TYPE(x)		(((unsigned int) x) & 0xf) +#define ELF32_ST_BIND(x)	ELF_ST_BIND(x) +#define ELF32_ST_TYPE(x)	ELF_ST_TYPE(x) +#define ELF64_ST_BIND(x)	ELF_ST_BIND(x) +#define ELF64_ST_TYPE(x)	ELF_ST_TYPE(x) + +typedef struct dynamic{ +  Elf32_Sword d_tag; +  union{ +    Elf32_Sword	d_val; +    Elf32_Addr	d_ptr; +  } d_un; +} Elf32_Dyn; + +typedef struct { +  Elf64_Sxword d_tag;		/* entry tag value */ +  union { +    Elf64_Xword d_val; +    Elf64_Addr d_ptr; +  } d_un; +} Elf64_Dyn; + +/* The following are used with relocations */ +#define ELF32_R_SYM(x) ((x) >> 8) +#define ELF32_R_TYPE(x) ((x) & 0xff) + +#define ELF64_R_SYM(i)			((i) >> 32) +#define ELF64_R_TYPE(i)			((i) & 0xffffffff) + +typedef struct elf32_rel { +  Elf32_Addr	r_offset; +  Elf32_Word	r_info; +} Elf32_Rel; + +typedef struct elf64_rel { +  Elf64_Addr r_offset;	/* Location at which to apply the action */ +  Elf64_Xword r_info;	/* index and type of relocation */ +} Elf64_Rel; + +typedef struct elf32_rela{ +  Elf32_Addr	r_offset; +  Elf32_Word	r_info; +  Elf32_Sword	r_addend; +} Elf32_Rela; + +typedef struct elf64_rela { +  Elf64_Addr r_offset;	/* Location at which to apply the action */ +  Elf64_Xword r_info;	/* index and type of relocation */ +  Elf64_Sxword r_addend;	/* Constant addend used to compute value */ +} Elf64_Rela; + +typedef struct elf32_sym{ +  Elf32_Word	st_name; +  Elf32_Addr	st_value; +  Elf32_Word	st_size; +  unsigned char	st_info; +  unsigned char	st_other; +  Elf32_Half	st_shndx; +} Elf32_Sym; + +typedef struct elf64_sym { +  Elf64_Word st_name;		/* Symbol name, index in string tbl */ +  unsigned char	st_info;	/* Type and binding attributes */ +  unsigned char	st_other;	/* No defined meaning, 0 */ +  Elf64_Half st_shndx;		/* Associated section index */ +  Elf64_Addr st_value;		/* Value of the symbol */ +  Elf64_Xword st_size;		/* Associated symbol size */ +} Elf64_Sym; + + +#define EI_NIDENT	16 + +typedef struct elf32_hdr{ +  unsigned char	e_ident[EI_NIDENT]; +  Elf32_Half	e_type; +  Elf32_Half	e_machine; +  Elf32_Word	e_version; +  Elf32_Addr	e_entry;  /* Entry point */ +  Elf32_Off	e_phoff; +  Elf32_Off	e_shoff; +  Elf32_Word	e_flags; +  Elf32_Half	e_ehsize; +  Elf32_Half	e_phentsize; +  Elf32_Half	e_phnum; +  Elf32_Half	e_shentsize; +  Elf32_Half	e_shnum; +  Elf32_Half	e_shstrndx; +} Elf32_Ehdr; + +typedef struct elf64_hdr { +  unsigned char	e_ident[EI_NIDENT];	/* ELF "magic number" */ +  Elf64_Half e_type; +  Elf64_Half e_machine; +  Elf64_Word e_version; +  Elf64_Addr e_entry;		/* Entry point virtual address */ +  Elf64_Off e_phoff;		/* Program header table file offset */ +  Elf64_Off e_shoff;		/* Section header table file offset */ +  Elf64_Word e_flags; +  Elf64_Half e_ehsize; +  Elf64_Half e_phentsize; +  Elf64_Half e_phnum; +  Elf64_Half e_shentsize; +  Elf64_Half e_shnum; +  Elf64_Half e_shstrndx; +} Elf64_Ehdr; + +/* These constants define the permissions on sections in the program +   header, p_flags. */ +#define PF_R		0x4 +#define PF_W		0x2 +#define PF_X		0x1 + +typedef struct elf32_phdr{ +  Elf32_Word	p_type; +  Elf32_Off	p_offset; +  Elf32_Addr	p_vaddr; +  Elf32_Addr	p_paddr; +  Elf32_Word	p_filesz; +  Elf32_Word	p_memsz; +  Elf32_Word	p_flags; +  Elf32_Word	p_align; +} Elf32_Phdr; + +typedef struct elf64_phdr { +  Elf64_Word p_type; +  Elf64_Word p_flags; +  Elf64_Off p_offset;		/* Segment file offset */ +  Elf64_Addr p_vaddr;		/* Segment virtual address */ +  Elf64_Addr p_paddr;		/* Segment physical address */ +  Elf64_Xword p_filesz;		/* Segment size in file */ +  Elf64_Xword p_memsz;		/* Segment size in memory */ +  Elf64_Xword p_align;		/* Segment alignment, file & memory */ +} Elf64_Phdr; + +/* sh_type */ +#define SHT_NULL	0 +#define SHT_PROGBITS	1 +#define SHT_SYMTAB	2 +#define SHT_STRTAB	3 +#define SHT_RELA	4 +#define SHT_HASH	5 +#define SHT_DYNAMIC	6 +#define SHT_NOTE	7 +#define SHT_NOBITS	8 +#define SHT_REL		9 +#define SHT_SHLIB	10 +#define SHT_DYNSYM	11 +#define SHT_NUM		12 +#define SHT_LOPROC	0x70000000 +#define SHT_HIPROC	0x7fffffff +#define SHT_LOUSER	0x80000000 +#define SHT_HIUSER	0xffffffff + +/* sh_flags */ +#define SHF_WRITE	0x1 +#define SHF_ALLOC	0x2 +#define SHF_EXECINSTR	0x4 +#define SHF_MASKPROC	0xf0000000 + +/* special section indexes */ +#define SHN_UNDEF	0 +#define SHN_LORESERVE	0xff00 +#define SHN_LOPROC	0xff00 +#define SHN_HIPROC	0xff1f +#define SHN_ABS		0xfff1 +#define SHN_COMMON	0xfff2 +#define SHN_HIRESERVE	0xffff +  +typedef struct elf32_shdr { +  Elf32_Word	sh_name; +  Elf32_Word	sh_type; +  Elf32_Word	sh_flags; +  Elf32_Addr	sh_addr; +  Elf32_Off	sh_offset; +  Elf32_Word	sh_size; +  Elf32_Word	sh_link; +  Elf32_Word	sh_info; +  Elf32_Word	sh_addralign; +  Elf32_Word	sh_entsize; +} Elf32_Shdr; + +typedef struct elf64_shdr { +  Elf64_Word sh_name;		/* Section name, index in string tbl */ +  Elf64_Word sh_type;		/* Type of section */ +  Elf64_Xword sh_flags;		/* Miscellaneous section attributes */ +  Elf64_Addr sh_addr;		/* Section virtual addr at execution */ +  Elf64_Off sh_offset;		/* Section file offset */ +  Elf64_Xword sh_size;		/* Size of section in bytes */ +  Elf64_Word sh_link;		/* Index of another section */ +  Elf64_Word sh_info;		/* Additional section information */ +  Elf64_Xword sh_addralign;	/* Section alignment */ +  Elf64_Xword sh_entsize;	/* Entry size if section holds table */ +} Elf64_Shdr; + +#define	EI_MAG0		0		/* e_ident[] indexes */ +#define	EI_MAG1		1 +#define	EI_MAG2		2 +#define	EI_MAG3		3 +#define	EI_CLASS	4 +#define	EI_DATA		5 +#define	EI_VERSION	6 +#define	EI_OSABI	7 +#define	EI_PAD		8 + +#define	ELFMAG0		0x7f		/* EI_MAG */ +#define	ELFMAG1		'E' +#define	ELFMAG2		'L' +#define	ELFMAG3		'F' +#define	ELFMAG		"\177ELF" +#define	SELFMAG		4 + +#define	ELFCLASSNONE	0		/* EI_CLASS */ +#define	ELFCLASS32	1 +#define	ELFCLASS64	2 +#define	ELFCLASSNUM	3 + +#define ELFDATANONE	0		/* e_ident[EI_DATA] */ +#define ELFDATA2LSB	1 +#define ELFDATA2MSB	2 + +#define EV_NONE		0		/* e_version, EI_VERSION */ +#define EV_CURRENT	1 +#define EV_NUM		2 + +#define ELFOSABI_NONE	0 +#define ELFOSABI_LINUX	3 + +#ifndef ELF_OSABI +#define ELF_OSABI ELFOSABI_NONE +#endif + +/* + * Notes used in ET_CORE. Architectures export some of the arch register sets + * using the corresponding note types via the PTRACE_GETREGSET and + * PTRACE_SETREGSET requests. + */ +#define NT_PRSTATUS	1 +#define NT_PRFPREG	2 +#define NT_PRPSINFO	3 +#define NT_TASKSTRUCT	4 +#define NT_AUXV		6 +/* + * Note to userspace developers: size of NT_SIGINFO note may increase + * in the future to accomodate more fields, don't assume it is fixed! + */ +#define NT_SIGINFO      0x53494749 +#define NT_FILE         0x46494c45 +#define NT_PRXFPREG     0x46e62b7f      /* copied from gdb5.1/include/elf/common.h */ +#define NT_PPC_VMX	0x100		/* PowerPC Altivec/VMX registers */ +#define NT_PPC_SPE	0x101		/* PowerPC SPE/EVR registers */ +#define NT_PPC_VSX	0x102		/* PowerPC VSX registers */ +#define NT_386_TLS	0x200		/* i386 TLS slots (struct user_desc) */ +#define NT_386_IOPERM	0x201		/* x86 io permission bitmap (1=deny) */ +#define NT_X86_XSTATE	0x202		/* x86 extended state using xsave */ +#define NT_S390_HIGH_GPRS	0x300	/* s390 upper register halves */ +#define NT_S390_TIMER	0x301		/* s390 timer register */ +#define NT_S390_TODCMP	0x302		/* s390 TOD clock comparator register */ +#define NT_S390_TODPREG	0x303		/* s390 TOD programmable register */ +#define NT_S390_CTRS	0x304		/* s390 control registers */ +#define NT_S390_PREFIX	0x305		/* s390 prefix register */ +#define NT_S390_LAST_BREAK	0x306	/* s390 breaking event address */ +#define NT_S390_SYSTEM_CALL	0x307	/* s390 system call restart data */ +#define NT_S390_TDB	0x308		/* s390 transaction diagnostic block */ +#define NT_ARM_VFP	0x400		/* ARM VFP/NEON registers */ +#define NT_ARM_TLS	0x401		/* ARM TLS register */ +#define NT_ARM_HW_BREAK	0x402		/* ARM hardware breakpoint registers */ +#define NT_ARM_HW_WATCH	0x403		/* ARM hardware watchpoint registers */ + + +/* Note header in a PT_NOTE section */ +typedef struct elf32_note { +  Elf32_Word	n_namesz;	/* Name size */ +  Elf32_Word	n_descsz;	/* Content size */ +  Elf32_Word	n_type;		/* Content type */ +} Elf32_Nhdr; + +/* Note header in a PT_NOTE section */ +typedef struct elf64_note { +  Elf64_Word n_namesz;	/* Name size */ +  Elf64_Word n_descsz;	/* Content size */ +  Elf64_Word n_type;	/* Content type */ +} Elf64_Nhdr; + +#endif /* _UAPI_LINUX_ELF_H */ diff --git a/include/uapi/linux/elfcore.h b/include/uapi/linux/elfcore.h new file mode 100644 index 00000000000..569737cfb55 --- /dev/null +++ b/include/uapi/linux/elfcore.h @@ -0,0 +1,100 @@ +#ifndef _UAPI_LINUX_ELFCORE_H +#define _UAPI_LINUX_ELFCORE_H + +#include <linux/types.h> +#include <linux/signal.h> +#include <linux/time.h> +#include <linux/ptrace.h> +#include <linux/elf.h> +#include <linux/fs.h> + +struct elf_siginfo +{ +	int	si_signo;			/* signal number */ +	int	si_code;			/* extra code */ +	int	si_errno;			/* errno */ +}; + + +#ifndef __KERNEL__ +typedef elf_greg_t greg_t; +typedef elf_gregset_t gregset_t; +typedef elf_fpregset_t fpregset_t; +typedef elf_fpxregset_t fpxregset_t; +#define NGREG ELF_NGREG +#endif + +/* + * Definitions to generate Intel SVR4-like core files. + * These mostly have the same names as the SVR4 types with "elf_" + * tacked on the front to prevent clashes with linux definitions, + * and the typedef forms have been avoided.  This is mostly like + * the SVR4 structure, but more Linuxy, with things that Linux does + * not support and which gdb doesn't really use excluded. + * Fields present but not used are marked with "XXX". + */ +struct elf_prstatus +{ +#if 0 +	long	pr_flags;	/* XXX Process flags */ +	short	pr_why;		/* XXX Reason for process halt */ +	short	pr_what;	/* XXX More detailed reason */ +#endif +	struct elf_siginfo pr_info;	/* Info associated with signal */ +	short	pr_cursig;		/* Current signal */ +	unsigned long pr_sigpend;	/* Set of pending signals */ +	unsigned long pr_sighold;	/* Set of held signals */ +#if 0 +	struct sigaltstack pr_altstack;	/* Alternate stack info */ +	struct sigaction pr_action;	/* Signal action for current sig */ +#endif +	pid_t	pr_pid; +	pid_t	pr_ppid; +	pid_t	pr_pgrp; +	pid_t	pr_sid; +	struct timeval pr_utime;	/* User time */ +	struct timeval pr_stime;	/* System time */ +	struct timeval pr_cutime;	/* Cumulative user time */ +	struct timeval pr_cstime;	/* Cumulative system time */ +#if 0 +	long	pr_instr;		/* Current instruction */ +#endif +	elf_gregset_t pr_reg;	/* GP registers */ +#ifdef CONFIG_BINFMT_ELF_FDPIC +	/* When using FDPIC, the loadmap addresses need to be communicated +	 * to GDB in order for GDB to do the necessary relocations.  The +	 * fields (below) used to communicate this information are placed +	 * immediately after ``pr_reg'', so that the loadmap addresses may +	 * be viewed as part of the register set if so desired. +	 */ +	unsigned long pr_exec_fdpic_loadmap; +	unsigned long pr_interp_fdpic_loadmap; +#endif +	int pr_fpvalid;		/* True if math co-processor being used.  */ +}; + +#define ELF_PRARGSZ	(80)	/* Number of chars for args */ + +struct elf_prpsinfo +{ +	char	pr_state;	/* numeric process state */ +	char	pr_sname;	/* char for pr_state */ +	char	pr_zomb;	/* zombie */ +	char	pr_nice;	/* nice val */ +	unsigned long pr_flag;	/* flags */ +	__kernel_uid_t	pr_uid; +	__kernel_gid_t	pr_gid; +	pid_t	pr_pid, pr_ppid, pr_pgrp, pr_sid; +	/* Lots missing */ +	char	pr_fname[16];	/* filename of executable */ +	char	pr_psargs[ELF_PRARGSZ];	/* initial part of arg list */ +}; + +#ifndef __KERNEL__ +typedef struct elf_prstatus prstatus_t; +typedef struct elf_prpsinfo prpsinfo_t; +#define PRARGSZ ELF_PRARGSZ  +#endif + + +#endif /* _UAPI_LINUX_ELFCORE_H */ diff --git a/include/uapi/linux/errno.h b/include/uapi/linux/errno.h new file mode 100644 index 00000000000..70f2bd34e33 --- /dev/null +++ b/include/uapi/linux/errno.h @@ -0,0 +1 @@ +#include <asm/errno.h> diff --git a/include/uapi/linux/errqueue.h b/include/uapi/linux/errqueue.h new file mode 100644 index 00000000000..aacd4fb7102 --- /dev/null +++ b/include/uapi/linux/errqueue.h @@ -0,0 +1,26 @@ +#ifndef _UAPI_LINUX_ERRQUEUE_H +#define _UAPI_LINUX_ERRQUEUE_H + +#include <linux/types.h> + +struct sock_extended_err { +	__u32	ee_errno;	 +	__u8	ee_origin; +	__u8	ee_type; +	__u8	ee_code; +	__u8	ee_pad; +	__u32   ee_info; +	__u32   ee_data; +}; + +#define SO_EE_ORIGIN_NONE	0 +#define SO_EE_ORIGIN_LOCAL	1 +#define SO_EE_ORIGIN_ICMP	2 +#define SO_EE_ORIGIN_ICMP6	3 +#define SO_EE_ORIGIN_TXSTATUS	4 +#define SO_EE_ORIGIN_TIMESTAMPING SO_EE_ORIGIN_TXSTATUS + +#define SO_EE_OFFENDER(ee)	((struct sockaddr*)((ee)+1)) + + +#endif /* _UAPI_LINUX_ERRQUEUE_H */ diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h new file mode 100644 index 00000000000..d3eaaaf1009 --- /dev/null +++ b/include/uapi/linux/ethtool.h @@ -0,0 +1,1085 @@ +/* + * ethtool.h: Defines for Linux ethtool. + * + * Copyright (C) 1998 David S. Miller (davem@redhat.com) + * Copyright 2001 Jeff Garzik <jgarzik@pobox.com> + * Portions Copyright 2001 Sun Microsystems (thockin@sun.com) + * Portions Copyright 2002 Intel (eli.kupermann@intel.com, + *                                christopher.leech@intel.com, + *                                scott.feldman@intel.com) + * Portions Copyright (C) Sun Microsystems 2008 + */ + +#ifndef _UAPI_LINUX_ETHTOOL_H +#define _UAPI_LINUX_ETHTOOL_H + +#include <linux/types.h> +#include <linux/if_ether.h> + +/* This should work for both 32 and 64 bit userland. */ +struct ethtool_cmd { +	__u32	cmd; +	__u32	supported;	/* Features this interface supports */ +	__u32	advertising;	/* Features this interface advertises */ +	__u16	speed;	        /* The forced speed (lower bits) in +				 * Mbps. Please use +				 * ethtool_cmd_speed()/_set() to +				 * access it */ +	__u8	duplex;		/* Duplex, half or full */ +	__u8	port;		/* Which connector port */ +	__u8	phy_address;	/* MDIO PHY address (PRTAD for clause 45). +				 * May be read-only or read-write +				 * depending on the driver. +				 */ +	__u8	transceiver;	/* Which transceiver to use */ +	__u8	autoneg;	/* Enable or disable autonegotiation */ +	__u8	mdio_support;	/* MDIO protocols supported.  Read-only. +				 * Not set by all drivers. +				 */ +	__u32	maxtxpkt;	/* Tx pkts before generating tx int */ +	__u32	maxrxpkt;	/* Rx pkts before generating rx int */ +	__u16	speed_hi;       /* The forced speed (upper +				 * bits) in Mbps. Please use +				 * ethtool_cmd_speed()/_set() to +				 * access it */ +	__u8	eth_tp_mdix;	/* twisted pair MDI-X status */ +	__u8    eth_tp_mdix_ctrl; /* twisted pair MDI-X control, when set, +				   * link should be renegotiated if necessary +				   */ +	__u32	lp_advertising;	/* Features the link partner advertises */ +	__u32	reserved[2]; +}; + +static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep, +					 __u32 speed) +{ + +	ep->speed = (__u16)speed; +	ep->speed_hi = (__u16)(speed >> 16); +} + +static inline __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep) +{ +	return (ep->speed_hi << 16) | ep->speed; +} + +/* Device supports clause 22 register access to PHY or peripherals + * using the interface defined in <linux/mii.h>.  This should not be + * set if there are known to be no such peripherals present or if + * the driver only emulates clause 22 registers for compatibility. + */ +#define ETH_MDIO_SUPPORTS_C22	1 + +/* Device supports clause 45 register access to PHY or peripherals + * using the interface defined in <linux/mii.h> and <linux/mdio.h>. + * This should not be set if there are known to be no such peripherals + * present. + */ +#define ETH_MDIO_SUPPORTS_C45	2 + +#define ETHTOOL_FWVERS_LEN	32 +#define ETHTOOL_BUSINFO_LEN	32 +/* these strings are set to whatever the driver author decides... */ +struct ethtool_drvinfo { +	__u32	cmd; +	char	driver[32];	/* driver short name, "tulip", "eepro100" */ +	char	version[32];	/* driver version string */ +	char	fw_version[ETHTOOL_FWVERS_LEN];	/* firmware version string */ +	char	bus_info[ETHTOOL_BUSINFO_LEN];	/* Bus info for this IF. */ +				/* For PCI devices, use pci_name(pci_dev). */ +	char	reserved1[32]; +	char	reserved2[12]; +				/* +				 * Some struct members below are filled in +				 * using ops->get_sset_count().  Obtaining +				 * this info from ethtool_drvinfo is now +				 * deprecated; Use ETHTOOL_GSSET_INFO +				 * instead. +				 */ +	__u32	n_priv_flags;	/* number of flags valid in ETHTOOL_GPFLAGS */ +	__u32	n_stats;	/* number of u64's from ETHTOOL_GSTATS */ +	__u32	testinfo_len; +	__u32	eedump_len;	/* Size of data from ETHTOOL_GEEPROM (bytes) */ +	__u32	regdump_len;	/* Size of data from ETHTOOL_GREGS (bytes) */ +}; + +#define SOPASS_MAX	6 +/* wake-on-lan settings */ +struct ethtool_wolinfo { +	__u32	cmd; +	__u32	supported; +	__u32	wolopts; +	__u8	sopass[SOPASS_MAX]; /* SecureOn(tm) password */ +}; + +/* for passing single values */ +struct ethtool_value { +	__u32	cmd; +	__u32	data; +}; + +/* for passing big chunks of data */ +struct ethtool_regs { +	__u32	cmd; +	__u32	version; /* driver-specific, indicates different chips/revs */ +	__u32	len; /* bytes */ +	__u8	data[0]; +}; + +/* for passing EEPROM chunks */ +struct ethtool_eeprom { +	__u32	cmd; +	__u32	magic; +	__u32	offset; /* in bytes */ +	__u32	len; /* in bytes */ +	__u8	data[0]; +}; + +/** + * struct ethtool_eee - Energy Efficient Ethernet information + * @cmd: ETHTOOL_{G,S}EEE + * @supported: Mask of %SUPPORTED_* flags for the speed/duplex combinations + *	for which there is EEE support. + * @advertised: Mask of %ADVERTISED_* flags for the speed/duplex combinations + *	advertised as eee capable. + * @lp_advertised: Mask of %ADVERTISED_* flags for the speed/duplex + *	combinations advertised by the link partner as eee capable. + * @eee_active: Result of the eee auto negotiation. + * @eee_enabled: EEE configured mode (enabled/disabled). + * @tx_lpi_enabled: Whether the interface should assert its tx lpi, given + *	that eee was negotiated. + * @tx_lpi_timer: Time in microseconds the interface delays prior to asserting + *	its tx lpi (after reaching 'idle' state). Effective only when eee + *	was negotiated and tx_lpi_enabled was set. + */ +struct ethtool_eee { +	__u32	cmd; +	__u32	supported; +	__u32	advertised; +	__u32	lp_advertised; +	__u32	eee_active; +	__u32	eee_enabled; +	__u32	tx_lpi_enabled; +	__u32	tx_lpi_timer; +	__u32	reserved[2]; +}; + +/** + * struct ethtool_modinfo - plugin module eeprom information + * @cmd: %ETHTOOL_GMODULEINFO + * @type: Standard the module information conforms to %ETH_MODULE_SFF_xxxx + * @eeprom_len: Length of the eeprom + * + * This structure is used to return the information to + * properly size memory for a subsequent call to %ETHTOOL_GMODULEEEPROM. + * The type code indicates the eeprom data format + */ +struct ethtool_modinfo { +	__u32   cmd; +	__u32   type; +	__u32   eeprom_len; +	__u32   reserved[8]; +}; + +/** + * struct ethtool_coalesce - coalescing parameters for IRQs and stats updates + * @cmd: ETHTOOL_{G,S}COALESCE + * @rx_coalesce_usecs: How many usecs to delay an RX interrupt after + *	a packet arrives. + * @rx_max_coalesced_frames: Maximum number of packets to receive + *	before an RX interrupt. + * @rx_coalesce_usecs_irq: Same as @rx_coalesce_usecs, except that + *	this value applies while an IRQ is being serviced by the host. + * @rx_max_coalesced_frames_irq: Same as @rx_max_coalesced_frames, + *	except that this value applies while an IRQ is being serviced + *	by the host. + * @tx_coalesce_usecs: How many usecs to delay a TX interrupt after + *	a packet is sent. + * @tx_max_coalesced_frames: Maximum number of packets to be sent + *	before a TX interrupt. + * @tx_coalesce_usecs_irq: Same as @tx_coalesce_usecs, except that + *	this value applies while an IRQ is being serviced by the host. + * @tx_max_coalesced_frames_irq: Same as @tx_max_coalesced_frames, + *	except that this value applies while an IRQ is being serviced + *	by the host. + * @stats_block_coalesce_usecs: How many usecs to delay in-memory + *	statistics block updates.  Some drivers do not have an + *	in-memory statistic block, and in such cases this value is + *	ignored.  This value must not be zero. + * @use_adaptive_rx_coalesce: Enable adaptive RX coalescing. + * @use_adaptive_tx_coalesce: Enable adaptive TX coalescing. + * @pkt_rate_low: Threshold for low packet rate (packets per second). + * @rx_coalesce_usecs_low: How many usecs to delay an RX interrupt after + *	a packet arrives, when the packet rate is below @pkt_rate_low. + * @rx_max_coalesced_frames_low: Maximum number of packets to be received + *	before an RX interrupt, when the packet rate is below @pkt_rate_low. + * @tx_coalesce_usecs_low: How many usecs to delay a TX interrupt after + *	a packet is sent, when the packet rate is below @pkt_rate_low. + * @tx_max_coalesced_frames_low: Maximum nuumber of packets to be sent before + *	a TX interrupt, when the packet rate is below @pkt_rate_low. + * @pkt_rate_high: Threshold for high packet rate (packets per second). + * @rx_coalesce_usecs_high: How many usecs to delay an RX interrupt after + *	a packet arrives, when the packet rate is above @pkt_rate_high. + * @rx_max_coalesced_frames_high: Maximum number of packets to be received + *	before an RX interrupt, when the packet rate is above @pkt_rate_high. + * @tx_coalesce_usecs_high: How many usecs to delay a TX interrupt after + *	a packet is sent, when the packet rate is above @pkt_rate_high. + * @tx_max_coalesced_frames_high: Maximum number of packets to be sent before + *	a TX interrupt, when the packet rate is above @pkt_rate_high. + * @rate_sample_interval: How often to do adaptive coalescing packet rate + *	sampling, measured in seconds.  Must not be zero. + * + * Each pair of (usecs, max_frames) fields specifies this exit + * condition for interrupt coalescing: + *	(usecs > 0 && time_since_first_completion >= usecs) || + *	(max_frames > 0 && completed_frames >= max_frames) + * It is illegal to set both usecs and max_frames to zero as this + * would cause interrupts to never be generated.  To disable + * coalescing, set usecs = 0 and max_frames = 1. + * + * Some implementations ignore the value of max_frames and use the + * condition: + *	time_since_first_completion >= usecs + * This is deprecated.  Drivers for hardware that does not support + * counting completions should validate that max_frames == !rx_usecs. + * + * Adaptive RX/TX coalescing is an algorithm implemented by some + * drivers to improve latency under low packet rates and improve + * throughput under high packet rates.  Some drivers only implement + * one of RX or TX adaptive coalescing.  Anything not implemented by + * the driver causes these values to be silently ignored. + * + * When the packet rate is below @pkt_rate_high but above + * @pkt_rate_low (both measured in packets per second) the + * normal {rx,tx}_* coalescing parameters are used. + */ +struct ethtool_coalesce { +	__u32	cmd; +	__u32	rx_coalesce_usecs; +	__u32	rx_max_coalesced_frames; +	__u32	rx_coalesce_usecs_irq; +	__u32	rx_max_coalesced_frames_irq; +	__u32	tx_coalesce_usecs; +	__u32	tx_max_coalesced_frames; +	__u32	tx_coalesce_usecs_irq; +	__u32	tx_max_coalesced_frames_irq; +	__u32	stats_block_coalesce_usecs; +	__u32	use_adaptive_rx_coalesce; +	__u32	use_adaptive_tx_coalesce; +	__u32	pkt_rate_low; +	__u32	rx_coalesce_usecs_low; +	__u32	rx_max_coalesced_frames_low; +	__u32	tx_coalesce_usecs_low; +	__u32	tx_max_coalesced_frames_low; +	__u32	pkt_rate_high; +	__u32	rx_coalesce_usecs_high; +	__u32	rx_max_coalesced_frames_high; +	__u32	tx_coalesce_usecs_high; +	__u32	tx_max_coalesced_frames_high; +	__u32	rate_sample_interval; +}; + +/* for configuring RX/TX ring parameters */ +struct ethtool_ringparam { +	__u32	cmd;	/* ETHTOOL_{G,S}RINGPARAM */ + +	/* Read only attributes.  These indicate the maximum number +	 * of pending RX/TX ring entries the driver will allow the +	 * user to set. +	 */ +	__u32	rx_max_pending; +	__u32	rx_mini_max_pending; +	__u32	rx_jumbo_max_pending; +	__u32	tx_max_pending; + +	/* Values changeable by the user.  The valid values are +	 * in the range 1 to the "*_max_pending" counterpart above. +	 */ +	__u32	rx_pending; +	__u32	rx_mini_pending; +	__u32	rx_jumbo_pending; +	__u32	tx_pending; +}; + +/** + * struct ethtool_channels - configuring number of network channel + * @cmd: ETHTOOL_{G,S}CHANNELS + * @max_rx: Read only. Maximum number of receive channel the driver support. + * @max_tx: Read only. Maximum number of transmit channel the driver support. + * @max_other: Read only. Maximum number of other channel the driver support. + * @max_combined: Read only. Maximum number of combined channel the driver + *	support. Set of queues RX, TX or other. + * @rx_count: Valid values are in the range 1 to the max_rx. + * @tx_count: Valid values are in the range 1 to the max_tx. + * @other_count: Valid values are in the range 1 to the max_other. + * @combined_count: Valid values are in the range 1 to the max_combined. + * + * This can be used to configure RX, TX and other channels. + */ + +struct ethtool_channels { +	__u32	cmd; +	__u32	max_rx; +	__u32	max_tx; +	__u32	max_other; +	__u32	max_combined; +	__u32	rx_count; +	__u32	tx_count; +	__u32	other_count; +	__u32	combined_count; +}; + +/* for configuring link flow control parameters */ +struct ethtool_pauseparam { +	__u32	cmd;	/* ETHTOOL_{G,S}PAUSEPARAM */ + +	/* If the link is being auto-negotiated (via ethtool_cmd.autoneg +	 * being true) the user may set 'autoneg' here non-zero to have the +	 * pause parameters be auto-negotiated too.  In such a case, the +	 * {rx,tx}_pause values below determine what capabilities are +	 * advertised. +	 * +	 * If 'autoneg' is zero or the link is not being auto-negotiated, +	 * then {rx,tx}_pause force the driver to use/not-use pause +	 * flow control. +	 */ +	__u32	autoneg; +	__u32	rx_pause; +	__u32	tx_pause; +}; + +#define ETH_GSTRING_LEN		32 +enum ethtool_stringset { +	ETH_SS_TEST		= 0, +	ETH_SS_STATS, +	ETH_SS_PRIV_FLAGS, +	ETH_SS_NTUPLE_FILTERS,	/* Do not use, GRXNTUPLE is now deprecated */ +	ETH_SS_FEATURES, +}; + +/* for passing string sets for data tagging */ +struct ethtool_gstrings { +	__u32	cmd;		/* ETHTOOL_GSTRINGS */ +	__u32	string_set;	/* string set id e.c. ETH_SS_TEST, etc*/ +	__u32	len;		/* number of strings in the string set */ +	__u8	data[0]; +}; + +struct ethtool_sset_info { +	__u32	cmd;		/* ETHTOOL_GSSET_INFO */ +	__u32	reserved; +	__u64	sset_mask;	/* input: each bit selects an sset to query */ +				/* output: each bit a returned sset */ +	__u32	data[0];	/* ETH_SS_xxx count, in order, based on bits +				   in sset_mask.  One bit implies one +				   __u32, two bits implies two +				   __u32's, etc. */ +}; + +/** + * enum ethtool_test_flags - flags definition of ethtool_test + * @ETH_TEST_FL_OFFLINE: if set perform online and offline tests, otherwise + *	only online tests. + * @ETH_TEST_FL_FAILED: Driver set this flag if test fails. + * @ETH_TEST_FL_EXTERNAL_LB: Application request to perform external loopback + *	test. + * @ETH_TEST_FL_EXTERNAL_LB_DONE: Driver performed the external loopback test + */ + +enum ethtool_test_flags { +	ETH_TEST_FL_OFFLINE	= (1 << 0), +	ETH_TEST_FL_FAILED	= (1 << 1), +	ETH_TEST_FL_EXTERNAL_LB	= (1 << 2), +	ETH_TEST_FL_EXTERNAL_LB_DONE	= (1 << 3), +}; + +/* for requesting NIC test and getting results*/ +struct ethtool_test { +	__u32	cmd;		/* ETHTOOL_TEST */ +	__u32	flags;		/* ETH_TEST_FL_xxx */ +	__u32	reserved; +	__u32	len;		/* result length, in number of u64 elements */ +	__u64	data[0]; +}; + +/* for dumping NIC-specific statistics */ +struct ethtool_stats { +	__u32	cmd;		/* ETHTOOL_GSTATS */ +	__u32	n_stats;	/* number of u64's being returned */ +	__u64	data[0]; +}; + +struct ethtool_perm_addr { +	__u32	cmd;		/* ETHTOOL_GPERMADDR */ +	__u32	size; +	__u8	data[0]; +}; + +/* boolean flags controlling per-interface behavior characteristics. + * When reading, the flag indicates whether or not a certain behavior + * is enabled/present.  When writing, the flag indicates whether + * or not the driver should turn on (set) or off (clear) a behavior. + * + * Some behaviors may read-only (unconditionally absent or present). + * If such is the case, return EINVAL in the set-flags operation if the + * flag differs from the read-only value. + */ +enum ethtool_flags { +	ETH_FLAG_TXVLAN		= (1 << 7),	/* TX VLAN offload enabled */ +	ETH_FLAG_RXVLAN		= (1 << 8),	/* RX VLAN offload enabled */ +	ETH_FLAG_LRO		= (1 << 15),	/* LRO is enabled */ +	ETH_FLAG_NTUPLE		= (1 << 27),	/* N-tuple filters enabled */ +	ETH_FLAG_RXHASH		= (1 << 28), +}; + +/* The following structures are for supporting RX network flow + * classification and RX n-tuple configuration. Note, all multibyte + * fields, e.g., ip4src, ip4dst, psrc, pdst, spi, etc. are expected to + * be in network byte order. + */ + +/** + * struct ethtool_tcpip4_spec - flow specification for TCP/IPv4 etc. + * @ip4src: Source host + * @ip4dst: Destination host + * @psrc: Source port + * @pdst: Destination port + * @tos: Type-of-service + * + * This can be used to specify a TCP/IPv4, UDP/IPv4 or SCTP/IPv4 flow. + */ +struct ethtool_tcpip4_spec { +	__be32	ip4src; +	__be32	ip4dst; +	__be16	psrc; +	__be16	pdst; +	__u8    tos; +}; + +/** + * struct ethtool_ah_espip4_spec - flow specification for IPsec/IPv4 + * @ip4src: Source host + * @ip4dst: Destination host + * @spi: Security parameters index + * @tos: Type-of-service + * + * This can be used to specify an IPsec transport or tunnel over IPv4. + */ +struct ethtool_ah_espip4_spec { +	__be32	ip4src; +	__be32	ip4dst; +	__be32	spi; +	__u8    tos; +}; + +#define	ETH_RX_NFC_IP4	1 + +/** + * struct ethtool_usrip4_spec - general flow specification for IPv4 + * @ip4src: Source host + * @ip4dst: Destination host + * @l4_4_bytes: First 4 bytes of transport (layer 4) header + * @tos: Type-of-service + * @ip_ver: Value must be %ETH_RX_NFC_IP4; mask must be 0 + * @proto: Transport protocol number; mask must be 0 + */ +struct ethtool_usrip4_spec { +	__be32	ip4src; +	__be32	ip4dst; +	__be32	l4_4_bytes; +	__u8    tos; +	__u8    ip_ver; +	__u8    proto; +}; + +union ethtool_flow_union { +	struct ethtool_tcpip4_spec		tcp_ip4_spec; +	struct ethtool_tcpip4_spec		udp_ip4_spec; +	struct ethtool_tcpip4_spec		sctp_ip4_spec; +	struct ethtool_ah_espip4_spec		ah_ip4_spec; +	struct ethtool_ah_espip4_spec		esp_ip4_spec; +	struct ethtool_usrip4_spec		usr_ip4_spec; +	struct ethhdr				ether_spec; +	__u8					hdata[60]; +}; + +struct ethtool_flow_ext { +	__be16	vlan_etype; +	__be16	vlan_tci; +	__be32	data[2]; +}; + +/** + * struct ethtool_rx_flow_spec - classification rule for RX flows + * @flow_type: Type of match to perform, e.g. %TCP_V4_FLOW + * @h_u: Flow fields to match (dependent on @flow_type) + * @h_ext: Additional fields to match + * @m_u: Masks for flow field bits to be matched + * @m_ext: Masks for additional field bits to be matched + *	Note, all additional fields must be ignored unless @flow_type + *	includes the %FLOW_EXT flag. + * @ring_cookie: RX ring/queue index to deliver to, or %RX_CLS_FLOW_DISC + *	if packets should be discarded + * @location: Location of rule in the table.  Locations must be + *	numbered such that a flow matching multiple rules will be + *	classified according to the first (lowest numbered) rule. + */ +struct ethtool_rx_flow_spec { +	__u32		flow_type; +	union ethtool_flow_union h_u; +	struct ethtool_flow_ext h_ext; +	union ethtool_flow_union m_u; +	struct ethtool_flow_ext m_ext; +	__u64		ring_cookie; +	__u32		location; +}; + +/** + * struct ethtool_rxnfc - command to get or set RX flow classification rules + * @cmd: Specific command number - %ETHTOOL_GRXFH, %ETHTOOL_SRXFH, + *	%ETHTOOL_GRXRINGS, %ETHTOOL_GRXCLSRLCNT, %ETHTOOL_GRXCLSRULE, + *	%ETHTOOL_GRXCLSRLALL, %ETHTOOL_SRXCLSRLDEL or %ETHTOOL_SRXCLSRLINS + * @flow_type: Type of flow to be affected, e.g. %TCP_V4_FLOW + * @data: Command-dependent value + * @fs: Flow classification rule + * @rule_cnt: Number of rules to be affected + * @rule_locs: Array of used rule locations + * + * For %ETHTOOL_GRXFH and %ETHTOOL_SRXFH, @data is a bitmask indicating + * the fields included in the flow hash, e.g. %RXH_IP_SRC.  The following + * structure fields must not be used. + * + * For %ETHTOOL_GRXRINGS, @data is set to the number of RX rings/queues + * on return. + * + * For %ETHTOOL_GRXCLSRLCNT, @rule_cnt is set to the number of defined + * rules on return.  If @data is non-zero on return then it is the + * size of the rule table, plus the flag %RX_CLS_LOC_SPECIAL if the + * driver supports any special location values.  If that flag is not + * set in @data then special location values should not be used. + * + * For %ETHTOOL_GRXCLSRULE, @fs.@location specifies the location of an + * existing rule on entry and @fs contains the rule on return. + * + * For %ETHTOOL_GRXCLSRLALL, @rule_cnt specifies the array size of the + * user buffer for @rule_locs on entry.  On return, @data is the size + * of the rule table, @rule_cnt is the number of defined rules, and + * @rule_locs contains the locations of the defined rules.  Drivers + * must use the second parameter to get_rxnfc() instead of @rule_locs. + * + * For %ETHTOOL_SRXCLSRLINS, @fs specifies the rule to add or update. + * @fs.@location either specifies the location to use or is a special + * location value with %RX_CLS_LOC_SPECIAL flag set.  On return, + * @fs.@location is the actual rule location. + * + * For %ETHTOOL_SRXCLSRLDEL, @fs.@location specifies the location of an + * existing rule on entry. + * + * A driver supporting the special location values for + * %ETHTOOL_SRXCLSRLINS may add the rule at any suitable unused + * location, and may remove a rule at a later location (lower + * priority) that matches exactly the same set of flows.  The special + * values are: %RX_CLS_LOC_ANY, selecting any location; + * %RX_CLS_LOC_FIRST, selecting the first suitable location (maximum + * priority); and %RX_CLS_LOC_LAST, selecting the last suitable + * location (minimum priority).  Additional special values may be + * defined in future and drivers must return -%EINVAL for any + * unrecognised value. + */ +struct ethtool_rxnfc { +	__u32				cmd; +	__u32				flow_type; +	__u64				data; +	struct ethtool_rx_flow_spec	fs; +	__u32				rule_cnt; +	__u32				rule_locs[0]; +}; + + +/** + * struct ethtool_rxfh_indir - command to get or set RX flow hash indirection + * @cmd: Specific command number - %ETHTOOL_GRXFHINDIR or %ETHTOOL_SRXFHINDIR + * @size: On entry, the array size of the user buffer, which may be zero. + *	On return from %ETHTOOL_GRXFHINDIR, the array size of the hardware + *	indirection table. + * @ring_index: RX ring/queue index for each hash value + * + * For %ETHTOOL_GRXFHINDIR, a @size of zero means that only the size + * should be returned.  For %ETHTOOL_SRXFHINDIR, a @size of zero means + * the table should be reset to default values.  This last feature + * is not supported by the original implementations. + */ +struct ethtool_rxfh_indir { +	__u32	cmd; +	__u32	size; +	__u32	ring_index[0]; +}; + +/** + * struct ethtool_rx_ntuple_flow_spec - specification for RX flow filter + * @flow_type: Type of match to perform, e.g. %TCP_V4_FLOW + * @h_u: Flow field values to match (dependent on @flow_type) + * @m_u: Masks for flow field value bits to be ignored + * @vlan_tag: VLAN tag to match + * @vlan_tag_mask: Mask for VLAN tag bits to be ignored + * @data: Driver-dependent data to match + * @data_mask: Mask for driver-dependent data bits to be ignored + * @action: RX ring/queue index to deliver to (non-negative) or other action + *	(negative, e.g. %ETHTOOL_RXNTUPLE_ACTION_DROP) + * + * For flow types %TCP_V4_FLOW, %UDP_V4_FLOW and %SCTP_V4_FLOW, where + * a field value and mask are both zero this is treated as if all mask + * bits are set i.e. the field is ignored. + */ +struct ethtool_rx_ntuple_flow_spec { +	__u32		 flow_type; +	union { +		struct ethtool_tcpip4_spec		tcp_ip4_spec; +		struct ethtool_tcpip4_spec		udp_ip4_spec; +		struct ethtool_tcpip4_spec		sctp_ip4_spec; +		struct ethtool_ah_espip4_spec		ah_ip4_spec; +		struct ethtool_ah_espip4_spec		esp_ip4_spec; +		struct ethtool_usrip4_spec		usr_ip4_spec; +		struct ethhdr				ether_spec; +		__u8					hdata[72]; +	} h_u, m_u; + +	__u16	        vlan_tag; +	__u16	        vlan_tag_mask; +	__u64		data; +	__u64		data_mask; + +	__s32		action; +#define ETHTOOL_RXNTUPLE_ACTION_DROP	(-1)	/* drop packet */ +#define ETHTOOL_RXNTUPLE_ACTION_CLEAR	(-2)	/* clear filter */ +}; + +/** + * struct ethtool_rx_ntuple - command to set or clear RX flow filter + * @cmd: Command number - %ETHTOOL_SRXNTUPLE + * @fs: Flow filter specification + */ +struct ethtool_rx_ntuple { +	__u32					cmd; +	struct ethtool_rx_ntuple_flow_spec	fs; +}; + +#define ETHTOOL_FLASH_MAX_FILENAME	128 +enum ethtool_flash_op_type { +	ETHTOOL_FLASH_ALL_REGIONS	= 0, +}; + +/* for passing firmware flashing related parameters */ +struct ethtool_flash { +	__u32	cmd; +	__u32	region; +	char	data[ETHTOOL_FLASH_MAX_FILENAME]; +}; + +/** + * struct ethtool_dump - used for retrieving, setting device dump + * @cmd: Command number - %ETHTOOL_GET_DUMP_FLAG, %ETHTOOL_GET_DUMP_DATA, or + * 	%ETHTOOL_SET_DUMP + * @version: FW version of the dump, filled in by driver + * @flag: driver dependent flag for dump setting, filled in by driver during + *        get and filled in by ethtool for set operation. + *        flag must be initialized by macro ETH_FW_DUMP_DISABLE value when + *        firmware dump is disabled. + * @len: length of dump data, used as the length of the user buffer on entry to + * 	 %ETHTOOL_GET_DUMP_DATA and this is returned as dump length by driver + * 	 for %ETHTOOL_GET_DUMP_FLAG command + * @data: data collected for get dump data operation + */ + +#define ETH_FW_DUMP_DISABLE 0 + +struct ethtool_dump { +	__u32	cmd; +	__u32	version; +	__u32	flag; +	__u32	len; +	__u8	data[0]; +}; + +/* for returning and changing feature sets */ + +/** + * struct ethtool_get_features_block - block with state of 32 features + * @available: mask of changeable features + * @requested: mask of features requested to be enabled if possible + * @active: mask of currently enabled features + * @never_changed: mask of features not changeable for any device + */ +struct ethtool_get_features_block { +	__u32	available; +	__u32	requested; +	__u32	active; +	__u32	never_changed; +}; + +/** + * struct ethtool_gfeatures - command to get state of device's features + * @cmd: command number = %ETHTOOL_GFEATURES + * @size: in: number of elements in the features[] array; + *       out: number of elements in features[] needed to hold all features + * @features: state of features + */ +struct ethtool_gfeatures { +	__u32	cmd; +	__u32	size; +	struct ethtool_get_features_block features[0]; +}; + +/** + * struct ethtool_set_features_block - block with request for 32 features + * @valid: mask of features to be changed + * @requested: values of features to be changed + */ +struct ethtool_set_features_block { +	__u32	valid; +	__u32	requested; +}; + +/** + * struct ethtool_sfeatures - command to request change in device's features + * @cmd: command number = %ETHTOOL_SFEATURES + * @size: array size of the features[] array + * @features: feature change masks + */ +struct ethtool_sfeatures { +	__u32	cmd; +	__u32	size; +	struct ethtool_set_features_block features[0]; +}; + +/** + * struct ethtool_ts_info - holds a device's timestamping and PHC association + * @cmd: command number = %ETHTOOL_GET_TS_INFO + * @so_timestamping: bit mask of the sum of the supported SO_TIMESTAMPING flags + * @phc_index: device index of the associated PHC, or -1 if there is none + * @tx_types: bit mask of the supported hwtstamp_tx_types enumeration values + * @rx_filters: bit mask of the supported hwtstamp_rx_filters enumeration values + * + * The bits in the 'tx_types' and 'rx_filters' fields correspond to + * the 'hwtstamp_tx_types' and 'hwtstamp_rx_filters' enumeration values, + * respectively.  For example, if the device supports HWTSTAMP_TX_ON, + * then (1 << HWTSTAMP_TX_ON) in 'tx_types' will be set. + */ +struct ethtool_ts_info { +	__u32	cmd; +	__u32	so_timestamping; +	__s32	phc_index; +	__u32	tx_types; +	__u32	tx_reserved[3]; +	__u32	rx_filters; +	__u32	rx_reserved[3]; +}; + +/* + * %ETHTOOL_SFEATURES changes features present in features[].valid to the + * values of corresponding bits in features[].requested. Bits in .requested + * not set in .valid or not changeable are ignored. + * + * Returns %EINVAL when .valid contains undefined or never-changeable bits + * or size is not equal to required number of features words (32-bit blocks). + * Returns >= 0 if request was completed; bits set in the value mean: + *   %ETHTOOL_F_UNSUPPORTED - there were bits set in .valid that are not + *	changeable (not present in %ETHTOOL_GFEATURES' features[].available) + *	those bits were ignored. + *   %ETHTOOL_F_WISH - some or all changes requested were recorded but the + *      resulting state of bits masked by .valid is not equal to .requested. + *      Probably there are other device-specific constraints on some features + *      in the set. When %ETHTOOL_F_UNSUPPORTED is set, .valid is considered + *      here as though ignored bits were cleared. + *   %ETHTOOL_F_COMPAT - some or all changes requested were made by calling + *      compatibility functions. Requested offload state cannot be properly + *      managed by kernel. + * + * Meaning of bits in the masks are obtained by %ETHTOOL_GSSET_INFO (number of + * bits in the arrays - always multiple of 32) and %ETHTOOL_GSTRINGS commands + * for ETH_SS_FEATURES string set. First entry in the table corresponds to least + * significant bit in features[0] fields. Empty strings mark undefined features. + */ +enum ethtool_sfeatures_retval_bits { +	ETHTOOL_F_UNSUPPORTED__BIT, +	ETHTOOL_F_WISH__BIT, +	ETHTOOL_F_COMPAT__BIT, +}; + +#define ETHTOOL_F_UNSUPPORTED   (1 << ETHTOOL_F_UNSUPPORTED__BIT) +#define ETHTOOL_F_WISH          (1 << ETHTOOL_F_WISH__BIT) +#define ETHTOOL_F_COMPAT        (1 << ETHTOOL_F_COMPAT__BIT) + + +/* CMDs currently supported */ +#define ETHTOOL_GSET		0x00000001 /* Get settings. */ +#define ETHTOOL_SSET		0x00000002 /* Set settings. */ +#define ETHTOOL_GDRVINFO	0x00000003 /* Get driver info. */ +#define ETHTOOL_GREGS		0x00000004 /* Get NIC registers. */ +#define ETHTOOL_GWOL		0x00000005 /* Get wake-on-lan options. */ +#define ETHTOOL_SWOL		0x00000006 /* Set wake-on-lan options. */ +#define ETHTOOL_GMSGLVL		0x00000007 /* Get driver message level */ +#define ETHTOOL_SMSGLVL		0x00000008 /* Set driver msg level. */ +#define ETHTOOL_NWAY_RST	0x00000009 /* Restart autonegotiation. */ +/* Get link status for host, i.e. whether the interface *and* the + * physical port (if there is one) are up (ethtool_value). */ +#define ETHTOOL_GLINK		0x0000000a +#define ETHTOOL_GEEPROM		0x0000000b /* Get EEPROM data */ +#define ETHTOOL_SEEPROM		0x0000000c /* Set EEPROM data. */ +#define ETHTOOL_GCOALESCE	0x0000000e /* Get coalesce config */ +#define ETHTOOL_SCOALESCE	0x0000000f /* Set coalesce config. */ +#define ETHTOOL_GRINGPARAM	0x00000010 /* Get ring parameters */ +#define ETHTOOL_SRINGPARAM	0x00000011 /* Set ring parameters. */ +#define ETHTOOL_GPAUSEPARAM	0x00000012 /* Get pause parameters */ +#define ETHTOOL_SPAUSEPARAM	0x00000013 /* Set pause parameters. */ +#define ETHTOOL_GRXCSUM		0x00000014 /* Get RX hw csum enable (ethtool_value) */ +#define ETHTOOL_SRXCSUM		0x00000015 /* Set RX hw csum enable (ethtool_value) */ +#define ETHTOOL_GTXCSUM		0x00000016 /* Get TX hw csum enable (ethtool_value) */ +#define ETHTOOL_STXCSUM		0x00000017 /* Set TX hw csum enable (ethtool_value) */ +#define ETHTOOL_GSG		0x00000018 /* Get scatter-gather enable +					    * (ethtool_value) */ +#define ETHTOOL_SSG		0x00000019 /* Set scatter-gather enable +					    * (ethtool_value). */ +#define ETHTOOL_TEST		0x0000001a /* execute NIC self-test. */ +#define ETHTOOL_GSTRINGS	0x0000001b /* get specified string set */ +#define ETHTOOL_PHYS_ID		0x0000001c /* identify the NIC */ +#define ETHTOOL_GSTATS		0x0000001d /* get NIC-specific statistics */ +#define ETHTOOL_GTSO		0x0000001e /* Get TSO enable (ethtool_value) */ +#define ETHTOOL_STSO		0x0000001f /* Set TSO enable (ethtool_value) */ +#define ETHTOOL_GPERMADDR	0x00000020 /* Get permanent hardware address */ +#define ETHTOOL_GUFO		0x00000021 /* Get UFO enable (ethtool_value) */ +#define ETHTOOL_SUFO		0x00000022 /* Set UFO enable (ethtool_value) */ +#define ETHTOOL_GGSO		0x00000023 /* Get GSO enable (ethtool_value) */ +#define ETHTOOL_SGSO		0x00000024 /* Set GSO enable (ethtool_value) */ +#define ETHTOOL_GFLAGS		0x00000025 /* Get flags bitmap(ethtool_value) */ +#define ETHTOOL_SFLAGS		0x00000026 /* Set flags bitmap(ethtool_value) */ +#define ETHTOOL_GPFLAGS		0x00000027 /* Get driver-private flags bitmap */ +#define ETHTOOL_SPFLAGS		0x00000028 /* Set driver-private flags bitmap */ + +#define ETHTOOL_GRXFH		0x00000029 /* Get RX flow hash configuration */ +#define ETHTOOL_SRXFH		0x0000002a /* Set RX flow hash configuration */ +#define ETHTOOL_GGRO		0x0000002b /* Get GRO enable (ethtool_value) */ +#define ETHTOOL_SGRO		0x0000002c /* Set GRO enable (ethtool_value) */ +#define ETHTOOL_GRXRINGS	0x0000002d /* Get RX rings available for LB */ +#define ETHTOOL_GRXCLSRLCNT	0x0000002e /* Get RX class rule count */ +#define ETHTOOL_GRXCLSRULE	0x0000002f /* Get RX classification rule */ +#define ETHTOOL_GRXCLSRLALL	0x00000030 /* Get all RX classification rule */ +#define ETHTOOL_SRXCLSRLDEL	0x00000031 /* Delete RX classification rule */ +#define ETHTOOL_SRXCLSRLINS	0x00000032 /* Insert RX classification rule */ +#define ETHTOOL_FLASHDEV	0x00000033 /* Flash firmware to device */ +#define ETHTOOL_RESET		0x00000034 /* Reset hardware */ +#define ETHTOOL_SRXNTUPLE	0x00000035 /* Add an n-tuple filter to device */ +#define ETHTOOL_GRXNTUPLE	0x00000036 /* deprecated */ +#define ETHTOOL_GSSET_INFO	0x00000037 /* Get string set info */ +#define ETHTOOL_GRXFHINDIR	0x00000038 /* Get RX flow hash indir'n table */ +#define ETHTOOL_SRXFHINDIR	0x00000039 /* Set RX flow hash indir'n table */ + +#define ETHTOOL_GFEATURES	0x0000003a /* Get device offload settings */ +#define ETHTOOL_SFEATURES	0x0000003b /* Change device offload settings */ +#define ETHTOOL_GCHANNELS	0x0000003c /* Get no of channels */ +#define ETHTOOL_SCHANNELS	0x0000003d /* Set no of channels */ +#define ETHTOOL_SET_DUMP	0x0000003e /* Set dump settings */ +#define ETHTOOL_GET_DUMP_FLAG	0x0000003f /* Get dump settings */ +#define ETHTOOL_GET_DUMP_DATA	0x00000040 /* Get dump data */ +#define ETHTOOL_GET_TS_INFO	0x00000041 /* Get time stamping and PHC info */ +#define ETHTOOL_GMODULEINFO	0x00000042 /* Get plug-in module information */ +#define ETHTOOL_GMODULEEEPROM	0x00000043 /* Get plug-in module eeprom */ +#define ETHTOOL_GEEE		0x00000044 /* Get EEE settings */ +#define ETHTOOL_SEEE		0x00000045 /* Set EEE settings */ + +/* compatibility with older code */ +#define SPARC_ETH_GSET		ETHTOOL_GSET +#define SPARC_ETH_SSET		ETHTOOL_SSET + +/* Indicates what features are supported by the interface. */ +#define SUPPORTED_10baseT_Half		(1 << 0) +#define SUPPORTED_10baseT_Full		(1 << 1) +#define SUPPORTED_100baseT_Half		(1 << 2) +#define SUPPORTED_100baseT_Full		(1 << 3) +#define SUPPORTED_1000baseT_Half	(1 << 4) +#define SUPPORTED_1000baseT_Full	(1 << 5) +#define SUPPORTED_Autoneg		(1 << 6) +#define SUPPORTED_TP			(1 << 7) +#define SUPPORTED_AUI			(1 << 8) +#define SUPPORTED_MII			(1 << 9) +#define SUPPORTED_FIBRE			(1 << 10) +#define SUPPORTED_BNC			(1 << 11) +#define SUPPORTED_10000baseT_Full	(1 << 12) +#define SUPPORTED_Pause			(1 << 13) +#define SUPPORTED_Asym_Pause		(1 << 14) +#define SUPPORTED_2500baseX_Full	(1 << 15) +#define SUPPORTED_Backplane		(1 << 16) +#define SUPPORTED_1000baseKX_Full	(1 << 17) +#define SUPPORTED_10000baseKX4_Full	(1 << 18) +#define SUPPORTED_10000baseKR_Full	(1 << 19) +#define SUPPORTED_10000baseR_FEC	(1 << 20) +#define SUPPORTED_20000baseMLD2_Full	(1 << 21) +#define SUPPORTED_20000baseKR2_Full	(1 << 22) +#define SUPPORTED_40000baseKR4_Full	(1 << 23) +#define SUPPORTED_40000baseCR4_Full	(1 << 24) +#define SUPPORTED_40000baseSR4_Full	(1 << 25) +#define SUPPORTED_40000baseLR4_Full	(1 << 26) + +/* Indicates what features are advertised by the interface. */ +#define ADVERTISED_10baseT_Half		(1 << 0) +#define ADVERTISED_10baseT_Full		(1 << 1) +#define ADVERTISED_100baseT_Half	(1 << 2) +#define ADVERTISED_100baseT_Full	(1 << 3) +#define ADVERTISED_1000baseT_Half	(1 << 4) +#define ADVERTISED_1000baseT_Full	(1 << 5) +#define ADVERTISED_Autoneg		(1 << 6) +#define ADVERTISED_TP			(1 << 7) +#define ADVERTISED_AUI			(1 << 8) +#define ADVERTISED_MII			(1 << 9) +#define ADVERTISED_FIBRE		(1 << 10) +#define ADVERTISED_BNC			(1 << 11) +#define ADVERTISED_10000baseT_Full	(1 << 12) +#define ADVERTISED_Pause		(1 << 13) +#define ADVERTISED_Asym_Pause		(1 << 14) +#define ADVERTISED_2500baseX_Full	(1 << 15) +#define ADVERTISED_Backplane		(1 << 16) +#define ADVERTISED_1000baseKX_Full	(1 << 17) +#define ADVERTISED_10000baseKX4_Full	(1 << 18) +#define ADVERTISED_10000baseKR_Full	(1 << 19) +#define ADVERTISED_10000baseR_FEC	(1 << 20) +#define ADVERTISED_20000baseMLD2_Full	(1 << 21) +#define ADVERTISED_20000baseKR2_Full	(1 << 22) +#define ADVERTISED_40000baseKR4_Full	(1 << 23) +#define ADVERTISED_40000baseCR4_Full	(1 << 24) +#define ADVERTISED_40000baseSR4_Full	(1 << 25) +#define ADVERTISED_40000baseLR4_Full	(1 << 26) + +/* The following are all involved in forcing a particular link + * mode for the device for setting things.  When getting the + * devices settings, these indicate the current mode and whether + * it was forced up into this mode or autonegotiated. + */ + +/* The forced speed, 10Mb, 100Mb, gigabit, 2.5Gb, 10GbE. */ +#define SPEED_10		10 +#define SPEED_100		100 +#define SPEED_1000		1000 +#define SPEED_2500		2500 +#define SPEED_10000		10000 +#define SPEED_UNKNOWN		-1 + +/* Duplex, half or full. */ +#define DUPLEX_HALF		0x00 +#define DUPLEX_FULL		0x01 +#define DUPLEX_UNKNOWN		0xff + +/* Which connector port. */ +#define PORT_TP			0x00 +#define PORT_AUI		0x01 +#define PORT_MII		0x02 +#define PORT_FIBRE		0x03 +#define PORT_BNC		0x04 +#define PORT_DA			0x05 +#define PORT_NONE		0xef +#define PORT_OTHER		0xff + +/* Which transceiver to use. */ +#define XCVR_INTERNAL		0x00 +#define XCVR_EXTERNAL		0x01 +#define XCVR_DUMMY1		0x02 +#define XCVR_DUMMY2		0x03 +#define XCVR_DUMMY3		0x04 + +/* Enable or disable autonegotiation.  If this is set to enable, + * the forced link modes above are completely ignored. + */ +#define AUTONEG_DISABLE		0x00 +#define AUTONEG_ENABLE		0x01 + +/* MDI or MDI-X status/control - if MDI/MDI_X/AUTO is set then + * the driver is required to renegotiate link + */ +#define ETH_TP_MDI_INVALID	0x00 /* status: unknown; control: unsupported */ +#define ETH_TP_MDI		0x01 /* status: MDI;     control: force MDI */ +#define ETH_TP_MDI_X		0x02 /* status: MDI-X;   control: force MDI-X */ +#define ETH_TP_MDI_AUTO		0x03 /*                  control: auto-select */ + +/* Wake-On-Lan options. */ +#define WAKE_PHY		(1 << 0) +#define WAKE_UCAST		(1 << 1) +#define WAKE_MCAST		(1 << 2) +#define WAKE_BCAST		(1 << 3) +#define WAKE_ARP		(1 << 4) +#define WAKE_MAGIC		(1 << 5) +#define WAKE_MAGICSECURE	(1 << 6) /* only meaningful if WAKE_MAGIC */ + +/* L2-L4 network traffic flow types */ +#define	TCP_V4_FLOW	0x01	/* hash or spec (tcp_ip4_spec) */ +#define	UDP_V4_FLOW	0x02	/* hash or spec (udp_ip4_spec) */ +#define	SCTP_V4_FLOW	0x03	/* hash or spec (sctp_ip4_spec) */ +#define	AH_ESP_V4_FLOW	0x04	/* hash only */ +#define	TCP_V6_FLOW	0x05	/* hash only */ +#define	UDP_V6_FLOW	0x06	/* hash only */ +#define	SCTP_V6_FLOW	0x07	/* hash only */ +#define	AH_ESP_V6_FLOW	0x08	/* hash only */ +#define	AH_V4_FLOW	0x09	/* hash or spec (ah_ip4_spec) */ +#define	ESP_V4_FLOW	0x0a	/* hash or spec (esp_ip4_spec) */ +#define	AH_V6_FLOW	0x0b	/* hash only */ +#define	ESP_V6_FLOW	0x0c	/* hash only */ +#define	IP_USER_FLOW	0x0d	/* spec only (usr_ip4_spec) */ +#define	IPV4_FLOW	0x10	/* hash only */ +#define	IPV6_FLOW	0x11	/* hash only */ +#define	ETHER_FLOW	0x12	/* spec only (ether_spec) */ +/* Flag to enable additional fields in struct ethtool_rx_flow_spec */ +#define	FLOW_EXT	0x80000000 + +/* L3-L4 network traffic flow hash options */ +#define	RXH_L2DA	(1 << 1) +#define	RXH_VLAN	(1 << 2) +#define	RXH_L3_PROTO	(1 << 3) +#define	RXH_IP_SRC	(1 << 4) +#define	RXH_IP_DST	(1 << 5) +#define	RXH_L4_B_0_1	(1 << 6) /* src port in case of TCP/UDP/SCTP */ +#define	RXH_L4_B_2_3	(1 << 7) /* dst port in case of TCP/UDP/SCTP */ +#define	RXH_DISCARD	(1 << 31) + +#define	RX_CLS_FLOW_DISC	0xffffffffffffffffULL + +/* Special RX classification rule insert location values */ +#define RX_CLS_LOC_SPECIAL	0x80000000	/* flag */ +#define RX_CLS_LOC_ANY		0xffffffff +#define RX_CLS_LOC_FIRST	0xfffffffe +#define RX_CLS_LOC_LAST		0xfffffffd + +/* EEPROM Standards for plug in modules */ +#define ETH_MODULE_SFF_8079		0x1 +#define ETH_MODULE_SFF_8079_LEN		256 +#define ETH_MODULE_SFF_8472		0x2 +#define ETH_MODULE_SFF_8472_LEN		512 + +/* Reset flags */ +/* The reset() operation must clear the flags for the components which + * were actually reset.  On successful return, the flags indicate the + * components which were not reset, either because they do not exist + * in the hardware or because they cannot be reset independently.  The + * driver must never reset any components that were not requested. + */ +enum ethtool_reset_flags { +	/* These flags represent components dedicated to the interface +	 * the command is addressed to.  Shift any flag left by +	 * ETH_RESET_SHARED_SHIFT to reset a shared component of the +	 * same type. +	 */ +	ETH_RESET_MGMT		= 1 << 0,	/* Management processor */ +	ETH_RESET_IRQ		= 1 << 1,	/* Interrupt requester */ +	ETH_RESET_DMA		= 1 << 2,	/* DMA engine */ +	ETH_RESET_FILTER	= 1 << 3,	/* Filtering/flow direction */ +	ETH_RESET_OFFLOAD	= 1 << 4,	/* Protocol offload */ +	ETH_RESET_MAC		= 1 << 5,	/* Media access controller */ +	ETH_RESET_PHY		= 1 << 6,	/* Transceiver/PHY */ +	ETH_RESET_RAM		= 1 << 7,	/* RAM shared between +						 * multiple components */ + +	ETH_RESET_DEDICATED	= 0x0000ffff,	/* All components dedicated to +						 * this interface */ +	ETH_RESET_ALL		= 0xffffffff,	/* All components used by this +						 * interface, even if shared */ +}; +#define ETH_RESET_SHARED_SHIFT	16 + +#endif /* _UAPI_LINUX_ETHTOOL_H */ diff --git a/include/uapi/linux/eventpoll.h b/include/uapi/linux/eventpoll.h new file mode 100644 index 00000000000..8c99ce7202c --- /dev/null +++ b/include/uapi/linux/eventpoll.h @@ -0,0 +1,66 @@ +/* + *  include/linux/eventpoll.h ( Efficient event polling implementation ) + *  Copyright (C) 2001,...,2006	 Davide Libenzi + * + *  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. + * + *  Davide Libenzi <davidel@xmailserver.org> + * + */ + +#ifndef _UAPI_LINUX_EVENTPOLL_H +#define _UAPI_LINUX_EVENTPOLL_H + +/* For O_CLOEXEC */ +#include <linux/fcntl.h> +#include <linux/types.h> + +/* Flags for epoll_create1.  */ +#define EPOLL_CLOEXEC O_CLOEXEC + +/* Valid opcodes to issue to sys_epoll_ctl() */ +#define EPOLL_CTL_ADD 1 +#define EPOLL_CTL_DEL 2 +#define EPOLL_CTL_MOD 3 +#define EPOLL_CTL_DISABLE 4 + +/* + * Request the handling of system wakeup events so as to prevent system suspends + * from happening while those events are being processed. + * + * Assuming neither EPOLLET nor EPOLLONESHOT is set, system suspends will not be + * re-allowed until epoll_wait is called again after consuming the wakeup + * event(s). + * + * Requires CAP_BLOCK_SUSPEND + */ +#define EPOLLWAKEUP (1 << 29) + +/* Set the One Shot behaviour for the target file descriptor */ +#define EPOLLONESHOT (1 << 30) + +/* Set the Edge Triggered behaviour for the target file descriptor */ +#define EPOLLET (1 << 31) + +/*  + * On x86-64 make the 64bit structure have the same alignment as the + * 32bit structure. This makes 32bit emulation easier. + * + * UML/x86_64 needs the same packing as x86_64 + */ +#ifdef __x86_64__ +#define EPOLL_PACKED __attribute__((packed)) +#else +#define EPOLL_PACKED +#endif + +struct epoll_event { +	__u32 events; +	__u64 data; +} EPOLL_PACKED; + + +#endif /* _UAPI_LINUX_EVENTPOLL_H */ diff --git a/include/uapi/linux/fadvise.h b/include/uapi/linux/fadvise.h new file mode 100644 index 00000000000..e8e747139b9 --- /dev/null +++ b/include/uapi/linux/fadvise.h @@ -0,0 +1,21 @@ +#ifndef FADVISE_H_INCLUDED +#define FADVISE_H_INCLUDED + +#define POSIX_FADV_NORMAL	0 /* No further special treatment.  */ +#define POSIX_FADV_RANDOM	1 /* Expect random page references.  */ +#define POSIX_FADV_SEQUENTIAL	2 /* Expect sequential page references.  */ +#define POSIX_FADV_WILLNEED	3 /* Will need these pages.  */ + +/* + * The advise values for POSIX_FADV_DONTNEED and POSIX_ADV_NOREUSE + * for s390-64 differ from the values for the rest of the world. + */ +#if defined(__s390x__) +#define POSIX_FADV_DONTNEED	6 /* Don't need these pages.  */ +#define POSIX_FADV_NOREUSE	7 /* Data will be accessed once.  */ +#else +#define POSIX_FADV_DONTNEED	4 /* Don't need these pages.  */ +#define POSIX_FADV_NOREUSE	5 /* Data will be accessed once.  */ +#endif + +#endif	/* FADVISE_H_INCLUDED */ diff --git a/include/uapi/linux/falloc.h b/include/uapi/linux/falloc.h new file mode 100644 index 00000000000..990c4ccf8b6 --- /dev/null +++ b/include/uapi/linux/falloc.h @@ -0,0 +1,9 @@ +#ifndef _UAPI_FALLOC_H_ +#define _UAPI_FALLOC_H_ + +#define FALLOC_FL_KEEP_SIZE	0x01 /* default is extend size */ +#define FALLOC_FL_PUNCH_HOLE	0x02 /* de-allocates range */ +#define FALLOC_FL_NO_HIDE_STALE	0x04 /* reserved codepoint */ + + +#endif /* _UAPI_FALLOC_H_ */ diff --git a/include/uapi/linux/fanotify.h b/include/uapi/linux/fanotify.h new file mode 100644 index 00000000000..030508d195d --- /dev/null +++ b/include/uapi/linux/fanotify.h @@ -0,0 +1,116 @@ +#ifndef _UAPI_LINUX_FANOTIFY_H +#define _UAPI_LINUX_FANOTIFY_H + +#include <linux/types.h> + +/* the following events that user-space can register for */ +#define FAN_ACCESS		0x00000001	/* File was accessed */ +#define FAN_MODIFY		0x00000002	/* File was modified */ +#define FAN_CLOSE_WRITE		0x00000008	/* Writtable file closed */ +#define FAN_CLOSE_NOWRITE	0x00000010	/* Unwrittable file closed */ +#define FAN_OPEN		0x00000020	/* File was opened */ + +#define FAN_Q_OVERFLOW		0x00004000	/* Event queued overflowed */ + +#define FAN_OPEN_PERM		0x00010000	/* File open in perm check */ +#define FAN_ACCESS_PERM		0x00020000	/* File accessed in perm check */ + +#define FAN_ONDIR		0x40000000	/* event occurred against dir */ + +#define FAN_EVENT_ON_CHILD	0x08000000	/* interested in child events */ + +/* helper events */ +#define FAN_CLOSE		(FAN_CLOSE_WRITE | FAN_CLOSE_NOWRITE) /* close */ + +/* flags used for fanotify_init() */ +#define FAN_CLOEXEC		0x00000001 +#define FAN_NONBLOCK		0x00000002 + +/* These are NOT bitwise flags.  Both bits are used togther.  */ +#define FAN_CLASS_NOTIF		0x00000000 +#define FAN_CLASS_CONTENT	0x00000004 +#define FAN_CLASS_PRE_CONTENT	0x00000008 +#define FAN_ALL_CLASS_BITS	(FAN_CLASS_NOTIF | FAN_CLASS_CONTENT | \ +				 FAN_CLASS_PRE_CONTENT) + +#define FAN_UNLIMITED_QUEUE	0x00000010 +#define FAN_UNLIMITED_MARKS	0x00000020 + +#define FAN_ALL_INIT_FLAGS	(FAN_CLOEXEC | FAN_NONBLOCK | \ +				 FAN_ALL_CLASS_BITS | FAN_UNLIMITED_QUEUE |\ +				 FAN_UNLIMITED_MARKS) + +/* flags used for fanotify_modify_mark() */ +#define FAN_MARK_ADD		0x00000001 +#define FAN_MARK_REMOVE		0x00000002 +#define FAN_MARK_DONT_FOLLOW	0x00000004 +#define FAN_MARK_ONLYDIR	0x00000008 +#define FAN_MARK_MOUNT		0x00000010 +#define FAN_MARK_IGNORED_MASK	0x00000020 +#define FAN_MARK_IGNORED_SURV_MODIFY	0x00000040 +#define FAN_MARK_FLUSH		0x00000080 + +#define FAN_ALL_MARK_FLAGS	(FAN_MARK_ADD |\ +				 FAN_MARK_REMOVE |\ +				 FAN_MARK_DONT_FOLLOW |\ +				 FAN_MARK_ONLYDIR |\ +				 FAN_MARK_MOUNT |\ +				 FAN_MARK_IGNORED_MASK |\ +				 FAN_MARK_IGNORED_SURV_MODIFY |\ +				 FAN_MARK_FLUSH) + +/* + * All of the events - we build the list by hand so that we can add flags in + * the future and not break backward compatibility.  Apps will get only the + * events that they originally wanted.  Be sure to add new events here! + */ +#define FAN_ALL_EVENTS (FAN_ACCESS |\ +			FAN_MODIFY |\ +			FAN_CLOSE |\ +			FAN_OPEN) + +/* + * All events which require a permission response from userspace + */ +#define FAN_ALL_PERM_EVENTS (FAN_OPEN_PERM |\ +			     FAN_ACCESS_PERM) + +#define FAN_ALL_OUTGOING_EVENTS	(FAN_ALL_EVENTS |\ +				 FAN_ALL_PERM_EVENTS |\ +				 FAN_Q_OVERFLOW) + +#define FANOTIFY_METADATA_VERSION	3 + +struct fanotify_event_metadata { +	__u32 event_len; +	__u8 vers; +	__u8 reserved; +	__u16 metadata_len; +	__aligned_u64 mask; +	__s32 fd; +	__s32 pid; +}; + +struct fanotify_response { +	__s32 fd; +	__u32 response; +}; + +/* Legit userspace responses to a _PERM event */ +#define FAN_ALLOW	0x01 +#define FAN_DENY	0x02 +/* No fd set in event */ +#define FAN_NOFD	-1 + +/* Helper functions to deal with fanotify_event_metadata buffers */ +#define FAN_EVENT_METADATA_LEN (sizeof(struct fanotify_event_metadata)) + +#define FAN_EVENT_NEXT(meta, len) ((len) -= (meta)->event_len, \ +				   (struct fanotify_event_metadata*)(((char *)(meta)) + \ +				   (meta)->event_len)) + +#define FAN_EVENT_OK(meta, len)	((long)(len) >= (long)FAN_EVENT_METADATA_LEN && \ +				(long)(meta)->event_len >= (long)FAN_EVENT_METADATA_LEN && \ +				(long)(meta)->event_len <= (long)(len)) + +#endif /* _UAPI_LINUX_FANOTIFY_H */ diff --git a/include/uapi/linux/fb.h b/include/uapi/linux/fb.h new file mode 100644 index 00000000000..fb795c3b3c1 --- /dev/null +++ b/include/uapi/linux/fb.h @@ -0,0 +1,402 @@ +#ifndef _UAPI_LINUX_FB_H +#define _UAPI_LINUX_FB_H + +#include <linux/types.h> +#include <linux/i2c.h> + +/* Definitions of frame buffers						*/ + +#define FB_MAX			32	/* sufficient for now */ + +/* ioctls +   0x46 is 'F'								*/ +#define FBIOGET_VSCREENINFO	0x4600 +#define FBIOPUT_VSCREENINFO	0x4601 +#define FBIOGET_FSCREENINFO	0x4602 +#define FBIOGETCMAP		0x4604 +#define FBIOPUTCMAP		0x4605 +#define FBIOPAN_DISPLAY		0x4606 +#ifndef __KERNEL__ +#define FBIO_CURSOR            _IOWR('F', 0x08, struct fb_cursor) +#endif +/* 0x4607-0x460B are defined below */ +/* #define FBIOGET_MONITORSPEC	0x460C */ +/* #define FBIOPUT_MONITORSPEC	0x460D */ +/* #define FBIOSWITCH_MONIBIT	0x460E */ +#define FBIOGET_CON2FBMAP	0x460F +#define FBIOPUT_CON2FBMAP	0x4610 +#define FBIOBLANK		0x4611		/* arg: 0 or vesa level + 1 */ +#define FBIOGET_VBLANK		_IOR('F', 0x12, struct fb_vblank) +#define FBIO_ALLOC              0x4613 +#define FBIO_FREE               0x4614 +#define FBIOGET_GLYPH           0x4615 +#define FBIOGET_HWCINFO         0x4616 +#define FBIOPUT_MODEINFO        0x4617 +#define FBIOGET_DISPINFO        0x4618 +#define FBIO_WAITFORVSYNC	_IOW('F', 0x20, __u32) + +#define FB_TYPE_PACKED_PIXELS		0	/* Packed Pixels	*/ +#define FB_TYPE_PLANES			1	/* Non interleaved planes */ +#define FB_TYPE_INTERLEAVED_PLANES	2	/* Interleaved planes	*/ +#define FB_TYPE_TEXT			3	/* Text/attributes	*/ +#define FB_TYPE_VGA_PLANES		4	/* EGA/VGA planes	*/ +#define FB_TYPE_FOURCC			5	/* Type identified by a V4L2 FOURCC */ + +#define FB_AUX_TEXT_MDA		0	/* Monochrome text */ +#define FB_AUX_TEXT_CGA		1	/* CGA/EGA/VGA Color text */ +#define FB_AUX_TEXT_S3_MMIO	2	/* S3 MMIO fasttext */ +#define FB_AUX_TEXT_MGA_STEP16	3	/* MGA Millenium I: text, attr, 14 reserved bytes */ +#define FB_AUX_TEXT_MGA_STEP8	4	/* other MGAs:      text, attr,  6 reserved bytes */ +#define FB_AUX_TEXT_SVGA_GROUP	8	/* 8-15: SVGA tileblit compatible modes */ +#define FB_AUX_TEXT_SVGA_MASK	7	/* lower three bits says step */ +#define FB_AUX_TEXT_SVGA_STEP2	8	/* SVGA text mode:  text, attr */ +#define FB_AUX_TEXT_SVGA_STEP4	9	/* SVGA text mode:  text, attr,  2 reserved bytes */ +#define FB_AUX_TEXT_SVGA_STEP8	10	/* SVGA text mode:  text, attr,  6 reserved bytes */ +#define FB_AUX_TEXT_SVGA_STEP16	11	/* SVGA text mode:  text, attr, 14 reserved bytes */ +#define FB_AUX_TEXT_SVGA_LAST	15	/* reserved up to 15 */ + +#define FB_AUX_VGA_PLANES_VGA4		0	/* 16 color planes (EGA/VGA) */ +#define FB_AUX_VGA_PLANES_CFB4		1	/* CFB4 in planes (VGA) */ +#define FB_AUX_VGA_PLANES_CFB8		2	/* CFB8 in planes (VGA) */ + +#define FB_VISUAL_MONO01		0	/* Monochr. 1=Black 0=White */ +#define FB_VISUAL_MONO10		1	/* Monochr. 1=White 0=Black */ +#define FB_VISUAL_TRUECOLOR		2	/* True color	*/ +#define FB_VISUAL_PSEUDOCOLOR		3	/* Pseudo color (like atari) */ +#define FB_VISUAL_DIRECTCOLOR		4	/* Direct color */ +#define FB_VISUAL_STATIC_PSEUDOCOLOR	5	/* Pseudo color readonly */ +#define FB_VISUAL_FOURCC		6	/* Visual identified by a V4L2 FOURCC */ + +#define FB_ACCEL_NONE		0	/* no hardware accelerator	*/ +#define FB_ACCEL_ATARIBLITT	1	/* Atari Blitter		*/ +#define FB_ACCEL_AMIGABLITT	2	/* Amiga Blitter                */ +#define FB_ACCEL_S3_TRIO64	3	/* Cybervision64 (S3 Trio64)    */ +#define FB_ACCEL_NCR_77C32BLT	4	/* RetinaZ3 (NCR 77C32BLT)      */ +#define FB_ACCEL_S3_VIRGE	5	/* Cybervision64/3D (S3 ViRGE)	*/ +#define FB_ACCEL_ATI_MACH64GX	6	/* ATI Mach 64GX family		*/ +#define FB_ACCEL_DEC_TGA	7	/* DEC 21030 TGA		*/ +#define FB_ACCEL_ATI_MACH64CT	8	/* ATI Mach 64CT family		*/ +#define FB_ACCEL_ATI_MACH64VT	9	/* ATI Mach 64CT family VT class */ +#define FB_ACCEL_ATI_MACH64GT	10	/* ATI Mach 64CT family GT class */ +#define FB_ACCEL_SUN_CREATOR	11	/* Sun Creator/Creator3D	*/ +#define FB_ACCEL_SUN_CGSIX	12	/* Sun cg6			*/ +#define FB_ACCEL_SUN_LEO	13	/* Sun leo/zx			*/ +#define FB_ACCEL_IMS_TWINTURBO	14	/* IMS Twin Turbo		*/ +#define FB_ACCEL_3DLABS_PERMEDIA2 15	/* 3Dlabs Permedia 2		*/ +#define FB_ACCEL_MATROX_MGA2064W 16	/* Matrox MGA2064W (Millenium)	*/ +#define FB_ACCEL_MATROX_MGA1064SG 17	/* Matrox MGA1064SG (Mystique)	*/ +#define FB_ACCEL_MATROX_MGA2164W 18	/* Matrox MGA2164W (Millenium II) */ +#define FB_ACCEL_MATROX_MGA2164W_AGP 19	/* Matrox MGA2164W (Millenium II) */ +#define FB_ACCEL_MATROX_MGAG100	20	/* Matrox G100 (Productiva G100) */ +#define FB_ACCEL_MATROX_MGAG200	21	/* Matrox G200 (Myst, Mill, ...) */ +#define FB_ACCEL_SUN_CG14	22	/* Sun cgfourteen		 */ +#define FB_ACCEL_SUN_BWTWO	23	/* Sun bwtwo			*/ +#define FB_ACCEL_SUN_CGTHREE	24	/* Sun cgthree			*/ +#define FB_ACCEL_SUN_TCX	25	/* Sun tcx			*/ +#define FB_ACCEL_MATROX_MGAG400	26	/* Matrox G400			*/ +#define FB_ACCEL_NV3		27	/* nVidia RIVA 128              */ +#define FB_ACCEL_NV4		28	/* nVidia RIVA TNT		*/ +#define FB_ACCEL_NV5		29	/* nVidia RIVA TNT2		*/ +#define FB_ACCEL_CT_6555x	30	/* C&T 6555x			*/ +#define FB_ACCEL_3DFX_BANSHEE	31	/* 3Dfx Banshee			*/ +#define FB_ACCEL_ATI_RAGE128	32	/* ATI Rage128 family		*/ +#define FB_ACCEL_IGS_CYBER2000	33	/* CyberPro 2000		*/ +#define FB_ACCEL_IGS_CYBER2010	34	/* CyberPro 2010		*/ +#define FB_ACCEL_IGS_CYBER5000	35	/* CyberPro 5000		*/ +#define FB_ACCEL_SIS_GLAMOUR    36	/* SiS 300/630/540              */ +#define FB_ACCEL_3DLABS_PERMEDIA3 37	/* 3Dlabs Permedia 3		*/ +#define FB_ACCEL_ATI_RADEON	38	/* ATI Radeon family		*/ +#define FB_ACCEL_I810           39      /* Intel 810/815                */ +#define FB_ACCEL_SIS_GLAMOUR_2  40	/* SiS 315, 650, 740		*/ +#define FB_ACCEL_SIS_XABRE      41	/* SiS 330 ("Xabre")		*/ +#define FB_ACCEL_I830           42      /* Intel 830M/845G/85x/865G     */ +#define FB_ACCEL_NV_10          43      /* nVidia Arch 10               */ +#define FB_ACCEL_NV_20          44      /* nVidia Arch 20               */ +#define FB_ACCEL_NV_30          45      /* nVidia Arch 30               */ +#define FB_ACCEL_NV_40          46      /* nVidia Arch 40               */ +#define FB_ACCEL_XGI_VOLARI_V	47	/* XGI Volari V3XT, V5, V8      */ +#define FB_ACCEL_XGI_VOLARI_Z	48	/* XGI Volari Z7                */ +#define FB_ACCEL_OMAP1610	49	/* TI OMAP16xx                  */ +#define FB_ACCEL_TRIDENT_TGUI	50	/* Trident TGUI			*/ +#define FB_ACCEL_TRIDENT_3DIMAGE 51	/* Trident 3DImage		*/ +#define FB_ACCEL_TRIDENT_BLADE3D 52	/* Trident Blade3D		*/ +#define FB_ACCEL_TRIDENT_BLADEXP 53	/* Trident BladeXP		*/ +#define FB_ACCEL_CIRRUS_ALPINE   53	/* Cirrus Logic 543x/544x/5480	*/ +#define FB_ACCEL_NEOMAGIC_NM2070 90	/* NeoMagic NM2070              */ +#define FB_ACCEL_NEOMAGIC_NM2090 91	/* NeoMagic NM2090              */ +#define FB_ACCEL_NEOMAGIC_NM2093 92	/* NeoMagic NM2093              */ +#define FB_ACCEL_NEOMAGIC_NM2097 93	/* NeoMagic NM2097              */ +#define FB_ACCEL_NEOMAGIC_NM2160 94	/* NeoMagic NM2160              */ +#define FB_ACCEL_NEOMAGIC_NM2200 95	/* NeoMagic NM2200              */ +#define FB_ACCEL_NEOMAGIC_NM2230 96	/* NeoMagic NM2230              */ +#define FB_ACCEL_NEOMAGIC_NM2360 97	/* NeoMagic NM2360              */ +#define FB_ACCEL_NEOMAGIC_NM2380 98	/* NeoMagic NM2380              */ +#define FB_ACCEL_PXA3XX		 99	/* PXA3xx			*/ + +#define FB_ACCEL_SAVAGE4        0x80	/* S3 Savage4                   */ +#define FB_ACCEL_SAVAGE3D       0x81	/* S3 Savage3D                  */ +#define FB_ACCEL_SAVAGE3D_MV    0x82	/* S3 Savage3D-MV               */ +#define FB_ACCEL_SAVAGE2000     0x83	/* S3 Savage2000                */ +#define FB_ACCEL_SAVAGE_MX_MV   0x84	/* S3 Savage/MX-MV              */ +#define FB_ACCEL_SAVAGE_MX      0x85	/* S3 Savage/MX                 */ +#define FB_ACCEL_SAVAGE_IX_MV   0x86	/* S3 Savage/IX-MV              */ +#define FB_ACCEL_SAVAGE_IX      0x87	/* S3 Savage/IX                 */ +#define FB_ACCEL_PROSAVAGE_PM   0x88	/* S3 ProSavage PM133           */ +#define FB_ACCEL_PROSAVAGE_KM   0x89	/* S3 ProSavage KM133           */ +#define FB_ACCEL_S3TWISTER_P    0x8a	/* S3 Twister                   */ +#define FB_ACCEL_S3TWISTER_K    0x8b	/* S3 TwisterK                  */ +#define FB_ACCEL_SUPERSAVAGE    0x8c    /* S3 Supersavage               */ +#define FB_ACCEL_PROSAVAGE_DDR  0x8d	/* S3 ProSavage DDR             */ +#define FB_ACCEL_PROSAVAGE_DDRK 0x8e	/* S3 ProSavage DDR-K           */ + +#define FB_ACCEL_PUV3_UNIGFX	0xa0	/* PKUnity-v3 Unigfx		*/ + +#define FB_CAP_FOURCC		1	/* Device supports FOURCC-based formats */ + +struct fb_fix_screeninfo { +	char id[16];			/* identification string eg "TT Builtin" */ +	unsigned long smem_start;	/* Start of frame buffer mem */ +					/* (physical address) */ +	__u32 smem_len;			/* Length of frame buffer mem */ +	__u32 type;			/* see FB_TYPE_*		*/ +	__u32 type_aux;			/* Interleave for interleaved Planes */ +	__u32 visual;			/* see FB_VISUAL_*		*/  +	__u16 xpanstep;			/* zero if no hardware panning  */ +	__u16 ypanstep;			/* zero if no hardware panning  */ +	__u16 ywrapstep;		/* zero if no hardware ywrap    */ +	__u32 line_length;		/* length of a line in bytes    */ +	unsigned long mmio_start;	/* Start of Memory Mapped I/O   */ +					/* (physical address) */ +	__u32 mmio_len;			/* Length of Memory Mapped I/O  */ +	__u32 accel;			/* Indicate to driver which	*/ +					/*  specific chip/card we have	*/ +	__u16 capabilities;		/* see FB_CAP_*			*/ +	__u16 reserved[2];		/* Reserved for future compatibility */ +}; + +/* Interpretation of offset for color fields: All offsets are from the right, + * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you + * can use the offset as right argument to <<). A pixel afterwards is a bit + * stream and is written to video memory as that unmodified. + * + * For pseudocolor: offset and length should be the same for all color + * components. Offset specifies the position of the least significant bit + * of the pallette index in a pixel value. Length indicates the number + * of available palette entries (i.e. # of entries = 1 << length). + */ +struct fb_bitfield { +	__u32 offset;			/* beginning of bitfield	*/ +	__u32 length;			/* length of bitfield		*/ +	__u32 msb_right;		/* != 0 : Most significant bit is */  +					/* right */  +}; + +#define FB_NONSTD_HAM		1	/* Hold-And-Modify (HAM)        */ +#define FB_NONSTD_REV_PIX_IN_B	2	/* order of pixels in each byte is reversed */ + +#define FB_ACTIVATE_NOW		0	/* set values immediately (or vbl)*/ +#define FB_ACTIVATE_NXTOPEN	1	/* activate on next open	*/ +#define FB_ACTIVATE_TEST	2	/* don't set, round up impossible */ +#define FB_ACTIVATE_MASK       15 +					/* values			*/ +#define FB_ACTIVATE_VBL	       16	/* activate values on next vbl  */ +#define FB_CHANGE_CMAP_VBL     32	/* change colormap on vbl	*/ +#define FB_ACTIVATE_ALL	       64	/* change all VCs on this fb	*/ +#define FB_ACTIVATE_FORCE     128	/* force apply even when no change*/ +#define FB_ACTIVATE_INV_MODE  256       /* invalidate videomode */ + +#define FB_ACCELF_TEXT		1	/* (OBSOLETE) see fb_info.flags and vc_mode */ + +#define FB_SYNC_HOR_HIGH_ACT	1	/* horizontal sync high active	*/ +#define FB_SYNC_VERT_HIGH_ACT	2	/* vertical sync high active	*/ +#define FB_SYNC_EXT		4	/* external sync		*/ +#define FB_SYNC_COMP_HIGH_ACT	8	/* composite sync high active   */ +#define FB_SYNC_BROADCAST	16	/* broadcast video timings      */ +					/* vtotal = 144d/288n/576i => PAL  */ +					/* vtotal = 121d/242n/484i => NTSC */ +#define FB_SYNC_ON_GREEN	32	/* sync on green */ + +#define FB_VMODE_NONINTERLACED  0	/* non interlaced */ +#define FB_VMODE_INTERLACED	1	/* interlaced	*/ +#define FB_VMODE_DOUBLE		2	/* double scan */ +#define FB_VMODE_ODD_FLD_FIRST	4	/* interlaced: top line first */ +#define FB_VMODE_MASK		255 + +#define FB_VMODE_YWRAP		256	/* ywrap instead of panning     */ +#define FB_VMODE_SMOOTH_XPAN	512	/* smooth xpan possible (internally used) */ +#define FB_VMODE_CONUPDATE	512	/* don't update x/yoffset	*/ + +/* + * Display rotation support + */ +#define FB_ROTATE_UR      0 +#define FB_ROTATE_CW      1 +#define FB_ROTATE_UD      2 +#define FB_ROTATE_CCW     3 + +#define PICOS2KHZ(a) (1000000000UL/(a)) +#define KHZ2PICOS(a) (1000000000UL/(a)) + +struct fb_var_screeninfo { +	__u32 xres;			/* visible resolution		*/ +	__u32 yres; +	__u32 xres_virtual;		/* virtual resolution		*/ +	__u32 yres_virtual; +	__u32 xoffset;			/* offset from virtual to visible */ +	__u32 yoffset;			/* resolution			*/ + +	__u32 bits_per_pixel;		/* guess what			*/ +	__u32 grayscale;		/* 0 = color, 1 = grayscale,	*/ +					/* >1 = FOURCC			*/ +	struct fb_bitfield red;		/* bitfield in fb mem if true color, */ +	struct fb_bitfield green;	/* else only length is significant */ +	struct fb_bitfield blue; +	struct fb_bitfield transp;	/* transparency			*/	 + +	__u32 nonstd;			/* != 0 Non standard pixel format */ + +	__u32 activate;			/* see FB_ACTIVATE_*		*/ + +	__u32 height;			/* height of picture in mm    */ +	__u32 width;			/* width of picture in mm     */ + +	__u32 accel_flags;		/* (OBSOLETE) see fb_info.flags */ + +	/* Timing: All values in pixclocks, except pixclock (of course) */ +	__u32 pixclock;			/* pixel clock in ps (pico seconds) */ +	__u32 left_margin;		/* time from sync to picture	*/ +	__u32 right_margin;		/* time from picture to sync	*/ +	__u32 upper_margin;		/* time from sync to picture	*/ +	__u32 lower_margin; +	__u32 hsync_len;		/* length of horizontal sync	*/ +	__u32 vsync_len;		/* length of vertical sync	*/ +	__u32 sync;			/* see FB_SYNC_*		*/ +	__u32 vmode;			/* see FB_VMODE_*		*/ +	__u32 rotate;			/* angle we rotate counter clockwise */ +	__u32 colorspace;		/* colorspace for FOURCC-based modes */ +	__u32 reserved[4];		/* Reserved for future compatibility */ +}; + +struct fb_cmap { +	__u32 start;			/* First entry	*/ +	__u32 len;			/* Number of entries */ +	__u16 *red;			/* Red values	*/ +	__u16 *green; +	__u16 *blue; +	__u16 *transp;			/* transparency, can be NULL */ +}; + +struct fb_con2fbmap { +	__u32 console; +	__u32 framebuffer; +}; + +/* VESA Blanking Levels */ +#define VESA_NO_BLANKING        0 +#define VESA_VSYNC_SUSPEND      1 +#define VESA_HSYNC_SUSPEND      2 +#define VESA_POWERDOWN          3 + + +enum { +	/* screen: unblanked, hsync: on,  vsync: on */ +	FB_BLANK_UNBLANK       = VESA_NO_BLANKING, + +	/* screen: blanked,   hsync: on,  vsync: on */ +	FB_BLANK_NORMAL        = VESA_NO_BLANKING + 1, + +	/* screen: blanked,   hsync: on,  vsync: off */ +	FB_BLANK_VSYNC_SUSPEND = VESA_VSYNC_SUSPEND + 1, + +	/* screen: blanked,   hsync: off, vsync: on */ +	FB_BLANK_HSYNC_SUSPEND = VESA_HSYNC_SUSPEND + 1, + +	/* screen: blanked,   hsync: off, vsync: off */ +	FB_BLANK_POWERDOWN     = VESA_POWERDOWN + 1 +}; + +#define FB_VBLANK_VBLANKING	0x001	/* currently in a vertical blank */ +#define FB_VBLANK_HBLANKING	0x002	/* currently in a horizontal blank */ +#define FB_VBLANK_HAVE_VBLANK	0x004	/* vertical blanks can be detected */ +#define FB_VBLANK_HAVE_HBLANK	0x008	/* horizontal blanks can be detected */ +#define FB_VBLANK_HAVE_COUNT	0x010	/* global retrace counter is available */ +#define FB_VBLANK_HAVE_VCOUNT	0x020	/* the vcount field is valid */ +#define FB_VBLANK_HAVE_HCOUNT	0x040	/* the hcount field is valid */ +#define FB_VBLANK_VSYNCING	0x080	/* currently in a vsync */ +#define FB_VBLANK_HAVE_VSYNC	0x100	/* verical syncs can be detected */ + +struct fb_vblank { +	__u32 flags;			/* FB_VBLANK flags */ +	__u32 count;			/* counter of retraces since boot */ +	__u32 vcount;			/* current scanline position */ +	__u32 hcount;			/* current scandot position */ +	__u32 reserved[4];		/* reserved for future compatibility */ +}; + +/* Internal HW accel */ +#define ROP_COPY 0 +#define ROP_XOR  1 + +struct fb_copyarea { +	__u32 dx; +	__u32 dy; +	__u32 width; +	__u32 height; +	__u32 sx; +	__u32 sy; +}; + +struct fb_fillrect { +	__u32 dx;	/* screen-relative */ +	__u32 dy; +	__u32 width; +	__u32 height; +	__u32 color; +	__u32 rop; +}; + +struct fb_image { +	__u32 dx;		/* Where to place image */ +	__u32 dy; +	__u32 width;		/* Size of image */ +	__u32 height; +	__u32 fg_color;		/* Only used when a mono bitmap */ +	__u32 bg_color; +	__u8  depth;		/* Depth of the image */ +	const char *data;	/* Pointer to image data */ +	struct fb_cmap cmap;	/* color map info */ +}; + +/* + * hardware cursor control + */ + +#define FB_CUR_SETIMAGE 0x01 +#define FB_CUR_SETPOS   0x02 +#define FB_CUR_SETHOT   0x04 +#define FB_CUR_SETCMAP  0x08 +#define FB_CUR_SETSHAPE 0x10 +#define FB_CUR_SETSIZE	0x20 +#define FB_CUR_SETALL   0xFF + +struct fbcurpos { +	__u16 x, y; +}; + +struct fb_cursor { +	__u16 set;		/* what to set */ +	__u16 enable;		/* cursor on/off */ +	__u16 rop;		/* bitop operation */ +	const char *mask;	/* cursor mask bits */ +	struct fbcurpos hot;	/* cursor hot spot */ +	struct fb_image	image;	/* Cursor image */ +}; + +#ifdef CONFIG_FB_BACKLIGHT +/* Settings for the generic backlight code */ +#define FB_BACKLIGHT_LEVELS	128 +#define FB_BACKLIGHT_MAX	0xFF +#endif + + +#endif /* _UAPI_LINUX_FB_H */ diff --git a/include/uapi/linux/fcntl.h b/include/uapi/linux/fcntl.h new file mode 100644 index 00000000000..074b886c6be --- /dev/null +++ b/include/uapi/linux/fcntl.h @@ -0,0 +1,52 @@ +#ifndef _UAPI_LINUX_FCNTL_H +#define _UAPI_LINUX_FCNTL_H + +#include <asm/fcntl.h> + +#define F_SETLEASE	(F_LINUX_SPECIFIC_BASE + 0) +#define F_GETLEASE	(F_LINUX_SPECIFIC_BASE + 1) + +/* + * Cancel a blocking posix lock; internal use only until we expose an + * asynchronous lock api to userspace: + */ +#define F_CANCELLK	(F_LINUX_SPECIFIC_BASE + 5) + +/* Create a file descriptor with FD_CLOEXEC set. */ +#define F_DUPFD_CLOEXEC	(F_LINUX_SPECIFIC_BASE + 6) + +/* + * Request nofications on a directory. + * See below for events that may be notified. + */ +#define F_NOTIFY	(F_LINUX_SPECIFIC_BASE+2) + +/* + * Set and get of pipe page size array + */ +#define F_SETPIPE_SZ	(F_LINUX_SPECIFIC_BASE + 7) +#define F_GETPIPE_SZ	(F_LINUX_SPECIFIC_BASE + 8) + +/* + * Types of directory notifications that may be requested. + */ +#define DN_ACCESS	0x00000001	/* File accessed */ +#define DN_MODIFY	0x00000002	/* File modified */ +#define DN_CREATE	0x00000004	/* File created */ +#define DN_DELETE	0x00000008	/* File removed */ +#define DN_RENAME	0x00000010	/* File renamed */ +#define DN_ATTRIB	0x00000020	/* File changed attibutes */ +#define DN_MULTISHOT	0x80000000	/* Don't remove notifier */ + +#define AT_FDCWD		-100    /* Special value used to indicate +                                           openat should use the current +                                           working directory. */ +#define AT_SYMLINK_NOFOLLOW	0x100   /* Do not follow symbolic links.  */ +#define AT_REMOVEDIR		0x200   /* Remove directory instead of +                                           unlinking file.  */ +#define AT_SYMLINK_FOLLOW	0x400   /* Follow symbolic links.  */ +#define AT_NO_AUTOMOUNT		0x800	/* Suppress terminal automount traversal */ +#define AT_EMPTY_PATH		0x1000	/* Allow empty relative pathname */ + + +#endif /* _UAPI_LINUX_FCNTL_H */ diff --git a/include/uapi/linux/fd.h b/include/uapi/linux/fd.h new file mode 100644 index 00000000000..f1f3dd5981b --- /dev/null +++ b/include/uapi/linux/fd.h @@ -0,0 +1,382 @@ +#ifndef _UAPI_LINUX_FD_H +#define _UAPI_LINUX_FD_H + +#include <linux/ioctl.h> +#include <linux/compiler.h> + +/* New file layout: Now the ioctl definitions immediately follow the + * definitions of the structures that they use */ + +/* + * Geometry + */ +struct floppy_struct { +	unsigned int	size,		/* nr of sectors total */ +			sect,		/* sectors per track */ +			head,		/* nr of heads */ +			track,		/* nr of tracks */ +			stretch;	/* bit 0 !=0 means double track steps */ +					/* bit 1 != 0 means swap sides */ +					/* bits 2..9 give the first sector */ +					/*  number (the LSB is flipped) */ +#define FD_STRETCH 1 +#define FD_SWAPSIDES 2 +#define FD_ZEROBASED 4 +#define FD_SECTBASEMASK 0x3FC +#define FD_MKSECTBASE(s) (((s) ^ 1) << 2) +#define FD_SECTBASE(floppy) ((((floppy)->stretch & FD_SECTBASEMASK) >> 2) ^ 1) + +	unsigned char	gap,		/* gap1 size */ + +			rate,		/* data rate. |= 0x40 for perpendicular */ +#define FD_2M 0x4 +#define FD_SIZECODEMASK 0x38 +#define FD_SIZECODE(floppy) (((((floppy)->rate&FD_SIZECODEMASK)>> 3)+ 2) %8) +#define FD_SECTSIZE(floppy) ( (floppy)->rate & FD_2M ? \ +			     512 : 128 << FD_SIZECODE(floppy) ) +#define FD_PERP 0x40 + +			spec1,		/* stepping rate, head unload time */ +			fmt_gap;	/* gap2 size */ +	const char	* name; /* used only for predefined formats */ +}; + + +/* commands needing write access have 0x40 set */ +/* commands needing super user access have 0x80 set */ + +#define FDCLRPRM _IO(2, 0x41) +/* clear user-defined parameters */ + +#define FDSETPRM _IOW(2, 0x42, struct floppy_struct)  +#define FDSETMEDIAPRM FDSETPRM +/* set user-defined parameters for current media */ + +#define FDDEFPRM _IOW(2, 0x43, struct floppy_struct)  +#define FDGETPRM _IOR(2, 0x04, struct floppy_struct) +#define FDDEFMEDIAPRM FDDEFPRM +#define FDGETMEDIAPRM FDGETPRM +/* set/get disk parameters */ + + +#define	FDMSGON  _IO(2,0x45) +#define	FDMSGOFF _IO(2,0x46) +/* issue/don't issue kernel messages on media type change */ + + +/*  + * Formatting (obsolete) + */ +#define FD_FILL_BYTE 0xF6 /* format fill byte. */ + +struct format_descr { +	unsigned int device,head,track; +}; + +#define FDFMTBEG _IO(2,0x47) +/* begin formatting a disk */ +#define	FDFMTTRK _IOW(2,0x48, struct format_descr) +/* format the specified track */ +#define FDFMTEND _IO(2,0x49) +/* end formatting a disk */ + + +/* + * Error thresholds + */ +struct floppy_max_errors { +	unsigned int +	  abort,      /* number of errors to be reached before aborting */ +	  read_track, /* maximal number of errors permitted to read an +		       * entire track at once */ +	  reset,      /* maximal number of errors before a reset is tried */ +	  recal,      /* maximal number of errors before a recalibrate is +		       * tried */ + +	  /* +	   * Threshold for reporting FDC errors to the console. +	   * Setting this to zero may flood your screen when using +	   * ultra cheap floppies ;-) +	   */ +	  reporting; + +}; + +#define FDSETEMSGTRESH	_IO(2,0x4a) +/* set fdc error reporting threshold */ + +#define FDFLUSH  _IO(2,0x4b) +/* flush buffers for media; either for verifying media, or for + * handling a media change without closing the file descriptor */ + +#define FDSETMAXERRS _IOW(2, 0x4c, struct floppy_max_errors) +#define FDGETMAXERRS _IOR(2, 0x0e, struct floppy_max_errors) +/* set/get abortion and read_track threshold. See also floppy_drive_params + * structure */ + + +typedef char floppy_drive_name[16]; +#define FDGETDRVTYP _IOR(2, 0x0f, floppy_drive_name) +/* get drive type: 5 1/4 or 3 1/2 */ + + +/* + * Drive parameters (user modifiable) + */ +struct floppy_drive_params { +	signed char cmos;		/* CMOS type */ +	 +	/* Spec2 is (HLD<<1 | ND), where HLD is head load time (1=2ms, 2=4 ms  +	 * etc) and ND is set means no DMA. Hardcoded to 6 (HLD=6ms, use DMA). +	 */ +	unsigned long max_dtr;		/* Step rate, usec */ +	unsigned long hlt;     		/* Head load/settle time, msec */ +	unsigned long hut;     		/* Head unload time (remnant of  +					 * 8" drives) */ +	unsigned long srt;     		/* Step rate, usec */ + +	unsigned long spinup;		/* time needed for spinup (expressed +					 * in jiffies) */ +	unsigned long spindown;		/* timeout needed for spindown */ +	unsigned char spindown_offset;	/* decides in which position the disk +					 * will stop */ +	unsigned char select_delay;	/* delay to wait after select */ +	unsigned char rps;		/* rotations per second */ +	unsigned char tracks;		/* maximum number of tracks */ +	unsigned long timeout;		/* timeout for interrupt requests */ +	 +	unsigned char interleave_sect;	/* if there are more sectors, use  +					 * interleave */ +	 +	struct floppy_max_errors max_errors; +	 +	char flags;			/* various flags, including ftd_msg */ +/* + * Announce successful media type detection and media information loss after + * disk changes. + * Also used to enable/disable printing of overrun warnings. + */ + +#define FTD_MSG 0x10 +#define FD_BROKEN_DCL 0x20 +#define FD_DEBUG 0x02 +#define FD_SILENT_DCL_CLEAR 0x4 +#define FD_INVERTED_DCL 0x80 /* must be 0x80, because of hardware  +				considerations */ + +	char read_track;		/* use readtrack during probing? */ + +/* + * Auto-detection. Each drive type has eight formats which are + * used in succession to try to read the disk. If the FDC cannot lock onto + * the disk, the next format is tried. This uses the variable 'probing'. + */ +	short autodetect[8];		/* autodetected formats */ +	 +	int checkfreq; /* how often should the drive be checked for disk  +			* changes */ +	int native_format; /* native format of this drive */ +}; + +enum { +	FD_NEED_TWADDLE_BIT,	/* more magic */ +	FD_VERIFY_BIT,		/* inquire for write protection */ +	FD_DISK_NEWCHANGE_BIT,	/* change detected, and no action undertaken yet +				 * to clear media change status */ +	FD_UNUSED_BIT, +	FD_DISK_CHANGED_BIT,	/* disk has been changed since last i/o */ +	FD_DISK_WRITABLE_BIT	/* disk is writable */ +}; + +#define FDSETDRVPRM _IOW(2, 0x90, struct floppy_drive_params) +#define FDGETDRVPRM _IOR(2, 0x11, struct floppy_drive_params) +/* set/get drive parameters */ + + +/* + * Current drive state (not directly modifiable by user, readonly) + */ +struct floppy_drive_struct { +	unsigned long flags; +/* values for these flags */ +#define FD_NEED_TWADDLE (1 << FD_NEED_TWADDLE_BIT) +#define FD_VERIFY (1 << FD_VERIFY_BIT) +#define FD_DISK_NEWCHANGE (1 << FD_DISK_NEWCHANGE_BIT) +#define FD_DISK_CHANGED (1 << FD_DISK_CHANGED_BIT) +#define FD_DISK_WRITABLE (1 << FD_DISK_WRITABLE_BIT) + +	unsigned long spinup_date; +	unsigned long select_date; +	unsigned long first_read_date; +	short probed_format; +	short track; /* current track */ +	short maxblock; /* id of highest block read */ +	short maxtrack; /* id of highest half track read */ +	int generation; /* how many diskchanges? */ + +/* + * (User-provided) media information is _not_ discarded after a media change + * if the corresponding keep_data flag is non-zero. Positive values are + * decremented after each probe. + */ +	int keep_data; +	 +	/* Prevent "aliased" accesses. */ +	int fd_ref; +	int fd_device; +	unsigned long last_checked; /* when was the drive last checked for a disk  +			   * change? */ +	 +	char *dmabuf; +	int bufblocks; +}; + +#define FDGETDRVSTAT _IOR(2, 0x12, struct floppy_drive_struct) +#define FDPOLLDRVSTAT _IOR(2, 0x13, struct floppy_drive_struct) +/* get drive state: GET returns the cached state, POLL polls for new state */ + + +/* + * reset FDC + */ +enum reset_mode { +	FD_RESET_IF_NEEDED,	/* reset only if the reset flags is set */ +	FD_RESET_IF_RAWCMD,	/* obsolete */ +	FD_RESET_ALWAYS		/* reset always */ +}; +#define FDRESET _IO(2, 0x54) + + +/* + * FDC state + */ +struct floppy_fdc_state {	 +	int spec1;		/* spec1 value last used */ +	int spec2;		/* spec2 value last used */ +	int dtr; +	unsigned char version;	/* FDC version code */ +	unsigned char dor; +	unsigned long address;	/* io address */ +	unsigned int rawcmd:2; +	unsigned int reset:1; +	unsigned int need_configure:1; +	unsigned int perp_mode:2; +	unsigned int has_fifo:1; +	unsigned int driver_version;	/* version code for floppy driver */ +#define FD_DRIVER_VERSION 0x100 +/* user programs using the floppy API should use floppy_fdc_state to + * get the version number of the floppy driver that they are running + * on. If this version number is bigger than the one compiled into the + * user program (the FD_DRIVER_VERSION define), it should be prepared + * to bigger structures + */ + +	unsigned char track[4]; +	/* Position of the heads of the 4 units attached to this FDC, +	 * as stored on the FDC. In the future, the position as stored +	 * on the FDC might not agree with the actual physical +	 * position of these drive heads. By allowing such +	 * disagreement, it will be possible to reset the FDC without +	 * incurring the expensive cost of repositioning all heads. +	 * Right now, these positions are hard wired to 0. */ + +}; + +#define FDGETFDCSTAT _IOR(2, 0x15, struct floppy_fdc_state) + + +/* + * Asynchronous Write error tracking + */ +struct floppy_write_errors { +	/* Write error logging. +	 * +	 * These fields can be cleared with the FDWERRORCLR ioctl. +	 * Only writes that were attempted but failed due to a physical media +	 * error are logged.  write(2) calls that fail and return an error code +	 * to the user process are not counted. +	 */ + +	unsigned int write_errors;  /* number of physical write errors  +				     * encountered */ +	 +	/* position of first and last write errors */ +	unsigned long first_error_sector; +	int           first_error_generation; +	unsigned long last_error_sector; +	int           last_error_generation; +	 +	unsigned int badness; /* highest retry count for a read or write  +			       * operation */ +}; + +#define FDWERRORCLR  _IO(2, 0x56) +/* clear write error and badness information */ +#define FDWERRORGET  _IOR(2, 0x17, struct floppy_write_errors) +/* get write error and badness information */ + + +/* + * Raw commands + */ +/* new interface flag: now we can do them in batches */ +#define FDHAVEBATCHEDRAWCMD + +struct floppy_raw_cmd { +	unsigned int flags; +#define FD_RAW_READ 1 +#define FD_RAW_WRITE 2 +#define FD_RAW_NO_MOTOR 4 +#define FD_RAW_DISK_CHANGE 4 /* out: disk change flag was set */ +#define FD_RAW_INTR 8    /* wait for an interrupt */ +#define FD_RAW_SPIN 0x10 /* spin up the disk for this command */ +#define FD_RAW_NO_MOTOR_AFTER 0x20 /* switch the motor off after command  +				    * completion */ +#define FD_RAW_NEED_DISK 0x40  /* this command needs a disk to be present */ +#define FD_RAW_NEED_SEEK 0x80  /* this command uses an implied seek (soft) */ + +/* more "in" flags */ +#define FD_RAW_MORE 0x100  /* more records follow */ +#define FD_RAW_STOP_IF_FAILURE 0x200 /* stop if we encounter a failure */ +#define FD_RAW_STOP_IF_SUCCESS 0x400 /* stop if command successful */ +#define FD_RAW_SOFTFAILURE 0x800 /* consider the return value for failure +				  * detection too */ + +/* more "out" flags */ +#define FD_RAW_FAILURE 0x10000 /* command sent to fdc, fdc returned error */ +#define FD_RAW_HARDFAILURE 0x20000 /* fdc had to be reset, or timed out */ + +	void __user *data; +	char *kernel_data; /* location of data buffer in the kernel */ +	struct floppy_raw_cmd *next; /* used for chaining of raw cmd's  +				      * within the kernel */ +	long length; /* in: length of dma transfer. out: remaining bytes */ +	long phys_length; /* physical length, if different from dma length */ +	int buffer_length; /* length of allocated buffer */ + +	unsigned char rate; +	unsigned char cmd_count; +	unsigned char cmd[16]; +	unsigned char reply_count; +	unsigned char reply[16]; +	int track; +	int resultcode; + +	int reserved1; +	int reserved2; +}; + +#define FDRAWCMD _IO(2, 0x58) +/* send a raw command to the fdc. Structure size not included, because of + * batches */ + +#define FDTWADDLE _IO(2, 0x59) +/* flicker motor-on bit before reading a sector. Experimental */ + + +#define FDEJECT _IO(2, 0x5a) +/* eject the disk */ + + + +#endif /* _UAPI_LINUX_FD_H */ diff --git a/include/uapi/linux/fdreg.h b/include/uapi/linux/fdreg.h new file mode 100644 index 00000000000..61ce6416900 --- /dev/null +++ b/include/uapi/linux/fdreg.h @@ -0,0 +1,137 @@ +#ifndef _LINUX_FDREG_H +#define _LINUX_FDREG_H +/* + * This file contains some defines for the floppy disk controller. + * Various sources. Mostly "IBM Microcomputers: A Programmers + * Handbook", Sanches and Canton. + */ + +#ifdef FDPATCHES +#define FD_IOPORT fdc_state[fdc].address +#else +/* It would be a lot saner just to force fdc_state[fdc].address to always +   be set ! FIXME */ +#define FD_IOPORT 0x3f0 +#endif + +/* Fd controller regs. S&C, about page 340 */ +#define FD_STATUS	(4 + FD_IOPORT ) +#define FD_DATA		(5 + FD_IOPORT ) + +/* Digital Output Register */ +#define FD_DOR		(2 + FD_IOPORT ) + +/* Digital Input Register (read) */ +#define FD_DIR		(7 + FD_IOPORT ) + +/* Diskette Control Register (write)*/ +#define FD_DCR		(7 + FD_IOPORT ) + +/* Bits of main status register */ +#define STATUS_BUSYMASK	0x0F		/* drive busy mask */ +#define STATUS_BUSY	0x10		/* FDC busy */ +#define STATUS_DMA	0x20		/* 0- DMA mode */ +#define STATUS_DIR	0x40		/* 0- cpu->fdc */ +#define STATUS_READY	0x80		/* Data reg ready */ + +/* Bits of FD_ST0 */ +#define ST0_DS		0x03		/* drive select mask */ +#define ST0_HA		0x04		/* Head (Address) */ +#define ST0_NR		0x08		/* Not Ready */ +#define ST0_ECE		0x10		/* Equipment check error */ +#define ST0_SE		0x20		/* Seek end */ +#define ST0_INTR	0xC0		/* Interrupt code mask */ + +/* Bits of FD_ST1 */ +#define ST1_MAM		0x01		/* Missing Address Mark */ +#define ST1_WP		0x02		/* Write Protect */ +#define ST1_ND		0x04		/* No Data - unreadable */ +#define ST1_OR		0x10		/* OverRun */ +#define ST1_CRC		0x20		/* CRC error in data or addr */ +#define ST1_EOC		0x80		/* End Of Cylinder */ + +/* Bits of FD_ST2 */ +#define ST2_MAM		0x01		/* Missing Address Mark (again) */ +#define ST2_BC		0x02		/* Bad Cylinder */ +#define ST2_SNS		0x04		/* Scan Not Satisfied */ +#define ST2_SEH		0x08		/* Scan Equal Hit */ +#define ST2_WC		0x10		/* Wrong Cylinder */ +#define ST2_CRC		0x20		/* CRC error in data field */ +#define ST2_CM		0x40		/* Control Mark = deleted */ + +/* Bits of FD_ST3 */ +#define ST3_HA		0x04		/* Head (Address) */ +#define ST3_DS		0x08		/* drive is double-sided */ +#define ST3_TZ		0x10		/* Track Zero signal (1=track 0) */ +#define ST3_RY		0x20		/* drive is ready */ +#define ST3_WP		0x40		/* Write Protect */ +#define ST3_FT		0x80		/* Drive Fault */ + +/* Values for FD_COMMAND */ +#define FD_RECALIBRATE		0x07	/* move to track 0 */ +#define FD_SEEK			0x0F	/* seek track */ +#define FD_READ			0xE6	/* read with MT, MFM, SKip deleted */ +#define FD_WRITE		0xC5	/* write with MT, MFM */ +#define FD_SENSEI		0x08	/* Sense Interrupt Status */ +#define FD_SPECIFY		0x03	/* specify HUT etc */ +#define FD_FORMAT		0x4D	/* format one track */ +#define FD_VERSION		0x10	/* get version code */ +#define FD_CONFIGURE		0x13	/* configure FIFO operation */ +#define FD_PERPENDICULAR	0x12	/* perpendicular r/w mode */ +#define FD_GETSTATUS		0x04	/* read ST3 */ +#define FD_DUMPREGS		0x0E	/* dump the contents of the fdc regs */ +#define FD_READID		0xEA	/* prints the header of a sector */ +#define FD_UNLOCK		0x14	/* Fifo config unlock */ +#define FD_LOCK			0x94	/* Fifo config lock */ +#define FD_RSEEK_OUT		0x8f	/* seek out (i.e. to lower tracks) */ +#define FD_RSEEK_IN		0xcf	/* seek in (i.e. to higher tracks) */ + +/* the following commands are new in the 82078. They are not used in the + * floppy driver, except the first three. These commands may be useful for apps + * which use the FDRAWCMD interface. For doc, get the 82078 spec sheets at + * http://www.intel.com/design/archives/periphrl/docs/29046803.htm */ + +#define FD_PARTID		0x18	/* part id ("extended" version cmd) */ +#define FD_SAVE			0x2e	/* save fdc regs for later restore */ +#define FD_DRIVESPEC		0x8e	/* drive specification: Access to the +					 * 2 Mbps data transfer rate for tape +					 * drives */ + +#define FD_RESTORE		0x4e    /* later restore */ +#define FD_POWERDOWN		0x27	/* configure FDC's powersave features */ +#define FD_FORMAT_N_WRITE	0xef    /* format and write in one go. */ +#define FD_OPTION		0x33	/* ISO format (which is a clean way to +					 * pack more sectors on a track) */ + +/* DMA commands */ +#define DMA_READ	0x46 +#define DMA_WRITE	0x4A + +/* FDC version return types */ +#define FDC_NONE	0x00 +#define FDC_UNKNOWN	0x10	/* DO NOT USE THIS TYPE EXCEPT IF IDENTIFICATION +				   FAILS EARLY */ +#define FDC_8272A	0x20	/* Intel 8272a, NEC 765 */ +#define FDC_765ED	0x30	/* Non-Intel 1MB-compatible FDC, can't detect */ +#define FDC_82072	0x40	/* Intel 82072; 8272a + FIFO + DUMPREGS */ +#define FDC_82072A	0x45	/* 82072A (on Sparcs) */ +#define FDC_82077_ORIG	0x51	/* Original version of 82077AA, sans LOCK */ +#define FDC_82077	0x52	/* 82077AA-1 */ +#define FDC_82078_UNKN	0x5f	/* Unknown 82078 variant */ +#define FDC_82078	0x60	/* 44pin 82078 or 64pin 82078SL */ +#define FDC_82078_1	0x61	/* 82078-1 (2Mbps fdc) */ +#define FDC_S82078B	0x62	/* S82078B (first seen on Adaptec AVA-2825 VLB +				 * SCSI/EIDE/Floppy controller) */ +#define FDC_87306	0x63	/* National Semiconductor PC 87306 */ + +/* + * Beware: the fdc type list is roughly sorted by increasing features. + * Presence of features is tested by comparing the FDC version id with the + * "oldest" version that has the needed feature. + * If during FDC detection, an obscure test fails late in the sequence, don't + * assign FDC_UNKNOWN. Else the FDC will be treated as a dumb 8272a, or worse. + * This is especially true if the tests are unneeded. + */ + +#define FD_RESET_DELAY 20 +#endif diff --git a/include/uapi/linux/fib_rules.h b/include/uapi/linux/fib_rules.h new file mode 100644 index 00000000000..51da65b68b8 --- /dev/null +++ b/include/uapi/linux/fib_rules.h @@ -0,0 +1,72 @@ +#ifndef __LINUX_FIB_RULES_H +#define __LINUX_FIB_RULES_H + +#include <linux/types.h> +#include <linux/rtnetlink.h> + +/* rule is permanent, and cannot be deleted */ +#define FIB_RULE_PERMANENT	0x00000001 +#define FIB_RULE_INVERT		0x00000002 +#define FIB_RULE_UNRESOLVED	0x00000004 +#define FIB_RULE_IIF_DETACHED	0x00000008 +#define FIB_RULE_DEV_DETACHED	FIB_RULE_IIF_DETACHED +#define FIB_RULE_OIF_DETACHED	0x00000010 + +/* try to find source address in routing lookups */ +#define FIB_RULE_FIND_SADDR	0x00010000 + +struct fib_rule_hdr { +	__u8		family; +	__u8		dst_len; +	__u8		src_len; +	__u8		tos; + +	__u8		table; +	__u8		res1;	/* reserved */ +	__u8		res2;	/* reserved */ +	__u8		action; + +	__u32		flags; +}; + +enum { +	FRA_UNSPEC, +	FRA_DST,	/* destination address */ +	FRA_SRC,	/* source address */ +	FRA_IIFNAME,	/* interface name */ +#define FRA_IFNAME	FRA_IIFNAME +	FRA_GOTO,	/* target to jump to (FR_ACT_GOTO) */ +	FRA_UNUSED2, +	FRA_PRIORITY,	/* priority/preference */ +	FRA_UNUSED3, +	FRA_UNUSED4, +	FRA_UNUSED5, +	FRA_FWMARK,	/* mark */ +	FRA_FLOW,	/* flow/class id */ +	FRA_UNUSED6, +	FRA_UNUSED7, +	FRA_UNUSED8, +	FRA_TABLE,	/* Extended table id */ +	FRA_FWMASK,	/* mask for netfilter mark */ +	FRA_OIFNAME, +	__FRA_MAX +}; + +#define FRA_MAX (__FRA_MAX - 1) + +enum { +	FR_ACT_UNSPEC, +	FR_ACT_TO_TBL,		/* Pass to fixed table */ +	FR_ACT_GOTO,		/* Jump to another rule */ +	FR_ACT_NOP,		/* No operation */ +	FR_ACT_RES3, +	FR_ACT_RES4, +	FR_ACT_BLACKHOLE,	/* Drop without notification */ +	FR_ACT_UNREACHABLE,	/* Drop with ENETUNREACH */ +	FR_ACT_PROHIBIT,	/* Drop with EACCES */ +	__FR_ACT_MAX, +}; + +#define FR_ACT_MAX (__FR_ACT_MAX - 1) + +#endif diff --git a/include/uapi/linux/fiemap.h b/include/uapi/linux/fiemap.h new file mode 100644 index 00000000000..d830747f5c0 --- /dev/null +++ b/include/uapi/linux/fiemap.h @@ -0,0 +1,68 @@ +/* + * FS_IOC_FIEMAP ioctl infrastructure. + * + * Some portions copyright (C) 2007 Cluster File Systems, Inc + * + * Authors: Mark Fasheh <mfasheh@suse.com> + *          Kalpak Shah <kalpak.shah@sun.com> + *          Andreas Dilger <adilger@sun.com> + */ + +#ifndef _LINUX_FIEMAP_H +#define _LINUX_FIEMAP_H + +#include <linux/types.h> + +struct fiemap_extent { +	__u64 fe_logical;  /* logical offset in bytes for the start of +			    * the extent from the beginning of the file */ +	__u64 fe_physical; /* physical offset in bytes for the start +			    * of the extent from the beginning of the disk */ +	__u64 fe_length;   /* length in bytes for this extent */ +	__u64 fe_reserved64[2]; +	__u32 fe_flags;    /* FIEMAP_EXTENT_* flags for this extent */ +	__u32 fe_reserved[3]; +}; + +struct fiemap { +	__u64 fm_start;		/* logical offset (inclusive) at +				 * which to start mapping (in) */ +	__u64 fm_length;	/* logical length of mapping which +				 * userspace wants (in) */ +	__u32 fm_flags;		/* FIEMAP_FLAG_* flags for request (in/out) */ +	__u32 fm_mapped_extents;/* number of extents that were mapped (out) */ +	__u32 fm_extent_count;  /* size of fm_extents array (in) */ +	__u32 fm_reserved; +	struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */ +}; + +#define FIEMAP_MAX_OFFSET	(~0ULL) + +#define FIEMAP_FLAG_SYNC	0x00000001 /* sync file data before map */ +#define FIEMAP_FLAG_XATTR	0x00000002 /* map extended attribute tree */ + +#define FIEMAP_FLAGS_COMPAT	(FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR) + +#define FIEMAP_EXTENT_LAST		0x00000001 /* Last extent in file. */ +#define FIEMAP_EXTENT_UNKNOWN		0x00000002 /* Data location unknown. */ +#define FIEMAP_EXTENT_DELALLOC		0x00000004 /* Location still pending. +						    * Sets EXTENT_UNKNOWN. */ +#define FIEMAP_EXTENT_ENCODED		0x00000008 /* Data can not be read +						    * while fs is unmounted */ +#define FIEMAP_EXTENT_DATA_ENCRYPTED	0x00000080 /* Data is encrypted by fs. +						    * Sets EXTENT_NO_BYPASS. */ +#define FIEMAP_EXTENT_NOT_ALIGNED	0x00000100 /* Extent offsets may not be +						    * block aligned. */ +#define FIEMAP_EXTENT_DATA_INLINE	0x00000200 /* Data mixed with metadata. +						    * Sets EXTENT_NOT_ALIGNED.*/ +#define FIEMAP_EXTENT_DATA_TAIL		0x00000400 /* Multiple files in block. +						    * Sets EXTENT_NOT_ALIGNED.*/ +#define FIEMAP_EXTENT_UNWRITTEN		0x00000800 /* Space allocated, but +						    * no data (i.e. zero). */ +#define FIEMAP_EXTENT_MERGED		0x00001000 /* File does not natively +						    * support extents. Result +						    * merged for efficiency. */ +#define FIEMAP_EXTENT_SHARED		0x00002000 /* Space shared with other +						    * files. */ + +#endif /* _LINUX_FIEMAP_H */ diff --git a/include/uapi/linux/filter.h b/include/uapi/linux/filter.h new file mode 100644 index 00000000000..3d7922433ab --- /dev/null +++ b/include/uapi/linux/filter.h @@ -0,0 +1,135 @@ +/* + * Linux Socket Filter Data Structures + */ + +#ifndef _UAPI__LINUX_FILTER_H__ +#define _UAPI__LINUX_FILTER_H__ + +#include <linux/compiler.h> +#include <linux/types.h> + + +/* + * Current version of the filter code architecture. + */ +#define BPF_MAJOR_VERSION 1 +#define BPF_MINOR_VERSION 1 + +/* + *	Try and keep these values and structures similar to BSD, especially + *	the BPF code definitions which need to match so you can share filters + */ +  +struct sock_filter {	/* Filter block */ +	__u16	code;   /* Actual filter code */ +	__u8	jt;	/* Jump true */ +	__u8	jf;	/* Jump false */ +	__u32	k;      /* Generic multiuse field */ +}; + +struct sock_fprog {	/* Required for SO_ATTACH_FILTER. */ +	unsigned short		len;	/* Number of filter blocks */ +	struct sock_filter __user *filter; +}; + +/* + * Instruction classes + */ + +#define BPF_CLASS(code) ((code) & 0x07) +#define         BPF_LD          0x00 +#define         BPF_LDX         0x01 +#define         BPF_ST          0x02 +#define         BPF_STX         0x03 +#define         BPF_ALU         0x04 +#define         BPF_JMP         0x05 +#define         BPF_RET         0x06 +#define         BPF_MISC        0x07 + +/* ld/ldx fields */ +#define BPF_SIZE(code)  ((code) & 0x18) +#define         BPF_W           0x00 +#define         BPF_H           0x08 +#define         BPF_B           0x10 +#define BPF_MODE(code)  ((code) & 0xe0) +#define         BPF_IMM         0x00 +#define         BPF_ABS         0x20 +#define         BPF_IND         0x40 +#define         BPF_MEM         0x60 +#define         BPF_LEN         0x80 +#define         BPF_MSH         0xa0 + +/* alu/jmp fields */ +#define BPF_OP(code)    ((code) & 0xf0) +#define         BPF_ADD         0x00 +#define         BPF_SUB         0x10 +#define         BPF_MUL         0x20 +#define         BPF_DIV         0x30 +#define         BPF_OR          0x40 +#define         BPF_AND         0x50 +#define         BPF_LSH         0x60 +#define         BPF_RSH         0x70 +#define         BPF_NEG         0x80 +#define		BPF_MOD		0x90 +#define		BPF_XOR		0xa0 + +#define         BPF_JA          0x00 +#define         BPF_JEQ         0x10 +#define         BPF_JGT         0x20 +#define         BPF_JGE         0x30 +#define         BPF_JSET        0x40 +#define BPF_SRC(code)   ((code) & 0x08) +#define         BPF_K           0x00 +#define         BPF_X           0x08 + +/* ret - BPF_K and BPF_X also apply */ +#define BPF_RVAL(code)  ((code) & 0x18) +#define         BPF_A           0x10 + +/* misc */ +#define BPF_MISCOP(code) ((code) & 0xf8) +#define         BPF_TAX         0x00 +#define         BPF_TXA         0x80 + +#ifndef BPF_MAXINSNS +#define BPF_MAXINSNS 4096 +#endif + +/* + * Macros for filter block array initializers. + */ +#ifndef BPF_STMT +#define BPF_STMT(code, k) { (unsigned short)(code), 0, 0, k } +#endif +#ifndef BPF_JUMP +#define BPF_JUMP(code, k, jt, jf) { (unsigned short)(code), jt, jf, k } +#endif + +/* + * Number of scratch memory words for: BPF_ST and BPF_STX + */ +#define BPF_MEMWORDS 16 + +/* RATIONALE. Negative offsets are invalid in BPF. +   We use them to reference ancillary data. +   Unlike introduction new instructions, it does not break +   existing compilers/optimizers. + */ +#define SKF_AD_OFF    (-0x1000) +#define SKF_AD_PROTOCOL 0 +#define SKF_AD_PKTTYPE 	4 +#define SKF_AD_IFINDEX 	8 +#define SKF_AD_NLATTR	12 +#define SKF_AD_NLATTR_NEST	16 +#define SKF_AD_MARK 	20 +#define SKF_AD_QUEUE	24 +#define SKF_AD_HATYPE	28 +#define SKF_AD_RXHASH	32 +#define SKF_AD_CPU	36 +#define SKF_AD_ALU_XOR_X	40 +#define SKF_AD_MAX	44 +#define SKF_NET_OFF   (-0x100000) +#define SKF_LL_OFF    (-0x200000) + + +#endif /* _UAPI__LINUX_FILTER_H__ */ diff --git a/include/uapi/linux/firewire-cdev.h b/include/uapi/linux/firewire-cdev.h new file mode 100644 index 00000000000..d5003695349 --- /dev/null +++ b/include/uapi/linux/firewire-cdev.h @@ -0,0 +1,1039 @@ +/* + * Char device interface. + * + * Copyright (C) 2005-2007  Kristian Hoegsberg <krh@bitplanet.net> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef _LINUX_FIREWIRE_CDEV_H +#define _LINUX_FIREWIRE_CDEV_H + +#include <linux/ioctl.h> +#include <linux/types.h> +#include <linux/firewire-constants.h> + +/* available since kernel version 2.6.22 */ +#define FW_CDEV_EVENT_BUS_RESET				0x00 +#define FW_CDEV_EVENT_RESPONSE				0x01 +#define FW_CDEV_EVENT_REQUEST				0x02 +#define FW_CDEV_EVENT_ISO_INTERRUPT			0x03 + +/* available since kernel version 2.6.30 */ +#define FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED		0x04 +#define FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED		0x05 + +/* available since kernel version 2.6.36 */ +#define FW_CDEV_EVENT_REQUEST2				0x06 +#define FW_CDEV_EVENT_PHY_PACKET_SENT			0x07 +#define FW_CDEV_EVENT_PHY_PACKET_RECEIVED		0x08 +#define FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL	0x09 + +/** + * struct fw_cdev_event_common - Common part of all fw_cdev_event_ types + * @closure:	For arbitrary use by userspace + * @type:	Discriminates the fw_cdev_event_ types + * + * This struct may be used to access generic members of all fw_cdev_event_ + * types regardless of the specific type. + * + * Data passed in the @closure field for a request will be returned in the + * corresponding event.  It is big enough to hold a pointer on all platforms. + * The ioctl used to set @closure depends on the @type of event. + */ +struct fw_cdev_event_common { +	__u64 closure; +	__u32 type; +}; + +/** + * struct fw_cdev_event_bus_reset - Sent when a bus reset occurred + * @closure:	See &fw_cdev_event_common; set by %FW_CDEV_IOC_GET_INFO ioctl + * @type:	See &fw_cdev_event_common; always %FW_CDEV_EVENT_BUS_RESET + * @node_id:       New node ID of this node + * @local_node_id: Node ID of the local node, i.e. of the controller + * @bm_node_id:    Node ID of the bus manager + * @irm_node_id:   Node ID of the iso resource manager + * @root_node_id:  Node ID of the root node + * @generation:    New bus generation + * + * This event is sent when the bus the device belongs to goes through a bus + * reset.  It provides information about the new bus configuration, such as + * new node ID for this device, new root ID, and others. + * + * If @bm_node_id is 0xffff right after bus reset it can be reread by an + * %FW_CDEV_IOC_GET_INFO ioctl after bus manager selection was finished. + * Kernels with ABI version < 4 do not set @bm_node_id. + */ +struct fw_cdev_event_bus_reset { +	__u64 closure; +	__u32 type; +	__u32 node_id; +	__u32 local_node_id; +	__u32 bm_node_id; +	__u32 irm_node_id; +	__u32 root_node_id; +	__u32 generation; +}; + +/** + * struct fw_cdev_event_response - Sent when a response packet was received + * @closure:	See &fw_cdev_event_common; set by %FW_CDEV_IOC_SEND_REQUEST + *		or %FW_CDEV_IOC_SEND_BROADCAST_REQUEST + *		or %FW_CDEV_IOC_SEND_STREAM_PACKET ioctl + * @type:	See &fw_cdev_event_common; always %FW_CDEV_EVENT_RESPONSE + * @rcode:	Response code returned by the remote node + * @length:	Data length, i.e. the response's payload size in bytes + * @data:	Payload data, if any + * + * This event is sent when the stack receives a response to an outgoing request + * sent by %FW_CDEV_IOC_SEND_REQUEST ioctl.  The payload data for responses + * carrying data (read and lock responses) follows immediately and can be + * accessed through the @data field. + * + * The event is also generated after conclusions of transactions that do not + * involve response packets.  This includes unified write transactions, + * broadcast write transactions, and transmission of asynchronous stream + * packets.  @rcode indicates success or failure of such transmissions. + */ +struct fw_cdev_event_response { +	__u64 closure; +	__u32 type; +	__u32 rcode; +	__u32 length; +	__u32 data[0]; +}; + +/** + * struct fw_cdev_event_request - Old version of &fw_cdev_event_request2 + * @type:	See &fw_cdev_event_common; always %FW_CDEV_EVENT_REQUEST + * + * This event is sent instead of &fw_cdev_event_request2 if the kernel or + * the client implements ABI version <= 3.  &fw_cdev_event_request lacks + * essential information; use &fw_cdev_event_request2 instead. + */ +struct fw_cdev_event_request { +	__u64 closure; +	__u32 type; +	__u32 tcode; +	__u64 offset; +	__u32 handle; +	__u32 length; +	__u32 data[0]; +}; + +/** + * struct fw_cdev_event_request2 - Sent on incoming request to an address region + * @closure:	See &fw_cdev_event_common; set by %FW_CDEV_IOC_ALLOCATE ioctl + * @type:	See &fw_cdev_event_common; always %FW_CDEV_EVENT_REQUEST2 + * @tcode:	Transaction code of the incoming request + * @offset:	The offset into the 48-bit per-node address space + * @source_node_id: Sender node ID + * @destination_node_id: Destination node ID + * @card:	The index of the card from which the request came + * @generation:	Bus generation in which the request is valid + * @handle:	Reference to the kernel-side pending request + * @length:	Data length, i.e. the request's payload size in bytes + * @data:	Incoming data, if any + * + * This event is sent when the stack receives an incoming request to an address + * region registered using the %FW_CDEV_IOC_ALLOCATE ioctl.  The request is + * guaranteed to be completely contained in the specified region.  Userspace is + * responsible for sending the response by %FW_CDEV_IOC_SEND_RESPONSE ioctl, + * using the same @handle. + * + * The payload data for requests carrying data (write and lock requests) + * follows immediately and can be accessed through the @data field. + * + * Unlike &fw_cdev_event_request, @tcode of lock requests is one of the + * firewire-core specific %TCODE_LOCK_MASK_SWAP...%TCODE_LOCK_VENDOR_DEPENDENT, + * i.e. encodes the extended transaction code. + * + * @card may differ from &fw_cdev_get_info.card because requests are received + * from all cards of the Linux host.  @source_node_id, @destination_node_id, and + * @generation pertain to that card.  Destination node ID and bus generation may + * therefore differ from the corresponding fields of the last + * &fw_cdev_event_bus_reset. + * + * @destination_node_id may also differ from the current node ID because of a + * non-local bus ID part or in case of a broadcast write request.  Note, a + * client must call an %FW_CDEV_IOC_SEND_RESPONSE ioctl even in case of a + * broadcast write request; the kernel will then release the kernel-side pending + * request but will not actually send a response packet. + * + * In case of a write request to FCP_REQUEST or FCP_RESPONSE, the kernel already + * sent a write response immediately after the request was received; in this + * case the client must still call an %FW_CDEV_IOC_SEND_RESPONSE ioctl to + * release the kernel-side pending request, though another response won't be + * sent. + * + * If the client subsequently needs to initiate requests to the sender node of + * an &fw_cdev_event_request2, it needs to use a device file with matching + * card index, node ID, and generation for outbound requests. + */ +struct fw_cdev_event_request2 { +	__u64 closure; +	__u32 type; +	__u32 tcode; +	__u64 offset; +	__u32 source_node_id; +	__u32 destination_node_id; +	__u32 card; +	__u32 generation; +	__u32 handle; +	__u32 length; +	__u32 data[0]; +}; + +/** + * struct fw_cdev_event_iso_interrupt - Sent when an iso packet was completed + * @closure:	See &fw_cdev_event_common; + *		set by %FW_CDEV_CREATE_ISO_CONTEXT ioctl + * @type:	See &fw_cdev_event_common; always %FW_CDEV_EVENT_ISO_INTERRUPT + * @cycle:	Cycle counter of the last completed packet + * @header_length: Total length of following headers, in bytes + * @header:	Stripped headers, if any + * + * This event is sent when the controller has completed an &fw_cdev_iso_packet + * with the %FW_CDEV_ISO_INTERRUPT bit set, when explicitly requested with + * %FW_CDEV_IOC_FLUSH_ISO, or when there have been so many completed packets + * without the interrupt bit set that the kernel's internal buffer for @header + * is about to overflow.  (In the last case, kernels with ABI version < 5 drop + * header data up to the next interrupt packet.) + * + * Isochronous transmit events (context type %FW_CDEV_ISO_CONTEXT_TRANSMIT): + * + * In version 3 and some implementations of version 2 of the ABI, &header_length + * is a multiple of 4 and &header contains timestamps of all packets up until + * the interrupt packet.  The format of the timestamps is as described below for + * isochronous reception.  In version 1 of the ABI, &header_length was 0. + * + * Isochronous receive events (context type %FW_CDEV_ISO_CONTEXT_RECEIVE): + * + * The headers stripped of all packets up until and including the interrupt + * packet are returned in the @header field.  The amount of header data per + * packet is as specified at iso context creation by + * &fw_cdev_create_iso_context.header_size. + * + * Hence, _interrupt.header_length / _context.header_size is the number of + * packets received in this interrupt event.  The client can now iterate + * through the mmap()'ed DMA buffer according to this number of packets and + * to the buffer sizes as the client specified in &fw_cdev_queue_iso. + * + * Since version 2 of this ABI, the portion for each packet in _interrupt.header + * consists of the 1394 isochronous packet header, followed by a timestamp + * quadlet if &fw_cdev_create_iso_context.header_size > 4, followed by quadlets + * from the packet payload if &fw_cdev_create_iso_context.header_size > 8. + * + * Format of 1394 iso packet header:  16 bits data_length, 2 bits tag, 6 bits + * channel, 4 bits tcode, 4 bits sy, in big endian byte order. + * data_length is the actual received size of the packet without the four + * 1394 iso packet header bytes. + * + * Format of timestamp:  16 bits invalid, 3 bits cycleSeconds, 13 bits + * cycleCount, in big endian byte order. + * + * In version 1 of the ABI, no timestamp quadlet was inserted; instead, payload + * data followed directly after the 1394 is header if header_size > 4. + * Behaviour of ver. 1 of this ABI is no longer available since ABI ver. 2. + */ +struct fw_cdev_event_iso_interrupt { +	__u64 closure; +	__u32 type; +	__u32 cycle; +	__u32 header_length; +	__u32 header[0]; +}; + +/** + * struct fw_cdev_event_iso_interrupt_mc - An iso buffer chunk was completed + * @closure:	See &fw_cdev_event_common; + *		set by %FW_CDEV_CREATE_ISO_CONTEXT ioctl + * @type:	%FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL + * @completed:	Offset into the receive buffer; data before this offset is valid + * + * This event is sent in multichannel contexts (context type + * %FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL) for &fw_cdev_iso_packet buffer + * chunks that have been completely filled and that have the + * %FW_CDEV_ISO_INTERRUPT bit set, or when explicitly requested with + * %FW_CDEV_IOC_FLUSH_ISO. + * + * The buffer is continuously filled with the following data, per packet: + *  - the 1394 iso packet header as described at &fw_cdev_event_iso_interrupt, + *    but in little endian byte order, + *  - packet payload (as many bytes as specified in the data_length field of + *    the 1394 iso packet header) in big endian byte order, + *  - 0...3 padding bytes as needed to align the following trailer quadlet, + *  - trailer quadlet, containing the reception timestamp as described at + *    &fw_cdev_event_iso_interrupt, but in little endian byte order. + * + * Hence the per-packet size is data_length (rounded up to a multiple of 4) + 8. + * When processing the data, stop before a packet that would cross the + * @completed offset. + * + * A packet near the end of a buffer chunk will typically spill over into the + * next queued buffer chunk.  It is the responsibility of the client to check + * for this condition, assemble a broken-up packet from its parts, and not to + * re-queue any buffer chunks in which as yet unread packet parts reside. + */ +struct fw_cdev_event_iso_interrupt_mc { +	__u64 closure; +	__u32 type; +	__u32 completed; +}; + +/** + * struct fw_cdev_event_iso_resource - Iso resources were allocated or freed + * @closure:	See &fw_cdev_event_common; + *		set by %FW_CDEV_IOC_(DE)ALLOCATE_ISO_RESOURCE(_ONCE) ioctl + * @type:	%FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED or + *		%FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED + * @handle:	Reference by which an allocated resource can be deallocated + * @channel:	Isochronous channel which was (de)allocated, if any + * @bandwidth:	Bandwidth allocation units which were (de)allocated, if any + * + * An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED event is sent after an isochronous + * resource was allocated at the IRM.  The client has to check @channel and + * @bandwidth for whether the allocation actually succeeded. + * + * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event is sent after an isochronous + * resource was deallocated at the IRM.  It is also sent when automatic + * reallocation after a bus reset failed. + * + * @channel is <0 if no channel was (de)allocated or if reallocation failed. + * @bandwidth is 0 if no bandwidth was (de)allocated or if reallocation failed. + */ +struct fw_cdev_event_iso_resource { +	__u64 closure; +	__u32 type; +	__u32 handle; +	__s32 channel; +	__s32 bandwidth; +}; + +/** + * struct fw_cdev_event_phy_packet - A PHY packet was transmitted or received + * @closure:	See &fw_cdev_event_common; set by %FW_CDEV_IOC_SEND_PHY_PACKET + *		or %FW_CDEV_IOC_RECEIVE_PHY_PACKETS ioctl + * @type:	%FW_CDEV_EVENT_PHY_PACKET_SENT or %..._RECEIVED + * @rcode:	%RCODE_..., indicates success or failure of transmission + * @length:	Data length in bytes + * @data:	Incoming data + * + * If @type is %FW_CDEV_EVENT_PHY_PACKET_SENT, @length is 0 and @data empty, + * except in case of a ping packet:  Then, @length is 4, and @data[0] is the + * ping time in 49.152MHz clocks if @rcode is %RCODE_COMPLETE. + * + * If @type is %FW_CDEV_EVENT_PHY_PACKET_RECEIVED, @length is 8 and @data + * consists of the two PHY packet quadlets, in host byte order. + */ +struct fw_cdev_event_phy_packet { +	__u64 closure; +	__u32 type; +	__u32 rcode; +	__u32 length; +	__u32 data[0]; +}; + +/** + * union fw_cdev_event - Convenience union of fw_cdev_event_ types + * @common:		Valid for all types + * @bus_reset:		Valid if @common.type == %FW_CDEV_EVENT_BUS_RESET + * @response:		Valid if @common.type == %FW_CDEV_EVENT_RESPONSE + * @request:		Valid if @common.type == %FW_CDEV_EVENT_REQUEST + * @request2:		Valid if @common.type == %FW_CDEV_EVENT_REQUEST2 + * @iso_interrupt:	Valid if @common.type == %FW_CDEV_EVENT_ISO_INTERRUPT + * @iso_interrupt_mc:	Valid if @common.type == + *				%FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL + * @iso_resource:	Valid if @common.type == + *				%FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED or + *				%FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED + * @phy_packet:		Valid if @common.type == + *				%FW_CDEV_EVENT_PHY_PACKET_SENT or + *				%FW_CDEV_EVENT_PHY_PACKET_RECEIVED + * + * Convenience union for userspace use.  Events could be read(2) into an + * appropriately aligned char buffer and then cast to this union for further + * processing.  Note that for a request, response or iso_interrupt event, + * the data[] or header[] may make the size of the full event larger than + * sizeof(union fw_cdev_event).  Also note that if you attempt to read(2) + * an event into a buffer that is not large enough for it, the data that does + * not fit will be discarded so that the next read(2) will return a new event. + */ +union fw_cdev_event { +	struct fw_cdev_event_common		common; +	struct fw_cdev_event_bus_reset		bus_reset; +	struct fw_cdev_event_response		response; +	struct fw_cdev_event_request		request; +	struct fw_cdev_event_request2		request2;		/* added in 2.6.36 */ +	struct fw_cdev_event_iso_interrupt	iso_interrupt; +	struct fw_cdev_event_iso_interrupt_mc	iso_interrupt_mc;	/* added in 2.6.36 */ +	struct fw_cdev_event_iso_resource	iso_resource;		/* added in 2.6.30 */ +	struct fw_cdev_event_phy_packet		phy_packet;		/* added in 2.6.36 */ +}; + +/* available since kernel version 2.6.22 */ +#define FW_CDEV_IOC_GET_INFO           _IOWR('#', 0x00, struct fw_cdev_get_info) +#define FW_CDEV_IOC_SEND_REQUEST        _IOW('#', 0x01, struct fw_cdev_send_request) +#define FW_CDEV_IOC_ALLOCATE           _IOWR('#', 0x02, struct fw_cdev_allocate) +#define FW_CDEV_IOC_DEALLOCATE          _IOW('#', 0x03, struct fw_cdev_deallocate) +#define FW_CDEV_IOC_SEND_RESPONSE       _IOW('#', 0x04, struct fw_cdev_send_response) +#define FW_CDEV_IOC_INITIATE_BUS_RESET  _IOW('#', 0x05, struct fw_cdev_initiate_bus_reset) +#define FW_CDEV_IOC_ADD_DESCRIPTOR     _IOWR('#', 0x06, struct fw_cdev_add_descriptor) +#define FW_CDEV_IOC_REMOVE_DESCRIPTOR   _IOW('#', 0x07, struct fw_cdev_remove_descriptor) +#define FW_CDEV_IOC_CREATE_ISO_CONTEXT _IOWR('#', 0x08, struct fw_cdev_create_iso_context) +#define FW_CDEV_IOC_QUEUE_ISO          _IOWR('#', 0x09, struct fw_cdev_queue_iso) +#define FW_CDEV_IOC_START_ISO           _IOW('#', 0x0a, struct fw_cdev_start_iso) +#define FW_CDEV_IOC_STOP_ISO            _IOW('#', 0x0b, struct fw_cdev_stop_iso) + +/* available since kernel version 2.6.24 */ +#define FW_CDEV_IOC_GET_CYCLE_TIMER     _IOR('#', 0x0c, struct fw_cdev_get_cycle_timer) + +/* available since kernel version 2.6.30 */ +#define FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE       _IOWR('#', 0x0d, struct fw_cdev_allocate_iso_resource) +#define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE      _IOW('#', 0x0e, struct fw_cdev_deallocate) +#define FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE   _IOW('#', 0x0f, struct fw_cdev_allocate_iso_resource) +#define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE _IOW('#', 0x10, struct fw_cdev_allocate_iso_resource) +#define FW_CDEV_IOC_GET_SPEED                     _IO('#', 0x11) /* returns speed code */ +#define FW_CDEV_IOC_SEND_BROADCAST_REQUEST       _IOW('#', 0x12, struct fw_cdev_send_request) +#define FW_CDEV_IOC_SEND_STREAM_PACKET           _IOW('#', 0x13, struct fw_cdev_send_stream_packet) + +/* available since kernel version 2.6.34 */ +#define FW_CDEV_IOC_GET_CYCLE_TIMER2   _IOWR('#', 0x14, struct fw_cdev_get_cycle_timer2) + +/* available since kernel version 2.6.36 */ +#define FW_CDEV_IOC_SEND_PHY_PACKET    _IOWR('#', 0x15, struct fw_cdev_send_phy_packet) +#define FW_CDEV_IOC_RECEIVE_PHY_PACKETS _IOW('#', 0x16, struct fw_cdev_receive_phy_packets) +#define FW_CDEV_IOC_SET_ISO_CHANNELS    _IOW('#', 0x17, struct fw_cdev_set_iso_channels) + +/* available since kernel version 3.4 */ +#define FW_CDEV_IOC_FLUSH_ISO           _IOW('#', 0x18, struct fw_cdev_flush_iso) + +/* + * ABI version history + *  1  (2.6.22)  - initial version + *     (2.6.24)  - added %FW_CDEV_IOC_GET_CYCLE_TIMER + *  2  (2.6.30)  - changed &fw_cdev_event_iso_interrupt.header if + *                 &fw_cdev_create_iso_context.header_size is 8 or more + *               - added %FW_CDEV_IOC_*_ISO_RESOURCE*, + *                 %FW_CDEV_IOC_GET_SPEED, %FW_CDEV_IOC_SEND_BROADCAST_REQUEST, + *                 %FW_CDEV_IOC_SEND_STREAM_PACKET + *     (2.6.32)  - added time stamp to xmit &fw_cdev_event_iso_interrupt + *     (2.6.33)  - IR has always packet-per-buffer semantics now, not one of + *                 dual-buffer or packet-per-buffer depending on hardware + *               - shared use and auto-response for FCP registers + *  3  (2.6.34)  - made &fw_cdev_get_cycle_timer reliable + *               - added %FW_CDEV_IOC_GET_CYCLE_TIMER2 + *  4  (2.6.36)  - added %FW_CDEV_EVENT_REQUEST2, %FW_CDEV_EVENT_PHY_PACKET_*, + *                 and &fw_cdev_allocate.region_end + *               - implemented &fw_cdev_event_bus_reset.bm_node_id + *               - added %FW_CDEV_IOC_SEND_PHY_PACKET, _RECEIVE_PHY_PACKETS + *               - added %FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL, + *                 %FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL, and + *                 %FW_CDEV_IOC_SET_ISO_CHANNELS + *  5  (3.4)     - send %FW_CDEV_EVENT_ISO_INTERRUPT events when needed to + *                 avoid dropping data + *               - added %FW_CDEV_IOC_FLUSH_ISO + */ + +/** + * struct fw_cdev_get_info - General purpose information ioctl + * @version:	The version field is just a running serial number.  Both an + *		input parameter (ABI version implemented by the client) and + *		output parameter (ABI version implemented by the kernel). + *		A client shall fill in the ABI @version for which the client + *		was implemented.  This is necessary for forward compatibility. + * @rom_length:	If @rom is non-zero, up to @rom_length bytes of Configuration + *		ROM will be copied into that user space address.  In either + *		case, @rom_length is updated with the actual length of the + *		Configuration ROM. + * @rom:	If non-zero, address of a buffer to be filled by a copy of the + *		device's Configuration ROM + * @bus_reset:	If non-zero, address of a buffer to be filled by a + *		&struct fw_cdev_event_bus_reset with the current state + *		of the bus.  This does not cause a bus reset to happen. + * @bus_reset_closure: Value of &closure in this and subsequent bus reset events + * @card:	The index of the card this device belongs to + * + * The %FW_CDEV_IOC_GET_INFO ioctl is usually the very first one which a client + * performs right after it opened a /dev/fw* file. + * + * As a side effect, reception of %FW_CDEV_EVENT_BUS_RESET events to be read(2) + * is started by this ioctl. + */ +struct fw_cdev_get_info { +	__u32 version; +	__u32 rom_length; +	__u64 rom; +	__u64 bus_reset; +	__u64 bus_reset_closure; +	__u32 card; +}; + +/** + * struct fw_cdev_send_request - Send an asynchronous request packet + * @tcode:	Transaction code of the request + * @length:	Length of outgoing payload, in bytes + * @offset:	48-bit offset at destination node + * @closure:	Passed back to userspace in the response event + * @data:	Userspace pointer to payload + * @generation:	The bus generation where packet is valid + * + * Send a request to the device.  This ioctl implements all outgoing requests. + * Both quadlet and block request specify the payload as a pointer to the data + * in the @data field.  Once the transaction completes, the kernel writes an + * &fw_cdev_event_response event back.  The @closure field is passed back to + * user space in the response event. + */ +struct fw_cdev_send_request { +	__u32 tcode; +	__u32 length; +	__u64 offset; +	__u64 closure; +	__u64 data; +	__u32 generation; +}; + +/** + * struct fw_cdev_send_response - Send an asynchronous response packet + * @rcode:	Response code as determined by the userspace handler + * @length:	Length of outgoing payload, in bytes + * @data:	Userspace pointer to payload + * @handle:	The handle from the &fw_cdev_event_request + * + * Send a response to an incoming request.  By setting up an address range using + * the %FW_CDEV_IOC_ALLOCATE ioctl, userspace can listen for incoming requests.  An + * incoming request will generate an %FW_CDEV_EVENT_REQUEST, and userspace must + * send a reply using this ioctl.  The event has a handle to the kernel-side + * pending transaction, which should be used with this ioctl. + */ +struct fw_cdev_send_response { +	__u32 rcode; +	__u32 length; +	__u64 data; +	__u32 handle; +}; + +/** + * struct fw_cdev_allocate - Allocate a CSR in an address range + * @offset:	Start offset of the address range + * @closure:	To be passed back to userspace in request events + * @length:	Length of the CSR, in bytes + * @handle:	Handle to the allocation, written by the kernel + * @region_end:	First address above the address range (added in ABI v4, 2.6.36) + * + * Allocate an address range in the 48-bit address space on the local node + * (the controller).  This allows userspace to listen for requests with an + * offset within that address range.  Every time when the kernel receives a + * request within the range, an &fw_cdev_event_request2 event will be emitted. + * (If the kernel or the client implements ABI version <= 3, an + * &fw_cdev_event_request will be generated instead.) + * + * The @closure field is passed back to userspace in these request events. + * The @handle field is an out parameter, returning a handle to the allocated + * range to be used for later deallocation of the range. + * + * The address range is allocated on all local nodes.  The address allocation + * is exclusive except for the FCP command and response registers.  If an + * exclusive address region is already in use, the ioctl fails with errno set + * to %EBUSY. + * + * If kernel and client implement ABI version >= 4, the kernel looks up a free + * spot of size @length inside [@offset..@region_end) and, if found, writes + * the start address of the new CSR back in @offset.  I.e. @offset is an + * in and out parameter.  If this automatic placement of a CSR in a bigger + * address range is not desired, the client simply needs to set @region_end + * = @offset + @length. + * + * If the kernel or the client implements ABI version <= 3, @region_end is + * ignored and effectively assumed to be @offset + @length. + * + * @region_end is only present in a kernel header >= 2.6.36.  If necessary, + * this can for example be tested by #ifdef FW_CDEV_EVENT_REQUEST2. + */ +struct fw_cdev_allocate { +	__u64 offset; +	__u64 closure; +	__u32 length; +	__u32 handle; +	__u64 region_end;	/* available since kernel version 2.6.36 */ +}; + +/** + * struct fw_cdev_deallocate - Free a CSR address range or isochronous resource + * @handle:	Handle to the address range or iso resource, as returned by the + *		kernel when the range or resource was allocated + */ +struct fw_cdev_deallocate { +	__u32 handle; +}; + +#define FW_CDEV_LONG_RESET	0 +#define FW_CDEV_SHORT_RESET	1 + +/** + * struct fw_cdev_initiate_bus_reset - Initiate a bus reset + * @type:	%FW_CDEV_SHORT_RESET or %FW_CDEV_LONG_RESET + * + * Initiate a bus reset for the bus this device is on.  The bus reset can be + * either the original (long) bus reset or the arbitrated (short) bus reset + * introduced in 1394a-2000. + * + * The ioctl returns immediately.  A subsequent &fw_cdev_event_bus_reset + * indicates when the reset actually happened.  Since ABI v4, this may be + * considerably later than the ioctl because the kernel ensures a grace period + * between subsequent bus resets as per IEEE 1394 bus management specification. + */ +struct fw_cdev_initiate_bus_reset { +	__u32 type; +}; + +/** + * struct fw_cdev_add_descriptor - Add contents to the local node's config ROM + * @immediate:	If non-zero, immediate key to insert before pointer + * @key:	Upper 8 bits of root directory pointer + * @data:	Userspace pointer to contents of descriptor block + * @length:	Length of descriptor block data, in quadlets + * @handle:	Handle to the descriptor, written by the kernel + * + * Add a descriptor block and optionally a preceding immediate key to the local + * node's Configuration ROM. + * + * The @key field specifies the upper 8 bits of the descriptor root directory + * pointer and the @data and @length fields specify the contents. The @key + * should be of the form 0xXX000000. The offset part of the root directory entry + * will be filled in by the kernel. + * + * If not 0, the @immediate field specifies an immediate key which will be + * inserted before the root directory pointer. + * + * @immediate, @key, and @data array elements are CPU-endian quadlets. + * + * If successful, the kernel adds the descriptor and writes back a @handle to + * the kernel-side object to be used for later removal of the descriptor block + * and immediate key.  The kernel will also generate a bus reset to signal the + * change of the Configuration ROM to other nodes. + * + * This ioctl affects the Configuration ROMs of all local nodes. + * The ioctl only succeeds on device files which represent a local node. + */ +struct fw_cdev_add_descriptor { +	__u32 immediate; +	__u32 key; +	__u64 data; +	__u32 length; +	__u32 handle; +}; + +/** + * struct fw_cdev_remove_descriptor - Remove contents from the Configuration ROM + * @handle:	Handle to the descriptor, as returned by the kernel when the + *		descriptor was added + * + * Remove a descriptor block and accompanying immediate key from the local + * nodes' Configuration ROMs.  The kernel will also generate a bus reset to + * signal the change of the Configuration ROM to other nodes. + */ +struct fw_cdev_remove_descriptor { +	__u32 handle; +}; + +#define FW_CDEV_ISO_CONTEXT_TRANSMIT			0 +#define FW_CDEV_ISO_CONTEXT_RECEIVE			1 +#define FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL	2 /* added in 2.6.36 */ + +/** + * struct fw_cdev_create_iso_context - Create a context for isochronous I/O + * @type:	%FW_CDEV_ISO_CONTEXT_TRANSMIT or %FW_CDEV_ISO_CONTEXT_RECEIVE or + *		%FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL + * @header_size: Header size to strip in single-channel reception + * @channel:	Channel to bind to in single-channel reception or transmission + * @speed:	Transmission speed + * @closure:	To be returned in &fw_cdev_event_iso_interrupt or + *		&fw_cdev_event_iso_interrupt_multichannel + * @handle:	Handle to context, written back by kernel + * + * Prior to sending or receiving isochronous I/O, a context must be created. + * The context records information about the transmit or receive configuration + * and typically maps to an underlying hardware resource.  A context is set up + * for either sending or receiving.  It is bound to a specific isochronous + * @channel. + * + * In case of multichannel reception, @header_size and @channel are ignored + * and the channels are selected by %FW_CDEV_IOC_SET_ISO_CHANNELS. + * + * For %FW_CDEV_ISO_CONTEXT_RECEIVE contexts, @header_size must be at least 4 + * and must be a multiple of 4.  It is ignored in other context types. + * + * @speed is ignored in receive context types. + * + * If a context was successfully created, the kernel writes back a handle to the + * context, which must be passed in for subsequent operations on that context. + * + * Limitations: + * No more than one iso context can be created per fd. + * The total number of contexts that all userspace and kernelspace drivers can + * create on a card at a time is a hardware limit, typically 4 or 8 contexts per + * direction, and of them at most one multichannel receive context. + */ +struct fw_cdev_create_iso_context { +	__u32 type; +	__u32 header_size; +	__u32 channel; +	__u32 speed; +	__u64 closure; +	__u32 handle; +}; + +/** + * struct fw_cdev_set_iso_channels - Select channels in multichannel reception + * @channels:	Bitmask of channels to listen to + * @handle:	Handle of the mutichannel receive context + * + * @channels is the bitwise or of 1ULL << n for each channel n to listen to. + * + * The ioctl fails with errno %EBUSY if there is already another receive context + * on a channel in @channels.  In that case, the bitmask of all unoccupied + * channels is returned in @channels. + */ +struct fw_cdev_set_iso_channels { +	__u64 channels; +	__u32 handle; +}; + +#define FW_CDEV_ISO_PAYLOAD_LENGTH(v)	(v) +#define FW_CDEV_ISO_INTERRUPT		(1 << 16) +#define FW_CDEV_ISO_SKIP		(1 << 17) +#define FW_CDEV_ISO_SYNC		(1 << 17) +#define FW_CDEV_ISO_TAG(v)		((v) << 18) +#define FW_CDEV_ISO_SY(v)		((v) << 20) +#define FW_CDEV_ISO_HEADER_LENGTH(v)	((v) << 24) + +/** + * struct fw_cdev_iso_packet - Isochronous packet + * @control:	Contains the header length (8 uppermost bits), + *		the sy field (4 bits), the tag field (2 bits), a sync flag + *		or a skip flag (1 bit), an interrupt flag (1 bit), and the + *		payload length (16 lowermost bits) + * @header:	Header and payload in case of a transmit context. + * + * &struct fw_cdev_iso_packet is used to describe isochronous packet queues. + * Use the FW_CDEV_ISO_ macros to fill in @control. + * The @header array is empty in case of receive contexts. + * + * Context type %FW_CDEV_ISO_CONTEXT_TRANSMIT: + * + * @control.HEADER_LENGTH must be a multiple of 4.  It specifies the numbers of + * bytes in @header that will be prepended to the packet's payload.  These bytes + * are copied into the kernel and will not be accessed after the ioctl has + * returned. + * + * The @control.SY and TAG fields are copied to the iso packet header.  These + * fields are specified by IEEE 1394a and IEC 61883-1. + * + * The @control.SKIP flag specifies that no packet is to be sent in a frame. + * When using this, all other fields except @control.INTERRUPT must be zero. + * + * When a packet with the @control.INTERRUPT flag set has been completed, an + * &fw_cdev_event_iso_interrupt event will be sent. + * + * Context type %FW_CDEV_ISO_CONTEXT_RECEIVE: + * + * @control.HEADER_LENGTH must be a multiple of the context's header_size. + * If the HEADER_LENGTH is larger than the context's header_size, multiple + * packets are queued for this entry. + * + * The @control.SY and TAG fields are ignored. + * + * If the @control.SYNC flag is set, the context drops all packets until a + * packet with a sy field is received which matches &fw_cdev_start_iso.sync. + * + * @control.PAYLOAD_LENGTH defines how many payload bytes can be received for + * one packet (in addition to payload quadlets that have been defined as headers + * and are stripped and returned in the &fw_cdev_event_iso_interrupt structure). + * If more bytes are received, the additional bytes are dropped.  If less bytes + * are received, the remaining bytes in this part of the payload buffer will not + * be written to, not even by the next packet.  I.e., packets received in + * consecutive frames will not necessarily be consecutive in memory.  If an + * entry has queued multiple packets, the PAYLOAD_LENGTH is divided equally + * among them. + * + * When a packet with the @control.INTERRUPT flag set has been completed, an + * &fw_cdev_event_iso_interrupt event will be sent.  An entry that has queued + * multiple receive packets is completed when its last packet is completed. + * + * Context type %FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL: + * + * Here, &fw_cdev_iso_packet would be more aptly named _iso_buffer_chunk since + * it specifies a chunk of the mmap()'ed buffer, while the number and alignment + * of packets to be placed into the buffer chunk is not known beforehand. + * + * @control.PAYLOAD_LENGTH is the size of the buffer chunk and specifies room + * for header, payload, padding, and trailer bytes of one or more packets. + * It must be a multiple of 4. + * + * @control.HEADER_LENGTH, TAG and SY are ignored.  SYNC is treated as described + * for single-channel reception. + * + * When a buffer chunk with the @control.INTERRUPT flag set has been filled + * entirely, an &fw_cdev_event_iso_interrupt_mc event will be sent. + */ +struct fw_cdev_iso_packet { +	__u32 control; +	__u32 header[0]; +}; + +/** + * struct fw_cdev_queue_iso - Queue isochronous packets for I/O + * @packets:	Userspace pointer to an array of &fw_cdev_iso_packet + * @data:	Pointer into mmap()'ed payload buffer + * @size:	Size of the @packets array, in bytes + * @handle:	Isochronous context handle + * + * Queue a number of isochronous packets for reception or transmission. + * This ioctl takes a pointer to an array of &fw_cdev_iso_packet structs, + * which describe how to transmit from or receive into a contiguous region + * of a mmap()'ed payload buffer.  As part of transmit packet descriptors, + * a series of headers can be supplied, which will be prepended to the + * payload during DMA. + * + * The kernel may or may not queue all packets, but will write back updated + * values of the @packets, @data and @size fields, so the ioctl can be + * resubmitted easily. + * + * In case of a multichannel receive context, @data must be quadlet-aligned + * relative to the buffer start. + */ +struct fw_cdev_queue_iso { +	__u64 packets; +	__u64 data; +	__u32 size; +	__u32 handle; +}; + +#define FW_CDEV_ISO_CONTEXT_MATCH_TAG0		 1 +#define FW_CDEV_ISO_CONTEXT_MATCH_TAG1		 2 +#define FW_CDEV_ISO_CONTEXT_MATCH_TAG2		 4 +#define FW_CDEV_ISO_CONTEXT_MATCH_TAG3		 8 +#define FW_CDEV_ISO_CONTEXT_MATCH_ALL_TAGS	15 + +/** + * struct fw_cdev_start_iso - Start an isochronous transmission or reception + * @cycle:	Cycle in which to start I/O.  If @cycle is greater than or + *		equal to 0, the I/O will start on that cycle. + * @sync:	Determines the value to wait for for receive packets that have + *		the %FW_CDEV_ISO_SYNC bit set + * @tags:	Tag filter bit mask.  Only valid for isochronous reception. + *		Determines the tag values for which packets will be accepted. + *		Use FW_CDEV_ISO_CONTEXT_MATCH_ macros to set @tags. + * @handle:	Isochronous context handle within which to transmit or receive + */ +struct fw_cdev_start_iso { +	__s32 cycle; +	__u32 sync; +	__u32 tags; +	__u32 handle; +}; + +/** + * struct fw_cdev_stop_iso - Stop an isochronous transmission or reception + * @handle:	Handle of isochronous context to stop + */ +struct fw_cdev_stop_iso { +	__u32 handle; +}; + +/** + * struct fw_cdev_flush_iso - flush completed iso packets + * @handle:	handle of isochronous context to flush + * + * For %FW_CDEV_ISO_CONTEXT_TRANSMIT or %FW_CDEV_ISO_CONTEXT_RECEIVE contexts, + * report any completed packets. + * + * For %FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL contexts, report the current + * offset in the receive buffer, if it has changed; this is typically in the + * middle of some buffer chunk. + * + * Any %FW_CDEV_EVENT_ISO_INTERRUPT or %FW_CDEV_EVENT_ISO_INTERRUPT_MULTICHANNEL + * events generated by this ioctl are sent synchronously, i.e., are available + * for reading from the file descriptor when this ioctl returns. + */ +struct fw_cdev_flush_iso { +	__u32 handle; +}; + +/** + * struct fw_cdev_get_cycle_timer - read cycle timer register + * @local_time:   system time, in microseconds since the Epoch + * @cycle_timer:  Cycle Time register contents + * + * Same as %FW_CDEV_IOC_GET_CYCLE_TIMER2, but fixed to use %CLOCK_REALTIME + * and only with microseconds resolution. + * + * In version 1 and 2 of the ABI, this ioctl returned unreliable (non- + * monotonic) @cycle_timer values on certain controllers. + */ +struct fw_cdev_get_cycle_timer { +	__u64 local_time; +	__u32 cycle_timer; +}; + +/** + * struct fw_cdev_get_cycle_timer2 - read cycle timer register + * @tv_sec:       system time, seconds + * @tv_nsec:      system time, sub-seconds part in nanoseconds + * @clk_id:       input parameter, clock from which to get the system time + * @cycle_timer:  Cycle Time register contents + * + * The %FW_CDEV_IOC_GET_CYCLE_TIMER2 ioctl reads the isochronous cycle timer + * and also the system clock.  This allows to correlate reception time of + * isochronous packets with system time. + * + * @clk_id lets you choose a clock like with POSIX' clock_gettime function. + * Supported @clk_id values are POSIX' %CLOCK_REALTIME and %CLOCK_MONOTONIC + * and Linux' %CLOCK_MONOTONIC_RAW. + * + * @cycle_timer consists of 7 bits cycleSeconds, 13 bits cycleCount, and + * 12 bits cycleOffset, in host byte order.  Cf. the Cycle Time register + * per IEEE 1394 or Isochronous Cycle Timer register per OHCI-1394. + */ +struct fw_cdev_get_cycle_timer2 { +	__s64 tv_sec; +	__s32 tv_nsec; +	__s32 clk_id; +	__u32 cycle_timer; +}; + +/** + * struct fw_cdev_allocate_iso_resource - (De)allocate a channel or bandwidth + * @closure:	Passed back to userspace in corresponding iso resource events + * @channels:	Isochronous channels of which one is to be (de)allocated + * @bandwidth:	Isochronous bandwidth units to be (de)allocated + * @handle:	Handle to the allocation, written by the kernel (only valid in + *		case of %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE ioctls) + * + * The %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE ioctl initiates allocation of an + * isochronous channel and/or of isochronous bandwidth at the isochronous + * resource manager (IRM).  Only one of the channels specified in @channels is + * allocated.  An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED is sent after + * communication with the IRM, indicating success or failure in the event data. + * The kernel will automatically reallocate the resources after bus resets. + * Should a reallocation fail, an %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event + * will be sent.  The kernel will also automatically deallocate the resources + * when the file descriptor is closed. + * + * The %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE ioctl can be used to initiate + * deallocation of resources which were allocated as described above. + * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation. + * + * The %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE ioctl is a variant of allocation + * without automatic re- or deallocation. + * An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED event concludes this operation, + * indicating success or failure in its data. + * + * The %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE ioctl works like + * %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE except that resources are freed + * instead of allocated. + * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation. + * + * To summarize, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE allocates iso resources + * for the lifetime of the fd or @handle. + * In contrast, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE allocates iso resources + * for the duration of a bus generation. + * + * @channels is a host-endian bitfield with the least significant bit + * representing channel 0 and the most significant bit representing channel 63: + * 1ULL << c for each channel c that is a candidate for (de)allocation. + * + * @bandwidth is expressed in bandwidth allocation units, i.e. the time to send + * one quadlet of data (payload or header data) at speed S1600. + */ +struct fw_cdev_allocate_iso_resource { +	__u64 closure; +	__u64 channels; +	__u32 bandwidth; +	__u32 handle; +}; + +/** + * struct fw_cdev_send_stream_packet - send an asynchronous stream packet + * @length:	Length of outgoing payload, in bytes + * @tag:	Data format tag + * @channel:	Isochronous channel to transmit to + * @sy:		Synchronization code + * @closure:	Passed back to userspace in the response event + * @data:	Userspace pointer to payload + * @generation:	The bus generation where packet is valid + * @speed:	Speed to transmit at + * + * The %FW_CDEV_IOC_SEND_STREAM_PACKET ioctl sends an asynchronous stream packet + * to every device which is listening to the specified channel.  The kernel + * writes an &fw_cdev_event_response event which indicates success or failure of + * the transmission. + */ +struct fw_cdev_send_stream_packet { +	__u32 length; +	__u32 tag; +	__u32 channel; +	__u32 sy; +	__u64 closure; +	__u64 data; +	__u32 generation; +	__u32 speed; +}; + +/** + * struct fw_cdev_send_phy_packet - send a PHY packet + * @closure:	Passed back to userspace in the PHY-packet-sent event + * @data:	First and second quadlet of the PHY packet + * @generation:	The bus generation where packet is valid + * + * The %FW_CDEV_IOC_SEND_PHY_PACKET ioctl sends a PHY packet to all nodes + * on the same card as this device.  After transmission, an + * %FW_CDEV_EVENT_PHY_PACKET_SENT event is generated. + * + * The payload @data[] shall be specified in host byte order.  Usually, + * @data[1] needs to be the bitwise inverse of @data[0].  VersaPHY packets + * are an exception to this rule. + * + * The ioctl is only permitted on device files which represent a local node. + */ +struct fw_cdev_send_phy_packet { +	__u64 closure; +	__u32 data[2]; +	__u32 generation; +}; + +/** + * struct fw_cdev_receive_phy_packets - start reception of PHY packets + * @closure: Passed back to userspace in phy packet events + * + * This ioctl activates issuing of %FW_CDEV_EVENT_PHY_PACKET_RECEIVED due to + * incoming PHY packets from any node on the same bus as the device. + * + * The ioctl is only permitted on device files which represent a local node. + */ +struct fw_cdev_receive_phy_packets { +	__u64 closure; +}; + +#define FW_CDEV_VERSION 3 /* Meaningless legacy macro; don't use it. */ + +#endif /* _LINUX_FIREWIRE_CDEV_H */ diff --git a/include/uapi/linux/firewire-constants.h b/include/uapi/linux/firewire-constants.h new file mode 100644 index 00000000000..9b4bb5fbba4 --- /dev/null +++ b/include/uapi/linux/firewire-constants.h @@ -0,0 +1,92 @@ +/* + * IEEE 1394 constants. + * + * Copyright (C) 2005-2007  Kristian Hoegsberg <krh@bitplanet.net> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef _LINUX_FIREWIRE_CONSTANTS_H +#define _LINUX_FIREWIRE_CONSTANTS_H + +#define TCODE_WRITE_QUADLET_REQUEST	0x0 +#define TCODE_WRITE_BLOCK_REQUEST	0x1 +#define TCODE_WRITE_RESPONSE		0x2 +#define TCODE_READ_QUADLET_REQUEST	0x4 +#define TCODE_READ_BLOCK_REQUEST	0x5 +#define TCODE_READ_QUADLET_RESPONSE	0x6 +#define TCODE_READ_BLOCK_RESPONSE	0x7 +#define TCODE_CYCLE_START		0x8 +#define TCODE_LOCK_REQUEST		0x9 +#define TCODE_STREAM_DATA		0xa +#define TCODE_LOCK_RESPONSE		0xb + +#define EXTCODE_MASK_SWAP		0x1 +#define EXTCODE_COMPARE_SWAP		0x2 +#define EXTCODE_FETCH_ADD		0x3 +#define EXTCODE_LITTLE_ADD		0x4 +#define EXTCODE_BOUNDED_ADD		0x5 +#define EXTCODE_WRAP_ADD		0x6 +#define EXTCODE_VENDOR_DEPENDENT	0x7 + +/* Linux firewire-core (Juju) specific tcodes */ +#define TCODE_LOCK_MASK_SWAP		(0x10 | EXTCODE_MASK_SWAP) +#define TCODE_LOCK_COMPARE_SWAP		(0x10 | EXTCODE_COMPARE_SWAP) +#define TCODE_LOCK_FETCH_ADD		(0x10 | EXTCODE_FETCH_ADD) +#define TCODE_LOCK_LITTLE_ADD		(0x10 | EXTCODE_LITTLE_ADD) +#define TCODE_LOCK_BOUNDED_ADD		(0x10 | EXTCODE_BOUNDED_ADD) +#define TCODE_LOCK_WRAP_ADD		(0x10 | EXTCODE_WRAP_ADD) +#define TCODE_LOCK_VENDOR_DEPENDENT	(0x10 | EXTCODE_VENDOR_DEPENDENT) + +#define RCODE_COMPLETE			0x0 +#define RCODE_CONFLICT_ERROR		0x4 +#define RCODE_DATA_ERROR		0x5 +#define RCODE_TYPE_ERROR		0x6 +#define RCODE_ADDRESS_ERROR		0x7 + +/* Linux firewire-core (Juju) specific rcodes */ +#define RCODE_SEND_ERROR		0x10 +#define RCODE_CANCELLED			0x11 +#define RCODE_BUSY			0x12 +#define RCODE_GENERATION		0x13 +#define RCODE_NO_ACK			0x14 + +#define SCODE_100			0x0 +#define SCODE_200			0x1 +#define SCODE_400			0x2 +#define SCODE_800			0x3 +#define SCODE_1600			0x4 +#define SCODE_3200			0x5 +#define SCODE_BETA			0x3 + +#define ACK_COMPLETE			0x1 +#define ACK_PENDING			0x2 +#define ACK_BUSY_X			0x4 +#define ACK_BUSY_A			0x5 +#define ACK_BUSY_B			0x6 +#define ACK_DATA_ERROR			0xd +#define ACK_TYPE_ERROR			0xe + +#define RETRY_1				0x00 +#define RETRY_X				0x01 +#define RETRY_A				0x02 +#define RETRY_B				0x03 + +#endif /* _LINUX_FIREWIRE_CONSTANTS_H */ diff --git a/include/uapi/linux/flat.h b/include/uapi/linux/flat.h new file mode 100644 index 00000000000..88cd6baba8f --- /dev/null +++ b/include/uapi/linux/flat.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2002-2003  David McCullough <davidm@snapgear.com> + * Copyright (C) 1998       Kenneth Albanowski <kjahds@kjahds.com> + *                          The Silver Hammer Group, Ltd. + * + * This file provides the definitions and structures needed to + * support uClinux flat-format executables. + */ + +#ifndef _UAPI_LINUX_FLAT_H +#define _UAPI_LINUX_FLAT_H + + +#define	FLAT_VERSION			0x00000004L + +#ifdef CONFIG_BINFMT_SHARED_FLAT +#define	MAX_SHARED_LIBS			(4) +#else +#define	MAX_SHARED_LIBS			(1) +#endif + +/* + * To make everything easier to port and manage cross platform + * development,  all fields are in network byte order. + */ + +struct flat_hdr { +	char magic[4]; +	unsigned long rev;          /* version (as above) */ +	unsigned long entry;        /* Offset of first executable instruction +	                               with text segment from beginning of file */ +	unsigned long data_start;   /* Offset of data segment from beginning of +	                               file */ +	unsigned long data_end;     /* Offset of end of data segment +	                               from beginning of file */ +	unsigned long bss_end;      /* Offset of end of bss segment from beginning +	                               of file */ + +	/* (It is assumed that data_end through bss_end forms the bss segment.) */ + +	unsigned long stack_size;   /* Size of stack, in bytes */ +	unsigned long reloc_start;  /* Offset of relocation records from +	                               beginning of file */ +	unsigned long reloc_count;  /* Number of relocation records */ +	unsigned long flags;        +	unsigned long build_date;   /* When the program/library was built */ +	unsigned long filler[5];    /* Reservered, set to zero */ +}; + +#define FLAT_FLAG_RAM    0x0001 /* load program entirely into RAM */ +#define FLAT_FLAG_GOTPIC 0x0002 /* program is PIC with GOT */ +#define FLAT_FLAG_GZIP   0x0004 /* all but the header is compressed */ +#define FLAT_FLAG_GZDATA 0x0008 /* only data/relocs are compressed (for XIP) */ +#define FLAT_FLAG_KTRACE 0x0010 /* output useful kernel trace for debugging */ + + + +#endif /* _UAPI_LINUX_FLAT_H */ diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h new file mode 100644 index 00000000000..9fcc880d4be --- /dev/null +++ b/include/uapi/linux/fs.h @@ -0,0 +1,334 @@ +#ifndef _UAPI_LINUX_FS_H +#define _UAPI_LINUX_FS_H + +/* + * This file has definitions for some important file table + * structures etc. + */ + +#include <linux/limits.h> +#include <linux/ioctl.h> +#include <linux/types.h> + +/* + * It's silly to have NR_OPEN bigger than NR_FILE, but you can change + * the file limit at runtime and only root can increase the per-process + * nr_file rlimit, so it's safe to set up a ridiculously high absolute + * upper limit on files-per-process. + * + * Some programs (notably those using select()) may have to be  + * recompiled to take full advantage of the new limits..   + */ + +/* Fixed constants first: */ +#undef NR_OPEN +#define INR_OPEN_CUR 1024	/* Initial setting for nfile rlimits */ +#define INR_OPEN_MAX 4096	/* Hard limit for nfile rlimits */ + +#define BLOCK_SIZE_BITS 10 +#define BLOCK_SIZE (1<<BLOCK_SIZE_BITS) + +#define SEEK_SET	0	/* seek relative to beginning of file */ +#define SEEK_CUR	1	/* seek relative to current file position */ +#define SEEK_END	2	/* seek relative to end of file */ +#define SEEK_DATA	3	/* seek to the next data */ +#define SEEK_HOLE	4	/* seek to the next hole */ +#define SEEK_MAX	SEEK_HOLE + +struct fstrim_range { +	__u64 start; +	__u64 len; +	__u64 minlen; +}; + +/* And dynamically-tunable limits and defaults: */ +struct files_stat_struct { +	unsigned long nr_files;		/* read only */ +	unsigned long nr_free_files;	/* read only */ +	unsigned long max_files;		/* tunable */ +}; + +struct inodes_stat_t { +	int nr_inodes; +	int nr_unused; +	int dummy[5];		/* padding for sysctl ABI compatibility */ +}; + + +#define NR_FILE  8192	/* this can well be larger on a larger system */ + +#define MAY_EXEC		0x00000001 +#define MAY_WRITE		0x00000002 +#define MAY_READ		0x00000004 +#define MAY_APPEND		0x00000008 +#define MAY_ACCESS		0x00000010 +#define MAY_OPEN		0x00000020 +#define MAY_CHDIR		0x00000040 +/* called from RCU mode, don't block */ +#define MAY_NOT_BLOCK		0x00000080 + +/* + * flags in file.f_mode.  Note that FMODE_READ and FMODE_WRITE must correspond + * to O_WRONLY and O_RDWR via the strange trick in __dentry_open() + */ + +/* file is open for reading */ +#define FMODE_READ		((__force fmode_t)0x1) +/* file is open for writing */ +#define FMODE_WRITE		((__force fmode_t)0x2) +/* file is seekable */ +#define FMODE_LSEEK		((__force fmode_t)0x4) +/* file can be accessed using pread */ +#define FMODE_PREAD		((__force fmode_t)0x8) +/* file can be accessed using pwrite */ +#define FMODE_PWRITE		((__force fmode_t)0x10) +/* File is opened for execution with sys_execve / sys_uselib */ +#define FMODE_EXEC		((__force fmode_t)0x20) +/* File is opened with O_NDELAY (only set for block devices) */ +#define FMODE_NDELAY		((__force fmode_t)0x40) +/* File is opened with O_EXCL (only set for block devices) */ +#define FMODE_EXCL		((__force fmode_t)0x80) +/* File is opened using open(.., 3, ..) and is writeable only for ioctls +   (specialy hack for floppy.c) */ +#define FMODE_WRITE_IOCTL	((__force fmode_t)0x100) +/* 32bit hashes as llseek() offset (for directories) */ +#define FMODE_32BITHASH         ((__force fmode_t)0x200) +/* 64bit hashes as llseek() offset (for directories) */ +#define FMODE_64BITHASH         ((__force fmode_t)0x400) + +/* + * Don't update ctime and mtime. + * + * Currently a special hack for the XFS open_by_handle ioctl, but we'll + * hopefully graduate it to a proper O_CMTIME flag supported by open(2) soon. + */ +#define FMODE_NOCMTIME		((__force fmode_t)0x800) + +/* Expect random access pattern */ +#define FMODE_RANDOM		((__force fmode_t)0x1000) + +/* File is huge (eg. /dev/kmem): treat loff_t as unsigned */ +#define FMODE_UNSIGNED_OFFSET	((__force fmode_t)0x2000) + +/* File is opened with O_PATH; almost nothing can be done with it */ +#define FMODE_PATH		((__force fmode_t)0x4000) + +/* File was opened by fanotify and shouldn't generate fanotify events */ +#define FMODE_NONOTIFY		((__force fmode_t)0x1000000) + +/* + * Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector + * that indicates that they should check the contents of the iovec are + * valid, but not check the memory that the iovec elements + * points too. + */ +#define CHECK_IOVEC_ONLY -1 + +#define SEL_IN		1 +#define SEL_OUT		2 +#define SEL_EX		4 + +/* public flags for file_system_type */ +#define FS_REQUIRES_DEV 1  +#define FS_BINARY_MOUNTDATA 2 +#define FS_HAS_SUBTYPE 4 +#define FS_REVAL_DOT	16384	/* Check the paths ".", ".." for staleness */ +#define FS_RENAME_DOES_D_MOVE	32768	/* FS will handle d_move() +					 * during rename() internally. +					 */ + +/* + * These are the fs-independent mount-flags: up to 32 flags are supported + */ +#define MS_RDONLY	 1	/* Mount read-only */ +#define MS_NOSUID	 2	/* Ignore suid and sgid bits */ +#define MS_NODEV	 4	/* Disallow access to device special files */ +#define MS_NOEXEC	 8	/* Disallow program execution */ +#define MS_SYNCHRONOUS	16	/* Writes are synced at once */ +#define MS_REMOUNT	32	/* Alter flags of a mounted FS */ +#define MS_MANDLOCK	64	/* Allow mandatory locks on an FS */ +#define MS_DIRSYNC	128	/* Directory modifications are synchronous */ +#define MS_NOATIME	1024	/* Do not update access times. */ +#define MS_NODIRATIME	2048	/* Do not update directory access times */ +#define MS_BIND		4096 +#define MS_MOVE		8192 +#define MS_REC		16384 +#define MS_VERBOSE	32768	/* War is peace. Verbosity is silence. +				   MS_VERBOSE is deprecated. */ +#define MS_SILENT	32768 +#define MS_POSIXACL	(1<<16)	/* VFS does not apply the umask */ +#define MS_UNBINDABLE	(1<<17)	/* change to unbindable */ +#define MS_PRIVATE	(1<<18)	/* change to private */ +#define MS_SLAVE	(1<<19)	/* change to slave */ +#define MS_SHARED	(1<<20)	/* change to shared */ +#define MS_RELATIME	(1<<21)	/* Update atime relative to mtime/ctime. */ +#define MS_KERNMOUNT	(1<<22) /* this is a kern_mount call */ +#define MS_I_VERSION	(1<<23) /* Update inode I_version field */ +#define MS_STRICTATIME	(1<<24) /* Always perform atime updates */ +#define MS_NOSEC	(1<<28) +#define MS_BORN		(1<<29) +#define MS_ACTIVE	(1<<30) +#define MS_NOUSER	(1<<31) + +/* + * Superblock flags that can be altered by MS_REMOUNT + */ +#define MS_RMT_MASK	(MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION) + +/* + * Old magic mount flag and mask + */ +#define MS_MGC_VAL 0xC0ED0000 +#define MS_MGC_MSK 0xffff0000 + +/* Inode flags - they have nothing to superblock flags now */ + +#define S_SYNC		1	/* Writes are synced at once */ +#define S_NOATIME	2	/* Do not update access times */ +#define S_APPEND	4	/* Append-only file */ +#define S_IMMUTABLE	8	/* Immutable file */ +#define S_DEAD		16	/* removed, but still open directory */ +#define S_NOQUOTA	32	/* Inode is not counted to quota */ +#define S_DIRSYNC	64	/* Directory modifications are synchronous */ +#define S_NOCMTIME	128	/* Do not update file c/mtime */ +#define S_SWAPFILE	256	/* Do not truncate: swapon got its bmaps */ +#define S_PRIVATE	512	/* Inode is fs-internal */ +#define S_IMA		1024	/* Inode has an associated IMA struct */ +#define S_AUTOMOUNT	2048	/* Automount/referral quasi-directory */ +#define S_NOSEC		4096	/* no suid or xattr security attributes */ + +/* + * Note that nosuid etc flags are inode-specific: setting some file-system + * flags just means all the inodes inherit those flags by default. It might be + * possible to override it selectively if you really wanted to with some + * ioctl() that is not currently implemented. + * + * Exception: MS_RDONLY is always applied to the entire file system. + * + * Unfortunately, it is possible to change a filesystems flags with it mounted + * with files in use.  This means that all of the inodes will not have their + * i_flags updated.  Hence, i_flags no longer inherit the superblock mount + * flags, so these have to be checked separately. -- rmk@arm.uk.linux.org + */ +#define __IS_FLG(inode,flg) ((inode)->i_sb->s_flags & (flg)) + +#define IS_RDONLY(inode) ((inode)->i_sb->s_flags & MS_RDONLY) +#define IS_SYNC(inode)		(__IS_FLG(inode, MS_SYNCHRONOUS) || \ +					((inode)->i_flags & S_SYNC)) +#define IS_DIRSYNC(inode)	(__IS_FLG(inode, MS_SYNCHRONOUS|MS_DIRSYNC) || \ +					((inode)->i_flags & (S_SYNC|S_DIRSYNC))) +#define IS_MANDLOCK(inode)	__IS_FLG(inode, MS_MANDLOCK) +#define IS_NOATIME(inode)   __IS_FLG(inode, MS_RDONLY|MS_NOATIME) +#define IS_I_VERSION(inode)   __IS_FLG(inode, MS_I_VERSION) + +#define IS_NOQUOTA(inode)	((inode)->i_flags & S_NOQUOTA) +#define IS_APPEND(inode)	((inode)->i_flags & S_APPEND) +#define IS_IMMUTABLE(inode)	((inode)->i_flags & S_IMMUTABLE) +#define IS_POSIXACL(inode)	__IS_FLG(inode, MS_POSIXACL) + +#define IS_DEADDIR(inode)	((inode)->i_flags & S_DEAD) +#define IS_NOCMTIME(inode)	((inode)->i_flags & S_NOCMTIME) +#define IS_SWAPFILE(inode)	((inode)->i_flags & S_SWAPFILE) +#define IS_PRIVATE(inode)	((inode)->i_flags & S_PRIVATE) +#define IS_IMA(inode)		((inode)->i_flags & S_IMA) +#define IS_AUTOMOUNT(inode)	((inode)->i_flags & S_AUTOMOUNT) +#define IS_NOSEC(inode)		((inode)->i_flags & S_NOSEC) + +/* the read-only stuff doesn't really belong here, but any other place is +   probably as bad and I don't want to create yet another include file. */ + +#define BLKROSET   _IO(0x12,93)	/* set device read-only (0 = read-write) */ +#define BLKROGET   _IO(0x12,94)	/* get read-only status (0 = read_write) */ +#define BLKRRPART  _IO(0x12,95)	/* re-read partition table */ +#define BLKGETSIZE _IO(0x12,96)	/* return device size /512 (long *arg) */ +#define BLKFLSBUF  _IO(0x12,97)	/* flush buffer cache */ +#define BLKRASET   _IO(0x12,98)	/* set read ahead for block device */ +#define BLKRAGET   _IO(0x12,99)	/* get current read ahead setting */ +#define BLKFRASET  _IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */ +#define BLKFRAGET  _IO(0x12,101)/* get filesystem (mm/filemap.c) read-ahead */ +#define BLKSECTSET _IO(0x12,102)/* set max sectors per request (ll_rw_blk.c) */ +#define BLKSECTGET _IO(0x12,103)/* get max sectors per request (ll_rw_blk.c) */ +#define BLKSSZGET  _IO(0x12,104)/* get block device sector size */ +#if 0 +#define BLKPG      _IO(0x12,105)/* See blkpg.h */ + +/* Some people are morons.  Do not use sizeof! */ + +#define BLKELVGET  _IOR(0x12,106,size_t)/* elevator get */ +#define BLKELVSET  _IOW(0x12,107,size_t)/* elevator set */ +/* This was here just to show that the number is taken - +   probably all these _IO(0x12,*) ioctls should be moved to blkpg.h. */ +#endif +/* A jump here: 108-111 have been used for various private purposes. */ +#define BLKBSZGET  _IOR(0x12,112,size_t) +#define BLKBSZSET  _IOW(0x12,113,size_t) +#define BLKGETSIZE64 _IOR(0x12,114,size_t)	/* return device size in bytes (u64 *arg) */ +#define BLKTRACESETUP _IOWR(0x12,115,struct blk_user_trace_setup) +#define BLKTRACESTART _IO(0x12,116) +#define BLKTRACESTOP _IO(0x12,117) +#define BLKTRACETEARDOWN _IO(0x12,118) +#define BLKDISCARD _IO(0x12,119) +#define BLKIOMIN _IO(0x12,120) +#define BLKIOOPT _IO(0x12,121) +#define BLKALIGNOFF _IO(0x12,122) +#define BLKPBSZGET _IO(0x12,123) +#define BLKDISCARDZEROES _IO(0x12,124) +#define BLKSECDISCARD _IO(0x12,125) +#define BLKROTATIONAL _IO(0x12,126) +#define BLKZEROOUT _IO(0x12,127) + +#define BMAP_IOCTL 1		/* obsolete - kept for compatibility */ +#define FIBMAP	   _IO(0x00,1)	/* bmap access */ +#define FIGETBSZ   _IO(0x00,2)	/* get the block size used for bmap */ +#define FIFREEZE	_IOWR('X', 119, int)	/* Freeze */ +#define FITHAW		_IOWR('X', 120, int)	/* Thaw */ +#define FITRIM		_IOWR('X', 121, struct fstrim_range)	/* Trim */ + +#define	FS_IOC_GETFLAGS			_IOR('f', 1, long) +#define	FS_IOC_SETFLAGS			_IOW('f', 2, long) +#define	FS_IOC_GETVERSION		_IOR('v', 1, long) +#define	FS_IOC_SETVERSION		_IOW('v', 2, long) +#define FS_IOC_FIEMAP			_IOWR('f', 11, struct fiemap) +#define FS_IOC32_GETFLAGS		_IOR('f', 1, int) +#define FS_IOC32_SETFLAGS		_IOW('f', 2, int) +#define FS_IOC32_GETVERSION		_IOR('v', 1, int) +#define FS_IOC32_SETVERSION		_IOW('v', 2, int) + +/* + * Inode flags (FS_IOC_GETFLAGS / FS_IOC_SETFLAGS) + */ +#define	FS_SECRM_FL			0x00000001 /* Secure deletion */ +#define	FS_UNRM_FL			0x00000002 /* Undelete */ +#define	FS_COMPR_FL			0x00000004 /* Compress file */ +#define FS_SYNC_FL			0x00000008 /* Synchronous updates */ +#define FS_IMMUTABLE_FL			0x00000010 /* Immutable file */ +#define FS_APPEND_FL			0x00000020 /* writes to file may only append */ +#define FS_NODUMP_FL			0x00000040 /* do not dump file */ +#define FS_NOATIME_FL			0x00000080 /* do not update atime */ +/* Reserved for compression usage... */ +#define FS_DIRTY_FL			0x00000100 +#define FS_COMPRBLK_FL			0x00000200 /* One or more compressed clusters */ +#define FS_NOCOMP_FL			0x00000400 /* Don't compress */ +#define FS_ECOMPR_FL			0x00000800 /* Compression error */ +/* End compression flags --- maybe not all used */ +#define FS_BTREE_FL			0x00001000 /* btree format dir */ +#define FS_INDEX_FL			0x00001000 /* hash-indexed directory */ +#define FS_IMAGIC_FL			0x00002000 /* AFS directory */ +#define FS_JOURNAL_DATA_FL		0x00004000 /* Reserved for ext3 */ +#define FS_NOTAIL_FL			0x00008000 /* file tail should not be merged */ +#define FS_DIRSYNC_FL			0x00010000 /* dirsync behaviour (directories only) */ +#define FS_TOPDIR_FL			0x00020000 /* Top of directory hierarchies*/ +#define FS_EXTENT_FL			0x00080000 /* Extents */ +#define FS_DIRECTIO_FL			0x00100000 /* Use direct i/o */ +#define FS_NOCOW_FL			0x00800000 /* Do not cow file */ +#define FS_RESERVED_FL			0x80000000 /* reserved for ext2 lib */ + +#define FS_FL_USER_VISIBLE		0x0003DFFF /* User visible flags */ +#define FS_FL_USER_MODIFIABLE		0x000380FF /* User modifiable flags */ + + +#define SYNC_FILE_RANGE_WAIT_BEFORE	1 +#define SYNC_FILE_RANGE_WRITE		2 +#define SYNC_FILE_RANGE_WAIT_AFTER	4 + +#endif /* _UAPI_LINUX_FS_H */ diff --git a/include/uapi/linux/fsl_hypervisor.h b/include/uapi/linux/fsl_hypervisor.h new file mode 100644 index 00000000000..1bf04967fec --- /dev/null +++ b/include/uapi/linux/fsl_hypervisor.h @@ -0,0 +1,220 @@ +/* + * Freescale hypervisor ioctl and kernel interface + * + * Copyright (C) 2008-2011 Freescale Semiconductor, Inc. + * Author: Timur Tabi <timur@freescale.com> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + *     * Redistributions of source code must retain the above copyright + *       notice, this list of conditions and the following disclaimer. + *     * Redistributions in binary form must reproduce the above copyright + *       notice, this list of conditions and the following disclaimer in the + *       documentation and/or other materials provided with the distribution. + *     * Neither the name of Freescale Semiconductor nor the + *       names of its contributors may be used to endorse or promote products + *       derived from this software without specific prior written permission. + * + * + * ALTERNATIVELY, this software may be distributed under the terms of the + * GNU General Public License ("GPL") as published by the Free Software + * Foundation, either version 2 of that License or (at your option) any + * later version. + * + * This software is provided by Freescale Semiconductor "as is" and any + * express or implied warranties, including, but not limited to, the implied + * warranties of merchantability and fitness for a particular purpose are + * disclaimed. In no event shall Freescale Semiconductor be liable for any + * direct, indirect, incidental, special, exemplary, or consequential damages + * (including, but not limited to, procurement of substitute goods or services; + * loss of use, data, or profits; or business interruption) however caused and + * on any theory of liability, whether in contract, strict liability, or tort + * (including negligence or otherwise) arising in any way out of the use of this + * software, even if advised of the possibility of such damage. + * + * This file is used by the Freescale hypervisor management driver.  It can + * also be included by applications that need to communicate with the driver + * via the ioctl interface. + */ + +#ifndef _UAPIFSL_HYPERVISOR_H +#define _UAPIFSL_HYPERVISOR_H + +#include <linux/types.h> + +/** + * struct fsl_hv_ioctl_restart - restart a partition + * @ret: return error code from the hypervisor + * @partition: the ID of the partition to restart, or -1 for the + *             calling partition + * + * Used by FSL_HV_IOCTL_PARTITION_RESTART + */ +struct fsl_hv_ioctl_restart { +	__u32 ret; +	__u32 partition; +}; + +/** + * struct fsl_hv_ioctl_status - get a partition's status + * @ret: return error code from the hypervisor + * @partition: the ID of the partition to query, or -1 for the + *             calling partition + * @status: The returned status of the partition + * + * Used by FSL_HV_IOCTL_PARTITION_GET_STATUS + * + * Values of 'status': + *    0 = Stopped + *    1 = Running + *    2 = Starting + *    3 = Stopping + */ +struct fsl_hv_ioctl_status { +	__u32 ret; +	__u32 partition; +	__u32 status; +}; + +/** + * struct fsl_hv_ioctl_start - start a partition + * @ret: return error code from the hypervisor + * @partition: the ID of the partition to control + * @entry_point: The offset within the guest IMA to start execution + * @load: If non-zero, reload the partition's images before starting + * + * Used by FSL_HV_IOCTL_PARTITION_START + */ +struct fsl_hv_ioctl_start { +	__u32 ret; +	__u32 partition; +	__u32 entry_point; +	__u32 load; +}; + +/** + * struct fsl_hv_ioctl_stop - stop a partition + * @ret: return error code from the hypervisor + * @partition: the ID of the partition to stop, or -1 for the calling + *             partition + * + * Used by FSL_HV_IOCTL_PARTITION_STOP + */ +struct fsl_hv_ioctl_stop { +	__u32 ret; +	__u32 partition; +}; + +/** + * struct fsl_hv_ioctl_memcpy - copy memory between partitions + * @ret: return error code from the hypervisor + * @source: the partition ID of the source partition, or -1 for this + *          partition + * @target: the partition ID of the target partition, or -1 for this + *          partition + * @reserved: reserved, must be set to 0 + * @local_addr: user-space virtual address of a buffer in the local + *              partition + * @remote_addr: guest physical address of a buffer in the + *           remote partition + * @count: the number of bytes to copy.  Both the local and remote + *         buffers must be at least 'count' bytes long + * + * Used by FSL_HV_IOCTL_MEMCPY + * + * The 'local' partition is the partition that calls this ioctl.  The + * 'remote' partition is a different partition.  The data is copied from + * the 'source' paritition' to the 'target' partition. + * + * The buffer in the remote partition must be guest physically + * contiguous. + * + * This ioctl does not support copying memory between two remote + * partitions or within the same partition, so either 'source' or + * 'target' (but not both) must be -1.  In other words, either + * + *      source == local and target == remote + * or + *      source == remote and target == local + */ +struct fsl_hv_ioctl_memcpy { +	__u32 ret; +	__u32 source; +	__u32 target; +	__u32 reserved;	/* padding to ensure local_vaddr is aligned */ +	__u64 local_vaddr; +	__u64 remote_paddr; +	__u64 count; +}; + +/** + * struct fsl_hv_ioctl_doorbell - ring a doorbell + * @ret: return error code from the hypervisor + * @doorbell: the handle of the doorbell to ring doorbell + * + * Used by FSL_HV_IOCTL_DOORBELL + */ +struct fsl_hv_ioctl_doorbell { +	__u32 ret; +	__u32 doorbell; +}; + +/** + * struct fsl_hv_ioctl_prop - get/set a device tree property + * @ret: return error code from the hypervisor + * @handle: handle of partition whose tree to access + * @path: virtual address of path name of node to access + * @propname: virtual address of name of property to access + * @propval: virtual address of property data buffer + * @proplen: Size of property data buffer + * @reserved: reserved, must be set to 0 + * + * Used by FSL_HV_IOCTL_DOORBELL + */ +struct fsl_hv_ioctl_prop { +	__u32 ret; +	__u32 handle; +	__u64 path; +	__u64 propname; +	__u64 propval; +	__u32 proplen; +	__u32 reserved;	/* padding to ensure structure is aligned */ +}; + +/* The ioctl type, documented in ioctl-number.txt */ +#define FSL_HV_IOCTL_TYPE	0xAF + +/* Restart another partition */ +#define FSL_HV_IOCTL_PARTITION_RESTART \ +	_IOWR(FSL_HV_IOCTL_TYPE, 1, struct fsl_hv_ioctl_restart) + +/* Get a partition's status */ +#define FSL_HV_IOCTL_PARTITION_GET_STATUS \ +	_IOWR(FSL_HV_IOCTL_TYPE, 2, struct fsl_hv_ioctl_status) + +/* Boot another partition */ +#define FSL_HV_IOCTL_PARTITION_START \ +	_IOWR(FSL_HV_IOCTL_TYPE, 3, struct fsl_hv_ioctl_start) + +/* Stop this or another partition */ +#define FSL_HV_IOCTL_PARTITION_STOP \ +	_IOWR(FSL_HV_IOCTL_TYPE, 4, struct fsl_hv_ioctl_stop) + +/* Copy data from one partition to another */ +#define FSL_HV_IOCTL_MEMCPY \ +	_IOWR(FSL_HV_IOCTL_TYPE, 5, struct fsl_hv_ioctl_memcpy) + +/* Ring a doorbell */ +#define FSL_HV_IOCTL_DOORBELL \ +	_IOWR(FSL_HV_IOCTL_TYPE, 6, struct fsl_hv_ioctl_doorbell) + +/* Get a property from another guest's device tree */ +#define FSL_HV_IOCTL_GETPROP \ +	_IOWR(FSL_HV_IOCTL_TYPE, 7, struct fsl_hv_ioctl_prop) + +/* Set a property in another guest's device tree */ +#define FSL_HV_IOCTL_SETPROP \ +	_IOWR(FSL_HV_IOCTL_TYPE, 8, struct fsl_hv_ioctl_prop) + + +#endif /* _UAPIFSL_HYPERVISOR_H */ diff --git a/include/uapi/linux/fuse.h b/include/uapi/linux/fuse.h new file mode 100644 index 00000000000..d8c713e148e --- /dev/null +++ b/include/uapi/linux/fuse.h @@ -0,0 +1,677 @@ +/* +    FUSE: Filesystem in Userspace +    Copyright (C) 2001-2008  Miklos Szeredi <miklos@szeredi.hu> + +    This program can be distributed under the terms of the GNU GPL. +    See the file COPYING. +*/ + +/* + * This file defines the kernel interface of FUSE + * + * Protocol changelog: + * + * 7.9: + *  - new fuse_getattr_in input argument of GETATTR + *  - add lk_flags in fuse_lk_in + *  - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in + *  - add blksize field to fuse_attr + *  - add file flags field to fuse_read_in and fuse_write_in + * + * 7.10 + *  - add nonseekable open flag + * + * 7.11 + *  - add IOCTL message + *  - add unsolicited notification support + *  - add POLL message and NOTIFY_POLL notification + * + * 7.12 + *  - add umask flag to input argument of open, mknod and mkdir + *  - add notification messages for invalidation of inodes and + *    directory entries + * + * 7.13 + *  - make max number of background requests and congestion threshold + *    tunables + * + * 7.14 + *  - add splice support to fuse device + * + * 7.15 + *  - add store notify + *  - add retrieve notify + * + * 7.16 + *  - add BATCH_FORGET request + *  - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct + *    fuse_ioctl_iovec' instead of ambiguous 'struct iovec' + *  - add FUSE_IOCTL_32BIT flag + * + * 7.17 + *  - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK + * + * 7.18 + *  - add FUSE_IOCTL_DIR flag + *  - add FUSE_NOTIFY_DELETE + * + * 7.19 + *  - add FUSE_FALLOCATE + * + * 7.20 + *  - add FUSE_AUTO_INVAL_DATA + */ + +#ifndef _LINUX_FUSE_H +#define _LINUX_FUSE_H + +#include <linux/types.h> + +/* + * Version negotiation: + * + * Both the kernel and userspace send the version they support in the + * INIT request and reply respectively. + * + * If the major versions match then both shall use the smallest + * of the two minor versions for communication. + * + * If the kernel supports a larger major version, then userspace shall + * reply with the major version it supports, ignore the rest of the + * INIT message and expect a new INIT message from the kernel with a + * matching major version. + * + * If the library supports a larger major version, then it shall fall + * back to the major protocol version sent by the kernel for + * communication and reply with that major version (and an arbitrary + * supported minor version). + */ + +/** Version number of this interface */ +#define FUSE_KERNEL_VERSION 7 + +/** Minor version number of this interface */ +#define FUSE_KERNEL_MINOR_VERSION 20 + +/** The node ID of the root inode */ +#define FUSE_ROOT_ID 1 + +/* Make sure all structures are padded to 64bit boundary, so 32bit +   userspace works under 64bit kernels */ + +struct fuse_attr { +	__u64	ino; +	__u64	size; +	__u64	blocks; +	__u64	atime; +	__u64	mtime; +	__u64	ctime; +	__u32	atimensec; +	__u32	mtimensec; +	__u32	ctimensec; +	__u32	mode; +	__u32	nlink; +	__u32	uid; +	__u32	gid; +	__u32	rdev; +	__u32	blksize; +	__u32	padding; +}; + +struct fuse_kstatfs { +	__u64	blocks; +	__u64	bfree; +	__u64	bavail; +	__u64	files; +	__u64	ffree; +	__u32	bsize; +	__u32	namelen; +	__u32	frsize; +	__u32	padding; +	__u32	spare[6]; +}; + +struct fuse_file_lock { +	__u64	start; +	__u64	end; +	__u32	type; +	__u32	pid; /* tgid */ +}; + +/** + * Bitmasks for fuse_setattr_in.valid + */ +#define FATTR_MODE	(1 << 0) +#define FATTR_UID	(1 << 1) +#define FATTR_GID	(1 << 2) +#define FATTR_SIZE	(1 << 3) +#define FATTR_ATIME	(1 << 4) +#define FATTR_MTIME	(1 << 5) +#define FATTR_FH	(1 << 6) +#define FATTR_ATIME_NOW	(1 << 7) +#define FATTR_MTIME_NOW	(1 << 8) +#define FATTR_LOCKOWNER	(1 << 9) + +/** + * Flags returned by the OPEN request + * + * FOPEN_DIRECT_IO: bypass page cache for this open file + * FOPEN_KEEP_CACHE: don't invalidate the data cache on open + * FOPEN_NONSEEKABLE: the file is not seekable + */ +#define FOPEN_DIRECT_IO		(1 << 0) +#define FOPEN_KEEP_CACHE	(1 << 1) +#define FOPEN_NONSEEKABLE	(1 << 2) + +/** + * INIT request/reply flags + * + * FUSE_ASYNC_READ: asynchronous read requests + * FUSE_POSIX_LOCKS: remote locking for POSIX file locks + * FUSE_FILE_OPS: kernel sends file handle for fstat, etc... (not yet supported) + * FUSE_ATOMIC_O_TRUNC: handles the O_TRUNC open flag in the filesystem + * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".." + * FUSE_BIG_WRITES: filesystem can handle write size larger than 4kB + * FUSE_DONT_MASK: don't apply umask to file mode on create operations + * FUSE_SPLICE_WRITE: kernel supports splice write on the device + * FUSE_SPLICE_MOVE: kernel supports splice move on the device + * FUSE_SPLICE_READ: kernel supports splice read on the device + * FUSE_FLOCK_LOCKS: remote locking for BSD style file locks + * FUSE_HAS_IOCTL_DIR: kernel supports ioctl on directories + * FUSE_AUTO_INVAL_DATA: automatically invalidate cached pages + */ +#define FUSE_ASYNC_READ		(1 << 0) +#define FUSE_POSIX_LOCKS	(1 << 1) +#define FUSE_FILE_OPS		(1 << 2) +#define FUSE_ATOMIC_O_TRUNC	(1 << 3) +#define FUSE_EXPORT_SUPPORT	(1 << 4) +#define FUSE_BIG_WRITES		(1 << 5) +#define FUSE_DONT_MASK		(1 << 6) +#define FUSE_SPLICE_WRITE	(1 << 7) +#define FUSE_SPLICE_MOVE	(1 << 8) +#define FUSE_SPLICE_READ	(1 << 9) +#define FUSE_FLOCK_LOCKS	(1 << 10) +#define FUSE_HAS_IOCTL_DIR	(1 << 11) +#define FUSE_AUTO_INVAL_DATA	(1 << 12) + +/** + * CUSE INIT request/reply flags + * + * CUSE_UNRESTRICTED_IOCTL:  use unrestricted ioctl + */ +#define CUSE_UNRESTRICTED_IOCTL	(1 << 0) + +/** + * Release flags + */ +#define FUSE_RELEASE_FLUSH	(1 << 0) +#define FUSE_RELEASE_FLOCK_UNLOCK	(1 << 1) + +/** + * Getattr flags + */ +#define FUSE_GETATTR_FH		(1 << 0) + +/** + * Lock flags + */ +#define FUSE_LK_FLOCK		(1 << 0) + +/** + * WRITE flags + * + * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed + * FUSE_WRITE_LOCKOWNER: lock_owner field is valid + */ +#define FUSE_WRITE_CACHE	(1 << 0) +#define FUSE_WRITE_LOCKOWNER	(1 << 1) + +/** + * Read flags + */ +#define FUSE_READ_LOCKOWNER	(1 << 1) + +/** + * Ioctl flags + * + * FUSE_IOCTL_COMPAT: 32bit compat ioctl on 64bit machine + * FUSE_IOCTL_UNRESTRICTED: not restricted to well-formed ioctls, retry allowed + * FUSE_IOCTL_RETRY: retry with new iovecs + * FUSE_IOCTL_32BIT: 32bit ioctl + * FUSE_IOCTL_DIR: is a directory + * + * FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs + */ +#define FUSE_IOCTL_COMPAT	(1 << 0) +#define FUSE_IOCTL_UNRESTRICTED	(1 << 1) +#define FUSE_IOCTL_RETRY	(1 << 2) +#define FUSE_IOCTL_32BIT	(1 << 3) +#define FUSE_IOCTL_DIR		(1 << 4) + +#define FUSE_IOCTL_MAX_IOV	256 + +/** + * Poll flags + * + * FUSE_POLL_SCHEDULE_NOTIFY: request poll notify + */ +#define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0) + +enum fuse_opcode { +	FUSE_LOOKUP	   = 1, +	FUSE_FORGET	   = 2,  /* no reply */ +	FUSE_GETATTR	   = 3, +	FUSE_SETATTR	   = 4, +	FUSE_READLINK	   = 5, +	FUSE_SYMLINK	   = 6, +	FUSE_MKNOD	   = 8, +	FUSE_MKDIR	   = 9, +	FUSE_UNLINK	   = 10, +	FUSE_RMDIR	   = 11, +	FUSE_RENAME	   = 12, +	FUSE_LINK	   = 13, +	FUSE_OPEN	   = 14, +	FUSE_READ	   = 15, +	FUSE_WRITE	   = 16, +	FUSE_STATFS	   = 17, +	FUSE_RELEASE       = 18, +	FUSE_FSYNC         = 20, +	FUSE_SETXATTR      = 21, +	FUSE_GETXATTR      = 22, +	FUSE_LISTXATTR     = 23, +	FUSE_REMOVEXATTR   = 24, +	FUSE_FLUSH         = 25, +	FUSE_INIT          = 26, +	FUSE_OPENDIR       = 27, +	FUSE_READDIR       = 28, +	FUSE_RELEASEDIR    = 29, +	FUSE_FSYNCDIR      = 30, +	FUSE_GETLK         = 31, +	FUSE_SETLK         = 32, +	FUSE_SETLKW        = 33, +	FUSE_ACCESS        = 34, +	FUSE_CREATE        = 35, +	FUSE_INTERRUPT     = 36, +	FUSE_BMAP          = 37, +	FUSE_DESTROY       = 38, +	FUSE_IOCTL         = 39, +	FUSE_POLL          = 40, +	FUSE_NOTIFY_REPLY  = 41, +	FUSE_BATCH_FORGET  = 42, +	FUSE_FALLOCATE     = 43, + +	/* CUSE specific operations */ +	CUSE_INIT          = 4096, +}; + +enum fuse_notify_code { +	FUSE_NOTIFY_POLL   = 1, +	FUSE_NOTIFY_INVAL_INODE = 2, +	FUSE_NOTIFY_INVAL_ENTRY = 3, +	FUSE_NOTIFY_STORE = 4, +	FUSE_NOTIFY_RETRIEVE = 5, +	FUSE_NOTIFY_DELETE = 6, +	FUSE_NOTIFY_CODE_MAX, +}; + +/* The read buffer is required to be at least 8k, but may be much larger */ +#define FUSE_MIN_READ_BUFFER 8192 + +#define FUSE_COMPAT_ENTRY_OUT_SIZE 120 + +struct fuse_entry_out { +	__u64	nodeid;		/* Inode ID */ +	__u64	generation;	/* Inode generation: nodeid:gen must +				   be unique for the fs's lifetime */ +	__u64	entry_valid;	/* Cache timeout for the name */ +	__u64	attr_valid;	/* Cache timeout for the attributes */ +	__u32	entry_valid_nsec; +	__u32	attr_valid_nsec; +	struct fuse_attr attr; +}; + +struct fuse_forget_in { +	__u64	nlookup; +}; + +struct fuse_forget_one { +	__u64	nodeid; +	__u64	nlookup; +}; + +struct fuse_batch_forget_in { +	__u32	count; +	__u32	dummy; +}; + +struct fuse_getattr_in { +	__u32	getattr_flags; +	__u32	dummy; +	__u64	fh; +}; + +#define FUSE_COMPAT_ATTR_OUT_SIZE 96 + +struct fuse_attr_out { +	__u64	attr_valid;	/* Cache timeout for the attributes */ +	__u32	attr_valid_nsec; +	__u32	dummy; +	struct fuse_attr attr; +}; + +#define FUSE_COMPAT_MKNOD_IN_SIZE 8 + +struct fuse_mknod_in { +	__u32	mode; +	__u32	rdev; +	__u32	umask; +	__u32	padding; +}; + +struct fuse_mkdir_in { +	__u32	mode; +	__u32	umask; +}; + +struct fuse_rename_in { +	__u64	newdir; +}; + +struct fuse_link_in { +	__u64	oldnodeid; +}; + +struct fuse_setattr_in { +	__u32	valid; +	__u32	padding; +	__u64	fh; +	__u64	size; +	__u64	lock_owner; +	__u64	atime; +	__u64	mtime; +	__u64	unused2; +	__u32	atimensec; +	__u32	mtimensec; +	__u32	unused3; +	__u32	mode; +	__u32	unused4; +	__u32	uid; +	__u32	gid; +	__u32	unused5; +}; + +struct fuse_open_in { +	__u32	flags; +	__u32	unused; +}; + +struct fuse_create_in { +	__u32	flags; +	__u32	mode; +	__u32	umask; +	__u32	padding; +}; + +struct fuse_open_out { +	__u64	fh; +	__u32	open_flags; +	__u32	padding; +}; + +struct fuse_release_in { +	__u64	fh; +	__u32	flags; +	__u32	release_flags; +	__u64	lock_owner; +}; + +struct fuse_flush_in { +	__u64	fh; +	__u32	unused; +	__u32	padding; +	__u64	lock_owner; +}; + +struct fuse_read_in { +	__u64	fh; +	__u64	offset; +	__u32	size; +	__u32	read_flags; +	__u64	lock_owner; +	__u32	flags; +	__u32	padding; +}; + +#define FUSE_COMPAT_WRITE_IN_SIZE 24 + +struct fuse_write_in { +	__u64	fh; +	__u64	offset; +	__u32	size; +	__u32	write_flags; +	__u64	lock_owner; +	__u32	flags; +	__u32	padding; +}; + +struct fuse_write_out { +	__u32	size; +	__u32	padding; +}; + +#define FUSE_COMPAT_STATFS_SIZE 48 + +struct fuse_statfs_out { +	struct fuse_kstatfs st; +}; + +struct fuse_fsync_in { +	__u64	fh; +	__u32	fsync_flags; +	__u32	padding; +}; + +struct fuse_setxattr_in { +	__u32	size; +	__u32	flags; +}; + +struct fuse_getxattr_in { +	__u32	size; +	__u32	padding; +}; + +struct fuse_getxattr_out { +	__u32	size; +	__u32	padding; +}; + +struct fuse_lk_in { +	__u64	fh; +	__u64	owner; +	struct fuse_file_lock lk; +	__u32	lk_flags; +	__u32	padding; +}; + +struct fuse_lk_out { +	struct fuse_file_lock lk; +}; + +struct fuse_access_in { +	__u32	mask; +	__u32	padding; +}; + +struct fuse_init_in { +	__u32	major; +	__u32	minor; +	__u32	max_readahead; +	__u32	flags; +}; + +struct fuse_init_out { +	__u32	major; +	__u32	minor; +	__u32	max_readahead; +	__u32	flags; +	__u16   max_background; +	__u16   congestion_threshold; +	__u32	max_write; +}; + +#define CUSE_INIT_INFO_MAX 4096 + +struct cuse_init_in { +	__u32	major; +	__u32	minor; +	__u32	unused; +	__u32	flags; +}; + +struct cuse_init_out { +	__u32	major; +	__u32	minor; +	__u32	unused; +	__u32	flags; +	__u32	max_read; +	__u32	max_write; +	__u32	dev_major;		/* chardev major */ +	__u32	dev_minor;		/* chardev minor */ +	__u32	spare[10]; +}; + +struct fuse_interrupt_in { +	__u64	unique; +}; + +struct fuse_bmap_in { +	__u64	block; +	__u32	blocksize; +	__u32	padding; +}; + +struct fuse_bmap_out { +	__u64	block; +}; + +struct fuse_ioctl_in { +	__u64	fh; +	__u32	flags; +	__u32	cmd; +	__u64	arg; +	__u32	in_size; +	__u32	out_size; +}; + +struct fuse_ioctl_iovec { +	__u64	base; +	__u64	len; +}; + +struct fuse_ioctl_out { +	__s32	result; +	__u32	flags; +	__u32	in_iovs; +	__u32	out_iovs; +}; + +struct fuse_poll_in { +	__u64	fh; +	__u64	kh; +	__u32	flags; +	__u32   padding; +}; + +struct fuse_poll_out { +	__u32	revents; +	__u32	padding; +}; + +struct fuse_notify_poll_wakeup_out { +	__u64	kh; +}; + +struct fuse_fallocate_in { +	__u64	fh; +	__u64	offset; +	__u64	length; +	__u32	mode; +	__u32	padding; +}; + +struct fuse_in_header { +	__u32	len; +	__u32	opcode; +	__u64	unique; +	__u64	nodeid; +	__u32	uid; +	__u32	gid; +	__u32	pid; +	__u32	padding; +}; + +struct fuse_out_header { +	__u32	len; +	__s32	error; +	__u64	unique; +}; + +struct fuse_dirent { +	__u64	ino; +	__u64	off; +	__u32	namelen; +	__u32	type; +	char name[]; +}; + +#define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name) +#define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1)) +#define FUSE_DIRENT_SIZE(d) \ +	FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen) + +struct fuse_notify_inval_inode_out { +	__u64	ino; +	__s64	off; +	__s64	len; +}; + +struct fuse_notify_inval_entry_out { +	__u64	parent; +	__u32	namelen; +	__u32	padding; +}; + +struct fuse_notify_delete_out { +	__u64	parent; +	__u64	child; +	__u32	namelen; +	__u32	padding; +}; + +struct fuse_notify_store_out { +	__u64	nodeid; +	__u64	offset; +	__u32	size; +	__u32	padding; +}; + +struct fuse_notify_retrieve_out { +	__u64	notify_unique; +	__u64	nodeid; +	__u64	offset; +	__u32	size; +	__u32	padding; +}; + +/* Matches the size of fuse_write_in */ +struct fuse_notify_retrieve_in { +	__u64	dummy1; +	__u64	offset; +	__u32	size; +	__u32	dummy2; +	__u64	dummy3; +	__u64	dummy4; +}; + +#endif /* _LINUX_FUSE_H */ diff --git a/include/uapi/linux/futex.h b/include/uapi/linux/futex.h new file mode 100644 index 00000000000..0b1f716373c --- /dev/null +++ b/include/uapi/linux/futex.h @@ -0,0 +1,152 @@ +#ifndef _UAPI_LINUX_FUTEX_H +#define _UAPI_LINUX_FUTEX_H + +#include <linux/compiler.h> +#include <linux/types.h> + +/* Second argument to futex syscall */ + + +#define FUTEX_WAIT		0 +#define FUTEX_WAKE		1 +#define FUTEX_FD		2 +#define FUTEX_REQUEUE		3 +#define FUTEX_CMP_REQUEUE	4 +#define FUTEX_WAKE_OP		5 +#define FUTEX_LOCK_PI		6 +#define FUTEX_UNLOCK_PI		7 +#define FUTEX_TRYLOCK_PI	8 +#define FUTEX_WAIT_BITSET	9 +#define FUTEX_WAKE_BITSET	10 +#define FUTEX_WAIT_REQUEUE_PI	11 +#define FUTEX_CMP_REQUEUE_PI	12 + +#define FUTEX_PRIVATE_FLAG	128 +#define FUTEX_CLOCK_REALTIME	256 +#define FUTEX_CMD_MASK		~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME) + +#define FUTEX_WAIT_PRIVATE	(FUTEX_WAIT | FUTEX_PRIVATE_FLAG) +#define FUTEX_WAKE_PRIVATE	(FUTEX_WAKE | FUTEX_PRIVATE_FLAG) +#define FUTEX_REQUEUE_PRIVATE	(FUTEX_REQUEUE | FUTEX_PRIVATE_FLAG) +#define FUTEX_CMP_REQUEUE_PRIVATE (FUTEX_CMP_REQUEUE | FUTEX_PRIVATE_FLAG) +#define FUTEX_WAKE_OP_PRIVATE	(FUTEX_WAKE_OP | FUTEX_PRIVATE_FLAG) +#define FUTEX_LOCK_PI_PRIVATE	(FUTEX_LOCK_PI | FUTEX_PRIVATE_FLAG) +#define FUTEX_UNLOCK_PI_PRIVATE	(FUTEX_UNLOCK_PI | FUTEX_PRIVATE_FLAG) +#define FUTEX_TRYLOCK_PI_PRIVATE (FUTEX_TRYLOCK_PI | FUTEX_PRIVATE_FLAG) +#define FUTEX_WAIT_BITSET_PRIVATE	(FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG) +#define FUTEX_WAKE_BITSET_PRIVATE	(FUTEX_WAKE_BITSET | FUTEX_PRIVATE_FLAG) +#define FUTEX_WAIT_REQUEUE_PI_PRIVATE	(FUTEX_WAIT_REQUEUE_PI | \ +					 FUTEX_PRIVATE_FLAG) +#define FUTEX_CMP_REQUEUE_PI_PRIVATE	(FUTEX_CMP_REQUEUE_PI | \ +					 FUTEX_PRIVATE_FLAG) + +/* + * Support for robust futexes: the kernel cleans up held futexes at + * thread exit time. + */ + +/* + * Per-lock list entry - embedded in user-space locks, somewhere close + * to the futex field. (Note: user-space uses a double-linked list to + * achieve O(1) list add and remove, but the kernel only needs to know + * about the forward link) + * + * NOTE: this structure is part of the syscall ABI, and must not be + * changed. + */ +struct robust_list { +	struct robust_list __user *next; +}; + +/* + * Per-thread list head: + * + * NOTE: this structure is part of the syscall ABI, and must only be + * changed if the change is first communicated with the glibc folks. + * (When an incompatible change is done, we'll increase the structure + *  size, which glibc will detect) + */ +struct robust_list_head { +	/* +	 * The head of the list. Points back to itself if empty: +	 */ +	struct robust_list list; + +	/* +	 * This relative offset is set by user-space, it gives the kernel +	 * the relative position of the futex field to examine. This way +	 * we keep userspace flexible, to freely shape its data-structure, +	 * without hardcoding any particular offset into the kernel: +	 */ +	long futex_offset; + +	/* +	 * The death of the thread may race with userspace setting +	 * up a lock's links. So to handle this race, userspace first +	 * sets this field to the address of the to-be-taken lock, +	 * then does the lock acquire, and then adds itself to the +	 * list, and then clears this field. Hence the kernel will +	 * always have full knowledge of all locks that the thread +	 * _might_ have taken. We check the owner TID in any case, +	 * so only truly owned locks will be handled. +	 */ +	struct robust_list __user *list_op_pending; +}; + +/* + * Are there any waiters for this robust futex: + */ +#define FUTEX_WAITERS		0x80000000 + +/* + * The kernel signals via this bit that a thread holding a futex + * has exited without unlocking the futex. The kernel also does + * a FUTEX_WAKE on such futexes, after setting the bit, to wake + * up any possible waiters: + */ +#define FUTEX_OWNER_DIED	0x40000000 + +/* + * The rest of the robust-futex field is for the TID: + */ +#define FUTEX_TID_MASK		0x3fffffff + +/* + * This limit protects against a deliberately circular list. + * (Not worth introducing an rlimit for it) + */ +#define ROBUST_LIST_LIMIT	2048 + +/* + * bitset with all bits set for the FUTEX_xxx_BITSET OPs to request a + * match of any bit. + */ +#define FUTEX_BITSET_MATCH_ANY	0xffffffff + + +#define FUTEX_OP_SET		0	/* *(int *)UADDR2 = OPARG; */ +#define FUTEX_OP_ADD		1	/* *(int *)UADDR2 += OPARG; */ +#define FUTEX_OP_OR		2	/* *(int *)UADDR2 |= OPARG; */ +#define FUTEX_OP_ANDN		3	/* *(int *)UADDR2 &= ~OPARG; */ +#define FUTEX_OP_XOR		4	/* *(int *)UADDR2 ^= OPARG; */ + +#define FUTEX_OP_OPARG_SHIFT	8	/* Use (1 << OPARG) instead of OPARG.  */ + +#define FUTEX_OP_CMP_EQ		0	/* if (oldval == CMPARG) wake */ +#define FUTEX_OP_CMP_NE		1	/* if (oldval != CMPARG) wake */ +#define FUTEX_OP_CMP_LT		2	/* if (oldval < CMPARG) wake */ +#define FUTEX_OP_CMP_LE		3	/* if (oldval <= CMPARG) wake */ +#define FUTEX_OP_CMP_GT		4	/* if (oldval > CMPARG) wake */ +#define FUTEX_OP_CMP_GE		5	/* if (oldval >= CMPARG) wake */ + +/* FUTEX_WAKE_OP will perform atomically +   int oldval = *(int *)UADDR2; +   *(int *)UADDR2 = oldval OP OPARG; +   if (oldval CMP CMPARG) +     wake UADDR2;  */ + +#define FUTEX_OP(op, oparg, cmp, cmparg) \ +  (((op & 0xf) << 28) | ((cmp & 0xf) << 24)		\ +   | ((oparg & 0xfff) << 12) | (cmparg & 0xfff)) + +#endif /* _UAPI_LINUX_FUTEX_H */ diff --git a/include/uapi/linux/gameport.h b/include/uapi/linux/gameport.h new file mode 100644 index 00000000000..49b29b068f4 --- /dev/null +++ b/include/uapi/linux/gameport.h @@ -0,0 +1,28 @@ +/* + *  Copyright (c) 1999-2002 Vojtech Pavlik + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ +#ifndef _UAPI_GAMEPORT_H +#define _UAPI_GAMEPORT_H + + + +#define GAMEPORT_MODE_DISABLED		0 +#define GAMEPORT_MODE_RAW		1 +#define GAMEPORT_MODE_COOKED		2 + +#define GAMEPORT_ID_VENDOR_ANALOG	0x0001 +#define GAMEPORT_ID_VENDOR_MADCATZ	0x0002 +#define GAMEPORT_ID_VENDOR_LOGITECH	0x0003 +#define GAMEPORT_ID_VENDOR_CREATIVE	0x0004 +#define GAMEPORT_ID_VENDOR_GENIUS	0x0005 +#define GAMEPORT_ID_VENDOR_INTERACT	0x0006 +#define GAMEPORT_ID_VENDOR_MICROSOFT	0x0007 +#define GAMEPORT_ID_VENDOR_THRUSTMASTER	0x0008 +#define GAMEPORT_ID_VENDOR_GRAVIS	0x0009 +#define GAMEPORT_ID_VENDOR_GUILLEMOT	0x000a + +#endif /* _UAPI_GAMEPORT_H */ diff --git a/include/uapi/linux/gen_stats.h b/include/uapi/linux/gen_stats.h new file mode 100644 index 00000000000..552c8a0a12d --- /dev/null +++ b/include/uapi/linux/gen_stats.h @@ -0,0 +1,67 @@ +#ifndef __LINUX_GEN_STATS_H +#define __LINUX_GEN_STATS_H + +#include <linux/types.h> + +enum { +	TCA_STATS_UNSPEC, +	TCA_STATS_BASIC, +	TCA_STATS_RATE_EST, +	TCA_STATS_QUEUE, +	TCA_STATS_APP, +	__TCA_STATS_MAX, +}; +#define TCA_STATS_MAX (__TCA_STATS_MAX - 1) + +/** + * struct gnet_stats_basic - byte/packet throughput statistics + * @bytes: number of seen bytes + * @packets: number of seen packets + */ +struct gnet_stats_basic { +	__u64	bytes; +	__u32	packets; +}; +struct gnet_stats_basic_packed { +	__u64	bytes; +	__u32	packets; +} __attribute__ ((packed)); + +/** + * struct gnet_stats_rate_est - rate estimator + * @bps: current byte rate + * @pps: current packet rate + */ +struct gnet_stats_rate_est { +	__u32	bps; +	__u32	pps; +}; + +/** + * struct gnet_stats_queue - queuing statistics + * @qlen: queue length + * @backlog: backlog size of queue + * @drops: number of dropped packets + * @requeues: number of requeues + * @overlimits: number of enqueues over the limit + */ +struct gnet_stats_queue { +	__u32	qlen; +	__u32	backlog; +	__u32	drops; +	__u32	requeues; +	__u32	overlimits; +}; + +/** + * struct gnet_estimator - rate estimator configuration + * @interval: sampling period + * @ewma_log: the log of measurement window weight + */ +struct gnet_estimator { +	signed char	interval; +	unsigned char	ewma_log; +}; + + +#endif /* __LINUX_GEN_STATS_H */ diff --git a/include/uapi/linux/genetlink.h b/include/uapi/linux/genetlink.h new file mode 100644 index 00000000000..c880a417d8a --- /dev/null +++ b/include/uapi/linux/genetlink.h @@ -0,0 +1,84 @@ +#ifndef _UAPI__LINUX_GENERIC_NETLINK_H +#define _UAPI__LINUX_GENERIC_NETLINK_H + +#include <linux/types.h> +#include <linux/netlink.h> + +#define GENL_NAMSIZ	16	/* length of family name */ + +#define GENL_MIN_ID	NLMSG_MIN_TYPE +#define GENL_MAX_ID	1023 + +struct genlmsghdr { +	__u8	cmd; +	__u8	version; +	__u16	reserved; +}; + +#define GENL_HDRLEN	NLMSG_ALIGN(sizeof(struct genlmsghdr)) + +#define GENL_ADMIN_PERM		0x01 +#define GENL_CMD_CAP_DO		0x02 +#define GENL_CMD_CAP_DUMP	0x04 +#define GENL_CMD_CAP_HASPOL	0x08 + +/* + * List of reserved static generic netlink identifiers: + */ +#define GENL_ID_GENERATE	0 +#define GENL_ID_CTRL		NLMSG_MIN_TYPE + +/************************************************************************** + * Controller + **************************************************************************/ + +enum { +	CTRL_CMD_UNSPEC, +	CTRL_CMD_NEWFAMILY, +	CTRL_CMD_DELFAMILY, +	CTRL_CMD_GETFAMILY, +	CTRL_CMD_NEWOPS, +	CTRL_CMD_DELOPS, +	CTRL_CMD_GETOPS, +	CTRL_CMD_NEWMCAST_GRP, +	CTRL_CMD_DELMCAST_GRP, +	CTRL_CMD_GETMCAST_GRP, /* unused */ +	__CTRL_CMD_MAX, +}; + +#define CTRL_CMD_MAX (__CTRL_CMD_MAX - 1) + +enum { +	CTRL_ATTR_UNSPEC, +	CTRL_ATTR_FAMILY_ID, +	CTRL_ATTR_FAMILY_NAME, +	CTRL_ATTR_VERSION, +	CTRL_ATTR_HDRSIZE, +	CTRL_ATTR_MAXATTR, +	CTRL_ATTR_OPS, +	CTRL_ATTR_MCAST_GROUPS, +	__CTRL_ATTR_MAX, +}; + +#define CTRL_ATTR_MAX (__CTRL_ATTR_MAX - 1) + +enum { +	CTRL_ATTR_OP_UNSPEC, +	CTRL_ATTR_OP_ID, +	CTRL_ATTR_OP_FLAGS, +	__CTRL_ATTR_OP_MAX, +}; + +#define CTRL_ATTR_OP_MAX (__CTRL_ATTR_OP_MAX - 1) + +enum { +	CTRL_ATTR_MCAST_GRP_UNSPEC, +	CTRL_ATTR_MCAST_GRP_NAME, +	CTRL_ATTR_MCAST_GRP_ID, +	__CTRL_ATTR_MCAST_GRP_MAX, +}; + +#define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1) + + +#endif /* _UAPI__LINUX_GENERIC_NETLINK_H */ diff --git a/include/uapi/linux/gfs2_ondisk.h b/include/uapi/linux/gfs2_ondisk.h new file mode 100644 index 00000000000..b2de1f9a88d --- /dev/null +++ b/include/uapi/linux/gfs2_ondisk.h @@ -0,0 +1,464 @@ +/* + * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved. + * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU General Public License v.2. + */ + +#ifndef __GFS2_ONDISK_DOT_H__ +#define __GFS2_ONDISK_DOT_H__ + +#include <linux/types.h> + +#define GFS2_MAGIC		0x01161970 +#define GFS2_BASIC_BLOCK	512 +#define GFS2_BASIC_BLOCK_SHIFT	9 + +/* Lock numbers of the LM_TYPE_NONDISK type */ + +#define GFS2_MOUNT_LOCK		0 +#define GFS2_LIVE_LOCK		1 +#define GFS2_TRANS_LOCK		2 +#define GFS2_RENAME_LOCK	3 +#define GFS2_CONTROL_LOCK	4 +#define GFS2_MOUNTED_LOCK	5 + +/* Format numbers for various metadata types */ + +#define GFS2_FORMAT_NONE	0 +#define GFS2_FORMAT_SB		100 +#define GFS2_FORMAT_RG		200 +#define GFS2_FORMAT_RB		300 +#define GFS2_FORMAT_DI		400 +#define GFS2_FORMAT_IN		500 +#define GFS2_FORMAT_LF		600 +#define GFS2_FORMAT_JD		700 +#define GFS2_FORMAT_LH		800 +#define GFS2_FORMAT_LD		900 +#define GFS2_FORMAT_LB		1000 +#define GFS2_FORMAT_EA		1600 +#define GFS2_FORMAT_ED		1700 +#define GFS2_FORMAT_QC		1400 +/* These are format numbers for entities contained in files */ +#define GFS2_FORMAT_RI		1100 +#define GFS2_FORMAT_DE		1200 +#define GFS2_FORMAT_QU		1500 +/* These are part of the superblock */ +#define GFS2_FORMAT_FS		1801 +#define GFS2_FORMAT_MULTI	1900 + +/* + * An on-disk inode number + */ + +struct gfs2_inum { +	__be64 no_formal_ino; +	__be64 no_addr; +}; + +/* + * Generic metadata head structure + * Every inplace buffer logged in the journal must start with this. + */ + +#define GFS2_METATYPE_NONE	0 +#define GFS2_METATYPE_SB	1 +#define GFS2_METATYPE_RG	2 +#define GFS2_METATYPE_RB	3 +#define GFS2_METATYPE_DI	4 +#define GFS2_METATYPE_IN	5 +#define GFS2_METATYPE_LF	6 +#define GFS2_METATYPE_JD	7 +#define GFS2_METATYPE_LH	8 +#define GFS2_METATYPE_LD	9 +#define GFS2_METATYPE_LB	12 +#define GFS2_METATYPE_EA	10 +#define GFS2_METATYPE_ED	11 +#define GFS2_METATYPE_QC	14 + +struct gfs2_meta_header { +	__be32 mh_magic; +	__be32 mh_type; +	__be64 __pad0;		/* Was generation number in gfs1 */ +	__be32 mh_format; +	/* This union is to keep userspace happy */ +	union { +		__be32 mh_jid;		/* Was incarnation number in gfs1 */ +		__be32 __pad1; +	}; +}; + +/* + * super-block structure + * + * It's probably good if SIZEOF_SB <= GFS2_BASIC_BLOCK (512 bytes) + * + * Order is important, need to be able to read old superblocks to do on-disk + * version upgrades. + */ + +/* Address of superblock in GFS2 basic blocks */ +#define GFS2_SB_ADDR		128 + +/* The lock number for the superblock (must be zero) */ +#define GFS2_SB_LOCK		0 + +/* Requirement:  GFS2_LOCKNAME_LEN % 8 == 0 +   Includes: the fencing zero at the end */ +#define GFS2_LOCKNAME_LEN	64 + +struct gfs2_sb { +	struct gfs2_meta_header sb_header; + +	__be32 sb_fs_format; +	__be32 sb_multihost_format; +	__u32  __pad0;	/* Was superblock flags in gfs1 */ + +	__be32 sb_bsize; +	__be32 sb_bsize_shift; +	__u32 __pad1;	/* Was journal segment size in gfs1 */ + +	struct gfs2_inum sb_master_dir; /* Was jindex dinode in gfs1 */ +	struct gfs2_inum __pad2; /* Was rindex dinode in gfs1 */ +	struct gfs2_inum sb_root_dir; + +	char sb_lockproto[GFS2_LOCKNAME_LEN]; +	char sb_locktable[GFS2_LOCKNAME_LEN]; + +	struct gfs2_inum __pad3; /* Was quota inode in gfs1 */ +	struct gfs2_inum __pad4; /* Was licence inode in gfs1 */ +#define GFS2_HAS_UUID 1 +	__u8 sb_uuid[16]; /* The UUID, maybe 0 for backwards compat */ +}; + +/* + * resource index structure + */ + +struct gfs2_rindex { +	__be64 ri_addr;	/* grp block disk address */ +	__be32 ri_length;	/* length of rgrp header in fs blocks */ +	__u32 __pad; + +	__be64 ri_data0;	/* first data location */ +	__be32 ri_data;	/* num of data blocks in rgrp */ + +	__be32 ri_bitbytes;	/* number of bytes in data bitmaps */ + +	__u8 ri_reserved[64]; +}; + +/* + * resource group header structure + */ + +/* Number of blocks per byte in rgrp */ +#define GFS2_NBBY		4 +#define GFS2_BIT_SIZE		2 +#define GFS2_BIT_MASK		0x00000003 + +#define GFS2_BLKST_FREE		0 +#define GFS2_BLKST_USED		1 +#define GFS2_BLKST_UNLINKED	2 +#define GFS2_BLKST_DINODE	3 + +#define GFS2_RGF_JOURNAL	0x00000001 +#define GFS2_RGF_METAONLY	0x00000002 +#define GFS2_RGF_DATAONLY	0x00000004 +#define GFS2_RGF_NOALLOC	0x00000008 +#define GFS2_RGF_TRIMMED	0x00000010 + +struct gfs2_rgrp_lvb { +	__be32 rl_magic; +	__be32 rl_flags; +	__be32 rl_free; +	__be32 rl_dinodes; +	__be64 rl_igeneration; +	__be32 rl_unlinked; +	__be32 __pad; +}; + +struct gfs2_rgrp { +	struct gfs2_meta_header rg_header; + +	__be32 rg_flags; +	__be32 rg_free; +	__be32 rg_dinodes; +	__be32 __pad; +	__be64 rg_igeneration; + +	__u8 rg_reserved[80]; /* Several fields from gfs1 now reserved */ +}; + +/* + * quota structure + */ + +struct gfs2_quota { +	__be64 qu_limit; +	__be64 qu_warn; +	__be64 qu_value; +	__u8 qu_reserved[64]; +}; + +/* + * dinode structure + */ + +#define GFS2_MAX_META_HEIGHT	10 +#define GFS2_DIR_MAX_DEPTH	17 + +#define DT2IF(dt) (((dt) << 12) & S_IFMT) +#define IF2DT(sif) (((sif) & S_IFMT) >> 12) + +enum { +	gfs2fl_Jdata		= 0, +	gfs2fl_ExHash		= 1, +	gfs2fl_Unused		= 2, +	gfs2fl_EaIndirect	= 3, +	gfs2fl_Directio		= 4, +	gfs2fl_Immutable	= 5, +	gfs2fl_AppendOnly	= 6, +	gfs2fl_NoAtime		= 7, +	gfs2fl_Sync		= 8, +	gfs2fl_System		= 9, +	gfs2fl_TopLevel		= 10, +	gfs2fl_TruncInProg	= 29, +	gfs2fl_InheritDirectio	= 30, +	gfs2fl_InheritJdata	= 31, +}; + +/* Dinode flags */ +#define GFS2_DIF_JDATA			0x00000001 +#define GFS2_DIF_EXHASH			0x00000002 +#define GFS2_DIF_UNUSED			0x00000004  /* only in gfs1 */ +#define GFS2_DIF_EA_INDIRECT		0x00000008 +#define GFS2_DIF_DIRECTIO		0x00000010 +#define GFS2_DIF_IMMUTABLE		0x00000020 +#define GFS2_DIF_APPENDONLY		0x00000040 +#define GFS2_DIF_NOATIME		0x00000080 +#define GFS2_DIF_SYNC			0x00000100 +#define GFS2_DIF_SYSTEM			0x00000200 /* New in gfs2 */ +#define GFS2_DIF_TOPDIR			0x00000400 /* New in gfs2 */ +#define GFS2_DIF_TRUNC_IN_PROG		0x20000000 /* New in gfs2 */ +#define GFS2_DIF_INHERIT_DIRECTIO	0x40000000 /* only in gfs1 */ +#define GFS2_DIF_INHERIT_JDATA		0x80000000 + +struct gfs2_dinode { +	struct gfs2_meta_header di_header; + +	struct gfs2_inum di_num; + +	__be32 di_mode;	/* mode of file */ +	__be32 di_uid;	/* owner's user id */ +	__be32 di_gid;	/* owner's group id */ +	__be32 di_nlink;	/* number of links to this file */ +	__be64 di_size;	/* number of bytes in file */ +	__be64 di_blocks;	/* number of blocks in file */ +	__be64 di_atime;	/* time last accessed */ +	__be64 di_mtime;	/* time last modified */ +	__be64 di_ctime;	/* time last changed */ +	__be32 di_major;	/* device major number */ +	__be32 di_minor;	/* device minor number */ + +	/* This section varies from gfs1. Padding added to align with +         * remainder of dinode +	 */ +	__be64 di_goal_meta;	/* rgrp to alloc from next */ +	__be64 di_goal_data;	/* data block goal */ +	__be64 di_generation;	/* generation number for NFS */ + +	__be32 di_flags;	/* GFS2_DIF_... */ +	__be32 di_payload_format;  /* GFS2_FORMAT_... */ +	__u16 __pad1;	/* Was ditype in gfs1 */ +	__be16 di_height;	/* height of metadata */ +	__u32 __pad2;	/* Unused incarnation number from gfs1 */ + +	/* These only apply to directories  */ +	__u16 __pad3;	/* Padding */ +	__be16 di_depth;	/* Number of bits in the table */ +	__be32 di_entries;	/* The number of entries in the directory */ + +	struct gfs2_inum __pad4; /* Unused even in current gfs1 */ + +	__be64 di_eattr;	/* extended attribute block number */ +	__be32 di_atime_nsec;   /* nsec portion of atime */ +	__be32 di_mtime_nsec;   /* nsec portion of mtime */ +	__be32 di_ctime_nsec;   /* nsec portion of ctime */ + +	__u8 di_reserved[44]; +}; + +/* + * directory structure - many of these per directory file + */ + +#define GFS2_FNAMESIZE		255 +#define GFS2_DIRENT_SIZE(name_len) ((sizeof(struct gfs2_dirent) + (name_len) + 7) & ~7) + +struct gfs2_dirent { +	struct gfs2_inum de_inum; +	__be32 de_hash; +	__be16 de_rec_len; +	__be16 de_name_len; +	__be16 de_type; +	__u8 __pad[14]; +}; + +/* + * Header of leaf directory nodes + */ + +struct gfs2_leaf { +	struct gfs2_meta_header lf_header; + +	__be16 lf_depth;		/* Depth of leaf */ +	__be16 lf_entries;		/* Number of dirents in leaf */ +	__be32 lf_dirent_format;	/* Format of the dirents */ +	__be64 lf_next;			/* Next leaf, if overflow */ + +	__u8 lf_reserved[64]; +}; + +/* + * Extended attribute header format + * + * This works in a similar way to dirents. There is a fixed size header + * followed by a variable length section made up of the name and the + * associated data. In the case of a "stuffed" entry, the value is + * inline directly after the name, the ea_num_ptrs entry will be + * zero in that case. For non-"stuffed" entries, there will be + * a set of pointers (aligned to 8 byte boundary) to the block(s) + * containing the value. + * + * The blocks containing the values and the blocks containing the + * extended attribute headers themselves all start with the common + * metadata header. Each inode, if it has extended attributes, will + * have either a single block containing the extended attribute headers + * or a single indirect block pointing to blocks containing the + * extended attribure headers. + * + * The maximim size of the data part of an extended attribute is 64k + * so the number of blocks required depends upon block size. Since the + * block size also determines the number of pointers in an indirect + * block, its a fairly complicated calculation to work out the maximum + * number of blocks that an inode may have relating to extended attributes. + * + */ + +#define GFS2_EA_MAX_NAME_LEN	255 +#define GFS2_EA_MAX_DATA_LEN	65536 + +#define GFS2_EATYPE_UNUSED	0 +#define GFS2_EATYPE_USR		1 +#define GFS2_EATYPE_SYS		2 +#define GFS2_EATYPE_SECURITY	3 + +#define GFS2_EATYPE_LAST	3 +#define GFS2_EATYPE_VALID(x)	((x) <= GFS2_EATYPE_LAST) + +#define GFS2_EAFLAG_LAST	0x01	/* last ea in block */ + +struct gfs2_ea_header { +	__be32 ea_rec_len; +	__be32 ea_data_len; +	__u8 ea_name_len;	/* no NULL pointer after the string */ +	__u8 ea_type;		/* GFS2_EATYPE_... */ +	__u8 ea_flags;		/* GFS2_EAFLAG_... */ +	__u8 ea_num_ptrs; +	__u32 __pad; +}; + +/* + * Log header structure + */ + +#define GFS2_LOG_HEAD_UNMOUNT	0x00000001	/* log is clean */ + +struct gfs2_log_header { +	struct gfs2_meta_header lh_header; + +	__be64 lh_sequence;	/* Sequence number of this transaction */ +	__be32 lh_flags;	/* GFS2_LOG_HEAD_... */ +	__be32 lh_tail;		/* Block number of log tail */ +	__be32 lh_blkno; +	__be32 lh_hash; +}; + +/* + * Log type descriptor + */ + +#define GFS2_LOG_DESC_METADATA	300 +/* ld_data1 is the number of metadata blocks in the descriptor. +   ld_data2 is unused. */ + +#define GFS2_LOG_DESC_REVOKE	301 +/* ld_data1 is the number of revoke blocks in the descriptor. +   ld_data2 is unused. */ + +#define GFS2_LOG_DESC_JDATA	302 +/* ld_data1 is the number of data blocks in the descriptor. +   ld_data2 is unused. */ + +struct gfs2_log_descriptor { +	struct gfs2_meta_header ld_header; + +	__be32 ld_type;		/* GFS2_LOG_DESC_... */ +	__be32 ld_length;	/* Number of buffers in this chunk */ +	__be32 ld_data1;	/* descriptor-specific field */ +	__be32 ld_data2;	/* descriptor-specific field */ + +	__u8 ld_reserved[32]; +}; + +/* + * Inum Range + * Describe a range of formal inode numbers allocated to + * one machine to assign to inodes. + */ + +#define GFS2_INUM_QUANTUM	1048576 + +struct gfs2_inum_range { +	__be64 ir_start; +	__be64 ir_length; +}; + +/* + * Statfs change + * Describes an change to the pool of free and allocated + * blocks. + */ + +struct gfs2_statfs_change { +	__be64 sc_total; +	__be64 sc_free; +	__be64 sc_dinodes; +}; + +/* + * Quota change + * Describes an allocation change for a particular + * user or group. + */ + +#define GFS2_QCF_USER		0x00000001 + +struct gfs2_quota_change { +	__be64 qc_change; +	__be32 qc_flags;	/* GFS2_QCF_... */ +	__be32 qc_id; +}; + +struct gfs2_quota_lvb { +        __be32 qb_magic; +        __u32 __pad; +        __be64 qb_limit;      /* Hard limit of # blocks to alloc */ +        __be64 qb_warn;       /* Warn user when alloc is above this # */ +        __be64 qb_value;       /* Current # blocks allocated */ +}; + +#endif /* __GFS2_ONDISK_DOT_H__ */ diff --git a/include/uapi/linux/gigaset_dev.h b/include/uapi/linux/gigaset_dev.h new file mode 100644 index 00000000000..258ba82937e --- /dev/null +++ b/include/uapi/linux/gigaset_dev.h @@ -0,0 +1,38 @@ +/* + * interface to user space for the gigaset driver + * + * Copyright (c) 2004 by Hansjoerg Lipp <hjlipp@web.de> + * + * ===================================================================== + *    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. + * ===================================================================== + */ + +#ifndef GIGASET_INTERFACE_H +#define GIGASET_INTERFACE_H + +#include <linux/ioctl.h> + +/* The magic IOCTL value for this interface. */ +#define GIGASET_IOCTL 0x47 + +/* enable/disable device control via character device (lock out ISDN subsys) */ +#define GIGASET_REDIR    _IOWR(GIGASET_IOCTL, 0, int) + +/* enable adapter configuration mode (M10x only) */ +#define GIGASET_CONFIG   _IOWR(GIGASET_IOCTL, 1, int) + +/* set break characters (M105 only) */ +#define GIGASET_BRKCHARS _IOW(GIGASET_IOCTL, 2, unsigned char[6]) + +/* get version information selected by arg[0] */ +#define GIGASET_VERSION  _IOWR(GIGASET_IOCTL, 3, unsigned[4]) +/* values for GIGASET_VERSION arg[0] */ +#define GIGVER_DRIVER 0		/* get driver version */ +#define GIGVER_COMPAT 1		/* get interface compatibility version */ +#define GIGVER_FWBASE 2		/* get base station firmware version */ + +#endif diff --git a/include/uapi/linux/hdlc.h b/include/uapi/linux/hdlc.h new file mode 100644 index 00000000000..2c5f0aff4cf --- /dev/null +++ b/include/uapi/linux/hdlc.h @@ -0,0 +1,23 @@ +/* + * Generic HDLC support routines for Linux + * + * Copyright (C) 1999-2005 Krzysztof Halasa <khc@pm.waw.pl> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License + * as published by the Free Software Foundation. + */ + +#ifndef _UAPI__HDLC_H +#define _UAPI__HDLC_H + + +#define HDLC_MAX_MTU 1500	/* Ethernet 1500 bytes */ +#if 0 +#define HDLC_MAX_MRU (HDLC_MAX_MTU + 10 + 14 + 4) /* for ETH+VLAN over FR */ +#else +#define HDLC_MAX_MRU 1600 /* as required for FR network */ +#endif + + +#endif /* _UAPI__HDLC_H */ diff --git a/include/uapi/linux/hdlcdrv.h b/include/uapi/linux/hdlcdrv.h new file mode 100644 index 00000000000..ffc79c0b44a --- /dev/null +++ b/include/uapi/linux/hdlcdrv.h @@ -0,0 +1,110 @@ +/* + * hdlcdrv.h  -- HDLC packet radio network driver. + * The Linux soundcard driver for 1200 baud and 9600 baud packet radio + * (C) 1996-1998 by Thomas Sailer, HB9JNX/AE4WA + */ + +#ifndef _UAPI_HDLCDRV_H +#define _UAPI_HDLCDRV_H + +/* -------------------------------------------------------------------- */ +/* + * structs for the IOCTL commands + */ + +struct hdlcdrv_params { +	int iobase; +	int irq; +	int dma; +	int dma2; +	int seriobase; +	int pariobase; +	int midiiobase; +};	 + +struct hdlcdrv_channel_params { +	int tx_delay;  /* the transmitter keyup delay in 10ms units */ +	int tx_tail;   /* the transmitter keyoff delay in 10ms units */ +	int slottime;  /* the slottime in 10ms; usually 10 = 100ms */ +	int ppersist;  /* the p-persistence 0..255 */ +	int fulldup;   /* some driver do not support full duplex, setting */ +	               /* this just makes them send even if DCD is on */ +};	 + +struct hdlcdrv_old_channel_state { +  	int ptt; +  	int dcd; +  	int ptt_keyed; +}; + +struct hdlcdrv_channel_state { + 	int ptt; + 	int dcd; + 	int ptt_keyed; + 	unsigned long tx_packets; + 	unsigned long tx_errors; + 	unsigned long rx_packets; + 	unsigned long rx_errors; +}; + +struct hdlcdrv_ioctl { +	int cmd; +	union { +		struct hdlcdrv_params mp; +		struct hdlcdrv_channel_params cp; +		struct hdlcdrv_channel_state cs; +		struct hdlcdrv_old_channel_state ocs; +		unsigned int calibrate; +		unsigned char bits; +		char modename[128]; +		char drivername[32]; +	} data; +}; + +/* -------------------------------------------------------------------- */ + +/* + * ioctl values + */ +#define HDLCDRVCTL_GETMODEMPAR       0 +#define HDLCDRVCTL_SETMODEMPAR       1 +#define HDLCDRVCTL_MODEMPARMASK      2  /* not handled by hdlcdrv */ +#define HDLCDRVCTL_GETCHANNELPAR    10 +#define HDLCDRVCTL_SETCHANNELPAR    11 +#define HDLCDRVCTL_OLDGETSTAT       20 +#define HDLCDRVCTL_CALIBRATE        21 +#define HDLCDRVCTL_GETSTAT          22 + +/* + * these are mainly for debugging purposes + */ +#define HDLCDRVCTL_GETSAMPLES       30 +#define HDLCDRVCTL_GETBITS          31 + +/* + * not handled by hdlcdrv, but by its depending drivers + */ +#define HDLCDRVCTL_GETMODE          40 +#define HDLCDRVCTL_SETMODE          41 +#define HDLCDRVCTL_MODELIST         42 +#define HDLCDRVCTL_DRIVERNAME       43 + +/* + * mask of needed modem parameters, returned by HDLCDRVCTL_MODEMPARMASK + */ +#define HDLCDRV_PARMASK_IOBASE      (1<<0) +#define HDLCDRV_PARMASK_IRQ         (1<<1) +#define HDLCDRV_PARMASK_DMA         (1<<2) +#define HDLCDRV_PARMASK_DMA2        (1<<3) +#define HDLCDRV_PARMASK_SERIOBASE   (1<<4) +#define HDLCDRV_PARMASK_PARIOBASE   (1<<5) +#define HDLCDRV_PARMASK_MIDIIOBASE  (1<<6) + +/* -------------------------------------------------------------------- */ + + +/* -------------------------------------------------------------------- */ + +#endif /* _UAPI_HDLCDRV_H */ + +/* -------------------------------------------------------------------- */ diff --git a/include/uapi/linux/hdreg.h b/include/uapi/linux/hdreg.h new file mode 100644 index 00000000000..29ee2873f4a --- /dev/null +++ b/include/uapi/linux/hdreg.h @@ -0,0 +1,658 @@ +#ifndef _LINUX_HDREG_H +#define _LINUX_HDREG_H + +#include <linux/types.h> + +/* + * Command Header sizes for IOCTL commands + */ + +#define HDIO_DRIVE_CMD_HDR_SIZE		(4 * sizeof(__u8)) +#define HDIO_DRIVE_HOB_HDR_SIZE		(8 * sizeof(__u8)) +#define HDIO_DRIVE_TASK_HDR_SIZE	(8 * sizeof(__u8)) + +#define IDE_DRIVE_TASK_NO_DATA		0 +#ifndef __KERNEL__ +#define IDE_DRIVE_TASK_INVALID		-1 +#define IDE_DRIVE_TASK_SET_XFER		1 +#define IDE_DRIVE_TASK_IN		2 +#define IDE_DRIVE_TASK_OUT		3 +#endif +#define IDE_DRIVE_TASK_RAW_WRITE	4 + +/* + * Define standard taskfile in/out register + */ +#define IDE_TASKFILE_STD_IN_FLAGS	0xFE +#define IDE_HOB_STD_IN_FLAGS		0x3C +#ifndef __KERNEL__ +#define IDE_TASKFILE_STD_OUT_FLAGS	0xFE +#define IDE_HOB_STD_OUT_FLAGS		0x3C + +typedef unsigned char task_ioreg_t; +typedef unsigned long sata_ioreg_t; +#endif + +typedef union ide_reg_valid_s { +	unsigned all				: 16; +	struct { +		unsigned data			: 1; +		unsigned error_feature		: 1; +		unsigned sector			: 1; +		unsigned nsector		: 1; +		unsigned lcyl			: 1; +		unsigned hcyl			: 1; +		unsigned select			: 1; +		unsigned status_command		: 1; + +		unsigned data_hob		: 1; +		unsigned error_feature_hob	: 1; +		unsigned sector_hob		: 1; +		unsigned nsector_hob		: 1; +		unsigned lcyl_hob		: 1; +		unsigned hcyl_hob		: 1; +		unsigned select_hob		: 1; +		unsigned control_hob		: 1; +	} b; +} ide_reg_valid_t; + +typedef struct ide_task_request_s { +	__u8		io_ports[8]; +	__u8		hob_ports[8]; /* bytes 6 and 7 are unused */ +	ide_reg_valid_t	out_flags; +	ide_reg_valid_t	in_flags; +	int		data_phase; +	int		req_cmd; +	unsigned long	out_size; +	unsigned long	in_size; +} ide_task_request_t; + +typedef struct ide_ioctl_request_s { +	ide_task_request_t	*task_request; +	unsigned char		*out_buffer; +	unsigned char		*in_buffer; +} ide_ioctl_request_t; + +struct hd_drive_cmd_hdr { +	__u8 command; +	__u8 sector_number; +	__u8 feature; +	__u8 sector_count; +}; + +#ifndef __KERNEL__ +typedef struct hd_drive_task_hdr { +	__u8 data; +	__u8 feature; +	__u8 sector_count; +	__u8 sector_number; +	__u8 low_cylinder; +	__u8 high_cylinder; +	__u8 device_head; +	__u8 command; +} task_struct_t; + +typedef struct hd_drive_hob_hdr { +	__u8 data; +	__u8 feature; +	__u8 sector_count; +	__u8 sector_number; +	__u8 low_cylinder; +	__u8 high_cylinder; +	__u8 device_head; +	__u8 control; +} hob_struct_t; +#endif + +#define TASKFILE_NO_DATA		0x0000 + +#define TASKFILE_IN			0x0001 +#define TASKFILE_MULTI_IN		0x0002 + +#define TASKFILE_OUT			0x0004 +#define TASKFILE_MULTI_OUT		0x0008 +#define TASKFILE_IN_OUT			0x0010 + +#define TASKFILE_IN_DMA			0x0020 +#define TASKFILE_OUT_DMA		0x0040 +#define TASKFILE_IN_DMAQ		0x0080 +#define TASKFILE_OUT_DMAQ		0x0100 + +#ifndef __KERNEL__ +#define TASKFILE_P_IN			0x0200 +#define TASKFILE_P_OUT			0x0400 +#define TASKFILE_P_IN_DMA		0x0800 +#define TASKFILE_P_OUT_DMA		0x1000 +#define TASKFILE_P_IN_DMAQ		0x2000 +#define TASKFILE_P_OUT_DMAQ		0x4000 +#define TASKFILE_48			0x8000 +#define TASKFILE_INVALID		0x7fff +#endif + +#ifndef __KERNEL__ +/* ATA/ATAPI Commands pre T13 Spec */ +#define WIN_NOP				0x00 +/* + *	0x01->0x02 Reserved + */ +#define CFA_REQ_EXT_ERROR_CODE		0x03 /* CFA Request Extended Error Code */ +/* + *	0x04->0x07 Reserved + */ +#define WIN_SRST			0x08 /* ATAPI soft reset command */ +#define WIN_DEVICE_RESET		0x08 +/* + *	0x09->0x0F Reserved + */ +#define WIN_RECAL			0x10 +#define WIN_RESTORE			WIN_RECAL +/* + *	0x10->0x1F Reserved + */ +#define WIN_READ			0x20 /* 28-Bit */ +#define WIN_READ_ONCE			0x21 /* 28-Bit without retries */ +#define WIN_READ_LONG			0x22 /* 28-Bit */ +#define WIN_READ_LONG_ONCE		0x23 /* 28-Bit without retries */ +#define WIN_READ_EXT			0x24 /* 48-Bit */ +#define WIN_READDMA_EXT			0x25 /* 48-Bit */ +#define WIN_READDMA_QUEUED_EXT		0x26 /* 48-Bit */ +#define WIN_READ_NATIVE_MAX_EXT		0x27 /* 48-Bit */ +/* + *	0x28 + */ +#define WIN_MULTREAD_EXT		0x29 /* 48-Bit */ +/* + *	0x2A->0x2F Reserved + */ +#define WIN_WRITE			0x30 /* 28-Bit */ +#define WIN_WRITE_ONCE			0x31 /* 28-Bit without retries */ +#define WIN_WRITE_LONG			0x32 /* 28-Bit */ +#define WIN_WRITE_LONG_ONCE		0x33 /* 28-Bit without retries */ +#define WIN_WRITE_EXT			0x34 /* 48-Bit */ +#define WIN_WRITEDMA_EXT		0x35 /* 48-Bit */ +#define WIN_WRITEDMA_QUEUED_EXT		0x36 /* 48-Bit */ +#define WIN_SET_MAX_EXT			0x37 /* 48-Bit */ +#define CFA_WRITE_SECT_WO_ERASE		0x38 /* CFA Write Sectors without erase */ +#define WIN_MULTWRITE_EXT		0x39 /* 48-Bit */ +/* + *	0x3A->0x3B Reserved + */ +#define WIN_WRITE_VERIFY		0x3C /* 28-Bit */ +/* + *	0x3D->0x3F Reserved + */ +#define WIN_VERIFY			0x40 /* 28-Bit - Read Verify Sectors */ +#define WIN_VERIFY_ONCE			0x41 /* 28-Bit - without retries */ +#define WIN_VERIFY_EXT			0x42 /* 48-Bit */ +/* + *	0x43->0x4F Reserved + */ +#define WIN_FORMAT			0x50 +/* + *	0x51->0x5F Reserved + */ +#define WIN_INIT			0x60 +/* + *	0x61->0x5F Reserved + */ +#define WIN_SEEK			0x70 /* 0x70-0x7F Reserved */ + +#define CFA_TRANSLATE_SECTOR		0x87 /* CFA Translate Sector */ +#define WIN_DIAGNOSE			0x90 +#define WIN_SPECIFY			0x91 /* set drive geometry translation */ +#define WIN_DOWNLOAD_MICROCODE		0x92 +#define WIN_STANDBYNOW2			0x94 +#define WIN_STANDBY2			0x96 +#define WIN_SETIDLE2			0x97 +#define WIN_CHECKPOWERMODE2		0x98 +#define WIN_SLEEPNOW2			0x99 +/* + *	0x9A VENDOR + */ +#define WIN_PACKETCMD			0xA0 /* Send a packet command. */ +#define WIN_PIDENTIFY			0xA1 /* identify ATAPI device	*/ +#define WIN_QUEUED_SERVICE		0xA2 +#define WIN_SMART			0xB0 /* self-monitoring and reporting */ +#define CFA_ERASE_SECTORS		0xC0 +#define WIN_MULTREAD			0xC4 /* read sectors using multiple mode*/ +#define WIN_MULTWRITE			0xC5 /* write sectors using multiple mode */ +#define WIN_SETMULT			0xC6 /* enable/disable multiple mode */ +#define WIN_READDMA_QUEUED		0xC7 /* read sectors using Queued DMA transfers */ +#define WIN_READDMA			0xC8 /* read sectors using DMA transfers */ +#define WIN_READDMA_ONCE		0xC9 /* 28-Bit - without retries */ +#define WIN_WRITEDMA			0xCA /* write sectors using DMA transfers */ +#define WIN_WRITEDMA_ONCE		0xCB /* 28-Bit - without retries */ +#define WIN_WRITEDMA_QUEUED		0xCC /* write sectors using Queued DMA transfers */ +#define CFA_WRITE_MULTI_WO_ERASE	0xCD /* CFA Write multiple without erase */ +#define WIN_GETMEDIASTATUS		0xDA +#define WIN_ACKMEDIACHANGE		0xDB /* ATA-1, ATA-2 vendor */ +#define WIN_POSTBOOT			0xDC +#define WIN_PREBOOT 			0xDD +#define WIN_DOORLOCK			0xDE /* lock door on removable drives */ +#define WIN_DOORUNLOCK			0xDF /* unlock door on removable drives */ +#define WIN_STANDBYNOW1			0xE0 +#define WIN_IDLEIMMEDIATE		0xE1 /* force drive to become "ready" */ +#define WIN_STANDBY			0xE2 /* Set device in Standby Mode */ +#define WIN_SETIDLE1			0xE3 +#define WIN_READ_BUFFER			0xE4 /* force read only 1 sector */ +#define WIN_CHECKPOWERMODE1		0xE5 +#define WIN_SLEEPNOW1			0xE6 +#define WIN_FLUSH_CACHE			0xE7 +#define WIN_WRITE_BUFFER		0xE8 /* force write only 1 sector */ +#define WIN_WRITE_SAME			0xE9 /* read ata-2 to use */ +	/* SET_FEATURES 0x22 or 0xDD */ +#define WIN_FLUSH_CACHE_EXT		0xEA /* 48-Bit */ +#define WIN_IDENTIFY			0xEC /* ask drive to identify itself	*/ +#define WIN_MEDIAEJECT			0xED +#define WIN_IDENTIFY_DMA		0xEE /* same as WIN_IDENTIFY, but DMA */ +#define WIN_SETFEATURES			0xEF /* set special drive features */ +#define EXABYTE_ENABLE_NEST		0xF0 +#define WIN_SECURITY_SET_PASS		0xF1 +#define WIN_SECURITY_UNLOCK		0xF2 +#define WIN_SECURITY_ERASE_PREPARE	0xF3 +#define WIN_SECURITY_ERASE_UNIT		0xF4 +#define WIN_SECURITY_FREEZE_LOCK	0xF5 +#define WIN_SECURITY_DISABLE		0xF6 +#define WIN_READ_NATIVE_MAX		0xF8 /* return the native maximum address */ +#define WIN_SET_MAX			0xF9 +#define DISABLE_SEAGATE			0xFB + +/* WIN_SMART sub-commands */ + +#define SMART_READ_VALUES		0xD0 +#define SMART_READ_THRESHOLDS		0xD1 +#define SMART_AUTOSAVE			0xD2 +#define SMART_SAVE			0xD3 +#define SMART_IMMEDIATE_OFFLINE		0xD4 +#define SMART_READ_LOG_SECTOR		0xD5 +#define SMART_WRITE_LOG_SECTOR		0xD6 +#define SMART_WRITE_THRESHOLDS		0xD7 +#define SMART_ENABLE			0xD8 +#define SMART_DISABLE			0xD9 +#define SMART_STATUS			0xDA +#define SMART_AUTO_OFFLINE		0xDB + +/* Password used in TF4 & TF5 executing SMART commands */ + +#define SMART_LCYL_PASS			0x4F +#define SMART_HCYL_PASS			0xC2 + +/* WIN_SETFEATURES sub-commands */ +#define SETFEATURES_EN_8BIT	0x01	/* Enable 8-Bit Transfers */ +#define SETFEATURES_EN_WCACHE	0x02	/* Enable write cache */ +#define SETFEATURES_DIS_DEFECT	0x04	/* Disable Defect Management */ +#define SETFEATURES_EN_APM	0x05	/* Enable advanced power management */ +#define SETFEATURES_EN_SAME_R	0x22	/* for a region ATA-1 */ +#define SETFEATURES_DIS_MSN	0x31	/* Disable Media Status Notification */ +#define SETFEATURES_DIS_RETRY	0x33	/* Disable Retry */ +#define SETFEATURES_EN_AAM	0x42	/* Enable Automatic Acoustic Management */ +#define SETFEATURES_RW_LONG	0x44	/* Set Length of VS bytes */ +#define SETFEATURES_SET_CACHE	0x54	/* Set Cache segments to SC Reg. Val */ +#define SETFEATURES_DIS_RLA	0x55	/* Disable read look-ahead feature */ +#define SETFEATURES_EN_RI	0x5D	/* Enable release interrupt */ +#define SETFEATURES_EN_SI	0x5E	/* Enable SERVICE interrupt */ +#define SETFEATURES_DIS_RPOD	0x66	/* Disable reverting to power on defaults */ +#define SETFEATURES_DIS_ECC	0x77	/* Disable ECC byte count */ +#define SETFEATURES_DIS_8BIT	0x81	/* Disable 8-Bit Transfers */ +#define SETFEATURES_DIS_WCACHE	0x82	/* Disable write cache */ +#define SETFEATURES_EN_DEFECT	0x84	/* Enable Defect Management */ +#define SETFEATURES_DIS_APM	0x85	/* Disable advanced power management */ +#define SETFEATURES_EN_ECC	0x88	/* Enable ECC byte count */ +#define SETFEATURES_EN_MSN	0x95	/* Enable Media Status Notification */ +#define SETFEATURES_EN_RETRY	0x99	/* Enable Retry */ +#define SETFEATURES_EN_RLA	0xAA	/* Enable read look-ahead feature */ +#define SETFEATURES_PREFETCH	0xAB	/* Sets drive prefetch value */ +#define SETFEATURES_EN_REST	0xAC	/* ATA-1 */ +#define SETFEATURES_4B_RW_LONG	0xBB	/* Set Length of 4 bytes */ +#define SETFEATURES_DIS_AAM	0xC2	/* Disable Automatic Acoustic Management */ +#define SETFEATURES_EN_RPOD	0xCC	/* Enable reverting to power on defaults */ +#define SETFEATURES_DIS_RI	0xDD	/* Disable release interrupt ATAPI */ +#define SETFEATURES_EN_SAME_M	0xDD	/* for a entire device ATA-1 */ +#define SETFEATURES_DIS_SI	0xDE	/* Disable SERVICE interrupt ATAPI */ + +/* WIN_SECURITY sub-commands */ + +#define SECURITY_SET_PASSWORD		0xBA +#define SECURITY_UNLOCK			0xBB +#define SECURITY_ERASE_PREPARE		0xBC +#define SECURITY_ERASE_UNIT		0xBD +#define SECURITY_FREEZE_LOCK		0xBE +#define SECURITY_DISABLE_PASSWORD	0xBF +#endif /* __KERNEL__ */ + +struct hd_geometry { +      unsigned char heads; +      unsigned char sectors; +      unsigned short cylinders; +      unsigned long start; +}; + +/* hd/ide ctl's that pass (arg) ptrs to user space are numbered 0x030n/0x031n */ +#define HDIO_GETGEO		0x0301	/* get device geometry */ +#define HDIO_GET_UNMASKINTR	0x0302	/* get current unmask setting */ +#define HDIO_GET_MULTCOUNT	0x0304	/* get current IDE blockmode setting */ +#define HDIO_GET_QDMA		0x0305	/* get use-qdma flag */ + +#define HDIO_SET_XFER		0x0306  /* set transfer rate via proc */ + +#define HDIO_OBSOLETE_IDENTITY	0x0307	/* OBSOLETE, DO NOT USE: returns 142 bytes */ +#define HDIO_GET_KEEPSETTINGS	0x0308	/* get keep-settings-on-reset flag */ +#define HDIO_GET_32BIT		0x0309	/* get current io_32bit setting */ +#define HDIO_GET_NOWERR		0x030a	/* get ignore-write-error flag */ +#define HDIO_GET_DMA		0x030b	/* get use-dma flag */ +#define HDIO_GET_NICE		0x030c	/* get nice flags */ +#define HDIO_GET_IDENTITY	0x030d	/* get IDE identification info */ +#define HDIO_GET_WCACHE		0x030e	/* get write cache mode on|off */ +#define HDIO_GET_ACOUSTIC	0x030f	/* get acoustic value */ +#define	HDIO_GET_ADDRESS	0x0310	/* */ + +#define HDIO_GET_BUSSTATE	0x031a	/* get the bus state of the hwif */ +#define HDIO_TRISTATE_HWIF	0x031b	/* execute a channel tristate */ +#define HDIO_DRIVE_RESET	0x031c	/* execute a device reset */ +#define HDIO_DRIVE_TASKFILE	0x031d	/* execute raw taskfile */ +#define HDIO_DRIVE_TASK		0x031e	/* execute task and special drive command */ +#define HDIO_DRIVE_CMD		0x031f	/* execute a special drive command */ +#define HDIO_DRIVE_CMD_AEB	HDIO_DRIVE_TASK + +/* hd/ide ctl's that pass (arg) non-ptr values are numbered 0x032n/0x033n */ +#define HDIO_SET_MULTCOUNT	0x0321	/* change IDE blockmode */ +#define HDIO_SET_UNMASKINTR	0x0322	/* permit other irqs during I/O */ +#define HDIO_SET_KEEPSETTINGS	0x0323	/* keep ioctl settings on reset */ +#define HDIO_SET_32BIT		0x0324	/* change io_32bit flags */ +#define HDIO_SET_NOWERR		0x0325	/* change ignore-write-error flag */ +#define HDIO_SET_DMA		0x0326	/* change use-dma flag */ +#define HDIO_SET_PIO_MODE	0x0327	/* reconfig interface to new speed */ +#ifndef __KERNEL__ +#define HDIO_SCAN_HWIF		0x0328	/* register and (re)scan interface */ +#define HDIO_UNREGISTER_HWIF	0x032a  /* unregister interface */ +#endif +#define HDIO_SET_NICE		0x0329	/* set nice flags */ +#define HDIO_SET_WCACHE		0x032b	/* change write cache enable-disable */ +#define HDIO_SET_ACOUSTIC	0x032c	/* change acoustic behavior */ +#define HDIO_SET_BUSSTATE	0x032d	/* set the bus state of the hwif */ +#define HDIO_SET_QDMA		0x032e	/* change use-qdma flag */ +#define HDIO_SET_ADDRESS	0x032f	/* change lba addressing modes */ + +/* bus states */ +enum { +	BUSSTATE_OFF = 0, +	BUSSTATE_ON, +	BUSSTATE_TRISTATE +}; + +/* hd/ide ctl's that pass (arg) ptrs to user space are numbered 0x033n/0x033n */ +/* 0x330 is reserved - used to be HDIO_GETGEO_BIG */ +/* 0x331 is reserved - used to be HDIO_GETGEO_BIG_RAW */ +/* 0x338 is reserved - used to be HDIO_SET_IDE_SCSI */ +/* 0x339 is reserved - used to be HDIO_SET_SCSI_IDE */ + +#define __NEW_HD_DRIVE_ID + +#ifndef __KERNEL__ +/* + * Structure returned by HDIO_GET_IDENTITY, as per ANSI NCITS ATA6 rev.1b spec. + * + * If you change something here, please remember to update fix_driveid() in + * ide/probe.c. + */ +struct hd_driveid { +	unsigned short	config;		/* lots of obsolete bit flags */ +	unsigned short	cyls;		/* Obsolete, "physical" cyls */ +	unsigned short	reserved2;	/* reserved (word 2) */ +	unsigned short	heads;		/* Obsolete, "physical" heads */ +	unsigned short	track_bytes;	/* unformatted bytes per track */ +	unsigned short	sector_bytes;	/* unformatted bytes per sector */ +	unsigned short	sectors;	/* Obsolete, "physical" sectors per track */ +	unsigned short	vendor0;	/* vendor unique */ +	unsigned short	vendor1;	/* vendor unique */ +	unsigned short	vendor2;	/* Retired vendor unique */ +	unsigned char	serial_no[20];	/* 0 = not_specified */ +	unsigned short	buf_type;	/* Retired */ +	unsigned short	buf_size;	/* Retired, 512 byte increments +					 * 0 = not_specified +					 */ +	unsigned short	ecc_bytes;	/* for r/w long cmds; 0 = not_specified */ +	unsigned char	fw_rev[8];	/* 0 = not_specified */ +	unsigned char	model[40];	/* 0 = not_specified */ +	unsigned char	max_multsect;	/* 0=not_implemented */ +	unsigned char	vendor3;	/* vendor unique */ +	unsigned short	dword_io;	/* 0=not_implemented; 1=implemented */ +	unsigned char	vendor4;	/* vendor unique */ +	unsigned char	capability;	/* (upper byte of word 49) +					 *  3:	IORDYsup +					 *  2:	IORDYsw +					 *  1:	LBA +					 *  0:	DMA +					 */ +	unsigned short	reserved50;	/* reserved (word 50) */ +	unsigned char	vendor5;	/* Obsolete, vendor unique */ +	unsigned char	tPIO;		/* Obsolete, 0=slow, 1=medium, 2=fast */ +	unsigned char	vendor6;	/* Obsolete, vendor unique */ +	unsigned char	tDMA;		/* Obsolete, 0=slow, 1=medium, 2=fast */ +	unsigned short	field_valid;	/* (word 53) +					 *  2:	ultra_ok	word  88 +					 *  1:	eide_ok		words 64-70 +					 *  0:	cur_ok		words 54-58 +					 */ +	unsigned short	cur_cyls;	/* Obsolete, logical cylinders */ +	unsigned short	cur_heads;	/* Obsolete, l heads */ +	unsigned short	cur_sectors;	/* Obsolete, l sectors per track */ +	unsigned short	cur_capacity0;	/* Obsolete, l total sectors on drive */ +	unsigned short	cur_capacity1;	/* Obsolete, (2 words, misaligned int)     */ +	unsigned char	multsect;	/* current multiple sector count */ +	unsigned char	multsect_valid;	/* when (bit0==1) multsect is ok */ +	unsigned int	lba_capacity;	/* Obsolete, total number of sectors */ +	unsigned short	dma_1word;	/* Obsolete, single-word dma info */ +	unsigned short	dma_mword;	/* multiple-word dma info */ +	unsigned short  eide_pio_modes; /* bits 0:mode3 1:mode4 */ +	unsigned short  eide_dma_min;	/* min mword dma cycle time (ns) */ +	unsigned short  eide_dma_time;	/* recommended mword dma cycle time (ns) */ +	unsigned short  eide_pio;       /* min cycle time (ns), no IORDY  */ +	unsigned short  eide_pio_iordy; /* min cycle time (ns), with IORDY */ +	unsigned short	words69_70[2];	/* reserved words 69-70 +					 * future command overlap and queuing +					 */ +	unsigned short	words71_74[4];	/* reserved words 71-74 +					 * for IDENTIFY PACKET DEVICE command +					 */ +	unsigned short  queue_depth;	/* (word 75) +					 * 15:5	reserved +					 *  4:0	Maximum queue depth -1 +					 */ +	unsigned short  words76_79[4];	/* reserved words 76-79 */ +	unsigned short  major_rev_num;	/* (word 80) */ +	unsigned short  minor_rev_num;	/* (word 81) */ +	unsigned short  command_set_1;	/* (word 82) supported +					 * 15:	Obsolete +					 * 14:	NOP command +					 * 13:	READ_BUFFER +					 * 12:	WRITE_BUFFER +					 * 11:	Obsolete +					 * 10:	Host Protected Area +					 *  9:	DEVICE Reset +					 *  8:	SERVICE Interrupt +					 *  7:	Release Interrupt +					 *  6:	look-ahead +					 *  5:	write cache +					 *  4:	PACKET Command +					 *  3:	Power Management Feature Set +					 *  2:	Removable Feature Set +					 *  1:	Security Feature Set +					 *  0:	SMART Feature Set +					 */ +	unsigned short  command_set_2;	/* (word 83) +					 * 15:	Shall be ZERO +					 * 14:	Shall be ONE +					 * 13:	FLUSH CACHE EXT +					 * 12:	FLUSH CACHE +					 * 11:	Device Configuration Overlay +					 * 10:	48-bit Address Feature Set +					 *  9:	Automatic Acoustic Management +					 *  8:	SET MAX security +					 *  7:	reserved 1407DT PARTIES +					 *  6:	SetF sub-command Power-Up +					 *  5:	Power-Up in Standby Feature Set +					 *  4:	Removable Media Notification +					 *  3:	APM Feature Set +					 *  2:	CFA Feature Set +					 *  1:	READ/WRITE DMA QUEUED +					 *  0:	Download MicroCode +					 */ +	unsigned short  cfsse;		/* (word 84) +					 * cmd set-feature supported extensions +					 * 15:	Shall be ZERO +					 * 14:	Shall be ONE +					 * 13:6	reserved +					 *  5:	General Purpose Logging +					 *  4:	Streaming Feature Set +					 *  3:	Media Card Pass Through +					 *  2:	Media Serial Number Valid +					 *  1:	SMART selt-test supported +					 *  0:	SMART error logging +					 */ +	unsigned short  cfs_enable_1;	/* (word 85) +					 * command set-feature enabled +					 * 15:	Obsolete +					 * 14:	NOP command +					 * 13:	READ_BUFFER +					 * 12:	WRITE_BUFFER +					 * 11:	Obsolete +					 * 10:	Host Protected Area +					 *  9:	DEVICE Reset +					 *  8:	SERVICE Interrupt +					 *  7:	Release Interrupt +					 *  6:	look-ahead +					 *  5:	write cache +					 *  4:	PACKET Command +					 *  3:	Power Management Feature Set +					 *  2:	Removable Feature Set +					 *  1:	Security Feature Set +					 *  0:	SMART Feature Set +					 */ +	unsigned short  cfs_enable_2;	/* (word 86) +					 * command set-feature enabled +					 * 15:	Shall be ZERO +					 * 14:	Shall be ONE +					 * 13:	FLUSH CACHE EXT +					 * 12:	FLUSH CACHE +					 * 11:	Device Configuration Overlay +					 * 10:	48-bit Address Feature Set +					 *  9:	Automatic Acoustic Management +					 *  8:	SET MAX security +					 *  7:	reserved 1407DT PARTIES +					 *  6:	SetF sub-command Power-Up +					 *  5:	Power-Up in Standby Feature Set +					 *  4:	Removable Media Notification +					 *  3:	APM Feature Set +					 *  2:	CFA Feature Set +					 *  1:	READ/WRITE DMA QUEUED +					 *  0:	Download MicroCode +					 */ +	unsigned short  csf_default;	/* (word 87) +					 * command set-feature default +					 * 15:	Shall be ZERO +					 * 14:	Shall be ONE +					 * 13:6	reserved +					 *  5:	General Purpose Logging enabled +					 *  4:	Valid CONFIGURE STREAM executed +					 *  3:	Media Card Pass Through enabled +					 *  2:	Media Serial Number Valid +					 *  1:	SMART selt-test supported +					 *  0:	SMART error logging +					 */ +	unsigned short  dma_ultra;	/* (word 88) */ +	unsigned short	trseuc;		/* time required for security erase */ +	unsigned short	trsEuc;		/* time required for enhanced erase */ +	unsigned short	CurAPMvalues;	/* current APM values */ +	unsigned short	mprc;		/* master password revision code */ +	unsigned short	hw_config;	/* hardware config (word 93) +					 * 15:	Shall be ZERO +					 * 14:	Shall be ONE +					 * 13: +					 * 12: +					 * 11: +					 * 10: +					 *  9: +					 *  8: +					 *  7: +					 *  6: +					 *  5: +					 *  4: +					 *  3: +					 *  2: +					 *  1: +					 *  0:	Shall be ONE +					 */ +	unsigned short	acoustic;	/* (word 94) +					 * 15:8	Vendor's recommended value +					 *  7:0	current value +					 */ +	unsigned short	msrqs;		/* min stream request size */ +	unsigned short	sxfert;		/* stream transfer time */ +	unsigned short	sal;		/* stream access latency */ +	unsigned int	spg;		/* stream performance granularity */ +	unsigned long long lba_capacity_2;/* 48-bit total number of sectors */ +	unsigned short	words104_125[22];/* reserved words 104-125 */ +	unsigned short	last_lun;	/* (word 126) */ +	unsigned short	word127;	/* (word 127) Feature Set +					 * Removable Media Notification +					 * 15:2	reserved +					 *  1:0	00 = not supported +					 *	01 = supported +					 *	10 = reserved +					 *	11 = reserved +					 */ +	unsigned short	dlf;		/* (word 128) +					 * device lock function +					 * 15:9	reserved +					 *  8	security level 1:max 0:high +					 *  7:6	reserved +					 *  5	enhanced erase +					 *  4	expire +					 *  3	frozen +					 *  2	locked +					 *  1	en/disabled +					 *  0	capability +					 */ +	unsigned short  csfo;		/*  (word 129) +					 * current set features options +					 * 15:4	reserved +					 *  3:	auto reassign +					 *  2:	reverting +					 *  1:	read-look-ahead +					 *  0:	write cache +					 */ +	unsigned short	words130_155[26];/* reserved vendor words 130-155 */ +	unsigned short	word156;	/* reserved vendor word 156 */ +	unsigned short	words157_159[3];/* reserved vendor words 157-159 */ +	unsigned short	cfa_power;	/* (word 160) CFA Power Mode +					 * 15 word 160 supported +					 * 14 reserved +					 * 13 +					 * 12 +					 * 11:0 +					 */ +	unsigned short	words161_175[15];/* Reserved for CFA */ +	unsigned short	words176_205[30];/* Current Media Serial Number */ +	unsigned short	words206_254[49];/* reserved words 206-254 */ +	unsigned short	integrity_word;	/* (word 255) +					 * 15:8 Checksum +					 *  7:0 Signature +					 */ +}; +#endif /* __KERNEL__ */ + +/* + * IDE "nice" flags. These are used on a per drive basis to determine + * when to be nice and give more bandwidth to the other devices which + * share the same IDE bus. + */ +#define IDE_NICE_DSC_OVERLAP	(0)	/* per the DSC overlap protocol */ +#define IDE_NICE_ATAPI_OVERLAP	(1)	/* not supported yet */ +#define IDE_NICE_1		(3)	/* when probably won't affect us much */ +#ifndef __KERNEL__ +#define IDE_NICE_0		(2)	/* when sure that it won't affect us */ +#define IDE_NICE_2		(4)	/* when we know it's on our expense */ +#endif + +#endif	/* _LINUX_HDREG_H */ diff --git a/include/uapi/linux/hid.h b/include/uapi/linux/hid.h new file mode 100644 index 00000000000..b60f4842bd9 --- /dev/null +++ b/include/uapi/linux/hid.h @@ -0,0 +1,66 @@ +/* + *  Copyright (c) 1999 Andreas Gal + *  Copyright (c) 2000-2001 Vojtech Pavlik + *  Copyright (c) 2006-2007 Jiri Kosina + */ +/* + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Should you need to contact me, the author, you can do so either by + * e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail: + * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic + */ +#ifndef _UAPI__HID_H +#define _UAPI__HID_H + + + +/* + * USB HID (Human Interface Device) interface class code + */ + +#define USB_INTERFACE_CLASS_HID		3 + +/* + * USB HID interface subclass and protocol codes + */ + +#define USB_INTERFACE_SUBCLASS_BOOT	1 +#define USB_INTERFACE_PROTOCOL_KEYBOARD	1 +#define USB_INTERFACE_PROTOCOL_MOUSE	2 + +/* + * HID class requests + */ + +#define HID_REQ_GET_REPORT		0x01 +#define HID_REQ_GET_IDLE		0x02 +#define HID_REQ_GET_PROTOCOL		0x03 +#define HID_REQ_SET_REPORT		0x09 +#define HID_REQ_SET_IDLE		0x0A +#define HID_REQ_SET_PROTOCOL		0x0B + +/* + * HID class descriptor types + */ + +#define HID_DT_HID			(USB_TYPE_CLASS | 0x01) +#define HID_DT_REPORT			(USB_TYPE_CLASS | 0x02) +#define HID_DT_PHYSICAL			(USB_TYPE_CLASS | 0x03) + +#define HID_MAX_DESCRIPTOR_SIZE		4096 + + +#endif /* _UAPI__HID_H */ diff --git a/include/uapi/linux/hiddev.h b/include/uapi/linux/hiddev.h new file mode 100644 index 00000000000..7df7884bf5c --- /dev/null +++ b/include/uapi/linux/hiddev.h @@ -0,0 +1,212 @@ +/* + *  Copyright (c) 1999-2000 Vojtech Pavlik + * + *  Sponsored by SuSE + */ +/* + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + *  + * Should you need to contact me, the author, you can do so either by + * e-mail - mail your message to <vojtech@suse.cz>, or by paper mail: + * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic + */ +#ifndef _UAPI_HIDDEV_H +#define _UAPI_HIDDEV_H + + + +#include <linux/types.h> + +/* + * The event structure itself + */ + +struct hiddev_event { +	unsigned hid; +	signed int value; +}; + +struct hiddev_devinfo { +	__u32 bustype; +	__u32 busnum; +	__u32 devnum; +	__u32 ifnum; +	__s16 vendor; +	__s16 product; +	__s16 version; +	__u32 num_applications; +}; + +struct hiddev_collection_info { +	__u32 index; +	__u32 type; +	__u32 usage; +	__u32 level; +}; + +#define HID_STRING_SIZE 256 +struct hiddev_string_descriptor { +	__s32 index; +	char value[HID_STRING_SIZE]; +}; + +struct hiddev_report_info { +	__u32 report_type; +	__u32 report_id; +	__u32 num_fields; +}; + +/* To do a GUSAGE/SUSAGE, fill in at least usage_code,  report_type and  + * report_id.  Set report_id to REPORT_ID_UNKNOWN if the rest of the fields  + * are unknown.  Otherwise use a usage_ref struct filled in from a previous  + * successful GUSAGE call to save time.  To actually send a value to the + * device, perform a SUSAGE first, followed by a SREPORT.  An INITREPORT or a + * GREPORT isn't necessary for a GUSAGE to return valid data. + */ +#define HID_REPORT_ID_UNKNOWN 0xffffffff +#define HID_REPORT_ID_FIRST   0x00000100 +#define HID_REPORT_ID_NEXT    0x00000200 +#define HID_REPORT_ID_MASK    0x000000ff +#define HID_REPORT_ID_MAX     0x000000ff + +#define HID_REPORT_TYPE_INPUT	1 +#define HID_REPORT_TYPE_OUTPUT	2 +#define HID_REPORT_TYPE_FEATURE	3 +#define HID_REPORT_TYPE_MIN     1 +#define HID_REPORT_TYPE_MAX     3 + +struct hiddev_field_info { +	__u32 report_type; +	__u32 report_id; +	__u32 field_index; +	__u32 maxusage; +	__u32 flags; +	__u32 physical;		/* physical usage for this field */ +	__u32 logical;		/* logical usage for this field */ +	__u32 application;		/* application usage for this field */ +	__s32 logical_minimum; +	__s32 logical_maximum; +	__s32 physical_minimum; +	__s32 physical_maximum; +	__u32 unit_exponent; +	__u32 unit; +}; + +/* Fill in report_type, report_id and field_index to get the information on a + * field. + */ +#define HID_FIELD_CONSTANT		0x001 +#define HID_FIELD_VARIABLE		0x002 +#define HID_FIELD_RELATIVE		0x004 +#define HID_FIELD_WRAP			0x008	 +#define HID_FIELD_NONLINEAR		0x010 +#define HID_FIELD_NO_PREFERRED		0x020 +#define HID_FIELD_NULL_STATE		0x040 +#define HID_FIELD_VOLATILE		0x080 +#define HID_FIELD_BUFFERED_BYTE		0x100 + +struct hiddev_usage_ref { +	__u32 report_type; +	__u32 report_id; +	__u32 field_index; +	__u32 usage_index; +	__u32 usage_code; +	__s32 value; +}; + +/* hiddev_usage_ref_multi is used for sending multiple bytes to a control. + * It really manifests itself as setting the value of consecutive usages */ +#define HID_MAX_MULTI_USAGES 1024 +struct hiddev_usage_ref_multi { +	struct hiddev_usage_ref uref; +	__u32 num_values; +	__s32 values[HID_MAX_MULTI_USAGES]; +}; + +/* FIELD_INDEX_NONE is returned in read() data from the kernel when flags + * is set to (HIDDEV_FLAG_UREF | HIDDEV_FLAG_REPORT) and a new report has + * been sent by the device  + */ +#define HID_FIELD_INDEX_NONE 0xffffffff + +/* + * Protocol version. + */ + +#define HID_VERSION		0x010004 + +/* + * IOCTLs (0x00 - 0x7f) + */ + +#define HIDIOCGVERSION		_IOR('H', 0x01, int) +#define HIDIOCAPPLICATION	_IO('H', 0x02) +#define HIDIOCGDEVINFO		_IOR('H', 0x03, struct hiddev_devinfo) +#define HIDIOCGSTRING		_IOR('H', 0x04, struct hiddev_string_descriptor) +#define HIDIOCINITREPORT	_IO('H', 0x05) +#define HIDIOCGNAME(len)	_IOC(_IOC_READ, 'H', 0x06, len) +#define HIDIOCGREPORT		_IOW('H', 0x07, struct hiddev_report_info) +#define HIDIOCSREPORT		_IOW('H', 0x08, struct hiddev_report_info) +#define HIDIOCGREPORTINFO	_IOWR('H', 0x09, struct hiddev_report_info) +#define HIDIOCGFIELDINFO	_IOWR('H', 0x0A, struct hiddev_field_info) +#define HIDIOCGUSAGE		_IOWR('H', 0x0B, struct hiddev_usage_ref) +#define HIDIOCSUSAGE		_IOW('H', 0x0C, struct hiddev_usage_ref) +#define HIDIOCGUCODE		_IOWR('H', 0x0D, struct hiddev_usage_ref) +#define HIDIOCGFLAG		_IOR('H', 0x0E, int) +#define HIDIOCSFLAG		_IOW('H', 0x0F, int) +#define HIDIOCGCOLLECTIONINDEX	_IOW('H', 0x10, struct hiddev_usage_ref) +#define HIDIOCGCOLLECTIONINFO	_IOWR('H', 0x11, struct hiddev_collection_info) +#define HIDIOCGPHYS(len)	_IOC(_IOC_READ, 'H', 0x12, len) + +/* For writing/reading to multiple/consecutive usages */ +#define HIDIOCGUSAGES		_IOWR('H', 0x13, struct hiddev_usage_ref_multi) +#define HIDIOCSUSAGES		_IOW('H', 0x14, struct hiddev_usage_ref_multi) + +/*  + * Flags to be used in HIDIOCSFLAG + */ +#define HIDDEV_FLAG_UREF	0x1 +#define HIDDEV_FLAG_REPORT	0x2 +#define HIDDEV_FLAGS		0x3 + +/* To traverse the input report descriptor info for a HID device, perform the  + * following: + * + * rinfo.report_type = HID_REPORT_TYPE_INPUT; + * rinfo.report_id = HID_REPORT_ID_FIRST; + * ret = ioctl(fd, HIDIOCGREPORTINFO, &rinfo); + * + * while (ret >= 0) { + * 	for (i = 0; i < rinfo.num_fields; i++) { + * 		finfo.report_type = rinfo.report_type; + * 		finfo.report_id = rinfo.report_id; + * 		finfo.field_index = i; + * 		ioctl(fd, HIDIOCGFIELDINFO, &finfo); + * 		for (j = 0; j < finfo.maxusage; j++) { + * 			uref.report_type = rinfo.report_type; + * 			uref.report_id = rinfo.report_id; + * 			uref.field_index = i; + * 			uref.usage_index = j; + * 			ioctl(fd, HIDIOCGUCODE, &uref); + * 			ioctl(fd, HIDIOCGUSAGE, &uref); + * 		} + * 	} + * 	rinfo.report_id |= HID_REPORT_ID_NEXT; + * 	ret = ioctl(fd, HIDIOCGREPORTINFO, &rinfo); + * } + */ + + +#endif /* _UAPI_HIDDEV_H */ diff --git a/include/uapi/linux/hidraw.h b/include/uapi/linux/hidraw.h new file mode 100644 index 00000000000..f5b732979a7 --- /dev/null +++ b/include/uapi/linux/hidraw.h @@ -0,0 +1,50 @@ +/* + *  Copyright (c) 2007 Jiri Kosina + */ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * 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., + * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + */ +#ifndef _UAPI_HIDRAW_H +#define _UAPI_HIDRAW_H + + + +#include <linux/hid.h> +#include <linux/types.h> + +struct hidraw_report_descriptor { +	__u32 size; +	__u8 value[HID_MAX_DESCRIPTOR_SIZE]; +}; + +struct hidraw_devinfo { +	__u32 bustype; +	__s16 vendor; +	__s16 product; +}; + +/* ioctl interface */ +#define HIDIOCGRDESCSIZE	_IOR('H', 0x01, int) +#define HIDIOCGRDESC		_IOR('H', 0x02, struct hidraw_report_descriptor) +#define HIDIOCGRAWINFO		_IOR('H', 0x03, struct hidraw_devinfo) +#define HIDIOCGRAWNAME(len)     _IOC(_IOC_READ, 'H', 0x04, len) +#define HIDIOCGRAWPHYS(len)     _IOC(_IOC_READ, 'H', 0x05, len) +/* The first byte of SFEATURE and GFEATURE is the report number */ +#define HIDIOCSFEATURE(len)    _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x06, len) +#define HIDIOCGFEATURE(len)    _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x07, len) + +#define HIDRAW_FIRST_MINOR 0 +#define HIDRAW_MAX_DEVICES 64 +/* number of reports to buffer */ +#define HIDRAW_BUFFER_SIZE 64 + + +/* kernel-only API declarations */ + +#endif /* _UAPI_HIDRAW_H */ diff --git a/include/uapi/linux/hpet.h b/include/uapi/linux/hpet.h new file mode 100644 index 00000000000..8af3c70abc8 --- /dev/null +++ b/include/uapi/linux/hpet.h @@ -0,0 +1,25 @@ +#ifndef _UAPI__HPET__ +#define _UAPI__HPET__ + +#include <linux/compiler.h> + + +struct hpet_info { +	unsigned long hi_ireqfreq;	/* Hz */ +	unsigned long hi_flags;	/* information */ +	unsigned short hi_hpet; +	unsigned short hi_timer; +}; + +#define HPET_INFO_PERIODIC	0x0010	/* periodic-capable comparator */ + +#define	HPET_IE_ON	_IO('h', 0x01)	/* interrupt on */ +#define	HPET_IE_OFF	_IO('h', 0x02)	/* interrupt off */ +#define	HPET_INFO	_IOR('h', 0x03, struct hpet_info) +#define	HPET_EPI	_IO('h', 0x04)	/* enable periodic */ +#define	HPET_DPI	_IO('h', 0x05)	/* disable periodic */ +#define	HPET_IRQFREQ	_IOW('h', 0x6, unsigned long)	/* IRQFREQ usec */ + +#define MAX_HPET_TBS	8		/* maximum hpet timer blocks */ + +#endif /* _UAPI__HPET__ */ diff --git a/include/uapi/linux/hysdn_if.h b/include/uapi/linux/hysdn_if.h new file mode 100644 index 00000000000..00236ae3b04 --- /dev/null +++ b/include/uapi/linux/hysdn_if.h @@ -0,0 +1,33 @@ +/* $Id: hysdn_if.h,v 1.1.8.3 2001/09/23 22:25:05 kai Exp $ + * + * Linux driver for HYSDN cards + * ioctl definitions shared by hynetmgr and driver. + * + * Author    Werner Cornelius (werner@titro.de) for Hypercope GmbH + * Copyright 1999 by Werner Cornelius (werner@titro.de) + * + * This software may be used and distributed according to the terms + * of the GNU General Public License, incorporated herein by reference. + * + */ + +/****************/ +/* error values */ +/****************/ +#define ERR_NONE             0 /* no error occurred */ +#define ERR_ALREADY_BOOT  1000 /* we are already booting */ +#define EPOF_BAD_MAGIC    1001 /* bad magic in POF header */ +#define ERR_BOARD_DPRAM   1002 /* board DPRAM failed */ +#define EPOF_INTERNAL     1003 /* internal POF handler error */ +#define EPOF_BAD_IMG_SIZE 1004 /* POF boot image size invalid */ +#define ERR_BOOTIMG_FAIL  1005 /* 1. stage boot image did not start */ +#define ERR_BOOTSEQ_FAIL  1006 /* 2. stage boot seq handshake timeout */ +#define ERR_POF_TIMEOUT   1007 /* timeout waiting for card pof ready */ +#define ERR_NOT_BOOTED    1008 /* operation only allowed when booted */ +#define ERR_CONF_LONG     1009 /* conf line is too long */  +#define ERR_INV_CHAN      1010 /* invalid channel number */  +#define ERR_ASYNC_TIME    1011 /* timeout sending async data */  + + + + diff --git a/include/uapi/linux/i2c-dev.h b/include/uapi/linux/i2c-dev.h new file mode 100644 index 00000000000..3f311551795 --- /dev/null +++ b/include/uapi/linux/i2c-dev.h @@ -0,0 +1,72 @@ +/* +    i2c-dev.h - i2c-bus driver, char device interface + +    Copyright (C) 1995-97 Simon G. Vogl +    Copyright (C) 1998-99 Frodo Looijaard <frodol@dds.nl> + +    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., 51 Franklin Street, Fifth Floor, Boston, +    MA 02110-1301 USA. +*/ + +#ifndef _UAPI_LINUX_I2C_DEV_H +#define _UAPI_LINUX_I2C_DEV_H + +#include <linux/types.h> +#include <linux/compiler.h> + +/* /dev/i2c-X ioctl commands.  The ioctl's parameter is always an + * unsigned long, except for: + *	- I2C_FUNCS, takes pointer to an unsigned long + *	- I2C_RDWR, takes pointer to struct i2c_rdwr_ioctl_data + *	- I2C_SMBUS, takes pointer to struct i2c_smbus_ioctl_data + */ +#define I2C_RETRIES	0x0701	/* number of times a device address should +				   be polled when not acknowledging */ +#define I2C_TIMEOUT	0x0702	/* set timeout in units of 10 ms */ + +/* NOTE: Slave address is 7 or 10 bits, but 10-bit addresses + * are NOT supported! (due to code brokenness) + */ +#define I2C_SLAVE	0x0703	/* Use this slave address */ +#define I2C_SLAVE_FORCE	0x0706	/* Use this slave address, even if it +				   is already in use by a driver! */ +#define I2C_TENBIT	0x0704	/* 0 for 7 bit addrs, != 0 for 10 bit */ + +#define I2C_FUNCS	0x0705	/* Get the adapter functionality mask */ + +#define I2C_RDWR	0x0707	/* Combined R/W transfer (one STOP only) */ + +#define I2C_PEC		0x0708	/* != 0 to use PEC with SMBus */ +#define I2C_SMBUS	0x0720	/* SMBus transfer */ + + +/* This is the structure as used in the I2C_SMBUS ioctl call */ +struct i2c_smbus_ioctl_data { +	__u8 read_write; +	__u8 command; +	__u32 size; +	union i2c_smbus_data __user *data; +}; + +/* This is the structure as used in the I2C_RDWR ioctl call */ +struct i2c_rdwr_ioctl_data { +	struct i2c_msg __user *msgs;	/* pointers to i2c_msgs */ +	__u32 nmsgs;			/* number of i2c_msgs */ +}; + +#define  I2C_RDRW_IOCTL_MAX_MSGS	42 + + +#endif /* _UAPI_LINUX_I2C_DEV_H */ diff --git a/include/uapi/linux/i2c.h b/include/uapi/linux/i2c.h new file mode 100644 index 00000000000..0e949cbfd33 --- /dev/null +++ b/include/uapi/linux/i2c.h @@ -0,0 +1,151 @@ +/* ------------------------------------------------------------------------- */ +/*									     */ +/* i2c.h - definitions for the i2c-bus interface			     */ +/*									     */ +/* ------------------------------------------------------------------------- */ +/*   Copyright (C) 1995-2000 Simon G. Vogl + +    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., 51 Franklin Street, Fifth Floor, Boston, +    MA 02110-1301 USA.							     */ +/* ------------------------------------------------------------------------- */ + +/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and +   Frodo Looijaard <frodol@dds.nl> */ + +#ifndef _UAPI_LINUX_I2C_H +#define _UAPI_LINUX_I2C_H + +#include <linux/types.h> + +/** + * struct i2c_msg - an I2C transaction segment beginning with START + * @addr: Slave address, either seven or ten bits.  When this is a ten + *	bit address, I2C_M_TEN must be set in @flags and the adapter + *	must support I2C_FUNC_10BIT_ADDR. + * @flags: I2C_M_RD is handled by all adapters.  No other flags may be + *	provided unless the adapter exported the relevant I2C_FUNC_* + *	flags through i2c_check_functionality(). + * @len: Number of data bytes in @buf being read from or written to the + *	I2C slave address.  For read transactions where I2C_M_RECV_LEN + *	is set, the caller guarantees that this buffer can hold up to + *	32 bytes in addition to the initial length byte sent by the + *	slave (plus, if used, the SMBus PEC); and this value will be + *	incremented by the number of block data bytes received. + * @buf: The buffer into which data is read, or from which it's written. + * + * An i2c_msg is the low level representation of one segment of an I2C + * transaction.  It is visible to drivers in the @i2c_transfer() procedure, + * to userspace from i2c-dev, and to I2C adapter drivers through the + * @i2c_adapter.@master_xfer() method. + * + * Except when I2C "protocol mangling" is used, all I2C adapters implement + * the standard rules for I2C transactions.  Each transaction begins with a + * START.  That is followed by the slave address, and a bit encoding read + * versus write.  Then follow all the data bytes, possibly including a byte + * with SMBus PEC.  The transfer terminates with a NAK, or when all those + * bytes have been transferred and ACKed.  If this is the last message in a + * group, it is followed by a STOP.  Otherwise it is followed by the next + * @i2c_msg transaction segment, beginning with a (repeated) START. + * + * Alternatively, when the adapter supports I2C_FUNC_PROTOCOL_MANGLING then + * passing certain @flags may have changed those standard protocol behaviors. + * Those flags are only for use with broken/nonconforming slaves, and with + * adapters which are known to support the specific mangling options they + * need (one or more of IGNORE_NAK, NO_RD_ACK, NOSTART, and REV_DIR_ADDR). + */ +struct i2c_msg { +	__u16 addr;	/* slave address			*/ +	__u16 flags; +#define I2C_M_TEN		0x0010	/* this is a ten bit chip address */ +#define I2C_M_RD		0x0001	/* read data, from slave to master */ +#define I2C_M_STOP		0x8000	/* if I2C_FUNC_PROTOCOL_MANGLING */ +#define I2C_M_NOSTART		0x4000	/* if I2C_FUNC_NOSTART */ +#define I2C_M_REV_DIR_ADDR	0x2000	/* if I2C_FUNC_PROTOCOL_MANGLING */ +#define I2C_M_IGNORE_NAK	0x1000	/* if I2C_FUNC_PROTOCOL_MANGLING */ +#define I2C_M_NO_RD_ACK		0x0800	/* if I2C_FUNC_PROTOCOL_MANGLING */ +#define I2C_M_RECV_LEN		0x0400	/* length will be first received byte */ +	__u16 len;		/* msg length				*/ +	__u8 *buf;		/* pointer to msg data			*/ +}; + +/* To determine what functionality is present */ + +#define I2C_FUNC_I2C			0x00000001 +#define I2C_FUNC_10BIT_ADDR		0x00000002 +#define I2C_FUNC_PROTOCOL_MANGLING	0x00000004 /* I2C_M_IGNORE_NAK etc. */ +#define I2C_FUNC_SMBUS_PEC		0x00000008 +#define I2C_FUNC_NOSTART		0x00000010 /* I2C_M_NOSTART */ +#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL	0x00008000 /* SMBus 2.0 */ +#define I2C_FUNC_SMBUS_QUICK		0x00010000 +#define I2C_FUNC_SMBUS_READ_BYTE	0x00020000 +#define I2C_FUNC_SMBUS_WRITE_BYTE	0x00040000 +#define I2C_FUNC_SMBUS_READ_BYTE_DATA	0x00080000 +#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA	0x00100000 +#define I2C_FUNC_SMBUS_READ_WORD_DATA	0x00200000 +#define I2C_FUNC_SMBUS_WRITE_WORD_DATA	0x00400000 +#define I2C_FUNC_SMBUS_PROC_CALL	0x00800000 +#define I2C_FUNC_SMBUS_READ_BLOCK_DATA	0x01000000 +#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000 +#define I2C_FUNC_SMBUS_READ_I2C_BLOCK	0x04000000 /* I2C-like block xfer  */ +#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK	0x08000000 /* w/ 1-byte reg. addr. */ + +#define I2C_FUNC_SMBUS_BYTE		(I2C_FUNC_SMBUS_READ_BYTE | \ +					 I2C_FUNC_SMBUS_WRITE_BYTE) +#define I2C_FUNC_SMBUS_BYTE_DATA	(I2C_FUNC_SMBUS_READ_BYTE_DATA | \ +					 I2C_FUNC_SMBUS_WRITE_BYTE_DATA) +#define I2C_FUNC_SMBUS_WORD_DATA	(I2C_FUNC_SMBUS_READ_WORD_DATA | \ +					 I2C_FUNC_SMBUS_WRITE_WORD_DATA) +#define I2C_FUNC_SMBUS_BLOCK_DATA	(I2C_FUNC_SMBUS_READ_BLOCK_DATA | \ +					 I2C_FUNC_SMBUS_WRITE_BLOCK_DATA) +#define I2C_FUNC_SMBUS_I2C_BLOCK	(I2C_FUNC_SMBUS_READ_I2C_BLOCK | \ +					 I2C_FUNC_SMBUS_WRITE_I2C_BLOCK) + +#define I2C_FUNC_SMBUS_EMUL		(I2C_FUNC_SMBUS_QUICK | \ +					 I2C_FUNC_SMBUS_BYTE | \ +					 I2C_FUNC_SMBUS_BYTE_DATA | \ +					 I2C_FUNC_SMBUS_WORD_DATA | \ +					 I2C_FUNC_SMBUS_PROC_CALL | \ +					 I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \ +					 I2C_FUNC_SMBUS_I2C_BLOCK | \ +					 I2C_FUNC_SMBUS_PEC) + +/* + * Data for SMBus Messages + */ +#define I2C_SMBUS_BLOCK_MAX	32	/* As specified in SMBus standard */ +union i2c_smbus_data { +	__u8 byte; +	__u16 word; +	__u8 block[I2C_SMBUS_BLOCK_MAX + 2]; /* block[0] is used for length */ +			       /* and one more for user-space compatibility */ +}; + +/* i2c_smbus_xfer read or write markers */ +#define I2C_SMBUS_READ	1 +#define I2C_SMBUS_WRITE	0 + +/* SMBus transaction types (size parameter in the above functions) +   Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */ +#define I2C_SMBUS_QUICK		    0 +#define I2C_SMBUS_BYTE		    1 +#define I2C_SMBUS_BYTE_DATA	    2 +#define I2C_SMBUS_WORD_DATA	    3 +#define I2C_SMBUS_PROC_CALL	    4 +#define I2C_SMBUS_BLOCK_DATA	    5 +#define I2C_SMBUS_I2C_BLOCK_BROKEN  6 +#define I2C_SMBUS_BLOCK_PROC_CALL   7		/* SMBus 2.0 */ +#define I2C_SMBUS_I2C_BLOCK_DATA    8 + +#endif /* _UAPI_LINUX_I2C_H */ diff --git a/include/uapi/linux/i2o-dev.h b/include/uapi/linux/i2o-dev.h new file mode 100644 index 00000000000..a8093bfec3a --- /dev/null +++ b/include/uapi/linux/i2o-dev.h @@ -0,0 +1,421 @@ +/* + * I2O user space accessible structures/APIs + * + * (c) Copyright 1999, 2000 Red Hat Software + * + * 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 header file defines the I2O APIs that are available to both + * the kernel and user level applications.  Kernel specific structures + * are defined in i2o_osm. OSMs should include _only_ i2o_osm.h which + * automatically includes this file. + * + */ + +#ifndef _I2O_DEV_H +#define _I2O_DEV_H + +/* How many controllers are we allowing */ +#define MAX_I2O_CONTROLLERS	32 + +#include <linux/ioctl.h> +#include <linux/types.h> + +/* + * I2O Control IOCTLs and structures + */ +#define I2O_MAGIC_NUMBER	'i' +#define I2OGETIOPS		_IOR(I2O_MAGIC_NUMBER,0,__u8[MAX_I2O_CONTROLLERS]) +#define I2OHRTGET		_IOWR(I2O_MAGIC_NUMBER,1,struct i2o_cmd_hrtlct) +#define I2OLCTGET		_IOWR(I2O_MAGIC_NUMBER,2,struct i2o_cmd_hrtlct) +#define I2OPARMSET		_IOWR(I2O_MAGIC_NUMBER,3,struct i2o_cmd_psetget) +#define I2OPARMGET		_IOWR(I2O_MAGIC_NUMBER,4,struct i2o_cmd_psetget) +#define I2OSWDL 		_IOWR(I2O_MAGIC_NUMBER,5,struct i2o_sw_xfer) +#define I2OSWUL 		_IOWR(I2O_MAGIC_NUMBER,6,struct i2o_sw_xfer) +#define I2OSWDEL		_IOWR(I2O_MAGIC_NUMBER,7,struct i2o_sw_xfer) +#define I2OVALIDATE		_IOR(I2O_MAGIC_NUMBER,8,__u32) +#define I2OHTML 		_IOWR(I2O_MAGIC_NUMBER,9,struct i2o_html) +#define I2OEVTREG		_IOW(I2O_MAGIC_NUMBER,10,struct i2o_evt_id) +#define I2OEVTGET		_IOR(I2O_MAGIC_NUMBER,11,struct i2o_evt_info) +#define I2OPASSTHRU		_IOR(I2O_MAGIC_NUMBER,12,struct i2o_cmd_passthru) +#define I2OPASSTHRU32		_IOR(I2O_MAGIC_NUMBER,12,struct i2o_cmd_passthru32) + +struct i2o_cmd_passthru32 { +	unsigned int iop;	/* IOP unit number */ +	__u32 msg;		/* message */ +}; + +struct i2o_cmd_passthru { +	unsigned int iop;	/* IOP unit number */ +	void __user *msg;	/* message */ +}; + +struct i2o_cmd_hrtlct { +	unsigned int iop;	/* IOP unit number */ +	void __user *resbuf;	/* Buffer for result */ +	unsigned int __user *reslen;	/* Buffer length in bytes */ +}; + +struct i2o_cmd_psetget { +	unsigned int iop;	/* IOP unit number */ +	unsigned int tid;	/* Target device TID */ +	void __user *opbuf;	/* Operation List buffer */ +	unsigned int oplen;	/* Operation List buffer length in bytes */ +	void __user *resbuf;	/* Result List buffer */ +	unsigned int __user *reslen;	/* Result List buffer length in bytes */ +}; + +struct i2o_sw_xfer { +	unsigned int iop;	/* IOP unit number */ +	unsigned char flags;	/* Flags field */ +	unsigned char sw_type;	/* Software type */ +	unsigned int sw_id;	/* Software ID */ +	void __user *buf;	/* Pointer to software buffer */ +	unsigned int __user *swlen;	/* Length of software data */ +	unsigned int __user *maxfrag;	/* Maximum fragment count */ +	unsigned int __user *curfrag;	/* Current fragment count */ +}; + +struct i2o_html { +	unsigned int iop;	/* IOP unit number */ +	unsigned int tid;	/* Target device ID */ +	unsigned int page;	/* HTML page */ +	void __user *resbuf;	/* Buffer for reply HTML page */ +	unsigned int __user *reslen;	/* Length in bytes of reply buffer */ +	void __user *qbuf;	/* Pointer to HTTP query string */ +	unsigned int qlen;	/* Length in bytes of query string buffer */ +}; + +#define I2O_EVT_Q_LEN 32 + +struct i2o_evt_id { +	unsigned int iop; +	unsigned int tid; +	unsigned int evt_mask; +}; + +/* Event data size = frame size - message header + evt indicator */ +#define I2O_EVT_DATA_SIZE 88 + +struct i2o_evt_info { +	struct i2o_evt_id id; +	unsigned char evt_data[I2O_EVT_DATA_SIZE]; +	unsigned int data_size; +}; + +struct i2o_evt_get { +	struct i2o_evt_info info; +	int pending; +	int lost; +}; + +typedef struct i2o_sg_io_hdr { +	unsigned int flags;	/* see I2O_DPT_SG_IO_FLAGS */ +} i2o_sg_io_hdr_t; + +/************************************************************************** + * HRT related constants and structures + **************************************************************************/ +#define I2O_BUS_LOCAL	0 +#define I2O_BUS_ISA	1 +#define I2O_BUS_EISA	2 +/* was  I2O_BUS_MCA	3 */ +#define I2O_BUS_PCI	4 +#define I2O_BUS_PCMCIA	5 +#define I2O_BUS_NUBUS	6 +#define I2O_BUS_CARDBUS 7 +#define I2O_BUS_UNKNOWN 0x80 + +typedef struct _i2o_pci_bus { +	__u8 PciFunctionNumber; +	__u8 PciDeviceNumber; +	__u8 PciBusNumber; +	__u8 reserved; +	__u16 PciVendorID; +	__u16 PciDeviceID; +} i2o_pci_bus; + +typedef struct _i2o_local_bus { +	__u16 LbBaseIOPort; +	__u16 reserved; +	__u32 LbBaseMemoryAddress; +} i2o_local_bus; + +typedef struct _i2o_isa_bus { +	__u16 IsaBaseIOPort; +	__u8 CSN; +	__u8 reserved; +	__u32 IsaBaseMemoryAddress; +} i2o_isa_bus; + +typedef struct _i2o_eisa_bus_info { +	__u16 EisaBaseIOPort; +	__u8 reserved; +	__u8 EisaSlotNumber; +	__u32 EisaBaseMemoryAddress; +} i2o_eisa_bus; + +typedef struct _i2o_mca_bus { +	__u16 McaBaseIOPort; +	__u8 reserved; +	__u8 McaSlotNumber; +	__u32 McaBaseMemoryAddress; +} i2o_mca_bus; + +typedef struct _i2o_other_bus { +	__u16 BaseIOPort; +	__u16 reserved; +	__u32 BaseMemoryAddress; +} i2o_other_bus; + +typedef struct _i2o_hrt_entry { +	__u32 adapter_id; +	__u32 parent_tid:12; +	__u32 state:4; +	__u32 bus_num:8; +	__u32 bus_type:8; +	union { +		i2o_pci_bus pci_bus; +		i2o_local_bus local_bus; +		i2o_isa_bus isa_bus; +		i2o_eisa_bus eisa_bus; +		i2o_mca_bus mca_bus; +		i2o_other_bus other_bus; +	} bus; +} i2o_hrt_entry; + +typedef struct _i2o_hrt { +	__u16 num_entries; +	__u8 entry_len; +	__u8 hrt_version; +	__u32 change_ind; +	i2o_hrt_entry hrt_entry[1]; +} i2o_hrt; + +typedef struct _i2o_lct_entry { +	__u32 entry_size:16; +	__u32 tid:12; +	__u32 reserved:4; +	__u32 change_ind; +	__u32 device_flags; +	__u32 class_id:12; +	__u32 version:4; +	__u32 vendor_id:16; +	__u32 sub_class; +	__u32 user_tid:12; +	__u32 parent_tid:12; +	__u32 bios_info:8; +	__u8 identity_tag[8]; +	__u32 event_capabilities; +} i2o_lct_entry; + +typedef struct _i2o_lct { +	__u32 table_size:16; +	__u32 boot_tid:12; +	__u32 lct_ver:4; +	__u32 iop_flags; +	__u32 change_ind; +	i2o_lct_entry lct_entry[1]; +} i2o_lct; + +typedef struct _i2o_status_block { +	__u16 org_id; +	__u16 reserved; +	__u16 iop_id:12; +	__u16 reserved1:4; +	__u16 host_unit_id; +	__u16 segment_number:12; +	__u16 i2o_version:4; +	__u8 iop_state; +	__u8 msg_type; +	__u16 inbound_frame_size; +	__u8 init_code; +	__u8 reserved2; +	__u32 max_inbound_frames; +	__u32 cur_inbound_frames; +	__u32 max_outbound_frames; +	char product_id[24]; +	__u32 expected_lct_size; +	__u32 iop_capabilities; +	__u32 desired_mem_size; +	__u32 current_mem_size; +	__u32 current_mem_base; +	__u32 desired_io_size; +	__u32 current_io_size; +	__u32 current_io_base; +	__u32 reserved3:24; +	__u32 cmd_status:8; +} i2o_status_block; + +/* Event indicator mask flags */ +#define I2O_EVT_IND_STATE_CHANGE		0x80000000 +#define I2O_EVT_IND_GENERAL_WARNING		0x40000000 +#define I2O_EVT_IND_CONFIGURATION_FLAG		0x20000000 +#define I2O_EVT_IND_LOCK_RELEASE		0x10000000 +#define I2O_EVT_IND_CAPABILITY_CHANGE		0x08000000 +#define I2O_EVT_IND_DEVICE_RESET		0x04000000 +#define I2O_EVT_IND_EVT_MASK_MODIFIED		0x02000000 +#define I2O_EVT_IND_FIELD_MODIFIED		0x01000000 +#define I2O_EVT_IND_VENDOR_EVT			0x00800000 +#define I2O_EVT_IND_DEVICE_STATE		0x00400000 + +/* Executive event indicitors */ +#define I2O_EVT_IND_EXEC_RESOURCE_LIMITS	0x00000001 +#define I2O_EVT_IND_EXEC_CONNECTION_FAIL	0x00000002 +#define I2O_EVT_IND_EXEC_ADAPTER_FAULT		0x00000004 +#define I2O_EVT_IND_EXEC_POWER_FAIL		0x00000008 +#define I2O_EVT_IND_EXEC_RESET_PENDING		0x00000010 +#define I2O_EVT_IND_EXEC_RESET_IMMINENT 	0x00000020 +#define I2O_EVT_IND_EXEC_HW_FAIL		0x00000040 +#define I2O_EVT_IND_EXEC_XCT_CHANGE		0x00000080 +#define I2O_EVT_IND_EXEC_NEW_LCT_ENTRY		0x00000100 +#define I2O_EVT_IND_EXEC_MODIFIED_LCT		0x00000200 +#define I2O_EVT_IND_EXEC_DDM_AVAILABILITY	0x00000400 + +/* Random Block Storage Event Indicators */ +#define I2O_EVT_IND_BSA_VOLUME_LOAD		0x00000001 +#define I2O_EVT_IND_BSA_VOLUME_UNLOAD		0x00000002 +#define I2O_EVT_IND_BSA_VOLUME_UNLOAD_REQ	0x00000004 +#define I2O_EVT_IND_BSA_CAPACITY_CHANGE 	0x00000008 +#define I2O_EVT_IND_BSA_SCSI_SMART		0x00000010 + +/* Event data for generic events */ +#define I2O_EVT_STATE_CHANGE_NORMAL		0x00 +#define I2O_EVT_STATE_CHANGE_SUSPENDED		0x01 +#define I2O_EVT_STATE_CHANGE_RESTART		0x02 +#define I2O_EVT_STATE_CHANGE_NA_RECOVER 	0x03 +#define I2O_EVT_STATE_CHANGE_NA_NO_RECOVER	0x04 +#define I2O_EVT_STATE_CHANGE_QUIESCE_REQUEST	0x05 +#define I2O_EVT_STATE_CHANGE_FAILED		0x10 +#define I2O_EVT_STATE_CHANGE_FAULTED		0x11 + +#define I2O_EVT_GEN_WARNING_NORMAL		0x00 +#define I2O_EVT_GEN_WARNING_ERROR_THRESHOLD	0x01 +#define I2O_EVT_GEN_WARNING_MEDIA_FAULT 	0x02 + +#define I2O_EVT_CAPABILITY_OTHER		0x01 +#define I2O_EVT_CAPABILITY_CHANGED		0x02 + +#define I2O_EVT_SENSOR_STATE_CHANGED		0x01 + +/* + *	I2O classes / subclasses + */ + +/*  Class ID and Code Assignments + *  (LCT.ClassID.Version field) + */ +#define I2O_CLASS_VERSION_10			0x00 +#define I2O_CLASS_VERSION_11			0x01 + +/*  Class code names + *  (from v1.5 Table 6-1 Class Code Assignments.) + */ + +#define I2O_CLASS_EXECUTIVE			0x000 +#define I2O_CLASS_DDM				0x001 +#define I2O_CLASS_RANDOM_BLOCK_STORAGE		0x010 +#define I2O_CLASS_SEQUENTIAL_STORAGE		0x011 +#define I2O_CLASS_LAN				0x020 +#define I2O_CLASS_WAN				0x030 +#define I2O_CLASS_FIBRE_CHANNEL_PORT		0x040 +#define I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL	0x041 +#define I2O_CLASS_SCSI_PERIPHERAL		0x051 +#define I2O_CLASS_ATE_PORT			0x060 +#define I2O_CLASS_ATE_PERIPHERAL		0x061 +#define I2O_CLASS_FLOPPY_CONTROLLER		0x070 +#define I2O_CLASS_FLOPPY_DEVICE 		0x071 +#define I2O_CLASS_BUS_ADAPTER			0x080 +#define I2O_CLASS_PEER_TRANSPORT_AGENT		0x090 +#define I2O_CLASS_PEER_TRANSPORT		0x091 +#define	I2O_CLASS_END				0xfff + +/* + *  Rest of 0x092 - 0x09f reserved for peer-to-peer classes + */ + +#define I2O_CLASS_MATCH_ANYCLASS		0xffffffff + +/* + *  Subclasses + */ + +#define I2O_SUBCLASS_i960			0x001 +#define I2O_SUBCLASS_HDM			0x020 +#define I2O_SUBCLASS_ISM			0x021 + +/* Operation functions */ + +#define I2O_PARAMS_FIELD_GET			0x0001 +#define I2O_PARAMS_LIST_GET			0x0002 +#define I2O_PARAMS_MORE_GET			0x0003 +#define I2O_PARAMS_SIZE_GET			0x0004 +#define I2O_PARAMS_TABLE_GET			0x0005 +#define I2O_PARAMS_FIELD_SET			0x0006 +#define I2O_PARAMS_LIST_SET			0x0007 +#define I2O_PARAMS_ROW_ADD			0x0008 +#define I2O_PARAMS_ROW_DELETE			0x0009 +#define I2O_PARAMS_TABLE_CLEAR			0x000A + +/* + * I2O serial number conventions / formats + * (circa v1.5) + */ + +#define I2O_SNFORMAT_UNKNOWN			0 +#define I2O_SNFORMAT_BINARY			1 +#define I2O_SNFORMAT_ASCII			2 +#define I2O_SNFORMAT_UNICODE			3 +#define I2O_SNFORMAT_LAN48_MAC			4 +#define I2O_SNFORMAT_WAN			5 + +/* + * Plus new in v2.0 (Yellowstone pdf doc) + */ + +#define I2O_SNFORMAT_LAN64_MAC			6 +#define I2O_SNFORMAT_DDM			7 +#define I2O_SNFORMAT_IEEE_REG64 		8 +#define I2O_SNFORMAT_IEEE_REG128		9 +#define I2O_SNFORMAT_UNKNOWN2			0xff + +/* + *	I2O Get Status State values + */ + +#define ADAPTER_STATE_INITIALIZING		0x01 +#define ADAPTER_STATE_RESET			0x02 +#define ADAPTER_STATE_HOLD			0x04 +#define ADAPTER_STATE_READY			0x05 +#define ADAPTER_STATE_OPERATIONAL		0x08 +#define ADAPTER_STATE_FAILED			0x10 +#define ADAPTER_STATE_FAULTED			0x11 + +/* + *	Software module types + */ +#define I2O_SOFTWARE_MODULE_IRTOS		0x11 +#define I2O_SOFTWARE_MODULE_IOP_PRIVATE		0x22 +#define I2O_SOFTWARE_MODULE_IOP_CONFIG		0x23 + +/* + *	Vendors + */ +#define I2O_VENDOR_DPT				0x001b + +/* + * DPT / Adaptec specific values for i2o_sg_io_hdr flags. + */ +#define I2O_DPT_SG_FLAG_INTERPRET		0x00010000 +#define I2O_DPT_SG_FLAG_PHYSICAL		0x00020000 + +#define I2O_DPT_FLASH_FRAG_SIZE			0x10000 +#define I2O_DPT_FLASH_READ			0x0101 +#define I2O_DPT_FLASH_WRITE			0x0102 + +#endif				/* _I2O_DEV_H */ diff --git a/include/uapi/linux/i8k.h b/include/uapi/linux/i8k.h new file mode 100644 index 00000000000..1c45ba50511 --- /dev/null +++ b/include/uapi/linux/i8k.h @@ -0,0 +1,46 @@ +/* + * i8k.h -- Linux driver for accessing the SMM BIOS on Dell laptops + * + * Copyright (C) 2001  Massimo Dal Zotto <dz@debian.org> + * + * 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, 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. + */ + +#ifndef _LINUX_I8K_H +#define _LINUX_I8K_H + +#define I8K_PROC		"/proc/i8k" +#define I8K_PROC_FMT		"1.0" + +#define I8K_BIOS_VERSION	_IOR ('i', 0x80, int)	/* broken: meant 4 bytes */ +#define I8K_MACHINE_ID		_IOR ('i', 0x81, int)	/* broken: meant 16 bytes */ +#define I8K_POWER_STATUS	_IOR ('i', 0x82, size_t) +#define I8K_FN_STATUS		_IOR ('i', 0x83, size_t) +#define I8K_GET_TEMP		_IOR ('i', 0x84, size_t) +#define I8K_GET_SPEED		_IOWR('i', 0x85, size_t) +#define I8K_GET_FAN		_IOWR('i', 0x86, size_t) +#define I8K_SET_FAN		_IOWR('i', 0x87, size_t) + +#define I8K_FAN_LEFT		1 +#define I8K_FAN_RIGHT		0 +#define I8K_FAN_OFF		0 +#define I8K_FAN_LOW		1 +#define I8K_FAN_HIGH		2 +#define I8K_FAN_MAX		I8K_FAN_HIGH + +#define I8K_VOL_UP		1 +#define I8K_VOL_DOWN		2 +#define I8K_VOL_MUTE		4 + +#define I8K_AC			1 +#define I8K_BATTERY		0 + +#endif diff --git a/include/uapi/linux/icmp.h b/include/uapi/linux/icmp.h new file mode 100644 index 00000000000..16fff055f73 --- /dev/null +++ b/include/uapi/linux/icmp.h @@ -0,0 +1,97 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the  BSD Socket + *		interface as the means of communication with the user level. + * + *		Definitions for the ICMP protocol. + * + * Version:	@(#)icmp.h	1.0.3	04/28/93 + * + * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + * + *		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. + */ +#ifndef _UAPI_LINUX_ICMP_H +#define _UAPI_LINUX_ICMP_H + +#include <linux/types.h> + +#define ICMP_ECHOREPLY		0	/* Echo Reply			*/ +#define ICMP_DEST_UNREACH	3	/* Destination Unreachable	*/ +#define ICMP_SOURCE_QUENCH	4	/* Source Quench		*/ +#define ICMP_REDIRECT		5	/* Redirect (change route)	*/ +#define ICMP_ECHO		8	/* Echo Request			*/ +#define ICMP_TIME_EXCEEDED	11	/* Time Exceeded		*/ +#define ICMP_PARAMETERPROB	12	/* Parameter Problem		*/ +#define ICMP_TIMESTAMP		13	/* Timestamp Request		*/ +#define ICMP_TIMESTAMPREPLY	14	/* Timestamp Reply		*/ +#define ICMP_INFO_REQUEST	15	/* Information Request		*/ +#define ICMP_INFO_REPLY		16	/* Information Reply		*/ +#define ICMP_ADDRESS		17	/* Address Mask Request		*/ +#define ICMP_ADDRESSREPLY	18	/* Address Mask Reply		*/ +#define NR_ICMP_TYPES		18 + + +/* Codes for UNREACH. */ +#define ICMP_NET_UNREACH	0	/* Network Unreachable		*/ +#define ICMP_HOST_UNREACH	1	/* Host Unreachable		*/ +#define ICMP_PROT_UNREACH	2	/* Protocol Unreachable		*/ +#define ICMP_PORT_UNREACH	3	/* Port Unreachable		*/ +#define ICMP_FRAG_NEEDED	4	/* Fragmentation Needed/DF set	*/ +#define ICMP_SR_FAILED		5	/* Source Route failed		*/ +#define ICMP_NET_UNKNOWN	6 +#define ICMP_HOST_UNKNOWN	7 +#define ICMP_HOST_ISOLATED	8 +#define ICMP_NET_ANO		9 +#define ICMP_HOST_ANO		10 +#define ICMP_NET_UNR_TOS	11 +#define ICMP_HOST_UNR_TOS	12 +#define ICMP_PKT_FILTERED	13	/* Packet filtered */ +#define ICMP_PREC_VIOLATION	14	/* Precedence violation */ +#define ICMP_PREC_CUTOFF	15	/* Precedence cut off */ +#define NR_ICMP_UNREACH		15	/* instead of hardcoding immediate value */ + +/* Codes for REDIRECT. */ +#define ICMP_REDIR_NET		0	/* Redirect Net			*/ +#define ICMP_REDIR_HOST		1	/* Redirect Host		*/ +#define ICMP_REDIR_NETTOS	2	/* Redirect Net for TOS		*/ +#define ICMP_REDIR_HOSTTOS	3	/* Redirect Host for TOS	*/ + +/* Codes for TIME_EXCEEDED. */ +#define ICMP_EXC_TTL		0	/* TTL count exceeded		*/ +#define ICMP_EXC_FRAGTIME	1	/* Fragment Reass time exceeded	*/ + + +struct icmphdr { +  __u8		type; +  __u8		code; +  __sum16	checksum; +  union { +	struct { +		__be16	id; +		__be16	sequence; +	} echo; +	__be32	gateway; +	struct { +		__be16	__unused; +		__be16	mtu; +	} frag; +  } un; +}; + + +/* + *	constants for (set|get)sockopt + */ + +#define ICMP_FILTER			1 + +struct icmp_filter { +	__u32		data; +}; + + +#endif /* _UAPI_LINUX_ICMP_H */ diff --git a/include/uapi/linux/icmpv6.h b/include/uapi/linux/icmpv6.h new file mode 100644 index 00000000000..e0133c73c30 --- /dev/null +++ b/include/uapi/linux/icmpv6.h @@ -0,0 +1,164 @@ +#ifndef _UAPI_LINUX_ICMPV6_H +#define _UAPI_LINUX_ICMPV6_H + +#include <linux/types.h> +#include <asm/byteorder.h> + +struct icmp6hdr { + +	__u8		icmp6_type; +	__u8		icmp6_code; +	__sum16		icmp6_cksum; + + +	union { +		__be32			un_data32[1]; +		__be16			un_data16[2]; +		__u8			un_data8[4]; + +		struct icmpv6_echo { +			__be16		identifier; +			__be16		sequence; +		} u_echo; + +                struct icmpv6_nd_advt { +#if defined(__LITTLE_ENDIAN_BITFIELD) +                        __u32		reserved:5, +                        		override:1, +                        		solicited:1, +                        		router:1, +					reserved2:24; +#elif defined(__BIG_ENDIAN_BITFIELD) +                        __u32		router:1, +					solicited:1, +                        		override:1, +                        		reserved:29; +#else +#error	"Please fix <asm/byteorder.h>" +#endif						 +                } u_nd_advt; + +                struct icmpv6_nd_ra { +			__u8		hop_limit; +#if defined(__LITTLE_ENDIAN_BITFIELD) +			__u8		reserved:3, +					router_pref:2, +					home_agent:1, +					other:1, +					managed:1; + +#elif defined(__BIG_ENDIAN_BITFIELD) +			__u8		managed:1, +					other:1, +					home_agent:1, +					router_pref:2, +					reserved:3; +#else +#error	"Please fix <asm/byteorder.h>" +#endif +			__be16		rt_lifetime; +                } u_nd_ra; + +	} icmp6_dataun; + +#define icmp6_identifier	icmp6_dataun.u_echo.identifier +#define icmp6_sequence		icmp6_dataun.u_echo.sequence +#define icmp6_pointer		icmp6_dataun.un_data32[0] +#define icmp6_mtu		icmp6_dataun.un_data32[0] +#define icmp6_unused		icmp6_dataun.un_data32[0] +#define icmp6_maxdelay		icmp6_dataun.un_data16[0] +#define icmp6_router		icmp6_dataun.u_nd_advt.router +#define icmp6_solicited		icmp6_dataun.u_nd_advt.solicited +#define icmp6_override		icmp6_dataun.u_nd_advt.override +#define icmp6_ndiscreserved	icmp6_dataun.u_nd_advt.reserved +#define icmp6_hop_limit		icmp6_dataun.u_nd_ra.hop_limit +#define icmp6_addrconf_managed	icmp6_dataun.u_nd_ra.managed +#define icmp6_addrconf_other	icmp6_dataun.u_nd_ra.other +#define icmp6_rt_lifetime	icmp6_dataun.u_nd_ra.rt_lifetime +#define icmp6_router_pref	icmp6_dataun.u_nd_ra.router_pref +}; + + +#define ICMPV6_ROUTER_PREF_LOW		0x3 +#define ICMPV6_ROUTER_PREF_MEDIUM	0x0 +#define ICMPV6_ROUTER_PREF_HIGH		0x1 +#define ICMPV6_ROUTER_PREF_INVALID	0x2 + +#define ICMPV6_DEST_UNREACH		1 +#define ICMPV6_PKT_TOOBIG		2 +#define ICMPV6_TIME_EXCEED		3 +#define ICMPV6_PARAMPROB		4 + +#define ICMPV6_INFOMSG_MASK		0x80 + +#define ICMPV6_ECHO_REQUEST		128 +#define ICMPV6_ECHO_REPLY		129 +#define ICMPV6_MGM_QUERY		130 +#define ICMPV6_MGM_REPORT       	131 +#define ICMPV6_MGM_REDUCTION    	132 + +#define ICMPV6_NI_QUERY			139 +#define ICMPV6_NI_REPLY			140 + +#define ICMPV6_MLD2_REPORT		143 + +#define ICMPV6_DHAAD_REQUEST		144 +#define ICMPV6_DHAAD_REPLY		145 +#define ICMPV6_MOBILE_PREFIX_SOL	146 +#define ICMPV6_MOBILE_PREFIX_ADV	147 + +/* + *	Codes for Destination Unreachable + */ +#define ICMPV6_NOROUTE			0 +#define ICMPV6_ADM_PROHIBITED		1 +#define ICMPV6_NOT_NEIGHBOUR		2 +#define ICMPV6_ADDR_UNREACH		3 +#define ICMPV6_PORT_UNREACH		4 + +/* + *	Codes for Time Exceeded + */ +#define ICMPV6_EXC_HOPLIMIT		0 +#define ICMPV6_EXC_FRAGTIME		1 + +/* + *	Codes for Parameter Problem + */ +#define ICMPV6_HDR_FIELD		0 +#define ICMPV6_UNK_NEXTHDR		1 +#define ICMPV6_UNK_OPTION		2 + +/* + *	constants for (set|get)sockopt + */ + +#define ICMPV6_FILTER			1 + +/* + *	ICMPV6 filter + */ + +#define ICMPV6_FILTER_BLOCK		1 +#define ICMPV6_FILTER_PASS		2 +#define ICMPV6_FILTER_BLOCKOTHERS	3 +#define ICMPV6_FILTER_PASSONLY		4 + +struct icmp6_filter { +	__u32		data[8]; +}; + +/* + *	Definitions for MLDv2 + */ +#define MLD2_MODE_IS_INCLUDE	1 +#define MLD2_MODE_IS_EXCLUDE	2 +#define MLD2_CHANGE_TO_INCLUDE	3 +#define MLD2_CHANGE_TO_EXCLUDE	4 +#define MLD2_ALLOW_NEW_SOURCES	5 +#define MLD2_BLOCK_OLD_SOURCES	6 + +#define MLD2_ALL_MCR_INIT { { { 0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,0x16 } } } + + +#endif /* _UAPI_LINUX_ICMPV6_H */ diff --git a/include/uapi/linux/if.h b/include/uapi/linux/if.h new file mode 100644 index 00000000000..1ec407b01e4 --- /dev/null +++ b/include/uapi/linux/if.h @@ -0,0 +1,235 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the  BSD Socket + *		interface as the means of communication with the user level. + * + *		Global definitions for the INET interface module. + * + * Version:	@(#)if.h	1.0.2	04/18/93 + * + * Authors:	Original taken from Berkeley UNIX 4.3, (c) UCB 1982-1988 + *		Ross Biro + *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + * + *		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. + */ +#ifndef _LINUX_IF_H +#define _LINUX_IF_H + +#include <linux/types.h>		/* for "__kernel_caddr_t" et al	*/ +#include <linux/socket.h>		/* for "struct sockaddr" et al	*/ +#include <linux/compiler.h>		/* for "__user" et al           */ + +#define	IFNAMSIZ	16 +#define	IFALIASZ	256 +#include <linux/hdlc/ioctl.h> + +/* Standard interface flags (netdevice->flags). */ +#define	IFF_UP		0x1		/* interface is up		*/ +#define	IFF_BROADCAST	0x2		/* broadcast address valid	*/ +#define	IFF_DEBUG	0x4		/* turn on debugging		*/ +#define	IFF_LOOPBACK	0x8		/* is a loopback net		*/ +#define	IFF_POINTOPOINT	0x10		/* interface is has p-p link	*/ +#define	IFF_NOTRAILERS	0x20		/* avoid use of trailers	*/ +#define	IFF_RUNNING	0x40		/* interface RFC2863 OPER_UP	*/ +#define	IFF_NOARP	0x80		/* no ARP protocol		*/ +#define	IFF_PROMISC	0x100		/* receive all packets		*/ +#define	IFF_ALLMULTI	0x200		/* receive all multicast packets*/ + +#define IFF_MASTER	0x400		/* master of a load balancer 	*/ +#define IFF_SLAVE	0x800		/* slave of a load balancer	*/ + +#define IFF_MULTICAST	0x1000		/* Supports multicast		*/ + +#define IFF_PORTSEL	0x2000          /* can set media type		*/ +#define IFF_AUTOMEDIA	0x4000		/* auto media select active	*/ +#define IFF_DYNAMIC	0x8000		/* dialup device with changing addresses*/ + +#define IFF_LOWER_UP	0x10000		/* driver signals L1 up		*/ +#define IFF_DORMANT	0x20000		/* driver signals dormant	*/ + +#define IFF_ECHO	0x40000		/* echo sent packets		*/ + +#define IFF_VOLATILE	(IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ECHO|\ +		IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT) + +/* Private (from user) interface flags (netdevice->priv_flags). */ +#define IFF_802_1Q_VLAN 0x1             /* 802.1Q VLAN device.          */ +#define IFF_EBRIDGE	0x2		/* Ethernet bridging device.	*/ +#define IFF_SLAVE_INACTIVE	0x4	/* bonding slave not the curr. active */ +#define IFF_MASTER_8023AD	0x8	/* bonding master, 802.3ad. 	*/ +#define IFF_MASTER_ALB	0x10		/* bonding master, balance-alb.	*/ +#define IFF_BONDING	0x20		/* bonding master or slave	*/ +#define IFF_SLAVE_NEEDARP 0x40		/* need ARPs for validation	*/ +#define IFF_ISATAP	0x80		/* ISATAP interface (RFC4214)	*/ +#define IFF_MASTER_ARPMON 0x100		/* bonding master, ARP mon in use */ +#define IFF_WAN_HDLC	0x200		/* WAN HDLC device		*/ +#define IFF_XMIT_DST_RELEASE 0x400	/* dev_hard_start_xmit() is allowed to +					 * release skb->dst +					 */ +#define IFF_DONT_BRIDGE 0x800		/* disallow bridging this ether dev */ +#define IFF_DISABLE_NETPOLL	0x1000	/* disable netpoll at run-time */ +#define IFF_MACVLAN_PORT	0x2000	/* device used as macvlan port */ +#define IFF_BRIDGE_PORT	0x4000		/* device used as bridge port */ +#define IFF_OVS_DATAPATH	0x8000	/* device used as Open vSwitch +					 * datapath port */ +#define IFF_TX_SKB_SHARING	0x10000	/* The interface supports sharing +					 * skbs on transmit */ +#define IFF_UNICAST_FLT	0x20000		/* Supports unicast filtering	*/ +#define IFF_TEAM_PORT	0x40000		/* device used as team port */ +#define IFF_SUPP_NOFCS	0x80000		/* device supports sending custom FCS */ +#define IFF_LIVE_ADDR_CHANGE 0x100000	/* device supports hardware address +					 * change when it's running */ + + +#define IF_GET_IFACE	0x0001		/* for querying only */ +#define IF_GET_PROTO	0x0002 + +/* For definitions see hdlc.h */ +#define IF_IFACE_V35	0x1000		/* V.35 serial interface	*/ +#define IF_IFACE_V24	0x1001		/* V.24 serial interface	*/ +#define IF_IFACE_X21	0x1002		/* X.21 serial interface	*/ +#define IF_IFACE_T1	0x1003		/* T1 telco serial interface	*/ +#define IF_IFACE_E1	0x1004		/* E1 telco serial interface	*/ +#define IF_IFACE_SYNC_SERIAL 0x1005	/* can't be set by software	*/ +#define IF_IFACE_X21D   0x1006          /* X.21 Dual Clocking (FarSite) */ + +/* For definitions see hdlc.h */ +#define IF_PROTO_HDLC	0x2000		/* raw HDLC protocol		*/ +#define IF_PROTO_PPP	0x2001		/* PPP protocol			*/ +#define IF_PROTO_CISCO	0x2002		/* Cisco HDLC protocol		*/ +#define IF_PROTO_FR	0x2003		/* Frame Relay protocol		*/ +#define IF_PROTO_FR_ADD_PVC 0x2004	/*    Create FR PVC		*/ +#define IF_PROTO_FR_DEL_PVC 0x2005	/*    Delete FR PVC		*/ +#define IF_PROTO_X25	0x2006		/* X.25				*/ +#define IF_PROTO_HDLC_ETH 0x2007	/* raw HDLC, Ethernet emulation	*/ +#define IF_PROTO_FR_ADD_ETH_PVC 0x2008	/*  Create FR Ethernet-bridged PVC */ +#define IF_PROTO_FR_DEL_ETH_PVC 0x2009	/*  Delete FR Ethernet-bridged PVC */ +#define IF_PROTO_FR_PVC	0x200A		/* for reading PVC status	*/ +#define IF_PROTO_FR_ETH_PVC 0x200B +#define IF_PROTO_RAW    0x200C          /* RAW Socket                   */ + +/* RFC 2863 operational status */ +enum { +	IF_OPER_UNKNOWN, +	IF_OPER_NOTPRESENT, +	IF_OPER_DOWN, +	IF_OPER_LOWERLAYERDOWN, +	IF_OPER_TESTING, +	IF_OPER_DORMANT, +	IF_OPER_UP, +}; + +/* link modes */ +enum { +	IF_LINK_MODE_DEFAULT, +	IF_LINK_MODE_DORMANT,	/* limit upward transition to dormant */ +}; + +/* + *	Device mapping structure. I'd just gone off and designed a  + *	beautiful scheme using only loadable modules with arguments + *	for driver options and along come the PCMCIA people 8) + * + *	Ah well. The get() side of this is good for WDSETUP, and it'll + *	be handy for debugging things. The set side is fine for now and + *	being very small might be worth keeping for clean configuration. + */ + +struct ifmap { +	unsigned long mem_start; +	unsigned long mem_end; +	unsigned short base_addr;  +	unsigned char irq; +	unsigned char dma; +	unsigned char port; +	/* 3 bytes spare */ +}; + +struct if_settings { +	unsigned int type;	/* Type of physical device or protocol */ +	unsigned int size;	/* Size of the data allocated by the caller */ +	union { +		/* {atm/eth/dsl}_settings anyone ? */ +		raw_hdlc_proto		__user *raw_hdlc; +		cisco_proto		__user *cisco; +		fr_proto		__user *fr; +		fr_proto_pvc		__user *fr_pvc; +		fr_proto_pvc_info	__user *fr_pvc_info; + +		/* interface settings */ +		sync_serial_settings	__user *sync; +		te1_settings		__user *te1; +	} ifs_ifsu; +}; + +/* + * Interface request structure used for socket + * ioctl's.  All interface ioctl's must have parameter + * definitions which begin with ifr_name.  The + * remainder may be interface specific. + */ + +struct ifreq { +#define IFHWADDRLEN	6 +	union +	{ +		char	ifrn_name[IFNAMSIZ];		/* if name, e.g. "en0" */ +	} ifr_ifrn; +	 +	union { +		struct	sockaddr ifru_addr; +		struct	sockaddr ifru_dstaddr; +		struct	sockaddr ifru_broadaddr; +		struct	sockaddr ifru_netmask; +		struct  sockaddr ifru_hwaddr; +		short	ifru_flags; +		int	ifru_ivalue; +		int	ifru_mtu; +		struct  ifmap ifru_map; +		char	ifru_slave[IFNAMSIZ];	/* Just fits the size */ +		char	ifru_newname[IFNAMSIZ]; +		void __user *	ifru_data; +		struct	if_settings ifru_settings; +	} ifr_ifru; +}; + +#define ifr_name	ifr_ifrn.ifrn_name	/* interface name 	*/ +#define ifr_hwaddr	ifr_ifru.ifru_hwaddr	/* MAC address 		*/ +#define	ifr_addr	ifr_ifru.ifru_addr	/* address		*/ +#define	ifr_dstaddr	ifr_ifru.ifru_dstaddr	/* other end of p-p lnk	*/ +#define	ifr_broadaddr	ifr_ifru.ifru_broadaddr	/* broadcast address	*/ +#define	ifr_netmask	ifr_ifru.ifru_netmask	/* interface net mask	*/ +#define	ifr_flags	ifr_ifru.ifru_flags	/* flags		*/ +#define	ifr_metric	ifr_ifru.ifru_ivalue	/* metric		*/ +#define	ifr_mtu		ifr_ifru.ifru_mtu	/* mtu			*/ +#define ifr_map		ifr_ifru.ifru_map	/* device map		*/ +#define ifr_slave	ifr_ifru.ifru_slave	/* slave device		*/ +#define	ifr_data	ifr_ifru.ifru_data	/* for use by interface	*/ +#define ifr_ifindex	ifr_ifru.ifru_ivalue	/* interface index	*/ +#define ifr_bandwidth	ifr_ifru.ifru_ivalue    /* link bandwidth	*/ +#define ifr_qlen	ifr_ifru.ifru_ivalue	/* Queue length 	*/ +#define ifr_newname	ifr_ifru.ifru_newname	/* New name		*/ +#define ifr_settings	ifr_ifru.ifru_settings	/* Device/proto settings*/ + +/* + * Structure used in SIOCGIFCONF request. + * Used to retrieve interface configuration + * for machine (useful for programs which + * must know all networks accessible). + */ + +struct ifconf  { +	int	ifc_len;			/* size of buffer	*/ +	union { +		char __user *ifcu_buf; +		struct ifreq __user *ifcu_req; +	} ifc_ifcu; +}; +#define	ifc_buf	ifc_ifcu.ifcu_buf		/* buffer address	*/ +#define	ifc_req	ifc_ifcu.ifcu_req		/* array of structures	*/ + +#endif /* _LINUX_IF_H */ diff --git a/include/uapi/linux/if_addr.h b/include/uapi/linux/if_addr.h new file mode 100644 index 00000000000..23357ab81a7 --- /dev/null +++ b/include/uapi/linux/if_addr.h @@ -0,0 +1,61 @@ +#ifndef __LINUX_IF_ADDR_H +#define __LINUX_IF_ADDR_H + +#include <linux/types.h> +#include <linux/netlink.h> + +struct ifaddrmsg { +	__u8		ifa_family; +	__u8		ifa_prefixlen;	/* The prefix length		*/ +	__u8		ifa_flags;	/* Flags			*/ +	__u8		ifa_scope;	/* Address scope		*/ +	__u32		ifa_index;	/* Link index			*/ +}; + +/* + * Important comment: + * IFA_ADDRESS is prefix address, rather than local interface address. + * It makes no difference for normally configured broadcast interfaces, + * but for point-to-point IFA_ADDRESS is DESTINATION address, + * local address is supplied in IFA_LOCAL attribute. + */ +enum { +	IFA_UNSPEC, +	IFA_ADDRESS, +	IFA_LOCAL, +	IFA_LABEL, +	IFA_BROADCAST, +	IFA_ANYCAST, +	IFA_CACHEINFO, +	IFA_MULTICAST, +	__IFA_MAX, +}; + +#define IFA_MAX (__IFA_MAX - 1) + +/* ifa_flags */ +#define IFA_F_SECONDARY		0x01 +#define IFA_F_TEMPORARY		IFA_F_SECONDARY + +#define	IFA_F_NODAD		0x02 +#define IFA_F_OPTIMISTIC	0x04 +#define IFA_F_DADFAILED		0x08 +#define	IFA_F_HOMEADDRESS	0x10 +#define IFA_F_DEPRECATED	0x20 +#define IFA_F_TENTATIVE		0x40 +#define IFA_F_PERMANENT		0x80 + +struct ifa_cacheinfo { +	__u32	ifa_prefered; +	__u32	ifa_valid; +	__u32	cstamp; /* created timestamp, hundredths of seconds */ +	__u32	tstamp; /* updated timestamp, hundredths of seconds */ +}; + +/* backwards compatibility for userspace */ +#ifndef __KERNEL__ +#define IFA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg)))) +#define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg)) +#endif + +#endif diff --git a/include/uapi/linux/if_addrlabel.h b/include/uapi/linux/if_addrlabel.h new file mode 100644 index 00000000000..54580c29818 --- /dev/null +++ b/include/uapi/linux/if_addrlabel.h @@ -0,0 +1,32 @@ +/* + * if_addrlabel.h - netlink interface for address labels + * + * Copyright (C)2007 USAGI/WIDE Project,  All Rights Reserved. + * + * Authors: + *	YOSHIFUJI Hideaki @ USAGI/WIDE <yoshfuji@linux-ipv6.org> + */ + +#ifndef __LINUX_IF_ADDRLABEL_H +#define __LINUX_IF_ADDRLABEL_H + +#include <linux/types.h> + +struct ifaddrlblmsg { +	__u8		ifal_family;		/* Address family */ +	__u8		__ifal_reserved;	/* Reserved */ +	__u8		ifal_prefixlen;		/* Prefix length */ +	__u8		ifal_flags;		/* Flags */ +	__u32		ifal_index;		/* Link index */ +	__u32		ifal_seq;		/* sequence number */ +}; + +enum { +	IFAL_ADDRESS = 1, +	IFAL_LABEL = 2, +	__IFAL_MAX +}; + +#define IFAL_MAX	(__IFAL_MAX - 1) + +#endif diff --git a/include/uapi/linux/if_alg.h b/include/uapi/linux/if_alg.h new file mode 100644 index 00000000000..0f9acce5b1f --- /dev/null +++ b/include/uapi/linux/if_alg.h @@ -0,0 +1,40 @@ +/* + * if_alg: User-space algorithm interface + * + * Copyright (c) 2010 Herbert Xu <herbert@gondor.apana.org.au> + * + * 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. + * + */ + +#ifndef _LINUX_IF_ALG_H +#define _LINUX_IF_ALG_H + +#include <linux/types.h> + +struct sockaddr_alg { +	__u16	salg_family; +	__u8	salg_type[14]; +	__u32	salg_feat; +	__u32	salg_mask; +	__u8	salg_name[64]; +}; + +struct af_alg_iv { +	__u32	ivlen; +	__u8	iv[0]; +}; + +/* Socket options */ +#define ALG_SET_KEY			1 +#define ALG_SET_IV			2 +#define ALG_SET_OP			3 + +/* Operations */ +#define ALG_OP_DECRYPT			0 +#define ALG_OP_ENCRYPT			1 + +#endif	/* _LINUX_IF_ALG_H */ diff --git a/include/uapi/linux/if_arcnet.h b/include/uapi/linux/if_arcnet.h new file mode 100644 index 00000000000..46e34bd0e78 --- /dev/null +++ b/include/uapi/linux/if_arcnet.h @@ -0,0 +1,132 @@ +/* + * INET         An implementation of the TCP/IP protocol suite for the LINUX + *              operating system.  INET is implemented using the  BSD Socket + *              interface as the means of communication with the user level. + * + *              Global definitions for the ARCnet interface. + * + * Authors:     David Woodhouse and Avery Pennarun + * + *              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. + */ + +#ifndef _LINUX_IF_ARCNET_H +#define _LINUX_IF_ARCNET_H + +#include <linux/types.h> +#include <linux/if_ether.h> + + +/* + *    These are the defined ARCnet Protocol ID's. + */ + +/* CAP mode */ +/* No macro but uses 1-8 */ + +/* RFC1201 Protocol ID's */ +#define ARC_P_IP		212	/* 0xD4 */ +#define ARC_P_IPV6		196	/* 0xC4: RFC2497 */ +#define ARC_P_ARP		213	/* 0xD5 */ +#define ARC_P_RARP		214	/* 0xD6 */ +#define ARC_P_IPX		250	/* 0xFA */ +#define ARC_P_NOVELL_EC		236	/* 0xEC */ + +/* Old RFC1051 Protocol ID's */ +#define ARC_P_IP_RFC1051	240	/* 0xF0 */ +#define ARC_P_ARP_RFC1051	241	/* 0xF1 */ + +/* MS LanMan/WfWg "NDIS" encapsulation */ +#define ARC_P_ETHER		232	/* 0xE8 */ + +/* Unsupported/indirectly supported protocols */ +#define ARC_P_DATAPOINT_BOOT	0	/* very old Datapoint equipment */ +#define ARC_P_DATAPOINT_MOUNT	1 +#define ARC_P_POWERLAN_BEACON	8	/* Probably ATA-Netbios related */ +#define ARC_P_POWERLAN_BEACON2	243	/* 0xF3 */ +#define ARC_P_LANSOFT		251	/* 0xFB - what is this? */ +#define ARC_P_ATALK		0xDD + +/* Hardware address length */ +#define ARCNET_ALEN	1 + +/* + * The RFC1201-specific components of an arcnet packet header. + */ +struct arc_rfc1201 { +    __u8  proto;		/* protocol ID field - varies		*/ +    __u8  split_flag;	/* for use with split packets		*/ +    __be16   sequence;		/* sequence number			*/ +    __u8  payload[0];	/* space remaining in packet (504 bytes)*/ +}; +#define RFC1201_HDR_SIZE 4 + + +/* + * The RFC1051-specific components. + */ +struct arc_rfc1051 { +    __u8 proto;		/* ARC_P_RFC1051_ARP/RFC1051_IP	*/ +    __u8 payload[0];		/* 507 bytes			*/ +}; +#define RFC1051_HDR_SIZE 1 + + +/* + * The ethernet-encap-specific components.  We have a real ethernet header + * and some data. + */ +struct arc_eth_encap { +    __u8 proto;		/* Always ARC_P_ETHER			*/ +    struct ethhdr eth;		/* standard ethernet header (yuck!)	*/ +    __u8 payload[0];		/* 493 bytes				*/ +}; +#define ETH_ENCAP_HDR_SIZE 14 + + +struct arc_cap { +	__u8 proto; +	__u8 cookie[sizeof(int)];   /* Actually NOT sent over the network */ +	union { +		__u8 ack; +		__u8 raw[0];		/* 507 bytes */ +	} mes; +}; + +/* + * The data needed by the actual arcnet hardware. + * + * Now, in the real arcnet hardware, the third and fourth bytes are the + * 'offset' specification instead of the length, and the soft data is at + * the _end_ of the 512-byte buffer.  We hide this complexity inside the + * driver. + */ +struct arc_hardware { +    __u8  source,		/* source ARCnet - filled in automagically */ +             dest,		/* destination ARCnet - 0 for broadcast    */ +    	     offset[2];		/* offset bytes (some weird semantics)     */ +}; +#define ARC_HDR_SIZE 4 + +/* + * This is an ARCnet frame header, as seen by the kernel (and userspace, + * when you do a raw packet capture). + */ +struct archdr { +    /* hardware requirements */ +    struct arc_hardware hard; +      +    /* arcnet encapsulation-specific bits */ +    union { +	struct arc_rfc1201   rfc1201; +	struct arc_rfc1051   rfc1051; +	struct arc_eth_encap eth_encap; +	struct arc_cap       cap; +	__u8 raw[0];		/* 508 bytes				*/ +    } soft; +}; + +#endif				/* _LINUX_IF_ARCNET_H */ diff --git a/include/uapi/linux/if_arp.h b/include/uapi/linux/if_arp.h new file mode 100644 index 00000000000..82c7d1bdade --- /dev/null +++ b/include/uapi/linux/if_arp.h @@ -0,0 +1,159 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the  BSD Socket + *		interface as the means of communication with the user level. + * + *		Global definitions for the ARP (RFC 826) protocol. + * + * Version:	@(#)if_arp.h	1.0.1	04/16/93 + * + * Authors:	Original taken from Berkeley UNIX 4.3, (c) UCB 1986-1988 + *		Portions taken from the KA9Q/NOS (v2.00m PA0GRI) source. + *		Ross Biro + *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + *		Florian La Roche, + *		Jonathan Layes <layes@loran.com> + *		Arnaldo Carvalho de Melo <acme@conectiva.com.br> ARPHRD_HWX25 + * + *		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. + */ +#ifndef _UAPI_LINUX_IF_ARP_H +#define _UAPI_LINUX_IF_ARP_H + +#include <linux/netdevice.h> + +/* ARP protocol HARDWARE identifiers. */ +#define ARPHRD_NETROM	0		/* from KA9Q: NET/ROM pseudo	*/ +#define ARPHRD_ETHER 	1		/* Ethernet 10Mbps		*/ +#define	ARPHRD_EETHER	2		/* Experimental Ethernet	*/ +#define	ARPHRD_AX25	3		/* AX.25 Level 2		*/ +#define	ARPHRD_PRONET	4		/* PROnet token ring		*/ +#define	ARPHRD_CHAOS	5		/* Chaosnet			*/ +#define	ARPHRD_IEEE802	6		/* IEEE 802.2 Ethernet/TR/TB	*/ +#define	ARPHRD_ARCNET	7		/* ARCnet			*/ +#define	ARPHRD_APPLETLK	8		/* APPLEtalk			*/ +#define ARPHRD_DLCI	15		/* Frame Relay DLCI		*/ +#define ARPHRD_ATM	19		/* ATM 				*/ +#define ARPHRD_METRICOM	23		/* Metricom STRIP (new IANA id)	*/ +#define	ARPHRD_IEEE1394	24		/* IEEE 1394 IPv4 - RFC 2734	*/ +#define ARPHRD_EUI64	27		/* EUI-64                       */ +#define ARPHRD_INFINIBAND 32		/* InfiniBand			*/ + +/* Dummy types for non ARP hardware */ +#define ARPHRD_SLIP	256 +#define ARPHRD_CSLIP	257 +#define ARPHRD_SLIP6	258 +#define ARPHRD_CSLIP6	259 +#define ARPHRD_RSRVD	260		/* Notional KISS type 		*/ +#define ARPHRD_ADAPT	264 +#define ARPHRD_ROSE	270 +#define ARPHRD_X25	271		/* CCITT X.25			*/ +#define ARPHRD_HWX25	272		/* Boards with X.25 in firmware	*/ +#define ARPHRD_CAN	280		/* Controller Area Network      */ +#define ARPHRD_PPP	512 +#define ARPHRD_CISCO	513		/* Cisco HDLC	 		*/ +#define ARPHRD_HDLC	ARPHRD_CISCO +#define ARPHRD_LAPB	516		/* LAPB				*/ +#define ARPHRD_DDCMP    517		/* Digital's DDCMP protocol     */ +#define ARPHRD_RAWHDLC	518		/* Raw HDLC			*/ + +#define ARPHRD_TUNNEL	768		/* IPIP tunnel			*/ +#define ARPHRD_TUNNEL6	769		/* IP6IP6 tunnel       		*/ +#define ARPHRD_FRAD	770             /* Frame Relay Access Device    */ +#define ARPHRD_SKIP	771		/* SKIP vif			*/ +#define ARPHRD_LOOPBACK	772		/* Loopback device		*/ +#define ARPHRD_LOCALTLK 773		/* Localtalk device		*/ +#define ARPHRD_FDDI	774		/* Fiber Distributed Data Interface */ +#define ARPHRD_BIF      775             /* AP1000 BIF                   */ +#define ARPHRD_SIT	776		/* sit0 device - IPv6-in-IPv4	*/ +#define ARPHRD_IPDDP	777		/* IP over DDP tunneller	*/ +#define ARPHRD_IPGRE	778		/* GRE over IP			*/ +#define ARPHRD_PIMREG	779		/* PIMSM register interface	*/ +#define ARPHRD_HIPPI	780		/* High Performance Parallel Interface */ +#define ARPHRD_ASH	781		/* Nexus 64Mbps Ash		*/ +#define ARPHRD_ECONET	782		/* Acorn Econet			*/ +#define ARPHRD_IRDA 	783		/* Linux-IrDA			*/ +/* ARP works differently on different FC media .. so  */ +#define ARPHRD_FCPP	784		/* Point to point fibrechannel	*/ +#define ARPHRD_FCAL	785		/* Fibrechannel arbitrated loop */ +#define ARPHRD_FCPL	786		/* Fibrechannel public loop	*/ +#define ARPHRD_FCFABRIC	787		/* Fibrechannel fabric		*/ +	/* 787->799 reserved for fibrechannel media types */ +#define ARPHRD_IEEE802_TR 800		/* Magic type ident for TR	*/ +#define ARPHRD_IEEE80211 801		/* IEEE 802.11			*/ +#define ARPHRD_IEEE80211_PRISM 802	/* IEEE 802.11 + Prism2 header  */ +#define ARPHRD_IEEE80211_RADIOTAP 803	/* IEEE 802.11 + radiotap header */ +#define ARPHRD_IEEE802154	  804 +#define ARPHRD_IEEE802154_MONITOR 805	/* IEEE 802.15.4 network monitor */ + +#define ARPHRD_PHONET	820		/* PhoNet media type		*/ +#define ARPHRD_PHONET_PIPE 821		/* PhoNet pipe header		*/ +#define ARPHRD_CAIF	822		/* CAIF media type		*/ +#define ARPHRD_IP6GRE	823		/* GRE over IPv6		*/ + +#define ARPHRD_VOID	  0xFFFF	/* Void type, nothing is known */ +#define ARPHRD_NONE	  0xFFFE	/* zero header length */ + +/* ARP protocol opcodes. */ +#define	ARPOP_REQUEST	1		/* ARP request			*/ +#define	ARPOP_REPLY	2		/* ARP reply			*/ +#define	ARPOP_RREQUEST	3		/* RARP request			*/ +#define	ARPOP_RREPLY	4		/* RARP reply			*/ +#define	ARPOP_InREQUEST	8		/* InARP request		*/ +#define	ARPOP_InREPLY	9		/* InARP reply			*/ +#define	ARPOP_NAK	10		/* (ATM)ARP NAK			*/ + + +/* ARP ioctl request. */ +struct arpreq { +  struct sockaddr	arp_pa;		/* protocol address		*/ +  struct sockaddr	arp_ha;		/* hardware address		*/ +  int			arp_flags;	/* flags			*/ +  struct sockaddr       arp_netmask;    /* netmask (only for proxy arps) */ +  char			arp_dev[16]; +}; + +struct arpreq_old { +  struct sockaddr	arp_pa;		/* protocol address		*/ +  struct sockaddr	arp_ha;		/* hardware address		*/ +  int			arp_flags;	/* flags			*/ +  struct sockaddr       arp_netmask;    /* netmask (only for proxy arps) */ +}; + +/* ARP Flag values. */ +#define ATF_COM		0x02		/* completed entry (ha valid)	*/ +#define	ATF_PERM	0x04		/* permanent entry		*/ +#define	ATF_PUBL	0x08		/* publish entry		*/ +#define	ATF_USETRAILERS	0x10		/* has requested trailers	*/ +#define ATF_NETMASK     0x20            /* want to use a netmask (only +					   for proxy entries) */ +#define ATF_DONTPUB	0x40		/* don't answer this addresses	*/ + +/* + *	This structure defines an ethernet arp header. + */ + +struct arphdr { +	__be16		ar_hrd;		/* format of hardware address	*/ +	__be16		ar_pro;		/* format of protocol address	*/ +	unsigned char	ar_hln;		/* length of hardware address	*/ +	unsigned char	ar_pln;		/* length of protocol address	*/ +	__be16		ar_op;		/* ARP opcode (command)		*/ + +#if 0 +	 /* +	  *	 Ethernet looks like this : This bit is variable sized however... +	  */ +	unsigned char		ar_sha[ETH_ALEN];	/* sender hardware address	*/ +	unsigned char		ar_sip[4];		/* sender IP address		*/ +	unsigned char		ar_tha[ETH_ALEN];	/* target hardware address	*/ +	unsigned char		ar_tip[4];		/* target IP address		*/ +#endif + +}; + + +#endif /* _UAPI_LINUX_IF_ARP_H */ diff --git a/include/uapi/linux/if_bonding.h b/include/uapi/linux/if_bonding.h new file mode 100644 index 00000000000..a17edda8a78 --- /dev/null +++ b/include/uapi/linux/if_bonding.h @@ -0,0 +1,128 @@ +/* + * Bond several ethernet interfaces into a Cisco, running 'Etherchannel'. + * + * + * Portions are (c) Copyright 1995 Simon "Guru Aleph-Null" Janes + * NCM: Network and Communications Management, Inc. + * + * BUT, I'm the one who modified it for ethernet, so: + * (c) Copyright 1999, Thomas Davis, tadavis@lbl.gov + * + *	This software may be used and distributed according to the terms + *	of the GNU Public License, incorporated herein by reference. + * + * 2003/03/18 - Amir Noam <amir.noam at intel dot com> + *	- Added support for getting slave's speed and duplex via ethtool. + *	  Needed for 802.3ad and other future modes. + * + * 2003/03/18 - Tsippy Mendelson <tsippy.mendelson at intel dot com> and + *		Shmulik Hen <shmulik.hen at intel dot com> + *	- Enable support of modes that need to use the unique mac address of + *	  each slave. + * + * 2003/03/18 - Tsippy Mendelson <tsippy.mendelson at intel dot com> and + *		Amir Noam <amir.noam at intel dot com> + *	- Moved driver's private data types to bonding.h + * + * 2003/03/18 - Amir Noam <amir.noam at intel dot com>, + *		Tsippy Mendelson <tsippy.mendelson at intel dot com> and + *		Shmulik Hen <shmulik.hen at intel dot com> + *	- Added support for IEEE 802.3ad Dynamic link aggregation mode. + * + * 2003/05/01 - Amir Noam <amir.noam at intel dot com> + *	- Added ABI version control to restore compatibility between + *	  new/old ifenslave and new/old bonding. + * + * 2003/12/01 - Shmulik Hen <shmulik.hen at intel dot com> + *	- Code cleanup and style changes + * + * 2005/05/05 - Jason Gabler <jygabler at lbl dot gov> + *      - added definitions for various XOR hashing policies + */ + +#ifndef _LINUX_IF_BONDING_H +#define _LINUX_IF_BONDING_H + +#include <linux/if.h> +#include <linux/types.h> +#include <linux/if_ether.h> + +/* userland - kernel ABI version (2003/05/08) */ +#define BOND_ABI_VERSION 2 + +/* + * We can remove these ioctl definitions in 2.5.  People should use the + * SIOC*** versions of them instead + */ +#define BOND_ENSLAVE_OLD		(SIOCDEVPRIVATE) +#define BOND_RELEASE_OLD		(SIOCDEVPRIVATE + 1) +#define BOND_SETHWADDR_OLD		(SIOCDEVPRIVATE + 2) +#define BOND_SLAVE_INFO_QUERY_OLD	(SIOCDEVPRIVATE + 11) +#define BOND_INFO_QUERY_OLD		(SIOCDEVPRIVATE + 12) +#define BOND_CHANGE_ACTIVE_OLD		(SIOCDEVPRIVATE + 13) + +#define BOND_CHECK_MII_STATUS	(SIOCGMIIPHY) + +#define BOND_MODE_ROUNDROBIN	0 +#define BOND_MODE_ACTIVEBACKUP	1 +#define BOND_MODE_XOR		2 +#define BOND_MODE_BROADCAST	3 +#define BOND_MODE_8023AD        4 +#define BOND_MODE_TLB           5 +#define BOND_MODE_ALB		6 /* TLB + RLB (receive load balancing) */ + +/* each slave's link has 4 states */ +#define BOND_LINK_UP    0           /* link is up and running */ +#define BOND_LINK_FAIL  1           /* link has just gone down */ +#define BOND_LINK_DOWN  2           /* link has been down for too long time */ +#define BOND_LINK_BACK  3           /* link is going back */ + +/* each slave has several states */ +#define BOND_STATE_ACTIVE       0   /* link is active */ +#define BOND_STATE_BACKUP       1   /* link is backup */ + +#define BOND_DEFAULT_MAX_BONDS  1   /* Default maximum number of devices to support */ + +#define BOND_DEFAULT_TX_QUEUES 16   /* Default number of tx queues per device */ + +#define BOND_DEFAULT_RESEND_IGMP	1 /* Default number of IGMP membership reports */ + +/* hashing types */ +#define BOND_XMIT_POLICY_LAYER2		0 /* layer 2 (MAC only), default */ +#define BOND_XMIT_POLICY_LAYER34	1 /* layer 3+4 (IP ^ (TCP || UDP)) */ +#define BOND_XMIT_POLICY_LAYER23	2 /* layer 2+3 (IP ^ MAC) */ + +typedef struct ifbond { +	__s32 bond_mode; +	__s32 num_slaves; +	__s32 miimon; +} ifbond; + +typedef struct ifslave { +	__s32 slave_id; /* Used as an IN param to the BOND_SLAVE_INFO_QUERY ioctl */ +	char slave_name[IFNAMSIZ]; +	__s8 link; +	__s8 state; +	__u32  link_failure_count; +} ifslave; + +struct ad_info { +	__u16 aggregator_id; +	__u16 ports; +	__u16 actor_key; +	__u16 partner_key; +	__u8 partner_system[ETH_ALEN]; +}; + +#endif /* _LINUX_IF_BONDING_H */ + +/* + * Local variables: + *  version-control: t + *  kept-new-versions: 5 + *  c-indent-level: 8 + *  c-basic-offset: 8 + *  tab-width: 8 + * End: + */ + diff --git a/include/uapi/linux/if_bridge.h b/include/uapi/linux/if_bridge.h new file mode 100644 index 00000000000..a8fe9549ddb --- /dev/null +++ b/include/uapi/linux/if_bridge.h @@ -0,0 +1,101 @@ +/* + *	Linux ethernet bridge + * + *	Authors: + *	Lennert Buytenhek		<buytenh@gnu.org> + * + *	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. + */ + +#ifndef _UAPI_LINUX_IF_BRIDGE_H +#define _UAPI_LINUX_IF_BRIDGE_H + +#include <linux/types.h> + +#define SYSFS_BRIDGE_ATTR	"bridge" +#define SYSFS_BRIDGE_FDB	"brforward" +#define SYSFS_BRIDGE_PORT_SUBDIR "brif" +#define SYSFS_BRIDGE_PORT_ATTR	"brport" +#define SYSFS_BRIDGE_PORT_LINK	"bridge" + +#define BRCTL_VERSION 1 + +#define BRCTL_GET_VERSION 0 +#define BRCTL_GET_BRIDGES 1 +#define BRCTL_ADD_BRIDGE 2 +#define BRCTL_DEL_BRIDGE 3 +#define BRCTL_ADD_IF 4 +#define BRCTL_DEL_IF 5 +#define BRCTL_GET_BRIDGE_INFO 6 +#define BRCTL_GET_PORT_LIST 7 +#define BRCTL_SET_BRIDGE_FORWARD_DELAY 8 +#define BRCTL_SET_BRIDGE_HELLO_TIME 9 +#define BRCTL_SET_BRIDGE_MAX_AGE 10 +#define BRCTL_SET_AGEING_TIME 11 +#define BRCTL_SET_GC_INTERVAL 12 +#define BRCTL_GET_PORT_INFO 13 +#define BRCTL_SET_BRIDGE_STP_STATE 14 +#define BRCTL_SET_BRIDGE_PRIORITY 15 +#define BRCTL_SET_PORT_PRIORITY 16 +#define BRCTL_SET_PATH_COST 17 +#define BRCTL_GET_FDB_ENTRIES 18 + +#define BR_STATE_DISABLED 0 +#define BR_STATE_LISTENING 1 +#define BR_STATE_LEARNING 2 +#define BR_STATE_FORWARDING 3 +#define BR_STATE_BLOCKING 4 + +struct __bridge_info { +	__u64 designated_root; +	__u64 bridge_id; +	__u32 root_path_cost; +	__u32 max_age; +	__u32 hello_time; +	__u32 forward_delay; +	__u32 bridge_max_age; +	__u32 bridge_hello_time; +	__u32 bridge_forward_delay; +	__u8 topology_change; +	__u8 topology_change_detected; +	__u8 root_port; +	__u8 stp_enabled; +	__u32 ageing_time; +	__u32 gc_interval; +	__u32 hello_timer_value; +	__u32 tcn_timer_value; +	__u32 topology_change_timer_value; +	__u32 gc_timer_value; +}; + +struct __port_info { +	__u64 designated_root; +	__u64 designated_bridge; +	__u16 port_id; +	__u16 designated_port; +	__u32 path_cost; +	__u32 designated_cost; +	__u8 state; +	__u8 top_change_ack; +	__u8 config_pending; +	__u8 unused0; +	__u32 message_age_timer_value; +	__u32 forward_delay_timer_value; +	__u32 hold_timer_value; +}; + +struct __fdb_entry { +	__u8 mac_addr[6]; +	__u8 port_no; +	__u8 is_local; +	__u32 ageing_timer_value; +	__u8 port_hi; +	__u8 pad0; +	__u16 unused; +}; + + +#endif /* _UAPI_LINUX_IF_BRIDGE_H */ diff --git a/include/uapi/linux/if_cablemodem.h b/include/uapi/linux/if_cablemodem.h new file mode 100644 index 00000000000..9ca1007edd9 --- /dev/null +++ b/include/uapi/linux/if_cablemodem.h @@ -0,0 +1,22 @@ +#ifndef _LINUX_CABLEMODEM_H_ +#define _LINUX_CABLEMODEM_H_ +/* + *		Author: Franco Venturi <fventuri@mediaone.net> + *		Copyright 1998 Franco Venturi + * + *		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. + */ + +/* some useful defines for sb1000.c e cmconfig.c - fv */ +#define SIOCGCMSTATS		SIOCDEVPRIVATE+0	/* get cable modem stats */ +#define SIOCGCMFIRMWARE		SIOCDEVPRIVATE+1	/* get cm firmware version */ +#define SIOCGCMFREQUENCY	SIOCDEVPRIVATE+2	/* get cable modem frequency */ +#define SIOCSCMFREQUENCY	SIOCDEVPRIVATE+3	/* set cable modem frequency */ +#define SIOCGCMPIDS			SIOCDEVPRIVATE+4	/* get cable modem PIDs */ +#define SIOCSCMPIDS			SIOCDEVPRIVATE+5	/* set cable modem PIDs */ + +#endif diff --git a/include/uapi/linux/if_eql.h b/include/uapi/linux/if_eql.h new file mode 100644 index 00000000000..06e818c9e7c --- /dev/null +++ b/include/uapi/linux/if_eql.h @@ -0,0 +1,54 @@ +/* + * Equalizer Load-balancer for serial network interfaces. + * + * (c) Copyright 1995 Simon "Guru Aleph-Null" Janes + * NCM: Network and Communications Management, Inc. + * + * + *	This software may be used and distributed according to the terms + *	of the GNU General Public License, incorporated herein by reference. + *  + * The author may be reached as simon@ncm.com, or C/O + *    NCM + *    Attn: Simon Janes + *    6803 Whittier Ave + *    McLean VA 22101 + *    Phone: 1-703-847-0040 ext 103 + */ + +#ifndef _UAPI_LINUX_IF_EQL_H +#define _UAPI_LINUX_IF_EQL_H + +#define EQL_DEFAULT_SLAVE_PRIORITY 28800 +#define EQL_DEFAULT_MAX_SLAVES     4 +#define EQL_DEFAULT_MTU            576 +#define EQL_DEFAULT_RESCHED_IVAL   HZ + +#define EQL_ENSLAVE     (SIOCDEVPRIVATE) +#define EQL_EMANCIPATE  (SIOCDEVPRIVATE + 1) + +#define EQL_GETSLAVECFG (SIOCDEVPRIVATE + 2) +#define EQL_SETSLAVECFG (SIOCDEVPRIVATE + 3) + +#define EQL_GETMASTRCFG (SIOCDEVPRIVATE + 4) +#define EQL_SETMASTRCFG (SIOCDEVPRIVATE + 5) + + +typedef struct master_config { +	char	master_name[16]; +	int	max_slaves; +	int	min_slaves; +} master_config_t; + +typedef struct slave_config { +	char	slave_name[16]; +	long	priority; +} slave_config_t; + +typedef struct slaving_request { +	char	slave_name[16]; +	long	priority; +} slaving_request_t; + + +#endif /* _UAPI_LINUX_IF_EQL_H */ diff --git a/include/uapi/linux/if_ether.h b/include/uapi/linux/if_ether.h new file mode 100644 index 00000000000..0343e1f0582 --- /dev/null +++ b/include/uapi/linux/if_ether.h @@ -0,0 +1,135 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the  BSD Socket + *		interface as the means of communication with the user level. + * + *		Global definitions for the Ethernet IEEE 802.3 interface. + * + * Version:	@(#)if_ether.h	1.0.1a	02/08/94 + * + * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + *		Donald Becker, <becker@super.org> + *		Alan Cox, <alan@lxorguk.ukuu.org.uk> + *		Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk> + * + *		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. + */ + +#ifndef _UAPI_LINUX_IF_ETHER_H +#define _UAPI_LINUX_IF_ETHER_H + +#include <linux/types.h> + +/* + *	IEEE 802.3 Ethernet magic constants.  The frame sizes omit the preamble + *	and FCS/CRC (frame check sequence). + */ + +#define ETH_ALEN	6		/* Octets in one ethernet addr	 */ +#define ETH_HLEN	14		/* Total octets in header.	 */ +#define ETH_ZLEN	60		/* Min. octets in frame sans FCS */ +#define ETH_DATA_LEN	1500		/* Max. octets in payload	 */ +#define ETH_FRAME_LEN	1514		/* Max. octets in frame sans FCS */ +#define ETH_FCS_LEN	4		/* Octets in the FCS		 */ + +/* + *	These are the defined Ethernet Protocol ID's. + */ + +#define ETH_P_LOOP	0x0060		/* Ethernet Loopback packet	*/ +#define ETH_P_PUP	0x0200		/* Xerox PUP packet		*/ +#define ETH_P_PUPAT	0x0201		/* Xerox PUP Addr Trans packet	*/ +#define ETH_P_IP	0x0800		/* Internet Protocol packet	*/ +#define ETH_P_X25	0x0805		/* CCITT X.25			*/ +#define ETH_P_ARP	0x0806		/* Address Resolution packet	*/ +#define	ETH_P_BPQ	0x08FF		/* G8BPQ AX.25 Ethernet Packet	[ NOT AN OFFICIALLY REGISTERED ID ] */ +#define ETH_P_IEEEPUP	0x0a00		/* Xerox IEEE802.3 PUP packet */ +#define ETH_P_IEEEPUPAT	0x0a01		/* Xerox IEEE802.3 PUP Addr Trans packet */ +#define ETH_P_DEC       0x6000          /* DEC Assigned proto           */ +#define ETH_P_DNA_DL    0x6001          /* DEC DNA Dump/Load            */ +#define ETH_P_DNA_RC    0x6002          /* DEC DNA Remote Console       */ +#define ETH_P_DNA_RT    0x6003          /* DEC DNA Routing              */ +#define ETH_P_LAT       0x6004          /* DEC LAT                      */ +#define ETH_P_DIAG      0x6005          /* DEC Diagnostics              */ +#define ETH_P_CUST      0x6006          /* DEC Customer use             */ +#define ETH_P_SCA       0x6007          /* DEC Systems Comms Arch       */ +#define ETH_P_TEB	0x6558		/* Trans Ether Bridging		*/ +#define ETH_P_RARP      0x8035		/* Reverse Addr Res packet	*/ +#define ETH_P_ATALK	0x809B		/* Appletalk DDP		*/ +#define ETH_P_AARP	0x80F3		/* Appletalk AARP		*/ +#define ETH_P_8021Q	0x8100          /* 802.1Q VLAN Extended Header  */ +#define ETH_P_IPX	0x8137		/* IPX over DIX			*/ +#define ETH_P_IPV6	0x86DD		/* IPv6 over bluebook		*/ +#define ETH_P_PAUSE	0x8808		/* IEEE Pause frames. See 802.3 31B */ +#define ETH_P_SLOW	0x8809		/* Slow Protocol. See 802.3ad 43B */ +#define ETH_P_WCCP	0x883E		/* Web-cache coordination protocol +					 * defined in draft-wilson-wrec-wccp-v2-00.txt */ +#define ETH_P_PPP_DISC	0x8863		/* PPPoE discovery messages     */ +#define ETH_P_PPP_SES	0x8864		/* PPPoE session messages	*/ +#define ETH_P_MPLS_UC	0x8847		/* MPLS Unicast traffic		*/ +#define ETH_P_MPLS_MC	0x8848		/* MPLS Multicast traffic	*/ +#define ETH_P_ATMMPOA	0x884c		/* MultiProtocol Over ATM	*/ +#define ETH_P_LINK_CTL	0x886c		/* HPNA, wlan link local tunnel */ +#define ETH_P_ATMFATE	0x8884		/* Frame-based ATM Transport +					 * over Ethernet +					 */ +#define ETH_P_PAE	0x888E		/* Port Access Entity (IEEE 802.1X) */ +#define ETH_P_AOE	0x88A2		/* ATA over Ethernet		*/ +#define ETH_P_8021AD	0x88A8          /* 802.1ad Service VLAN		*/ +#define ETH_P_802_EX1	0x88B5		/* 802.1 Local Experimental 1.  */ +#define ETH_P_TIPC	0x88CA		/* TIPC 			*/ +#define ETH_P_8021AH	0x88E7          /* 802.1ah Backbone Service Tag */ +#define ETH_P_1588	0x88F7		/* IEEE 1588 Timesync */ +#define ETH_P_FCOE	0x8906		/* Fibre Channel over Ethernet  */ +#define ETH_P_TDLS	0x890D          /* TDLS */ +#define ETH_P_FIP	0x8914		/* FCoE Initialization Protocol */ +#define ETH_P_QINQ1	0x9100		/* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */ +#define ETH_P_QINQ2	0x9200		/* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */ +#define ETH_P_QINQ3	0x9300		/* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */ +#define ETH_P_EDSA	0xDADA		/* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */ +#define ETH_P_AF_IUCV   0xFBFB		/* IBM af_iucv [ NOT AN OFFICIALLY REGISTERED ID ] */ + +/* + *	Non DIX types. Won't clash for 1500 types. + */ + +#define ETH_P_802_3	0x0001		/* Dummy type for 802.3 frames  */ +#define ETH_P_AX25	0x0002		/* Dummy protocol id for AX.25  */ +#define ETH_P_ALL	0x0003		/* Every packet (be careful!!!) */ +#define ETH_P_802_2	0x0004		/* 802.2 frames 		*/ +#define ETH_P_SNAP	0x0005		/* Internal only		*/ +#define ETH_P_DDCMP     0x0006          /* DEC DDCMP: Internal only     */ +#define ETH_P_WAN_PPP   0x0007          /* Dummy type for WAN PPP frames*/ +#define ETH_P_PPP_MP    0x0008          /* Dummy type for PPP MP frames */ +#define ETH_P_LOCALTALK 0x0009		/* Localtalk pseudo type 	*/ +#define ETH_P_CAN	0x000C		/* CAN: Controller Area Network */ +#define ETH_P_CANFD	0x000D		/* CANFD: CAN flexible data rate*/ +#define ETH_P_PPPTALK	0x0010		/* Dummy type for Atalk over PPP*/ +#define ETH_P_TR_802_2	0x0011		/* 802.2 frames 		*/ +#define ETH_P_MOBITEX	0x0015		/* Mobitex (kaz@cafe.net)	*/ +#define ETH_P_CONTROL	0x0016		/* Card specific control frames */ +#define ETH_P_IRDA	0x0017		/* Linux-IrDA			*/ +#define ETH_P_ECONET	0x0018		/* Acorn Econet			*/ +#define ETH_P_HDLC	0x0019		/* HDLC frames			*/ +#define ETH_P_ARCNET	0x001A		/* 1A for ArcNet :-)            */ +#define ETH_P_DSA	0x001B		/* Distributed Switch Arch.	*/ +#define ETH_P_TRAILER	0x001C		/* Trailer switch tagging	*/ +#define ETH_P_PHONET	0x00F5		/* Nokia Phonet frames          */ +#define ETH_P_IEEE802154 0x00F6		/* IEEE802.15.4 frame		*/ +#define ETH_P_CAIF	0x00F7		/* ST-Ericsson CAIF protocol	*/ + +/* + *	This is an Ethernet frame header. + */ + +struct ethhdr { +	unsigned char	h_dest[ETH_ALEN];	/* destination eth addr	*/ +	unsigned char	h_source[ETH_ALEN];	/* source ether addr	*/ +	__be16		h_proto;		/* packet type ID field	*/ +} __attribute__((packed)); + + +#endif /* _UAPI_LINUX_IF_ETHER_H */ diff --git a/include/uapi/linux/if_fc.h b/include/uapi/linux/if_fc.h new file mode 100644 index 00000000000..6ed7f1bf35c --- /dev/null +++ b/include/uapi/linux/if_fc.h @@ -0,0 +1,51 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the  BSD Socket + *		interface as the means of communication with the user level. + * + *		Global definitions for Fibre Channel. + * + * Version:	@(#)if_fc.h	0.0	11/20/98 + * + * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + *		Donald Becker, <becker@super.org> + *    Peter De Schrijver, <stud11@cc4.kuleuven.ac.be> + *	  Vineet Abraham, <vma@iol.unh.edu> + * + *		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. + */ +#ifndef _LINUX_IF_FC_H +#define _LINUX_IF_FC_H + +#include <linux/types.h> + +#define FC_ALEN	6		/* Octets in one ethernet addr	 */ +#define FC_HLEN   (sizeof(struct fch_hdr)+sizeof(struct fcllc)) +#define FC_ID_LEN 3		/* Octets in a Fibre Channel Address */ + +/* LLC and SNAP constants */ +#define EXTENDED_SAP 0xAA +#define UI_CMD       0x03 + +/* This is NOT the Fibre Channel frame header. The FC frame header is + *  constructed in the driver as the Tachyon needs certain fields in + *  certains positions. So, it can't be generalized here.*/ + +struct fch_hdr { +	__u8  daddr[FC_ALEN];		/* destination address */ +	__u8  saddr[FC_ALEN];		/* source address */ +}; + +/* This is a Fibre Channel LLC structure */ +struct fcllc { +	__u8  dsap;			/* destination SAP */ +	__u8  ssap;			/* source SAP */ +	__u8  llc;			/* LLC control field */ +	__u8  protid[3];		/* protocol id */ +	__be16 ethertype;		/* ether type field */ +}; + +#endif	/* _LINUX_IF_FC_H */ diff --git a/include/uapi/linux/if_fddi.h b/include/uapi/linux/if_fddi.h new file mode 100644 index 00000000000..0d36909c3ae --- /dev/null +++ b/include/uapi/linux/if_fddi.h @@ -0,0 +1,104 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the BSD Socket + *		interface as the means of communication with the user level. + * + *		Global definitions for the ANSI FDDI interface. + * + * Version:	@(#)if_fddi.h	1.0.2	Sep 29 2004 + * + * Author:	Lawrence V. Stefani, <stefani@lkg.dec.com> + * + *		if_fddi.h is based on previous if_ether.h and if_tr.h work by + *			Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + *			Donald Becker, <becker@super.org> + *			Alan Cox, <alan@lxorguk.ukuu.org.uk> + *			Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk> + *			Peter De Schrijver, <stud11@cc4.kuleuven.ac.be> + * + *		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. + */ +#ifndef _UAPI_LINUX_IF_FDDI_H +#define _UAPI_LINUX_IF_FDDI_H + +#include <linux/types.h> + +/* + *  Define max and min legal sizes.  The frame sizes do not include + *  4 byte FCS/CRC (frame check sequence). + */ +#define FDDI_K_ALEN			6		/* Octets in one FDDI address */ +#define FDDI_K_8022_HLEN	16		/* Total octets in 802.2 header */ +#define FDDI_K_SNAP_HLEN	21		/* Total octets in 802.2 SNAP header */ +#define FDDI_K_8022_ZLEN	16		/* Min octets in 802.2 frame sans FCS */ +#define FDDI_K_SNAP_ZLEN	21		/* Min octets in 802.2 SNAP frame sans FCS */ +#define FDDI_K_8022_DLEN	4475	/* Max octets in 802.2 payload */ +#define FDDI_K_SNAP_DLEN	4470	/* Max octets in 802.2 SNAP payload */ +#define FDDI_K_LLC_ZLEN		13		/* Min octets in LLC frame sans FCS */ +#define FDDI_K_LLC_LEN		4491	/* Max octets in LLC frame sans FCS */ + +/* Define FDDI Frame Control (FC) Byte values */ +#define FDDI_FC_K_VOID					0x00	 +#define FDDI_FC_K_NON_RESTRICTED_TOKEN	0x80	 +#define FDDI_FC_K_RESTRICTED_TOKEN		0xC0	 +#define FDDI_FC_K_SMT_MIN				0x41 +#define FDDI_FC_K_SMT_MAX		   		0x4F +#define FDDI_FC_K_MAC_MIN				0xC1 +#define FDDI_FC_K_MAC_MAX		  		0xCF	 +#define FDDI_FC_K_ASYNC_LLC_MIN			0x50 +#define FDDI_FC_K_ASYNC_LLC_DEF			0x54 +#define FDDI_FC_K_ASYNC_LLC_MAX			0x5F +#define FDDI_FC_K_SYNC_LLC_MIN			0xD0 +#define FDDI_FC_K_SYNC_LLC_MAX			0xD7 +#define FDDI_FC_K_IMPLEMENTOR_MIN		0x60 +#define FDDI_FC_K_IMPLEMENTOR_MAX  		0x6F +#define FDDI_FC_K_RESERVED_MIN			0x70 +#define FDDI_FC_K_RESERVED_MAX			0x7F + +/* Define LLC and SNAP constants */ +#define FDDI_EXTENDED_SAP	0xAA +#define FDDI_UI_CMD			0x03 + +/* Define 802.2 Type 1 header */ +struct fddi_8022_1_hdr { +	__u8	dsap;					/* destination service access point */ +	__u8	ssap;					/* source service access point */ +	__u8	ctrl;					/* control byte #1 */ +} __attribute__((packed)); + +/* Define 802.2 Type 2 header */ +struct fddi_8022_2_hdr { +	__u8	dsap;					/* destination service access point */ +	__u8	ssap;					/* source service access point */ +	__u8	ctrl_1;					/* control byte #1 */ +	__u8	ctrl_2;					/* control byte #2 */ +} __attribute__((packed)); + +/* Define 802.2 SNAP header */ +#define FDDI_K_OUI_LEN	3 +struct fddi_snap_hdr { +	__u8	dsap;					/* always 0xAA */ +	__u8	ssap;					/* always 0xAA */ +	__u8	ctrl;					/* always 0x03 */ +	__u8	oui[FDDI_K_OUI_LEN];	/* organizational universal id */ +	__be16	ethertype;				/* packet type ID field */ +} __attribute__((packed)); + +/* Define FDDI LLC frame header */ +struct fddihdr { +	__u8	fc;						/* frame control */ +	__u8	daddr[FDDI_K_ALEN];		/* destination address */ +	__u8	saddr[FDDI_K_ALEN];		/* source address */ +	union +		{ +		struct fddi_8022_1_hdr		llc_8022_1; +		struct fddi_8022_2_hdr		llc_8022_2; +		struct fddi_snap_hdr		llc_snap; +		} hdr; +} __attribute__((packed)); + + +#endif /* _UAPI_LINUX_IF_FDDI_H */ diff --git a/include/uapi/linux/if_frad.h b/include/uapi/linux/if_frad.h new file mode 100644 index 00000000000..f25b08d5eb6 --- /dev/null +++ b/include/uapi/linux/if_frad.h @@ -0,0 +1,122 @@ +/* + * DLCI/FRAD	Definitions for Frame Relay Access Devices.  DLCI devices are + *		created for each DLCI associated with a FRAD.  The FRAD driver + *		is not truly a network device, but the lower level device + *		handler.  This allows other FRAD manufacturers to use the DLCI + *		code, including its RFC1490 encapsulation alongside the current + *		implementation for the Sangoma cards. + * + * Version:	@(#)if_ifrad.h	0.15	31 Mar 96 + * + * Author:	Mike McLagan <mike.mclagan@linux.org> + * + * Changes: + *		0.15	Mike McLagan	changed structure defs (packed) + *					re-arranged flags + *					added DLCI_RET vars + * + *		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. + */ + +#ifndef _UAPI_FRAD_H_ +#define _UAPI_FRAD_H_ + +#include <linux/if.h> + +/* Structures and constants associated with the DLCI device driver */ + +struct dlci_add +{ +   char  devname[IFNAMSIZ]; +   short dlci; +}; + +#define DLCI_GET_CONF	(SIOCDEVPRIVATE + 2) +#define DLCI_SET_CONF	(SIOCDEVPRIVATE + 3) + +/*  + * These are related to the Sangoma SDLA and should remain in order.  + * Code within the SDLA module is based on the specifics of this  + * structure.  Change at your own peril. + */ +struct dlci_conf { +   short flags; +   short CIR_fwd; +   short Bc_fwd; +   short Be_fwd; +   short CIR_bwd; +   short Bc_bwd; +   short Be_bwd;  + +/* these are part of the status read */ +   short Tc_fwd; +   short Tc_bwd; +   short Tf_max; +   short Tb_max; + +/* add any new fields here above is a mirror of sdla_dlci_conf */ +}; + +#define DLCI_GET_SLAVE	(SIOCDEVPRIVATE + 4) + +/* configuration flags for DLCI */ +#define DLCI_IGNORE_CIR_OUT	0x0001 +#define DLCI_ACCOUNT_CIR_IN	0x0002 +#define DLCI_BUFFER_IF		0x0008 + +#define DLCI_VALID_FLAGS	0x000B + +/* defines for the actual Frame Relay hardware */ +#define FRAD_GET_CONF	(SIOCDEVPRIVATE) +#define FRAD_SET_CONF	(SIOCDEVPRIVATE + 1) + +#define FRAD_LAST_IOCTL	FRAD_SET_CONF + +/* + * Based on the setup for the Sangoma SDLA.  If changes are  + * necessary to this structure, a routine will need to be  + * added to that module to copy fields. + */ +struct frad_conf  +{ +   short station; +   short flags; +   short kbaud; +   short clocking; +   short mtu; +   short T391; +   short T392; +   short N391; +   short N392; +   short N393; +   short CIR_fwd; +   short Bc_fwd; +   short Be_fwd; +   short CIR_bwd; +   short Bc_bwd; +   short Be_bwd; + +/* Add new fields here, above is a mirror of the sdla_conf */ + +}; + +#define FRAD_STATION_CPE	0x0000 +#define FRAD_STATION_NODE	0x0001 + +#define FRAD_TX_IGNORE_CIR	0x0001 +#define FRAD_RX_ACCOUNT_CIR	0x0002 +#define FRAD_DROP_ABORTED	0x0004 +#define FRAD_BUFFERIF		0x0008 +#define FRAD_STATS		0x0010 +#define FRAD_MCI		0x0100 +#define FRAD_AUTODLCI		0x8000 +#define FRAD_VALID_FLAGS	0x811F + +#define FRAD_CLOCK_INT		0x0001 +#define FRAD_CLOCK_EXT		0x0000 + + +#endif /* _UAPI_FRAD_H_ */ diff --git a/include/uapi/linux/if_hippi.h b/include/uapi/linux/if_hippi.h new file mode 100644 index 00000000000..cdc049f1829 --- /dev/null +++ b/include/uapi/linux/if_hippi.h @@ -0,0 +1,153 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the  BSD Socket + *		interface as the means of communication with the user level. + * + *		Global definitions for the HIPPI interface. + * + * Version:	@(#)if_hippi.h	1.0.0	05/26/97 + * + * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + *		Donald Becker, <becker@super.org> + *		Alan Cox, <alan@lxorguk.ukuu.org.uk> + *		Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk> + *		Jes Sorensen, <Jes.Sorensen@cern.ch> + * + *		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. + */ +  +#ifndef _LINUX_IF_HIPPI_H +#define _LINUX_IF_HIPPI_H + +#include <linux/types.h> +#include <asm/byteorder.h> + +/* + *	HIPPI magic constants. + */ + +#define HIPPI_ALEN	6		/* Bytes in one HIPPI hw-addr	   */ +#define HIPPI_HLEN	sizeof(struct hippi_hdr) +#define HIPPI_ZLEN	0		/* Min. bytes in frame without FCS */ +#define HIPPI_DATA_LEN	65280		/* Max. bytes in payload	   */ +#define HIPPI_FRAME_LEN	(HIPPI_DATA_LEN + HIPPI_HLEN) +					/* Max. bytes in frame without FCS */ + +/* + * Define LLC and SNAP constants. + */ +#define HIPPI_EXTENDED_SAP	0xAA +#define HIPPI_UI_CMD		0x03 + + +/* + *	Do we need to list some sort of ID's here? + */ + +/* + *	HIPPI statistics collection data.  + */ +  +struct hipnet_statistics { +	int	rx_packets;		/* total packets received	*/ +	int	tx_packets;		/* total packets transmitted	*/ +	int	rx_errors;		/* bad packets received		*/ +	int	tx_errors;		/* packet transmit problems	*/ +	int	rx_dropped;		/* no space in linux buffers	*/ +	int	tx_dropped;		/* no space available in linux	*/ + +	/* detailed rx_errors: */ +	int	rx_length_errors; +	int	rx_over_errors;		/* receiver ring buff overflow	*/ +	int	rx_crc_errors;		/* recved pkt with crc error	*/ +	int	rx_frame_errors;	/* recv'd frame alignment error */ +	int	rx_fifo_errors;		/* recv'r fifo overrun		*/ +	int	rx_missed_errors;	/* receiver missed packet	*/ + +	/* detailed tx_errors */ +	int	tx_aborted_errors; +	int	tx_carrier_errors; +	int	tx_fifo_errors; +	int	tx_heartbeat_errors; +	int	tx_window_errors; +}; + + +struct hippi_fp_hdr { +#if 0 +	__u8		ulp;				/* must contain 4 */ +#if defined (__BIG_ENDIAN_BITFIELD) +	__u8		d1_data_present:1;		/* must be 1 */ +	__u8		start_d2_burst_boundary:1;	/* must be zero */ +	__u8		reserved:6;			/* must be zero */ +#if 0 +	__u16		reserved1:5; +	__u16		d1_area_size:8;			/* must be 3 */ +	__u16		d2_offset:3;			/* must be zero */ +#endif +#elif defined(__LITTLE_ENDIAN_BITFIELD) +	__u8		reserved:6;			/* must be zero */ +	__u8	 	start_d2_burst_boundary:1;	/* must be zero */ +	__u8		d1_data_present:1;		/* must be 1 */ +#if 0 +	__u16		d2_offset:3;			/* must be zero */ +	__u16		d1_area_size:8;			/* must be 3 */ +	__u16		reserved1:5;			/* must be zero */ +#endif +#else +#error	"Please fix <asm/byteorder.h>" +#endif +#else +	__be32		fixed; +#endif +	__be32		d2_size; +} __attribute__((packed)); + +struct hippi_le_hdr { +#if defined (__BIG_ENDIAN_BITFIELD) +	__u8		fc:3; +	__u8		double_wide:1; +	__u8		message_type:4; +#elif defined(__LITTLE_ENDIAN_BITFIELD) +	__u8		message_type:4; +	__u8		double_wide:1; +	__u8		fc:3; +#endif +	__u8		dest_switch_addr[3]; +#if defined (__BIG_ENDIAN_BITFIELD) +	__u8		dest_addr_type:4, +			src_addr_type:4; +#elif defined(__LITTLE_ENDIAN_BITFIELD) +	__u8		src_addr_type:4, +			dest_addr_type:4; +#endif +	__u8		src_switch_addr[3]; +	__u16		reserved; +	__u8		daddr[HIPPI_ALEN]; +	__u16		locally_administered; +	__u8		saddr[HIPPI_ALEN]; +} __attribute__((packed)); + +#define HIPPI_OUI_LEN	3 +/* + * Looks like the dsap and ssap fields have been swapped by mistake in + * RFC 2067 "IP over HIPPI". + */ +struct hippi_snap_hdr { +	__u8	dsap;			/* always 0xAA */ +	__u8	ssap;			/* always 0xAA */ +	__u8	ctrl;			/* always 0x03 */ +	__u8	oui[HIPPI_OUI_LEN];	/* organizational universal id (zero)*/ +	__be16	ethertype;		/* packet type ID field */ +} __attribute__((packed)); + +struct hippi_hdr { +	struct hippi_fp_hdr	fp; +	struct hippi_le_hdr	le; +	struct hippi_snap_hdr	snap; +} __attribute__((packed)); + +#endif	/* _LINUX_IF_HIPPI_H */ diff --git a/include/uapi/linux/if_infiniband.h b/include/uapi/linux/if_infiniband.h new file mode 100644 index 00000000000..7d958475d4a --- /dev/null +++ b/include/uapi/linux/if_infiniband.h @@ -0,0 +1,29 @@ +/* + * This software is available to you under a choice of one of two + * licenses.  You may choose to be licensed under the terms of the GNU + * General Public License (GPL) Version 2, available at + * <http://www.fsf.org/copyleft/gpl.html>, or the OpenIB.org BSD + * license, available in the LICENSE.TXT file accompanying this + * software.  These details are also available at + * <http://www.openfabrics.org/software_license.htm>. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Copyright (c) 2004 Topspin Communications.  All rights reserved. + * + * $Id$ + */ + +#ifndef _LINUX_IF_INFINIBAND_H +#define _LINUX_IF_INFINIBAND_H + +#define INFINIBAND_ALEN		20	/* Octets in IPoIB HW addr	*/ + +#endif /* _LINUX_IF_INFINIBAND_H */ diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h new file mode 100644 index 00000000000..5c80cb11518 --- /dev/null +++ b/include/uapi/linux/if_link.h @@ -0,0 +1,429 @@ +#ifndef _UAPI_LINUX_IF_LINK_H +#define _UAPI_LINUX_IF_LINK_H + +#include <linux/types.h> +#include <linux/netlink.h> + +/* This struct should be in sync with struct rtnl_link_stats64 */ +struct rtnl_link_stats { +	__u32	rx_packets;		/* total packets received	*/ +	__u32	tx_packets;		/* total packets transmitted	*/ +	__u32	rx_bytes;		/* total bytes received 	*/ +	__u32	tx_bytes;		/* total bytes transmitted	*/ +	__u32	rx_errors;		/* bad packets received		*/ +	__u32	tx_errors;		/* packet transmit problems	*/ +	__u32	rx_dropped;		/* no space in linux buffers	*/ +	__u32	tx_dropped;		/* no space available in linux	*/ +	__u32	multicast;		/* multicast packets received	*/ +	__u32	collisions; + +	/* detailed rx_errors: */ +	__u32	rx_length_errors; +	__u32	rx_over_errors;		/* receiver ring buff overflow	*/ +	__u32	rx_crc_errors;		/* recved pkt with crc error	*/ +	__u32	rx_frame_errors;	/* recv'd frame alignment error */ +	__u32	rx_fifo_errors;		/* recv'r fifo overrun		*/ +	__u32	rx_missed_errors;	/* receiver missed packet	*/ + +	/* detailed tx_errors */ +	__u32	tx_aborted_errors; +	__u32	tx_carrier_errors; +	__u32	tx_fifo_errors; +	__u32	tx_heartbeat_errors; +	__u32	tx_window_errors; + +	/* for cslip etc */ +	__u32	rx_compressed; +	__u32	tx_compressed; +}; + +/* The main device statistics structure */ +struct rtnl_link_stats64 { +	__u64	rx_packets;		/* total packets received	*/ +	__u64	tx_packets;		/* total packets transmitted	*/ +	__u64	rx_bytes;		/* total bytes received 	*/ +	__u64	tx_bytes;		/* total bytes transmitted	*/ +	__u64	rx_errors;		/* bad packets received		*/ +	__u64	tx_errors;		/* packet transmit problems	*/ +	__u64	rx_dropped;		/* no space in linux buffers	*/ +	__u64	tx_dropped;		/* no space available in linux	*/ +	__u64	multicast;		/* multicast packets received	*/ +	__u64	collisions; + +	/* detailed rx_errors: */ +	__u64	rx_length_errors; +	__u64	rx_over_errors;		/* receiver ring buff overflow	*/ +	__u64	rx_crc_errors;		/* recved pkt with crc error	*/ +	__u64	rx_frame_errors;	/* recv'd frame alignment error */ +	__u64	rx_fifo_errors;		/* recv'r fifo overrun		*/ +	__u64	rx_missed_errors;	/* receiver missed packet	*/ + +	/* detailed tx_errors */ +	__u64	tx_aborted_errors; +	__u64	tx_carrier_errors; +	__u64	tx_fifo_errors; +	__u64	tx_heartbeat_errors; +	__u64	tx_window_errors; + +	/* for cslip etc */ +	__u64	rx_compressed; +	__u64	tx_compressed; +}; + +/* The struct should be in sync with struct ifmap */ +struct rtnl_link_ifmap { +	__u64	mem_start; +	__u64	mem_end; +	__u64	base_addr; +	__u16	irq; +	__u8	dma; +	__u8	port; +}; + +/* + * IFLA_AF_SPEC + *   Contains nested attributes for address family specific attributes. + *   Each address family may create a attribute with the address family + *   number as type and create its own attribute structure in it. + * + *   Example: + *   [IFLA_AF_SPEC] = { + *       [AF_INET] = { + *           [IFLA_INET_CONF] = ..., + *       }, + *       [AF_INET6] = { + *           [IFLA_INET6_FLAGS] = ..., + *           [IFLA_INET6_CONF] = ..., + *       } + *   } + */ + +enum { +	IFLA_UNSPEC, +	IFLA_ADDRESS, +	IFLA_BROADCAST, +	IFLA_IFNAME, +	IFLA_MTU, +	IFLA_LINK, +	IFLA_QDISC, +	IFLA_STATS, +	IFLA_COST, +#define IFLA_COST IFLA_COST +	IFLA_PRIORITY, +#define IFLA_PRIORITY IFLA_PRIORITY +	IFLA_MASTER, +#define IFLA_MASTER IFLA_MASTER +	IFLA_WIRELESS,		/* Wireless Extension event - see wireless.h */ +#define IFLA_WIRELESS IFLA_WIRELESS +	IFLA_PROTINFO,		/* Protocol specific information for a link */ +#define IFLA_PROTINFO IFLA_PROTINFO +	IFLA_TXQLEN, +#define IFLA_TXQLEN IFLA_TXQLEN +	IFLA_MAP, +#define IFLA_MAP IFLA_MAP +	IFLA_WEIGHT, +#define IFLA_WEIGHT IFLA_WEIGHT +	IFLA_OPERSTATE, +	IFLA_LINKMODE, +	IFLA_LINKINFO, +#define IFLA_LINKINFO IFLA_LINKINFO +	IFLA_NET_NS_PID, +	IFLA_IFALIAS, +	IFLA_NUM_VF,		/* Number of VFs if device is SR-IOV PF */ +	IFLA_VFINFO_LIST, +	IFLA_STATS64, +	IFLA_VF_PORTS, +	IFLA_PORT_SELF, +	IFLA_AF_SPEC, +	IFLA_GROUP,		/* Group the device belongs to */ +	IFLA_NET_NS_FD, +	IFLA_EXT_MASK,		/* Extended info mask, VFs, etc */ +	IFLA_PROMISCUITY,	/* Promiscuity count: > 0 means acts PROMISC */ +#define IFLA_PROMISCUITY IFLA_PROMISCUITY +	IFLA_NUM_TX_QUEUES, +	IFLA_NUM_RX_QUEUES, +	__IFLA_MAX +}; + + +#define IFLA_MAX (__IFLA_MAX - 1) + +/* backwards compatibility for userspace */ +#ifndef __KERNEL__ +#define IFLA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg)))) +#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg)) +#endif + +enum { +	IFLA_INET_UNSPEC, +	IFLA_INET_CONF, +	__IFLA_INET_MAX, +}; + +#define IFLA_INET_MAX (__IFLA_INET_MAX - 1) + +/* ifi_flags. + +   IFF_* flags. + +   The only change is: +   IFF_LOOPBACK, IFF_BROADCAST and IFF_POINTOPOINT are +   more not changeable by user. They describe link media +   characteristics and set by device driver. + +   Comments: +   - Combination IFF_BROADCAST|IFF_POINTOPOINT is invalid +   - If neither of these three flags are set; +     the interface is NBMA. + +   - IFF_MULTICAST does not mean anything special: +   multicasts can be used on all not-NBMA links. +   IFF_MULTICAST means that this media uses special encapsulation +   for multicast frames. Apparently, all IFF_POINTOPOINT and +   IFF_BROADCAST devices are able to use multicasts too. + */ + +/* IFLA_LINK. +   For usual devices it is equal ifi_index. +   If it is a "virtual interface" (f.e. tunnel), ifi_link +   can point to real physical interface (f.e. for bandwidth calculations), +   or maybe 0, what means, that real media is unknown (usual +   for IPIP tunnels, when route to endpoint is allowed to change) + */ + +/* Subtype attributes for IFLA_PROTINFO */ +enum { +	IFLA_INET6_UNSPEC, +	IFLA_INET6_FLAGS,	/* link flags			*/ +	IFLA_INET6_CONF,	/* sysctl parameters		*/ +	IFLA_INET6_STATS,	/* statistics			*/ +	IFLA_INET6_MCAST,	/* MC things. What of them?	*/ +	IFLA_INET6_CACHEINFO,	/* time values and max reasm size */ +	IFLA_INET6_ICMP6STATS,	/* statistics (icmpv6)		*/ +	__IFLA_INET6_MAX +}; + +#define IFLA_INET6_MAX	(__IFLA_INET6_MAX - 1) + +struct ifla_cacheinfo { +	__u32	max_reasm_len; +	__u32	tstamp;		/* ipv6InterfaceTable updated timestamp */ +	__u32	reachable_time; +	__u32	retrans_time; +}; + +enum { +	IFLA_INFO_UNSPEC, +	IFLA_INFO_KIND, +	IFLA_INFO_DATA, +	IFLA_INFO_XSTATS, +	__IFLA_INFO_MAX, +}; + +#define IFLA_INFO_MAX	(__IFLA_INFO_MAX - 1) + +/* VLAN section */ + +enum { +	IFLA_VLAN_UNSPEC, +	IFLA_VLAN_ID, +	IFLA_VLAN_FLAGS, +	IFLA_VLAN_EGRESS_QOS, +	IFLA_VLAN_INGRESS_QOS, +	__IFLA_VLAN_MAX, +}; + +#define IFLA_VLAN_MAX	(__IFLA_VLAN_MAX - 1) + +struct ifla_vlan_flags { +	__u32	flags; +	__u32	mask; +}; + +enum { +	IFLA_VLAN_QOS_UNSPEC, +	IFLA_VLAN_QOS_MAPPING, +	__IFLA_VLAN_QOS_MAX +}; + +#define IFLA_VLAN_QOS_MAX	(__IFLA_VLAN_QOS_MAX - 1) + +struct ifla_vlan_qos_mapping { +	__u32 from; +	__u32 to; +}; + +/* MACVLAN section */ +enum { +	IFLA_MACVLAN_UNSPEC, +	IFLA_MACVLAN_MODE, +	IFLA_MACVLAN_FLAGS, +	__IFLA_MACVLAN_MAX, +}; + +#define IFLA_MACVLAN_MAX (__IFLA_MACVLAN_MAX - 1) + +enum macvlan_mode { +	MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */ +	MACVLAN_MODE_VEPA    = 2, /* talk to other ports through ext bridge */ +	MACVLAN_MODE_BRIDGE  = 4, /* talk to bridge ports directly */ +	MACVLAN_MODE_PASSTHRU = 8,/* take over the underlying device */ +}; + +#define MACVLAN_FLAG_NOPROMISC	1 + +/* VXLAN section */ +enum { +	IFLA_VXLAN_UNSPEC, +	IFLA_VXLAN_ID, +	IFLA_VXLAN_GROUP, +	IFLA_VXLAN_LINK, +	IFLA_VXLAN_LOCAL, +	IFLA_VXLAN_TTL, +	IFLA_VXLAN_TOS, +	IFLA_VXLAN_LEARNING, +	IFLA_VXLAN_AGEING, +	IFLA_VXLAN_LIMIT, +	IFLA_VXLAN_PORT_RANGE, +	__IFLA_VXLAN_MAX +}; +#define IFLA_VXLAN_MAX	(__IFLA_VXLAN_MAX - 1) + +struct ifla_vxlan_port_range { +	__be16	low; +	__be16	high; +}; + +/* SR-IOV virtual function management section */ + +enum { +	IFLA_VF_INFO_UNSPEC, +	IFLA_VF_INFO, +	__IFLA_VF_INFO_MAX, +}; + +#define IFLA_VF_INFO_MAX (__IFLA_VF_INFO_MAX - 1) + +enum { +	IFLA_VF_UNSPEC, +	IFLA_VF_MAC,		/* Hardware queue specific attributes */ +	IFLA_VF_VLAN, +	IFLA_VF_TX_RATE,	/* TX Bandwidth Allocation */ +	IFLA_VF_SPOOFCHK,	/* Spoof Checking on/off switch */ +	__IFLA_VF_MAX, +}; + +#define IFLA_VF_MAX (__IFLA_VF_MAX - 1) + +struct ifla_vf_mac { +	__u32 vf; +	__u8 mac[32]; /* MAX_ADDR_LEN */ +}; + +struct ifla_vf_vlan { +	__u32 vf; +	__u32 vlan; /* 0 - 4095, 0 disables VLAN filter */ +	__u32 qos; +}; + +struct ifla_vf_tx_rate { +	__u32 vf; +	__u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */ +}; + +struct ifla_vf_spoofchk { +	__u32 vf; +	__u32 setting; +}; + +/* VF ports management section + * + *	Nested layout of set/get msg is: + * + *		[IFLA_NUM_VF] + *		[IFLA_VF_PORTS] + *			[IFLA_VF_PORT] + *				[IFLA_PORT_*], ... + *			[IFLA_VF_PORT] + *				[IFLA_PORT_*], ... + *			... + *		[IFLA_PORT_SELF] + *			[IFLA_PORT_*], ... + */ + +enum { +	IFLA_VF_PORT_UNSPEC, +	IFLA_VF_PORT,			/* nest */ +	__IFLA_VF_PORT_MAX, +}; + +#define IFLA_VF_PORT_MAX (__IFLA_VF_PORT_MAX - 1) + +enum { +	IFLA_PORT_UNSPEC, +	IFLA_PORT_VF,			/* __u32 */ +	IFLA_PORT_PROFILE,		/* string */ +	IFLA_PORT_VSI_TYPE,		/* 802.1Qbg (pre-)standard VDP */ +	IFLA_PORT_INSTANCE_UUID,	/* binary UUID */ +	IFLA_PORT_HOST_UUID,		/* binary UUID */ +	IFLA_PORT_REQUEST,		/* __u8 */ +	IFLA_PORT_RESPONSE,		/* __u16, output only */ +	__IFLA_PORT_MAX, +}; + +#define IFLA_PORT_MAX (__IFLA_PORT_MAX - 1) + +#define PORT_PROFILE_MAX	40 +#define PORT_UUID_MAX		16 +#define PORT_SELF_VF		-1 + +enum { +	PORT_REQUEST_PREASSOCIATE = 0, +	PORT_REQUEST_PREASSOCIATE_RR, +	PORT_REQUEST_ASSOCIATE, +	PORT_REQUEST_DISASSOCIATE, +}; + +enum { +	PORT_VDP_RESPONSE_SUCCESS = 0, +	PORT_VDP_RESPONSE_INVALID_FORMAT, +	PORT_VDP_RESPONSE_INSUFFICIENT_RESOURCES, +	PORT_VDP_RESPONSE_UNUSED_VTID, +	PORT_VDP_RESPONSE_VTID_VIOLATION, +	PORT_VDP_RESPONSE_VTID_VERSION_VIOALTION, +	PORT_VDP_RESPONSE_OUT_OF_SYNC, +	/* 0x08-0xFF reserved for future VDP use */ +	PORT_PROFILE_RESPONSE_SUCCESS = 0x100, +	PORT_PROFILE_RESPONSE_INPROGRESS, +	PORT_PROFILE_RESPONSE_INVALID, +	PORT_PROFILE_RESPONSE_BADSTATE, +	PORT_PROFILE_RESPONSE_INSUFFICIENT_RESOURCES, +	PORT_PROFILE_RESPONSE_ERROR, +}; + +struct ifla_port_vsi { +	__u8 vsi_mgr_id; +	__u8 vsi_type_id[3]; +	__u8 vsi_type_version; +	__u8 pad[3]; +}; + + +/* IPoIB section */ + +enum { +	IFLA_IPOIB_UNSPEC, +	IFLA_IPOIB_PKEY, +	IFLA_IPOIB_MODE, +	IFLA_IPOIB_UMCAST, +	__IFLA_IPOIB_MAX +}; + +enum { +	IPOIB_MODE_DATAGRAM  = 0, /* using unreliable datagram QPs */ +	IPOIB_MODE_CONNECTED = 1, /* using connected QPs */ +}; + +#define IFLA_IPOIB_MAX (__IFLA_IPOIB_MAX - 1) + +#endif /* _UAPI_LINUX_IF_LINK_H */ diff --git a/include/uapi/linux/if_ltalk.h b/include/uapi/linux/if_ltalk.h new file mode 100644 index 00000000000..b92c1fb6ac1 --- /dev/null +++ b/include/uapi/linux/if_ltalk.h @@ -0,0 +1,9 @@ +#ifndef _UAPI__LINUX_LTALK_H +#define _UAPI__LINUX_LTALK_H + +#define LTALK_HLEN		1 +#define LTALK_MTU		600 +#define LTALK_ALEN		1 + + +#endif /* _UAPI__LINUX_LTALK_H */ diff --git a/include/uapi/linux/if_packet.h b/include/uapi/linux/if_packet.h new file mode 100644 index 00000000000..f3799295d23 --- /dev/null +++ b/include/uapi/linux/if_packet.h @@ -0,0 +1,272 @@ +#ifndef __LINUX_IF_PACKET_H +#define __LINUX_IF_PACKET_H + +#include <linux/types.h> + +struct sockaddr_pkt { +	unsigned short spkt_family; +	unsigned char spkt_device[14]; +	__be16 spkt_protocol; +}; + +struct sockaddr_ll { +	unsigned short	sll_family; +	__be16		sll_protocol; +	int		sll_ifindex; +	unsigned short	sll_hatype; +	unsigned char	sll_pkttype; +	unsigned char	sll_halen; +	unsigned char	sll_addr[8]; +}; + +/* Packet types */ + +#define PACKET_HOST		0		/* To us		*/ +#define PACKET_BROADCAST	1		/* To all		*/ +#define PACKET_MULTICAST	2		/* To group		*/ +#define PACKET_OTHERHOST	3		/* To someone else 	*/ +#define PACKET_OUTGOING		4		/* Outgoing of any type */ +/* These ones are invisible by user level */ +#define PACKET_LOOPBACK		5		/* MC/BRD frame looped back */ +#define PACKET_FASTROUTE	6		/* Fastrouted frame	*/ + +/* Packet socket options */ + +#define PACKET_ADD_MEMBERSHIP		1 +#define PACKET_DROP_MEMBERSHIP		2 +#define PACKET_RECV_OUTPUT		3 +/* Value 4 is still used by obsolete turbo-packet. */ +#define PACKET_RX_RING			5 +#define PACKET_STATISTICS		6 +#define PACKET_COPY_THRESH		7 +#define PACKET_AUXDATA			8 +#define PACKET_ORIGDEV			9 +#define PACKET_VERSION			10 +#define PACKET_HDRLEN			11 +#define PACKET_RESERVE			12 +#define PACKET_TX_RING			13 +#define PACKET_LOSS			14 +#define PACKET_VNET_HDR			15 +#define PACKET_TX_TIMESTAMP		16 +#define PACKET_TIMESTAMP		17 +#define PACKET_FANOUT			18 + +#define PACKET_FANOUT_HASH		0 +#define PACKET_FANOUT_LB		1 +#define PACKET_FANOUT_CPU		2 +#define PACKET_FANOUT_FLAG_DEFRAG	0x8000 + +struct tpacket_stats { +	unsigned int	tp_packets; +	unsigned int	tp_drops; +}; + +struct tpacket_stats_v3 { +	unsigned int	tp_packets; +	unsigned int	tp_drops; +	unsigned int	tp_freeze_q_cnt; +}; + +union tpacket_stats_u { +	struct tpacket_stats stats1; +	struct tpacket_stats_v3 stats3; +}; + +struct tpacket_auxdata { +	__u32		tp_status; +	__u32		tp_len; +	__u32		tp_snaplen; +	__u16		tp_mac; +	__u16		tp_net; +	__u16		tp_vlan_tci; +	__u16		tp_padding; +}; + +/* Rx ring - header status */ +#define TP_STATUS_KERNEL	0x0 +#define TP_STATUS_USER		0x1 +#define TP_STATUS_COPY		0x2 +#define TP_STATUS_LOSING	0x4 +#define TP_STATUS_CSUMNOTREADY	0x8 +#define TP_STATUS_VLAN_VALID   0x10 /* auxdata has valid tp_vlan_tci */ +#define TP_STATUS_BLK_TMO	0x20 + +/* Tx ring - header status */ +#define TP_STATUS_AVAILABLE	0x0 +#define TP_STATUS_SEND_REQUEST	0x1 +#define TP_STATUS_SENDING	0x2 +#define TP_STATUS_WRONG_FORMAT	0x4 + +/* Rx ring - feature request bits */ +#define TP_FT_REQ_FILL_RXHASH	0x1 + +struct tpacket_hdr { +	unsigned long	tp_status; +	unsigned int	tp_len; +	unsigned int	tp_snaplen; +	unsigned short	tp_mac; +	unsigned short	tp_net; +	unsigned int	tp_sec; +	unsigned int	tp_usec; +}; + +#define TPACKET_ALIGNMENT	16 +#define TPACKET_ALIGN(x)	(((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1)) +#define TPACKET_HDRLEN		(TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll)) + +struct tpacket2_hdr { +	__u32		tp_status; +	__u32		tp_len; +	__u32		tp_snaplen; +	__u16		tp_mac; +	__u16		tp_net; +	__u32		tp_sec; +	__u32		tp_nsec; +	__u16		tp_vlan_tci; +	__u16		tp_padding; +}; + +struct tpacket_hdr_variant1 { +	__u32	tp_rxhash; +	__u32	tp_vlan_tci; +}; + +struct tpacket3_hdr { +	__u32		tp_next_offset; +	__u32		tp_sec; +	__u32		tp_nsec; +	__u32		tp_snaplen; +	__u32		tp_len; +	__u32		tp_status; +	__u16		tp_mac; +	__u16		tp_net; +	/* pkt_hdr variants */ +	union { +		struct tpacket_hdr_variant1 hv1; +	}; +}; + +struct tpacket_bd_ts { +	unsigned int ts_sec; +	union { +		unsigned int ts_usec; +		unsigned int ts_nsec; +	}; +}; + +struct tpacket_hdr_v1 { +	__u32	block_status; +	__u32	num_pkts; +	__u32	offset_to_first_pkt; + +	/* Number of valid bytes (including padding) +	 * blk_len <= tp_block_size +	 */ +	__u32	blk_len; + +	/* +	 * Quite a few uses of sequence number: +	 * 1. Make sure cache flush etc worked. +	 *    Well, one can argue - why not use the increasing ts below? +	 *    But look at 2. below first. +	 * 2. When you pass around blocks to other user space decoders, +	 *    you can see which blk[s] is[are] outstanding etc. +	 * 3. Validate kernel code. +	 */ +	__aligned_u64	seq_num; + +	/* +	 * ts_last_pkt: +	 * +	 * Case 1.	Block has 'N'(N >=1) packets and TMO'd(timed out) +	 *		ts_last_pkt == 'time-stamp of last packet' and NOT the +	 *		time when the timer fired and the block was closed. +	 *		By providing the ts of the last packet we can absolutely +	 *		guarantee that time-stamp wise, the first packet in the +	 *		next block will never precede the last packet of the +	 *		previous block. +	 * Case 2.	Block has zero packets and TMO'd +	 *		ts_last_pkt = time when the timer fired and the block +	 *		was closed. +	 * Case 3.	Block has 'N' packets and NO TMO. +	 *		ts_last_pkt = time-stamp of the last pkt in the block. +	 * +	 * ts_first_pkt: +	 *		Is always the time-stamp when the block was opened. +	 *		Case a)	ZERO packets +	 *			No packets to deal with but atleast you know the +	 *			time-interval of this block. +	 *		Case b) Non-zero packets +	 *			Use the ts of the first packet in the block. +	 * +	 */ +	struct tpacket_bd_ts	ts_first_pkt, ts_last_pkt; +}; + +union tpacket_bd_header_u { +	struct tpacket_hdr_v1 bh1; +}; + +struct tpacket_block_desc { +	__u32 version; +	__u32 offset_to_priv; +	union tpacket_bd_header_u hdr; +}; + +#define TPACKET2_HDRLEN		(TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll)) +#define TPACKET3_HDRLEN		(TPACKET_ALIGN(sizeof(struct tpacket3_hdr)) + sizeof(struct sockaddr_ll)) + +enum tpacket_versions { +	TPACKET_V1, +	TPACKET_V2, +	TPACKET_V3 +}; + +/* +   Frame structure: + +   - Start. Frame must be aligned to TPACKET_ALIGNMENT=16 +   - struct tpacket_hdr +   - pad to TPACKET_ALIGNMENT=16 +   - struct sockaddr_ll +   - Gap, chosen so that packet data (Start+tp_net) alignes to TPACKET_ALIGNMENT=16 +   - Start+tp_mac: [ Optional MAC header ] +   - Start+tp_net: Packet data, aligned to TPACKET_ALIGNMENT=16. +   - Pad to align to TPACKET_ALIGNMENT=16 + */ + +struct tpacket_req { +	unsigned int	tp_block_size;	/* Minimal size of contiguous block */ +	unsigned int	tp_block_nr;	/* Number of blocks */ +	unsigned int	tp_frame_size;	/* Size of frame */ +	unsigned int	tp_frame_nr;	/* Total number of frames */ +}; + +struct tpacket_req3 { +	unsigned int	tp_block_size;	/* Minimal size of contiguous block */ +	unsigned int	tp_block_nr;	/* Number of blocks */ +	unsigned int	tp_frame_size;	/* Size of frame */ +	unsigned int	tp_frame_nr;	/* Total number of frames */ +	unsigned int	tp_retire_blk_tov; /* timeout in msecs */ +	unsigned int	tp_sizeof_priv; /* offset to private data area */ +	unsigned int	tp_feature_req_word; +}; + +union tpacket_req_u { +	struct tpacket_req	req; +	struct tpacket_req3	req3; +}; + +struct packet_mreq { +	int		mr_ifindex; +	unsigned short	mr_type; +	unsigned short	mr_alen; +	unsigned char	mr_address[8]; +}; + +#define PACKET_MR_MULTICAST	0 +#define PACKET_MR_PROMISC	1 +#define PACKET_MR_ALLMULTI	2 +#define PACKET_MR_UNICAST	3 + +#endif diff --git a/include/uapi/linux/if_phonet.h b/include/uapi/linux/if_phonet.h new file mode 100644 index 00000000000..f7ad9e24eb3 --- /dev/null +++ b/include/uapi/linux/if_phonet.h @@ -0,0 +1,16 @@ +/* + * File: if_phonet.h + * + * Phonet interface kernel definitions + * + * Copyright (C) 2008 Nokia Corporation. All rights reserved. + */ +#ifndef _UAPILINUX_IF_PHONET_H +#define _UAPILINUX_IF_PHONET_H + +#define PHONET_MIN_MTU		6	/* pn_length = 0 */ +#define PHONET_MAX_MTU		65541	/* pn_length = 0xffff */ +#define PHONET_DEV_MTU		PHONET_MAX_MTU + + +#endif /* _UAPILINUX_IF_PHONET_H */ diff --git a/include/uapi/linux/if_plip.h b/include/uapi/linux/if_plip.h new file mode 100644 index 00000000000..6298c7e88b2 --- /dev/null +++ b/include/uapi/linux/if_plip.h @@ -0,0 +1,27 @@ +/* + *	NET3	PLIP tuning facilities for the new Niibe PLIP. + * + *	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. + * + */ +  +#ifndef _LINUX_IF_PLIP_H +#define _LINUX_IF_PLIP_H + +#include <linux/sockios.h> + +#define	SIOCDEVPLIP	SIOCDEVPRIVATE + +struct plipconf { +	unsigned short pcmd; +	unsigned long  nibble; +	unsigned long  trigger; +}; + +#define PLIP_GET_TIMEOUT	0x1 +#define PLIP_SET_TIMEOUT	0x2 + +#endif diff --git a/include/uapi/linux/if_ppp.h b/include/uapi/linux/if_ppp.h new file mode 100644 index 00000000000..9048fabb7a4 --- /dev/null +++ b/include/uapi/linux/if_ppp.h @@ -0,0 +1 @@ +#include <linux/ppp-ioctl.h> diff --git a/include/uapi/linux/if_pppol2tp.h b/include/uapi/linux/if_pppol2tp.h new file mode 100644 index 00000000000..163e8adac2d --- /dev/null +++ b/include/uapi/linux/if_pppol2tp.h @@ -0,0 +1,104 @@ +/*************************************************************************** + * Linux PPP over L2TP (PPPoL2TP) Socket Implementation (RFC 2661) + * + * This file supplies definitions required by the PPP over L2TP driver + * (l2tp_ppp.c).  All version information wrt this file is located in l2tp_ppp.c + * + * License: + *		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. + * + */ + +#ifndef _UAPI__LINUX_IF_PPPOL2TP_H +#define _UAPI__LINUX_IF_PPPOL2TP_H + +#include <linux/types.h> + + +/* Structure used to connect() the socket to a particular tunnel UDP + * socket over IPv4. + */ +struct pppol2tp_addr { +	__kernel_pid_t	pid;		/* pid that owns the fd. +					 * 0 => current */ +	int	fd;			/* FD of UDP socket to use */ + +	struct sockaddr_in addr;	/* IP address and port to send to */ + +	__u16 s_tunnel, s_session;	/* For matching incoming packets */ +	__u16 d_tunnel, d_session;	/* For sending outgoing packets */ +}; + +/* Structure used to connect() the socket to a particular tunnel UDP + * socket over IPv6. + */ +struct pppol2tpin6_addr { +	__kernel_pid_t	pid;		/* pid that owns the fd. +					 * 0 => current */ +	int	fd;			/* FD of UDP socket to use */ + +	__u16 s_tunnel, s_session;	/* For matching incoming packets */ +	__u16 d_tunnel, d_session;	/* For sending outgoing packets */ + +	struct sockaddr_in6 addr;	/* IP address and port to send to */ +}; + +/* The L2TPv3 protocol changes tunnel and session ids from 16 to 32 + * bits. So we need a different sockaddr structure. + */ +struct pppol2tpv3_addr { +	__kernel_pid_t	pid;		/* pid that owns the fd. +					 * 0 => current */ +	int	fd;			/* FD of UDP or IP socket to use */ + +	struct sockaddr_in addr;	/* IP address and port to send to */ + +	__u32 s_tunnel, s_session;	/* For matching incoming packets */ +	__u32 d_tunnel, d_session;	/* For sending outgoing packets */ +}; + +struct pppol2tpv3in6_addr { +	__kernel_pid_t	pid;		/* pid that owns the fd. +					 * 0 => current */ +	int	fd;			/* FD of UDP or IP socket to use */ + +	__u32 s_tunnel, s_session;	/* For matching incoming packets */ +	__u32 d_tunnel, d_session;	/* For sending outgoing packets */ + +	struct sockaddr_in6 addr;	/* IP address and port to send to */ +}; + +/* Socket options: + * DEBUG	- bitmask of debug message categories + * SENDSEQ	- 0 => don't send packets with sequence numbers + *		  1 => send packets with sequence numbers + * RECVSEQ	- 0 => receive packet sequence numbers are optional + *		  1 => drop receive packets without sequence numbers + * LNSMODE	- 0 => act as LAC. + *		  1 => act as LNS. + * REORDERTO	- reorder timeout (in millisecs). If 0, don't try to reorder. + */ +enum { +	PPPOL2TP_SO_DEBUG	= 1, +	PPPOL2TP_SO_RECVSEQ	= 2, +	PPPOL2TP_SO_SENDSEQ	= 3, +	PPPOL2TP_SO_LNSMODE	= 4, +	PPPOL2TP_SO_REORDERTO	= 5, +}; + +/* Debug message categories for the DEBUG socket option */ +enum { +	PPPOL2TP_MSG_DEBUG	= (1 << 0),	/* verbose debug (if +						 * compiled in) */ +	PPPOL2TP_MSG_CONTROL	= (1 << 1),	/* userspace - kernel +						 * interface */ +	PPPOL2TP_MSG_SEQ	= (1 << 2),	/* sequence numbers */ +	PPPOL2TP_MSG_DATA	= (1 << 3),	/* data packets */ +}; + + + +#endif /* _UAPI__LINUX_IF_PPPOL2TP_H */ diff --git a/include/uapi/linux/if_pppox.h b/include/uapi/linux/if_pppox.h new file mode 100644 index 00000000000..0b46fd57c8f --- /dev/null +++ b/include/uapi/linux/if_pppox.h @@ -0,0 +1,156 @@ +/*************************************************************************** + * Linux PPP over X - Generic PPP transport layer sockets + * Linux PPP over Ethernet (PPPoE) Socket Implementation (RFC 2516)  + * + * This file supplies definitions required by the PPP over Ethernet driver + * (pppox.c).  All version information wrt this file is located in pppox.c + * + * License: + *		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. + * + */ + +#ifndef _UAPI__LINUX_IF_PPPOX_H +#define _UAPI__LINUX_IF_PPPOX_H + + +#include <linux/types.h> +#include <asm/byteorder.h> + +#include <linux/socket.h> +#include <linux/if_ether.h> +#include <linux/if_pppol2tp.h> + +/* For user-space programs to pick up these definitions + * which they wouldn't get otherwise without defining __KERNEL__ + */ +#ifndef AF_PPPOX +#define AF_PPPOX	24 +#define PF_PPPOX	AF_PPPOX +#endif /* !(AF_PPPOX) */ + +/************************************************************************  + * PPPoE addressing definition  + */  +typedef __be16 sid_t; +struct pppoe_addr { +	sid_t         sid;                    /* Session identifier */ +	unsigned char remote[ETH_ALEN];       /* Remote address */ +	char          dev[IFNAMSIZ];          /* Local device to use */ +};  +  +/************************************************************************  + * PPTP addressing definition + */ +struct pptp_addr { +	__be16		call_id; +	struct in_addr	sin_addr; +}; + +/************************************************************************ + * Protocols supported by AF_PPPOX + */ +#define PX_PROTO_OE    0 /* Currently just PPPoE */ +#define PX_PROTO_OL2TP 1 /* Now L2TP also */ +#define PX_PROTO_PPTP  2 +#define PX_MAX_PROTO   3 + +struct sockaddr_pppox { +	__kernel_sa_family_t sa_family;       /* address family, AF_PPPOX */ +	unsigned int    sa_protocol;          /* protocol identifier */ +	union { +		struct pppoe_addr  pppoe; +		struct pptp_addr   pptp; +	} sa_addr; +} __packed; + +/* The use of the above union isn't viable because the size of this + * struct must stay fixed over time -- applications use sizeof(struct + * sockaddr_pppox) to fill it. We use a protocol specific sockaddr + * type instead. + */ +struct sockaddr_pppol2tp { +	__kernel_sa_family_t sa_family; /* address family, AF_PPPOX */ +	unsigned int    sa_protocol;    /* protocol identifier */ +	struct pppol2tp_addr pppol2tp; +} __packed; + +struct sockaddr_pppol2tpin6 { +	__kernel_sa_family_t sa_family; /* address family, AF_PPPOX */ +	unsigned int    sa_protocol;    /* protocol identifier */ +	struct pppol2tpin6_addr pppol2tp; +} __packed; + +/* The L2TPv3 protocol changes tunnel and session ids from 16 to 32 + * bits. So we need a different sockaddr structure. + */ +struct sockaddr_pppol2tpv3 { +	__kernel_sa_family_t sa_family; /* address family, AF_PPPOX */ +	unsigned int    sa_protocol;    /* protocol identifier */ +	struct pppol2tpv3_addr pppol2tp; +} __packed; + +struct sockaddr_pppol2tpv3in6 { +	__kernel_sa_family_t sa_family; /* address family, AF_PPPOX */ +	unsigned int    sa_protocol;    /* protocol identifier */ +	struct pppol2tpv3in6_addr pppol2tp; +} __packed; + +/********************************************************************* + * + * ioctl interface for defining forwarding of connections + * + ********************************************************************/ + +#define PPPOEIOCSFWD	_IOW(0xB1 ,0, size_t) +#define PPPOEIOCDFWD	_IO(0xB1 ,1) +/*#define PPPOEIOCGFWD	_IOWR(0xB1,2, size_t)*/ + +/* Codes to identify message types */ +#define PADI_CODE	0x09 +#define PADO_CODE	0x07 +#define PADR_CODE	0x19 +#define PADS_CODE	0x65 +#define PADT_CODE	0xa7 +struct pppoe_tag { +	__be16 tag_type; +	__be16 tag_len; +	char tag_data[0]; +} __attribute__ ((packed)); + +/* Tag identifiers */ +#define PTT_EOL		__cpu_to_be16(0x0000) +#define PTT_SRV_NAME	__cpu_to_be16(0x0101) +#define PTT_AC_NAME	__cpu_to_be16(0x0102) +#define PTT_HOST_UNIQ	__cpu_to_be16(0x0103) +#define PTT_AC_COOKIE	__cpu_to_be16(0x0104) +#define PTT_VENDOR 	__cpu_to_be16(0x0105) +#define PTT_RELAY_SID	__cpu_to_be16(0x0110) +#define PTT_SRV_ERR     __cpu_to_be16(0x0201) +#define PTT_SYS_ERR  	__cpu_to_be16(0x0202) +#define PTT_GEN_ERR  	__cpu_to_be16(0x0203) + +struct pppoe_hdr { +#if defined(__LITTLE_ENDIAN_BITFIELD) +	__u8 ver : 4; +	__u8 type : 4; +#elif defined(__BIG_ENDIAN_BITFIELD) +	__u8 type : 4; +	__u8 ver : 4; +#else +#error	"Please fix <asm/byteorder.h>" +#endif +	__u8 code; +	__be16 sid; +	__be16 length; +	struct pppoe_tag tag[0]; +} __packed; + +/* Length of entire PPPoE + PPP header */ +#define PPPOE_SES_HLEN	8 + + +#endif /* _UAPI__LINUX_IF_PPPOX_H */ diff --git a/include/uapi/linux/if_slip.h b/include/uapi/linux/if_slip.h new file mode 100644 index 00000000000..1eb4e3a8397 --- /dev/null +++ b/include/uapi/linux/if_slip.h @@ -0,0 +1,30 @@ +/* + *	Swansea University Computer Society	NET3 + *	 + *	This file declares the constants of special use with the SLIP/CSLIP/ + *	KISS TNC driver. + */ +  +#ifndef __LINUX_SLIP_H +#define __LINUX_SLIP_H + +#define		SL_MODE_SLIP		0 +#define		SL_MODE_CSLIP		1 +#define 	SL_MODE_KISS		4 + +#define		SL_OPT_SIXBIT		2 +#define		SL_OPT_ADAPTIVE		8 + +/* + *	VSV = ioctl for keepalive & outfill in SLIP driver  + */ +  +#define SIOCSKEEPALIVE	(SIOCDEVPRIVATE)		/* Set keepalive timeout in sec */ +#define SIOCGKEEPALIVE	(SIOCDEVPRIVATE+1)		/* Get keepalive timeout */ +#define SIOCSOUTFILL	(SIOCDEVPRIVATE+2)		/* Set outfill timeout */ +#define	SIOCGOUTFILL	(SIOCDEVPRIVATE+3)		/* Get outfill timeout */ +#define SIOCSLEASE	(SIOCDEVPRIVATE+4)		/* Set "leased" line type */ +#define	SIOCGLEASE	(SIOCDEVPRIVATE+5)		/* Get line type */ + + +#endif diff --git a/include/uapi/linux/if_team.h b/include/uapi/linux/if_team.h new file mode 100644 index 00000000000..7b8fa339de3 --- /dev/null +++ b/include/uapi/linux/if_team.h @@ -0,0 +1,107 @@ +/* + * include/linux/if_team.h - Network team device driver header + * Copyright (c) 2011 Jiri Pirko <jpirko@redhat.com> + * + * 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. + */ + +#ifndef _UAPI_LINUX_IF_TEAM_H_ +#define _UAPI_LINUX_IF_TEAM_H_ + + +#define TEAM_STRING_MAX_LEN 32 + +/********************************** + * NETLINK_GENERIC netlink family. + **********************************/ + +enum { +	TEAM_CMD_NOOP, +	TEAM_CMD_OPTIONS_SET, +	TEAM_CMD_OPTIONS_GET, +	TEAM_CMD_PORT_LIST_GET, + +	__TEAM_CMD_MAX, +	TEAM_CMD_MAX = (__TEAM_CMD_MAX - 1), +}; + +enum { +	TEAM_ATTR_UNSPEC, +	TEAM_ATTR_TEAM_IFINDEX,		/* u32 */ +	TEAM_ATTR_LIST_OPTION,		/* nest */ +	TEAM_ATTR_LIST_PORT,		/* nest */ + +	__TEAM_ATTR_MAX, +	TEAM_ATTR_MAX = __TEAM_ATTR_MAX - 1, +}; + +/* Nested layout of get/set msg: + * + *	[TEAM_ATTR_LIST_OPTION] + *		[TEAM_ATTR_ITEM_OPTION] + *			[TEAM_ATTR_OPTION_*], ... + *		[TEAM_ATTR_ITEM_OPTION] + *			[TEAM_ATTR_OPTION_*], ... + *		... + *	[TEAM_ATTR_LIST_PORT] + *		[TEAM_ATTR_ITEM_PORT] + *			[TEAM_ATTR_PORT_*], ... + *		[TEAM_ATTR_ITEM_PORT] + *			[TEAM_ATTR_PORT_*], ... + *		... + */ + +enum { +	TEAM_ATTR_ITEM_OPTION_UNSPEC, +	TEAM_ATTR_ITEM_OPTION,		/* nest */ + +	__TEAM_ATTR_ITEM_OPTION_MAX, +	TEAM_ATTR_ITEM_OPTION_MAX = __TEAM_ATTR_ITEM_OPTION_MAX - 1, +}; + +enum { +	TEAM_ATTR_OPTION_UNSPEC, +	TEAM_ATTR_OPTION_NAME,		/* string */ +	TEAM_ATTR_OPTION_CHANGED,	/* flag */ +	TEAM_ATTR_OPTION_TYPE,		/* u8 */ +	TEAM_ATTR_OPTION_DATA,		/* dynamic */ +	TEAM_ATTR_OPTION_REMOVED,	/* flag */ +	TEAM_ATTR_OPTION_PORT_IFINDEX,	/* u32 */ /* for per-port options */ +	TEAM_ATTR_OPTION_ARRAY_INDEX,	/* u32 */ /* for array options */ + +	__TEAM_ATTR_OPTION_MAX, +	TEAM_ATTR_OPTION_MAX = __TEAM_ATTR_OPTION_MAX - 1, +}; + +enum { +	TEAM_ATTR_ITEM_PORT_UNSPEC, +	TEAM_ATTR_ITEM_PORT,		/* nest */ + +	__TEAM_ATTR_ITEM_PORT_MAX, +	TEAM_ATTR_ITEM_PORT_MAX = __TEAM_ATTR_ITEM_PORT_MAX - 1, +}; + +enum { +	TEAM_ATTR_PORT_UNSPEC, +	TEAM_ATTR_PORT_IFINDEX,		/* u32 */ +	TEAM_ATTR_PORT_CHANGED,		/* flag */ +	TEAM_ATTR_PORT_LINKUP,		/* flag */ +	TEAM_ATTR_PORT_SPEED,		/* u32 */ +	TEAM_ATTR_PORT_DUPLEX,		/* u8 */ +	TEAM_ATTR_PORT_REMOVED,		/* flag */ + +	__TEAM_ATTR_PORT_MAX, +	TEAM_ATTR_PORT_MAX = __TEAM_ATTR_PORT_MAX - 1, +}; + +/* + * NETLINK_GENERIC related info + */ +#define TEAM_GENL_NAME "team" +#define TEAM_GENL_VERSION 0x1 +#define TEAM_GENL_CHANGE_EVENT_MC_GRP_NAME "change_event" + +#endif /* _UAPI_LINUX_IF_TEAM_H_ */ diff --git a/include/uapi/linux/if_tun.h b/include/uapi/linux/if_tun.h new file mode 100644 index 00000000000..25a585ce23e --- /dev/null +++ b/include/uapi/linux/if_tun.h @@ -0,0 +1,94 @@ +/* + *  Universal TUN/TAP device driver. + *  Copyright (C) 1999-2000 Maxim Krasnyansky <max_mk@yahoo.com> + * + *  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. + */ + +#ifndef _UAPI__IF_TUN_H +#define _UAPI__IF_TUN_H + +#include <linux/types.h> +#include <linux/if_ether.h> +#include <linux/filter.h> + +/* Read queue size */ +#define TUN_READQ_SIZE	500 + +/* TUN device flags */ +#define TUN_TUN_DEV 	0x0001	 +#define TUN_TAP_DEV	0x0002 +#define TUN_TYPE_MASK   0x000f + +#define TUN_FASYNC	0x0010 +#define TUN_NOCHECKSUM	0x0020 +#define TUN_NO_PI	0x0040 +#define TUN_ONE_QUEUE	0x0080 +#define TUN_PERSIST 	0x0100	 +#define TUN_VNET_HDR 	0x0200 + +/* Ioctl defines */ +#define TUNSETNOCSUM  _IOW('T', 200, int)  +#define TUNSETDEBUG   _IOW('T', 201, int)  +#define TUNSETIFF     _IOW('T', 202, int)  +#define TUNSETPERSIST _IOW('T', 203, int)  +#define TUNSETOWNER   _IOW('T', 204, int) +#define TUNSETLINK    _IOW('T', 205, int) +#define TUNSETGROUP   _IOW('T', 206, int) +#define TUNGETFEATURES _IOR('T', 207, unsigned int) +#define TUNSETOFFLOAD  _IOW('T', 208, unsigned int) +#define TUNSETTXFILTER _IOW('T', 209, unsigned int) +#define TUNGETIFF      _IOR('T', 210, unsigned int) +#define TUNGETSNDBUF   _IOR('T', 211, int) +#define TUNSETSNDBUF   _IOW('T', 212, int) +#define TUNATTACHFILTER _IOW('T', 213, struct sock_fprog) +#define TUNDETACHFILTER _IOW('T', 214, struct sock_fprog) +#define TUNGETVNETHDRSZ _IOR('T', 215, int) +#define TUNSETVNETHDRSZ _IOW('T', 216, int) + +/* TUNSETIFF ifr flags */ +#define IFF_TUN		0x0001 +#define IFF_TAP		0x0002 +#define IFF_NO_PI	0x1000 +#define IFF_ONE_QUEUE	0x2000 +#define IFF_VNET_HDR	0x4000 +#define IFF_TUN_EXCL	0x8000 + +/* Features for GSO (TUNSETOFFLOAD). */ +#define TUN_F_CSUM	0x01	/* You can hand me unchecksummed packets. */ +#define TUN_F_TSO4	0x02	/* I can handle TSO for IPv4 packets */ +#define TUN_F_TSO6	0x04	/* I can handle TSO for IPv6 packets */ +#define TUN_F_TSO_ECN	0x08	/* I can handle TSO with ECN bits. */ +#define TUN_F_UFO	0x10	/* I can handle UFO packets */ + +/* Protocol info prepended to the packets (when IFF_NO_PI is not set) */ +#define TUN_PKT_STRIP	0x0001 +struct tun_pi { +	__u16  flags; +	__be16 proto; +}; + +/* + * Filter spec (used for SETXXFILTER ioctls) + * This stuff is applicable only to the TAP (Ethernet) devices. + * If the count is zero the filter is disabled and the driver accepts + * all packets (promisc mode). + * If the filter is enabled in order to accept broadcast packets + * broadcast addr must be explicitly included in the addr list. + */ +#define TUN_FLT_ALLMULTI 0x0001 /* Accept all multicast packets */ +struct tun_filter { +	__u16  flags; /* TUN_FLT_ flags see above */ +	__u16  count; /* Number of addresses */ +	__u8   addr[0][ETH_ALEN]; +}; + +#endif /* _UAPI__IF_TUN_H */ diff --git a/include/uapi/linux/if_tunnel.h b/include/uapi/linux/if_tunnel.h new file mode 100644 index 00000000000..5db5942575f --- /dev/null +++ b/include/uapi/linux/if_tunnel.h @@ -0,0 +1,96 @@ +#ifndef _UAPI_IF_TUNNEL_H_ +#define _UAPI_IF_TUNNEL_H_ + +#include <linux/types.h> +#include <asm/byteorder.h> + + +#define SIOCGETTUNNEL   (SIOCDEVPRIVATE + 0) +#define SIOCADDTUNNEL   (SIOCDEVPRIVATE + 1) +#define SIOCDELTUNNEL   (SIOCDEVPRIVATE + 2) +#define SIOCCHGTUNNEL   (SIOCDEVPRIVATE + 3) +#define SIOCGETPRL      (SIOCDEVPRIVATE + 4) +#define SIOCADDPRL      (SIOCDEVPRIVATE + 5) +#define SIOCDELPRL      (SIOCDEVPRIVATE + 6) +#define SIOCCHGPRL      (SIOCDEVPRIVATE + 7) +#define SIOCGET6RD      (SIOCDEVPRIVATE + 8) +#define SIOCADD6RD      (SIOCDEVPRIVATE + 9) +#define SIOCDEL6RD      (SIOCDEVPRIVATE + 10) +#define SIOCCHG6RD      (SIOCDEVPRIVATE + 11) + +#define GRE_CSUM	__cpu_to_be16(0x8000) +#define GRE_ROUTING	__cpu_to_be16(0x4000) +#define GRE_KEY		__cpu_to_be16(0x2000) +#define GRE_SEQ		__cpu_to_be16(0x1000) +#define GRE_STRICT	__cpu_to_be16(0x0800) +#define GRE_REC		__cpu_to_be16(0x0700) +#define GRE_FLAGS	__cpu_to_be16(0x00F8) +#define GRE_VERSION	__cpu_to_be16(0x0007) + +struct ip_tunnel_parm { +	char			name[IFNAMSIZ]; +	int			link; +	__be16			i_flags; +	__be16			o_flags; +	__be32			i_key; +	__be32			o_key; +	struct iphdr		iph; +}; + +/* SIT-mode i_flags */ +#define	SIT_ISATAP	0x0001 + +struct ip_tunnel_prl { +	__be32			addr; +	__u16			flags; +	__u16			__reserved; +	__u32			datalen; +	__u32			__reserved2; +	/* data follows */ +}; + +/* PRL flags */ +#define	PRL_DEFAULT		0x0001 + +struct ip_tunnel_6rd { +	struct in6_addr		prefix; +	__be32			relay_prefix; +	__u16			prefixlen; +	__u16			relay_prefixlen; +}; + +enum { +	IFLA_GRE_UNSPEC, +	IFLA_GRE_LINK, +	IFLA_GRE_IFLAGS, +	IFLA_GRE_OFLAGS, +	IFLA_GRE_IKEY, +	IFLA_GRE_OKEY, +	IFLA_GRE_LOCAL, +	IFLA_GRE_REMOTE, +	IFLA_GRE_TTL, +	IFLA_GRE_TOS, +	IFLA_GRE_PMTUDISC, +	IFLA_GRE_ENCAP_LIMIT, +	IFLA_GRE_FLOWINFO, +	IFLA_GRE_FLAGS, +	__IFLA_GRE_MAX, +}; + +#define IFLA_GRE_MAX	(__IFLA_GRE_MAX - 1) + +/* VTI-mode i_flags */ +#define VTI_ISVTI 0x0001 + +enum { +	IFLA_VTI_UNSPEC, +	IFLA_VTI_LINK, +	IFLA_VTI_IKEY, +	IFLA_VTI_OKEY, +	IFLA_VTI_LOCAL, +	IFLA_VTI_REMOTE, +	__IFLA_VTI_MAX, +}; + +#define IFLA_VTI_MAX	(__IFLA_VTI_MAX - 1) +#endif /* _UAPI_IF_TUNNEL_H_ */ diff --git a/include/uapi/linux/if_vlan.h b/include/uapi/linux/if_vlan.h new file mode 100644 index 00000000000..0744f8e65d1 --- /dev/null +++ b/include/uapi/linux/if_vlan.h @@ -0,0 +1,63 @@ +/* + * VLAN		An implementation of 802.1Q VLAN tagging. + * + * Authors:	Ben Greear <greearb@candelatech.com> + * + *		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. + * + */ + +#ifndef _UAPI_LINUX_IF_VLAN_H_ +#define _UAPI_LINUX_IF_VLAN_H_ + + +/* VLAN IOCTLs are found in sockios.h */ + +/* Passed in vlan_ioctl_args structure to determine behaviour. */ +enum vlan_ioctl_cmds { +	ADD_VLAN_CMD, +	DEL_VLAN_CMD, +	SET_VLAN_INGRESS_PRIORITY_CMD, +	SET_VLAN_EGRESS_PRIORITY_CMD, +	GET_VLAN_INGRESS_PRIORITY_CMD, +	GET_VLAN_EGRESS_PRIORITY_CMD, +	SET_VLAN_NAME_TYPE_CMD, +	SET_VLAN_FLAG_CMD, +	GET_VLAN_REALDEV_NAME_CMD, /* If this works, you know it's a VLAN device, btw */ +	GET_VLAN_VID_CMD /* Get the VID of this VLAN (specified by name) */ +}; + +enum vlan_flags { +	VLAN_FLAG_REORDER_HDR	= 0x1, +	VLAN_FLAG_GVRP		= 0x2, +	VLAN_FLAG_LOOSE_BINDING	= 0x4, +}; + +enum vlan_name_types { +	VLAN_NAME_TYPE_PLUS_VID, /* Name will look like:  vlan0005 */ +	VLAN_NAME_TYPE_RAW_PLUS_VID, /* name will look like:  eth1.0005 */ +	VLAN_NAME_TYPE_PLUS_VID_NO_PAD, /* Name will look like:  vlan5 */ +	VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD, /* Name will look like:  eth0.5 */ +	VLAN_NAME_TYPE_HIGHEST +}; + +struct vlan_ioctl_args { +	int cmd; /* Should be one of the vlan_ioctl_cmds enum above. */ +	char device1[24]; + +        union { +		char device2[24]; +		int VID; +		unsigned int skb_priority; +		unsigned int name_type; +		unsigned int bind_type; +		unsigned int flag; /* Matches vlan_dev_priv flags */ +        } u; + +	short vlan_qos;    +}; + +#endif /* _UAPI_LINUX_IF_VLAN_H_ */ diff --git a/include/uapi/linux/if_x25.h b/include/uapi/linux/if_x25.h new file mode 100644 index 00000000000..897765f5feb --- /dev/null +++ b/include/uapi/linux/if_x25.h @@ -0,0 +1,26 @@ +/* + *  Linux X.25 packet to device interface + * + *  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. + */ + +#ifndef _IF_X25_H +#define _IF_X25_H + +#include <linux/types.h> + +/* Documentation/networking/x25-iface.txt */ +#define X25_IFACE_DATA		0x00 +#define X25_IFACE_CONNECT	0x01 +#define X25_IFACE_DISCONNECT	0x02 +#define X25_IFACE_PARAMS	0x03 + +#endif /* _IF_X25_H */ diff --git a/include/uapi/linux/igmp.h b/include/uapi/linux/igmp.h new file mode 100644 index 00000000000..ccbb32aa670 --- /dev/null +++ b/include/uapi/linux/igmp.h @@ -0,0 +1,128 @@ +/* + *	Linux NET3:	Internet Group Management Protocol  [IGMP] + * + *	Authors: + *		Alan Cox <alan@lxorguk.ukuu.org.uk> + * + *	Extended to talk the BSD extended IGMP protocol of mrouted 3.6 + * + * + *	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. + */ + +#ifndef _UAPI_LINUX_IGMP_H +#define _UAPI_LINUX_IGMP_H + +#include <linux/types.h> +#include <asm/byteorder.h> + +/* + *	IGMP protocol structures + */ + +/* + *	Header in on cable format + */ + +struct igmphdr { +	__u8 type; +	__u8 code;		/* For newer IGMP */ +	__sum16 csum; +	__be32 group; +}; + +/* V3 group record types [grec_type] */ +#define IGMPV3_MODE_IS_INCLUDE		1 +#define IGMPV3_MODE_IS_EXCLUDE		2 +#define IGMPV3_CHANGE_TO_INCLUDE	3 +#define IGMPV3_CHANGE_TO_EXCLUDE	4 +#define IGMPV3_ALLOW_NEW_SOURCES	5 +#define IGMPV3_BLOCK_OLD_SOURCES	6 + +struct igmpv3_grec { +	__u8	grec_type; +	__u8	grec_auxwords; +	__be16	grec_nsrcs; +	__be32	grec_mca; +	__be32	grec_src[0]; +}; + +struct igmpv3_report { +	__u8 type; +	__u8 resv1; +	__be16 csum; +	__be16 resv2; +	__be16 ngrec; +	struct igmpv3_grec grec[0]; +}; + +struct igmpv3_query { +	__u8 type; +	__u8 code; +	__be16 csum; +	__be32 group; +#if defined(__LITTLE_ENDIAN_BITFIELD) +	__u8 qrv:3, +	     suppress:1, +	     resv:4; +#elif defined(__BIG_ENDIAN_BITFIELD) +	__u8 resv:4, +	     suppress:1, +	     qrv:3; +#else +#error "Please fix <asm/byteorder.h>" +#endif +	__u8 qqic; +	__be16 nsrcs; +	__be32 srcs[0]; +}; + +#define IGMP_HOST_MEMBERSHIP_QUERY	0x11	/* From RFC1112 */ +#define IGMP_HOST_MEMBERSHIP_REPORT	0x12	/* Ditto */ +#define IGMP_DVMRP			0x13	/* DVMRP routing */ +#define IGMP_PIM			0x14	/* PIM routing */ +#define IGMP_TRACE			0x15 +#define IGMPV2_HOST_MEMBERSHIP_REPORT	0x16	/* V2 version of 0x12 */ +#define IGMP_HOST_LEAVE_MESSAGE 	0x17 +#define IGMPV3_HOST_MEMBERSHIP_REPORT	0x22	/* V3 version of 0x12 */ + +#define IGMP_MTRACE_RESP		0x1e +#define IGMP_MTRACE			0x1f + + +/* + *	Use the BSD names for these for compatibility + */ + +#define IGMP_DELAYING_MEMBER		0x01 +#define IGMP_IDLE_MEMBER		0x02 +#define IGMP_LAZY_MEMBER		0x03 +#define IGMP_SLEEPING_MEMBER		0x04 +#define IGMP_AWAKENING_MEMBER		0x05 + +#define IGMP_MINLEN			8 + +#define IGMP_MAX_HOST_REPORT_DELAY	10	/* max delay for response to */ +						/* query (in seconds)	*/ + +#define IGMP_TIMER_SCALE		10	/* denotes that the igmphdr->timer field */ +						/* specifies time in 10th of seconds	 */ + +#define IGMP_AGE_THRESHOLD		400	/* If this host don't hear any IGMP V1	*/ +						/* message in this period of time,	*/ +						/* revert to IGMP v2 router.		*/ + +#define IGMP_ALL_HOSTS		htonl(0xE0000001L) +#define IGMP_ALL_ROUTER 	htonl(0xE0000002L) +#define IGMPV3_ALL_MCR	 	htonl(0xE0000016L) +#define IGMP_LOCAL_GROUP	htonl(0xE0000000L) +#define IGMP_LOCAL_GROUP_MASK	htonl(0xFFFFFF00L) + +/* + * struct for keeping the multicast list in + */ + +#endif /* _UAPI_LINUX_IGMP_H */ diff --git a/include/uapi/linux/in.h b/include/uapi/linux/in.h new file mode 100644 index 00000000000..9edb441df82 --- /dev/null +++ b/include/uapi/linux/in.h @@ -0,0 +1,253 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the  BSD Socket + *		interface as the means of communication with the user level. + * + *		Definitions of the Internet Protocol. + * + * Version:	@(#)in.h	1.0.1	04/21/93 + * + * Authors:	Original taken from the GNU Project <netinet/in.h> file. + *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + * + *		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. + */ +#ifndef _UAPI_LINUX_IN_H +#define _UAPI_LINUX_IN_H + +#include <linux/types.h> +#include <linux/socket.h> + +/* Standard well-defined IP protocols.  */ +enum { +  IPPROTO_IP = 0,		/* Dummy protocol for TCP		*/ +  IPPROTO_ICMP = 1,		/* Internet Control Message Protocol	*/ +  IPPROTO_IGMP = 2,		/* Internet Group Management Protocol	*/ +  IPPROTO_IPIP = 4,		/* IPIP tunnels (older KA9Q tunnels use 94) */ +  IPPROTO_TCP = 6,		/* Transmission Control Protocol	*/ +  IPPROTO_EGP = 8,		/* Exterior Gateway Protocol		*/ +  IPPROTO_PUP = 12,		/* PUP protocol				*/ +  IPPROTO_UDP = 17,		/* User Datagram Protocol		*/ +  IPPROTO_IDP = 22,		/* XNS IDP protocol			*/ +  IPPROTO_DCCP = 33,		/* Datagram Congestion Control Protocol */ +  IPPROTO_RSVP = 46,		/* RSVP protocol			*/ +  IPPROTO_GRE = 47,		/* Cisco GRE tunnels (rfc 1701,1702)	*/ + +  IPPROTO_IPV6	 = 41,		/* IPv6-in-IPv4 tunnelling		*/ + +  IPPROTO_ESP = 50,            /* Encapsulation Security Payload protocol */ +  IPPROTO_AH = 51,             /* Authentication Header protocol       */ +  IPPROTO_BEETPH = 94,	       /* IP option pseudo header for BEET */ +  IPPROTO_PIM    = 103,		/* Protocol Independent Multicast	*/ + +  IPPROTO_COMP   = 108,                /* Compression Header protocol */ +  IPPROTO_SCTP   = 132,		/* Stream Control Transport Protocol	*/ +  IPPROTO_UDPLITE = 136,	/* UDP-Lite (RFC 3828)			*/ + +  IPPROTO_RAW	 = 255,		/* Raw IP packets			*/ +  IPPROTO_MAX +}; + + +/* Internet address. */ +struct in_addr { +	__be32	s_addr; +}; + +#define IP_TOS		1 +#define IP_TTL		2 +#define IP_HDRINCL	3 +#define IP_OPTIONS	4 +#define IP_ROUTER_ALERT	5 +#define IP_RECVOPTS	6 +#define IP_RETOPTS	7 +#define IP_PKTINFO	8 +#define IP_PKTOPTIONS	9 +#define IP_MTU_DISCOVER	10 +#define IP_RECVERR	11 +#define IP_RECVTTL	12 +#define	IP_RECVTOS	13 +#define IP_MTU		14 +#define IP_FREEBIND	15 +#define IP_IPSEC_POLICY	16 +#define IP_XFRM_POLICY	17 +#define IP_PASSSEC	18 +#define IP_TRANSPARENT	19 + +/* BSD compatibility */ +#define IP_RECVRETOPTS	IP_RETOPTS + +/* TProxy original addresses */ +#define IP_ORIGDSTADDR       20 +#define IP_RECVORIGDSTADDR   IP_ORIGDSTADDR + +#define IP_MINTTL       21 +#define IP_NODEFRAG     22 + +/* IP_MTU_DISCOVER values */ +#define IP_PMTUDISC_DONT		0	/* Never send DF frames */ +#define IP_PMTUDISC_WANT		1	/* Use per route hints	*/ +#define IP_PMTUDISC_DO			2	/* Always DF		*/ +#define IP_PMTUDISC_PROBE		3       /* Ignore dst pmtu      */ + +#define IP_MULTICAST_IF			32 +#define IP_MULTICAST_TTL 		33 +#define IP_MULTICAST_LOOP 		34 +#define IP_ADD_MEMBERSHIP		35 +#define IP_DROP_MEMBERSHIP		36 +#define IP_UNBLOCK_SOURCE		37 +#define IP_BLOCK_SOURCE			38 +#define IP_ADD_SOURCE_MEMBERSHIP	39 +#define IP_DROP_SOURCE_MEMBERSHIP	40 +#define IP_MSFILTER			41 +#define MCAST_JOIN_GROUP		42 +#define MCAST_BLOCK_SOURCE		43 +#define MCAST_UNBLOCK_SOURCE		44 +#define MCAST_LEAVE_GROUP		45 +#define MCAST_JOIN_SOURCE_GROUP		46 +#define MCAST_LEAVE_SOURCE_GROUP	47 +#define MCAST_MSFILTER			48 +#define IP_MULTICAST_ALL		49 +#define IP_UNICAST_IF			50 + +#define MCAST_EXCLUDE	0 +#define MCAST_INCLUDE	1 + +/* These need to appear somewhere around here */ +#define IP_DEFAULT_MULTICAST_TTL        1 +#define IP_DEFAULT_MULTICAST_LOOP       1 + +/* Request struct for multicast socket ops */ + +struct ip_mreq  { +	struct in_addr imr_multiaddr;	/* IP multicast address of group */ +	struct in_addr imr_interface;	/* local IP address of interface */ +}; + +struct ip_mreqn { +	struct in_addr	imr_multiaddr;		/* IP multicast address of group */ +	struct in_addr	imr_address;		/* local IP address of interface */ +	int		imr_ifindex;		/* Interface index */ +}; + +struct ip_mreq_source { +	__be32		imr_multiaddr; +	__be32		imr_interface; +	__be32		imr_sourceaddr; +}; + +struct ip_msfilter { +	__be32		imsf_multiaddr; +	__be32		imsf_interface; +	__u32		imsf_fmode; +	__u32		imsf_numsrc; +	__be32		imsf_slist[1]; +}; + +#define IP_MSFILTER_SIZE(numsrc) \ +	(sizeof(struct ip_msfilter) - sizeof(__u32) \ +	+ (numsrc) * sizeof(__u32)) + +struct group_req { +	__u32				 gr_interface;	/* interface index */ +	struct __kernel_sockaddr_storage gr_group;	/* group address */ +}; + +struct group_source_req { +	__u32				 gsr_interface;	/* interface index */ +	struct __kernel_sockaddr_storage gsr_group;	/* group address */ +	struct __kernel_sockaddr_storage gsr_source;	/* source address */ +}; + +struct group_filter { +	__u32				 gf_interface;	/* interface index */ +	struct __kernel_sockaddr_storage gf_group;	/* multicast address */ +	__u32				 gf_fmode;	/* filter mode */ +	__u32				 gf_numsrc;	/* number of sources */ +	struct __kernel_sockaddr_storage gf_slist[1];	/* interface index */ +}; + +#define GROUP_FILTER_SIZE(numsrc) \ +	(sizeof(struct group_filter) - sizeof(struct __kernel_sockaddr_storage) \ +	+ (numsrc) * sizeof(struct __kernel_sockaddr_storage)) + +struct in_pktinfo { +	int		ipi_ifindex; +	struct in_addr	ipi_spec_dst; +	struct in_addr	ipi_addr; +}; + +/* Structure describing an Internet (IP) socket address. */ +#define __SOCK_SIZE__	16		/* sizeof(struct sockaddr)	*/ +struct sockaddr_in { +  __kernel_sa_family_t	sin_family;	/* Address family		*/ +  __be16		sin_port;	/* Port number			*/ +  struct in_addr	sin_addr;	/* Internet address		*/ + +  /* Pad to size of `struct sockaddr'. */ +  unsigned char		__pad[__SOCK_SIZE__ - sizeof(short int) - +			sizeof(unsigned short int) - sizeof(struct in_addr)]; +}; +#define sin_zero	__pad		/* for BSD UNIX comp. -FvK	*/ + + +/* + * Definitions of the bits in an Internet address integer. + * On subnets, host and network parts are found according + * to the subnet mask, not these masks. + */ +#define	IN_CLASSA(a)		((((long int) (a)) & 0x80000000) == 0) +#define	IN_CLASSA_NET		0xff000000 +#define	IN_CLASSA_NSHIFT	24 +#define	IN_CLASSA_HOST		(0xffffffff & ~IN_CLASSA_NET) +#define	IN_CLASSA_MAX		128 + +#define	IN_CLASSB(a)		((((long int) (a)) & 0xc0000000) == 0x80000000) +#define	IN_CLASSB_NET		0xffff0000 +#define	IN_CLASSB_NSHIFT	16 +#define	IN_CLASSB_HOST		(0xffffffff & ~IN_CLASSB_NET) +#define	IN_CLASSB_MAX		65536 + +#define	IN_CLASSC(a)		((((long int) (a)) & 0xe0000000) == 0xc0000000) +#define	IN_CLASSC_NET		0xffffff00 +#define	IN_CLASSC_NSHIFT	8 +#define	IN_CLASSC_HOST		(0xffffffff & ~IN_CLASSC_NET) + +#define	IN_CLASSD(a)		((((long int) (a)) & 0xf0000000) == 0xe0000000) +#define	IN_MULTICAST(a)		IN_CLASSD(a) +#define IN_MULTICAST_NET	0xF0000000 + +#define	IN_EXPERIMENTAL(a)	((((long int) (a)) & 0xf0000000) == 0xf0000000) +#define	IN_BADCLASS(a)		IN_EXPERIMENTAL((a)) + +/* Address to accept any incoming messages. */ +#define	INADDR_ANY		((unsigned long int) 0x00000000) + +/* Address to send to all hosts. */ +#define	INADDR_BROADCAST	((unsigned long int) 0xffffffff) + +/* Address indicating an error return. */ +#define	INADDR_NONE		((unsigned long int) 0xffffffff) + +/* Network number for local host loopback. */ +#define	IN_LOOPBACKNET		127 + +/* Address to loopback in software to local host.  */ +#define	INADDR_LOOPBACK		0x7f000001	/* 127.0.0.1   */ +#define	IN_LOOPBACK(a)		((((long int) (a)) & 0xff000000) == 0x7f000000) + +/* Defines for Multicast INADDR */ +#define INADDR_UNSPEC_GROUP   	0xe0000000U	/* 224.0.0.0   */ +#define INADDR_ALLHOSTS_GROUP 	0xe0000001U	/* 224.0.0.1   */ +#define INADDR_ALLRTRS_GROUP    0xe0000002U	/* 224.0.0.2 */ +#define INADDR_MAX_LOCAL_GROUP  0xe00000ffU	/* 224.0.0.255 */ + + +/* <asm/byteorder.h> contains the htonl type stuff.. */ +#include <asm/byteorder.h>  + + +#endif /* _UAPI_LINUX_IN_H */ diff --git a/include/uapi/linux/in6.h b/include/uapi/linux/in6.h new file mode 100644 index 00000000000..1e315998995 --- /dev/null +++ b/include/uapi/linux/in6.h @@ -0,0 +1,279 @@ +/* + *	Types and definitions for AF_INET6  + *	Linux INET6 implementation  + * + *	Authors: + *	Pedro Roque		<roque@di.fc.ul.pt>	 + * + *	Sources: + *	IPv6 Program Interfaces for BSD Systems + *      <draft-ietf-ipngwg-bsd-api-05.txt> + * + *	Advanced Sockets API for IPv6 + *	<draft-stevens-advanced-api-00.txt> + * + *	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. + */ + +#ifndef _UAPI_LINUX_IN6_H +#define _UAPI_LINUX_IN6_H + +#include <linux/types.h> + +/* + *	IPv6 address structure + */ + +struct in6_addr { +	union { +		__u8		u6_addr8[16]; +		__be16		u6_addr16[8]; +		__be32		u6_addr32[4]; +	} in6_u; +#define s6_addr			in6_u.u6_addr8 +#define s6_addr16		in6_u.u6_addr16 +#define s6_addr32		in6_u.u6_addr32 +}; + +/* IPv6 Wildcard Address (::) and Loopback Address (::1) defined in RFC2553 + * NOTE: Be aware the IN6ADDR_* constants and in6addr_* externals are defined + * in network byte order, not in host byte order as are the IPv4 equivalents + */ + +struct sockaddr_in6 { +	unsigned short int	sin6_family;    /* AF_INET6 */ +	__be16			sin6_port;      /* Transport layer port # */ +	__be32			sin6_flowinfo;  /* IPv6 flow information */ +	struct in6_addr		sin6_addr;      /* IPv6 address */ +	__u32			sin6_scope_id;  /* scope id (new in RFC2553) */ +}; + +struct ipv6_mreq { +	/* IPv6 multicast address of group */ +	struct in6_addr ipv6mr_multiaddr; + +	/* local IPv6 address of interface */ +	int		ipv6mr_ifindex; +}; + +#define ipv6mr_acaddr	ipv6mr_multiaddr + +struct in6_flowlabel_req { +	struct in6_addr	flr_dst; +	__be32	flr_label; +	__u8	flr_action; +	__u8	flr_share; +	__u16	flr_flags; +	__u16 	flr_expires; +	__u16	flr_linger; +	__u32	__flr_pad; +	/* Options in format of IPV6_PKTOPTIONS */ +}; + +#define IPV6_FL_A_GET	0 +#define IPV6_FL_A_PUT	1 +#define IPV6_FL_A_RENEW	2 + +#define IPV6_FL_F_CREATE	1 +#define IPV6_FL_F_EXCL		2 + +#define IPV6_FL_S_NONE		0 +#define IPV6_FL_S_EXCL		1 +#define IPV6_FL_S_PROCESS	2 +#define IPV6_FL_S_USER		3 +#define IPV6_FL_S_ANY		255 + + +/* + *	Bitmask constant declarations to help applications select out the  + *	flow label and priority fields. + * + *	Note that this are in host byte order while the flowinfo field of + *	sockaddr_in6 is in network byte order. + */ + +#define IPV6_FLOWINFO_FLOWLABEL		0x000fffff +#define IPV6_FLOWINFO_PRIORITY		0x0ff00000 + +/* These definitions are obsolete */ +#define IPV6_PRIORITY_UNCHARACTERIZED	0x0000 +#define IPV6_PRIORITY_FILLER		0x0100 +#define IPV6_PRIORITY_UNATTENDED	0x0200 +#define IPV6_PRIORITY_RESERVED1		0x0300 +#define IPV6_PRIORITY_BULK		0x0400 +#define IPV6_PRIORITY_RESERVED2		0x0500 +#define IPV6_PRIORITY_INTERACTIVE	0x0600 +#define IPV6_PRIORITY_CONTROL		0x0700 +#define IPV6_PRIORITY_8			0x0800 +#define IPV6_PRIORITY_9			0x0900 +#define IPV6_PRIORITY_10		0x0a00 +#define IPV6_PRIORITY_11		0x0b00 +#define IPV6_PRIORITY_12		0x0c00 +#define IPV6_PRIORITY_13		0x0d00 +#define IPV6_PRIORITY_14		0x0e00 +#define IPV6_PRIORITY_15		0x0f00 + +/* + *	IPV6 extension headers + */ +#define IPPROTO_HOPOPTS		0	/* IPv6 hop-by-hop options	*/ +#define IPPROTO_ROUTING		43	/* IPv6 routing header		*/ +#define IPPROTO_FRAGMENT	44	/* IPv6 fragmentation header	*/ +#define IPPROTO_ICMPV6		58	/* ICMPv6			*/ +#define IPPROTO_NONE		59	/* IPv6 no next header		*/ +#define IPPROTO_DSTOPTS		60	/* IPv6 destination options	*/ +#define IPPROTO_MH		135	/* IPv6 mobility header		*/ + +/* + *	IPv6 TLV options. + */ +#define IPV6_TLV_PAD1		0 +#define IPV6_TLV_PADN		1 +#define IPV6_TLV_ROUTERALERT	5 +#define IPV6_TLV_JUMBO		194 +#define IPV6_TLV_HAO		201	/* home address option */ + +/* + *	IPV6 socket options + */ + +#define IPV6_ADDRFORM		1 +#define IPV6_2292PKTINFO	2 +#define IPV6_2292HOPOPTS	3 +#define IPV6_2292DSTOPTS	4 +#define IPV6_2292RTHDR		5 +#define IPV6_2292PKTOPTIONS	6 +#define IPV6_CHECKSUM		7 +#define IPV6_2292HOPLIMIT	8 +#define IPV6_NEXTHOP		9 +#define IPV6_AUTHHDR		10	/* obsolete */ +#define IPV6_FLOWINFO		11 + +#define IPV6_UNICAST_HOPS	16 +#define IPV6_MULTICAST_IF	17 +#define IPV6_MULTICAST_HOPS	18 +#define IPV6_MULTICAST_LOOP	19 +#define IPV6_ADD_MEMBERSHIP	20 +#define IPV6_DROP_MEMBERSHIP	21 +#define IPV6_ROUTER_ALERT	22 +#define IPV6_MTU_DISCOVER	23 +#define IPV6_MTU		24 +#define IPV6_RECVERR		25 +#define IPV6_V6ONLY		26 +#define IPV6_JOIN_ANYCAST	27 +#define IPV6_LEAVE_ANYCAST	28 + +/* IPV6_MTU_DISCOVER values */ +#define IPV6_PMTUDISC_DONT		0 +#define IPV6_PMTUDISC_WANT		1 +#define IPV6_PMTUDISC_DO		2 +#define IPV6_PMTUDISC_PROBE		3 + +/* Flowlabel */ +#define IPV6_FLOWLABEL_MGR	32 +#define IPV6_FLOWINFO_SEND	33 + +#define IPV6_IPSEC_POLICY	34 +#define IPV6_XFRM_POLICY	35 + +/* + * Multicast: + * Following socket options are shared between IPv4 and IPv6. + * + * MCAST_JOIN_GROUP		42 + * MCAST_BLOCK_SOURCE		43 + * MCAST_UNBLOCK_SOURCE		44 + * MCAST_LEAVE_GROUP		45 + * MCAST_JOIN_SOURCE_GROUP	46 + * MCAST_LEAVE_SOURCE_GROUP	47 + * MCAST_MSFILTER		48 + */ + +/* + * Advanced API (RFC3542) (1) + * + * Note: IPV6_RECVRTHDRDSTOPTS does not exist. see net/ipv6/datagram.c. + */ + +#define IPV6_RECVPKTINFO	49 +#define IPV6_PKTINFO		50 +#define IPV6_RECVHOPLIMIT	51 +#define IPV6_HOPLIMIT		52 +#define IPV6_RECVHOPOPTS	53 +#define IPV6_HOPOPTS		54 +#define IPV6_RTHDRDSTOPTS	55 +#define IPV6_RECVRTHDR		56 +#define IPV6_RTHDR		57 +#define IPV6_RECVDSTOPTS	58 +#define IPV6_DSTOPTS		59 +#define IPV6_RECVPATHMTU	60 +#define IPV6_PATHMTU		61 +#define IPV6_DONTFRAG		62 +#if 0	/* not yet */ +#define IPV6_USE_MIN_MTU	63 +#endif + +/* + * Netfilter (1) + * + * Following socket options are used in ip6_tables; + * see include/linux/netfilter_ipv6/ip6_tables.h. + * + * IP6T_SO_SET_REPLACE / IP6T_SO_GET_INFO		64 + * IP6T_SO_SET_ADD_COUNTERS / IP6T_SO_GET_ENTRIES	65 + */ + +/* + * Advanced API (RFC3542) (2) + */ +#define IPV6_RECVTCLASS		66 +#define IPV6_TCLASS		67 + +/* + * Netfilter (2) + * + * Following socket options are used in ip6_tables; + * see include/linux/netfilter_ipv6/ip6_tables.h. + * + * IP6T_SO_GET_REVISION_MATCH	68 + * IP6T_SO_GET_REVISION_TARGET	69 + */ + +/* RFC5014: Source address selection */ +#define IPV6_ADDR_PREFERENCES	72 + +#define IPV6_PREFER_SRC_TMP		0x0001 +#define IPV6_PREFER_SRC_PUBLIC		0x0002 +#define IPV6_PREFER_SRC_PUBTMP_DEFAULT	0x0100 +#define IPV6_PREFER_SRC_COA		0x0004 +#define IPV6_PREFER_SRC_HOME		0x0400 +#define IPV6_PREFER_SRC_CGA		0x0008 +#define IPV6_PREFER_SRC_NONCGA		0x0800 + +/* RFC5082: Generalized Ttl Security Mechanism */ +#define IPV6_MINHOPCOUNT		73 + +#define IPV6_ORIGDSTADDR        74 +#define IPV6_RECVORIGDSTADDR    IPV6_ORIGDSTADDR +#define IPV6_TRANSPARENT        75 +#define IPV6_UNICAST_IF         76 + +/* + * Multicast Routing: + * see include/linux/mroute6.h. + * + * MRT6_INIT			200 + * MRT6_DONE			201 + * MRT6_ADD_MIF			202 + * MRT6_DEL_MIF			203 + * MRT6_ADD_MFC			204 + * MRT6_DEL_MFC			205 + * MRT6_VERSION			206 + * MRT6_ASSERT			207 + * MRT6_PIM			208 + * (reserved)			209 + */ +#endif /* _UAPI_LINUX_IN6_H */ diff --git a/include/uapi/linux/in_route.h b/include/uapi/linux/in_route.h new file mode 100644 index 00000000000..b261b8c915f --- /dev/null +++ b/include/uapi/linux/in_route.h @@ -0,0 +1,32 @@ +#ifndef _LINUX_IN_ROUTE_H +#define _LINUX_IN_ROUTE_H + +/* IPv4 routing cache flags */ + +#define RTCF_DEAD	RTNH_F_DEAD +#define RTCF_ONLINK	RTNH_F_ONLINK + +/* Obsolete flag. About to be deleted */ +#define RTCF_NOPMTUDISC RTM_F_NOPMTUDISC + +#define RTCF_NOTIFY	0x00010000 +#define RTCF_DIRECTDST	0x00020000 /* unused */ +#define RTCF_REDIRECTED	0x00040000 +#define RTCF_TPROXY	0x00080000 /* unused */ + +#define RTCF_FAST	0x00200000 /* unused */ +#define RTCF_MASQ	0x00400000 /* unused */ +#define RTCF_SNAT	0x00800000 /* unused */ +#define RTCF_DOREDIRECT 0x01000000 +#define RTCF_DIRECTSRC	0x04000000 +#define RTCF_DNAT	0x08000000 +#define RTCF_BROADCAST	0x10000000 +#define RTCF_MULTICAST	0x20000000 +#define RTCF_REJECT	0x40000000 /* unused */ +#define RTCF_LOCAL	0x80000000 + +#define RTCF_NAT	(RTCF_DNAT|RTCF_SNAT) + +#define RT_TOS(tos)	((tos)&IPTOS_TOS_MASK) + +#endif /* _LINUX_IN_ROUTE_H */ diff --git a/include/uapi/linux/inet_diag.h b/include/uapi/linux/inet_diag.h new file mode 100644 index 00000000000..8c469af939a --- /dev/null +++ b/include/uapi/linux/inet_diag.h @@ -0,0 +1,136 @@ +#ifndef _UAPI_INET_DIAG_H_ +#define _UAPI_INET_DIAG_H_ + +#include <linux/types.h> + +/* Just some random number */ +#define TCPDIAG_GETSOCK 18 +#define DCCPDIAG_GETSOCK 19 + +#define INET_DIAG_GETSOCK_MAX 24 + +/* Socket identity */ +struct inet_diag_sockid { +	__be16	idiag_sport; +	__be16	idiag_dport; +	__be32	idiag_src[4]; +	__be32	idiag_dst[4]; +	__u32	idiag_if; +	__u32	idiag_cookie[2]; +#define INET_DIAG_NOCOOKIE (~0U) +}; + +/* Request structure */ + +struct inet_diag_req { +	__u8	idiag_family;		/* Family of addresses. */ +	__u8	idiag_src_len; +	__u8	idiag_dst_len; +	__u8	idiag_ext;		/* Query extended information */ + +	struct inet_diag_sockid id; + +	__u32	idiag_states;		/* States to dump */ +	__u32	idiag_dbs;		/* Tables to dump (NI) */ +}; + +struct inet_diag_req_v2 { +	__u8	sdiag_family; +	__u8	sdiag_protocol; +	__u8	idiag_ext; +	__u8	pad; +	__u32	idiag_states; +	struct inet_diag_sockid id; +}; + +enum { +	INET_DIAG_REQ_NONE, +	INET_DIAG_REQ_BYTECODE, +}; + +#define INET_DIAG_REQ_MAX INET_DIAG_REQ_BYTECODE + +/* Bytecode is sequence of 4 byte commands followed by variable arguments. + * All the commands identified by "code" are conditional jumps forward: + * to offset cc+"yes" or to offset cc+"no". "yes" is supposed to be + * length of the command and its arguments. + */ +  +struct inet_diag_bc_op { +	unsigned char	code; +	unsigned char	yes; +	unsigned short	no; +}; + +enum { +	INET_DIAG_BC_NOP, +	INET_DIAG_BC_JMP, +	INET_DIAG_BC_S_GE, +	INET_DIAG_BC_S_LE, +	INET_DIAG_BC_D_GE, +	INET_DIAG_BC_D_LE, +	INET_DIAG_BC_AUTO, +	INET_DIAG_BC_S_COND, +	INET_DIAG_BC_D_COND, +}; + +struct inet_diag_hostcond { +	__u8	family; +	__u8	prefix_len; +	int	port; +	__be32	addr[0]; +}; + +/* Base info structure. It contains socket identity (addrs/ports/cookie) + * and, alas, the information shown by netstat. */ +struct inet_diag_msg { +	__u8	idiag_family; +	__u8	idiag_state; +	__u8	idiag_timer; +	__u8	idiag_retrans; + +	struct inet_diag_sockid id; + +	__u32	idiag_expires; +	__u32	idiag_rqueue; +	__u32	idiag_wqueue; +	__u32	idiag_uid; +	__u32	idiag_inode; +}; + +/* Extensions */ + +enum { +	INET_DIAG_NONE, +	INET_DIAG_MEMINFO, +	INET_DIAG_INFO, +	INET_DIAG_VEGASINFO, +	INET_DIAG_CONG, +	INET_DIAG_TOS, +	INET_DIAG_TCLASS, +	INET_DIAG_SKMEMINFO, +}; + +#define INET_DIAG_MAX INET_DIAG_SKMEMINFO + + +/* INET_DIAG_MEM */ + +struct inet_diag_meminfo { +	__u32	idiag_rmem; +	__u32	idiag_wmem; +	__u32	idiag_fmem; +	__u32	idiag_tmem; +}; + +/* INET_DIAG_VEGASINFO */ + +struct tcpvegas_info { +	__u32	tcpv_enabled; +	__u32	tcpv_rttcnt; +	__u32	tcpv_rtt; +	__u32	tcpv_minrtt; +}; + + +#endif /* _UAPI_INET_DIAG_H_ */ diff --git a/include/uapi/linux/inotify.h b/include/uapi/linux/inotify.h new file mode 100644 index 00000000000..e6bf35b2dd3 --- /dev/null +++ b/include/uapi/linux/inotify.h @@ -0,0 +1,74 @@ +/* + * Inode based directory notification for Linux + * + * Copyright (C) 2005 John McCutchan + */ + +#ifndef _UAPI_LINUX_INOTIFY_H +#define _UAPI_LINUX_INOTIFY_H + +/* For O_CLOEXEC and O_NONBLOCK */ +#include <linux/fcntl.h> +#include <linux/types.h> + +/* + * struct inotify_event - structure read from the inotify device for each event + * + * When you are watching a directory, you will receive the filename for events + * such as IN_CREATE, IN_DELETE, IN_OPEN, IN_CLOSE, ..., relative to the wd. + */ +struct inotify_event { +	__s32		wd;		/* watch descriptor */ +	__u32		mask;		/* watch mask */ +	__u32		cookie;		/* cookie to synchronize two events */ +	__u32		len;		/* length (including nulls) of name */ +	char		name[0];	/* stub for possible name */ +}; + +/* the following are legal, implemented events that user-space can watch for */ +#define IN_ACCESS		0x00000001	/* File was accessed */ +#define IN_MODIFY		0x00000002	/* File was modified */ +#define IN_ATTRIB		0x00000004	/* Metadata changed */ +#define IN_CLOSE_WRITE		0x00000008	/* Writtable file was closed */ +#define IN_CLOSE_NOWRITE	0x00000010	/* Unwrittable file closed */ +#define IN_OPEN			0x00000020	/* File was opened */ +#define IN_MOVED_FROM		0x00000040	/* File was moved from X */ +#define IN_MOVED_TO		0x00000080	/* File was moved to Y */ +#define IN_CREATE		0x00000100	/* Subfile was created */ +#define IN_DELETE		0x00000200	/* Subfile was deleted */ +#define IN_DELETE_SELF		0x00000400	/* Self was deleted */ +#define IN_MOVE_SELF		0x00000800	/* Self was moved */ + +/* the following are legal events.  they are sent as needed to any watch */ +#define IN_UNMOUNT		0x00002000	/* Backing fs was unmounted */ +#define IN_Q_OVERFLOW		0x00004000	/* Event queued overflowed */ +#define IN_IGNORED		0x00008000	/* File was ignored */ + +/* helper events */ +#define IN_CLOSE		(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* close */ +#define IN_MOVE			(IN_MOVED_FROM | IN_MOVED_TO) /* moves */ + +/* special flags */ +#define IN_ONLYDIR		0x01000000	/* only watch the path if it is a directory */ +#define IN_DONT_FOLLOW		0x02000000	/* don't follow a sym link */ +#define IN_EXCL_UNLINK		0x04000000	/* exclude events on unlinked objects */ +#define IN_MASK_ADD		0x20000000	/* add to the mask of an already existing watch */ +#define IN_ISDIR		0x40000000	/* event occurred against dir */ +#define IN_ONESHOT		0x80000000	/* only send event once */ + +/* + * All of the events - we build the list by hand so that we can add flags in + * the future and not break backward compatibility.  Apps will get only the + * events that they originally wanted.  Be sure to add new events here! + */ +#define IN_ALL_EVENTS	(IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE | \ +			 IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM | \ +			 IN_MOVED_TO | IN_DELETE | IN_CREATE | IN_DELETE_SELF | \ +			 IN_MOVE_SELF) + +/* Flags for sys_inotify_init1.  */ +#define IN_CLOEXEC O_CLOEXEC +#define IN_NONBLOCK O_NONBLOCK + + +#endif /* _UAPI_LINUX_INOTIFY_H */ diff --git a/include/uapi/linux/input.h b/include/uapi/linux/input.h new file mode 100644 index 00000000000..558828590a6 --- /dev/null +++ b/include/uapi/linux/input.h @@ -0,0 +1,1153 @@ +/* + * Copyright (c) 1999-2002 Vojtech Pavlik + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ +#ifndef _UAPI_INPUT_H +#define _UAPI_INPUT_H + + +#ifndef __KERNEL__ +#include <sys/time.h> +#include <sys/ioctl.h> +#include <sys/types.h> +#include <linux/types.h> +#endif + + +/* + * The event structure itself + */ + +struct input_event { +	struct timeval time; +	__u16 type; +	__u16 code; +	__s32 value; +}; + +/* + * Protocol version. + */ + +#define EV_VERSION		0x010001 + +/* + * IOCTLs (0x00 - 0x7f) + */ + +struct input_id { +	__u16 bustype; +	__u16 vendor; +	__u16 product; +	__u16 version; +}; + +/** + * struct input_absinfo - used by EVIOCGABS/EVIOCSABS ioctls + * @value: latest reported value for the axis. + * @minimum: specifies minimum value for the axis. + * @maximum: specifies maximum value for the axis. + * @fuzz: specifies fuzz value that is used to filter noise from + *	the event stream. + * @flat: values that are within this value will be discarded by + *	joydev interface and reported as 0 instead. + * @resolution: specifies resolution for the values reported for + *	the axis. + * + * Note that input core does not clamp reported values to the + * [minimum, maximum] limits, such task is left to userspace. + * + * Resolution for main axes (ABS_X, ABS_Y, ABS_Z) is reported in + * units per millimeter (units/mm), resolution for rotational axes + * (ABS_RX, ABS_RY, ABS_RZ) is reported in units per radian. + */ +struct input_absinfo { +	__s32 value; +	__s32 minimum; +	__s32 maximum; +	__s32 fuzz; +	__s32 flat; +	__s32 resolution; +}; + +/** + * struct input_keymap_entry - used by EVIOCGKEYCODE/EVIOCSKEYCODE ioctls + * @scancode: scancode represented in machine-endian form. + * @len: length of the scancode that resides in @scancode buffer. + * @index: index in the keymap, may be used instead of scancode + * @flags: allows to specify how kernel should handle the request. For + *	example, setting INPUT_KEYMAP_BY_INDEX flag indicates that kernel + *	should perform lookup in keymap by @index instead of @scancode + * @keycode: key code assigned to this scancode + * + * The structure is used to retrieve and modify keymap data. Users have + * option of performing lookup either by @scancode itself or by @index + * in keymap entry. EVIOCGKEYCODE will also return scancode or index + * (depending on which element was used to perform lookup). + */ +struct input_keymap_entry { +#define INPUT_KEYMAP_BY_INDEX	(1 << 0) +	__u8  flags; +	__u8  len; +	__u16 index; +	__u32 keycode; +	__u8  scancode[32]; +}; + +#define EVIOCGVERSION		_IOR('E', 0x01, int)			/* get driver version */ +#define EVIOCGID		_IOR('E', 0x02, struct input_id)	/* get device ID */ +#define EVIOCGREP		_IOR('E', 0x03, unsigned int[2])	/* get repeat settings */ +#define EVIOCSREP		_IOW('E', 0x03, unsigned int[2])	/* set repeat settings */ + +#define EVIOCGKEYCODE		_IOR('E', 0x04, unsigned int[2])        /* get keycode */ +#define EVIOCGKEYCODE_V2	_IOR('E', 0x04, struct input_keymap_entry) +#define EVIOCSKEYCODE		_IOW('E', 0x04, unsigned int[2])        /* set keycode */ +#define EVIOCSKEYCODE_V2	_IOW('E', 0x04, struct input_keymap_entry) + +#define EVIOCGNAME(len)		_IOC(_IOC_READ, 'E', 0x06, len)		/* get device name */ +#define EVIOCGPHYS(len)		_IOC(_IOC_READ, 'E', 0x07, len)		/* get physical location */ +#define EVIOCGUNIQ(len)		_IOC(_IOC_READ, 'E', 0x08, len)		/* get unique identifier */ +#define EVIOCGPROP(len)		_IOC(_IOC_READ, 'E', 0x09, len)		/* get device properties */ + +/** + * EVIOCGMTSLOTS(len) - get MT slot values + * @len: size of the data buffer in bytes + * + * The ioctl buffer argument should be binary equivalent to + * + * struct input_mt_request_layout { + *	__u32 code; + *	__s32 values[num_slots]; + * }; + * + * where num_slots is the (arbitrary) number of MT slots to extract. + * + * The ioctl size argument (len) is the size of the buffer, which + * should satisfy len = (num_slots + 1) * sizeof(__s32).  If len is + * too small to fit all available slots, the first num_slots are + * returned. + * + * Before the call, code is set to the wanted ABS_MT event type. On + * return, values[] is filled with the slot values for the specified + * ABS_MT code. + * + * If the request code is not an ABS_MT value, -EINVAL is returned. + */ +#define EVIOCGMTSLOTS(len)	_IOC(_IOC_READ, 'E', 0x0a, len) + +#define EVIOCGKEY(len)		_IOC(_IOC_READ, 'E', 0x18, len)		/* get global key state */ +#define EVIOCGLED(len)		_IOC(_IOC_READ, 'E', 0x19, len)		/* get all LEDs */ +#define EVIOCGSND(len)		_IOC(_IOC_READ, 'E', 0x1a, len)		/* get all sounds status */ +#define EVIOCGSW(len)		_IOC(_IOC_READ, 'E', 0x1b, len)		/* get all switch states */ + +#define EVIOCGBIT(ev,len)	_IOC(_IOC_READ, 'E', 0x20 + (ev), len)	/* get event bits */ +#define EVIOCGABS(abs)		_IOR('E', 0x40 + (abs), struct input_absinfo)	/* get abs value/limits */ +#define EVIOCSABS(abs)		_IOW('E', 0xc0 + (abs), struct input_absinfo)	/* set abs value/limits */ + +#define EVIOCSFF		_IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect))	/* send a force effect to a force feedback device */ +#define EVIOCRMFF		_IOW('E', 0x81, int)			/* Erase a force effect */ +#define EVIOCGEFFECTS		_IOR('E', 0x84, int)			/* Report number of effects playable at the same time */ + +#define EVIOCGRAB		_IOW('E', 0x90, int)			/* Grab/Release device */ + +#define EVIOCSCLOCKID		_IOW('E', 0xa0, int)			/* Set clockid to be used for timestamps */ + +/* + * Device properties and quirks + */ + +#define INPUT_PROP_POINTER		0x00	/* needs a pointer */ +#define INPUT_PROP_DIRECT		0x01	/* direct input devices */ +#define INPUT_PROP_BUTTONPAD		0x02	/* has button(s) under pad */ +#define INPUT_PROP_SEMI_MT		0x03	/* touch rectangle only */ + +#define INPUT_PROP_MAX			0x1f +#define INPUT_PROP_CNT			(INPUT_PROP_MAX + 1) + +/* + * Event types + */ + +#define EV_SYN			0x00 +#define EV_KEY			0x01 +#define EV_REL			0x02 +#define EV_ABS			0x03 +#define EV_MSC			0x04 +#define EV_SW			0x05 +#define EV_LED			0x11 +#define EV_SND			0x12 +#define EV_REP			0x14 +#define EV_FF			0x15 +#define EV_PWR			0x16 +#define EV_FF_STATUS		0x17 +#define EV_MAX			0x1f +#define EV_CNT			(EV_MAX+1) + +/* + * Synchronization events. + */ + +#define SYN_REPORT		0 +#define SYN_CONFIG		1 +#define SYN_MT_REPORT		2 +#define SYN_DROPPED		3 + +/* + * Keys and buttons + * + * Most of the keys/buttons are modeled after USB HUT 1.12 + * (see http://www.usb.org/developers/hidpage). + * Abbreviations in the comments: + * AC - Application Control + * AL - Application Launch Button + * SC - System Control + */ + +#define KEY_RESERVED		0 +#define KEY_ESC			1 +#define KEY_1			2 +#define KEY_2			3 +#define KEY_3			4 +#define KEY_4			5 +#define KEY_5			6 +#define KEY_6			7 +#define KEY_7			8 +#define KEY_8			9 +#define KEY_9			10 +#define KEY_0			11 +#define KEY_MINUS		12 +#define KEY_EQUAL		13 +#define KEY_BACKSPACE		14 +#define KEY_TAB			15 +#define KEY_Q			16 +#define KEY_W			17 +#define KEY_E			18 +#define KEY_R			19 +#define KEY_T			20 +#define KEY_Y			21 +#define KEY_U			22 +#define KEY_I			23 +#define KEY_O			24 +#define KEY_P			25 +#define KEY_LEFTBRACE		26 +#define KEY_RIGHTBRACE		27 +#define KEY_ENTER		28 +#define KEY_LEFTCTRL		29 +#define KEY_A			30 +#define KEY_S			31 +#define KEY_D			32 +#define KEY_F			33 +#define KEY_G			34 +#define KEY_H			35 +#define KEY_J			36 +#define KEY_K			37 +#define KEY_L			38 +#define KEY_SEMICOLON		39 +#define KEY_APOSTROPHE		40 +#define KEY_GRAVE		41 +#define KEY_LEFTSHIFT		42 +#define KEY_BACKSLASH		43 +#define KEY_Z			44 +#define KEY_X			45 +#define KEY_C			46 +#define KEY_V			47 +#define KEY_B			48 +#define KEY_N			49 +#define KEY_M			50 +#define KEY_COMMA		51 +#define KEY_DOT			52 +#define KEY_SLASH		53 +#define KEY_RIGHTSHIFT		54 +#define KEY_KPASTERISK		55 +#define KEY_LEFTALT		56 +#define KEY_SPACE		57 +#define KEY_CAPSLOCK		58 +#define KEY_F1			59 +#define KEY_F2			60 +#define KEY_F3			61 +#define KEY_F4			62 +#define KEY_F5			63 +#define KEY_F6			64 +#define KEY_F7			65 +#define KEY_F8			66 +#define KEY_F9			67 +#define KEY_F10			68 +#define KEY_NUMLOCK		69 +#define KEY_SCROLLLOCK		70 +#define KEY_KP7			71 +#define KEY_KP8			72 +#define KEY_KP9			73 +#define KEY_KPMINUS		74 +#define KEY_KP4			75 +#define KEY_KP5			76 +#define KEY_KP6			77 +#define KEY_KPPLUS		78 +#define KEY_KP1			79 +#define KEY_KP2			80 +#define KEY_KP3			81 +#define KEY_KP0			82 +#define KEY_KPDOT		83 + +#define KEY_ZENKAKUHANKAKU	85 +#define KEY_102ND		86 +#define KEY_F11			87 +#define KEY_F12			88 +#define KEY_RO			89 +#define KEY_KATAKANA		90 +#define KEY_HIRAGANA		91 +#define KEY_HENKAN		92 +#define KEY_KATAKANAHIRAGANA	93 +#define KEY_MUHENKAN		94 +#define KEY_KPJPCOMMA		95 +#define KEY_KPENTER		96 +#define KEY_RIGHTCTRL		97 +#define KEY_KPSLASH		98 +#define KEY_SYSRQ		99 +#define KEY_RIGHTALT		100 +#define KEY_LINEFEED		101 +#define KEY_HOME		102 +#define KEY_UP			103 +#define KEY_PAGEUP		104 +#define KEY_LEFT		105 +#define KEY_RIGHT		106 +#define KEY_END			107 +#define KEY_DOWN		108 +#define KEY_PAGEDOWN		109 +#define KEY_INSERT		110 +#define KEY_DELETE		111 +#define KEY_MACRO		112 +#define KEY_MUTE		113 +#define KEY_VOLUMEDOWN		114 +#define KEY_VOLUMEUP		115 +#define KEY_POWER		116	/* SC System Power Down */ +#define KEY_KPEQUAL		117 +#define KEY_KPPLUSMINUS		118 +#define KEY_PAUSE		119 +#define KEY_SCALE		120	/* AL Compiz Scale (Expose) */ + +#define KEY_KPCOMMA		121 +#define KEY_HANGEUL		122 +#define KEY_HANGUEL		KEY_HANGEUL +#define KEY_HANJA		123 +#define KEY_YEN			124 +#define KEY_LEFTMETA		125 +#define KEY_RIGHTMETA		126 +#define KEY_COMPOSE		127 + +#define KEY_STOP		128	/* AC Stop */ +#define KEY_AGAIN		129 +#define KEY_PROPS		130	/* AC Properties */ +#define KEY_UNDO		131	/* AC Undo */ +#define KEY_FRONT		132 +#define KEY_COPY		133	/* AC Copy */ +#define KEY_OPEN		134	/* AC Open */ +#define KEY_PASTE		135	/* AC Paste */ +#define KEY_FIND		136	/* AC Search */ +#define KEY_CUT			137	/* AC Cut */ +#define KEY_HELP		138	/* AL Integrated Help Center */ +#define KEY_MENU		139	/* Menu (show menu) */ +#define KEY_CALC		140	/* AL Calculator */ +#define KEY_SETUP		141 +#define KEY_SLEEP		142	/* SC System Sleep */ +#define KEY_WAKEUP		143	/* System Wake Up */ +#define KEY_FILE		144	/* AL Local Machine Browser */ +#define KEY_SENDFILE		145 +#define KEY_DELETEFILE		146 +#define KEY_XFER		147 +#define KEY_PROG1		148 +#define KEY_PROG2		149 +#define KEY_WWW			150	/* AL Internet Browser */ +#define KEY_MSDOS		151 +#define KEY_COFFEE		152	/* AL Terminal Lock/Screensaver */ +#define KEY_SCREENLOCK		KEY_COFFEE +#define KEY_DIRECTION		153 +#define KEY_CYCLEWINDOWS	154 +#define KEY_MAIL		155 +#define KEY_BOOKMARKS		156	/* AC Bookmarks */ +#define KEY_COMPUTER		157 +#define KEY_BACK		158	/* AC Back */ +#define KEY_FORWARD		159	/* AC Forward */ +#define KEY_CLOSECD		160 +#define KEY_EJECTCD		161 +#define KEY_EJECTCLOSECD	162 +#define KEY_NEXTSONG		163 +#define KEY_PLAYPAUSE		164 +#define KEY_PREVIOUSSONG	165 +#define KEY_STOPCD		166 +#define KEY_RECORD		167 +#define KEY_REWIND		168 +#define KEY_PHONE		169	/* Media Select Telephone */ +#define KEY_ISO			170 +#define KEY_CONFIG		171	/* AL Consumer Control Configuration */ +#define KEY_HOMEPAGE		172	/* AC Home */ +#define KEY_REFRESH		173	/* AC Refresh */ +#define KEY_EXIT		174	/* AC Exit */ +#define KEY_MOVE		175 +#define KEY_EDIT		176 +#define KEY_SCROLLUP		177 +#define KEY_SCROLLDOWN		178 +#define KEY_KPLEFTPAREN		179 +#define KEY_KPRIGHTPAREN	180 +#define KEY_NEW			181	/* AC New */ +#define KEY_REDO		182	/* AC Redo/Repeat */ + +#define KEY_F13			183 +#define KEY_F14			184 +#define KEY_F15			185 +#define KEY_F16			186 +#define KEY_F17			187 +#define KEY_F18			188 +#define KEY_F19			189 +#define KEY_F20			190 +#define KEY_F21			191 +#define KEY_F22			192 +#define KEY_F23			193 +#define KEY_F24			194 + +#define KEY_PLAYCD		200 +#define KEY_PAUSECD		201 +#define KEY_PROG3		202 +#define KEY_PROG4		203 +#define KEY_DASHBOARD		204	/* AL Dashboard */ +#define KEY_SUSPEND		205 +#define KEY_CLOSE		206	/* AC Close */ +#define KEY_PLAY		207 +#define KEY_FASTFORWARD		208 +#define KEY_BASSBOOST		209 +#define KEY_PRINT		210	/* AC Print */ +#define KEY_HP			211 +#define KEY_CAMERA		212 +#define KEY_SOUND		213 +#define KEY_QUESTION		214 +#define KEY_EMAIL		215 +#define KEY_CHAT		216 +#define KEY_SEARCH		217 +#define KEY_CONNECT		218 +#define KEY_FINANCE		219	/* AL Checkbook/Finance */ +#define KEY_SPORT		220 +#define KEY_SHOP		221 +#define KEY_ALTERASE		222 +#define KEY_CANCEL		223	/* AC Cancel */ +#define KEY_BRIGHTNESSDOWN	224 +#define KEY_BRIGHTNESSUP	225 +#define KEY_MEDIA		226 + +#define KEY_SWITCHVIDEOMODE	227	/* Cycle between available video +					   outputs (Monitor/LCD/TV-out/etc) */ +#define KEY_KBDILLUMTOGGLE	228 +#define KEY_KBDILLUMDOWN	229 +#define KEY_KBDILLUMUP		230 + +#define KEY_SEND		231	/* AC Send */ +#define KEY_REPLY		232	/* AC Reply */ +#define KEY_FORWARDMAIL		233	/* AC Forward Msg */ +#define KEY_SAVE		234	/* AC Save */ +#define KEY_DOCUMENTS		235 + +#define KEY_BATTERY		236 + +#define KEY_BLUETOOTH		237 +#define KEY_WLAN		238 +#define KEY_UWB			239 + +#define KEY_UNKNOWN		240 + +#define KEY_VIDEO_NEXT		241	/* drive next video source */ +#define KEY_VIDEO_PREV		242	/* drive previous video source */ +#define KEY_BRIGHTNESS_CYCLE	243	/* brightness up, after max is min */ +#define KEY_BRIGHTNESS_ZERO	244	/* brightness off, use ambient */ +#define KEY_DISPLAY_OFF		245	/* display device to off state */ + +#define KEY_WIMAX		246 +#define KEY_RFKILL		247	/* Key that controls all radios */ + +#define KEY_MICMUTE		248	/* Mute / unmute the microphone */ + +/* Code 255 is reserved for special needs of AT keyboard driver */ + +#define BTN_MISC		0x100 +#define BTN_0			0x100 +#define BTN_1			0x101 +#define BTN_2			0x102 +#define BTN_3			0x103 +#define BTN_4			0x104 +#define BTN_5			0x105 +#define BTN_6			0x106 +#define BTN_7			0x107 +#define BTN_8			0x108 +#define BTN_9			0x109 + +#define BTN_MOUSE		0x110 +#define BTN_LEFT		0x110 +#define BTN_RIGHT		0x111 +#define BTN_MIDDLE		0x112 +#define BTN_SIDE		0x113 +#define BTN_EXTRA		0x114 +#define BTN_FORWARD		0x115 +#define BTN_BACK		0x116 +#define BTN_TASK		0x117 + +#define BTN_JOYSTICK		0x120 +#define BTN_TRIGGER		0x120 +#define BTN_THUMB		0x121 +#define BTN_THUMB2		0x122 +#define BTN_TOP			0x123 +#define BTN_TOP2		0x124 +#define BTN_PINKIE		0x125 +#define BTN_BASE		0x126 +#define BTN_BASE2		0x127 +#define BTN_BASE3		0x128 +#define BTN_BASE4		0x129 +#define BTN_BASE5		0x12a +#define BTN_BASE6		0x12b +#define BTN_DEAD		0x12f + +#define BTN_GAMEPAD		0x130 +#define BTN_A			0x130 +#define BTN_B			0x131 +#define BTN_C			0x132 +#define BTN_X			0x133 +#define BTN_Y			0x134 +#define BTN_Z			0x135 +#define BTN_TL			0x136 +#define BTN_TR			0x137 +#define BTN_TL2			0x138 +#define BTN_TR2			0x139 +#define BTN_SELECT		0x13a +#define BTN_START		0x13b +#define BTN_MODE		0x13c +#define BTN_THUMBL		0x13d +#define BTN_THUMBR		0x13e + +#define BTN_DIGI		0x140 +#define BTN_TOOL_PEN		0x140 +#define BTN_TOOL_RUBBER		0x141 +#define BTN_TOOL_BRUSH		0x142 +#define BTN_TOOL_PENCIL		0x143 +#define BTN_TOOL_AIRBRUSH	0x144 +#define BTN_TOOL_FINGER		0x145 +#define BTN_TOOL_MOUSE		0x146 +#define BTN_TOOL_LENS		0x147 +#define BTN_TOOL_QUINTTAP	0x148	/* Five fingers on trackpad */ +#define BTN_TOUCH		0x14a +#define BTN_STYLUS		0x14b +#define BTN_STYLUS2		0x14c +#define BTN_TOOL_DOUBLETAP	0x14d +#define BTN_TOOL_TRIPLETAP	0x14e +#define BTN_TOOL_QUADTAP	0x14f	/* Four fingers on trackpad */ + +#define BTN_WHEEL		0x150 +#define BTN_GEAR_DOWN		0x150 +#define BTN_GEAR_UP		0x151 + +#define KEY_OK			0x160 +#define KEY_SELECT		0x161 +#define KEY_GOTO		0x162 +#define KEY_CLEAR		0x163 +#define KEY_POWER2		0x164 +#define KEY_OPTION		0x165 +#define KEY_INFO		0x166	/* AL OEM Features/Tips/Tutorial */ +#define KEY_TIME		0x167 +#define KEY_VENDOR		0x168 +#define KEY_ARCHIVE		0x169 +#define KEY_PROGRAM		0x16a	/* Media Select Program Guide */ +#define KEY_CHANNEL		0x16b +#define KEY_FAVORITES		0x16c +#define KEY_EPG			0x16d +#define KEY_PVR			0x16e	/* Media Select Home */ +#define KEY_MHP			0x16f +#define KEY_LANGUAGE		0x170 +#define KEY_TITLE		0x171 +#define KEY_SUBTITLE		0x172 +#define KEY_ANGLE		0x173 +#define KEY_ZOOM		0x174 +#define KEY_MODE		0x175 +#define KEY_KEYBOARD		0x176 +#define KEY_SCREEN		0x177 +#define KEY_PC			0x178	/* Media Select Computer */ +#define KEY_TV			0x179	/* Media Select TV */ +#define KEY_TV2			0x17a	/* Media Select Cable */ +#define KEY_VCR			0x17b	/* Media Select VCR */ +#define KEY_VCR2		0x17c	/* VCR Plus */ +#define KEY_SAT			0x17d	/* Media Select Satellite */ +#define KEY_SAT2		0x17e +#define KEY_CD			0x17f	/* Media Select CD */ +#define KEY_TAPE		0x180	/* Media Select Tape */ +#define KEY_RADIO		0x181 +#define KEY_TUNER		0x182	/* Media Select Tuner */ +#define KEY_PLAYER		0x183 +#define KEY_TEXT		0x184 +#define KEY_DVD			0x185	/* Media Select DVD */ +#define KEY_AUX			0x186 +#define KEY_MP3			0x187 +#define KEY_AUDIO		0x188	/* AL Audio Browser */ +#define KEY_VIDEO		0x189	/* AL Movie Browser */ +#define KEY_DIRECTORY		0x18a +#define KEY_LIST		0x18b +#define KEY_MEMO		0x18c	/* Media Select Messages */ +#define KEY_CALENDAR		0x18d +#define KEY_RED			0x18e +#define KEY_GREEN		0x18f +#define KEY_YELLOW		0x190 +#define KEY_BLUE		0x191 +#define KEY_CHANNELUP		0x192	/* Channel Increment */ +#define KEY_CHANNELDOWN		0x193	/* Channel Decrement */ +#define KEY_FIRST		0x194 +#define KEY_LAST		0x195	/* Recall Last */ +#define KEY_AB			0x196 +#define KEY_NEXT		0x197 +#define KEY_RESTART		0x198 +#define KEY_SLOW		0x199 +#define KEY_SHUFFLE		0x19a +#define KEY_BREAK		0x19b +#define KEY_PREVIOUS		0x19c +#define KEY_DIGITS		0x19d +#define KEY_TEEN		0x19e +#define KEY_TWEN		0x19f +#define KEY_VIDEOPHONE		0x1a0	/* Media Select Video Phone */ +#define KEY_GAMES		0x1a1	/* Media Select Games */ +#define KEY_ZOOMIN		0x1a2	/* AC Zoom In */ +#define KEY_ZOOMOUT		0x1a3	/* AC Zoom Out */ +#define KEY_ZOOMRESET		0x1a4	/* AC Zoom */ +#define KEY_WORDPROCESSOR	0x1a5	/* AL Word Processor */ +#define KEY_EDITOR		0x1a6	/* AL Text Editor */ +#define KEY_SPREADSHEET		0x1a7	/* AL Spreadsheet */ +#define KEY_GRAPHICSEDITOR	0x1a8	/* AL Graphics Editor */ +#define KEY_PRESENTATION	0x1a9	/* AL Presentation App */ +#define KEY_DATABASE		0x1aa	/* AL Database App */ +#define KEY_NEWS		0x1ab	/* AL Newsreader */ +#define KEY_VOICEMAIL		0x1ac	/* AL Voicemail */ +#define KEY_ADDRESSBOOK		0x1ad	/* AL Contacts/Address Book */ +#define KEY_MESSENGER		0x1ae	/* AL Instant Messaging */ +#define KEY_DISPLAYTOGGLE	0x1af	/* Turn display (LCD) on and off */ +#define KEY_SPELLCHECK		0x1b0   /* AL Spell Check */ +#define KEY_LOGOFF		0x1b1   /* AL Logoff */ + +#define KEY_DOLLAR		0x1b2 +#define KEY_EURO		0x1b3 + +#define KEY_FRAMEBACK		0x1b4	/* Consumer - transport controls */ +#define KEY_FRAMEFORWARD	0x1b5 +#define KEY_CONTEXT_MENU	0x1b6	/* GenDesc - system context menu */ +#define KEY_MEDIA_REPEAT	0x1b7	/* Consumer - transport control */ +#define KEY_10CHANNELSUP	0x1b8	/* 10 channels up (10+) */ +#define KEY_10CHANNELSDOWN	0x1b9	/* 10 channels down (10-) */ +#define KEY_IMAGES		0x1ba	/* AL Image Browser */ + +#define KEY_DEL_EOL		0x1c0 +#define KEY_DEL_EOS		0x1c1 +#define KEY_INS_LINE		0x1c2 +#define KEY_DEL_LINE		0x1c3 + +#define KEY_FN			0x1d0 +#define KEY_FN_ESC		0x1d1 +#define KEY_FN_F1		0x1d2 +#define KEY_FN_F2		0x1d3 +#define KEY_FN_F3		0x1d4 +#define KEY_FN_F4		0x1d5 +#define KEY_FN_F5		0x1d6 +#define KEY_FN_F6		0x1d7 +#define KEY_FN_F7		0x1d8 +#define KEY_FN_F8		0x1d9 +#define KEY_FN_F9		0x1da +#define KEY_FN_F10		0x1db +#define KEY_FN_F11		0x1dc +#define KEY_FN_F12		0x1dd +#define KEY_FN_1		0x1de +#define KEY_FN_2		0x1df +#define KEY_FN_D		0x1e0 +#define KEY_FN_E		0x1e1 +#define KEY_FN_F		0x1e2 +#define KEY_FN_S		0x1e3 +#define KEY_FN_B		0x1e4 + +#define KEY_BRL_DOT1		0x1f1 +#define KEY_BRL_DOT2		0x1f2 +#define KEY_BRL_DOT3		0x1f3 +#define KEY_BRL_DOT4		0x1f4 +#define KEY_BRL_DOT5		0x1f5 +#define KEY_BRL_DOT6		0x1f6 +#define KEY_BRL_DOT7		0x1f7 +#define KEY_BRL_DOT8		0x1f8 +#define KEY_BRL_DOT9		0x1f9 +#define KEY_BRL_DOT10		0x1fa + +#define KEY_NUMERIC_0		0x200	/* used by phones, remote controls, */ +#define KEY_NUMERIC_1		0x201	/* and other keypads */ +#define KEY_NUMERIC_2		0x202 +#define KEY_NUMERIC_3		0x203 +#define KEY_NUMERIC_4		0x204 +#define KEY_NUMERIC_5		0x205 +#define KEY_NUMERIC_6		0x206 +#define KEY_NUMERIC_7		0x207 +#define KEY_NUMERIC_8		0x208 +#define KEY_NUMERIC_9		0x209 +#define KEY_NUMERIC_STAR	0x20a +#define KEY_NUMERIC_POUND	0x20b + +#define KEY_CAMERA_FOCUS	0x210 +#define KEY_WPS_BUTTON		0x211	/* WiFi Protected Setup key */ + +#define KEY_TOUCHPAD_TOGGLE	0x212	/* Request switch touchpad on or off */ +#define KEY_TOUCHPAD_ON		0x213 +#define KEY_TOUCHPAD_OFF	0x214 + +#define KEY_CAMERA_ZOOMIN	0x215 +#define KEY_CAMERA_ZOOMOUT	0x216 +#define KEY_CAMERA_UP		0x217 +#define KEY_CAMERA_DOWN		0x218 +#define KEY_CAMERA_LEFT		0x219 +#define KEY_CAMERA_RIGHT	0x21a + +#define BTN_TRIGGER_HAPPY		0x2c0 +#define BTN_TRIGGER_HAPPY1		0x2c0 +#define BTN_TRIGGER_HAPPY2		0x2c1 +#define BTN_TRIGGER_HAPPY3		0x2c2 +#define BTN_TRIGGER_HAPPY4		0x2c3 +#define BTN_TRIGGER_HAPPY5		0x2c4 +#define BTN_TRIGGER_HAPPY6		0x2c5 +#define BTN_TRIGGER_HAPPY7		0x2c6 +#define BTN_TRIGGER_HAPPY8		0x2c7 +#define BTN_TRIGGER_HAPPY9		0x2c8 +#define BTN_TRIGGER_HAPPY10		0x2c9 +#define BTN_TRIGGER_HAPPY11		0x2ca +#define BTN_TRIGGER_HAPPY12		0x2cb +#define BTN_TRIGGER_HAPPY13		0x2cc +#define BTN_TRIGGER_HAPPY14		0x2cd +#define BTN_TRIGGER_HAPPY15		0x2ce +#define BTN_TRIGGER_HAPPY16		0x2cf +#define BTN_TRIGGER_HAPPY17		0x2d0 +#define BTN_TRIGGER_HAPPY18		0x2d1 +#define BTN_TRIGGER_HAPPY19		0x2d2 +#define BTN_TRIGGER_HAPPY20		0x2d3 +#define BTN_TRIGGER_HAPPY21		0x2d4 +#define BTN_TRIGGER_HAPPY22		0x2d5 +#define BTN_TRIGGER_HAPPY23		0x2d6 +#define BTN_TRIGGER_HAPPY24		0x2d7 +#define BTN_TRIGGER_HAPPY25		0x2d8 +#define BTN_TRIGGER_HAPPY26		0x2d9 +#define BTN_TRIGGER_HAPPY27		0x2da +#define BTN_TRIGGER_HAPPY28		0x2db +#define BTN_TRIGGER_HAPPY29		0x2dc +#define BTN_TRIGGER_HAPPY30		0x2dd +#define BTN_TRIGGER_HAPPY31		0x2de +#define BTN_TRIGGER_HAPPY32		0x2df +#define BTN_TRIGGER_HAPPY33		0x2e0 +#define BTN_TRIGGER_HAPPY34		0x2e1 +#define BTN_TRIGGER_HAPPY35		0x2e2 +#define BTN_TRIGGER_HAPPY36		0x2e3 +#define BTN_TRIGGER_HAPPY37		0x2e4 +#define BTN_TRIGGER_HAPPY38		0x2e5 +#define BTN_TRIGGER_HAPPY39		0x2e6 +#define BTN_TRIGGER_HAPPY40		0x2e7 + +/* We avoid low common keys in module aliases so they don't get huge. */ +#define KEY_MIN_INTERESTING	KEY_MUTE +#define KEY_MAX			0x2ff +#define KEY_CNT			(KEY_MAX+1) + +/* + * Relative axes + */ + +#define REL_X			0x00 +#define REL_Y			0x01 +#define REL_Z			0x02 +#define REL_RX			0x03 +#define REL_RY			0x04 +#define REL_RZ			0x05 +#define REL_HWHEEL		0x06 +#define REL_DIAL		0x07 +#define REL_WHEEL		0x08 +#define REL_MISC		0x09 +#define REL_MAX			0x0f +#define REL_CNT			(REL_MAX+1) + +/* + * Absolute axes + */ + +#define ABS_X			0x00 +#define ABS_Y			0x01 +#define ABS_Z			0x02 +#define ABS_RX			0x03 +#define ABS_RY			0x04 +#define ABS_RZ			0x05 +#define ABS_THROTTLE		0x06 +#define ABS_RUDDER		0x07 +#define ABS_WHEEL		0x08 +#define ABS_GAS			0x09 +#define ABS_BRAKE		0x0a +#define ABS_HAT0X		0x10 +#define ABS_HAT0Y		0x11 +#define ABS_HAT1X		0x12 +#define ABS_HAT1Y		0x13 +#define ABS_HAT2X		0x14 +#define ABS_HAT2Y		0x15 +#define ABS_HAT3X		0x16 +#define ABS_HAT3Y		0x17 +#define ABS_PRESSURE		0x18 +#define ABS_DISTANCE		0x19 +#define ABS_TILT_X		0x1a +#define ABS_TILT_Y		0x1b +#define ABS_TOOL_WIDTH		0x1c + +#define ABS_VOLUME		0x20 + +#define ABS_MISC		0x28 + +#define ABS_MT_SLOT		0x2f	/* MT slot being modified */ +#define ABS_MT_TOUCH_MAJOR	0x30	/* Major axis of touching ellipse */ +#define ABS_MT_TOUCH_MINOR	0x31	/* Minor axis (omit if circular) */ +#define ABS_MT_WIDTH_MAJOR	0x32	/* Major axis of approaching ellipse */ +#define ABS_MT_WIDTH_MINOR	0x33	/* Minor axis (omit if circular) */ +#define ABS_MT_ORIENTATION	0x34	/* Ellipse orientation */ +#define ABS_MT_POSITION_X	0x35	/* Center X touch position */ +#define ABS_MT_POSITION_Y	0x36	/* Center Y touch position */ +#define ABS_MT_TOOL_TYPE	0x37	/* Type of touching device */ +#define ABS_MT_BLOB_ID		0x38	/* Group a set of packets as a blob */ +#define ABS_MT_TRACKING_ID	0x39	/* Unique ID of initiated contact */ +#define ABS_MT_PRESSURE		0x3a	/* Pressure on contact area */ +#define ABS_MT_DISTANCE		0x3b	/* Contact hover distance */ +#define ABS_MT_TOOL_X		0x3c	/* Center X tool position */ +#define ABS_MT_TOOL_Y		0x3d	/* Center Y tool position */ + + +#define ABS_MAX			0x3f +#define ABS_CNT			(ABS_MAX+1) + +/* + * Switch events + */ + +#define SW_LID			0x00  /* set = lid shut */ +#define SW_TABLET_MODE		0x01  /* set = tablet mode */ +#define SW_HEADPHONE_INSERT	0x02  /* set = inserted */ +#define SW_RFKILL_ALL		0x03  /* rfkill master switch, type "any" +					 set = radio enabled */ +#define SW_RADIO		SW_RFKILL_ALL	/* deprecated */ +#define SW_MICROPHONE_INSERT	0x04  /* set = inserted */ +#define SW_DOCK			0x05  /* set = plugged into dock */ +#define SW_LINEOUT_INSERT	0x06  /* set = inserted */ +#define SW_JACK_PHYSICAL_INSERT 0x07  /* set = mechanical switch set */ +#define SW_VIDEOOUT_INSERT	0x08  /* set = inserted */ +#define SW_CAMERA_LENS_COVER	0x09  /* set = lens covered */ +#define SW_KEYPAD_SLIDE		0x0a  /* set = keypad slide out */ +#define SW_FRONT_PROXIMITY	0x0b  /* set = front proximity sensor active */ +#define SW_ROTATE_LOCK		0x0c  /* set = rotate locked/disabled */ +#define SW_LINEIN_INSERT	0x0d  /* set = inserted */ +#define SW_MAX			0x0f +#define SW_CNT			(SW_MAX+1) + +/* + * Misc events + */ + +#define MSC_SERIAL		0x00 +#define MSC_PULSELED		0x01 +#define MSC_GESTURE		0x02 +#define MSC_RAW			0x03 +#define MSC_SCAN		0x04 +#define MSC_MAX			0x07 +#define MSC_CNT			(MSC_MAX+1) + +/* + * LEDs + */ + +#define LED_NUML		0x00 +#define LED_CAPSL		0x01 +#define LED_SCROLLL		0x02 +#define LED_COMPOSE		0x03 +#define LED_KANA		0x04 +#define LED_SLEEP		0x05 +#define LED_SUSPEND		0x06 +#define LED_MUTE		0x07 +#define LED_MISC		0x08 +#define LED_MAIL		0x09 +#define LED_CHARGING		0x0a +#define LED_MAX			0x0f +#define LED_CNT			(LED_MAX+1) + +/* + * Autorepeat values + */ + +#define REP_DELAY		0x00 +#define REP_PERIOD		0x01 +#define REP_MAX			0x01 +#define REP_CNT			(REP_MAX+1) + +/* + * Sounds + */ + +#define SND_CLICK		0x00 +#define SND_BELL		0x01 +#define SND_TONE		0x02 +#define SND_MAX			0x07 +#define SND_CNT			(SND_MAX+1) + +/* + * IDs. + */ + +#define ID_BUS			0 +#define ID_VENDOR		1 +#define ID_PRODUCT		2 +#define ID_VERSION		3 + +#define BUS_PCI			0x01 +#define BUS_ISAPNP		0x02 +#define BUS_USB			0x03 +#define BUS_HIL			0x04 +#define BUS_BLUETOOTH		0x05 +#define BUS_VIRTUAL		0x06 + +#define BUS_ISA			0x10 +#define BUS_I8042		0x11 +#define BUS_XTKBD		0x12 +#define BUS_RS232		0x13 +#define BUS_GAMEPORT		0x14 +#define BUS_PARPORT		0x15 +#define BUS_AMIGA		0x16 +#define BUS_ADB			0x17 +#define BUS_I2C			0x18 +#define BUS_HOST		0x19 +#define BUS_GSC			0x1A +#define BUS_ATARI		0x1B +#define BUS_SPI			0x1C + +/* + * MT_TOOL types + */ +#define MT_TOOL_FINGER		0 +#define MT_TOOL_PEN		1 +#define MT_TOOL_MAX		1 + +/* + * Values describing the status of a force-feedback effect + */ +#define FF_STATUS_STOPPED	0x00 +#define FF_STATUS_PLAYING	0x01 +#define FF_STATUS_MAX		0x01 + +/* + * Structures used in ioctls to upload effects to a device + * They are pieces of a bigger structure (called ff_effect) + */ + +/* + * All duration values are expressed in ms. Values above 32767 ms (0x7fff) + * should not be used and have unspecified results. + */ + +/** + * struct ff_replay - defines scheduling of the force-feedback effect + * @length: duration of the effect + * @delay: delay before effect should start playing + */ +struct ff_replay { +	__u16 length; +	__u16 delay; +}; + +/** + * struct ff_trigger - defines what triggers the force-feedback effect + * @button: number of the button triggering the effect + * @interval: controls how soon the effect can be re-triggered + */ +struct ff_trigger { +	__u16 button; +	__u16 interval; +}; + +/** + * struct ff_envelope - generic force-feedback effect envelope + * @attack_length: duration of the attack (ms) + * @attack_level: level at the beginning of the attack + * @fade_length: duration of fade (ms) + * @fade_level: level at the end of fade + * + * The @attack_level and @fade_level are absolute values; when applying + * envelope force-feedback core will convert to positive/negative + * value based on polarity of the default level of the effect. + * Valid range for the attack and fade levels is 0x0000 - 0x7fff + */ +struct ff_envelope { +	__u16 attack_length; +	__u16 attack_level; +	__u16 fade_length; +	__u16 fade_level; +}; + +/** + * struct ff_constant_effect - defines parameters of a constant force-feedback effect + * @level: strength of the effect; may be negative + * @envelope: envelope data + */ +struct ff_constant_effect { +	__s16 level; +	struct ff_envelope envelope; +}; + +/** + * struct ff_ramp_effect - defines parameters of a ramp force-feedback effect + * @start_level: beginning strength of the effect; may be negative + * @end_level: final strength of the effect; may be negative + * @envelope: envelope data + */ +struct ff_ramp_effect { +	__s16 start_level; +	__s16 end_level; +	struct ff_envelope envelope; +}; + +/** + * struct ff_condition_effect - defines a spring or friction force-feedback effect + * @right_saturation: maximum level when joystick moved all way to the right + * @left_saturation: same for the left side + * @right_coeff: controls how fast the force grows when the joystick moves + *	to the right + * @left_coeff: same for the left side + * @deadband: size of the dead zone, where no force is produced + * @center: position of the dead zone + */ +struct ff_condition_effect { +	__u16 right_saturation; +	__u16 left_saturation; + +	__s16 right_coeff; +	__s16 left_coeff; + +	__u16 deadband; +	__s16 center; +}; + +/** + * struct ff_periodic_effect - defines parameters of a periodic force-feedback effect + * @waveform: kind of the effect (wave) + * @period: period of the wave (ms) + * @magnitude: peak value + * @offset: mean value of the wave (roughly) + * @phase: 'horizontal' shift + * @envelope: envelope data + * @custom_len: number of samples (FF_CUSTOM only) + * @custom_data: buffer of samples (FF_CUSTOM only) + * + * Known waveforms - FF_SQUARE, FF_TRIANGLE, FF_SINE, FF_SAW_UP, + * FF_SAW_DOWN, FF_CUSTOM. The exact syntax FF_CUSTOM is undefined + * for the time being as no driver supports it yet. + * + * Note: the data pointed by custom_data is copied by the driver. + * You can therefore dispose of the memory after the upload/update. + */ +struct ff_periodic_effect { +	__u16 waveform; +	__u16 period; +	__s16 magnitude; +	__s16 offset; +	__u16 phase; + +	struct ff_envelope envelope; + +	__u32 custom_len; +	__s16 __user *custom_data; +}; + +/** + * struct ff_rumble_effect - defines parameters of a periodic force-feedback effect + * @strong_magnitude: magnitude of the heavy motor + * @weak_magnitude: magnitude of the light one + * + * Some rumble pads have two motors of different weight. Strong_magnitude + * represents the magnitude of the vibration generated by the heavy one. + */ +struct ff_rumble_effect { +	__u16 strong_magnitude; +	__u16 weak_magnitude; +}; + +/** + * struct ff_effect - defines force feedback effect + * @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING, + *	FF_FRICTION, FF_DAMPER, FF_RUMBLE, FF_INERTIA, or FF_CUSTOM) + * @id: an unique id assigned to an effect + * @direction: direction of the effect + * @trigger: trigger conditions (struct ff_trigger) + * @replay: scheduling of the effect (struct ff_replay) + * @u: effect-specific structure (one of ff_constant_effect, ff_ramp_effect, + *	ff_periodic_effect, ff_condition_effect, ff_rumble_effect) further + *	defining effect parameters + * + * This structure is sent through ioctl from the application to the driver. + * To create a new effect application should set its @id to -1; the kernel + * will return assigned @id which can later be used to update or delete + * this effect. + * + * Direction of the effect is encoded as follows: + *	0 deg -> 0x0000 (down) + *	90 deg -> 0x4000 (left) + *	180 deg -> 0x8000 (up) + *	270 deg -> 0xC000 (right) + */ +struct ff_effect { +	__u16 type; +	__s16 id; +	__u16 direction; +	struct ff_trigger trigger; +	struct ff_replay replay; + +	union { +		struct ff_constant_effect constant; +		struct ff_ramp_effect ramp; +		struct ff_periodic_effect periodic; +		struct ff_condition_effect condition[2]; /* One for each axis */ +		struct ff_rumble_effect rumble; +	} u; +}; + +/* + * Force feedback effect types + */ + +#define FF_RUMBLE	0x50 +#define FF_PERIODIC	0x51 +#define FF_CONSTANT	0x52 +#define FF_SPRING	0x53 +#define FF_FRICTION	0x54 +#define FF_DAMPER	0x55 +#define FF_INERTIA	0x56 +#define FF_RAMP		0x57 + +#define FF_EFFECT_MIN	FF_RUMBLE +#define FF_EFFECT_MAX	FF_RAMP + +/* + * Force feedback periodic effect types + */ + +#define FF_SQUARE	0x58 +#define FF_TRIANGLE	0x59 +#define FF_SINE		0x5a +#define FF_SAW_UP	0x5b +#define FF_SAW_DOWN	0x5c +#define FF_CUSTOM	0x5d + +#define FF_WAVEFORM_MIN	FF_SQUARE +#define FF_WAVEFORM_MAX	FF_CUSTOM + +/* + * Set ff device properties + */ + +#define FF_GAIN		0x60 +#define FF_AUTOCENTER	0x61 + +#define FF_MAX		0x7f +#define FF_CNT		(FF_MAX+1) + +#endif /* _UAPI_INPUT_H */ diff --git a/include/uapi/linux/ioctl.h b/include/uapi/linux/ioctl.h new file mode 100644 index 00000000000..aa91eb3951e --- /dev/null +++ b/include/uapi/linux/ioctl.h @@ -0,0 +1,7 @@ +#ifndef _LINUX_IOCTL_H +#define _LINUX_IOCTL_H + +#include <asm/ioctl.h> + +#endif /* _LINUX_IOCTL_H */ + diff --git a/include/uapi/linux/ip.h b/include/uapi/linux/ip.h new file mode 100644 index 00000000000..6cf06bfd841 --- /dev/null +++ b/include/uapi/linux/ip.h @@ -0,0 +1,136 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the  BSD Socket + *		interface as the means of communication with the user level. + * + *		Definitions for the IP protocol. + * + * Version:	@(#)ip.h	1.0.2	04/28/93 + * + * Authors:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + * + *		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. + */ +#ifndef _UAPI_LINUX_IP_H +#define _UAPI_LINUX_IP_H +#include <linux/types.h> +#include <asm/byteorder.h> + +#define IPTOS_TOS_MASK		0x1E +#define IPTOS_TOS(tos)		((tos)&IPTOS_TOS_MASK) +#define	IPTOS_LOWDELAY		0x10 +#define	IPTOS_THROUGHPUT	0x08 +#define	IPTOS_RELIABILITY	0x04 +#define	IPTOS_MINCOST		0x02 + +#define IPTOS_PREC_MASK		0xE0 +#define IPTOS_PREC(tos)		((tos)&IPTOS_PREC_MASK) +#define IPTOS_PREC_NETCONTROL           0xe0 +#define IPTOS_PREC_INTERNETCONTROL      0xc0 +#define IPTOS_PREC_CRITIC_ECP           0xa0 +#define IPTOS_PREC_FLASHOVERRIDE        0x80 +#define IPTOS_PREC_FLASH                0x60 +#define IPTOS_PREC_IMMEDIATE            0x40 +#define IPTOS_PREC_PRIORITY             0x20 +#define IPTOS_PREC_ROUTINE              0x00 + + +/* IP options */ +#define IPOPT_COPY		0x80 +#define IPOPT_CLASS_MASK	0x60 +#define IPOPT_NUMBER_MASK	0x1f + +#define	IPOPT_COPIED(o)		((o)&IPOPT_COPY) +#define	IPOPT_CLASS(o)		((o)&IPOPT_CLASS_MASK) +#define	IPOPT_NUMBER(o)		((o)&IPOPT_NUMBER_MASK) + +#define	IPOPT_CONTROL		0x00 +#define	IPOPT_RESERVED1		0x20 +#define	IPOPT_MEASUREMENT	0x40 +#define	IPOPT_RESERVED2		0x60 + +#define IPOPT_END	(0 |IPOPT_CONTROL) +#define IPOPT_NOOP	(1 |IPOPT_CONTROL) +#define IPOPT_SEC	(2 |IPOPT_CONTROL|IPOPT_COPY) +#define IPOPT_LSRR	(3 |IPOPT_CONTROL|IPOPT_COPY) +#define IPOPT_TIMESTAMP	(4 |IPOPT_MEASUREMENT) +#define IPOPT_CIPSO	(6 |IPOPT_CONTROL|IPOPT_COPY) +#define IPOPT_RR	(7 |IPOPT_CONTROL) +#define IPOPT_SID	(8 |IPOPT_CONTROL|IPOPT_COPY) +#define IPOPT_SSRR	(9 |IPOPT_CONTROL|IPOPT_COPY) +#define IPOPT_RA	(20|IPOPT_CONTROL|IPOPT_COPY) + +#define IPVERSION	4 +#define MAXTTL		255 +#define IPDEFTTL	64 + +#define IPOPT_OPTVAL 0 +#define IPOPT_OLEN   1 +#define IPOPT_OFFSET 2 +#define IPOPT_MINOFF 4 +#define MAX_IPOPTLEN 40 +#define IPOPT_NOP IPOPT_NOOP +#define IPOPT_EOL IPOPT_END +#define IPOPT_TS  IPOPT_TIMESTAMP + +#define	IPOPT_TS_TSONLY		0		/* timestamps only */ +#define	IPOPT_TS_TSANDADDR	1		/* timestamps and addresses */ +#define	IPOPT_TS_PRESPEC	3		/* specified modules only */ + +#define IPV4_BEET_PHMAXLEN 8 + +struct iphdr { +#if defined(__LITTLE_ENDIAN_BITFIELD) +	__u8	ihl:4, +		version:4; +#elif defined (__BIG_ENDIAN_BITFIELD) +	__u8	version:4, +  		ihl:4; +#else +#error	"Please fix <asm/byteorder.h>" +#endif +	__u8	tos; +	__be16	tot_len; +	__be16	id; +	__be16	frag_off; +	__u8	ttl; +	__u8	protocol; +	__sum16	check; +	__be32	saddr; +	__be32	daddr; +	/*The options start here. */ +}; + + +struct ip_auth_hdr { +	__u8  nexthdr; +	__u8  hdrlen;		/* This one is measured in 32 bit units! */ +	__be16 reserved; +	__be32 spi; +	__be32 seq_no;		/* Sequence number */ +	__u8  auth_data[0];	/* Variable len but >=4. Mind the 64 bit alignment! */ +}; + +struct ip_esp_hdr { +	__be32 spi; +	__be32 seq_no;		/* Sequence number */ +	__u8  enc_data[0];	/* Variable len but >=8. Mind the 64 bit alignment! */ +}; + +struct ip_comp_hdr { +	__u8 nexthdr; +	__u8 flags; +	__be16 cpi; +}; + +struct ip_beet_phdr { +	__u8 nexthdr; +	__u8 hdrlen; +	__u8 padlen; +	__u8 reserved; +}; + +#endif /* _UAPI_LINUX_IP_H */ diff --git a/include/uapi/linux/ip6_tunnel.h b/include/uapi/linux/ip6_tunnel.h new file mode 100644 index 00000000000..48af63c9a48 --- /dev/null +++ b/include/uapi/linux/ip6_tunnel.h @@ -0,0 +1,51 @@ +#ifndef _IP6_TUNNEL_H +#define _IP6_TUNNEL_H + +#include <linux/types.h> + +#define IPV6_TLV_TNL_ENCAP_LIMIT 4 +#define IPV6_DEFAULT_TNL_ENCAP_LIMIT 4 + +/* don't add encapsulation limit if one isn't present in inner packet */ +#define IP6_TNL_F_IGN_ENCAP_LIMIT 0x1 +/* copy the traffic class field from the inner packet */ +#define IP6_TNL_F_USE_ORIG_TCLASS 0x2 +/* copy the flowlabel from the inner packet */ +#define IP6_TNL_F_USE_ORIG_FLOWLABEL 0x4 +/* being used for Mobile IPv6 */ +#define IP6_TNL_F_MIP6_DEV 0x8 +/* copy DSCP from the outer packet */ +#define IP6_TNL_F_RCV_DSCP_COPY 0x10 +/* copy fwmark from inner packet */ +#define IP6_TNL_F_USE_ORIG_FWMARK 0x20 + +struct ip6_tnl_parm { +	char name[IFNAMSIZ];	/* name of tunnel device */ +	int link;		/* ifindex of underlying L2 interface */ +	__u8 proto;		/* tunnel protocol */ +	__u8 encap_limit;	/* encapsulation limit for tunnel */ +	__u8 hop_limit;		/* hop limit for tunnel */ +	__be32 flowinfo;	/* traffic class and flowlabel for tunnel */ +	__u32 flags;		/* tunnel flags */ +	struct in6_addr laddr;	/* local tunnel end-point address */ +	struct in6_addr raddr;	/* remote tunnel end-point address */ +}; + +struct ip6_tnl_parm2 { +	char name[IFNAMSIZ];	/* name of tunnel device */ +	int link;		/* ifindex of underlying L2 interface */ +	__u8 proto;		/* tunnel protocol */ +	__u8 encap_limit;	/* encapsulation limit for tunnel */ +	__u8 hop_limit;		/* hop limit for tunnel */ +	__be32 flowinfo;	/* traffic class and flowlabel for tunnel */ +	__u32 flags;		/* tunnel flags */ +	struct in6_addr laddr;	/* local tunnel end-point address */ +	struct in6_addr raddr;	/* remote tunnel end-point address */ + +	__be16			i_flags; +	__be16			o_flags; +	__be32			i_key; +	__be32			o_key; +}; + +#endif diff --git a/include/uapi/linux/ip_vs.h b/include/uapi/linux/ip_vs.h new file mode 100644 index 00000000000..8a2d438dc49 --- /dev/null +++ b/include/uapi/linux/ip_vs.h @@ -0,0 +1,434 @@ +/* + *      IP Virtual Server + *      data structure and functionality definitions + */ + +#ifndef _IP_VS_H +#define _IP_VS_H + +#include <linux/types.h>	/* For __beXX types in userland */ + +#define IP_VS_VERSION_CODE	0x010201 +#define NVERSION(version)			\ +	(version >> 16) & 0xFF,			\ +	(version >> 8) & 0xFF,			\ +	version & 0xFF + +/* + *      Virtual Service Flags + */ +#define IP_VS_SVC_F_PERSISTENT	0x0001		/* persistent port */ +#define IP_VS_SVC_F_HASHED	0x0002		/* hashed entry */ +#define IP_VS_SVC_F_ONEPACKET	0x0004		/* one-packet scheduling */ + +/* + *      Destination Server Flags + */ +#define IP_VS_DEST_F_AVAILABLE	0x0001		/* server is available */ +#define IP_VS_DEST_F_OVERLOAD	0x0002		/* server is overloaded */ + +/* + *      IPVS sync daemon states + */ +#define IP_VS_STATE_NONE	0x0000		/* daemon is stopped */ +#define IP_VS_STATE_MASTER	0x0001		/* started as master */ +#define IP_VS_STATE_BACKUP	0x0002		/* started as backup */ + +/* + *      IPVS socket options + */ +#define IP_VS_BASE_CTL		(64+1024+64)		/* base */ + +#define IP_VS_SO_SET_NONE	IP_VS_BASE_CTL		/* just peek */ +#define IP_VS_SO_SET_INSERT	(IP_VS_BASE_CTL+1) +#define IP_VS_SO_SET_ADD	(IP_VS_BASE_CTL+2) +#define IP_VS_SO_SET_EDIT	(IP_VS_BASE_CTL+3) +#define IP_VS_SO_SET_DEL	(IP_VS_BASE_CTL+4) +#define IP_VS_SO_SET_FLUSH	(IP_VS_BASE_CTL+5) +#define IP_VS_SO_SET_LIST	(IP_VS_BASE_CTL+6) +#define IP_VS_SO_SET_ADDDEST	(IP_VS_BASE_CTL+7) +#define IP_VS_SO_SET_DELDEST	(IP_VS_BASE_CTL+8) +#define IP_VS_SO_SET_EDITDEST	(IP_VS_BASE_CTL+9) +#define IP_VS_SO_SET_TIMEOUT	(IP_VS_BASE_CTL+10) +#define IP_VS_SO_SET_STARTDAEMON (IP_VS_BASE_CTL+11) +#define IP_VS_SO_SET_STOPDAEMON (IP_VS_BASE_CTL+12) +#define IP_VS_SO_SET_RESTORE    (IP_VS_BASE_CTL+13) +#define IP_VS_SO_SET_SAVE       (IP_VS_BASE_CTL+14) +#define IP_VS_SO_SET_ZERO	(IP_VS_BASE_CTL+15) +#define IP_VS_SO_SET_MAX	IP_VS_SO_SET_ZERO + +#define IP_VS_SO_GET_VERSION	IP_VS_BASE_CTL +#define IP_VS_SO_GET_INFO	(IP_VS_BASE_CTL+1) +#define IP_VS_SO_GET_SERVICES	(IP_VS_BASE_CTL+2) +#define IP_VS_SO_GET_SERVICE	(IP_VS_BASE_CTL+3) +#define IP_VS_SO_GET_DESTS	(IP_VS_BASE_CTL+4) +#define IP_VS_SO_GET_DEST	(IP_VS_BASE_CTL+5)	/* not used now */ +#define IP_VS_SO_GET_TIMEOUT	(IP_VS_BASE_CTL+6) +#define IP_VS_SO_GET_DAEMON	(IP_VS_BASE_CTL+7) +#define IP_VS_SO_GET_MAX	IP_VS_SO_GET_DAEMON + + +/* + *      IPVS Connection Flags + *      Only flags 0..15 are sent to backup server + */ +#define IP_VS_CONN_F_FWD_MASK	0x0007		/* mask for the fwd methods */ +#define IP_VS_CONN_F_MASQ	0x0000		/* masquerading/NAT */ +#define IP_VS_CONN_F_LOCALNODE	0x0001		/* local node */ +#define IP_VS_CONN_F_TUNNEL	0x0002		/* tunneling */ +#define IP_VS_CONN_F_DROUTE	0x0003		/* direct routing */ +#define IP_VS_CONN_F_BYPASS	0x0004		/* cache bypass */ +#define IP_VS_CONN_F_SYNC	0x0020		/* entry created by sync */ +#define IP_VS_CONN_F_HASHED	0x0040		/* hashed entry */ +#define IP_VS_CONN_F_NOOUTPUT	0x0080		/* no output packets */ +#define IP_VS_CONN_F_INACTIVE	0x0100		/* not established */ +#define IP_VS_CONN_F_OUT_SEQ	0x0200		/* must do output seq adjust */ +#define IP_VS_CONN_F_IN_SEQ	0x0400		/* must do input seq adjust */ +#define IP_VS_CONN_F_SEQ_MASK	0x0600		/* in/out sequence mask */ +#define IP_VS_CONN_F_NO_CPORT	0x0800		/* no client port set yet */ +#define IP_VS_CONN_F_TEMPLATE	0x1000		/* template, not connection */ +#define IP_VS_CONN_F_ONE_PACKET	0x2000		/* forward only one packet */ + +/* Initial bits allowed in backup server */ +#define IP_VS_CONN_F_BACKUP_MASK (IP_VS_CONN_F_FWD_MASK | \ +				  IP_VS_CONN_F_NOOUTPUT | \ +				  IP_VS_CONN_F_INACTIVE | \ +				  IP_VS_CONN_F_SEQ_MASK | \ +				  IP_VS_CONN_F_NO_CPORT | \ +				  IP_VS_CONN_F_TEMPLATE \ +				 ) + +/* Bits allowed to update in backup server */ +#define IP_VS_CONN_F_BACKUP_UPD_MASK (IP_VS_CONN_F_INACTIVE | \ +				      IP_VS_CONN_F_SEQ_MASK) + +/* Flags that are not sent to backup server start from bit 16 */ +#define IP_VS_CONN_F_NFCT	(1 << 16)	/* use netfilter conntrack */ + +/* Connection flags from destination that can be changed by user space */ +#define IP_VS_CONN_F_DEST_MASK (IP_VS_CONN_F_FWD_MASK | \ +				IP_VS_CONN_F_ONE_PACKET | \ +				IP_VS_CONN_F_NFCT | \ +				0) + +#define IP_VS_SCHEDNAME_MAXLEN	16 +#define IP_VS_PENAME_MAXLEN	16 +#define IP_VS_IFNAME_MAXLEN	16 + +#define IP_VS_PEDATA_MAXLEN     255 + +/* + *	The struct ip_vs_service_user and struct ip_vs_dest_user are + *	used to set IPVS rules through setsockopt. + */ +struct ip_vs_service_user { +	/* virtual service addresses */ +	__u16		protocol; +	__be32			addr;		/* virtual ip address */ +	__be16			port; +	__u32		fwmark;		/* firwall mark of service */ + +	/* virtual service options */ +	char			sched_name[IP_VS_SCHEDNAME_MAXLEN]; +	unsigned int		flags;		/* virtual service flags */ +	unsigned int		timeout;	/* persistent timeout in sec */ +	__be32			netmask;	/* persistent netmask */ +}; + + +struct ip_vs_dest_user { +	/* destination server address */ +	__be32			addr; +	__be16			port; + +	/* real server options */ +	unsigned int		conn_flags;	/* connection flags */ +	int			weight;		/* destination weight */ + +	/* thresholds for active connections */ +	__u32		u_threshold;	/* upper threshold */ +	__u32		l_threshold;	/* lower threshold */ +}; + + +/* + *	IPVS statistics object (for user space) + */ +struct ip_vs_stats_user { +	__u32                   conns;          /* connections scheduled */ +	__u32                   inpkts;         /* incoming packets */ +	__u32                   outpkts;        /* outgoing packets */ +	__u64                   inbytes;        /* incoming bytes */ +	__u64                   outbytes;       /* outgoing bytes */ + +	__u32			cps;		/* current connection rate */ +	__u32			inpps;		/* current in packet rate */ +	__u32			outpps;		/* current out packet rate */ +	__u32			inbps;		/* current in byte rate */ +	__u32			outbps;		/* current out byte rate */ +}; + + +/* The argument to IP_VS_SO_GET_INFO */ +struct ip_vs_getinfo { +	/* version number */ +	unsigned int		version; + +	/* size of connection hash table */ +	unsigned int		size; + +	/* number of virtual services */ +	unsigned int		num_services; +}; + + +/* The argument to IP_VS_SO_GET_SERVICE */ +struct ip_vs_service_entry { +	/* which service: user fills in these */ +	__u16		protocol; +	__be32			addr;		/* virtual address */ +	__be16			port; +	__u32		fwmark;		/* firwall mark of service */ + +	/* service options */ +	char			sched_name[IP_VS_SCHEDNAME_MAXLEN]; +	unsigned int		flags;          /* virtual service flags */ +	unsigned int		timeout;	/* persistent timeout */ +	__be32			netmask;	/* persistent netmask */ + +	/* number of real servers */ +	unsigned int		num_dests; + +	/* statistics */ +	struct ip_vs_stats_user stats; +}; + + +struct ip_vs_dest_entry { +	__be32			addr;		/* destination address */ +	__be16			port; +	unsigned int		conn_flags;	/* connection flags */ +	int			weight;		/* destination weight */ + +	__u32		u_threshold;	/* upper threshold */ +	__u32		l_threshold;	/* lower threshold */ + +	__u32		activeconns;	/* active connections */ +	__u32		inactconns;	/* inactive connections */ +	__u32		persistconns;	/* persistent connections */ + +	/* statistics */ +	struct ip_vs_stats_user stats; +}; + + +/* The argument to IP_VS_SO_GET_DESTS */ +struct ip_vs_get_dests { +	/* which service: user fills in these */ +	__u16		protocol; +	__be32			addr;		/* virtual address */ +	__be16			port; +	__u32		fwmark;		/* firwall mark of service */ + +	/* number of real servers */ +	unsigned int		num_dests; + +	/* the real servers */ +	struct ip_vs_dest_entry	entrytable[0]; +}; + + +/* The argument to IP_VS_SO_GET_SERVICES */ +struct ip_vs_get_services { +	/* number of virtual services */ +	unsigned int		num_services; + +	/* service table */ +	struct ip_vs_service_entry entrytable[0]; +}; + + +/* The argument to IP_VS_SO_GET_TIMEOUT */ +struct ip_vs_timeout_user { +	int			tcp_timeout; +	int			tcp_fin_timeout; +	int			udp_timeout; +}; + + +/* The argument to IP_VS_SO_GET_DAEMON */ +struct ip_vs_daemon_user { +	/* sync daemon state (master/backup) */ +	int			state; + +	/* multicast interface name */ +	char			mcast_ifn[IP_VS_IFNAME_MAXLEN]; + +	/* SyncID we belong to */ +	int			syncid; +}; + +/* + * + * IPVS Generic Netlink interface definitions + * + */ + +/* Generic Netlink family info */ + +#define IPVS_GENL_NAME		"IPVS" +#define IPVS_GENL_VERSION	0x1 + +struct ip_vs_flags { +	__be32 flags; +	__be32 mask; +}; + +/* Generic Netlink command attributes */ +enum { +	IPVS_CMD_UNSPEC = 0, + +	IPVS_CMD_NEW_SERVICE,		/* add service */ +	IPVS_CMD_SET_SERVICE,		/* modify service */ +	IPVS_CMD_DEL_SERVICE,		/* delete service */ +	IPVS_CMD_GET_SERVICE,		/* get service info */ + +	IPVS_CMD_NEW_DEST,		/* add destination */ +	IPVS_CMD_SET_DEST,		/* modify destination */ +	IPVS_CMD_DEL_DEST,		/* delete destination */ +	IPVS_CMD_GET_DEST,		/* get destination info */ + +	IPVS_CMD_NEW_DAEMON,		/* start sync daemon */ +	IPVS_CMD_DEL_DAEMON,		/* stop sync daemon */ +	IPVS_CMD_GET_DAEMON,		/* get sync daemon status */ + +	IPVS_CMD_SET_CONFIG,		/* set config settings */ +	IPVS_CMD_GET_CONFIG,		/* get config settings */ + +	IPVS_CMD_SET_INFO,		/* only used in GET_INFO reply */ +	IPVS_CMD_GET_INFO,		/* get general IPVS info */ + +	IPVS_CMD_ZERO,			/* zero all counters and stats */ +	IPVS_CMD_FLUSH,			/* flush services and dests */ + +	__IPVS_CMD_MAX, +}; + +#define IPVS_CMD_MAX (__IPVS_CMD_MAX - 1) + +/* Attributes used in the first level of commands */ +enum { +	IPVS_CMD_ATTR_UNSPEC = 0, +	IPVS_CMD_ATTR_SERVICE,		/* nested service attribute */ +	IPVS_CMD_ATTR_DEST,		/* nested destination attribute */ +	IPVS_CMD_ATTR_DAEMON,		/* nested sync daemon attribute */ +	IPVS_CMD_ATTR_TIMEOUT_TCP,	/* TCP connection timeout */ +	IPVS_CMD_ATTR_TIMEOUT_TCP_FIN,	/* TCP FIN wait timeout */ +	IPVS_CMD_ATTR_TIMEOUT_UDP,	/* UDP timeout */ +	__IPVS_CMD_ATTR_MAX, +}; + +#define IPVS_CMD_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1) + +/* + * Attributes used to describe a service + * + * Used inside nested attribute IPVS_CMD_ATTR_SERVICE + */ +enum { +	IPVS_SVC_ATTR_UNSPEC = 0, +	IPVS_SVC_ATTR_AF,		/* address family */ +	IPVS_SVC_ATTR_PROTOCOL,		/* virtual service protocol */ +	IPVS_SVC_ATTR_ADDR,		/* virtual service address */ +	IPVS_SVC_ATTR_PORT,		/* virtual service port */ +	IPVS_SVC_ATTR_FWMARK,		/* firewall mark of service */ + +	IPVS_SVC_ATTR_SCHED_NAME,	/* name of scheduler */ +	IPVS_SVC_ATTR_FLAGS,		/* virtual service flags */ +	IPVS_SVC_ATTR_TIMEOUT,		/* persistent timeout */ +	IPVS_SVC_ATTR_NETMASK,		/* persistent netmask */ + +	IPVS_SVC_ATTR_STATS,		/* nested attribute for service stats */ + +	IPVS_SVC_ATTR_PE_NAME,		/* name of ct retriever */ + +	__IPVS_SVC_ATTR_MAX, +}; + +#define IPVS_SVC_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1) + +/* + * Attributes used to describe a destination (real server) + * + * Used inside nested attribute IPVS_CMD_ATTR_DEST + */ +enum { +	IPVS_DEST_ATTR_UNSPEC = 0, +	IPVS_DEST_ATTR_ADDR,		/* real server address */ +	IPVS_DEST_ATTR_PORT,		/* real server port */ + +	IPVS_DEST_ATTR_FWD_METHOD,	/* forwarding method */ +	IPVS_DEST_ATTR_WEIGHT,		/* destination weight */ + +	IPVS_DEST_ATTR_U_THRESH,	/* upper threshold */ +	IPVS_DEST_ATTR_L_THRESH,	/* lower threshold */ + +	IPVS_DEST_ATTR_ACTIVE_CONNS,	/* active connections */ +	IPVS_DEST_ATTR_INACT_CONNS,	/* inactive connections */ +	IPVS_DEST_ATTR_PERSIST_CONNS,	/* persistent connections */ + +	IPVS_DEST_ATTR_STATS,		/* nested attribute for dest stats */ +	__IPVS_DEST_ATTR_MAX, +}; + +#define IPVS_DEST_ATTR_MAX (__IPVS_DEST_ATTR_MAX - 1) + +/* + * Attributes describing a sync daemon + * + * Used inside nested attribute IPVS_CMD_ATTR_DAEMON + */ +enum { +	IPVS_DAEMON_ATTR_UNSPEC = 0, +	IPVS_DAEMON_ATTR_STATE,		/* sync daemon state (master/backup) */ +	IPVS_DAEMON_ATTR_MCAST_IFN,	/* multicast interface name */ +	IPVS_DAEMON_ATTR_SYNC_ID,	/* SyncID we belong to */ +	__IPVS_DAEMON_ATTR_MAX, +}; + +#define IPVS_DAEMON_ATTR_MAX (__IPVS_DAEMON_ATTR_MAX - 1) + +/* + * Attributes used to describe service or destination entry statistics + * + * Used inside nested attributes IPVS_SVC_ATTR_STATS and IPVS_DEST_ATTR_STATS + */ +enum { +	IPVS_STATS_ATTR_UNSPEC = 0, +	IPVS_STATS_ATTR_CONNS,		/* connections scheduled */ +	IPVS_STATS_ATTR_INPKTS,		/* incoming packets */ +	IPVS_STATS_ATTR_OUTPKTS,	/* outgoing packets */ +	IPVS_STATS_ATTR_INBYTES,	/* incoming bytes */ +	IPVS_STATS_ATTR_OUTBYTES,	/* outgoing bytes */ + +	IPVS_STATS_ATTR_CPS,		/* current connection rate */ +	IPVS_STATS_ATTR_INPPS,		/* current in packet rate */ +	IPVS_STATS_ATTR_OUTPPS,		/* current out packet rate */ +	IPVS_STATS_ATTR_INBPS,		/* current in byte rate */ +	IPVS_STATS_ATTR_OUTBPS,		/* current out byte rate */ +	__IPVS_STATS_ATTR_MAX, +}; + +#define IPVS_STATS_ATTR_MAX (__IPVS_STATS_ATTR_MAX - 1) + +/* Attributes used in response to IPVS_CMD_GET_INFO command */ +enum { +	IPVS_INFO_ATTR_UNSPEC = 0, +	IPVS_INFO_ATTR_VERSION,		/* IPVS version number */ +	IPVS_INFO_ATTR_CONN_TAB_SIZE,	/* size of connection hash table */ +	__IPVS_INFO_ATTR_MAX, +}; + +#define IPVS_INFO_ATTR_MAX (__IPVS_INFO_ATTR_MAX - 1) + +#endif	/* _IP_VS_H */ diff --git a/include/uapi/linux/ipc.h b/include/uapi/linux/ipc.h new file mode 100644 index 00000000000..de08dd46dda --- /dev/null +++ b/include/uapi/linux/ipc.h @@ -0,0 +1,81 @@ +#ifndef _UAPI_LINUX_IPC_H +#define _UAPI_LINUX_IPC_H + +#include <linux/types.h> + +#define IPC_PRIVATE ((__kernel_key_t) 0)   + +/* Obsolete, used only for backwards compatibility and libc5 compiles */ +struct ipc_perm +{ +	__kernel_key_t	key; +	__kernel_uid_t	uid; +	__kernel_gid_t	gid; +	__kernel_uid_t	cuid; +	__kernel_gid_t	cgid; +	__kernel_mode_t	mode;  +	unsigned short	seq; +}; + +/* Include the definition of ipc64_perm */ +#include <asm/ipcbuf.h> + +/* resource get request flags */ +#define IPC_CREAT  00001000   /* create if key is nonexistent */ +#define IPC_EXCL   00002000   /* fail if key exists */ +#define IPC_NOWAIT 00004000   /* return error on wait */ + +/* these fields are used by the DIPC package so the kernel as standard +   should avoid using them if possible */ +    +#define IPC_DIPC 00010000  /* make it distributed */ +#define IPC_OWN  00020000  /* this machine is the DIPC owner */ + +/*  + * Control commands used with semctl, msgctl and shmctl  + * see also specific commands in sem.h, msg.h and shm.h + */ +#define IPC_RMID 0     /* remove resource */ +#define IPC_SET  1     /* set ipc_perm options */ +#define IPC_STAT 2     /* get ipc_perm options */ +#define IPC_INFO 3     /* see ipcs */ + +/* + * Version flags for semctl, msgctl, and shmctl commands + * These are passed as bitflags or-ed with the actual command + */ +#define IPC_OLD 0	/* Old version (no 32-bit UID support on many +			   architectures) */ +#define IPC_64  0x0100  /* New version (support 32-bit UIDs, bigger +			   message sizes, etc. */ + +/* + * These are used to wrap system calls. + * + * See architecture code for ugly details.. + */ +struct ipc_kludge { +	struct msgbuf __user *msgp; +	long msgtyp; +}; + +#define SEMOP		 1 +#define SEMGET		 2 +#define SEMCTL		 3 +#define SEMTIMEDOP	 4 +#define MSGSND		11 +#define MSGRCV		12 +#define MSGGET		13 +#define MSGCTL		14 +#define SHMAT		21 +#define SHMDT		22 +#define SHMGET		23 +#define SHMCTL		24 + +/* Used by the DIPC package, try and avoid reusing it */ +#define DIPC            25 + +#define IPCCALL(version,op)	((version)<<16 | (op)) + + +#endif /* _UAPI_LINUX_IPC_H */ diff --git a/include/uapi/linux/ipmi.h b/include/uapi/linux/ipmi.h new file mode 100644 index 00000000000..33fbc99b381 --- /dev/null +++ b/include/uapi/linux/ipmi.h @@ -0,0 +1,456 @@ +/* + * ipmi.h + * + * MontaVista IPMI interface + * + * Author: MontaVista Software, Inc. + *         Corey Minyard <minyard@mvista.com> + *         source@mvista.com + * + * Copyright 2002 MontaVista Software Inc. + * + *  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 SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *  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 _UAPI__LINUX_IPMI_H +#define _UAPI__LINUX_IPMI_H + +#include <linux/ipmi_msgdefs.h> +#include <linux/compiler.h> + +/* + * This file describes an interface to an IPMI driver.  You have to + * have a fairly good understanding of IPMI to use this, so go read + * the specs first before actually trying to do anything. + * + * With that said, this driver provides a multi-user interface to the + * IPMI driver, and it allows multiple IPMI physical interfaces below + * the driver.  The physical interfaces bind as a lower layer on the + * driver.  They appear as interfaces to the application using this + * interface. + * + * Multi-user means that multiple applications may use the driver, + * send commands, receive responses, etc.  The driver keeps track of + * commands the user sends and tracks the responses.  The responses + * will go back to the application that send the command.  If the + * response doesn't come back in time, the driver will return a + * timeout error response to the application.  Asynchronous events + * from the BMC event queue will go to all users bound to the driver. + * The incoming event queue in the BMC will automatically be flushed + * if it becomes full and it is queried once a second to see if + * anything is in it.  Incoming commands to the driver will get + * delivered as commands. + * + * This driver provides two main interfaces: one for in-kernel + * applications and another for userland applications.  The + * capabilities are basically the same for both interface, although + * the interfaces are somewhat different.  The stuff in the + * #ifdef __KERNEL__ below is the in-kernel interface.  The userland + * interface is defined later in the file.  */ + + + +/* + * This is an overlay for all the address types, so it's easy to + * determine the actual address type.  This is kind of like addresses + * work for sockets. + */ +#define IPMI_MAX_ADDR_SIZE 32 +struct ipmi_addr { +	 /* Try to take these from the "Channel Medium Type" table +	    in section 6.5 of the IPMI 1.5 manual. */ +	int   addr_type; +	short channel; +	char  data[IPMI_MAX_ADDR_SIZE]; +}; + +/* + * When the address is not used, the type will be set to this value. + * The channel is the BMC's channel number for the channel (usually + * 0), or IPMC_BMC_CHANNEL if communicating directly with the BMC. + */ +#define IPMI_SYSTEM_INTERFACE_ADDR_TYPE	0x0c +struct ipmi_system_interface_addr { +	int           addr_type; +	short         channel; +	unsigned char lun; +}; + +/* An IPMB Address. */ +#define IPMI_IPMB_ADDR_TYPE		0x01 +/* Used for broadcast get device id as described in section 17.9 of the +   IPMI 1.5 manual. */ +#define IPMI_IPMB_BROADCAST_ADDR_TYPE	0x41 +struct ipmi_ipmb_addr { +	int           addr_type; +	short         channel; +	unsigned char slave_addr; +	unsigned char lun; +}; + +/* + * A LAN Address.  This is an address to/from a LAN interface bridged + * by the BMC, not an address actually out on the LAN. + * + * A conscious decision was made here to deviate slightly from the IPMI + * spec.  We do not use rqSWID and rsSWID like it shows in the + * message.  Instead, we use remote_SWID and local_SWID.  This means + * that any message (a request or response) from another device will + * always have exactly the same address.  If you didn't do this, + * requests and responses from the same device would have different + * addresses, and that's not too cool. + * + * In this address, the remote_SWID is always the SWID the remote + * message came from, or the SWID we are sending the message to. + * local_SWID is always our SWID.  Note that having our SWID in the + * message is a little weird, but this is required. + */ +#define IPMI_LAN_ADDR_TYPE		0x04 +struct ipmi_lan_addr { +	int           addr_type; +	short         channel; +	unsigned char privilege; +	unsigned char session_handle; +	unsigned char remote_SWID; +	unsigned char local_SWID; +	unsigned char lun; +}; + + +/* + * Channel for talking directly with the BMC.  When using this + * channel, This is for the system interface address type only.  FIXME + * - is this right, or should we use -1? + */ +#define IPMI_BMC_CHANNEL  0xf +#define IPMI_NUM_CHANNELS 0x10 + +/* + * Used to signify an "all channel" bitmask.  This is more than the + * actual number of channels because this is used in userland and + * will cover us if the number of channels is extended. + */ +#define IPMI_CHAN_ALL     (~0) + + +/* + * A raw IPMI message without any addressing.  This covers both + * commands and responses.  The completion code is always the first + * byte of data in the response (as the spec shows the messages laid + * out). + */ +struct ipmi_msg { +	unsigned char  netfn; +	unsigned char  cmd; +	unsigned short data_len; +	unsigned char  __user *data; +}; + +struct kernel_ipmi_msg { +	unsigned char  netfn; +	unsigned char  cmd; +	unsigned short data_len; +	unsigned char  *data; +}; + +/* + * Various defines that are useful for IPMI applications. + */ +#define IPMI_INVALID_CMD_COMPLETION_CODE	0xC1 +#define IPMI_TIMEOUT_COMPLETION_CODE		0xC3 +#define IPMI_UNKNOWN_ERR_COMPLETION_CODE	0xff + + +/* + * Receive types for messages coming from the receive interface.  This + * is used for the receive in-kernel interface and in the receive + * IOCTL. + * + * The "IPMI_RESPONSE_RESPNOSE_TYPE" is a little strange sounding, but + * it allows you to get the message results when you send a response + * message. + */ +#define IPMI_RESPONSE_RECV_TYPE		1 /* A response to a command */ +#define IPMI_ASYNC_EVENT_RECV_TYPE	2 /* Something from the event queue */ +#define IPMI_CMD_RECV_TYPE		3 /* A command from somewhere else */ +#define IPMI_RESPONSE_RESPONSE_TYPE	4 /* The response for +					      a sent response, giving any +					      error status for sending the +					      response.  When you send a +					      response message, this will +					      be returned. */ +#define IPMI_OEM_RECV_TYPE		5 /* The response for OEM Channels */ + +/* Note that async events and received commands do not have a completion +   code as the first byte of the incoming data, unlike a response. */ + + +/* + * Modes for ipmi_set_maint_mode() and the userland IOCTL.  The AUTO + * setting is the default and means it will be set on certain + * commands.  Hard setting it on and off will override automatic + * operation. + */ +#define IPMI_MAINTENANCE_MODE_AUTO	0 +#define IPMI_MAINTENANCE_MODE_OFF	1 +#define IPMI_MAINTENANCE_MODE_ON	2 + + + +/* + * The userland interface + */ + +/* + * The userland interface for the IPMI driver is a standard character + * device, with each instance of an interface registered as a minor + * number under the major character device. + * + * The read and write calls do not work, to get messages in and out + * requires ioctl calls because of the complexity of the data.  select + * and poll do work, so you can wait for input using the file + * descriptor, you just can use read to get it. + * + * In general, you send a command down to the interface and receive + * responses back.  You can use the msgid value to correlate commands + * and responses, the driver will take care of figuring out which + * incoming messages are for which command and find the proper msgid + * value to report.  You will only receive reponses for commands you + * send.  Asynchronous events, however, go to all open users, so you + * must be ready to handle these (or ignore them if you don't care). + * + * The address type depends upon the channel type.  When talking + * directly to the BMC (IPMC_BMC_CHANNEL), the address is ignored + * (IPMI_UNUSED_ADDR_TYPE).  When talking to an IPMB channel, you must + * supply a valid IPMB address with the addr_type set properly. + * + * When talking to normal channels, the driver takes care of the + * details of formatting and sending messages on that channel.  You do + * not, for instance, have to format a send command, you just send + * whatever command you want to the channel, the driver will create + * the send command, automatically issue receive command and get even + * commands, and pass those up to the proper user. + */ + + +/* The magic IOCTL value for this interface. */ +#define IPMI_IOC_MAGIC 'i' + + +/* Messages sent to the interface are this format. */ +struct ipmi_req { +	unsigned char __user *addr; /* Address to send the message to. */ +	unsigned int  addr_len; + +	long    msgid; /* The sequence number for the message.  This +			  exact value will be reported back in the +			  response to this request if it is a command. +			  If it is a response, this will be used as +			  the sequence value for the response.  */ + +	struct ipmi_msg msg; +}; +/* + * Send a message to the interfaces.  error values are: + *   - EFAULT - an address supplied was invalid. + *   - EINVAL - The address supplied was not valid, or the command + *              was not allowed. + *   - EMSGSIZE - The message to was too large. + *   - ENOMEM - Buffers could not be allocated for the command. + */ +#define IPMICTL_SEND_COMMAND		_IOR(IPMI_IOC_MAGIC, 13,	\ +					     struct ipmi_req) + +/* Messages sent to the interface with timing parameters are this +   format. */ +struct ipmi_req_settime { +	struct ipmi_req req; + +	/* See ipmi_request_settime() above for details on these +	   values. */ +	int          retries; +	unsigned int retry_time_ms; +}; +/* + * Send a message to the interfaces with timing parameters.  error values + * are: + *   - EFAULT - an address supplied was invalid. + *   - EINVAL - The address supplied was not valid, or the command + *              was not allowed. + *   - EMSGSIZE - The message to was too large. + *   - ENOMEM - Buffers could not be allocated for the command. + */ +#define IPMICTL_SEND_COMMAND_SETTIME	_IOR(IPMI_IOC_MAGIC, 21,	\ +					     struct ipmi_req_settime) + +/* Messages received from the interface are this format. */ +struct ipmi_recv { +	int     recv_type; /* Is this a command, response or an +			      asyncronous event. */ + +	unsigned char __user *addr;    /* Address the message was from is put +				   here.  The caller must supply the +				   memory. */ +	unsigned int  addr_len; /* The size of the address buffer. +				   The caller supplies the full buffer +				   length, this value is updated to +				   the actual message length when the +				   message is received. */ + +	long    msgid; /* The sequence number specified in the request +			  if this is a response.  If this is a command, +			  this will be the sequence number from the +			  command. */ + +	struct ipmi_msg msg; /* The data field must point to a buffer. +				The data_size field must be set to the +				size of the message buffer.  The +				caller supplies the full buffer +				length, this value is updated to the +				actual message length when the message +				is received. */ +}; + +/* + * Receive a message.  error values: + *  - EAGAIN - no messages in the queue. + *  - EFAULT - an address supplied was invalid. + *  - EINVAL - The address supplied was not valid. + *  - EMSGSIZE - The message to was too large to fit into the message buffer, + *               the message will be left in the buffer. */ +#define IPMICTL_RECEIVE_MSG		_IOWR(IPMI_IOC_MAGIC, 12,	\ +					      struct ipmi_recv) + +/* + * Like RECEIVE_MSG, but if the message won't fit in the buffer, it + * will truncate the contents instead of leaving the data in the + * buffer. + */ +#define IPMICTL_RECEIVE_MSG_TRUNC	_IOWR(IPMI_IOC_MAGIC, 11,	\ +					      struct ipmi_recv) + +/* Register to get commands from other entities on this interface. */ +struct ipmi_cmdspec { +	unsigned char netfn; +	unsigned char cmd; +}; + +/* + * Register to receive a specific command.  error values: + *   - EFAULT - an address supplied was invalid. + *   - EBUSY - The netfn/cmd supplied was already in use. + *   - ENOMEM - could not allocate memory for the entry. + */ +#define IPMICTL_REGISTER_FOR_CMD	_IOR(IPMI_IOC_MAGIC, 14,	\ +					     struct ipmi_cmdspec) +/* + * Unregister a regsitered command.  error values: + *  - EFAULT - an address supplied was invalid. + *  - ENOENT - The netfn/cmd was not found registered for this user. + */ +#define IPMICTL_UNREGISTER_FOR_CMD	_IOR(IPMI_IOC_MAGIC, 15,	\ +					     struct ipmi_cmdspec) + +/* + * Register to get commands from other entities on specific channels. + * This way, you can only listen on specific channels, or have messages + * from some channels go to one place and other channels to someplace + * else.  The chans field is a bitmask, (1 << channel) for each channel. + * It may be IPMI_CHAN_ALL for all channels. + */ +struct ipmi_cmdspec_chans { +	unsigned int netfn; +	unsigned int cmd; +	unsigned int chans; +}; + +/* + * Register to receive a specific command on specific channels.  error values: + *   - EFAULT - an address supplied was invalid. + *   - EBUSY - One of the netfn/cmd/chans supplied was already in use. + *   - ENOMEM - could not allocate memory for the entry. + */ +#define IPMICTL_REGISTER_FOR_CMD_CHANS	_IOR(IPMI_IOC_MAGIC, 28,	\ +					     struct ipmi_cmdspec_chans) +/* + * Unregister some netfn/cmd/chans.  error values: + *  - EFAULT - an address supplied was invalid. + *  - ENOENT - None of the netfn/cmd/chans were found registered for this user. + */ +#define IPMICTL_UNREGISTER_FOR_CMD_CHANS _IOR(IPMI_IOC_MAGIC, 29,	\ +					     struct ipmi_cmdspec_chans) + +/* + * Set whether this interface receives events.  Note that the first + * user registered for events will get all pending events for the + * interface.  error values: + *  - EFAULT - an address supplied was invalid. + */ +#define IPMICTL_SET_GETS_EVENTS_CMD	_IOR(IPMI_IOC_MAGIC, 16, int) + +/* + * Set and get the slave address and LUN that we will use for our + * source messages.  Note that this affects the interface, not just + * this user, so it will affect all users of this interface.  This is + * so some initialization code can come in and do the OEM-specific + * things it takes to determine your address (if not the BMC) and set + * it for everyone else.  You should probably leave the LUN alone. + */ +struct ipmi_channel_lun_address_set { +	unsigned short channel; +	unsigned char  value; +}; +#define IPMICTL_SET_MY_CHANNEL_ADDRESS_CMD \ +	_IOR(IPMI_IOC_MAGIC, 24, struct ipmi_channel_lun_address_set) +#define IPMICTL_GET_MY_CHANNEL_ADDRESS_CMD \ +	_IOR(IPMI_IOC_MAGIC, 25, struct ipmi_channel_lun_address_set) +#define IPMICTL_SET_MY_CHANNEL_LUN_CMD \ +	_IOR(IPMI_IOC_MAGIC, 26, struct ipmi_channel_lun_address_set) +#define IPMICTL_GET_MY_CHANNEL_LUN_CMD \ +	_IOR(IPMI_IOC_MAGIC, 27, struct ipmi_channel_lun_address_set) +/* Legacy interfaces, these only set IPMB 0. */ +#define IPMICTL_SET_MY_ADDRESS_CMD	_IOR(IPMI_IOC_MAGIC, 17, unsigned int) +#define IPMICTL_GET_MY_ADDRESS_CMD	_IOR(IPMI_IOC_MAGIC, 18, unsigned int) +#define IPMICTL_SET_MY_LUN_CMD		_IOR(IPMI_IOC_MAGIC, 19, unsigned int) +#define IPMICTL_GET_MY_LUN_CMD		_IOR(IPMI_IOC_MAGIC, 20, unsigned int) + +/* + * Get/set the default timing values for an interface.  You shouldn't + * generally mess with these. + */ +struct ipmi_timing_parms { +	int          retries; +	unsigned int retry_time_ms; +}; +#define IPMICTL_SET_TIMING_PARMS_CMD	_IOR(IPMI_IOC_MAGIC, 22, \ +					     struct ipmi_timing_parms) +#define IPMICTL_GET_TIMING_PARMS_CMD	_IOR(IPMI_IOC_MAGIC, 23, \ +					     struct ipmi_timing_parms) + +/* + * Set the maintenance mode.  See ipmi_set_maintenance_mode() above + * for a description of what this does. + */ +#define IPMICTL_GET_MAINTENANCE_MODE_CMD	_IOR(IPMI_IOC_MAGIC, 30, int) +#define IPMICTL_SET_MAINTENANCE_MODE_CMD	_IOW(IPMI_IOC_MAGIC, 31, int) + +#endif /* _UAPI__LINUX_IPMI_H */ diff --git a/include/uapi/linux/ipmi_msgdefs.h b/include/uapi/linux/ipmi_msgdefs.h new file mode 100644 index 00000000000..df97e6e31e8 --- /dev/null +++ b/include/uapi/linux/ipmi_msgdefs.h @@ -0,0 +1,121 @@ +/* + * ipmi_smi.h + * + * MontaVista IPMI system management interface + * + * Author: MontaVista Software, Inc. + *         Corey Minyard <minyard@mvista.com> + *         source@mvista.com + * + * Copyright 2002 MontaVista Software Inc. + * + *  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 SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *  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 __LINUX_IPMI_MSGDEFS_H +#define __LINUX_IPMI_MSGDEFS_H + +/* Various definitions for IPMI messages used by almost everything in +   the IPMI stack. */ + +/* NetFNs and commands used inside the IPMI stack. */ + +#define IPMI_NETFN_SENSOR_EVENT_REQUEST		0x04 +#define IPMI_NETFN_SENSOR_EVENT_RESPONSE	0x05 +#define IPMI_GET_EVENT_RECEIVER_CMD	0x01 + +#define IPMI_NETFN_APP_REQUEST			0x06 +#define IPMI_NETFN_APP_RESPONSE			0x07 +#define IPMI_GET_DEVICE_ID_CMD		0x01 +#define IPMI_COLD_RESET_CMD		0x02 +#define IPMI_WARM_RESET_CMD		0x03 +#define IPMI_CLEAR_MSG_FLAGS_CMD	0x30 +#define IPMI_GET_DEVICE_GUID_CMD	0x08 +#define IPMI_GET_MSG_FLAGS_CMD		0x31 +#define IPMI_SEND_MSG_CMD		0x34 +#define IPMI_GET_MSG_CMD		0x33 +#define IPMI_SET_BMC_GLOBAL_ENABLES_CMD	0x2e +#define IPMI_GET_BMC_GLOBAL_ENABLES_CMD	0x2f +#define IPMI_READ_EVENT_MSG_BUFFER_CMD	0x35 +#define IPMI_GET_CHANNEL_INFO_CMD	0x42 + +/* Bit for BMC global enables. */ +#define IPMI_BMC_RCV_MSG_INTR     0x01 +#define IPMI_BMC_EVT_MSG_INTR     0x02 +#define IPMI_BMC_EVT_MSG_BUFF     0x04 +#define IPMI_BMC_SYS_LOG          0x08 + +#define IPMI_NETFN_STORAGE_REQUEST		0x0a +#define IPMI_NETFN_STORAGE_RESPONSE		0x0b +#define IPMI_ADD_SEL_ENTRY_CMD		0x44 + +#define IPMI_NETFN_FIRMWARE_REQUEST		0x08 +#define IPMI_NETFN_FIRMWARE_RESPONSE		0x09 + +/* The default slave address */ +#define IPMI_BMC_SLAVE_ADDR	0x20 + +/* The BT interface on high-end HP systems supports up to 255 bytes in + * one transfer.  Its "virtual" BMC supports some commands that are longer + * than 128 bytes.  Use the full 256, plus NetFn/LUN, Cmd, cCode, plus + * some overhead; it's not worth the effort to dynamically size this based + * on the results of the "Get BT Capabilities" command. */ +#define IPMI_MAX_MSG_LENGTH	272	/* multiple of 16 */ + +#define IPMI_CC_NO_ERROR		0x00 +#define IPMI_NODE_BUSY_ERR		0xc0 +#define IPMI_INVALID_COMMAND_ERR	0xc1 +#define IPMI_TIMEOUT_ERR		0xc3 +#define IPMI_ERR_MSG_TRUNCATED		0xc6 +#define IPMI_REQ_LEN_INVALID_ERR	0xc7 +#define IPMI_REQ_LEN_EXCEEDED_ERR	0xc8 +#define IPMI_NOT_IN_MY_STATE_ERR	0xd5	/* IPMI 2.0 */ +#define IPMI_LOST_ARBITRATION_ERR	0x81 +#define IPMI_BUS_ERR			0x82 +#define IPMI_NAK_ON_WRITE_ERR		0x83 +#define IPMI_ERR_UNSPECIFIED		0xff + +#define IPMI_CHANNEL_PROTOCOL_IPMB	1 +#define IPMI_CHANNEL_PROTOCOL_ICMB	2 +#define IPMI_CHANNEL_PROTOCOL_SMBUS	4 +#define IPMI_CHANNEL_PROTOCOL_KCS	5 +#define IPMI_CHANNEL_PROTOCOL_SMIC	6 +#define IPMI_CHANNEL_PROTOCOL_BT10	7 +#define IPMI_CHANNEL_PROTOCOL_BT15	8 +#define IPMI_CHANNEL_PROTOCOL_TMODE	9 + +#define IPMI_CHANNEL_MEDIUM_IPMB	1 +#define IPMI_CHANNEL_MEDIUM_ICMB10	2 +#define IPMI_CHANNEL_MEDIUM_ICMB09	3 +#define IPMI_CHANNEL_MEDIUM_8023LAN	4 +#define IPMI_CHANNEL_MEDIUM_ASYNC	5 +#define IPMI_CHANNEL_MEDIUM_OTHER_LAN	6 +#define IPMI_CHANNEL_MEDIUM_PCI_SMBUS	7 +#define IPMI_CHANNEL_MEDIUM_SMBUS1	8 +#define IPMI_CHANNEL_MEDIUM_SMBUS2	9 +#define IPMI_CHANNEL_MEDIUM_USB1	10 +#define IPMI_CHANNEL_MEDIUM_USB2	11 +#define IPMI_CHANNEL_MEDIUM_SYSINTF	12 +#define IPMI_CHANNEL_MEDIUM_OEM_MIN	0x60 +#define IPMI_CHANNEL_MEDIUM_OEM_MAX	0x7f + +#endif /* __LINUX_IPMI_MSGDEFS_H */ diff --git a/include/uapi/linux/ipsec.h b/include/uapi/linux/ipsec.h new file mode 100644 index 00000000000..d17a6302a0e --- /dev/null +++ b/include/uapi/linux/ipsec.h @@ -0,0 +1,47 @@ +#ifndef _LINUX_IPSEC_H +#define _LINUX_IPSEC_H + +/* The definitions, required to talk to KAME racoon IKE. */ + +#include <linux/pfkeyv2.h> + +#define IPSEC_PORT_ANY		0 +#define IPSEC_ULPROTO_ANY	255 +#define IPSEC_PROTO_ANY		255 + +enum { +	IPSEC_MODE_ANY		= 0,	/* We do not support this for SA */ +	IPSEC_MODE_TRANSPORT	= 1, +	IPSEC_MODE_TUNNEL	= 2, +	IPSEC_MODE_BEET         = 3 +}; + +enum { +	IPSEC_DIR_ANY		= 0, +	IPSEC_DIR_INBOUND	= 1, +	IPSEC_DIR_OUTBOUND	= 2, +	IPSEC_DIR_FWD		= 3,	/* It is our own */ +	IPSEC_DIR_MAX		= 4, +	IPSEC_DIR_INVALID	= 5 +}; + +enum { +	IPSEC_POLICY_DISCARD	= 0, +	IPSEC_POLICY_NONE	= 1, +	IPSEC_POLICY_IPSEC	= 2, +	IPSEC_POLICY_ENTRUST	= 3, +	IPSEC_POLICY_BYPASS	= 4 +}; + +enum { +	IPSEC_LEVEL_DEFAULT	= 0, +	IPSEC_LEVEL_USE		= 1, +	IPSEC_LEVEL_REQUIRE	= 2, +	IPSEC_LEVEL_UNIQUE	= 3 +}; + +#define IPSEC_MANUAL_REQID_MAX	0x3fff + +#define IPSEC_REPLAYWSIZE  32 + +#endif	/* _LINUX_IPSEC_H */ diff --git a/include/uapi/linux/ipv6.h b/include/uapi/linux/ipv6.h new file mode 100644 index 00000000000..a6d7d1c536c --- /dev/null +++ b/include/uapi/linux/ipv6.h @@ -0,0 +1,164 @@ +#ifndef _UAPI_IPV6_H +#define _UAPI_IPV6_H + +#include <linux/types.h> +#include <linux/in6.h> +#include <asm/byteorder.h> + +/* The latest drafts declared increase in minimal mtu up to 1280. */ + +#define IPV6_MIN_MTU	1280 + +/* + *	Advanced API + *	source interface/address selection, source routing, etc... + *	*under construction* + */ + + +struct in6_pktinfo { +	struct in6_addr	ipi6_addr; +	int		ipi6_ifindex; +}; + +struct ip6_mtuinfo { +	struct sockaddr_in6	ip6m_addr; +	__u32			ip6m_mtu; +}; + +struct in6_ifreq { +	struct in6_addr	ifr6_addr; +	__u32		ifr6_prefixlen; +	int		ifr6_ifindex;  +}; + +#define IPV6_SRCRT_STRICT	0x01	/* Deprecated; will be removed */ +#define IPV6_SRCRT_TYPE_0	0	/* Deprecated; will be removed */ +#define IPV6_SRCRT_TYPE_2	2	/* IPv6 type 2 Routing Header	*/ + +/* + *	routing header + */ +struct ipv6_rt_hdr { +	__u8		nexthdr; +	__u8		hdrlen; +	__u8		type; +	__u8		segments_left; + +	/* +	 *	type specific data +	 *	variable length field +	 */ +}; + + +struct ipv6_opt_hdr { +	__u8 		nexthdr; +	__u8 		hdrlen; +	/*  +	 * TLV encoded option data follows. +	 */ +} __attribute__((packed));	/* required for some archs */ + +#define ipv6_destopt_hdr ipv6_opt_hdr +#define ipv6_hopopt_hdr  ipv6_opt_hdr + + +/* + *	routing header type 0 (used in cmsghdr struct) + */ + +struct rt0_hdr { +	struct ipv6_rt_hdr	rt_hdr; +	__u32			reserved; +	struct in6_addr		addr[0]; + +#define rt0_type		rt_hdr.type +}; + +/* + *	routing header type 2 + */ + +struct rt2_hdr { +	struct ipv6_rt_hdr	rt_hdr; +	__u32			reserved; +	struct in6_addr		addr; + +#define rt2_type		rt_hdr.type +}; + +/* + *	home address option in destination options header + */ + +struct ipv6_destopt_hao { +	__u8			type; +	__u8			length; +	struct in6_addr		addr; +} __attribute__((packed)); + +/* + *	IPv6 fixed header + * + *	BEWARE, it is incorrect. The first 4 bits of flow_lbl + *	are glued to priority now, forming "class". + */ + +struct ipv6hdr { +#if defined(__LITTLE_ENDIAN_BITFIELD) +	__u8			priority:4, +				version:4; +#elif defined(__BIG_ENDIAN_BITFIELD) +	__u8			version:4, +				priority:4; +#else +#error	"Please fix <asm/byteorder.h>" +#endif +	__u8			flow_lbl[3]; + +	__be16			payload_len; +	__u8			nexthdr; +	__u8			hop_limit; + +	struct	in6_addr	saddr; +	struct	in6_addr	daddr; +}; + + +/* index values for the variables in ipv6_devconf */ +enum { +	DEVCONF_FORWARDING = 0, +	DEVCONF_HOPLIMIT, +	DEVCONF_MTU6, +	DEVCONF_ACCEPT_RA, +	DEVCONF_ACCEPT_REDIRECTS, +	DEVCONF_AUTOCONF, +	DEVCONF_DAD_TRANSMITS, +	DEVCONF_RTR_SOLICITS, +	DEVCONF_RTR_SOLICIT_INTERVAL, +	DEVCONF_RTR_SOLICIT_DELAY, +	DEVCONF_USE_TEMPADDR, +	DEVCONF_TEMP_VALID_LFT, +	DEVCONF_TEMP_PREFERED_LFT, +	DEVCONF_REGEN_MAX_RETRY, +	DEVCONF_MAX_DESYNC_FACTOR, +	DEVCONF_MAX_ADDRESSES, +	DEVCONF_FORCE_MLD_VERSION, +	DEVCONF_ACCEPT_RA_DEFRTR, +	DEVCONF_ACCEPT_RA_PINFO, +	DEVCONF_ACCEPT_RA_RTR_PREF, +	DEVCONF_RTR_PROBE_INTERVAL, +	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN, +	DEVCONF_PROXY_NDP, +	DEVCONF_OPTIMISTIC_DAD, +	DEVCONF_ACCEPT_SOURCE_ROUTE, +	DEVCONF_MC_FORWARDING, +	DEVCONF_DISABLE_IPV6, +	DEVCONF_ACCEPT_DAD, +	DEVCONF_FORCE_TLLAO, +	DEVCONF_MAX +}; + + +#endif /* _UAPI_IPV6_H */ diff --git a/include/uapi/linux/ipv6_route.h b/include/uapi/linux/ipv6_route.h new file mode 100644 index 00000000000..0459664c263 --- /dev/null +++ b/include/uapi/linux/ipv6_route.h @@ -0,0 +1,58 @@ +/* + *	Linux INET6 implementation  + * + *	Authors: + *	Pedro Roque		<roque@di.fc.ul.pt>	 + * + *	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. + */ + +#ifndef _UAPI_LINUX_IPV6_ROUTE_H +#define _UAPI_LINUX_IPV6_ROUTE_H + +#include <linux/types.h> + +#define RTF_DEFAULT	0x00010000	/* default - learned via ND	*/ +#define RTF_ALLONLINK	0x00020000	/* (deprecated and will be removed) +					   fallback, no routers on link */ +#define RTF_ADDRCONF	0x00040000	/* addrconf route - RA		*/ +#define RTF_PREFIX_RT	0x00080000	/* A prefix only route - RA	*/ +#define RTF_ANYCAST	0x00100000	/* Anycast			*/ + +#define RTF_NONEXTHOP	0x00200000	/* route with no nexthop	*/ +#define RTF_EXPIRES	0x00400000 + +#define RTF_ROUTEINFO	0x00800000	/* route information - RA	*/ + +#define RTF_CACHE	0x01000000	/* cache entry			*/ +#define RTF_FLOW	0x02000000	/* flow significant route	*/ +#define RTF_POLICY	0x04000000	/* policy route			*/ + +#define RTF_PREF(pref)	((pref) << 27) +#define RTF_PREF_MASK	0x18000000 + +#define RTF_LOCAL	0x80000000 + + +struct in6_rtmsg { +	struct in6_addr		rtmsg_dst; +	struct in6_addr		rtmsg_src; +	struct in6_addr		rtmsg_gateway; +	__u32			rtmsg_type; +	__u16			rtmsg_dst_len; +	__u16			rtmsg_src_len; +	__u32			rtmsg_metric; +	unsigned long		rtmsg_info; +        __u32			rtmsg_flags; +	int			rtmsg_ifindex; +}; + +#define RTMSG_NEWDEVICE		0x11 +#define RTMSG_DELDEVICE		0x12 +#define RTMSG_NEWROUTE		0x21 +#define RTMSG_DELROUTE		0x22 + +#endif /* _UAPI_LINUX_IPV6_ROUTE_H */ diff --git a/include/uapi/linux/ipx.h b/include/uapi/linux/ipx.h new file mode 100644 index 00000000000..3d48014cdd7 --- /dev/null +++ b/include/uapi/linux/ipx.h @@ -0,0 +1,75 @@ +#ifndef _IPX_H_ +#define _IPX_H_ +#include <linux/types.h> +#include <linux/sockios.h> +#include <linux/socket.h> +#define IPX_NODE_LEN	6 +#define IPX_MTU		576 + +struct sockaddr_ipx { +	__kernel_sa_family_t sipx_family; +	__be16		sipx_port; +	__be32		sipx_network; +	unsigned char 	sipx_node[IPX_NODE_LEN]; +	__u8		sipx_type; +	unsigned char	sipx_zero;	/* 16 byte fill */ +}; + +/* + * So we can fit the extra info for SIOCSIFADDR into the address nicely + */ +#define sipx_special	sipx_port +#define sipx_action	sipx_zero +#define IPX_DLTITF	0 +#define IPX_CRTITF	1 + +struct ipx_route_definition { +	__be32        ipx_network; +	__be32        ipx_router_network; +	unsigned char ipx_router_node[IPX_NODE_LEN]; +}; + +struct ipx_interface_definition { +	__be32        ipx_network; +	unsigned char ipx_device[16]; +	unsigned char ipx_dlink_type; +#define IPX_FRAME_NONE		0 +#define IPX_FRAME_SNAP		1 +#define IPX_FRAME_8022		2 +#define IPX_FRAME_ETHERII	3 +#define IPX_FRAME_8023		4 +#define IPX_FRAME_TR_8022       5 /* obsolete */ +	unsigned char ipx_special; +#define IPX_SPECIAL_NONE	0 +#define IPX_PRIMARY		1 +#define IPX_INTERNAL		2 +	unsigned char ipx_node[IPX_NODE_LEN]; +}; +	 +struct ipx_config_data { +	unsigned char	ipxcfg_auto_select_primary; +	unsigned char	ipxcfg_auto_create_interfaces; +}; + +/* + * OLD Route Definition for backward compatibility. + */ + +struct ipx_route_def { +	__be32		ipx_network; +	__be32		ipx_router_network; +#define IPX_ROUTE_NO_ROUTER	0 +	unsigned char	ipx_router_node[IPX_NODE_LEN]; +	unsigned char	ipx_device[16]; +	unsigned short	ipx_flags; +#define IPX_RT_SNAP		8 +#define IPX_RT_8022		4 +#define IPX_RT_BLUEBOOK		2 +#define IPX_RT_ROUTED		1 +}; + +#define SIOCAIPXITFCRT		(SIOCPROTOPRIVATE) +#define SIOCAIPXPRISLT		(SIOCPROTOPRIVATE + 1) +#define SIOCIPXCFGDATA		(SIOCPROTOPRIVATE + 2) +#define SIOCIPXNCPCONN		(SIOCPROTOPRIVATE + 3) +#endif /* _IPX_H_ */ diff --git a/include/uapi/linux/irda.h b/include/uapi/linux/irda.h new file mode 100644 index 00000000000..a014c325231 --- /dev/null +++ b/include/uapi/linux/irda.h @@ -0,0 +1,251 @@ +/********************************************************************* + *                 + * Filename:      irda.h + * Version:        + * Description:    + * Status:        Experimental. + * Author:        Dag Brattli <dagb@cs.uit.no> + * Created at:    Mon Mar  8 14:06:12 1999 + * Modified at:   Sat Dec 25 16:06:42 1999 + * Modified by:   Dag Brattli <dagb@cs.uit.no> + *  + *     Copyright (c) 1999 Dag Brattli, 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; either version 2 of  + *     the License, or (at your option) any later version. + *   + *     Neither Dag Brattli nor University of Tromsø admit liability nor + *     provide warranty for any of this software. This material is  + *     provided "AS-IS" and at no charge. + * + ********************************************************************/ + +#ifndef KERNEL_IRDA_H +#define KERNEL_IRDA_H + +#include <linux/types.h> +#include <linux/socket.h> + +/* Note that this file is shared with user space. */ + +/* Hint bit positions for first hint byte */ +#define HINT_PNP         0x01 +#define HINT_PDA         0x02 +#define HINT_COMPUTER    0x04 +#define HINT_PRINTER     0x08 +#define HINT_MODEM       0x10 +#define HINT_FAX         0x20 +#define HINT_LAN         0x40 +#define HINT_EXTENSION   0x80 + +/* Hint bit positions for second hint byte (first extension byte) */ +#define HINT_TELEPHONY   0x01 +#define HINT_FILE_SERVER 0x02 +#define HINT_COMM        0x04 +#define HINT_MESSAGE     0x08 +#define HINT_HTTP        0x10 +#define HINT_OBEX        0x20 + +/* IrLMP character code values */ +#define CS_ASCII         0x00 +#define	CS_ISO_8859_1    0x01 +#define	CS_ISO_8859_2    0x02 +#define	CS_ISO_8859_3    0x03 +#define	CS_ISO_8859_4    0x04 +#define	CS_ISO_8859_5    0x05 +#define	CS_ISO_8859_6    0x06 +#define	CS_ISO_8859_7    0x07 +#define	CS_ISO_8859_8    0x08 +#define	CS_ISO_8859_9    0x09 +#define CS_UNICODE       0xff + +/* These are the currently known dongles */ +typedef enum { +	IRDA_TEKRAM_DONGLE       = 0, +	IRDA_ESI_DONGLE          = 1, +	IRDA_ACTISYS_DONGLE      = 2, +	IRDA_ACTISYS_PLUS_DONGLE = 3, +	IRDA_GIRBIL_DONGLE       = 4, +	IRDA_LITELINK_DONGLE     = 5, +	IRDA_AIRPORT_DONGLE      = 6, +	IRDA_OLD_BELKIN_DONGLE   = 7, +	IRDA_EP7211_IR           = 8, +	IRDA_MCP2120_DONGLE      = 9, +	IRDA_ACT200L_DONGLE      = 10, +	IRDA_MA600_DONGLE        = 11, +	IRDA_TOIM3232_DONGLE     = 12, +	IRDA_EP7211_DONGLE       = 13, +} IRDA_DONGLE; + +/* Protocol types to be used for SOCK_DGRAM */ +enum { +	IRDAPROTO_UNITDATA = 0, +	IRDAPROTO_ULTRA    = 1, +	IRDAPROTO_MAX +}; + +#define SOL_IRLMP      266 /* Same as SOL_IRDA for now */ +#define SOL_IRTTP      266 /* Same as SOL_IRDA for now */ + +#define IRLMP_ENUMDEVICES        1	/* Return discovery log */ +#define IRLMP_IAS_SET            2	/* Set an attribute in local IAS */ +#define IRLMP_IAS_QUERY          3	/* Query remote IAS for attribute */ +#define IRLMP_HINTS_SET          4	/* Set hint bits advertised */ +#define IRLMP_QOS_SET            5 +#define IRLMP_QOS_GET            6 +#define IRLMP_MAX_SDU_SIZE       7 +#define IRLMP_IAS_GET            8	/* Get an attribute from local IAS */ +#define IRLMP_IAS_DEL		 9	/* Remove attribute from local IAS */ +#define IRLMP_HINT_MASK_SET	10	/* Set discovery filter */ +#define IRLMP_WAITDEVICE	11	/* Wait for a new discovery */ + +#define IRTTP_MAX_SDU_SIZE IRLMP_MAX_SDU_SIZE /* Compatibility */ + +#define IAS_MAX_STRING         256	/* See IrLMP 1.1, 4.3.3.2 */ +#define IAS_MAX_OCTET_STRING  1024	/* See IrLMP 1.1, 4.3.3.2 */ +#define IAS_MAX_CLASSNAME       60	/* See IrLMP 1.1, 4.3.1 */ +#define IAS_MAX_ATTRIBNAME      60	/* See IrLMP 1.1, 4.3.3.1 */ +#define IAS_MAX_ATTRIBNUMBER   256	/* See IrLMP 1.1, 4.3.3.1 */ +/* For user space backward compatibility - may be fixed in kernel 2.5.X + * Note : need 60+1 ('\0'), make it 64 for alignement - Jean II */ +#define IAS_EXPORT_CLASSNAME       64 +#define IAS_EXPORT_ATTRIBNAME     256 + +/* Attribute type needed for struct irda_ias_set */ +#define IAS_MISSING 0 +#define IAS_INTEGER 1 +#define IAS_OCT_SEQ 2 +#define IAS_STRING  3 + +#define LSAP_ANY              0xff + +struct sockaddr_irda { +	__kernel_sa_family_t sir_family; /* AF_IRDA */ +	__u8        sir_lsap_sel; /* LSAP selector */ +	__u32       sir_addr;     /* Device address */ +	char        sir_name[25]; /* Usually <service>:IrDA:TinyTP */ +}; + +struct irda_device_info { +	__u32       saddr;    /* Address of local interface */ +	__u32       daddr;    /* Address of remote device */ +	char        info[22]; /* Description */ +	__u8        charset;  /* Charset used for description */ +	__u8        hints[2]; /* Hint bits */ +}; + +struct irda_device_list { +       __u32 len; +       struct irda_device_info dev[1]; +}; + +struct irda_ias_set { +	char irda_class_name[IAS_EXPORT_CLASSNAME]; +	char irda_attrib_name[IAS_EXPORT_ATTRIBNAME]; +	unsigned int irda_attrib_type; +	union { +		unsigned int irda_attrib_int; +		struct { +			unsigned short len; +			__u8 octet_seq[IAS_MAX_OCTET_STRING]; +		} irda_attrib_octet_seq; +		struct { +			__u8 len; +			__u8 charset; +			__u8 string[IAS_MAX_STRING]; +		} irda_attrib_string; +	} attribute; +	__u32       daddr;    /* Address of device (for some queries only) */ +}; + +/* Some private IOCTL's (max 16) */ +#define SIOCSDONGLE    (SIOCDEVPRIVATE + 0) +#define SIOCGDONGLE    (SIOCDEVPRIVATE + 1) +#define SIOCSBANDWIDTH (SIOCDEVPRIVATE + 2) +#define SIOCSMEDIABUSY (SIOCDEVPRIVATE + 3) +#define SIOCGMEDIABUSY (SIOCDEVPRIVATE + 4) +#define SIOCGRECEIVING (SIOCDEVPRIVATE + 5) +#define SIOCSMODE      (SIOCDEVPRIVATE + 6) +#define SIOCGMODE      (SIOCDEVPRIVATE + 7) +#define SIOCSDTRRTS    (SIOCDEVPRIVATE + 8) +#define SIOCGQOS       (SIOCDEVPRIVATE + 9) + +/* No reason to include <linux/if.h> just because of this one ;-) */ +#define IRNAMSIZ 16  + +/* IrDA quality of service information (must not exceed 16 bytes) */ +struct if_irda_qos { +	unsigned long  baudrate; +	unsigned short data_size; +	unsigned short window_size; +	unsigned short min_turn_time; +	unsigned short max_turn_time; +	unsigned char  add_bofs; +	unsigned char  link_disc; +}; + +/* For setting RTS and DTR lines of a dongle */ +struct if_irda_line { +	__u8 dtr; +	__u8 rts; +}; + +/* IrDA interface configuration (data part must not exceed 16 bytes) */ +struct if_irda_req { +	union { +		char ifrn_name[IRNAMSIZ];  /* if name, e.g. "irda0" */ +	} ifr_ifrn; +	 +	/* Data part */ +	union { +		struct if_irda_line ifru_line; +		struct if_irda_qos  ifru_qos; +		unsigned short      ifru_flags; +		unsigned int        ifru_receiving; +		unsigned int        ifru_mode; +		unsigned int        ifru_dongle; +	} ifr_ifru; +}; + +#define ifr_baudrate  ifr_ifru.ifru_qos.baudrate +#define ifr_receiving ifr_ifru.ifru_receiving  +#define ifr_dongle    ifr_ifru.ifru_dongle +#define ifr_mode      ifr_ifru.ifru_mode +#define ifr_dtr       ifr_ifru.ifru_line.dtr +#define ifr_rts       ifr_ifru.ifru_line.rts + + +/* IrDA netlink definitions */ +#define IRDA_NL_NAME "irda" +#define IRDA_NL_VERSION 1 + +enum irda_nl_commands { +	IRDA_NL_CMD_UNSPEC, +	IRDA_NL_CMD_SET_MODE, +	IRDA_NL_CMD_GET_MODE, + +	__IRDA_NL_CMD_AFTER_LAST +}; +#define IRDA_NL_CMD_MAX (__IRDA_NL_CMD_AFTER_LAST - 1) + +enum nl80211_attrs { +	IRDA_NL_ATTR_UNSPEC, +	IRDA_NL_ATTR_IFNAME, +	IRDA_NL_ATTR_MODE, + +	__IRDA_NL_ATTR_AFTER_LAST +}; +#define IRDA_NL_ATTR_MAX (__IRDA_NL_ATTR_AFTER_LAST - 1) + +/* IrDA modes */ +#define IRDA_MODE_PRIMARY   0x1 +#define IRDA_MODE_SECONDARY 0x2 +#define IRDA_MODE_MONITOR   0x4 + +#endif /* KERNEL_IRDA_H */ + + + + diff --git a/include/uapi/linux/irqnr.h b/include/uapi/linux/irqnr.h new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/include/uapi/linux/irqnr.h diff --git a/include/uapi/linux/isdn.h b/include/uapi/linux/isdn.h new file mode 100644 index 00000000000..eb1995fffc3 --- /dev/null +++ b/include/uapi/linux/isdn.h @@ -0,0 +1,143 @@ +/* $Id: isdn.h,v 1.125.2.3 2004/02/10 01:07:14 keil Exp $ + * + * Main header for the Linux ISDN subsystem (linklevel). + * + * Copyright 1994,95,96 by Fritz Elfert (fritz@isdn4linux.de) + * Copyright 1995,96    by Thinking Objects Software GmbH Wuerzburg + * Copyright 1995,96    by Michael Hipp (Michael.Hipp@student.uni-tuebingen.de) + *  + * This software may be used and distributed according to the terms + * of the GNU General Public License, incorporated herein by reference. + * + */ + +#ifndef _UAPI__ISDN_H__ +#define _UAPI__ISDN_H__ + +#include <linux/ioctl.h> +#include <linux/tty.h> + +#define ISDN_MAX_DRIVERS    32 +#define ISDN_MAX_CHANNELS   64 + +/* New ioctl-codes */ +#define IIOCNETAIF  _IO('I',1) +#define IIOCNETDIF  _IO('I',2) +#define IIOCNETSCF  _IO('I',3) +#define IIOCNETGCF  _IO('I',4) +#define IIOCNETANM  _IO('I',5) +#define IIOCNETDNM  _IO('I',6) +#define IIOCNETGNM  _IO('I',7) +#define IIOCGETSET  _IO('I',8) /* no longer supported */ +#define IIOCSETSET  _IO('I',9) /* no longer supported */ +#define IIOCSETVER  _IO('I',10) +#define IIOCNETHUP  _IO('I',11) +#define IIOCSETGST  _IO('I',12) +#define IIOCSETBRJ  _IO('I',13) +#define IIOCSIGPRF  _IO('I',14) +#define IIOCGETPRF  _IO('I',15) +#define IIOCSETPRF  _IO('I',16) +#define IIOCGETMAP  _IO('I',17) +#define IIOCSETMAP  _IO('I',18) +#define IIOCNETASL  _IO('I',19) +#define IIOCNETDIL  _IO('I',20) +#define IIOCGETCPS  _IO('I',21) +#define IIOCGETDVR  _IO('I',22) +#define IIOCNETLCR  _IO('I',23) /* dwabc ioctl for LCR from isdnlog */ +#define IIOCNETDWRSET  _IO('I',24) /* dwabc ioctl to reset abc-values to default on a net-interface */ + +#define IIOCNETALN  _IO('I',32) +#define IIOCNETDLN  _IO('I',33) + +#define IIOCNETGPN  _IO('I',34) + +#define IIOCDBGVAR  _IO('I',127) + +#define IIOCDRVCTL  _IO('I',128) + +/* cisco hdlck device private ioctls */ +#define SIOCGKEEPPERIOD	(SIOCDEVPRIVATE + 0) +#define SIOCSKEEPPERIOD	(SIOCDEVPRIVATE + 1) +#define SIOCGDEBSERINT	(SIOCDEVPRIVATE + 2) +#define SIOCSDEBSERINT	(SIOCDEVPRIVATE + 3) + +/* Packet encapsulations for net-interfaces */ +#define ISDN_NET_ENCAP_ETHER      0 +#define ISDN_NET_ENCAP_RAWIP      1 +#define ISDN_NET_ENCAP_IPTYP      2 +#define ISDN_NET_ENCAP_CISCOHDLC  3 /* Without SLARP and keepalive */ +#define ISDN_NET_ENCAP_SYNCPPP    4 +#define ISDN_NET_ENCAP_UIHDLC     5 +#define ISDN_NET_ENCAP_CISCOHDLCK 6 /* With SLARP and keepalive    */ +#define ISDN_NET_ENCAP_X25IFACE   7 /* Documentation/networking/x25-iface.txt */ +#define ISDN_NET_ENCAP_MAX_ENCAP  ISDN_NET_ENCAP_X25IFACE + +/* Facility which currently uses an ISDN-channel */ +#define ISDN_USAGE_NONE       0 +#define ISDN_USAGE_RAW        1 +#define ISDN_USAGE_MODEM      2 +#define ISDN_USAGE_NET        3 +#define ISDN_USAGE_VOICE      4 +#define ISDN_USAGE_FAX        5 +#define ISDN_USAGE_MASK       7 /* Mask to get plain usage */ +#define ISDN_USAGE_DISABLED  32 /* This bit is set, if channel is disabled */ +#define ISDN_USAGE_EXCLUSIVE 64 /* This bit is set, if channel is exclusive */ +#define ISDN_USAGE_OUTGOING 128 /* This bit is set, if channel is outgoing  */ + +#define ISDN_MODEM_NUMREG    24        /* Number of Modem-Registers        */ +#define ISDN_LMSNLEN         255 /* Length of tty's Listen-MSN string */ +#define ISDN_CMSGLEN	     50	 /* Length of CONNECT-Message to add for Modem */ + +#define ISDN_MSNLEN          32 +#define NET_DV 0x06  /* Data version for isdn_net_ioctl_cfg   */ +#define TTY_DV 0x06  /* Data version for iprofd etc.          */ + +#define INF_DV 0x01  /* Data version for /dev/isdninfo        */ + +typedef struct { +  char drvid[25]; +  unsigned long arg; +} isdn_ioctl_struct; + +typedef struct { +  char name[10]; +  char phone[ISDN_MSNLEN]; +  int  outgoing; +} isdn_net_ioctl_phone; + +typedef struct { +  char name[10];     /* Name of interface                     */ +  char master[10];   /* Name of Master for Bundling           */ +  char slave[10];    /* Name of Slave for Bundling            */ +  char eaz[256];     /* EAZ/MSN                               */ +  char drvid[25];    /* DriverId for Bindings                 */ +  int  onhtime;      /* Hangup-Timeout                        */ +  int  charge;       /* Charge-Units                          */ +  int  l2_proto;     /* Layer-2 protocol                      */ +  int  l3_proto;     /* Layer-3 protocol                      */ +  int  p_encap;      /* Encapsulation                         */ +  int  exclusive;    /* Channel, if bound exclusive           */ +  int  dialmax;      /* Dial Retry-Counter                    */ +  int  slavedelay;   /* Delay until slave starts up           */ +  int  cbdelay;      /* Delay before Callback                 */ +  int  chargehup;    /* Flag: Charge-Hangup                   */ +  int  ihup;         /* Flag: Hangup-Timeout on incoming line */ +  int  secure;       /* Flag: Secure                          */ +  int  callback;     /* Flag: Callback                        */ +  int  cbhup;        /* Flag: Reject Call before Callback     */ +  int  pppbind;      /* ippp device for bindings              */ +  int  chargeint;    /* Use fixed charge interval length      */ +  int  triggercps;   /* BogoCPS needed for triggering slave   */ +  int  dialtimeout;  /* Dial-Timeout                          */ +  int  dialwait;     /* Time to wait after failed dial        */ +  int  dialmode;     /* Flag: off / on / auto                 */ +} isdn_net_ioctl_cfg; + +#define ISDN_NET_DIALMODE_MASK  0xC0    /* bits for status                */ +#define ISDN_NET_DM_OFF	        0x00    /* this interface is stopped      */ +#define ISDN_NET_DM_MANUAL	0x40    /* this interface is on (manual)  */ +#define ISDN_NET_DM_AUTO	0x80    /* this interface is autodial     */ +#define ISDN_NET_DIALMODE(x) ((&(x))->flags & ISDN_NET_DIALMODE_MASK) + + +#endif /* _UAPI__ISDN_H__ */ diff --git a/include/uapi/linux/isdn_divertif.h b/include/uapi/linux/isdn_divertif.h new file mode 100644 index 00000000000..3e3c2d89841 --- /dev/null +++ b/include/uapi/linux/isdn_divertif.h @@ -0,0 +1,30 @@ +/* $Id: isdn_divertif.h,v 1.4.6.1 2001/09/23 22:25:05 kai Exp $ + * + * Header for the diversion supplementary interface for i4l. + * + * Author    Werner Cornelius (werner@titro.de) + * Copyright by Werner Cornelius (werner@titro.de) + * + * This software may be used and distributed according to the terms + * of the GNU General Public License, incorporated herein by reference. + * + */ + +#ifndef _UAPI_LINUX_ISDN_DIVERTIF_H +#define _UAPI_LINUX_ISDN_DIVERTIF_H + +/***********************************************************/ +/* magic value is also used to control version information */ +/***********************************************************/ +#define DIVERT_IF_MAGIC 0x25873401 +#define DIVERT_CMD_REG  0x00  /* register command */ +#define DIVERT_CMD_REL  0x01  /* release command */ +#define DIVERT_NO_ERR   0x00  /* return value no error */ +#define DIVERT_CMD_ERR  0x01  /* invalid cmd */ +#define DIVERT_VER_ERR  0x02  /* magic/version invalid */ +#define DIVERT_REG_ERR  0x03  /* module already registered */ +#define DIVERT_REL_ERR  0x04  /* module not registered */ +#define DIVERT_REG_NAME isdn_register_divert + + +#endif /* _UAPI_LINUX_ISDN_DIVERTIF_H */ diff --git a/include/uapi/linux/isdn_ppp.h b/include/uapi/linux/isdn_ppp.h new file mode 100644 index 00000000000..e7d7bd2aed3 --- /dev/null +++ b/include/uapi/linux/isdn_ppp.h @@ -0,0 +1,67 @@ +/* Linux ISDN subsystem, sync PPP, interface to ipppd + * + * Copyright 1994-1999  by Fritz Elfert (fritz@isdn4linux.de) + * Copyright 1995,96    Thinking Objects Software GmbH Wuerzburg + * Copyright 1995,96    by Michael Hipp (Michael.Hipp@student.uni-tuebingen.de) + * Copyright 2000-2002  by Kai Germaschewski (kai@germaschewski.name) + * + * This software may be used and distributed according to the terms + * of the GNU General Public License, incorporated herein by reference. + * + */ + +#ifndef _UAPI_LINUX_ISDN_PPP_H +#define _UAPI_LINUX_ISDN_PPP_H + +#define CALLTYPE_INCOMING 0x1 +#define CALLTYPE_OUTGOING 0x2 +#define CALLTYPE_CALLBACK 0x4 + +#define IPPP_VERSION    "2.2.0" + +struct pppcallinfo +{ +  int calltype; +  unsigned char local_num[64]; +  unsigned char remote_num[64]; +  int charge_units; +}; + +#define PPPIOCGCALLINFO _IOWR('t',128,struct pppcallinfo) +#define PPPIOCBUNDLE   _IOW('t',129,int) +#define PPPIOCGMPFLAGS _IOR('t',130,int) +#define PPPIOCSMPFLAGS _IOW('t',131,int) +#define PPPIOCSMPMTU   _IOW('t',132,int) +#define PPPIOCSMPMRU   _IOW('t',133,int) +#define PPPIOCGCOMPRESSORS _IOR('t',134,unsigned long [8]) +#define PPPIOCSCOMPRESSOR _IOW('t',135,int) +#define PPPIOCGIFNAME      _IOR('t',136, char [IFNAMSIZ] ) + + +#define SC_MP_PROT       0x00000200 +#define SC_REJ_MP_PROT   0x00000400 +#define SC_OUT_SHORT_SEQ 0x00000800 +#define SC_IN_SHORT_SEQ  0x00004000 + +#define SC_DECOMP_ON		0x01 +#define SC_COMP_ON		0x02 +#define SC_DECOMP_DISCARD	0x04 +#define SC_COMP_DISCARD		0x08 +#define SC_LINK_DECOMP_ON	0x10 +#define SC_LINK_COMP_ON		0x20 +#define SC_LINK_DECOMP_DISCARD	0x40 +#define SC_LINK_COMP_DISCARD	0x80 + +#define ISDN_PPP_COMP_MAX_OPTIONS 16 + +#define IPPP_COMP_FLAG_XMIT 0x1 +#define IPPP_COMP_FLAG_LINK 0x2 + +struct isdn_ppp_comp_data { +  int num; +  unsigned char options[ISDN_PPP_COMP_MAX_OPTIONS]; +  int optlen; +  int flags; +}; + +#endif /* _UAPI_LINUX_ISDN_PPP_H */ diff --git a/include/uapi/linux/isdnif.h b/include/uapi/linux/isdnif.h new file mode 100644 index 00000000000..246138c01c4 --- /dev/null +++ b/include/uapi/linux/isdnif.h @@ -0,0 +1,56 @@ +/* $Id: isdnif.h,v 1.43.2.2 2004/01/12 23:08:35 keil Exp $ + * + * Linux ISDN subsystem + * Definition of the interface between the subsystem and its low-level drivers. + * + * Copyright 1994,95,96 by Fritz Elfert (fritz@isdn4linux.de) + * Copyright 1995,96    Thinking Objects Software GmbH Wuerzburg + *  + * This software may be used and distributed according to the terms + * of the GNU General Public License, incorporated herein by reference. + * + */ + +#ifndef _UAPI__ISDNIF_H__ +#define _UAPI__ISDNIF_H__ + + +/* + * Values for general protocol-selection + */ +#define ISDN_PTYPE_UNKNOWN   0   /* Protocol undefined   */ +#define ISDN_PTYPE_1TR6      1   /* german 1TR6-protocol */ +#define ISDN_PTYPE_EURO      2   /* EDSS1-protocol       */ +#define ISDN_PTYPE_LEASED    3   /* for leased lines     */ +#define ISDN_PTYPE_NI1       4   /* US NI-1 protocol     */ +#define ISDN_PTYPE_MAX       7   /* Max. 8 Protocols     */ + +/* + * Values for Layer-2-protocol-selection + */ +#define ISDN_PROTO_L2_X75I   0   /* X75/LAPB with I-Frames            */ +#define ISDN_PROTO_L2_X75UI  1   /* X75/LAPB with UI-Frames           */ +#define ISDN_PROTO_L2_X75BUI 2   /* X75/LAPB with UI-Frames           */ +#define ISDN_PROTO_L2_HDLC   3   /* HDLC                              */ +#define ISDN_PROTO_L2_TRANS  4   /* Transparent (Voice)               */ +#define ISDN_PROTO_L2_X25DTE 5   /* X25/LAPB DTE mode                 */ +#define ISDN_PROTO_L2_X25DCE 6   /* X25/LAPB DCE mode                 */ +#define ISDN_PROTO_L2_V11096 7   /* V.110 bitrate adaption 9600 Baud  */ +#define ISDN_PROTO_L2_V11019 8   /* V.110 bitrate adaption 19200 Baud */ +#define ISDN_PROTO_L2_V11038 9   /* V.110 bitrate adaption 38400 Baud */ +#define ISDN_PROTO_L2_MODEM  10  /* Analog Modem on Board */ +#define ISDN_PROTO_L2_FAX    11  /* Fax Group 2/3         */ +#define ISDN_PROTO_L2_HDLC_56K 12   /* HDLC 56k                          */ +#define ISDN_PROTO_L2_MAX    15  /* Max. 16 Protocols                 */ + +/* + * Values for Layer-3-protocol-selection + */ +#define ISDN_PROTO_L3_TRANS	0	/* Transparent */ +#define ISDN_PROTO_L3_TRANSDSP	1	/* Transparent with DSP */ +#define ISDN_PROTO_L3_FCLASS2	2	/* Fax Group 2/3 CLASS 2 */ +#define ISDN_PROTO_L3_FCLASS1	3	/* Fax Group 2/3 CLASS 1 */ +#define ISDN_PROTO_L3_MAX	7	/* Max. 8 Protocols */ + + +#endif /* _UAPI__ISDNIF_H__ */ diff --git a/include/uapi/linux/iso_fs.h b/include/uapi/linux/iso_fs.h new file mode 100644 index 00000000000..4688ac4284e --- /dev/null +++ b/include/uapi/linux/iso_fs.h @@ -0,0 +1,165 @@ +#ifndef _ISOFS_FS_H +#define _ISOFS_FS_H + +#include <linux/types.h> +#include <linux/magic.h> + +/* + * The isofs filesystem constants/structures + */ + +/* This part borrowed from the bsd386 isofs */ +#define ISODCL(from, to) (to - from + 1) + +struct iso_volume_descriptor { +	char type[ISODCL(1,1)]; /* 711 */ +	char id[ISODCL(2,6)]; +	char version[ISODCL(7,7)]; +	char data[ISODCL(8,2048)]; +}; + +/* volume descriptor types */ +#define ISO_VD_PRIMARY 1 +#define ISO_VD_SUPPLEMENTARY 2 +#define ISO_VD_END 255 + +#define ISO_STANDARD_ID "CD001" + +struct iso_primary_descriptor { +	char type			[ISODCL (  1,   1)]; /* 711 */ +	char id				[ISODCL (  2,   6)]; +	char version			[ISODCL (  7,   7)]; /* 711 */ +	char unused1			[ISODCL (  8,   8)]; +	char system_id			[ISODCL (  9,  40)]; /* achars */ +	char volume_id			[ISODCL ( 41,  72)]; /* dchars */ +	char unused2			[ISODCL ( 73,  80)]; +	char volume_space_size		[ISODCL ( 81,  88)]; /* 733 */ +	char unused3			[ISODCL ( 89, 120)]; +	char volume_set_size		[ISODCL (121, 124)]; /* 723 */ +	char volume_sequence_number	[ISODCL (125, 128)]; /* 723 */ +	char logical_block_size		[ISODCL (129, 132)]; /* 723 */ +	char path_table_size		[ISODCL (133, 140)]; /* 733 */ +	char type_l_path_table		[ISODCL (141, 144)]; /* 731 */ +	char opt_type_l_path_table	[ISODCL (145, 148)]; /* 731 */ +	char type_m_path_table		[ISODCL (149, 152)]; /* 732 */ +	char opt_type_m_path_table	[ISODCL (153, 156)]; /* 732 */ +	char root_directory_record	[ISODCL (157, 190)]; /* 9.1 */ +	char volume_set_id		[ISODCL (191, 318)]; /* dchars */ +	char publisher_id		[ISODCL (319, 446)]; /* achars */ +	char preparer_id		[ISODCL (447, 574)]; /* achars */ +	char application_id		[ISODCL (575, 702)]; /* achars */ +	char copyright_file_id		[ISODCL (703, 739)]; /* 7.5 dchars */ +	char abstract_file_id		[ISODCL (740, 776)]; /* 7.5 dchars */ +	char bibliographic_file_id	[ISODCL (777, 813)]; /* 7.5 dchars */ +	char creation_date		[ISODCL (814, 830)]; /* 8.4.26.1 */ +	char modification_date		[ISODCL (831, 847)]; /* 8.4.26.1 */ +	char expiration_date		[ISODCL (848, 864)]; /* 8.4.26.1 */ +	char effective_date		[ISODCL (865, 881)]; /* 8.4.26.1 */ +	char file_structure_version	[ISODCL (882, 882)]; /* 711 */ +	char unused4			[ISODCL (883, 883)]; +	char application_data		[ISODCL (884, 1395)]; +	char unused5			[ISODCL (1396, 2048)]; +}; + +/* Almost the same as the primary descriptor but two fields are specified */ +struct iso_supplementary_descriptor { +	char type			[ISODCL (  1,   1)]; /* 711 */ +	char id				[ISODCL (  2,   6)]; +	char version			[ISODCL (  7,   7)]; /* 711 */ +	char flags			[ISODCL (  8,   8)]; /* 853 */ +	char system_id			[ISODCL (  9,  40)]; /* achars */ +	char volume_id			[ISODCL ( 41,  72)]; /* dchars */ +	char unused2			[ISODCL ( 73,  80)]; +	char volume_space_size		[ISODCL ( 81,  88)]; /* 733 */ +	char escape			[ISODCL ( 89, 120)]; /* 856 */ +	char volume_set_size		[ISODCL (121, 124)]; /* 723 */ +	char volume_sequence_number	[ISODCL (125, 128)]; /* 723 */ +	char logical_block_size		[ISODCL (129, 132)]; /* 723 */ +	char path_table_size		[ISODCL (133, 140)]; /* 733 */ +	char type_l_path_table		[ISODCL (141, 144)]; /* 731 */ +	char opt_type_l_path_table	[ISODCL (145, 148)]; /* 731 */ +	char type_m_path_table		[ISODCL (149, 152)]; /* 732 */ +	char opt_type_m_path_table	[ISODCL (153, 156)]; /* 732 */ +	char root_directory_record	[ISODCL (157, 190)]; /* 9.1 */ +	char volume_set_id		[ISODCL (191, 318)]; /* dchars */ +	char publisher_id		[ISODCL (319, 446)]; /* achars */ +	char preparer_id		[ISODCL (447, 574)]; /* achars */ +	char application_id		[ISODCL (575, 702)]; /* achars */ +	char copyright_file_id		[ISODCL (703, 739)]; /* 7.5 dchars */ +	char abstract_file_id		[ISODCL (740, 776)]; /* 7.5 dchars */ +	char bibliographic_file_id	[ISODCL (777, 813)]; /* 7.5 dchars */ +	char creation_date		[ISODCL (814, 830)]; /* 8.4.26.1 */ +	char modification_date		[ISODCL (831, 847)]; /* 8.4.26.1 */ +	char expiration_date		[ISODCL (848, 864)]; /* 8.4.26.1 */ +	char effective_date		[ISODCL (865, 881)]; /* 8.4.26.1 */ +	char file_structure_version	[ISODCL (882, 882)]; /* 711 */ +	char unused4			[ISODCL (883, 883)]; +	char application_data		[ISODCL (884, 1395)]; +	char unused5			[ISODCL (1396, 2048)]; +}; + + +#define HS_STANDARD_ID "CDROM" + +struct  hs_volume_descriptor { +	char foo			[ISODCL (  1,   8)]; /* 733 */ +	char type			[ISODCL (  9,   9)]; /* 711 */ +	char id				[ISODCL ( 10,  14)]; +	char version			[ISODCL ( 15,  15)]; /* 711 */ +	char data[ISODCL(16,2048)]; +}; + + +struct hs_primary_descriptor { +	char foo			[ISODCL (  1,   8)]; /* 733 */ +	char type			[ISODCL (  9,   9)]; /* 711 */ +	char id				[ISODCL ( 10,  14)]; +	char version			[ISODCL ( 15,  15)]; /* 711 */ +	char unused1			[ISODCL ( 16,  16)]; /* 711 */ +	char system_id			[ISODCL ( 17,  48)]; /* achars */ +	char volume_id			[ISODCL ( 49,  80)]; /* dchars */ +	char unused2			[ISODCL ( 81,  88)]; /* 733 */ +	char volume_space_size		[ISODCL ( 89,  96)]; /* 733 */ +	char unused3			[ISODCL ( 97, 128)]; /* 733 */ +	char volume_set_size		[ISODCL (129, 132)]; /* 723 */ +	char volume_sequence_number	[ISODCL (133, 136)]; /* 723 */ +	char logical_block_size		[ISODCL (137, 140)]; /* 723 */ +	char path_table_size		[ISODCL (141, 148)]; /* 733 */ +	char type_l_path_table		[ISODCL (149, 152)]; /* 731 */ +	char unused4			[ISODCL (153, 180)]; /* 733 */ +	char root_directory_record	[ISODCL (181, 214)]; /* 9.1 */ +}; + +/* We use this to help us look up the parent inode numbers. */ + +struct iso_path_table{ +	unsigned char  name_len[2];	/* 721 */ +	char extent[4];		/* 731 */ +	char  parent[2];	/* 721 */ +	char name[0]; +} __attribute__((packed)); + +/* high sierra is identical to iso, except that the date is only 6 bytes, and +   there is an extra reserved byte after the flags */ + +struct iso_directory_record { +	char length			[ISODCL (1, 1)]; /* 711 */ +	char ext_attr_length		[ISODCL (2, 2)]; /* 711 */ +	char extent			[ISODCL (3, 10)]; /* 733 */ +	char size			[ISODCL (11, 18)]; /* 733 */ +	char date			[ISODCL (19, 25)]; /* 7 by 711 */ +	char flags			[ISODCL (26, 26)]; +	char file_unit_size		[ISODCL (27, 27)]; /* 711 */ +	char interleave			[ISODCL (28, 28)]; /* 711 */ +	char volume_sequence_number	[ISODCL (29, 32)]; /* 723 */ +	unsigned char name_len		[ISODCL (33, 33)]; /* 711 */ +	char name			[0]; +} __attribute__((packed)); + +#define ISOFS_BLOCK_BITS 11 +#define ISOFS_BLOCK_SIZE 2048 + +#define ISOFS_BUFFER_SIZE(INODE) ((INODE)->i_sb->s_blocksize) +#define ISOFS_BUFFER_BITS(INODE) ((INODE)->i_sb->s_blocksize_bits) + +#endif /* _ISOFS_FS_H */ diff --git a/include/uapi/linux/ivtv.h b/include/uapi/linux/ivtv.h new file mode 100644 index 00000000000..42bf725751a --- /dev/null +++ b/include/uapi/linux/ivtv.h @@ -0,0 +1,73 @@ +/* +    Public ivtv API header +    Copyright (C) 2003-2004  Kevin Thayer <nufan_wfk at yahoo.com> +    Copyright (C) 2004-2007  Hans Verkuil <hverkuil@xs4all.nl> + +    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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + */ + +#ifndef __LINUX_IVTV_H__ +#define __LINUX_IVTV_H__ + +#include <linux/compiler.h> +#include <linux/types.h> +#include <linux/videodev2.h> + +/* ivtv knows several distinct output modes: MPEG streaming, +   YUV streaming, YUV updates through user DMA and the passthrough +   mode. + +   In order to clearly tell the driver that we are in user DMA +   YUV mode you need to call IVTV_IOC_DMA_FRAME with y_source == NULL +   first (althrough if you don't then the first time +   DMA_FRAME is called the mode switch is done automatically). + +   When you close the file handle the user DMA mode is exited again. + +   While in one mode, you cannot use another mode (EBUSY is returned). + +   All this means that if you want to change the YUV interlacing +   for the user DMA YUV mode you first need to do call IVTV_IOC_DMA_FRAME +   with y_source == NULL before you can set the correct format using +   VIDIOC_S_FMT. + +   Eventually all this should be replaced with a proper V4L2 API, +   but for now we have to do it this way. */ + +struct ivtv_dma_frame { +	enum v4l2_buf_type type; /* V4L2_BUF_TYPE_VIDEO_OUTPUT */ +	__u32 pixelformat;	 /* 0 == same as destination */ +	void __user *y_source;   /* if NULL and type == V4L2_BUF_TYPE_VIDEO_OUTPUT, +				    then just switch to user DMA YUV output mode */ +	void __user *uv_source;  /* Unused for RGB pixelformats */ +	struct v4l2_rect src; +	struct v4l2_rect dst; +	__u32 src_width; +	__u32 src_height; +}; + +#define IVTV_IOC_DMA_FRAME		_IOW ('V', BASE_VIDIOC_PRIVATE+0, struct ivtv_dma_frame) + +/* Select the passthrough mode (if the argument is non-zero). In the passthrough +   mode the output of the encoder is passed immediately into the decoder. */ +#define IVTV_IOC_PASSTHROUGH_MODE	_IOW ('V', BASE_VIDIOC_PRIVATE+1, int) + +/* Deprecated defines: applications should use the defines from videodev2.h */ +#define IVTV_SLICED_TYPE_TELETEXT_B     V4L2_MPEG_VBI_IVTV_TELETEXT_B +#define IVTV_SLICED_TYPE_CAPTION_525    V4L2_MPEG_VBI_IVTV_CAPTION_525 +#define IVTV_SLICED_TYPE_WSS_625        V4L2_MPEG_VBI_IVTV_WSS_625 +#define IVTV_SLICED_TYPE_VPS            V4L2_MPEG_VBI_IVTV_VPS + +#endif /* _LINUX_IVTV_H */ diff --git a/include/uapi/linux/ivtvfb.h b/include/uapi/linux/ivtvfb.h new file mode 100644 index 00000000000..e8b92f67f10 --- /dev/null +++ b/include/uapi/linux/ivtvfb.h @@ -0,0 +1,37 @@ +/* +    On Screen Display cx23415 Framebuffer driver + +    Copyright (C) 2006, 2007  Ian Armstrong <ian@iarmst.demon.co.uk> + +    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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + */ + +#ifndef __LINUX_IVTVFB_H__ +#define __LINUX_IVTVFB_H__ + +#include <linux/compiler.h> +#include <linux/types.h> + +/* Framebuffer external API */ + +struct ivtvfb_dma_frame { +	void __user *source; +	unsigned long dest_offset; +	int count; +}; + +#define IVTVFB_IOC_DMA_FRAME 	_IOW('V', BASE_VIDIOC_PRIVATE+0, struct ivtvfb_dma_frame) + +#endif diff --git a/include/uapi/linux/ixjuser.h b/include/uapi/linux/ixjuser.h new file mode 100644 index 00000000000..94ab5e942e5 --- /dev/null +++ b/include/uapi/linux/ixjuser.h @@ -0,0 +1,720 @@ +#ifndef __LINUX_IXJUSER_H +#define __LINUX_IXJUSER_H + +/****************************************************************************** + * + *    ixjuser.h + * + * Device Driver for Quicknet Technologies, Inc.'s Telephony cards + * including the Internet PhoneJACK, Internet PhoneJACK Lite, + * Internet PhoneJACK PCI, Internet LineJACK, Internet PhoneCARD and + * SmartCABLE + * + *    (c) Copyright 1999-2001  Quicknet Technologies, Inc. + * + *    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. + * + * Author:          Ed Okerson, <eokerson@quicknet.net> + *     + * Contributors:    Greg Herlein, <gherlein@quicknet.net> + *                  David W. Erhart, <derhart@quicknet.net> + *                  John Sellers, <jsellers@quicknet.net> + *                  Mike Preston, <mpreston@quicknet.net> + * + * More information about the hardware related to this driver can be found + * at our website:    http://www.quicknet.net + * + * Fixes: + * + * IN NO EVENT SHALL QUICKNET TECHNOLOGIES, INC. BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF QUICKNET + * TECHNOLOGIES, INC.HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * QUICKNET TECHNOLOGIES, INC. SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND QUICKNET TECHNOLOGIES, INC. HAS NO OBLIGATION  + * TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + *****************************************************************************/ + +#include <linux/telephony.h> + + +/****************************************************************************** +* +* IOCTL's used for the Quicknet Telephony Cards +* +* If you use the IXJCTL_TESTRAM command, the card must be power cycled to +* reset the SRAM values before further use. +* +******************************************************************************/ + +#define IXJCTL_DSP_RESET 		_IO  ('q', 0xC0) + +#define IXJCTL_RING                     PHONE_RING +#define IXJCTL_HOOKSTATE                PHONE_HOOKSTATE +#define IXJCTL_MAXRINGS			PHONE_MAXRINGS +#define IXJCTL_RING_CADENCE		PHONE_RING_CADENCE +#define IXJCTL_RING_START		PHONE_RING_START +#define IXJCTL_RING_STOP		PHONE_RING_STOP + +#define IXJCTL_CARDTYPE			_IOR ('q', 0xC1, int) +#define IXJCTL_SERIAL			_IOR ('q', 0xC2, int) +#define IXJCTL_DSP_TYPE                 _IOR ('q', 0xC3, int) +#define IXJCTL_DSP_VERSION              _IOR ('q', 0xC4, int) +#define IXJCTL_VERSION              	_IOR ('q', 0xDA, char *) +#define IXJCTL_DSP_IDLE			_IO  ('q', 0xC5) +#define IXJCTL_TESTRAM			_IO  ('q', 0xC6) + +/****************************************************************************** +* +* This group of IOCTLs deal with the record settings of the DSP +* +* The IXJCTL_REC_DEPTH command sets the internal buffer depth of the DSP. +* Setting a lower depth reduces latency, but increases the demand of the +* application to service the driver without frame loss.  The DSP has 480 +* bytes of physical buffer memory for the record channel so the true +* maximum limit is determined by how many frames will fit in the buffer. +* +* 1 uncompressed (480 byte) 16-bit linear frame. +* 2 uncompressed (240 byte) 8-bit A-law/mu-law frames. +* 15 TrueSpeech 8.5 frames. +* 20 TrueSpeech 6.3,5.3,4.8 or 4.1 frames. +* +* The default in the driver is currently set to 2 frames. +* +* The IXJCTL_REC_VOLUME and IXJCTL_PLAY_VOLUME commands both use a Q8 +* number as a parameter, 0x100 scales the signal by 1.0, 0x200 scales the +* signal by 2.0, 0x80 scales the signal by 0.5.  No protection is given +* against over-scaling, if the multiplication factor times the input +* signal exceeds 16 bits, overflow distortion will occur.  The default +* setting is 0x100 (1.0). +* +* The IXJCTL_REC_LEVEL returns the average signal level (not r.m.s.) on +* the most recently recorded frame as a 16 bit value. +******************************************************************************/ + +#define IXJCTL_REC_CODEC                PHONE_REC_CODEC +#define IXJCTL_REC_START                PHONE_REC_START +#define IXJCTL_REC_STOP                 PHONE_REC_STOP +#define IXJCTL_REC_DEPTH		PHONE_REC_DEPTH +#define IXJCTL_FRAME			PHONE_FRAME +#define IXJCTL_REC_VOLUME		PHONE_REC_VOLUME +#define IXJCTL_REC_LEVEL		PHONE_REC_LEVEL + +typedef enum { +	f300_640 = 4, f300_500, f1100, f350, f400, f480, f440, f620, f20_50, +	f133_200, f300, f300_420, f330, f300_425, f330_440, f340, f350_400, +	f350_440, f350_450, f360, f380_420, f392, f400_425, f400_440, f400_450, +	f420, f425, f425_450, f425_475, f435, f440_450, f440_480, f445, f450, +	f452, f475, f480_620, f494, f500, f520, f523, f525, f540_660, f587, +	f590, f600, f660, f700, f740, f750, f750_1450, f770, f800, f816, f850, +	f857_1645, f900, f900_1300, f935_1215, f941_1477, f942, f950, f950_1400, +	f975, f1000, f1020, f1050, f1100_1750, f1140, f1200, f1209, f1330, f1336, +	lf1366, f1380, f1400, f1477, f1600, f1633_1638, f1800, f1860 +} IXJ_FILTER_FREQ; + +typedef struct { +	unsigned int filter; +	IXJ_FILTER_FREQ freq; +	char enable; +} IXJ_FILTER; + +typedef struct { +	char enable; +	char en_filter; +	unsigned int filter; +	unsigned int on1; +	unsigned int off1; +	unsigned int on2; +	unsigned int off2; +	unsigned int on3; +	unsigned int off3; +} IXJ_FILTER_CADENCE; + +#define IXJCTL_SET_FILTER		_IOW ('q', 0xC7, IXJ_FILTER *) +#define IXJCTL_SET_FILTER_RAW		_IOW ('q', 0xDD, IXJ_FILTER_RAW *) +#define IXJCTL_GET_FILTER_HIST		_IOW ('q', 0xC8, int) +#define IXJCTL_FILTER_CADENCE		_IOW ('q', 0xD6, IXJ_FILTER_CADENCE *) +#define IXJCTL_PLAY_CID			_IO  ('q', 0xD7) +/****************************************************************************** +* +* This IOCTL allows you to reassign values in the tone index table.  The +* tone table has 32 entries (0 - 31), but the driver only allows entries +* 13 - 27 to be modified, entry 0 is reserved for silence and 1 - 12 are +* the standard DTMF digits and 28 - 31 are the DTMF tones for A, B, C & D. +* The positions used internally for Call Progress Tones are as follows: +*    Dial Tone   - 25 +*    Ring Back   - 26 +*    Busy Signal - 27 +* +* The freq values are calculated as: +* freq = cos(2 * PI * frequency / 8000) +* +* The most commonly needed values are already calculated and listed in the +* enum IXJ_TONE_FREQ.  Each tone index can have two frequencies with +* different gains, if you are only using a single frequency set the unused +* one to 0. +* +* The gain values range from 0 to 15 indicating +6dB to -24dB in 2dB +* increments. +* +******************************************************************************/ + +typedef enum { +	hz20 = 0x7ffa, +	hz50 = 0x7fe5, +	hz133 = 0x7f4c, +	hz200 = 0x7e6b, +	hz261 = 0x7d50,		/* .63 C1  */ +	hz277 = 0x7cfa,		/* .18 CS1 */ +	hz293 = 0x7c9f,		/* .66 D1  */ +	hz300 = 0x7c75, +	hz311 = 0x7c32,		/* .13 DS1 */ +	hz329 = 0x7bbf,		/* .63 E1  */ +	hz330 = 0x7bb8, +	hz340 = 0x7b75, +	hz349 = 0x7b37,		/* .23 F1  */ +	hz350 = 0x7b30, +	hz360 = 0x7ae9, +	hz369 = 0x7aa8,		/* .99 FS1 */ +	hz380 = 0x7a56, +	hz392 = 0x79fa,		/* .00 G1  */ +	hz400 = 0x79bb, +	hz415 = 0x7941,		/* .30 GS1 */ +	hz420 = 0x7918, +	hz425 = 0x78ee, +	hz435 = 0x7899, +	hz440 = 0x786d,		/* .00 A1  */ +	hz445 = 0x7842, +	hz450 = 0x7815, +	hz452 = 0x7803, +	hz466 = 0x7784,		/* .16 AS1 */ +	hz475 = 0x7731, +	hz480 = 0x7701, +	hz493 = 0x7685,		/* .88 B1  */ +	hz494 = 0x767b, +	hz500 = 0x7640, +	hz520 = 0x7578, +	hz523 = 0x7559,		/* .25 C2  */ +	hz525 = 0x7544, +	hz540 = 0x74a7, +	hz554 = 0x7411,		/* .37 CS2 */ +	hz587 = 0x72a1,		/* .33 D2  */ +	hz590 = 0x727f, +	hz600 = 0x720b, +	hz620 = 0x711e, +	hz622 = 0x7106,		/* .25 DS2 */ +	hz659 = 0x6f3b,		/* .26 E2  */ +	hz660 = 0x6f2e, +	hz698 = 0x6d3d,		/* .46 F2  */ +	hz700 = 0x6d22, +	hz739 = 0x6b09,		/* .99 FS2 */ +	hz740 = 0x6afa, +	hz750 = 0x6a6c, +	hz770 = 0x694b, +	hz783 = 0x688b,		/* .99 G2  */ +	hz800 = 0x678d, +	hz816 = 0x6698, +	hz830 = 0x65bf,		/* .61 GS2 */ +	hz850 = 0x6484, +	hz857 = 0x6414, +	hz880 = 0x629f,		/* .00 A2  */ +	hz900 = 0x6154, +	hz932 = 0x5f35,		/* .33 AS2 */ +	hz935 = 0x5f01, +	hz941 = 0x5e9a, +	hz942 = 0x5e88, +	hz950 = 0x5dfd, +	hz975 = 0x5c44, +	hz1000 = 0x5a81, +	hz1020 = 0x5912, +	hz1050 = 0x56e2, +	hz1100 = 0x5320, +	hz1140 = 0x5007, +	hz1200 = 0x4b3b, +	hz1209 = 0x4a80, +	hz1215 = 0x4a02, +	hz1250 = 0x471c, +	hz1300 = 0x42e0, +	hz1330 = 0x4049, +	hz1336 = 0x3fc4, +	hz1366 = 0x3d22, +	hz1380 = 0x3be4, +	hz1400 = 0x3a1b, +	hz1450 = 0x3596, +	hz1477 = 0x331c, +	hz1500 = 0x30fb, +	hz1600 = 0x278d, +	hz1633 = 0x2462, +	hz1638 = 0x23e7, +	hz1645 = 0x233a, +	hz1750 = 0x18f8, +	hz1800 = 0x1405, +	hz1860 = 0xe0b, +	hz2100 = 0xf5f6, +	hz2130 = 0xf2f5, +	hz2450 = 0xd3b3, +	hz2750 = 0xb8e4 +} IXJ_FREQ; + +typedef enum { +	C1 = hz261, +	CS1 = hz277, +	D1 = hz293, +	DS1 = hz311, +	E1 = hz329, +	F1 = hz349, +	FS1 = hz369, +	G1 = hz392, +	GS1 = hz415, +	A1 = hz440, +	AS1 = hz466, +	B1 = hz493, +	C2 = hz523, +	CS2 = hz554, +	D2 = hz587, +	DS2 = hz622, +	E2 = hz659, +	F2 = hz698, +	FS2 = hz739, +	G2 = hz783, +	GS2 = hz830, +	A2 = hz880, +	AS2 = hz932, +} IXJ_NOTE; + +typedef struct { +	int tone_index; +	int freq0; +	int gain0; +	int freq1; +	int gain1; +} IXJ_TONE; + +#define IXJCTL_INIT_TONE		_IOW ('q', 0xC9, IXJ_TONE *) + +/****************************************************************************** +* +* The IXJCTL_TONE_CADENCE ioctl defines tone sequences used for various +* Call Progress Tones (CPT).  This is accomplished by setting up an array of +* IXJ_CADENCE_ELEMENT structures that sequentially define the states of +* the tone sequence.  The tone_on_time and tone_off time are in +* 250 microsecond intervals.  A pointer to this array is passed to the +* driver as the ce element of an IXJ_CADENCE structure.  The elements_used +* must be set to the number of IXJ_CADENCE_ELEMENTS in the array.  The +* termination variable defines what to do at the end of a cadence, the +* options are to play the cadence once and stop, to repeat the last +* element of the cadence indefinitely, or to repeat the entire cadence +* indefinitely.  The ce variable is a pointer to the array of IXJ_TONE +* structures.  If the freq0 variable is non-zero, the tone table contents +* for the tone_index are updated to the frequencies and gains defined.  It +* should be noted that DTMF tones cannot be reassigned, so if DTMF tone +* table indexes are used in a cadence the frequency and gain variables will +* be ignored. +* +* If the array elements contain frequency parameters the driver will +* initialize the needed tone table elements and begin playing the tone, +* there is no preset limit on the number of elements in the cadence.  If +* there is more than one frequency used in the cadence, sequential elements +* of different frequencies MUST use different tone table indexes.  Only one +* cadence can be played at a time.  It is possible to build complex +* cadences with multiple frequencies using 2 tone table indexes by +* alternating between them. +* +******************************************************************************/ + +typedef struct { +	int index; +	int tone_on_time; +	int tone_off_time; +	int freq0; +	int gain0; +	int freq1; +	int gain1; +} IXJ_CADENCE_ELEMENT; + +typedef enum { +	PLAY_ONCE, +	REPEAT_LAST_ELEMENT, +	REPEAT_ALL +} IXJ_CADENCE_TERM; + +typedef struct { +	int elements_used; +	IXJ_CADENCE_TERM termination; +	IXJ_CADENCE_ELEMENT __user *ce; +} IXJ_CADENCE; + +#define IXJCTL_TONE_CADENCE		_IOW ('q', 0xCA, IXJ_CADENCE *) +/****************************************************************************** +* +* This group of IOCTLs deal with the playback settings of the DSP +* +******************************************************************************/ + +#define IXJCTL_PLAY_CODEC               PHONE_PLAY_CODEC +#define IXJCTL_PLAY_START               PHONE_PLAY_START +#define IXJCTL_PLAY_STOP                PHONE_PLAY_STOP +#define IXJCTL_PLAY_DEPTH		PHONE_PLAY_DEPTH +#define IXJCTL_PLAY_VOLUME		PHONE_PLAY_VOLUME +#define IXJCTL_PLAY_LEVEL		PHONE_PLAY_LEVEL + +/****************************************************************************** +* +* This group of IOCTLs deal with the Acoustic Echo Cancellation settings +* of the DSP +* +* Issuing the IXJCTL_AEC_START command with a value of AEC_OFF has the +* same effect as IXJCTL_AEC_STOP.  This is to simplify slider bar +* controls.  IXJCTL_AEC_GET_LEVEL returns the current setting of the AEC. +******************************************************************************/ +#define IXJCTL_AEC_START		_IOW ('q', 0xCB, int) +#define IXJCTL_AEC_STOP			_IO  ('q', 0xCC) +#define IXJCTL_AEC_GET_LEVEL		_IO  ('q', 0xCD) + +#define AEC_OFF   0 +#define AEC_LOW   1 +#define AEC_MED   2 +#define AEC_HIGH  3 +#define AEC_AUTO  4 +#define AEC_AGC   5 +/****************************************************************************** +* +* Call Progress Tones, DTMF, etc. +* IXJCTL_DTMF_OOB determines if DTMF signaling is sent as Out-Of-Band +* only.  If you pass a 1, DTMF is suppressed from the audio stream. +* Tone on and off times are in 250 microsecond intervals so +* ioctl(ixj1, IXJCTL_SET_TONE_ON_TIME, 360); +* will set the tone on time of board ixj1 to 360 * 250us = 90ms +* the default values of tone on and off times is 840 or 210ms +******************************************************************************/ + +#define IXJCTL_DTMF_READY		PHONE_DTMF_READY +#define IXJCTL_GET_DTMF                 PHONE_GET_DTMF +#define IXJCTL_GET_DTMF_ASCII           PHONE_GET_DTMF_ASCII +#define IXJCTL_DTMF_OOB			PHONE_DTMF_OOB +#define IXJCTL_EXCEPTION		PHONE_EXCEPTION +#define IXJCTL_PLAY_TONE		PHONE_PLAY_TONE +#define IXJCTL_SET_TONE_ON_TIME		PHONE_SET_TONE_ON_TIME +#define IXJCTL_SET_TONE_OFF_TIME	PHONE_SET_TONE_OFF_TIME +#define IXJCTL_GET_TONE_ON_TIME		PHONE_GET_TONE_ON_TIME +#define IXJCTL_GET_TONE_OFF_TIME	PHONE_GET_TONE_OFF_TIME +#define IXJCTL_GET_TONE_STATE		PHONE_GET_TONE_STATE +#define IXJCTL_BUSY			PHONE_BUSY +#define IXJCTL_RINGBACK			PHONE_RINGBACK +#define IXJCTL_DIALTONE			PHONE_DIALTONE +#define IXJCTL_CPT_STOP			PHONE_CPT_STOP + +/****************************************************************************** +* LineJACK specific IOCTLs +* +* The lsb 4 bits of the LED argument represent the state of each of the 4 +* LED's on the LineJACK +******************************************************************************/ + +#define IXJCTL_SET_LED			_IOW ('q', 0xCE, int) +#define IXJCTL_MIXER			_IOW ('q', 0xCF, int) + +/****************************************************************************** +*  +* The master volume controls use attenuation with 32 levels from 0 to -62dB +* with steps of 2dB each, the defines should be OR'ed together then sent +* as the parameter to the mixer command to change the mixer settings. +*  +******************************************************************************/ +#define MIXER_MASTER_L		0x0000 +#define MIXER_MASTER_R		0x0100 +#define ATT00DB			0x00 +#define ATT02DB			0x01 +#define ATT04DB			0x02 +#define ATT06DB			0x03 +#define ATT08DB			0x04 +#define ATT10DB			0x05 +#define ATT12DB			0x06 +#define ATT14DB			0x07 +#define ATT16DB			0x08 +#define ATT18DB			0x09 +#define ATT20DB			0x0A +#define ATT22DB			0x0B +#define ATT24DB			0x0C +#define ATT26DB			0x0D +#define ATT28DB			0x0E +#define ATT30DB			0x0F +#define ATT32DB			0x10 +#define ATT34DB			0x11 +#define ATT36DB			0x12 +#define ATT38DB			0x13 +#define ATT40DB			0x14 +#define ATT42DB			0x15 +#define ATT44DB			0x16 +#define ATT46DB			0x17 +#define ATT48DB			0x18 +#define ATT50DB			0x19 +#define ATT52DB			0x1A +#define ATT54DB			0x1B +#define ATT56DB			0x1C +#define ATT58DB			0x1D +#define ATT60DB			0x1E +#define ATT62DB			0x1F +#define MASTER_MUTE		0x80 + +/****************************************************************************** +*  +* The input volume controls use gain with 32 levels from +12dB to -50dB +* with steps of 2dB each, the defines should be OR'ed together then sent +* as the parameter to the mixer command to change the mixer settings. +*  +******************************************************************************/ +#define MIXER_PORT_CD_L		0x0600 +#define MIXER_PORT_CD_R		0x0700 +#define MIXER_PORT_LINE_IN_L	0x0800 +#define MIXER_PORT_LINE_IN_R	0x0900 +#define MIXER_PORT_POTS_REC	0x0C00 +#define MIXER_PORT_MIC		0x0E00 + +#define GAIN12DB		0x00 +#define GAIN10DB		0x01 +#define GAIN08DB		0x02 +#define GAIN06DB		0x03 +#define GAIN04DB		0x04 +#define GAIN02DB		0x05 +#define GAIN00DB		0x06 +#define GAIN_02DB		0x07 +#define GAIN_04DB		0x08 +#define GAIN_06DB		0x09 +#define GAIN_08DB		0x0A +#define GAIN_10DB		0x0B +#define GAIN_12DB		0x0C +#define GAIN_14DB		0x0D +#define GAIN_16DB		0x0E +#define GAIN_18DB		0x0F +#define GAIN_20DB		0x10 +#define GAIN_22DB		0x11 +#define GAIN_24DB		0x12 +#define GAIN_26DB		0x13 +#define GAIN_28DB		0x14 +#define GAIN_30DB		0x15 +#define GAIN_32DB		0x16 +#define GAIN_34DB		0x17 +#define GAIN_36DB		0x18 +#define GAIN_38DB		0x19 +#define GAIN_40DB		0x1A +#define GAIN_42DB		0x1B +#define GAIN_44DB		0x1C +#define GAIN_46DB		0x1D +#define GAIN_48DB		0x1E +#define GAIN_50DB		0x1F +#define INPUT_MUTE		0x80 + +/****************************************************************************** +*  +* The POTS volume control use attenuation with 8 levels from 0dB to -28dB +* with steps of 4dB each, the defines should be OR'ed together then sent +* as the parameter to the mixer command to change the mixer settings. +*  +******************************************************************************/ +#define MIXER_PORT_POTS_PLAY	0x0F00 + +#define POTS_ATT_00DB		0x00 +#define POTS_ATT_04DB		0x01 +#define POTS_ATT_08DB		0x02 +#define POTS_ATT_12DB		0x03 +#define POTS_ATT_16DB		0x04 +#define POTS_ATT_20DB		0x05 +#define POTS_ATT_24DB		0x06 +#define POTS_ATT_28DB		0x07 +#define POTS_MUTE		0x80 + +/****************************************************************************** +*  +* The DAA controls the interface to the PSTN port.  The driver loads the +* US coefficients by default, so if you live in a different country you +* need to load the set for your countries phone system. +*  +******************************************************************************/ +#define IXJCTL_DAA_COEFF_SET		_IOW ('q', 0xD0, int) + +#define DAA_US 		1	/*PITA 8kHz */ +#define DAA_UK 		2	/*ISAR34 8kHz */ +#define DAA_FRANCE 	3	/* */ +#define DAA_GERMANY	4 +#define DAA_AUSTRALIA	5 +#define DAA_JAPAN	6 + +/****************************************************************************** +*  +* Use IXJCTL_PORT to set or query the port the card is set to.  If the +* argument is set to PORT_QUERY, the return value of the ioctl will +* indicate which port is currently in use, otherwise it will change the +* port. +*  +******************************************************************************/ +#define IXJCTL_PORT			_IOW ('q', 0xD1, int) + +#define PORT_QUERY	0 +#define PORT_POTS	1 +#define PORT_PSTN	2 +#define PORT_SPEAKER	3 +#define PORT_HANDSET	4 + +#define IXJCTL_PSTN_SET_STATE		PHONE_PSTN_SET_STATE +#define IXJCTL_PSTN_GET_STATE		PHONE_PSTN_GET_STATE + +#define PSTN_ON_HOOK	0 +#define PSTN_RINGING	1 +#define PSTN_OFF_HOOK	2 +#define PSTN_PULSE_DIAL	3 + +/****************************************************************************** +*  +* The DAA Analog GAIN sets 2 parameters at one time, the receive gain (AGRR),  +* and the transmit gain (AGX).  OR together the components and pass them +* as the parameter to IXJCTL_DAA_AGAIN.  The default setting is both at 0dB. +*  +******************************************************************************/ +#define IXJCTL_DAA_AGAIN		_IOW ('q', 0xD2, int) + +#define AGRR00DB	0x00	/* Analog gain in receive direction 0dB */ +#define AGRR3_5DB	0x10	/* Analog gain in receive direction 3.5dB */ +#define AGRR06DB	0x30	/* Analog gain in receive direction 6dB */ + +#define AGX00DB		0x00	/* Analog gain in transmit direction 0dB */ +#define AGX_6DB		0x04	/* Analog gain in transmit direction -6dB */ +#define AGX3_5DB	0x08	/* Analog gain in transmit direction 3.5dB */ +#define AGX_2_5B	0x0C	/* Analog gain in transmit direction -2.5dB */ + +#define IXJCTL_PSTN_LINETEST		_IO  ('q', 0xD3) + +#define IXJCTL_CID			_IOR ('q', 0xD4, PHONE_CID *) +#define IXJCTL_VMWI			_IOR ('q', 0xD8, int) +#define IXJCTL_CIDCW			_IOW ('q', 0xD9, PHONE_CID *) +/****************************************************************************** +*  +* The wink duration is tunable with this ioctl.  The default wink duration   +* is 320ms.  You do not need to use this ioctl if you do not require a +* different wink duration. +*  +******************************************************************************/ +#define IXJCTL_WINK_DURATION		PHONE_WINK_DURATION + +/****************************************************************************** +*  +* This ioctl will connect the POTS port to the PSTN port on the LineJACK +* In order for this to work properly the port selection should be set to +* the PSTN port with IXJCTL_PORT prior to calling this ioctl.  This will +* enable conference calls between PSTN callers and network callers. +* Passing a 1 to this ioctl enables the POTS<->PSTN connection while +* passing a 0 turns it back off. +*  +******************************************************************************/ +#define IXJCTL_POTS_PSTN		_IOW ('q', 0xD5, int) + +/****************************************************************************** +* +* IOCTLs added by request. +* +* IXJCTL_HZ sets the value your Linux kernel uses for HZ as defined in +*           /usr/include/asm/param.h, this determines the fundamental +*           frequency of the clock ticks on your Linux system.  The kernel +*           must be rebuilt if you change this value, also all modules you +*           use (except this one) must be recompiled.  The default value +*           is 100, and you only need to use this IOCTL if you use some +*           other value. +* +* +* IXJCTL_RATE sets the number of times per second that the driver polls +*             the DSP.  This value cannot be larger than HZ.  By +*             increasing both of these values, you may be able to reduce +*             latency because the max hang time that can exist between the +*             driver and the DSP will be reduced. +* +******************************************************************************/ + +#define IXJCTL_HZ                       _IOW ('q', 0xE0, int) +#define IXJCTL_RATE                     _IOW ('q', 0xE1, int) +#define IXJCTL_FRAMES_READ		_IOR ('q', 0xE2, unsigned long) +#define IXJCTL_FRAMES_WRITTEN		_IOR ('q', 0xE3, unsigned long) +#define IXJCTL_READ_WAIT		_IOR ('q', 0xE4, unsigned long) +#define IXJCTL_WRITE_WAIT		_IOR ('q', 0xE5, unsigned long) +#define IXJCTL_DRYBUFFER_READ		_IOR ('q', 0xE6, unsigned long) +#define IXJCTL_DRYBUFFER_CLEAR		_IO  ('q', 0xE7) +#define IXJCTL_DTMF_PRESCALE		_IOW ('q', 0xE8, int) + +/****************************************************************************** +* +* This ioctl allows the user application to control what events the driver +* will send signals for, and what signals it will send for which event. +* By default, if signaling is enabled, all events will send SIGIO when +* they occur.  To disable signals for an event set the signal to 0. +* +******************************************************************************/ +typedef enum { +	SIG_DTMF_READY, +	SIG_HOOKSTATE, +	SIG_FLASH, +	SIG_PSTN_RING, +	SIG_CALLER_ID, +	SIG_PSTN_WINK, +	SIG_F0, SIG_F1, SIG_F2, SIG_F3, +	SIG_FC0, SIG_FC1, SIG_FC2, SIG_FC3, +	SIG_READ_READY = 33, +	SIG_WRITE_READY = 34 +} IXJ_SIGEVENT; + +typedef struct { +	unsigned int event; +	int signal; +} IXJ_SIGDEF; + +#define IXJCTL_SIGCTL			_IOW ('q', 0xE9, IXJ_SIGDEF *) + +/****************************************************************************** +* +* These ioctls allow the user application to change the gain in the  +* Smart Cable of the Internet Phone Card.  Sending -1 as a value will cause +* return value to be the current setting.  Valid values to set are 0x00 - 0x1F +* +* 11111 = +12 dB +* 10111 =   0 dB +* 00000 = -34.5 dB +* +* IXJCTL_SC_RXG sets the Receive gain +* IXJCTL_SC_TXG sets the Transmit gain +* +******************************************************************************/ +#define IXJCTL_SC_RXG			_IOW ('q', 0xEA, int) +#define IXJCTL_SC_TXG			_IOW ('q', 0xEB, int) + +/****************************************************************************** +* +* The intercom IOCTL's short the output from one card to the input of the +* other and vice versa (actually done in the DSP read function).  It is only +* necessary to execute the IOCTL on one card, but it is necessary to have +* both devices open to be able to detect hook switch changes.  The record +* codec and rate of each card must match the playback codec and rate of +* the other card for this to work properly. +* +******************************************************************************/ + +#define IXJCTL_INTERCOM_START 		_IOW ('q', 0xFD, int) +#define IXJCTL_INTERCOM_STOP  		_IOW ('q', 0xFE, int) + +/****************************************************************************** + * + * new structure for accessing raw filter information + * + ******************************************************************************/ + +typedef struct { +	unsigned int filter; +	char enable; +	unsigned int coeff[19]; +} IXJ_FILTER_RAW; + +#endif diff --git a/include/uapi/linux/jffs2.h b/include/uapi/linux/jffs2.h new file mode 100644 index 00000000000..a18b719f49d --- /dev/null +++ b/include/uapi/linux/jffs2.h @@ -0,0 +1,223 @@ +/* + * JFFS2 -- Journalling Flash File System, Version 2. + * + * Copyright © 2001-2007 Red Hat, Inc. + * Copyright © 2004-2010 David Woodhouse <dwmw2@infradead.org> + * + * Created by David Woodhouse <dwmw2@infradead.org> + * + * For licensing information, see the file 'LICENCE' in the + * jffs2 directory. + */ + +#ifndef __LINUX_JFFS2_H__ +#define __LINUX_JFFS2_H__ + +#include <linux/types.h> +#include <linux/magic.h> + +/* You must include something which defines the C99 uintXX_t types.  +   We don't do it from here because this file is used in too many +   different environments. */ + +/* Values we may expect to find in the 'magic' field */ +#define JFFS2_OLD_MAGIC_BITMASK 0x1984 +#define JFFS2_MAGIC_BITMASK 0x1985 +#define KSAMTIB_CIGAM_2SFFJ 0x8519 /* For detecting wrong-endian fs */ +#define JFFS2_EMPTY_BITMASK 0xffff +#define JFFS2_DIRTY_BITMASK 0x0000 + +/* Summary node MAGIC marker */ +#define JFFS2_SUM_MAGIC	0x02851885 + +/* We only allow a single char for length, and 0xFF is empty flash so +   we don't want it confused with a real length. Hence max 254. +*/ +#define JFFS2_MAX_NAME_LEN 254 + +/* How small can we sensibly write nodes? */ +#define JFFS2_MIN_DATA_LEN 128 + +#define JFFS2_COMPR_NONE	0x00 +#define JFFS2_COMPR_ZERO	0x01 +#define JFFS2_COMPR_RTIME	0x02 +#define JFFS2_COMPR_RUBINMIPS	0x03 +#define JFFS2_COMPR_COPY	0x04 +#define JFFS2_COMPR_DYNRUBIN	0x05 +#define JFFS2_COMPR_ZLIB	0x06 +#define JFFS2_COMPR_LZO		0x07 +/* Compatibility flags. */ +#define JFFS2_COMPAT_MASK 0xc000      /* What do to if an unknown nodetype is found */ +#define JFFS2_NODE_ACCURATE 0x2000 +/* INCOMPAT: Fail to mount the filesystem */ +#define JFFS2_FEATURE_INCOMPAT 0xc000 +/* ROCOMPAT: Mount read-only */ +#define JFFS2_FEATURE_ROCOMPAT 0x8000 +/* RWCOMPAT_COPY: Mount read/write, and copy the node when it's GC'd */ +#define JFFS2_FEATURE_RWCOMPAT_COPY 0x4000 +/* RWCOMPAT_DELETE: Mount read/write, and delete the node when it's GC'd */ +#define JFFS2_FEATURE_RWCOMPAT_DELETE 0x0000 + +#define JFFS2_NODETYPE_DIRENT (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 1) +#define JFFS2_NODETYPE_INODE (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 2) +#define JFFS2_NODETYPE_CLEANMARKER (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3) +#define JFFS2_NODETYPE_PADDING (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 4) + +#define JFFS2_NODETYPE_SUMMARY (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 6) + +#define JFFS2_NODETYPE_XATTR (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 8) +#define JFFS2_NODETYPE_XREF (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 9) + +/* XATTR Related */ +#define JFFS2_XPREFIX_USER		1	/* for "user." */ +#define JFFS2_XPREFIX_SECURITY		2	/* for "security." */ +#define JFFS2_XPREFIX_ACL_ACCESS	3	/* for "system.posix_acl_access" */ +#define JFFS2_XPREFIX_ACL_DEFAULT	4	/* for "system.posix_acl_default" */ +#define JFFS2_XPREFIX_TRUSTED		5	/* for "trusted.*" */ + +#define JFFS2_ACL_VERSION		0x0001 + +// Maybe later... +//#define JFFS2_NODETYPE_CHECKPOINT (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3) +//#define JFFS2_NODETYPE_OPTIONS (JFFS2_FEATURE_RWCOMPAT_COPY | JFFS2_NODE_ACCURATE | 4) + + +#define JFFS2_INO_FLAG_PREREAD	  1	/* Do read_inode() for this one at +					   mount time, don't wait for it to +					   happen later */ +#define JFFS2_INO_FLAG_USERCOMPR  2	/* User has requested a specific +					   compression type */ + + +/* These can go once we've made sure we've caught all uses without +   byteswapping */ + +typedef struct { +	__u32 v32; +} __attribute__((packed)) jint32_t; + +typedef struct { +	__u32 m; +} __attribute__((packed)) jmode_t; + +typedef struct { +	__u16 v16; +} __attribute__((packed)) jint16_t; + +struct jffs2_unknown_node +{ +	/* All start like this */ +	jint16_t magic; +	jint16_t nodetype; +	jint32_t totlen; /* So we can skip over nodes we don't grok */ +	jint32_t hdr_crc; +}; + +struct jffs2_raw_dirent +{ +	jint16_t magic; +	jint16_t nodetype;	/* == JFFS2_NODETYPE_DIRENT */ +	jint32_t totlen; +	jint32_t hdr_crc; +	jint32_t pino; +	jint32_t version; +	jint32_t ino; /* == zero for unlink */ +	jint32_t mctime; +	__u8 nsize; +	__u8 type; +	__u8 unused[2]; +	jint32_t node_crc; +	jint32_t name_crc; +	__u8 name[0]; +}; + +/* The JFFS2 raw inode structure: Used for storage on physical media.  */ +/* The uid, gid, atime, mtime and ctime members could be longer, but +   are left like this for space efficiency. If and when people decide +   they really need them extended, it's simple enough to add support for +   a new type of raw node. +*/ +struct jffs2_raw_inode +{ +	jint16_t magic;      /* A constant magic number.  */ +	jint16_t nodetype;   /* == JFFS2_NODETYPE_INODE */ +	jint32_t totlen;     /* Total length of this node (inc data, etc.) */ +	jint32_t hdr_crc; +	jint32_t ino;        /* Inode number.  */ +	jint32_t version;    /* Version number.  */ +	jmode_t mode;       /* The file's type or mode.  */ +	jint16_t uid;        /* The file's owner.  */ +	jint16_t gid;        /* The file's group.  */ +	jint32_t isize;      /* Total resultant size of this inode (used for truncations)  */ +	jint32_t atime;      /* Last access time.  */ +	jint32_t mtime;      /* Last modification time.  */ +	jint32_t ctime;      /* Change time.  */ +	jint32_t offset;     /* Where to begin to write.  */ +	jint32_t csize;      /* (Compressed) data size */ +	jint32_t dsize;	     /* Size of the node's data. (after decompression) */ +	__u8 compr;       /* Compression algorithm used */ +	__u8 usercompr;   /* Compression algorithm requested by the user */ +	jint16_t flags;	     /* See JFFS2_INO_FLAG_* */ +	jint32_t data_crc;   /* CRC for the (compressed) data.  */ +	jint32_t node_crc;   /* CRC for the raw inode (excluding data)  */ +	__u8 data[0]; +}; + +struct jffs2_raw_xattr { +	jint16_t magic; +	jint16_t nodetype;	/* = JFFS2_NODETYPE_XATTR */ +	jint32_t totlen; +	jint32_t hdr_crc; +	jint32_t xid;		/* XATTR identifier number */ +	jint32_t version; +	__u8 xprefix; +	__u8 name_len; +	jint16_t value_len; +	jint32_t data_crc; +	jint32_t node_crc; +	__u8 data[0]; +} __attribute__((packed)); + +struct jffs2_raw_xref +{ +	jint16_t magic; +	jint16_t nodetype;	/* = JFFS2_NODETYPE_XREF */ +	jint32_t totlen; +	jint32_t hdr_crc; +	jint32_t ino;		/* inode number */ +	jint32_t xid;		/* XATTR identifier number */ +	jint32_t xseqno;	/* xref sequential number */ +	jint32_t node_crc; +} __attribute__((packed)); + +struct jffs2_raw_summary +{ +	jint16_t magic; +	jint16_t nodetype; 	/* = JFFS2_NODETYPE_SUMMARY */ +	jint32_t totlen; +	jint32_t hdr_crc; +	jint32_t sum_num;	/* number of sum entries*/ +	jint32_t cln_mkr;	/* clean marker size, 0 = no cleanmarker */ +	jint32_t padded;	/* sum of the size of padding nodes */ +	jint32_t sum_crc;	/* summary information crc */ +	jint32_t node_crc; 	/* node crc */ +	jint32_t sum[0]; 	/* inode summary info */ +}; + +union jffs2_node_union +{ +	struct jffs2_raw_inode i; +	struct jffs2_raw_dirent d; +	struct jffs2_raw_xattr x; +	struct jffs2_raw_xref r; +	struct jffs2_raw_summary s; +	struct jffs2_unknown_node u; +}; + +/* Data payload for device nodes. */ +union jffs2_device_node { +	jint16_t old_id; +	jint32_t new_id; +}; + +#endif /* __LINUX_JFFS2_H__ */ diff --git a/include/uapi/linux/joystick.h b/include/uapi/linux/joystick.h new file mode 100644 index 00000000000..b856fd11c70 --- /dev/null +++ b/include/uapi/linux/joystick.h @@ -0,0 +1,136 @@ +/* + *  Copyright (C) 1996-2000 Vojtech Pavlik + * + *  Sponsored by SuSE + */ +/* + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + *  + * Should you need to contact me, the author, you can do so either by + * e-mail - mail your message to <vojtech@suse.cz>, or by paper mail: + * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic + */ +#ifndef _UAPI_LINUX_JOYSTICK_H +#define _UAPI_LINUX_JOYSTICK_H + + + +#include <linux/types.h> +#include <linux/input.h> + +/* + * Version + */ + +#define JS_VERSION		0x020100 + +/* + * Types and constants for reading from /dev/js + */ + +#define JS_EVENT_BUTTON		0x01	/* button pressed/released */ +#define JS_EVENT_AXIS		0x02	/* joystick moved */ +#define JS_EVENT_INIT		0x80	/* initial state of device */ + +struct js_event { +	__u32 time;	/* event timestamp in milliseconds */ +	__s16 value;	/* value */ +	__u8 type;	/* event type */ +	__u8 number;	/* axis/button number */ +}; + +/* + * IOCTL commands for joystick driver + */ + +#define JSIOCGVERSION		_IOR('j', 0x01, __u32)				/* get driver version */ + +#define JSIOCGAXES		_IOR('j', 0x11, __u8)				/* get number of axes */ +#define JSIOCGBUTTONS		_IOR('j', 0x12, __u8)				/* get number of buttons */ +#define JSIOCGNAME(len)		_IOC(_IOC_READ, 'j', 0x13, len)			/* get identifier string */ + +#define JSIOCSCORR		_IOW('j', 0x21, struct js_corr)			/* set correction values */ +#define JSIOCGCORR		_IOR('j', 0x22, struct js_corr)			/* get correction values */ + +#define JSIOCSAXMAP		_IOW('j', 0x31, __u8[ABS_CNT])			/* set axis mapping */ +#define JSIOCGAXMAP		_IOR('j', 0x32, __u8[ABS_CNT])			/* get axis mapping */ +#define JSIOCSBTNMAP		_IOW('j', 0x33, __u16[KEY_MAX - BTN_MISC + 1])	/* set button mapping */ +#define JSIOCGBTNMAP		_IOR('j', 0x34, __u16[KEY_MAX - BTN_MISC + 1])	/* get button mapping */ + +/* + * Types and constants for get/set correction + */ + +#define JS_CORR_NONE		0x00	/* returns raw values */ +#define JS_CORR_BROKEN		0x01	/* broken line */ + +struct js_corr { +	__s32 coef[8]; +	__s16 prec; +	__u16 type; +}; + +/* + * v0.x compatibility definitions + */ + +#define JS_RETURN		sizeof(struct JS_DATA_TYPE) +#define JS_TRUE			1 +#define JS_FALSE		0 +#define JS_X_0			0x01 +#define JS_Y_0			0x02 +#define JS_X_1			0x04 +#define JS_Y_1			0x08 +#define JS_MAX			2 + +#define JS_DEF_TIMEOUT		0x1300 +#define JS_DEF_CORR		0 +#define JS_DEF_TIMELIMIT	10L + +#define JS_SET_CAL		1 +#define JS_GET_CAL		2 +#define JS_SET_TIMEOUT		3 +#define JS_GET_TIMEOUT		4 +#define JS_SET_TIMELIMIT	5 +#define JS_GET_TIMELIMIT	6 +#define JS_GET_ALL		7 +#define JS_SET_ALL		8 + +struct JS_DATA_TYPE { +	__s32 buttons; +	__s32 x; +	__s32 y; +}; + +struct JS_DATA_SAVE_TYPE_32 { +	__s32 JS_TIMEOUT; +	__s32 BUSY; +	__s32 JS_EXPIRETIME; +	__s32 JS_TIMELIMIT; +	struct JS_DATA_TYPE JS_SAVE; +	struct JS_DATA_TYPE JS_CORR; +}; + +struct JS_DATA_SAVE_TYPE_64 { +	__s32 JS_TIMEOUT; +	__s32 BUSY; +	__s64 JS_EXPIRETIME; +	__s64 JS_TIMELIMIT; +	struct JS_DATA_TYPE JS_SAVE; +	struct JS_DATA_TYPE JS_CORR; +}; + + +#endif /* _UAPI_LINUX_JOYSTICK_H */ diff --git a/include/uapi/linux/kd.h b/include/uapi/linux/kd.h new file mode 100644 index 00000000000..87b7cc439d7 --- /dev/null +++ b/include/uapi/linux/kd.h @@ -0,0 +1,183 @@ +#ifndef _UAPI_LINUX_KD_H +#define _UAPI_LINUX_KD_H +#include <linux/types.h> +#include <linux/compiler.h> + +/* 0x4B is 'K', to avoid collision with termios and vt */ + +#define GIO_FONT	0x4B60	/* gets font in expanded form */ +#define PIO_FONT	0x4B61	/* use font in expanded form */ + +#define GIO_FONTX	0x4B6B	/* get font using struct consolefontdesc */ +#define PIO_FONTX	0x4B6C	/* set font using struct consolefontdesc */ +struct consolefontdesc { +	unsigned short charcount;	/* characters in font (256 or 512) */ +	unsigned short charheight;	/* scan lines per character (1-32) */ +	char __user *chardata;		/* font data in expanded form */ +}; + +#define PIO_FONTRESET   0x4B6D	/* reset to default font */ + +#define GIO_CMAP	0x4B70	/* gets colour palette on VGA+ */ +#define PIO_CMAP	0x4B71	/* sets colour palette on VGA+ */ + +#define KIOCSOUND	0x4B2F	/* start sound generation (0 for off) */ +#define KDMKTONE	0x4B30	/* generate tone */ + +#define KDGETLED	0x4B31	/* return current led state */ +#define KDSETLED	0x4B32	/* set led state [lights, not flags] */ +#define 	LED_SCR		0x01	/* scroll lock led */ +#define 	LED_NUM		0x02	/* num lock led */ +#define 	LED_CAP		0x04	/* caps lock led */ + +#define KDGKBTYPE	0x4B33	/* get keyboard type */ +#define 	KB_84		0x01 +#define 	KB_101		0x02 	/* this is what we always answer */ +#define 	KB_OTHER	0x03 + +#define KDADDIO		0x4B34	/* add i/o port as valid */ +#define KDDELIO		0x4B35	/* del i/o port as valid */ +#define KDENABIO	0x4B36	/* enable i/o to video board */ +#define KDDISABIO	0x4B37	/* disable i/o to video board */ + +#define KDSETMODE	0x4B3A	/* set text/graphics mode */ +#define		KD_TEXT		0x00 +#define		KD_GRAPHICS	0x01 +#define		KD_TEXT0	0x02	/* obsolete */ +#define		KD_TEXT1	0x03	/* obsolete */ +#define KDGETMODE	0x4B3B	/* get current mode */ + +#define KDMAPDISP	0x4B3C	/* map display into address space */ +#define KDUNMAPDISP	0x4B3D	/* unmap display from address space */ + +typedef char scrnmap_t; +#define		E_TABSZ		256 +#define GIO_SCRNMAP	0x4B40	/* get screen mapping from kernel */ +#define PIO_SCRNMAP	0x4B41	/* put screen mapping table in kernel */ +#define GIO_UNISCRNMAP  0x4B69	/* get full Unicode screen mapping */ +#define PIO_UNISCRNMAP  0x4B6A  /* set full Unicode screen mapping */ + +#define GIO_UNIMAP	0x4B66	/* get unicode-to-font mapping from kernel */ +struct unipair { +	unsigned short unicode; +	unsigned short fontpos; +}; +struct unimapdesc { +	unsigned short entry_ct; +	struct unipair __user *entries; +}; +#define PIO_UNIMAP	0x4B67	/* put unicode-to-font mapping in kernel */ +#define PIO_UNIMAPCLR	0x4B68	/* clear table, possibly advise hash algorithm */ +struct unimapinit { +	unsigned short advised_hashsize;  /* 0 if no opinion */ +	unsigned short advised_hashstep;  /* 0 if no opinion */ +	unsigned short advised_hashlevel; /* 0 if no opinion */ +}; + +#define UNI_DIRECT_BASE 0xF000	/* start of Direct Font Region */ +#define UNI_DIRECT_MASK 0x01FF	/* Direct Font Region bitmask */ + +#define		K_RAW		0x00 +#define		K_XLATE		0x01 +#define		K_MEDIUMRAW	0x02 +#define		K_UNICODE	0x03 +#define		K_OFF		0x04 +#define KDGKBMODE	0x4B44	/* gets current keyboard mode */ +#define KDSKBMODE	0x4B45	/* sets current keyboard mode */ + +#define		K_METABIT	0x03 +#define		K_ESCPREFIX	0x04 +#define KDGKBMETA	0x4B62	/* gets meta key handling mode */ +#define KDSKBMETA	0x4B63	/* sets meta key handling mode */ + +#define		K_SCROLLLOCK	0x01 +#define		K_NUMLOCK	0x02 +#define		K_CAPSLOCK	0x04 +#define	KDGKBLED	0x4B64	/* get led flags (not lights) */ +#define	KDSKBLED	0x4B65	/* set led flags (not lights) */ + +struct kbentry { +	unsigned char kb_table; +	unsigned char kb_index; +	unsigned short kb_value; +}; +#define		K_NORMTAB	0x00 +#define		K_SHIFTTAB	0x01 +#define		K_ALTTAB	0x02 +#define		K_ALTSHIFTTAB	0x03 + +#define KDGKBENT	0x4B46	/* gets one entry in translation table */ +#define KDSKBENT	0x4B47	/* sets one entry in translation table */ + +struct kbsentry { +	unsigned char kb_func; +	unsigned char kb_string[512]; +}; +#define KDGKBSENT	0x4B48	/* gets one function key string entry */ +#define KDSKBSENT	0x4B49	/* sets one function key string entry */ + +struct kbdiacr { +        unsigned char diacr, base, result; +}; +struct kbdiacrs { +        unsigned int kb_cnt;    /* number of entries in following array */ +	struct kbdiacr kbdiacr[256];    /* MAX_DIACR from keyboard.h */ +}; +#define KDGKBDIACR      0x4B4A  /* read kernel accent table */ +#define KDSKBDIACR      0x4B4B  /* write kernel accent table */ + +struct kbdiacruc { +	unsigned int diacr, base, result; +}; +struct kbdiacrsuc { +        unsigned int kb_cnt;    /* number of entries in following array */ +	struct kbdiacruc kbdiacruc[256];    /* MAX_DIACR from keyboard.h */ +}; +#define KDGKBDIACRUC    0x4BFA  /* read kernel accent table - UCS */ +#define KDSKBDIACRUC    0x4BFB  /* write kernel accent table - UCS */ + +struct kbkeycode { +	unsigned int scancode, keycode; +}; +#define KDGETKEYCODE	0x4B4C	/* read kernel keycode table entry */ +#define KDSETKEYCODE	0x4B4D	/* write kernel keycode table entry */ + +#define KDSIGACCEPT	0x4B4E	/* accept kbd generated signals */ + +struct kbd_repeat { +	int delay;	/* in msec; <= 0: don't change */ +	int period;	/* in msec; <= 0: don't change */ +			/* earlier this field was misnamed "rate" */ +}; + +#define KDKBDREP        0x4B52  /* set keyboard delay/repeat rate; +				 * actually used values are returned */ + +#define KDFONTOP	0x4B72	/* font operations */ + +struct console_font_op { +	unsigned int op;	/* operation code KD_FONT_OP_* */ +	unsigned int flags;	/* KD_FONT_FLAG_* */ +	unsigned int width, height;	/* font size */ +	unsigned int charcount; +	unsigned char __user *data;	/* font data with height fixed to 32 */ +}; + +struct console_font { +	unsigned int width, height;	/* font size */ +	unsigned int charcount; +	unsigned char *data;	/* font data with height fixed to 32 */ +}; + +#define KD_FONT_OP_SET		0	/* Set font */ +#define KD_FONT_OP_GET		1	/* Get font */ +#define KD_FONT_OP_SET_DEFAULT	2	/* Set font to default, data points to name / NULL */ +#define KD_FONT_OP_COPY		3	/* Copy from another console */ + +#define KD_FONT_FLAG_DONT_RECALC 	1	/* Don't recalculate hw charcell size [compat] */ + +/* note: 0x4B00-0x4B4E all have had a value at some time; +   don't reuse for the time being */ +/* note: 0x4B60-0x4B6D, 0x4B70-0x4B72 used above */ + +#endif /* _UAPI_LINUX_KD_H */ diff --git a/include/uapi/linux/kdev_t.h b/include/uapi/linux/kdev_t.h new file mode 100644 index 00000000000..0d881fa7eb9 --- /dev/null +++ b/include/uapi/linux/kdev_t.h @@ -0,0 +1,13 @@ +#ifndef _UAPI_LINUX_KDEV_T_H +#define _UAPI_LINUX_KDEV_T_H +#ifndef __KERNEL__ + +/* +Some programs want their definitions of MAJOR and MINOR and MKDEV +from the kernel sources. These must be the externally visible ones. +*/ +#define MAJOR(dev)	((dev)>>8) +#define MINOR(dev)	((dev) & 0xff) +#define MKDEV(ma,mi)	((ma)<<8 | (mi)) +#endif /* __KERNEL__ */ +#endif /* _UAPI_LINUX_KDEV_T_H */ diff --git a/include/uapi/linux/kernel-page-flags.h b/include/uapi/linux/kernel-page-flags.h new file mode 100644 index 00000000000..5116a0e4817 --- /dev/null +++ b/include/uapi/linux/kernel-page-flags.h @@ -0,0 +1,36 @@ +#ifndef _UAPILINUX_KERNEL_PAGE_FLAGS_H +#define _UAPILINUX_KERNEL_PAGE_FLAGS_H + +/* + * Stable page flag bits exported to user space + */ + +#define KPF_LOCKED		0 +#define KPF_ERROR		1 +#define KPF_REFERENCED		2 +#define KPF_UPTODATE		3 +#define KPF_DIRTY		4 +#define KPF_LRU			5 +#define KPF_ACTIVE		6 +#define KPF_SLAB		7 +#define KPF_WRITEBACK		8 +#define KPF_RECLAIM		9 +#define KPF_BUDDY		10 + +/* 11-20: new additions in 2.6.31 */ +#define KPF_MMAP		11 +#define KPF_ANON		12 +#define KPF_SWAPCACHE		13 +#define KPF_SWAPBACKED		14 +#define KPF_COMPOUND_HEAD	15 +#define KPF_COMPOUND_TAIL	16 +#define KPF_HUGE		17 +#define KPF_UNEVICTABLE		18 +#define KPF_HWPOISON		19 +#define KPF_NOPAGE		20 + +#define KPF_KSM			21 +#define KPF_THP			22 + + +#endif /* _UAPILINUX_KERNEL_PAGE_FLAGS_H */ diff --git a/include/uapi/linux/kernel.h b/include/uapi/linux/kernel.h new file mode 100644 index 00000000000..321e399457f --- /dev/null +++ b/include/uapi/linux/kernel.h @@ -0,0 +1,13 @@ +#ifndef _UAPI_LINUX_KERNEL_H +#define _UAPI_LINUX_KERNEL_H + +#include <linux/sysinfo.h> + +/* + * 'kernel.h' contains some often-used function prototypes etc + */ +#define __ALIGN_KERNEL(x, a)		__ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1) +#define __ALIGN_KERNEL_MASK(x, mask)	(((x) + (mask)) & ~(mask)) + + +#endif /* _UAPI_LINUX_KERNEL_H */ diff --git a/include/uapi/linux/kernelcapi.h b/include/uapi/linux/kernelcapi.h new file mode 100644 index 00000000000..89bf40d36d2 --- /dev/null +++ b/include/uapi/linux/kernelcapi.h @@ -0,0 +1,47 @@ +/* + * $Id: kernelcapi.h,v 1.8.6.2 2001/02/07 11:31:31 kai Exp $ + *  + * Kernel CAPI 2.0 Interface for Linux + *  + * (c) Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de) + *  + */ + +#ifndef _UAPI__KERNELCAPI_H__ +#define _UAPI__KERNELCAPI_H__ + +#define CAPI_MAXAPPL	240	/* maximum number of applications  */ +#define CAPI_MAXCONTR	32	/* maximum number of controller    */ +#define CAPI_MAXDATAWINDOW	8 + + +typedef struct kcapi_flagdef { +	int contr; +	int flag; +} kcapi_flagdef; + +typedef struct kcapi_carddef { +	char		driver[32]; +	unsigned int	port; +	unsigned	irq; +	unsigned int	membase; +	int		cardnr; +} kcapi_carddef; + +/* new ioctls >= 10 */ +#define KCAPI_CMD_TRACE		10 +#define KCAPI_CMD_ADDCARD	11	/* OBSOLETE */ + +/*  + * flag > 2 => trace also data + * flag & 1 => show trace + */ +#define KCAPI_TRACE_OFF			0 +#define KCAPI_TRACE_SHORT_NO_DATA	1 +#define KCAPI_TRACE_FULL_NO_DATA	2 +#define KCAPI_TRACE_SHORT		3 +#define KCAPI_TRACE_FULL		4 + + + +#endif /* _UAPI__KERNELCAPI_H__ */ diff --git a/include/uapi/linux/kexec.h b/include/uapi/linux/kexec.h new file mode 100644 index 00000000000..104838f65bc --- /dev/null +++ b/include/uapi/linux/kexec.h @@ -0,0 +1,54 @@ +#ifndef _UAPILINUX_KEXEC_H +#define _UAPILINUX_KEXEC_H + +/* kexec system call -  It loads the new kernel to boot into. + * kexec does not sync, or unmount filesystems so if you need + * that to happen you need to do that yourself. + */ + +#include <linux/types.h> + +/* kexec flags for different usage scenarios */ +#define KEXEC_ON_CRASH		0x00000001 +#define KEXEC_PRESERVE_CONTEXT	0x00000002 +#define KEXEC_ARCH_MASK		0xffff0000 + +/* These values match the ELF architecture values. + * Unless there is a good reason that should continue to be the case. + */ +#define KEXEC_ARCH_DEFAULT ( 0 << 16) +#define KEXEC_ARCH_386     ( 3 << 16) +#define KEXEC_ARCH_X86_64  (62 << 16) +#define KEXEC_ARCH_PPC     (20 << 16) +#define KEXEC_ARCH_PPC64   (21 << 16) +#define KEXEC_ARCH_IA_64   (50 << 16) +#define KEXEC_ARCH_ARM     (40 << 16) +#define KEXEC_ARCH_S390    (22 << 16) +#define KEXEC_ARCH_SH      (42 << 16) +#define KEXEC_ARCH_MIPS_LE (10 << 16) +#define KEXEC_ARCH_MIPS    ( 8 << 16) + +/* The artificial cap on the number of segments passed to kexec_load. */ +#define KEXEC_SEGMENT_MAX 16 + +#ifndef __KERNEL__ +/* + * This structure is used to hold the arguments that are used when + * loading  kernel binaries. + */ +struct kexec_segment { +	const void *buf; +	size_t bufsz; +	const void *mem; +	size_t memsz; +}; + +/* Load a new kernel image as described by the kexec_segment array + * consisting of passed number of segments at the entry-point address. + * The flags allow different useage types. + */ +extern int kexec_load(void *, size_t, struct kexec_segment *, +		unsigned long int); +#endif /* __KERNEL__ */ + +#endif /* _UAPILINUX_KEXEC_H */ diff --git a/include/uapi/linux/keyboard.h b/include/uapi/linux/keyboard.h new file mode 100644 index 00000000000..5a6849721ab --- /dev/null +++ b/include/uapi/linux/keyboard.h @@ -0,0 +1,443 @@ +#ifndef _UAPI__LINUX_KEYBOARD_H +#define _UAPI__LINUX_KEYBOARD_H + +#include <linux/wait.h> + +#define KG_SHIFT	0 +#define KG_CTRL		2 +#define KG_ALT		3 +#define KG_ALTGR	1 +#define KG_SHIFTL	4 +#define KG_KANASHIFT	4 +#define KG_SHIFTR	5 +#define KG_CTRLL	6 +#define KG_CTRLR	7 +#define KG_CAPSSHIFT	8 + +#define NR_SHIFT	9 + +#define NR_KEYS		256 +#define MAX_NR_KEYMAPS	256 +/* This means 128Kb if all keymaps are allocated. Only the superuser +	may increase the number of keymaps beyond MAX_NR_OF_USER_KEYMAPS. */ +#define MAX_NR_OF_USER_KEYMAPS 256 	/* should be at least 7 */ + + +#define MAX_NR_FUNC	256	/* max nr of strings assigned to keys */ + +#define KT_LATIN	0	/* we depend on this being zero */ +#define KT_LETTER	11	/* symbol that can be acted upon by CapsLock */ +#define KT_FN		1 +#define KT_SPEC		2 +#define KT_PAD		3 +#define KT_DEAD		4 +#define KT_CONS		5 +#define KT_CUR		6 +#define KT_SHIFT	7 +#define KT_META		8 +#define KT_ASCII	9 +#define KT_LOCK		10 +#define KT_SLOCK	12 +#define KT_DEAD2	13 +#define KT_BRL		14 + +#define K(t,v)		(((t)<<8)|(v)) +#define KTYP(x)		((x) >> 8) +#define KVAL(x)		((x) & 0xff) + +#define K_F1		K(KT_FN,0) +#define K_F2		K(KT_FN,1) +#define K_F3		K(KT_FN,2) +#define K_F4		K(KT_FN,3) +#define K_F5		K(KT_FN,4) +#define K_F6		K(KT_FN,5) +#define K_F7		K(KT_FN,6) +#define K_F8		K(KT_FN,7) +#define K_F9		K(KT_FN,8) +#define K_F10		K(KT_FN,9) +#define K_F11		K(KT_FN,10) +#define K_F12		K(KT_FN,11) +#define K_F13		K(KT_FN,12) +#define K_F14		K(KT_FN,13) +#define K_F15		K(KT_FN,14) +#define K_F16		K(KT_FN,15) +#define K_F17		K(KT_FN,16) +#define K_F18		K(KT_FN,17) +#define K_F19		K(KT_FN,18) +#define K_F20		K(KT_FN,19) +#define K_FIND		K(KT_FN,20) +#define K_INSERT	K(KT_FN,21) +#define K_REMOVE	K(KT_FN,22) +#define K_SELECT	K(KT_FN,23) +#define K_PGUP		K(KT_FN,24) /* PGUP is a synonym for PRIOR */ +#define K_PGDN		K(KT_FN,25) /* PGDN is a synonym for NEXT */ +#define K_MACRO	 	K(KT_FN,26) +#define K_HELP		K(KT_FN,27) +#define K_DO		K(KT_FN,28) +#define K_PAUSE	 	K(KT_FN,29) +#define K_F21		K(KT_FN,30) +#define K_F22		K(KT_FN,31) +#define K_F23		K(KT_FN,32) +#define K_F24		K(KT_FN,33) +#define K_F25		K(KT_FN,34) +#define K_F26		K(KT_FN,35) +#define K_F27		K(KT_FN,36) +#define K_F28		K(KT_FN,37) +#define K_F29		K(KT_FN,38) +#define K_F30		K(KT_FN,39) +#define K_F31		K(KT_FN,40) +#define K_F32		K(KT_FN,41) +#define K_F33		K(KT_FN,42) +#define K_F34		K(KT_FN,43) +#define K_F35		K(KT_FN,44) +#define K_F36		K(KT_FN,45) +#define K_F37		K(KT_FN,46) +#define K_F38		K(KT_FN,47) +#define K_F39		K(KT_FN,48) +#define K_F40		K(KT_FN,49) +#define K_F41		K(KT_FN,50) +#define K_F42		K(KT_FN,51) +#define K_F43		K(KT_FN,52) +#define K_F44		K(KT_FN,53) +#define K_F45		K(KT_FN,54) +#define K_F46		K(KT_FN,55) +#define K_F47		K(KT_FN,56) +#define K_F48		K(KT_FN,57) +#define K_F49		K(KT_FN,58) +#define K_F50		K(KT_FN,59) +#define K_F51		K(KT_FN,60) +#define K_F52		K(KT_FN,61) +#define K_F53		K(KT_FN,62) +#define K_F54		K(KT_FN,63) +#define K_F55		K(KT_FN,64) +#define K_F56		K(KT_FN,65) +#define K_F57		K(KT_FN,66) +#define K_F58		K(KT_FN,67) +#define K_F59		K(KT_FN,68) +#define K_F60		K(KT_FN,69) +#define K_F61		K(KT_FN,70) +#define K_F62		K(KT_FN,71) +#define K_F63		K(KT_FN,72) +#define K_F64		K(KT_FN,73) +#define K_F65		K(KT_FN,74) +#define K_F66		K(KT_FN,75) +#define K_F67		K(KT_FN,76) +#define K_F68		K(KT_FN,77) +#define K_F69		K(KT_FN,78) +#define K_F70		K(KT_FN,79) +#define K_F71		K(KT_FN,80) +#define K_F72		K(KT_FN,81) +#define K_F73		K(KT_FN,82) +#define K_F74		K(KT_FN,83) +#define K_F75		K(KT_FN,84) +#define K_F76		K(KT_FN,85) +#define K_F77		K(KT_FN,86) +#define K_F78		K(KT_FN,87) +#define K_F79		K(KT_FN,88) +#define K_F80		K(KT_FN,89) +#define K_F81		K(KT_FN,90) +#define K_F82		K(KT_FN,91) +#define K_F83		K(KT_FN,92) +#define K_F84		K(KT_FN,93) +#define K_F85		K(KT_FN,94) +#define K_F86		K(KT_FN,95) +#define K_F87		K(KT_FN,96) +#define K_F88		K(KT_FN,97) +#define K_F89		K(KT_FN,98) +#define K_F90		K(KT_FN,99) +#define K_F91		K(KT_FN,100) +#define K_F92		K(KT_FN,101) +#define K_F93		K(KT_FN,102) +#define K_F94		K(KT_FN,103) +#define K_F95		K(KT_FN,104) +#define K_F96		K(KT_FN,105) +#define K_F97		K(KT_FN,106) +#define K_F98		K(KT_FN,107) +#define K_F99		K(KT_FN,108) +#define K_F100		K(KT_FN,109) +#define K_F101		K(KT_FN,110) +#define K_F102		K(KT_FN,111) +#define K_F103		K(KT_FN,112) +#define K_F104		K(KT_FN,113) +#define K_F105		K(KT_FN,114) +#define K_F106		K(KT_FN,115) +#define K_F107		K(KT_FN,116) +#define K_F108		K(KT_FN,117) +#define K_F109		K(KT_FN,118) +#define K_F110		K(KT_FN,119) +#define K_F111		K(KT_FN,120) +#define K_F112		K(KT_FN,121) +#define K_F113		K(KT_FN,122) +#define K_F114		K(KT_FN,123) +#define K_F115		K(KT_FN,124) +#define K_F116		K(KT_FN,125) +#define K_F117		K(KT_FN,126) +#define K_F118		K(KT_FN,127) +#define K_F119		K(KT_FN,128) +#define K_F120		K(KT_FN,129) +#define K_F121		K(KT_FN,130) +#define K_F122		K(KT_FN,131) +#define K_F123		K(KT_FN,132) +#define K_F124		K(KT_FN,133) +#define K_F125		K(KT_FN,134) +#define K_F126		K(KT_FN,135) +#define K_F127		K(KT_FN,136) +#define K_F128		K(KT_FN,137) +#define K_F129		K(KT_FN,138) +#define K_F130		K(KT_FN,139) +#define K_F131		K(KT_FN,140) +#define K_F132		K(KT_FN,141) +#define K_F133		K(KT_FN,142) +#define K_F134		K(KT_FN,143) +#define K_F135		K(KT_FN,144) +#define K_F136		K(KT_FN,145) +#define K_F137		K(KT_FN,146) +#define K_F138		K(KT_FN,147) +#define K_F139		K(KT_FN,148) +#define K_F140		K(KT_FN,149) +#define K_F141		K(KT_FN,150) +#define K_F142		K(KT_FN,151) +#define K_F143		K(KT_FN,152) +#define K_F144		K(KT_FN,153) +#define K_F145		K(KT_FN,154) +#define K_F146		K(KT_FN,155) +#define K_F147		K(KT_FN,156) +#define K_F148		K(KT_FN,157) +#define K_F149		K(KT_FN,158) +#define K_F150		K(KT_FN,159) +#define K_F151		K(KT_FN,160) +#define K_F152		K(KT_FN,161) +#define K_F153		K(KT_FN,162) +#define K_F154		K(KT_FN,163) +#define K_F155		K(KT_FN,164) +#define K_F156		K(KT_FN,165) +#define K_F157		K(KT_FN,166) +#define K_F158		K(KT_FN,167) +#define K_F159		K(KT_FN,168) +#define K_F160		K(KT_FN,169) +#define K_F161		K(KT_FN,170) +#define K_F162		K(KT_FN,171) +#define K_F163		K(KT_FN,172) +#define K_F164		K(KT_FN,173) +#define K_F165		K(KT_FN,174) +#define K_F166		K(KT_FN,175) +#define K_F167		K(KT_FN,176) +#define K_F168		K(KT_FN,177) +#define K_F169		K(KT_FN,178) +#define K_F170		K(KT_FN,179) +#define K_F171		K(KT_FN,180) +#define K_F172		K(KT_FN,181) +#define K_F173		K(KT_FN,182) +#define K_F174		K(KT_FN,183) +#define K_F175		K(KT_FN,184) +#define K_F176		K(KT_FN,185) +#define K_F177		K(KT_FN,186) +#define K_F178		K(KT_FN,187) +#define K_F179		K(KT_FN,188) +#define K_F180		K(KT_FN,189) +#define K_F181		K(KT_FN,190) +#define K_F182		K(KT_FN,191) +#define K_F183		K(KT_FN,192) +#define K_F184		K(KT_FN,193) +#define K_F185		K(KT_FN,194) +#define K_F186		K(KT_FN,195) +#define K_F187		K(KT_FN,196) +#define K_F188		K(KT_FN,197) +#define K_F189		K(KT_FN,198) +#define K_F190		K(KT_FN,199) +#define K_F191		K(KT_FN,200) +#define K_F192		K(KT_FN,201) +#define K_F193		K(KT_FN,202) +#define K_F194		K(KT_FN,203) +#define K_F195		K(KT_FN,204) +#define K_F196		K(KT_FN,205) +#define K_F197		K(KT_FN,206) +#define K_F198		K(KT_FN,207) +#define K_F199		K(KT_FN,208) +#define K_F200		K(KT_FN,209) +#define K_F201		K(KT_FN,210) +#define K_F202		K(KT_FN,211) +#define K_F203		K(KT_FN,212) +#define K_F204		K(KT_FN,213) +#define K_F205		K(KT_FN,214) +#define K_F206		K(KT_FN,215) +#define K_F207		K(KT_FN,216) +#define K_F208		K(KT_FN,217) +#define K_F209		K(KT_FN,218) +#define K_F210		K(KT_FN,219) +#define K_F211		K(KT_FN,220) +#define K_F212		K(KT_FN,221) +#define K_F213		K(KT_FN,222) +#define K_F214		K(KT_FN,223) +#define K_F215		K(KT_FN,224) +#define K_F216		K(KT_FN,225) +#define K_F217		K(KT_FN,226) +#define K_F218		K(KT_FN,227) +#define K_F219		K(KT_FN,228) +#define K_F220		K(KT_FN,229) +#define K_F221		K(KT_FN,230) +#define K_F222		K(KT_FN,231) +#define K_F223		K(KT_FN,232) +#define K_F224		K(KT_FN,233) +#define K_F225		K(KT_FN,234) +#define K_F226		K(KT_FN,235) +#define K_F227		K(KT_FN,236) +#define K_F228		K(KT_FN,237) +#define K_F229		K(KT_FN,238) +#define K_F230		K(KT_FN,239) +#define K_F231		K(KT_FN,240) +#define K_F232		K(KT_FN,241) +#define K_F233		K(KT_FN,242) +#define K_F234		K(KT_FN,243) +#define K_F235		K(KT_FN,244) +#define K_F236		K(KT_FN,245) +#define K_F237		K(KT_FN,246) +#define K_F238		K(KT_FN,247) +#define K_F239		K(KT_FN,248) +#define K_F240		K(KT_FN,249) +#define K_F241		K(KT_FN,250) +#define K_F242		K(KT_FN,251) +#define K_F243		K(KT_FN,252) +#define K_F244		K(KT_FN,253) +#define K_F245		K(KT_FN,254) +#define K_UNDO		K(KT_FN,255) + + +#define K_HOLE		K(KT_SPEC,0) +#define K_ENTER		K(KT_SPEC,1) +#define K_SH_REGS	K(KT_SPEC,2) +#define K_SH_MEM	K(KT_SPEC,3) +#define K_SH_STAT	K(KT_SPEC,4) +#define K_BREAK		K(KT_SPEC,5) +#define K_CONS		K(KT_SPEC,6) +#define K_CAPS		K(KT_SPEC,7) +#define K_NUM		K(KT_SPEC,8) +#define K_HOLD		K(KT_SPEC,9) +#define K_SCROLLFORW	K(KT_SPEC,10) +#define K_SCROLLBACK	K(KT_SPEC,11) +#define K_BOOT		K(KT_SPEC,12) +#define K_CAPSON	K(KT_SPEC,13) +#define K_COMPOSE	K(KT_SPEC,14) +#define K_SAK		K(KT_SPEC,15) +#define K_DECRCONSOLE	K(KT_SPEC,16) +#define K_INCRCONSOLE	K(KT_SPEC,17) +#define K_SPAWNCONSOLE	K(KT_SPEC,18) +#define K_BARENUMLOCK	K(KT_SPEC,19) + +#define K_ALLOCATED	K(KT_SPEC,126) /* dynamically allocated keymap */ +#define K_NOSUCHMAP	K(KT_SPEC,127) /* returned by KDGKBENT */ + +#define K_P0		K(KT_PAD,0) +#define K_P1		K(KT_PAD,1) +#define K_P2		K(KT_PAD,2) +#define K_P3		K(KT_PAD,3) +#define K_P4		K(KT_PAD,4) +#define K_P5		K(KT_PAD,5) +#define K_P6		K(KT_PAD,6) +#define K_P7		K(KT_PAD,7) +#define K_P8		K(KT_PAD,8) +#define K_P9		K(KT_PAD,9) +#define K_PPLUS		K(KT_PAD,10)	/* key-pad plus */ +#define K_PMINUS	K(KT_PAD,11)	/* key-pad minus */ +#define K_PSTAR		K(KT_PAD,12)	/* key-pad asterisk (star) */ +#define K_PSLASH	K(KT_PAD,13)	/* key-pad slash */ +#define K_PENTER	K(KT_PAD,14)	/* key-pad enter */ +#define K_PCOMMA	K(KT_PAD,15)	/* key-pad comma: kludge... */ +#define K_PDOT		K(KT_PAD,16)	/* key-pad dot (period): kludge... */ +#define K_PPLUSMINUS	K(KT_PAD,17)	/* key-pad plus/minus */ +#define K_PPARENL	K(KT_PAD,18)	/* key-pad left parenthesis */ +#define K_PPARENR	K(KT_PAD,19)	/* key-pad right parenthesis */ + +#define NR_PAD		20 + +#define K_DGRAVE	K(KT_DEAD,0) +#define K_DACUTE	K(KT_DEAD,1) +#define K_DCIRCM	K(KT_DEAD,2) +#define K_DTILDE	K(KT_DEAD,3) +#define K_DDIERE	K(KT_DEAD,4) +#define K_DCEDIL	K(KT_DEAD,5) + +#define NR_DEAD		6 + +#define K_DOWN		K(KT_CUR,0) +#define K_LEFT		K(KT_CUR,1) +#define K_RIGHT		K(KT_CUR,2) +#define K_UP		K(KT_CUR,3) + +#define K_SHIFT		K(KT_SHIFT,KG_SHIFT) +#define K_CTRL		K(KT_SHIFT,KG_CTRL) +#define K_ALT		K(KT_SHIFT,KG_ALT) +#define K_ALTGR		K(KT_SHIFT,KG_ALTGR) +#define K_SHIFTL	K(KT_SHIFT,KG_SHIFTL) +#define K_SHIFTR	K(KT_SHIFT,KG_SHIFTR) +#define K_CTRLL	 	K(KT_SHIFT,KG_CTRLL) +#define K_CTRLR	 	K(KT_SHIFT,KG_CTRLR) +#define K_CAPSSHIFT	K(KT_SHIFT,KG_CAPSSHIFT) + +#define K_ASC0		K(KT_ASCII,0) +#define K_ASC1		K(KT_ASCII,1) +#define K_ASC2		K(KT_ASCII,2) +#define K_ASC3		K(KT_ASCII,3) +#define K_ASC4		K(KT_ASCII,4) +#define K_ASC5		K(KT_ASCII,5) +#define K_ASC6		K(KT_ASCII,6) +#define K_ASC7		K(KT_ASCII,7) +#define K_ASC8		K(KT_ASCII,8) +#define K_ASC9		K(KT_ASCII,9) +#define K_HEX0		K(KT_ASCII,10) +#define K_HEX1		K(KT_ASCII,11) +#define K_HEX2		K(KT_ASCII,12) +#define K_HEX3		K(KT_ASCII,13) +#define K_HEX4		K(KT_ASCII,14) +#define K_HEX5		K(KT_ASCII,15) +#define K_HEX6		K(KT_ASCII,16) +#define K_HEX7		K(KT_ASCII,17) +#define K_HEX8		K(KT_ASCII,18) +#define K_HEX9		K(KT_ASCII,19) +#define K_HEXa		K(KT_ASCII,20) +#define K_HEXb		K(KT_ASCII,21) +#define K_HEXc		K(KT_ASCII,22) +#define K_HEXd		K(KT_ASCII,23) +#define K_HEXe		K(KT_ASCII,24) +#define K_HEXf		K(KT_ASCII,25) + +#define NR_ASCII	26 + +#define K_SHIFTLOCK	K(KT_LOCK,KG_SHIFT) +#define K_CTRLLOCK	K(KT_LOCK,KG_CTRL) +#define K_ALTLOCK	K(KT_LOCK,KG_ALT) +#define K_ALTGRLOCK	K(KT_LOCK,KG_ALTGR) +#define K_SHIFTLLOCK	K(KT_LOCK,KG_SHIFTL) +#define K_SHIFTRLOCK	K(KT_LOCK,KG_SHIFTR) +#define K_CTRLLLOCK	K(KT_LOCK,KG_CTRLL) +#define K_CTRLRLOCK	K(KT_LOCK,KG_CTRLR) +#define K_CAPSSHIFTLOCK	K(KT_LOCK,KG_CAPSSHIFT) + +#define K_SHIFT_SLOCK	K(KT_SLOCK,KG_SHIFT) +#define K_CTRL_SLOCK	K(KT_SLOCK,KG_CTRL) +#define K_ALT_SLOCK	K(KT_SLOCK,KG_ALT) +#define K_ALTGR_SLOCK	K(KT_SLOCK,KG_ALTGR) +#define K_SHIFTL_SLOCK	K(KT_SLOCK,KG_SHIFTL) +#define K_SHIFTR_SLOCK	K(KT_SLOCK,KG_SHIFTR) +#define K_CTRLL_SLOCK	K(KT_SLOCK,KG_CTRLL) +#define K_CTRLR_SLOCK	K(KT_SLOCK,KG_CTRLR) +#define K_CAPSSHIFT_SLOCK	K(KT_SLOCK,KG_CAPSSHIFT) + +#define NR_LOCK		9 + +#define K_BRL_BLANK     K(KT_BRL, 0) +#define K_BRL_DOT1      K(KT_BRL, 1) +#define K_BRL_DOT2      K(KT_BRL, 2) +#define K_BRL_DOT3      K(KT_BRL, 3) +#define K_BRL_DOT4      K(KT_BRL, 4) +#define K_BRL_DOT5      K(KT_BRL, 5) +#define K_BRL_DOT6      K(KT_BRL, 6) +#define K_BRL_DOT7      K(KT_BRL, 7) +#define K_BRL_DOT8      K(KT_BRL, 8) +#define K_BRL_DOT9      K(KT_BRL, 9) +#define K_BRL_DOT10     K(KT_BRL, 10) + +#define NR_BRL		11 + +#define MAX_DIACR	256 +#endif /* _UAPI__LINUX_KEYBOARD_H */ diff --git a/include/uapi/linux/keyctl.h b/include/uapi/linux/keyctl.h new file mode 100644 index 00000000000..c9b7f4faf97 --- /dev/null +++ b/include/uapi/linux/keyctl.h @@ -0,0 +1,60 @@ +/* keyctl.h: keyctl command IDs + * + * Copyright (C) 2004, 2008 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * 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. + */ + +#ifndef _LINUX_KEYCTL_H +#define _LINUX_KEYCTL_H + +/* special process keyring shortcut IDs */ +#define KEY_SPEC_THREAD_KEYRING		-1	/* - key ID for thread-specific keyring */ +#define KEY_SPEC_PROCESS_KEYRING	-2	/* - key ID for process-specific keyring */ +#define KEY_SPEC_SESSION_KEYRING	-3	/* - key ID for session-specific keyring */ +#define KEY_SPEC_USER_KEYRING		-4	/* - key ID for UID-specific keyring */ +#define KEY_SPEC_USER_SESSION_KEYRING	-5	/* - key ID for UID-session keyring */ +#define KEY_SPEC_GROUP_KEYRING		-6	/* - key ID for GID-specific keyring */ +#define KEY_SPEC_REQKEY_AUTH_KEY	-7	/* - key ID for assumed request_key auth key */ +#define KEY_SPEC_REQUESTOR_KEYRING	-8	/* - key ID for request_key() dest keyring */ + +/* request-key default keyrings */ +#define KEY_REQKEY_DEFL_NO_CHANGE		-1 +#define KEY_REQKEY_DEFL_DEFAULT			0 +#define KEY_REQKEY_DEFL_THREAD_KEYRING		1 +#define KEY_REQKEY_DEFL_PROCESS_KEYRING		2 +#define KEY_REQKEY_DEFL_SESSION_KEYRING		3 +#define KEY_REQKEY_DEFL_USER_KEYRING		4 +#define KEY_REQKEY_DEFL_USER_SESSION_KEYRING	5 +#define KEY_REQKEY_DEFL_GROUP_KEYRING		6 +#define KEY_REQKEY_DEFL_REQUESTOR_KEYRING	7 + +/* keyctl commands */ +#define KEYCTL_GET_KEYRING_ID		0	/* ask for a keyring's ID */ +#define KEYCTL_JOIN_SESSION_KEYRING	1	/* join or start named session keyring */ +#define KEYCTL_UPDATE			2	/* update a key */ +#define KEYCTL_REVOKE			3	/* revoke a key */ +#define KEYCTL_CHOWN			4	/* set ownership of a key */ +#define KEYCTL_SETPERM			5	/* set perms on a key */ +#define KEYCTL_DESCRIBE			6	/* describe a key */ +#define KEYCTL_CLEAR			7	/* clear contents of a keyring */ +#define KEYCTL_LINK			8	/* link a key into a keyring */ +#define KEYCTL_UNLINK			9	/* unlink a key from a keyring */ +#define KEYCTL_SEARCH			10	/* search for a key in a keyring */ +#define KEYCTL_READ			11	/* read a key or keyring's contents */ +#define KEYCTL_INSTANTIATE		12	/* instantiate a partially constructed key */ +#define KEYCTL_NEGATE			13	/* negate a partially constructed key */ +#define KEYCTL_SET_REQKEY_KEYRING	14	/* set default request-key keyring */ +#define KEYCTL_SET_TIMEOUT		15	/* set key timeout */ +#define KEYCTL_ASSUME_AUTHORITY		16	/* assume request_key() authorisation */ +#define KEYCTL_GET_SECURITY		17	/* get key security label */ +#define KEYCTL_SESSION_TO_PARENT	18	/* apply session keyring to parent process */ +#define KEYCTL_REJECT			19	/* reject a partially constructed key */ +#define KEYCTL_INSTANTIATE_IOV		20	/* instantiate a partially constructed key */ +#define KEYCTL_INVALIDATE		21	/* invalidate a key */ + +#endif /*  _LINUX_KEYCTL_H */ diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h new file mode 100644 index 00000000000..0a6d6ba44c8 --- /dev/null +++ b/include/uapi/linux/kvm.h @@ -0,0 +1,975 @@ +#ifndef __LINUX_KVM_H +#define __LINUX_KVM_H + +/* + * Userspace interface for /dev/kvm - kernel based virtual machine + * + * Note: you must update KVM_API_VERSION if you change this interface. + */ + +#include <linux/types.h> +#include <linux/compiler.h> +#include <linux/ioctl.h> +#include <asm/kvm.h> + +#define KVM_API_VERSION 12 + +/* *** Deprecated interfaces *** */ + +#define KVM_TRC_SHIFT           16 + +#define KVM_TRC_ENTRYEXIT       (1 << KVM_TRC_SHIFT) +#define KVM_TRC_HANDLER         (1 << (KVM_TRC_SHIFT + 1)) + +#define KVM_TRC_VMENTRY         (KVM_TRC_ENTRYEXIT + 0x01) +#define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02) +#define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01) + +#define KVM_TRC_HEAD_SIZE       12 +#define KVM_TRC_CYCLE_SIZE      8 +#define KVM_TRC_EXTRA_MAX       7 + +#define KVM_TRC_INJ_VIRQ         (KVM_TRC_HANDLER + 0x02) +#define KVM_TRC_REDELIVER_EVT    (KVM_TRC_HANDLER + 0x03) +#define KVM_TRC_PEND_INTR        (KVM_TRC_HANDLER + 0x04) +#define KVM_TRC_IO_READ          (KVM_TRC_HANDLER + 0x05) +#define KVM_TRC_IO_WRITE         (KVM_TRC_HANDLER + 0x06) +#define KVM_TRC_CR_READ          (KVM_TRC_HANDLER + 0x07) +#define KVM_TRC_CR_WRITE         (KVM_TRC_HANDLER + 0x08) +#define KVM_TRC_DR_READ          (KVM_TRC_HANDLER + 0x09) +#define KVM_TRC_DR_WRITE         (KVM_TRC_HANDLER + 0x0A) +#define KVM_TRC_MSR_READ         (KVM_TRC_HANDLER + 0x0B) +#define KVM_TRC_MSR_WRITE        (KVM_TRC_HANDLER + 0x0C) +#define KVM_TRC_CPUID            (KVM_TRC_HANDLER + 0x0D) +#define KVM_TRC_INTR             (KVM_TRC_HANDLER + 0x0E) +#define KVM_TRC_NMI              (KVM_TRC_HANDLER + 0x0F) +#define KVM_TRC_VMMCALL          (KVM_TRC_HANDLER + 0x10) +#define KVM_TRC_HLT              (KVM_TRC_HANDLER + 0x11) +#define KVM_TRC_CLTS             (KVM_TRC_HANDLER + 0x12) +#define KVM_TRC_LMSW             (KVM_TRC_HANDLER + 0x13) +#define KVM_TRC_APIC_ACCESS      (KVM_TRC_HANDLER + 0x14) +#define KVM_TRC_TDP_FAULT        (KVM_TRC_HANDLER + 0x15) +#define KVM_TRC_GTLB_WRITE       (KVM_TRC_HANDLER + 0x16) +#define KVM_TRC_STLB_WRITE       (KVM_TRC_HANDLER + 0x17) +#define KVM_TRC_STLB_INVAL       (KVM_TRC_HANDLER + 0x18) +#define KVM_TRC_PPC_INSTR        (KVM_TRC_HANDLER + 0x19) + +struct kvm_user_trace_setup { +	__u32 buf_size; +	__u32 buf_nr; +}; + +#define __KVM_DEPRECATED_MAIN_W_0x06 \ +	_IOW(KVMIO, 0x06, struct kvm_user_trace_setup) +#define __KVM_DEPRECATED_MAIN_0x07 _IO(KVMIO, 0x07) +#define __KVM_DEPRECATED_MAIN_0x08 _IO(KVMIO, 0x08) + +#define __KVM_DEPRECATED_VM_R_0x70 _IOR(KVMIO, 0x70, struct kvm_assigned_irq) + +struct kvm_breakpoint { +	__u32 enabled; +	__u32 padding; +	__u64 address; +}; + +struct kvm_debug_guest { +	__u32 enabled; +	__u32 pad; +	struct kvm_breakpoint breakpoints[4]; +	__u32 singlestep; +}; + +#define __KVM_DEPRECATED_VCPU_W_0x87 _IOW(KVMIO, 0x87, struct kvm_debug_guest) + +/* *** End of deprecated interfaces *** */ + + +/* for KVM_CREATE_MEMORY_REGION */ +struct kvm_memory_region { +	__u32 slot; +	__u32 flags; +	__u64 guest_phys_addr; +	__u64 memory_size; /* bytes */ +}; + +/* for KVM_SET_USER_MEMORY_REGION */ +struct kvm_userspace_memory_region { +	__u32 slot; +	__u32 flags; +	__u64 guest_phys_addr; +	__u64 memory_size; /* bytes */ +	__u64 userspace_addr; /* start of the userspace allocated memory */ +}; + +/* + * The bit 0 ~ bit 15 of kvm_memory_region::flags are visible for userspace, + * other bits are reserved for kvm internal use which are defined in + * include/linux/kvm_host.h. + */ +#define KVM_MEM_LOG_DIRTY_PAGES	(1UL << 0) +#define KVM_MEM_READONLY	(1UL << 1) + +/* for KVM_IRQ_LINE */ +struct kvm_irq_level { +	/* +	 * ACPI gsi notion of irq. +	 * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47.. +	 * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23.. +	 */ +	union { +		__u32 irq; +		__s32 status; +	}; +	__u32 level; +}; + + +struct kvm_irqchip { +	__u32 chip_id; +	__u32 pad; +        union { +		char dummy[512];  /* reserving space */ +#ifdef __KVM_HAVE_PIT +		struct kvm_pic_state pic; +#endif +#ifdef __KVM_HAVE_IOAPIC +		struct kvm_ioapic_state ioapic; +#endif +	} chip; +}; + +/* for KVM_CREATE_PIT2 */ +struct kvm_pit_config { +	__u32 flags; +	__u32 pad[15]; +}; + +#define KVM_PIT_SPEAKER_DUMMY     1 + +#define KVM_EXIT_UNKNOWN          0 +#define KVM_EXIT_EXCEPTION        1 +#define KVM_EXIT_IO               2 +#define KVM_EXIT_HYPERCALL        3 +#define KVM_EXIT_DEBUG            4 +#define KVM_EXIT_HLT              5 +#define KVM_EXIT_MMIO             6 +#define KVM_EXIT_IRQ_WINDOW_OPEN  7 +#define KVM_EXIT_SHUTDOWN         8 +#define KVM_EXIT_FAIL_ENTRY       9 +#define KVM_EXIT_INTR             10 +#define KVM_EXIT_SET_TPR          11 +#define KVM_EXIT_TPR_ACCESS       12 +#define KVM_EXIT_S390_SIEIC       13 +#define KVM_EXIT_S390_RESET       14 +#define KVM_EXIT_DCR              15 +#define KVM_EXIT_NMI              16 +#define KVM_EXIT_INTERNAL_ERROR   17 +#define KVM_EXIT_OSI              18 +#define KVM_EXIT_PAPR_HCALL	  19 +#define KVM_EXIT_S390_UCONTROL	  20 + +/* For KVM_EXIT_INTERNAL_ERROR */ +#define KVM_INTERNAL_ERROR_EMULATION 1 +#define KVM_INTERNAL_ERROR_SIMUL_EX 2 + +/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ +struct kvm_run { +	/* in */ +	__u8 request_interrupt_window; +	__u8 padding1[7]; + +	/* out */ +	__u32 exit_reason; +	__u8 ready_for_interrupt_injection; +	__u8 if_flag; +	__u8 padding2[2]; + +	/* in (pre_kvm_run), out (post_kvm_run) */ +	__u64 cr8; +	__u64 apic_base; + +#ifdef __KVM_S390 +	/* the processor status word for s390 */ +	__u64 psw_mask; /* psw upper half */ +	__u64 psw_addr; /* psw lower half */ +#endif +	union { +		/* KVM_EXIT_UNKNOWN */ +		struct { +			__u64 hardware_exit_reason; +		} hw; +		/* KVM_EXIT_FAIL_ENTRY */ +		struct { +			__u64 hardware_entry_failure_reason; +		} fail_entry; +		/* KVM_EXIT_EXCEPTION */ +		struct { +			__u32 exception; +			__u32 error_code; +		} ex; +		/* KVM_EXIT_IO */ +		struct { +#define KVM_EXIT_IO_IN  0 +#define KVM_EXIT_IO_OUT 1 +			__u8 direction; +			__u8 size; /* bytes */ +			__u16 port; +			__u32 count; +			__u64 data_offset; /* relative to kvm_run start */ +		} io; +		struct { +			struct kvm_debug_exit_arch arch; +		} debug; +		/* KVM_EXIT_MMIO */ +		struct { +			__u64 phys_addr; +			__u8  data[8]; +			__u32 len; +			__u8  is_write; +		} mmio; +		/* KVM_EXIT_HYPERCALL */ +		struct { +			__u64 nr; +			__u64 args[6]; +			__u64 ret; +			__u32 longmode; +			__u32 pad; +		} hypercall; +		/* KVM_EXIT_TPR_ACCESS */ +		struct { +			__u64 rip; +			__u32 is_write; +			__u32 pad; +		} tpr_access; +		/* KVM_EXIT_S390_SIEIC */ +		struct { +			__u8 icptcode; +			__u16 ipa; +			__u32 ipb; +		} s390_sieic; +		/* KVM_EXIT_S390_RESET */ +#define KVM_S390_RESET_POR       1 +#define KVM_S390_RESET_CLEAR     2 +#define KVM_S390_RESET_SUBSYSTEM 4 +#define KVM_S390_RESET_CPU_INIT  8 +#define KVM_S390_RESET_IPL       16 +		__u64 s390_reset_flags; +		/* KVM_EXIT_S390_UCONTROL */ +		struct { +			__u64 trans_exc_code; +			__u32 pgm_code; +		} s390_ucontrol; +		/* KVM_EXIT_DCR */ +		struct { +			__u32 dcrn; +			__u32 data; +			__u8  is_write; +		} dcr; +		struct { +			__u32 suberror; +			/* Available with KVM_CAP_INTERNAL_ERROR_DATA: */ +			__u32 ndata; +			__u64 data[16]; +		} internal; +		/* KVM_EXIT_OSI */ +		struct { +			__u64 gprs[32]; +		} osi; +		struct { +			__u64 nr; +			__u64 ret; +			__u64 args[9]; +		} papr_hcall; +		/* Fix the size of the union. */ +		char padding[256]; +	}; + +	/* +	 * shared registers between kvm and userspace. +	 * kvm_valid_regs specifies the register classes set by the host +	 * kvm_dirty_regs specified the register classes dirtied by userspace +	 * struct kvm_sync_regs is architecture specific, as well as the +	 * bits for kvm_valid_regs and kvm_dirty_regs +	 */ +	__u64 kvm_valid_regs; +	__u64 kvm_dirty_regs; +	union { +		struct kvm_sync_regs regs; +		char padding[1024]; +	} s; +}; + +/* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */ + +struct kvm_coalesced_mmio_zone { +	__u64 addr; +	__u32 size; +	__u32 pad; +}; + +struct kvm_coalesced_mmio { +	__u64 phys_addr; +	__u32 len; +	__u32 pad; +	__u8  data[8]; +}; + +struct kvm_coalesced_mmio_ring { +	__u32 first, last; +	struct kvm_coalesced_mmio coalesced_mmio[0]; +}; + +#define KVM_COALESCED_MMIO_MAX \ +	((PAGE_SIZE - sizeof(struct kvm_coalesced_mmio_ring)) / \ +	 sizeof(struct kvm_coalesced_mmio)) + +/* for KVM_TRANSLATE */ +struct kvm_translation { +	/* in */ +	__u64 linear_address; + +	/* out */ +	__u64 physical_address; +	__u8  valid; +	__u8  writeable; +	__u8  usermode; +	__u8  pad[5]; +}; + +/* for KVM_INTERRUPT */ +struct kvm_interrupt { +	/* in */ +	__u32 irq; +}; + +/* for KVM_GET_DIRTY_LOG */ +struct kvm_dirty_log { +	__u32 slot; +	__u32 padding1; +	union { +		void __user *dirty_bitmap; /* one bit per page */ +		__u64 padding2; +	}; +}; + +/* for KVM_SET_SIGNAL_MASK */ +struct kvm_signal_mask { +	__u32 len; +	__u8  sigset[0]; +}; + +/* for KVM_TPR_ACCESS_REPORTING */ +struct kvm_tpr_access_ctl { +	__u32 enabled; +	__u32 flags; +	__u32 reserved[8]; +}; + +/* for KVM_SET_VAPIC_ADDR */ +struct kvm_vapic_addr { +	__u64 vapic_addr; +}; + +/* for KVM_SET_MPSTATE */ + +#define KVM_MP_STATE_RUNNABLE          0 +#define KVM_MP_STATE_UNINITIALIZED     1 +#define KVM_MP_STATE_INIT_RECEIVED     2 +#define KVM_MP_STATE_HALTED            3 +#define KVM_MP_STATE_SIPI_RECEIVED     4 + +struct kvm_mp_state { +	__u32 mp_state; +}; + +struct kvm_s390_psw { +	__u64 mask; +	__u64 addr; +}; + +/* valid values for type in kvm_s390_interrupt */ +#define KVM_S390_SIGP_STOP		0xfffe0000u +#define KVM_S390_PROGRAM_INT		0xfffe0001u +#define KVM_S390_SIGP_SET_PREFIX	0xfffe0002u +#define KVM_S390_RESTART		0xfffe0003u +#define KVM_S390_INT_VIRTIO		0xffff2603u +#define KVM_S390_INT_SERVICE		0xffff2401u +#define KVM_S390_INT_EMERGENCY		0xffff1201u +#define KVM_S390_INT_EXTERNAL_CALL	0xffff1202u + +struct kvm_s390_interrupt { +	__u32 type; +	__u32 parm; +	__u64 parm64; +}; + +/* for KVM_SET_GUEST_DEBUG */ + +#define KVM_GUESTDBG_ENABLE		0x00000001 +#define KVM_GUESTDBG_SINGLESTEP		0x00000002 + +struct kvm_guest_debug { +	__u32 control; +	__u32 pad; +	struct kvm_guest_debug_arch arch; +}; + +enum { +	kvm_ioeventfd_flag_nr_datamatch, +	kvm_ioeventfd_flag_nr_pio, +	kvm_ioeventfd_flag_nr_deassign, +	kvm_ioeventfd_flag_nr_max, +}; + +#define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch) +#define KVM_IOEVENTFD_FLAG_PIO       (1 << kvm_ioeventfd_flag_nr_pio) +#define KVM_IOEVENTFD_FLAG_DEASSIGN  (1 << kvm_ioeventfd_flag_nr_deassign) + +#define KVM_IOEVENTFD_VALID_FLAG_MASK  ((1 << kvm_ioeventfd_flag_nr_max) - 1) + +struct kvm_ioeventfd { +	__u64 datamatch; +	__u64 addr;        /* legal pio/mmio address */ +	__u32 len;         /* 1, 2, 4, or 8 bytes    */ +	__s32 fd; +	__u32 flags; +	__u8  pad[36]; +}; + +/* for KVM_ENABLE_CAP */ +struct kvm_enable_cap { +	/* in */ +	__u32 cap; +	__u32 flags; +	__u64 args[4]; +	__u8  pad[64]; +}; + +/* for KVM_PPC_GET_PVINFO */ +struct kvm_ppc_pvinfo { +	/* out */ +	__u32 flags; +	__u32 hcall[4]; +	__u8  pad[108]; +}; + +/* for KVM_PPC_GET_SMMU_INFO */ +#define KVM_PPC_PAGE_SIZES_MAX_SZ	8 + +struct kvm_ppc_one_page_size { +	__u32 page_shift;	/* Page shift (or 0) */ +	__u32 pte_enc;		/* Encoding in the HPTE (>>12) */ +}; + +struct kvm_ppc_one_seg_page_size { +	__u32 page_shift;	/* Base page shift of segment (or 0) */ +	__u32 slb_enc;		/* SLB encoding for BookS */ +	struct kvm_ppc_one_page_size enc[KVM_PPC_PAGE_SIZES_MAX_SZ]; +}; + +#define KVM_PPC_PAGE_SIZES_REAL		0x00000001 +#define KVM_PPC_1T_SEGMENTS		0x00000002 + +struct kvm_ppc_smmu_info { +	__u64 flags; +	__u32 slb_size; +	__u32 pad; +	struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ]; +}; + +#define KVMIO 0xAE + +/* machine type bits, to be used as argument to KVM_CREATE_VM */ +#define KVM_VM_S390_UCONTROL	1 + +#define KVM_S390_SIE_PAGE_OFFSET 1 + +/* + * ioctls for /dev/kvm fds: + */ +#define KVM_GET_API_VERSION       _IO(KVMIO,   0x00) +#define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */ +#define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list) + +#define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06) +/* + * Check if a kvm extension is available.  Argument is extension number, + * return is 1 (yes) or 0 (no, sorry). + */ +#define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03) +/* + * Get size for mmap(vcpu_fd) + */ +#define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */ +#define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2) +#define KVM_TRACE_ENABLE          __KVM_DEPRECATED_MAIN_W_0x06 +#define KVM_TRACE_PAUSE           __KVM_DEPRECATED_MAIN_0x07 +#define KVM_TRACE_DISABLE         __KVM_DEPRECATED_MAIN_0x08 + +/* + * Extension capability list. + */ +#define KVM_CAP_IRQCHIP	  0 +#define KVM_CAP_HLT	  1 +#define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2 +#define KVM_CAP_USER_MEMORY 3 +#define KVM_CAP_SET_TSS_ADDR 4 +#define KVM_CAP_VAPIC 6 +#define KVM_CAP_EXT_CPUID 7 +#define KVM_CAP_CLOCKSOURCE 8 +#define KVM_CAP_NR_VCPUS 9       /* returns recommended max vcpus per vm */ +#define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */ +#define KVM_CAP_PIT 11 +#define KVM_CAP_NOP_IO_DELAY 12 +#define KVM_CAP_PV_MMU 13 +#define KVM_CAP_MP_STATE 14 +#define KVM_CAP_COALESCED_MMIO 15 +#define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */ +#ifdef __KVM_HAVE_DEVICE_ASSIGNMENT +#define KVM_CAP_DEVICE_ASSIGNMENT 17 +#endif +#define KVM_CAP_IOMMU 18 +#ifdef __KVM_HAVE_MSI +#define KVM_CAP_DEVICE_MSI 20 +#endif +/* Bug in KVM_SET_USER_MEMORY_REGION fixed: */ +#define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21 +#ifdef __KVM_HAVE_USER_NMI +#define KVM_CAP_USER_NMI 22 +#endif +#ifdef __KVM_HAVE_GUEST_DEBUG +#define KVM_CAP_SET_GUEST_DEBUG 23 +#endif +#ifdef __KVM_HAVE_PIT +#define KVM_CAP_REINJECT_CONTROL 24 +#endif +#ifdef __KVM_HAVE_IOAPIC +#define KVM_CAP_IRQ_ROUTING 25 +#endif +#define KVM_CAP_IRQ_INJECT_STATUS 26 +#ifdef __KVM_HAVE_DEVICE_ASSIGNMENT +#define KVM_CAP_DEVICE_DEASSIGNMENT 27 +#endif +#ifdef __KVM_HAVE_MSIX +#define KVM_CAP_DEVICE_MSIX 28 +#endif +#define KVM_CAP_ASSIGN_DEV_IRQ 29 +/* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */ +#define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30 +#ifdef __KVM_HAVE_MCE +#define KVM_CAP_MCE 31 +#endif +#define KVM_CAP_IRQFD 32 +#ifdef __KVM_HAVE_PIT +#define KVM_CAP_PIT2 33 +#endif +#define KVM_CAP_SET_BOOT_CPU_ID 34 +#ifdef __KVM_HAVE_PIT_STATE2 +#define KVM_CAP_PIT_STATE2 35 +#endif +#define KVM_CAP_IOEVENTFD 36 +#define KVM_CAP_SET_IDENTITY_MAP_ADDR 37 +#ifdef __KVM_HAVE_XEN_HVM +#define KVM_CAP_XEN_HVM 38 +#endif +#define KVM_CAP_ADJUST_CLOCK 39 +#define KVM_CAP_INTERNAL_ERROR_DATA 40 +#ifdef __KVM_HAVE_VCPU_EVENTS +#define KVM_CAP_VCPU_EVENTS 41 +#endif +#define KVM_CAP_S390_PSW 42 +#define KVM_CAP_PPC_SEGSTATE 43 +#define KVM_CAP_HYPERV 44 +#define KVM_CAP_HYPERV_VAPIC 45 +#define KVM_CAP_HYPERV_SPIN 46 +#define KVM_CAP_PCI_SEGMENT 47 +#define KVM_CAP_PPC_PAIRED_SINGLES 48 +#define KVM_CAP_INTR_SHADOW 49 +#ifdef __KVM_HAVE_DEBUGREGS +#define KVM_CAP_DEBUGREGS 50 +#endif +#define KVM_CAP_X86_ROBUST_SINGLESTEP 51 +#define KVM_CAP_PPC_OSI 52 +#define KVM_CAP_PPC_UNSET_IRQ 53 +#define KVM_CAP_ENABLE_CAP 54 +#ifdef __KVM_HAVE_XSAVE +#define KVM_CAP_XSAVE 55 +#endif +#ifdef __KVM_HAVE_XCRS +#define KVM_CAP_XCRS 56 +#endif +#define KVM_CAP_PPC_GET_PVINFO 57 +#define KVM_CAP_PPC_IRQ_LEVEL 58 +#define KVM_CAP_ASYNC_PF 59 +#define KVM_CAP_TSC_CONTROL 60 +#define KVM_CAP_GET_TSC_KHZ 61 +#define KVM_CAP_PPC_BOOKE_SREGS 62 +#define KVM_CAP_SPAPR_TCE 63 +#define KVM_CAP_PPC_SMT 64 +#define KVM_CAP_PPC_RMA	65 +#define KVM_CAP_MAX_VCPUS 66       /* returns max vcpus per vm */ +#define KVM_CAP_PPC_HIOR 67 +#define KVM_CAP_PPC_PAPR 68 +#define KVM_CAP_SW_TLB 69 +#define KVM_CAP_ONE_REG 70 +#define KVM_CAP_S390_GMAP 71 +#define KVM_CAP_TSC_DEADLINE_TIMER 72 +#define KVM_CAP_S390_UCONTROL 73 +#define KVM_CAP_SYNC_REGS 74 +#define KVM_CAP_PCI_2_3 75 +#define KVM_CAP_KVMCLOCK_CTRL 76 +#define KVM_CAP_SIGNAL_MSI 77 +#define KVM_CAP_PPC_GET_SMMU_INFO 78 +#define KVM_CAP_S390_COW 79 +#define KVM_CAP_PPC_ALLOC_HTAB 80 +#ifdef __KVM_HAVE_READONLY_MEM +#define KVM_CAP_READONLY_MEM 81 +#endif +#define KVM_CAP_IRQFD_RESAMPLE 82 + +#ifdef KVM_CAP_IRQ_ROUTING + +struct kvm_irq_routing_irqchip { +	__u32 irqchip; +	__u32 pin; +}; + +struct kvm_irq_routing_msi { +	__u32 address_lo; +	__u32 address_hi; +	__u32 data; +	__u32 pad; +}; + +/* gsi routing entry types */ +#define KVM_IRQ_ROUTING_IRQCHIP 1 +#define KVM_IRQ_ROUTING_MSI 2 + +struct kvm_irq_routing_entry { +	__u32 gsi; +	__u32 type; +	__u32 flags; +	__u32 pad; +	union { +		struct kvm_irq_routing_irqchip irqchip; +		struct kvm_irq_routing_msi msi; +		__u32 pad[8]; +	} u; +}; + +struct kvm_irq_routing { +	__u32 nr; +	__u32 flags; +	struct kvm_irq_routing_entry entries[0]; +}; + +#endif + +#ifdef KVM_CAP_MCE +/* x86 MCE */ +struct kvm_x86_mce { +	__u64 status; +	__u64 addr; +	__u64 misc; +	__u64 mcg_status; +	__u8 bank; +	__u8 pad1[7]; +	__u64 pad2[3]; +}; +#endif + +#ifdef KVM_CAP_XEN_HVM +struct kvm_xen_hvm_config { +	__u32 flags; +	__u32 msr; +	__u64 blob_addr_32; +	__u64 blob_addr_64; +	__u8 blob_size_32; +	__u8 blob_size_64; +	__u8 pad2[30]; +}; +#endif + +#define KVM_IRQFD_FLAG_DEASSIGN (1 << 0) +/* + * Available with KVM_CAP_IRQFD_RESAMPLE + * + * KVM_IRQFD_FLAG_RESAMPLE indicates resamplefd is valid and specifies + * the irqfd to operate in resampling mode for level triggered interrupt + * emlation.  See Documentation/virtual/kvm/api.txt. + */ +#define KVM_IRQFD_FLAG_RESAMPLE (1 << 1) + +struct kvm_irqfd { +	__u32 fd; +	__u32 gsi; +	__u32 flags; +	__u32 resamplefd; +	__u8  pad[16]; +}; + +struct kvm_clock_data { +	__u64 clock; +	__u32 flags; +	__u32 pad[9]; +}; + +#define KVM_MMU_FSL_BOOKE_NOHV		0 +#define KVM_MMU_FSL_BOOKE_HV		1 + +struct kvm_config_tlb { +	__u64 params; +	__u64 array; +	__u32 mmu_type; +	__u32 array_len; +}; + +struct kvm_dirty_tlb { +	__u64 bitmap; +	__u32 num_dirty; +}; + +/* Available with KVM_CAP_ONE_REG */ + +#define KVM_REG_ARCH_MASK	0xff00000000000000ULL +#define KVM_REG_GENERIC		0x0000000000000000ULL + +/* + * Architecture specific registers are to be defined in arch headers and + * ORed with the arch identifier. + */ +#define KVM_REG_PPC		0x1000000000000000ULL +#define KVM_REG_X86		0x2000000000000000ULL +#define KVM_REG_IA64		0x3000000000000000ULL +#define KVM_REG_ARM		0x4000000000000000ULL +#define KVM_REG_S390		0x5000000000000000ULL + +#define KVM_REG_SIZE_SHIFT	52 +#define KVM_REG_SIZE_MASK	0x00f0000000000000ULL +#define KVM_REG_SIZE_U8		0x0000000000000000ULL +#define KVM_REG_SIZE_U16	0x0010000000000000ULL +#define KVM_REG_SIZE_U32	0x0020000000000000ULL +#define KVM_REG_SIZE_U64	0x0030000000000000ULL +#define KVM_REG_SIZE_U128	0x0040000000000000ULL +#define KVM_REG_SIZE_U256	0x0050000000000000ULL +#define KVM_REG_SIZE_U512	0x0060000000000000ULL +#define KVM_REG_SIZE_U1024	0x0070000000000000ULL + +struct kvm_one_reg { +	__u64 id; +	__u64 addr; +}; + +struct kvm_msi { +	__u32 address_lo; +	__u32 address_hi; +	__u32 data; +	__u32 flags; +	__u8  pad[16]; +}; + +/* + * ioctls for VM fds + */ +#define KVM_SET_MEMORY_REGION     _IOW(KVMIO,  0x40, struct kvm_memory_region) +/* + * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns + * a vcpu fd. + */ +#define KVM_CREATE_VCPU           _IO(KVMIO,   0x41) +#define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log) +/* KVM_SET_MEMORY_ALIAS is obsolete: */ +#define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO,  0x43, struct kvm_memory_alias) +#define KVM_SET_NR_MMU_PAGES      _IO(KVMIO,   0x44) +#define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45) +#define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \ +					struct kvm_userspace_memory_region) +#define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47) +#define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO,  0x48, __u64) + +/* enable ucontrol for s390 */ +struct kvm_s390_ucas_mapping { +	__u64 user_addr; +	__u64 vcpu_addr; +	__u64 length; +}; +#define KVM_S390_UCAS_MAP        _IOW(KVMIO, 0x50, struct kvm_s390_ucas_mapping) +#define KVM_S390_UCAS_UNMAP      _IOW(KVMIO, 0x51, struct kvm_s390_ucas_mapping) +#define KVM_S390_VCPU_FAULT	 _IOW(KVMIO, 0x52, unsigned long) + +/* Device model IOC */ +#define KVM_CREATE_IRQCHIP        _IO(KVMIO,   0x60) +#define KVM_IRQ_LINE              _IOW(KVMIO,  0x61, struct kvm_irq_level) +#define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip) +#define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip) +#define KVM_CREATE_PIT            _IO(KVMIO,   0x64) +#define KVM_GET_PIT               _IOWR(KVMIO, 0x65, struct kvm_pit_state) +#define KVM_SET_PIT               _IOR(KVMIO,  0x66, struct kvm_pit_state) +#define KVM_IRQ_LINE_STATUS       _IOWR(KVMIO, 0x67, struct kvm_irq_level) +#define KVM_REGISTER_COALESCED_MMIO \ +			_IOW(KVMIO,  0x67, struct kvm_coalesced_mmio_zone) +#define KVM_UNREGISTER_COALESCED_MMIO \ +			_IOW(KVMIO,  0x68, struct kvm_coalesced_mmio_zone) +#define KVM_ASSIGN_PCI_DEVICE     _IOR(KVMIO,  0x69, \ +				       struct kvm_assigned_pci_dev) +#define KVM_SET_GSI_ROUTING       _IOW(KVMIO,  0x6a, struct kvm_irq_routing) +/* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */ +#define KVM_ASSIGN_IRQ            __KVM_DEPRECATED_VM_R_0x70 +#define KVM_ASSIGN_DEV_IRQ        _IOW(KVMIO,  0x70, struct kvm_assigned_irq) +#define KVM_REINJECT_CONTROL      _IO(KVMIO,   0x71) +#define KVM_DEASSIGN_PCI_DEVICE   _IOW(KVMIO,  0x72, \ +				       struct kvm_assigned_pci_dev) +#define KVM_ASSIGN_SET_MSIX_NR    _IOW(KVMIO,  0x73, \ +				       struct kvm_assigned_msix_nr) +#define KVM_ASSIGN_SET_MSIX_ENTRY _IOW(KVMIO,  0x74, \ +				       struct kvm_assigned_msix_entry) +#define KVM_DEASSIGN_DEV_IRQ      _IOW(KVMIO,  0x75, struct kvm_assigned_irq) +#define KVM_IRQFD                 _IOW(KVMIO,  0x76, struct kvm_irqfd) +#define KVM_CREATE_PIT2		  _IOW(KVMIO,  0x77, struct kvm_pit_config) +#define KVM_SET_BOOT_CPU_ID       _IO(KVMIO,   0x78) +#define KVM_IOEVENTFD             _IOW(KVMIO,  0x79, struct kvm_ioeventfd) +#define KVM_XEN_HVM_CONFIG        _IOW(KVMIO,  0x7a, struct kvm_xen_hvm_config) +#define KVM_SET_CLOCK             _IOW(KVMIO,  0x7b, struct kvm_clock_data) +#define KVM_GET_CLOCK             _IOR(KVMIO,  0x7c, struct kvm_clock_data) +/* Available with KVM_CAP_PIT_STATE2 */ +#define KVM_GET_PIT2              _IOR(KVMIO,  0x9f, struct kvm_pit_state2) +#define KVM_SET_PIT2              _IOW(KVMIO,  0xa0, struct kvm_pit_state2) +/* Available with KVM_CAP_PPC_GET_PVINFO */ +#define KVM_PPC_GET_PVINFO	  _IOW(KVMIO,  0xa1, struct kvm_ppc_pvinfo) +/* Available with KVM_CAP_TSC_CONTROL */ +#define KVM_SET_TSC_KHZ           _IO(KVMIO,  0xa2) +#define KVM_GET_TSC_KHZ           _IO(KVMIO,  0xa3) +/* Available with KVM_CAP_PCI_2_3 */ +#define KVM_ASSIGN_SET_INTX_MASK  _IOW(KVMIO,  0xa4, \ +				       struct kvm_assigned_pci_dev) +/* Available with KVM_CAP_SIGNAL_MSI */ +#define KVM_SIGNAL_MSI            _IOW(KVMIO,  0xa5, struct kvm_msi) +/* Available with KVM_CAP_PPC_GET_SMMU_INFO */ +#define KVM_PPC_GET_SMMU_INFO	  _IOR(KVMIO,  0xa6, struct kvm_ppc_smmu_info) +/* Available with KVM_CAP_PPC_ALLOC_HTAB */ +#define KVM_PPC_ALLOCATE_HTAB	  _IOWR(KVMIO, 0xa7, __u32) + +/* + * ioctls for vcpu fds + */ +#define KVM_RUN                   _IO(KVMIO,   0x80) +#define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs) +#define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs) +#define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs) +#define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs) +#define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation) +#define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt) +/* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */ +#define KVM_DEBUG_GUEST           __KVM_DEPRECATED_VCPU_W_0x87 +#define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs) +#define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs) +#define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid) +#define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask) +#define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu) +#define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu) +#define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state) +#define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state) +#define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2) +#define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2) +/* Available with KVM_CAP_VAPIC */ +#define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl) +/* Available with KVM_CAP_VAPIC */ +#define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr) +/* valid for virtual machine (for floating interrupt)_and_ vcpu */ +#define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt) +/* store status for s390 */ +#define KVM_S390_STORE_STATUS_NOADDR    (-1ul) +#define KVM_S390_STORE_STATUS_PREFIXED  (-2ul) +#define KVM_S390_STORE_STATUS	  _IOW(KVMIO,  0x95, unsigned long) +/* initial ipl psw for s390 */ +#define KVM_S390_SET_INITIAL_PSW  _IOW(KVMIO,  0x96, struct kvm_s390_psw) +/* initial reset for s390 */ +#define KVM_S390_INITIAL_RESET    _IO(KVMIO,   0x97) +#define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state) +#define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state) +/* Available with KVM_CAP_NMI */ +#define KVM_NMI                   _IO(KVMIO,   0x9a) +/* Available with KVM_CAP_SET_GUEST_DEBUG */ +#define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug) +/* MCE for x86 */ +#define KVM_X86_SETUP_MCE         _IOW(KVMIO,  0x9c, __u64) +#define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO,  0x9d, __u64) +#define KVM_X86_SET_MCE           _IOW(KVMIO,  0x9e, struct kvm_x86_mce) +/* IA64 stack access */ +#define KVM_IA64_VCPU_GET_STACK   _IOR(KVMIO,  0x9a, void *) +#define KVM_IA64_VCPU_SET_STACK   _IOW(KVMIO,  0x9b, void *) +/* Available with KVM_CAP_VCPU_EVENTS */ +#define KVM_GET_VCPU_EVENTS       _IOR(KVMIO,  0x9f, struct kvm_vcpu_events) +#define KVM_SET_VCPU_EVENTS       _IOW(KVMIO,  0xa0, struct kvm_vcpu_events) +/* Available with KVM_CAP_DEBUGREGS */ +#define KVM_GET_DEBUGREGS         _IOR(KVMIO,  0xa1, struct kvm_debugregs) +#define KVM_SET_DEBUGREGS         _IOW(KVMIO,  0xa2, struct kvm_debugregs) +#define KVM_ENABLE_CAP            _IOW(KVMIO,  0xa3, struct kvm_enable_cap) +/* Available with KVM_CAP_XSAVE */ +#define KVM_GET_XSAVE		  _IOR(KVMIO,  0xa4, struct kvm_xsave) +#define KVM_SET_XSAVE		  _IOW(KVMIO,  0xa5, struct kvm_xsave) +/* Available with KVM_CAP_XCRS */ +#define KVM_GET_XCRS		  _IOR(KVMIO,  0xa6, struct kvm_xcrs) +#define KVM_SET_XCRS		  _IOW(KVMIO,  0xa7, struct kvm_xcrs) +#define KVM_CREATE_SPAPR_TCE	  _IOW(KVMIO,  0xa8, struct kvm_create_spapr_tce) +/* Available with KVM_CAP_RMA */ +#define KVM_ALLOCATE_RMA	  _IOR(KVMIO,  0xa9, struct kvm_allocate_rma) +/* Available with KVM_CAP_SW_TLB */ +#define KVM_DIRTY_TLB		  _IOW(KVMIO,  0xaa, struct kvm_dirty_tlb) +/* Available with KVM_CAP_ONE_REG */ +#define KVM_GET_ONE_REG		  _IOW(KVMIO,  0xab, struct kvm_one_reg) +#define KVM_SET_ONE_REG		  _IOW(KVMIO,  0xac, struct kvm_one_reg) +/* VM is being stopped by host */ +#define KVM_KVMCLOCK_CTRL	  _IO(KVMIO,   0xad) + +#define KVM_DEV_ASSIGN_ENABLE_IOMMU	(1 << 0) +#define KVM_DEV_ASSIGN_PCI_2_3		(1 << 1) +#define KVM_DEV_ASSIGN_MASK_INTX	(1 << 2) + +struct kvm_assigned_pci_dev { +	__u32 assigned_dev_id; +	__u32 busnr; +	__u32 devfn; +	__u32 flags; +	__u32 segnr; +	union { +		__u32 reserved[11]; +	}; +}; + +#define KVM_DEV_IRQ_HOST_INTX    (1 << 0) +#define KVM_DEV_IRQ_HOST_MSI     (1 << 1) +#define KVM_DEV_IRQ_HOST_MSIX    (1 << 2) + +#define KVM_DEV_IRQ_GUEST_INTX   (1 << 8) +#define KVM_DEV_IRQ_GUEST_MSI    (1 << 9) +#define KVM_DEV_IRQ_GUEST_MSIX   (1 << 10) + +#define KVM_DEV_IRQ_HOST_MASK	 0x00ff +#define KVM_DEV_IRQ_GUEST_MASK   0xff00 + +struct kvm_assigned_irq { +	__u32 assigned_dev_id; +	__u32 host_irq; /* ignored (legacy field) */ +	__u32 guest_irq; +	__u32 flags; +	union { +		__u32 reserved[12]; +	}; +}; + +struct kvm_assigned_msix_nr { +	__u32 assigned_dev_id; +	__u16 entry_nr; +	__u16 padding; +}; + +#define KVM_MAX_MSIX_PER_DEV		256 +struct kvm_assigned_msix_entry { +	__u32 assigned_dev_id; +	__u32 gsi; +	__u16 entry; /* The index of entry in the MSI-X table */ +	__u16 padding[3]; +}; + +#endif /* __LINUX_KVM_H */ diff --git a/include/uapi/linux/kvm_para.h b/include/uapi/linux/kvm_para.h new file mode 100644 index 00000000000..cea2c5c72d2 --- /dev/null +++ b/include/uapi/linux/kvm_para.h @@ -0,0 +1,28 @@ +#ifndef _UAPI__LINUX_KVM_PARA_H +#define _UAPI__LINUX_KVM_PARA_H + +/* + * This header file provides a method for making a hypercall to the host + * Architectures should define: + * - kvm_hypercall0, kvm_hypercall1... + * - kvm_arch_para_features + * - kvm_para_available + */ + +/* Return values for hypercalls */ +#define KVM_ENOSYS		1000 +#define KVM_EFAULT		EFAULT +#define KVM_E2BIG		E2BIG +#define KVM_EPERM		EPERM + +#define KVM_HC_VAPIC_POLL_IRQ		1 +#define KVM_HC_MMU_OP			2 +#define KVM_HC_FEATURES			3 +#define KVM_HC_PPC_MAP_MAGIC_PAGE	4 + +/* + * hypercalls use architecture specific + */ +#include <asm/kvm_para.h> + +#endif /* _UAPI__LINUX_KVM_PARA_H */ diff --git a/include/uapi/linux/l2tp.h b/include/uapi/linux/l2tp.h new file mode 100644 index 00000000000..8adb6816032 --- /dev/null +++ b/include/uapi/linux/l2tp.h @@ -0,0 +1,180 @@ +/* + * L2TP-over-IP socket for L2TPv3. + * + * Author: James Chapman <jchapman@katalix.com> + */ + +#ifndef _UAPI_LINUX_L2TP_H_ +#define _UAPI_LINUX_L2TP_H_ + +#include <linux/types.h> +#include <linux/socket.h> +#ifndef __KERNEL__ +#include <netinet/in.h> +#endif + +#define IPPROTO_L2TP		115 + +/** + * struct sockaddr_l2tpip - the sockaddr structure for L2TP-over-IP sockets + * @l2tp_family:  address family number AF_L2TPIP. + * @l2tp_addr:    protocol specific address information + * @l2tp_conn_id: connection id of tunnel + */ +#define __SOCK_SIZE__	16		/* sizeof(struct sockaddr)	*/ +struct sockaddr_l2tpip { +	/* The first fields must match struct sockaddr_in */ +	__kernel_sa_family_t l2tp_family; /* AF_INET */ +	__be16		l2tp_unused;	/* INET port number (unused) */ +	struct in_addr	l2tp_addr;	/* Internet address */ + +	__u32		l2tp_conn_id;	/* Connection ID of tunnel */ + +	/* Pad to size of `struct sockaddr'. */ +	unsigned char	__pad[sizeof(struct sockaddr) - +			      sizeof(__kernel_sa_family_t) - +			      sizeof(__be16) - sizeof(struct in_addr) - +			      sizeof(__u32)]; +}; + +/** + * struct sockaddr_l2tpip6 - the sockaddr structure for L2TP-over-IPv6 sockets + * @l2tp_family:  address family number AF_L2TPIP. + * @l2tp_addr:    protocol specific address information + * @l2tp_conn_id: connection id of tunnel + */ +struct sockaddr_l2tpip6 { +	/* The first fields must match struct sockaddr_in6 */ +	__kernel_sa_family_t l2tp_family; /* AF_INET6 */ +	__be16		l2tp_unused;	/* INET port number (unused) */ +	__be32		l2tp_flowinfo;	/* IPv6 flow information */ +	struct in6_addr	l2tp_addr;	/* IPv6 address */ +	__u32		l2tp_scope_id;	/* scope id (new in RFC2553) */ +	__u32		l2tp_conn_id;	/* Connection ID of tunnel */ +}; + +/***************************************************************************** + *  NETLINK_GENERIC netlink family. + *****************************************************************************/ + +/* + * Commands. + * Valid TLVs of each command are:- + * TUNNEL_CREATE	- CONN_ID, pw_type, netns, ifname, ipinfo, udpinfo, udpcsum, vlanid + * TUNNEL_DELETE	- CONN_ID + * TUNNEL_MODIFY	- CONN_ID, udpcsum + * TUNNEL_GETSTATS	- CONN_ID, (stats) + * TUNNEL_GET		- CONN_ID, (...) + * SESSION_CREATE	- SESSION_ID, PW_TYPE, offset, data_seq, cookie, peer_cookie, offset, l2spec + * SESSION_DELETE	- SESSION_ID + * SESSION_MODIFY	- SESSION_ID, data_seq + * SESSION_GET		- SESSION_ID, (...) + * SESSION_GETSTATS	- SESSION_ID, (stats) + * + */ +enum { +	L2TP_CMD_NOOP, +	L2TP_CMD_TUNNEL_CREATE, +	L2TP_CMD_TUNNEL_DELETE, +	L2TP_CMD_TUNNEL_MODIFY, +	L2TP_CMD_TUNNEL_GET, +	L2TP_CMD_SESSION_CREATE, +	L2TP_CMD_SESSION_DELETE, +	L2TP_CMD_SESSION_MODIFY, +	L2TP_CMD_SESSION_GET, +	__L2TP_CMD_MAX, +}; + +#define L2TP_CMD_MAX			(__L2TP_CMD_MAX - 1) + +/* + * ATTR types defined for L2TP + */ +enum { +	L2TP_ATTR_NONE,			/* no data */ +	L2TP_ATTR_PW_TYPE,		/* u16, enum l2tp_pwtype */ +	L2TP_ATTR_ENCAP_TYPE,		/* u16, enum l2tp_encap_type */ +	L2TP_ATTR_OFFSET,		/* u16 */ +	L2TP_ATTR_DATA_SEQ,		/* u16 */ +	L2TP_ATTR_L2SPEC_TYPE,		/* u8, enum l2tp_l2spec_type */ +	L2TP_ATTR_L2SPEC_LEN,		/* u8, enum l2tp_l2spec_type */ +	L2TP_ATTR_PROTO_VERSION,	/* u8 */ +	L2TP_ATTR_IFNAME,		/* string */ +	L2TP_ATTR_CONN_ID,		/* u32 */ +	L2TP_ATTR_PEER_CONN_ID,		/* u32 */ +	L2TP_ATTR_SESSION_ID,		/* u32 */ +	L2TP_ATTR_PEER_SESSION_ID,	/* u32 */ +	L2TP_ATTR_UDP_CSUM,		/* u8 */ +	L2TP_ATTR_VLAN_ID,		/* u16 */ +	L2TP_ATTR_COOKIE,		/* 0, 4 or 8 bytes */ +	L2TP_ATTR_PEER_COOKIE,		/* 0, 4 or 8 bytes */ +	L2TP_ATTR_DEBUG,		/* u32 */ +	L2TP_ATTR_RECV_SEQ,		/* u8 */ +	L2TP_ATTR_SEND_SEQ,		/* u8 */ +	L2TP_ATTR_LNS_MODE,		/* u8 */ +	L2TP_ATTR_USING_IPSEC,		/* u8 */ +	L2TP_ATTR_RECV_TIMEOUT,		/* msec */ +	L2TP_ATTR_FD,			/* int */ +	L2TP_ATTR_IP_SADDR,		/* u32 */ +	L2TP_ATTR_IP_DADDR,		/* u32 */ +	L2TP_ATTR_UDP_SPORT,		/* u16 */ +	L2TP_ATTR_UDP_DPORT,		/* u16 */ +	L2TP_ATTR_MTU,			/* u16 */ +	L2TP_ATTR_MRU,			/* u16 */ +	L2TP_ATTR_STATS,		/* nested */ +	L2TP_ATTR_IP6_SADDR,		/* struct in6_addr */ +	L2TP_ATTR_IP6_DADDR,		/* struct in6_addr */ +	__L2TP_ATTR_MAX, +}; + +#define L2TP_ATTR_MAX			(__L2TP_ATTR_MAX - 1) + +/* Nested in L2TP_ATTR_STATS */ +enum { +	L2TP_ATTR_STATS_NONE,		/* no data */ +	L2TP_ATTR_TX_PACKETS,		/* u64 */ +	L2TP_ATTR_TX_BYTES,		/* u64 */ +	L2TP_ATTR_TX_ERRORS,		/* u64 */ +	L2TP_ATTR_RX_PACKETS,		/* u64 */ +	L2TP_ATTR_RX_BYTES,		/* u64 */ +	L2TP_ATTR_RX_SEQ_DISCARDS,	/* u64 */ +	L2TP_ATTR_RX_OOS_PACKETS,	/* u64 */ +	L2TP_ATTR_RX_ERRORS,		/* u64 */ +	__L2TP_ATTR_STATS_MAX, +}; + +#define L2TP_ATTR_STATS_MAX		(__L2TP_ATTR_STATS_MAX - 1) + +enum l2tp_pwtype { +	L2TP_PWTYPE_NONE = 0x0000, +	L2TP_PWTYPE_ETH_VLAN = 0x0004, +	L2TP_PWTYPE_ETH = 0x0005, +	L2TP_PWTYPE_PPP = 0x0007, +	L2TP_PWTYPE_PPP_AC = 0x0008, +	L2TP_PWTYPE_IP = 0x000b, +	__L2TP_PWTYPE_MAX +}; + +enum l2tp_l2spec_type { +	L2TP_L2SPECTYPE_NONE, +	L2TP_L2SPECTYPE_DEFAULT, +}; + +enum l2tp_encap_type { +	L2TP_ENCAPTYPE_UDP, +	L2TP_ENCAPTYPE_IP, +}; + +enum l2tp_seqmode { +	L2TP_SEQ_NONE = 0, +	L2TP_SEQ_IP = 1, +	L2TP_SEQ_ALL = 2, +}; + +/* + * NETLINK_GENERIC related info + */ +#define L2TP_GENL_NAME		"l2tp" +#define L2TP_GENL_VERSION	0x1 + +#endif /* _UAPI_LINUX_L2TP_H_ */ diff --git a/include/uapi/linux/limits.h b/include/uapi/linux/limits.h new file mode 100644 index 00000000000..2d0f94162fb --- /dev/null +++ b/include/uapi/linux/limits.h @@ -0,0 +1,20 @@ +#ifndef _LINUX_LIMITS_H +#define _LINUX_LIMITS_H + +#define NR_OPEN	        1024 + +#define NGROUPS_MAX    65536	/* supplemental group IDs are available */ +#define ARG_MAX       131072	/* # bytes of args + environ for exec() */ +#define LINK_MAX         127	/* # links a file may have */ +#define MAX_CANON        255	/* size of the canonical input queue */ +#define MAX_INPUT        255	/* size of the type-ahead buffer */ +#define NAME_MAX         255	/* # chars in a file name */ +#define PATH_MAX        4096	/* # chars in a path name including nul */ +#define PIPE_BUF        4096	/* # bytes in atomic write to a pipe */ +#define XATTR_NAME_MAX   255	/* # chars in an extended attribute name */ +#define XATTR_SIZE_MAX 65536	/* size of an extended attribute value (64k) */ +#define XATTR_LIST_MAX 65536	/* size of extended attribute namelist (64k) */ + +#define RTSIG_MAX	  32 + +#endif diff --git a/include/uapi/linux/llc.h b/include/uapi/linux/llc.h new file mode 100644 index 00000000000..9c987a40247 --- /dev/null +++ b/include/uapi/linux/llc.h @@ -0,0 +1,84 @@ +/* + * IEEE 802.2 User Interface SAPs for Linux, data structures and indicators. + * + * Copyright (c) 2001 by Jay Schulist <jschlst@samba.org> + * + * This program can be redistributed or modified under the terms of the + * GNU General Public License as published by the Free Software Foundation. + * This program is distributed without any warranty or implied warranty + * of merchantability or fitness for a particular purpose. + * + * See the GNU General Public License for more details. + */ +#ifndef _UAPI__LINUX_LLC_H +#define _UAPI__LINUX_LLC_H + +#include <linux/socket.h> + +#define __LLC_SOCK_SIZE__ 16	/* sizeof(sockaddr_llc), word align. */ +struct sockaddr_llc { +	__kernel_sa_family_t sllc_family; /* AF_LLC */ +	__kernel_sa_family_t sllc_arphrd; /* ARPHRD_ETHER */ +	unsigned char   sllc_test; +	unsigned char   sllc_xid; +	unsigned char	sllc_ua;	/* UA data, only for SOCK_STREAM. */ +	unsigned char   sllc_sap; +	unsigned char   sllc_mac[IFHWADDRLEN]; +	unsigned char   __pad[__LLC_SOCK_SIZE__ - +			      sizeof(__kernel_sa_family_t) * 2 - +			      sizeof(unsigned char) * 4 - IFHWADDRLEN]; +}; + +/* sockopt definitions. */ +enum llc_sockopts { +	LLC_OPT_UNKNOWN = 0, +	LLC_OPT_RETRY,		/* max retrans attempts. */ +	LLC_OPT_SIZE,		/* max PDU size (octets). */ +	LLC_OPT_ACK_TMR_EXP,	/* ack expire time (secs). */ +	LLC_OPT_P_TMR_EXP,	/* pf cycle expire time (secs). */ +	LLC_OPT_REJ_TMR_EXP,	/* rej sent expire time (secs). */ +	LLC_OPT_BUSY_TMR_EXP,	/* busy state expire time (secs). */ +	LLC_OPT_TX_WIN,		/* tx window size. */ +	LLC_OPT_RX_WIN,		/* rx window size. */ +	LLC_OPT_PKTINFO,	/* ancillary packet information. */ +	LLC_OPT_MAX +}; + +#define LLC_OPT_MAX_RETRY	 100 +#define LLC_OPT_MAX_SIZE	4196 +#define LLC_OPT_MAX_WIN		 127 +#define LLC_OPT_MAX_ACK_TMR_EXP	  60 +#define LLC_OPT_MAX_P_TMR_EXP	  60 +#define LLC_OPT_MAX_REJ_TMR_EXP	  60 +#define LLC_OPT_MAX_BUSY_TMR_EXP  60 + +/* LLC SAP types. */ +#define LLC_SAP_NULL	0x00		/* NULL SAP. 			*/ +#define LLC_SAP_LLC	0x02		/* LLC Sublayer Management. 	*/ +#define LLC_SAP_SNA	0x04		/* SNA Path Control. 		*/ +#define LLC_SAP_PNM	0x0E		/* Proway Network Management.	*/	 +#define LLC_SAP_IP	0x06		/* TCP/IP. 			*/ +#define LLC_SAP_BSPAN	0x42		/* Bridge Spanning Tree Proto	*/ +#define LLC_SAP_MMS	0x4E		/* Manufacturing Message Srv.	*/ +#define LLC_SAP_8208	0x7E		/* ISO 8208			*/ +#define LLC_SAP_3COM	0x80		/* 3COM. 			*/ +#define LLC_SAP_PRO	0x8E		/* Proway Active Station List	*/ +#define LLC_SAP_SNAP	0xAA		/* SNAP. 			*/ +#define LLC_SAP_BANYAN	0xBC		/* Banyan. 			*/ +#define LLC_SAP_IPX	0xE0		/* IPX/SPX. 			*/ +#define LLC_SAP_NETBEUI	0xF0		/* NetBEUI. 			*/ +#define LLC_SAP_LANMGR	0xF4		/* LanManager. 			*/ +#define LLC_SAP_IMPL	0xF8		/* IMPL				*/ +#define LLC_SAP_DISC	0xFC		/* Discovery			*/ +#define LLC_SAP_OSI	0xFE		/* OSI Network Layers. 		*/ +#define LLC_SAP_LAR	0xDC		/* LAN Address Resolution 	*/ +#define LLC_SAP_RM	0xD4		/* Resource Management 		*/ +#define LLC_SAP_GLOBAL	0xFF		/* Global SAP. 			*/ + +struct llc_pktinfo { +	int lpi_ifindex; +	unsigned char lpi_sap; +	unsigned char lpi_mac[IFHWADDRLEN]; +}; + +#endif /* _UAPI__LINUX_LLC_H */ diff --git a/include/uapi/linux/loop.h b/include/uapi/linux/loop.h new file mode 100644 index 00000000000..e0cecd2eabd --- /dev/null +++ b/include/uapi/linux/loop.h @@ -0,0 +1,94 @@ +/* + * include/linux/loop.h + * + * Written by Theodore Ts'o, 3/29/93. + * + * Copyright 1993 by Theodore Ts'o.  Redistribution of this file is + * permitted under the GNU General Public License. + */ +#ifndef _UAPI_LINUX_LOOP_H +#define _UAPI_LINUX_LOOP_H + + +#define LO_NAME_SIZE	64 +#define LO_KEY_SIZE	32 + + +/* + * Loop flags + */ +enum { +	LO_FLAGS_READ_ONLY	= 1, +	LO_FLAGS_AUTOCLEAR	= 4, +	LO_FLAGS_PARTSCAN	= 8, +}; + +#include <asm/posix_types.h>	/* for __kernel_old_dev_t */ +#include <linux/types.h>	/* for __u64 */ + +/* Backwards compatibility version */ +struct loop_info { +	int		   lo_number;		/* ioctl r/o */ +	__kernel_old_dev_t lo_device; 		/* ioctl r/o */ +	unsigned long	   lo_inode; 		/* ioctl r/o */ +	__kernel_old_dev_t lo_rdevice; 		/* ioctl r/o */ +	int		   lo_offset; +	int		   lo_encrypt_type; +	int		   lo_encrypt_key_size; 	/* ioctl w/o */ +	int		   lo_flags;			/* ioctl r/o */ +	char		   lo_name[LO_NAME_SIZE]; +	unsigned char	   lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ +	unsigned long	   lo_init[2]; +	char		   reserved[4]; +}; + +struct loop_info64 { +	__u64		   lo_device;			/* ioctl r/o */ +	__u64		   lo_inode;			/* ioctl r/o */ +	__u64		   lo_rdevice;			/* ioctl r/o */ +	__u64		   lo_offset; +	__u64		   lo_sizelimit;/* bytes, 0 == max available */ +	__u32		   lo_number;			/* ioctl r/o */ +	__u32		   lo_encrypt_type; +	__u32		   lo_encrypt_key_size;		/* ioctl w/o */ +	__u32		   lo_flags;			/* ioctl r/o */ +	__u8		   lo_file_name[LO_NAME_SIZE]; +	__u8		   lo_crypt_name[LO_NAME_SIZE]; +	__u8		   lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ +	__u64		   lo_init[2]; +}; + +/* + * Loop filter types + */ + +#define LO_CRYPT_NONE		0 +#define LO_CRYPT_XOR		1 +#define LO_CRYPT_DES		2 +#define LO_CRYPT_FISH2		3    /* Twofish encryption */ +#define LO_CRYPT_BLOW		4 +#define LO_CRYPT_CAST128	5 +#define LO_CRYPT_IDEA		6 +#define LO_CRYPT_DUMMY		9 +#define LO_CRYPT_SKIPJACK	10 +#define LO_CRYPT_CRYPTOAPI	18 +#define MAX_LO_CRYPT		20 + +/* + * IOCTL commands --- we will commandeer 0x4C ('L') + */ + +#define LOOP_SET_FD		0x4C00 +#define LOOP_CLR_FD		0x4C01 +#define LOOP_SET_STATUS		0x4C02 +#define LOOP_GET_STATUS		0x4C03 +#define LOOP_SET_STATUS64	0x4C04 +#define LOOP_GET_STATUS64	0x4C05 +#define LOOP_CHANGE_FD		0x4C06 +#define LOOP_SET_CAPACITY	0x4C07 + +/* /dev/loop-control interface */ +#define LOOP_CTL_ADD		0x4C80 +#define LOOP_CTL_REMOVE		0x4C81 +#define LOOP_CTL_GET_FREE	0x4C82 +#endif /* _UAPI_LINUX_LOOP_H */ diff --git a/include/uapi/linux/lp.h b/include/uapi/linux/lp.h new file mode 100644 index 00000000000..a3406a51f19 --- /dev/null +++ b/include/uapi/linux/lp.h @@ -0,0 +1,100 @@ +/* + * usr/include/linux/lp.h c.1991-1992 James Wiegand + * many modifications copyright (C) 1992 Michael K. Johnson + * Interrupt support added 1993 Nigel Gamble + * Removed 8255 status defines from inside __KERNEL__ Marcelo Tosatti  + */ +#ifndef _UAPI_LINUX_LP_H +#define _UAPI_LINUX_LP_H + + +/* + * Per POSIX guidelines, this module reserves the LP and lp prefixes + * These are the lp_table[minor].flags flags... + */ +#define LP_EXIST 0x0001 +#define LP_SELEC 0x0002 +#define LP_BUSY	 0x0004 +#define LP_BUSY_BIT_POS 2 +#define LP_OFFL	 0x0008 +#define LP_NOPA  0x0010 +#define LP_ERR   0x0020 +#define LP_ABORT 0x0040 +#define LP_CAREFUL 0x0080 /* obsoleted -arca */ +#define LP_ABORTOPEN 0x0100 + +#define LP_TRUST_IRQ_  0x0200 /* obsolete */ +#define LP_NO_REVERSE  0x0400 /* No reverse mode available. */ +#define LP_DATA_AVAIL  0x0800 /* Data is available. */ + +/*  + * bit defines for 8255 status port + * base + 1 + * accessed with LP_S(minor), which gets the byte... + */ +#define LP_PBUSY	0x80  /* inverted input, active high */ +#define LP_PACK		0x40  /* unchanged input, active low */ +#define LP_POUTPA	0x20  /* unchanged input, active high */ +#define LP_PSELECD	0x10  /* unchanged input, active high */ +#define LP_PERRORP	0x08  /* unchanged input, active low */ + +/* timeout for each character.  This is relative to bus cycles -- it + * is the count in a busy loop.  THIS IS THE VALUE TO CHANGE if you + * have extremely slow printing, or if the machine seems to slow down + * a lot when you print.  If you have slow printing, increase this + * number and recompile, and if your system gets bogged down, decrease + * this number.  This can be changed with the tunelp(8) command as well. + */ + +#define LP_INIT_CHAR 1000 + +/* The parallel port specs apparently say that there needs to be + * a .5usec wait before and after the strobe. + */ + +#define LP_INIT_WAIT 1 + +/* This is the amount of time that the driver waits for the printer to + * catch up when the printer's buffer appears to be filled.  If you + * want to tune this and have a fast printer (i.e. HPIIIP), decrease + * this number, and if you have a slow printer, increase this number. + * This is in hundredths of a second, the default 2 being .05 second. + * Or use the tunelp(8) command, which is especially nice if you want + * change back and forth between character and graphics printing, which + * are wildly different... + */ + +#define LP_INIT_TIME 2 + +/* IOCTL numbers */ +#define LPCHAR   0x0601  /* corresponds to LP_INIT_CHAR */ +#define LPTIME   0x0602  /* corresponds to LP_INIT_TIME */ +#define LPABORT  0x0604  /* call with TRUE arg to abort on error, +			    FALSE to retry.  Default is retry.  */ +#define LPSETIRQ 0x0605  /* call with new IRQ number, +			    or 0 for polling (no IRQ) */ +#define LPGETIRQ 0x0606  /* get the current IRQ number */ +#define LPWAIT   0x0608  /* corresponds to LP_INIT_WAIT */ +/* NOTE: LPCAREFUL is obsoleted and it' s always the default right now -arca */ +#define LPCAREFUL   0x0609  /* call with TRUE arg to require out-of-paper, off- +			    line, and error indicators good on all writes, +			    FALSE to ignore them.  Default is ignore. */ +#define LPABORTOPEN 0x060a  /* call with TRUE arg to abort open() on error, +			    FALSE to ignore error.  Default is ignore.  */ +#define LPGETSTATUS 0x060b  /* return LP_S(minor) */ +#define LPRESET     0x060c  /* reset printer */ +#ifdef LP_STATS +#define LPGETSTATS  0x060d  /* get statistics (struct lp_stats) */ +#endif +#define LPGETFLAGS  0x060e  /* get status flags */ +#define LPSETTIMEOUT 0x060f /* set parport timeout */ + +/* timeout for printk'ing a timeout, in jiffies (100ths of a second). +   This is also used for re-checking error conditions if LP_ABORT is +   not set.  This is the default behavior. */ + +#define LP_TIMEOUT_INTERRUPT	(60 * HZ) +#define LP_TIMEOUT_POLLED	(10 * HZ) + + +#endif /* _UAPI_LINUX_LP_H */ diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h new file mode 100644 index 00000000000..e15192cb9cf --- /dev/null +++ b/include/uapi/linux/magic.h @@ -0,0 +1,72 @@ +#ifndef __LINUX_MAGIC_H__ +#define __LINUX_MAGIC_H__ + +#define ADFS_SUPER_MAGIC	0xadf5 +#define AFFS_SUPER_MAGIC	0xadff +#define AFS_SUPER_MAGIC                0x5346414F +#define AUTOFS_SUPER_MAGIC	0x0187 +#define CODA_SUPER_MAGIC	0x73757245 +#define CRAMFS_MAGIC		0x28cd3d45	/* some random number */ +#define CRAMFS_MAGIC_WEND	0x453dcd28	/* magic number with the wrong endianess */ +#define DEBUGFS_MAGIC          0x64626720 +#define SECURITYFS_MAGIC	0x73636673 +#define SELINUX_MAGIC		0xf97cff8c +#define RAMFS_MAGIC		0x858458f6	/* some random number */ +#define TMPFS_MAGIC		0x01021994 +#define HUGETLBFS_MAGIC 	0x958458f6	/* some random number */ +#define SQUASHFS_MAGIC		0x73717368 +#define ECRYPTFS_SUPER_MAGIC	0xf15f +#define EFS_SUPER_MAGIC		0x414A53 +#define EXT2_SUPER_MAGIC	0xEF53 +#define EXT3_SUPER_MAGIC	0xEF53 +#define XENFS_SUPER_MAGIC	0xabba1974 +#define EXT4_SUPER_MAGIC	0xEF53 +#define BTRFS_SUPER_MAGIC	0x9123683E +#define NILFS_SUPER_MAGIC	0x3434 +#define HPFS_SUPER_MAGIC	0xf995e849 +#define ISOFS_SUPER_MAGIC	0x9660 +#define JFFS2_SUPER_MAGIC	0x72b6 +#define PSTOREFS_MAGIC		0x6165676C + +#define MINIX_SUPER_MAGIC	0x137F		/* minix v1 fs, 14 char names */ +#define MINIX_SUPER_MAGIC2	0x138F		/* minix v1 fs, 30 char names */ +#define MINIX2_SUPER_MAGIC	0x2468		/* minix v2 fs, 14 char names */ +#define MINIX2_SUPER_MAGIC2	0x2478		/* minix v2 fs, 30 char names */ +#define MINIX3_SUPER_MAGIC	0x4d5a		/* minix v3 fs, 60 char names */ + +#define MSDOS_SUPER_MAGIC	0x4d44		/* MD */ +#define NCP_SUPER_MAGIC		0x564c		/* Guess, what 0x564c is :-) */ +#define NFS_SUPER_MAGIC		0x6969 +#define OPENPROM_SUPER_MAGIC	0x9fa1 +#define QNX4_SUPER_MAGIC	0x002f		/* qnx4 fs detection */ +#define QNX6_SUPER_MAGIC	0x68191122	/* qnx6 fs detection */ + +#define REISERFS_SUPER_MAGIC	0x52654973	/* used by gcc */ +					/* used by file system utilities that +	                                   look at the superblock, etc.  */ +#define REISERFS_SUPER_MAGIC_STRING	"ReIsErFs" +#define REISER2FS_SUPER_MAGIC_STRING	"ReIsEr2Fs" +#define REISER2FS_JR_SUPER_MAGIC_STRING	"ReIsEr3Fs" + +#define SMB_SUPER_MAGIC		0x517B +#define CGROUP_SUPER_MAGIC	0x27e0eb + + +#define STACK_END_MAGIC		0x57AC6E9D + +#define V9FS_MAGIC		0x01021997 + +#define BDEVFS_MAGIC            0x62646576 +#define BINFMTFS_MAGIC          0x42494e4d +#define DEVPTS_SUPER_MAGIC	0x1cd1 +#define FUTEXFS_SUPER_MAGIC	0xBAD1DEA +#define PIPEFS_MAGIC            0x50495045 +#define PROC_SUPER_MAGIC	0x9fa0 +#define SOCKFS_MAGIC		0x534F434B +#define SYSFS_MAGIC		0x62656572 +#define USBDEVICE_SUPER_MAGIC	0x9fa2 +#define MTD_INODE_FS_MAGIC      0x11307854 +#define ANON_INODE_FS_MAGIC	0x09041934 + + +#endif /* __LINUX_MAGIC_H__ */ diff --git a/include/uapi/linux/major.h b/include/uapi/linux/major.h new file mode 100644 index 00000000000..6a8ca98c9a9 --- /dev/null +++ b/include/uapi/linux/major.h @@ -0,0 +1,177 @@ +#ifndef _LINUX_MAJOR_H +#define _LINUX_MAJOR_H + +/* + * This file has definitions for major device numbers. + * For the device number assignments, see Documentation/devices.txt. + */ + +#define UNNAMED_MAJOR		0 +#define MEM_MAJOR		1 +#define RAMDISK_MAJOR		1 +#define FLOPPY_MAJOR		2 +#define PTY_MASTER_MAJOR	2 +#define IDE0_MAJOR		3 +#define HD_MAJOR		IDE0_MAJOR +#define PTY_SLAVE_MAJOR		3 +#define TTY_MAJOR		4 +#define TTYAUX_MAJOR		5 +#define LP_MAJOR		6 +#define VCS_MAJOR		7 +#define LOOP_MAJOR		7 +#define SCSI_DISK0_MAJOR	8 +#define SCSI_TAPE_MAJOR		9 +#define MD_MAJOR		9 +#define MISC_MAJOR		10 +#define SCSI_CDROM_MAJOR	11 +#define MUX_MAJOR		11	/* PA-RISC only */ +#define XT_DISK_MAJOR		13 +#define INPUT_MAJOR		13 +#define SOUND_MAJOR		14 +#define CDU31A_CDROM_MAJOR	15 +#define JOYSTICK_MAJOR		15 +#define GOLDSTAR_CDROM_MAJOR	16 +#define OPTICS_CDROM_MAJOR	17 +#define SANYO_CDROM_MAJOR	18 +#define CYCLADES_MAJOR		19 +#define CYCLADESAUX_MAJOR	20 +#define MITSUMI_X_CDROM_MAJOR	20 +#define MFM_ACORN_MAJOR		21	/* ARM Linux /dev/mfm */ +#define SCSI_GENERIC_MAJOR	21 +#define IDE1_MAJOR		22 +#define DIGICU_MAJOR		22 +#define DIGI_MAJOR		23 +#define MITSUMI_CDROM_MAJOR	23 +#define CDU535_CDROM_MAJOR	24 +#define STL_SERIALMAJOR		24 +#define MATSUSHITA_CDROM_MAJOR	25 +#define STL_CALLOUTMAJOR	25 +#define MATSUSHITA_CDROM2_MAJOR	26 +#define QIC117_TAPE_MAJOR	27 +#define MATSUSHITA_CDROM3_MAJOR	27 +#define MATSUSHITA_CDROM4_MAJOR	28 +#define STL_SIOMEMMAJOR		28 +#define ACSI_MAJOR		28 +#define AZTECH_CDROM_MAJOR	29 +#define FB_MAJOR		29   /* /dev/fb* framebuffers */ +#define CM206_CDROM_MAJOR	32 +#define IDE2_MAJOR		33 +#define IDE3_MAJOR		34 +#define Z8530_MAJOR		34 +#define XPRAM_MAJOR		35   /* Expanded storage on S/390: "slow ram"*/ +#define NETLINK_MAJOR		36 +#define PS2ESDI_MAJOR		36 +#define IDETAPE_MAJOR		37 +#define Z2RAM_MAJOR		37 +#define APBLOCK_MAJOR		38   /* AP1000 Block device */ +#define DDV_MAJOR		39   /* AP1000 DDV block device */ +#define NBD_MAJOR		43   /* Network block device	*/ +#define RISCOM8_NORMAL_MAJOR	48 +#define DAC960_MAJOR		48   /* 48..55 */ +#define RISCOM8_CALLOUT_MAJOR	49 +#define MKISS_MAJOR		55 +#define DSP56K_MAJOR		55   /* DSP56001 processor device */ + +#define IDE4_MAJOR		56 +#define IDE5_MAJOR		57 + +#define SCSI_DISK1_MAJOR	65 +#define SCSI_DISK2_MAJOR	66 +#define SCSI_DISK3_MAJOR	67 +#define SCSI_DISK4_MAJOR	68 +#define SCSI_DISK5_MAJOR	69 +#define SCSI_DISK6_MAJOR	70 +#define SCSI_DISK7_MAJOR	71 + +#define COMPAQ_SMART2_MAJOR	72 +#define COMPAQ_SMART2_MAJOR1	73 +#define COMPAQ_SMART2_MAJOR2	74 +#define COMPAQ_SMART2_MAJOR3	75 +#define COMPAQ_SMART2_MAJOR4	76 +#define COMPAQ_SMART2_MAJOR5	77 +#define COMPAQ_SMART2_MAJOR6	78 +#define COMPAQ_SMART2_MAJOR7	79 + +#define SPECIALIX_NORMAL_MAJOR	75 +#define SPECIALIX_CALLOUT_MAJOR	76 + +#define AURORA_MAJOR		79 + +#define I2O_MAJOR		80	/* 80->87 */ + +#define SHMIQ_MAJOR		85   /* Linux/mips, SGI /dev/shmiq */ +#define SCSI_CHANGER_MAJOR      86 + +#define IDE6_MAJOR		88 +#define IDE7_MAJOR		89 +#define IDE8_MAJOR		90 +#define IDE9_MAJOR		91 + +#define DASD_MAJOR		94 + +#define MDISK_MAJOR		95 + +#define UBD_MAJOR		98 + +#define PP_MAJOR		99 +#define JSFD_MAJOR		99 + +#define PHONE_MAJOR		100 + +#define COMPAQ_CISS_MAJOR	104 +#define COMPAQ_CISS_MAJOR1	105 +#define COMPAQ_CISS_MAJOR2      106 +#define COMPAQ_CISS_MAJOR3      107 +#define COMPAQ_CISS_MAJOR4      108 +#define COMPAQ_CISS_MAJOR5      109 +#define COMPAQ_CISS_MAJOR6      110 +#define COMPAQ_CISS_MAJOR7      111 + +#define VIODASD_MAJOR		112 +#define VIOCD_MAJOR		113 + +#define ATARAID_MAJOR		114 + +#define SCSI_DISK8_MAJOR	128 +#define SCSI_DISK9_MAJOR	129 +#define SCSI_DISK10_MAJOR	130 +#define SCSI_DISK11_MAJOR	131 +#define SCSI_DISK12_MAJOR	132 +#define SCSI_DISK13_MAJOR	133 +#define SCSI_DISK14_MAJOR	134 +#define SCSI_DISK15_MAJOR	135 + +#define UNIX98_PTY_MASTER_MAJOR	128 +#define UNIX98_PTY_MAJOR_COUNT	8 +#define UNIX98_PTY_SLAVE_MAJOR	(UNIX98_PTY_MASTER_MAJOR+UNIX98_PTY_MAJOR_COUNT) + +#define DRBD_MAJOR		147 +#define RTF_MAJOR		150 +#define RAW_MAJOR		162 + +#define USB_ACM_MAJOR		166 +#define USB_ACM_AUX_MAJOR	167 +#define USB_CHAR_MAJOR		180 + +#define MMC_BLOCK_MAJOR		179 + +#define VXVM_MAJOR		199	/* VERITAS volume i/o driver    */ +#define VXSPEC_MAJOR		200	/* VERITAS volume config driver */ +#define VXDMP_MAJOR		201	/* VERITAS volume multipath driver */ + +#define XENVBD_MAJOR		202	/* Xen virtual block device */ + +#define MSR_MAJOR		202 +#define CPUID_MAJOR		203 + +#define OSST_MAJOR		206	/* OnStream-SCx0 SCSI tape */ + +#define IBM_TTY3270_MAJOR	227 +#define IBM_FS3270_MAJOR	228 + +#define VIOTAPE_MAJOR		230 + +#define BLOCK_EXT_MAJOR		259 +#define SCSI_OSD_MAJOR		260	/* open-osd's OSD scsi device */ + +#endif diff --git a/include/uapi/linux/map_to_7segment.h b/include/uapi/linux/map_to_7segment.h new file mode 100644 index 00000000000..12d62a54d47 --- /dev/null +++ b/include/uapi/linux/map_to_7segment.h @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2005 Henk Vergonet <Henk.Vergonet@gmail.com> + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef MAP_TO_7SEGMENT_H +#define MAP_TO_7SEGMENT_H + +/* This file provides translation primitives and tables for the conversion + * of (ASCII) characters to a 7-segments notation. + * + * The 7 segment's wikipedia notation below is used as standard. + * See: http://en.wikipedia.org/wiki/Seven_segment_display + * + * Notation:	+-a-+ + *		f   b + *		+-g-+ + *		e   c + *		+-d-+ + * + * Usage: + * + *   Register a map variable, and fill it with a character set: + *	static SEG7_DEFAULT_MAP(map_seg7); + * + * + *   Then use for conversion: + *	seg7 = map_to_seg7(&map_seg7, some_char); + *	... + * + * In device drivers it is recommended, if required, to make the char map + * accessible via the sysfs interface using the following scheme: + * + * static ssize_t show_map(struct device *dev, char *buf) { + *	memcpy(buf, &map_seg7, sizeof(map_seg7)); + *	return sizeof(map_seg7); + * } + * static ssize_t store_map(struct device *dev, const char *buf, size_t cnt) { + *	if(cnt != sizeof(map_seg7)) + *		return -EINVAL; + *	memcpy(&map_seg7, buf, cnt); + *	return cnt; + * } + * static DEVICE_ATTR(map_seg7, PERMS_RW, show_map, store_map); + * + * History: + * 2005-05-31	RFC linux-kernel@vger.kernel.org + */ +#include <linux/errno.h> + + +#define BIT_SEG7_A		0 +#define BIT_SEG7_B		1 +#define BIT_SEG7_C		2 +#define BIT_SEG7_D		3 +#define BIT_SEG7_E		4 +#define BIT_SEG7_F		5 +#define BIT_SEG7_G		6 +#define BIT_SEG7_RESERVED	7 + +struct seg7_conversion_map { +	unsigned char	table[128]; +}; + +static __inline__ int map_to_seg7(struct seg7_conversion_map *map, int c) +{ +	return c >= 0 && c < sizeof(map->table) ? map->table[c] : -EINVAL; +} + +#define SEG7_CONVERSION_MAP(_name, _map)	\ +	struct seg7_conversion_map _name = { .table = { _map } } + +/* + * It is recommended to use a facility that allows user space to redefine + * custom character sets for LCD devices. Please use a sysfs interface + * as described above. + */ +#define MAP_TO_SEG7_SYSFS_FILE	"map_seg7" + +/******************************************************************************* + * ASCII conversion table + ******************************************************************************/ + +#define _SEG7(l,a,b,c,d,e,f,g)	\ +      (	a<<BIT_SEG7_A |	b<<BIT_SEG7_B |	c<<BIT_SEG7_C |	d<<BIT_SEG7_D |	\ +	e<<BIT_SEG7_E |	f<<BIT_SEG7_F |	g<<BIT_SEG7_G ) + +#define _MAP_0_32_ASCII_SEG7_NON_PRINTABLE	\ +	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + +#define _MAP_33_47_ASCII_SEG7_SYMBOL		\ + _SEG7('!',0,0,0,0,1,1,0), _SEG7('"',0,1,0,0,0,1,0), _SEG7('#',0,1,1,0,1,1,0),\ + _SEG7('$',1,0,1,1,0,1,1), _SEG7('%',0,0,1,0,0,1,0), _SEG7('&',1,0,1,1,1,1,1),\ + _SEG7('\'',0,0,0,0,0,1,0),_SEG7('(',1,0,0,1,1,1,0), _SEG7(')',1,1,1,1,0,0,0),\ + _SEG7('*',0,1,1,0,1,1,1), _SEG7('+',0,1,1,0,0,0,1), _SEG7(',',0,0,0,0,1,0,0),\ + _SEG7('-',0,0,0,0,0,0,1), _SEG7('.',0,0,0,0,1,0,0), _SEG7('/',0,1,0,0,1,0,1), + +#define _MAP_48_57_ASCII_SEG7_NUMERIC		\ + _SEG7('0',1,1,1,1,1,1,0), _SEG7('1',0,1,1,0,0,0,0), _SEG7('2',1,1,0,1,1,0,1),\ + _SEG7('3',1,1,1,1,0,0,1), _SEG7('4',0,1,1,0,0,1,1), _SEG7('5',1,0,1,1,0,1,1),\ + _SEG7('6',1,0,1,1,1,1,1), _SEG7('7',1,1,1,0,0,0,0), _SEG7('8',1,1,1,1,1,1,1),\ + _SEG7('9',1,1,1,1,0,1,1), + +#define _MAP_58_64_ASCII_SEG7_SYMBOL		\ + _SEG7(':',0,0,0,1,0,0,1), _SEG7(';',0,0,0,1,0,0,1), _SEG7('<',1,0,0,0,0,1,1),\ + _SEG7('=',0,0,0,1,0,0,1), _SEG7('>',1,1,0,0,0,0,1), _SEG7('?',1,1,1,0,0,1,0),\ + _SEG7('@',1,1,0,1,1,1,1), + +#define _MAP_65_90_ASCII_SEG7_ALPHA_UPPR	\ + _SEG7('A',1,1,1,0,1,1,1), _SEG7('B',1,1,1,1,1,1,1), _SEG7('C',1,0,0,1,1,1,0),\ + _SEG7('D',1,1,1,1,1,1,0), _SEG7('E',1,0,0,1,1,1,1), _SEG7('F',1,0,0,0,1,1,1),\ + _SEG7('G',1,1,1,1,0,1,1), _SEG7('H',0,1,1,0,1,1,1), _SEG7('I',0,1,1,0,0,0,0),\ + _SEG7('J',0,1,1,1,0,0,0), _SEG7('K',0,1,1,0,1,1,1), _SEG7('L',0,0,0,1,1,1,0),\ + _SEG7('M',1,1,1,0,1,1,0), _SEG7('N',1,1,1,0,1,1,0), _SEG7('O',1,1,1,1,1,1,0),\ + _SEG7('P',1,1,0,0,1,1,1), _SEG7('Q',1,1,1,1,1,1,0), _SEG7('R',1,1,1,0,1,1,1),\ + _SEG7('S',1,0,1,1,0,1,1), _SEG7('T',0,0,0,1,1,1,1), _SEG7('U',0,1,1,1,1,1,0),\ + _SEG7('V',0,1,1,1,1,1,0), _SEG7('W',0,1,1,1,1,1,1), _SEG7('X',0,1,1,0,1,1,1),\ + _SEG7('Y',0,1,1,0,0,1,1), _SEG7('Z',1,1,0,1,1,0,1), + +#define _MAP_91_96_ASCII_SEG7_SYMBOL		\ + _SEG7('[',1,0,0,1,1,1,0), _SEG7('\\',0,0,1,0,0,1,1),_SEG7(']',1,1,1,1,0,0,0),\ + _SEG7('^',1,1,0,0,0,1,0), _SEG7('_',0,0,0,1,0,0,0), _SEG7('`',0,1,0,0,0,0,0), + +#define _MAP_97_122_ASCII_SEG7_ALPHA_LOWER	\ + _SEG7('A',1,1,1,0,1,1,1), _SEG7('b',0,0,1,1,1,1,1), _SEG7('c',0,0,0,1,1,0,1),\ + _SEG7('d',0,1,1,1,1,0,1), _SEG7('E',1,0,0,1,1,1,1), _SEG7('F',1,0,0,0,1,1,1),\ + _SEG7('G',1,1,1,1,0,1,1), _SEG7('h',0,0,1,0,1,1,1), _SEG7('i',0,0,1,0,0,0,0),\ + _SEG7('j',0,0,1,1,0,0,0), _SEG7('k',0,0,1,0,1,1,1), _SEG7('L',0,0,0,1,1,1,0),\ + _SEG7('M',1,1,1,0,1,1,0), _SEG7('n',0,0,1,0,1,0,1), _SEG7('o',0,0,1,1,1,0,1),\ + _SEG7('P',1,1,0,0,1,1,1), _SEG7('q',1,1,1,0,0,1,1), _SEG7('r',0,0,0,0,1,0,1),\ + _SEG7('S',1,0,1,1,0,1,1), _SEG7('T',0,0,0,1,1,1,1), _SEG7('u',0,0,1,1,1,0,0),\ + _SEG7('v',0,0,1,1,1,0,0), _SEG7('W',0,1,1,1,1,1,1), _SEG7('X',0,1,1,0,1,1,1),\ + _SEG7('y',0,1,1,1,0,1,1), _SEG7('Z',1,1,0,1,1,0,1), + +#define _MAP_123_126_ASCII_SEG7_SYMBOL		\ + _SEG7('{',1,0,0,1,1,1,0), _SEG7('|',0,0,0,0,1,1,0), _SEG7('}',1,1,1,1,0,0,0),\ + _SEG7('~',1,0,0,0,0,0,0), + +/* Maps */ + +/* This set tries to map as close as possible to the visible characteristics + * of the ASCII symbol, lowercase and uppercase letters may differ in + * presentation on the display. + */ +#define MAP_ASCII7SEG_ALPHANUM			\ +	_MAP_0_32_ASCII_SEG7_NON_PRINTABLE	\ +	_MAP_33_47_ASCII_SEG7_SYMBOL		\ +	_MAP_48_57_ASCII_SEG7_NUMERIC		\ +	_MAP_58_64_ASCII_SEG7_SYMBOL		\ +	_MAP_65_90_ASCII_SEG7_ALPHA_UPPR	\ +	_MAP_91_96_ASCII_SEG7_SYMBOL		\ +	_MAP_97_122_ASCII_SEG7_ALPHA_LOWER	\ +	_MAP_123_126_ASCII_SEG7_SYMBOL + +/* This set tries to map as close as possible to the symbolic characteristics + * of the ASCII character for maximum discrimination. + * For now this means all alpha chars are in lower case representations. + * (This for example facilitates the use of hex numbers with uppercase input.) + */ +#define MAP_ASCII7SEG_ALPHANUM_LC			\ +	_MAP_0_32_ASCII_SEG7_NON_PRINTABLE	\ +	_MAP_33_47_ASCII_SEG7_SYMBOL		\ +	_MAP_48_57_ASCII_SEG7_NUMERIC		\ +	_MAP_58_64_ASCII_SEG7_SYMBOL		\ +	_MAP_97_122_ASCII_SEG7_ALPHA_LOWER	\ +	_MAP_91_96_ASCII_SEG7_SYMBOL		\ +	_MAP_97_122_ASCII_SEG7_ALPHA_LOWER	\ +	_MAP_123_126_ASCII_SEG7_SYMBOL + +#define SEG7_DEFAULT_MAP(_name)		\ +	SEG7_CONVERSION_MAP(_name,MAP_ASCII7SEG_ALPHANUM) + +#endif	/* MAP_TO_7SEGMENT_H */ + diff --git a/include/uapi/linux/matroxfb.h b/include/uapi/linux/matroxfb.h new file mode 100644 index 00000000000..8c22a893864 --- /dev/null +++ b/include/uapi/linux/matroxfb.h @@ -0,0 +1,42 @@ +#ifndef __LINUX_MATROXFB_H__ +#define __LINUX_MATROXFB_H__ + +#include <asm/ioctl.h> +#include <linux/types.h> +#include <linux/videodev2.h> +#include <linux/fb.h> + +struct matroxioc_output_mode { +	__u32	output;		/* which output */ +#define MATROXFB_OUTPUT_PRIMARY		0x0000 +#define MATROXFB_OUTPUT_SECONDARY	0x0001 +#define MATROXFB_OUTPUT_DFP		0x0002 +	__u32	mode;		/* which mode */ +#define MATROXFB_OUTPUT_MODE_PAL	0x0001 +#define MATROXFB_OUTPUT_MODE_NTSC	0x0002 +#define MATROXFB_OUTPUT_MODE_MONITOR	0x0080 +}; +#define MATROXFB_SET_OUTPUT_MODE	_IOW('n',0xFA,size_t) +#define MATROXFB_GET_OUTPUT_MODE	_IOWR('n',0xFA,size_t) + +/* bitfield */ +#define MATROXFB_OUTPUT_CONN_PRIMARY	(1 << MATROXFB_OUTPUT_PRIMARY) +#define MATROXFB_OUTPUT_CONN_SECONDARY	(1 << MATROXFB_OUTPUT_SECONDARY) +#define MATROXFB_OUTPUT_CONN_DFP	(1 << MATROXFB_OUTPUT_DFP) +/* connect these outputs to this framebuffer */ +#define MATROXFB_SET_OUTPUT_CONNECTION	_IOW('n',0xF8,size_t) +/* which outputs are connected to this framebuffer */ +#define MATROXFB_GET_OUTPUT_CONNECTION	_IOR('n',0xF8,size_t) +/* which outputs are available for this framebuffer */ +#define MATROXFB_GET_AVAILABLE_OUTPUTS	_IOR('n',0xF9,size_t) +/* which outputs exist on this framebuffer */ +#define MATROXFB_GET_ALL_OUTPUTS	_IOR('n',0xFB,size_t) + +enum matroxfb_ctrl_id { +  MATROXFB_CID_TESTOUT	 = V4L2_CID_PRIVATE_BASE, +  MATROXFB_CID_DEFLICKER, +  MATROXFB_CID_LAST +}; + +#endif + diff --git a/include/uapi/linux/mdio.h b/include/uapi/linux/mdio.h new file mode 100644 index 00000000000..c94a510a577 --- /dev/null +++ b/include/uapi/linux/mdio.h @@ -0,0 +1,297 @@ +/* + * linux/mdio.h: definitions for MDIO (clause 45) transceivers + * Copyright 2006-2009 Solarflare Communications Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation, incorporated herein by reference. + */ + +#ifndef _UAPI__LINUX_MDIO_H__ +#define _UAPI__LINUX_MDIO_H__ + +#include <linux/types.h> +#include <linux/mii.h> + +/* MDIO Manageable Devices (MMDs). */ +#define MDIO_MMD_PMAPMD		1	/* Physical Medium Attachment/ +					 * Physical Medium Dependent */ +#define MDIO_MMD_WIS		2	/* WAN Interface Sublayer */ +#define MDIO_MMD_PCS		3	/* Physical Coding Sublayer */ +#define MDIO_MMD_PHYXS		4	/* PHY Extender Sublayer */ +#define MDIO_MMD_DTEXS		5	/* DTE Extender Sublayer */ +#define MDIO_MMD_TC		6	/* Transmission Convergence */ +#define MDIO_MMD_AN		7	/* Auto-Negotiation */ +#define MDIO_MMD_C22EXT		29	/* Clause 22 extension */ +#define MDIO_MMD_VEND1		30	/* Vendor specific 1 */ +#define MDIO_MMD_VEND2		31	/* Vendor specific 2 */ + +/* Generic MDIO registers. */ +#define MDIO_CTRL1		MII_BMCR +#define MDIO_STAT1		MII_BMSR +#define MDIO_DEVID1		MII_PHYSID1 +#define MDIO_DEVID2		MII_PHYSID2 +#define MDIO_SPEED		4	/* Speed ability */ +#define MDIO_DEVS1		5	/* Devices in package */ +#define MDIO_DEVS2		6 +#define MDIO_CTRL2		7	/* 10G control 2 */ +#define MDIO_STAT2		8	/* 10G status 2 */ +#define MDIO_PMA_TXDIS		9	/* 10G PMA/PMD transmit disable */ +#define MDIO_PMA_RXDET		10	/* 10G PMA/PMD receive signal detect */ +#define MDIO_PMA_EXTABLE	11	/* 10G PMA/PMD extended ability */ +#define MDIO_PKGID1		14	/* Package identifier */ +#define MDIO_PKGID2		15 +#define MDIO_AN_ADVERTISE	16	/* AN advertising (base page) */ +#define MDIO_AN_LPA		19	/* AN LP abilities (base page) */ +#define MDIO_PCS_EEE_ABLE	20	/* EEE Capability register */ +#define MDIO_PCS_EEE_WK_ERR	22	/* EEE wake error counter */ +#define MDIO_PHYXS_LNSTAT	24	/* PHY XGXS lane state */ +#define MDIO_AN_EEE_ADV		60	/* EEE advertisement */ +#define MDIO_AN_EEE_LPABLE	61	/* EEE link partner ability */ + +/* Media-dependent registers. */ +#define MDIO_PMA_10GBT_SWAPPOL	130	/* 10GBASE-T pair swap & polarity */ +#define MDIO_PMA_10GBT_TXPWR	131	/* 10GBASE-T TX power control */ +#define MDIO_PMA_10GBT_SNR	133	/* 10GBASE-T SNR margin, lane A. +					 * Lanes B-D are numbered 134-136. */ +#define MDIO_PMA_10GBR_FECABLE	170	/* 10GBASE-R FEC ability */ +#define MDIO_PCS_10GBX_STAT1	24	/* 10GBASE-X PCS status 1 */ +#define MDIO_PCS_10GBRT_STAT1	32	/* 10GBASE-R/-T PCS status 1 */ +#define MDIO_PCS_10GBRT_STAT2	33	/* 10GBASE-R/-T PCS status 2 */ +#define MDIO_AN_10GBT_CTRL	32	/* 10GBASE-T auto-negotiation control */ +#define MDIO_AN_10GBT_STAT	33	/* 10GBASE-T auto-negotiation status */ + +/* LASI (Link Alarm Status Interrupt) registers, defined by XENPAK MSA. */ +#define MDIO_PMA_LASI_RXCTRL	0x9000	/* RX_ALARM control */ +#define MDIO_PMA_LASI_TXCTRL	0x9001	/* TX_ALARM control */ +#define MDIO_PMA_LASI_CTRL	0x9002	/* LASI control */ +#define MDIO_PMA_LASI_RXSTAT	0x9003	/* RX_ALARM status */ +#define MDIO_PMA_LASI_TXSTAT	0x9004	/* TX_ALARM status */ +#define MDIO_PMA_LASI_STAT	0x9005	/* LASI status */ + +/* Control register 1. */ +/* Enable extended speed selection */ +#define MDIO_CTRL1_SPEEDSELEXT		(BMCR_SPEED1000 | BMCR_SPEED100) +/* All speed selection bits */ +#define MDIO_CTRL1_SPEEDSEL		(MDIO_CTRL1_SPEEDSELEXT | 0x003c) +#define MDIO_CTRL1_FULLDPLX		BMCR_FULLDPLX +#define MDIO_CTRL1_LPOWER		BMCR_PDOWN +#define MDIO_CTRL1_RESET		BMCR_RESET +#define MDIO_PMA_CTRL1_LOOPBACK		0x0001 +#define MDIO_PMA_CTRL1_SPEED1000	BMCR_SPEED1000 +#define MDIO_PMA_CTRL1_SPEED100		BMCR_SPEED100 +#define MDIO_PCS_CTRL1_LOOPBACK		BMCR_LOOPBACK +#define MDIO_PHYXS_CTRL1_LOOPBACK	BMCR_LOOPBACK +#define MDIO_AN_CTRL1_RESTART		BMCR_ANRESTART +#define MDIO_AN_CTRL1_ENABLE		BMCR_ANENABLE +#define MDIO_AN_CTRL1_XNP		0x2000	/* Enable extended next page */ +#define MDIO_PCS_CTRL1_CLKSTOP_EN	0x400	/* Stop the clock during LPI */ + +/* 10 Gb/s */ +#define MDIO_CTRL1_SPEED10G		(MDIO_CTRL1_SPEEDSELEXT | 0x00) +/* 10PASS-TS/2BASE-TL */ +#define MDIO_CTRL1_SPEED10P2B		(MDIO_CTRL1_SPEEDSELEXT | 0x04) + +/* Status register 1. */ +#define MDIO_STAT1_LPOWERABLE		0x0002	/* Low-power ability */ +#define MDIO_STAT1_LSTATUS		BMSR_LSTATUS +#define MDIO_STAT1_FAULT		0x0080	/* Fault */ +#define MDIO_AN_STAT1_LPABLE		0x0001	/* Link partner AN ability */ +#define MDIO_AN_STAT1_ABLE		BMSR_ANEGCAPABLE +#define MDIO_AN_STAT1_RFAULT		BMSR_RFAULT +#define MDIO_AN_STAT1_COMPLETE		BMSR_ANEGCOMPLETE +#define MDIO_AN_STAT1_PAGE		0x0040	/* Page received */ +#define MDIO_AN_STAT1_XNP		0x0080	/* Extended next page status */ + +/* Speed register. */ +#define MDIO_SPEED_10G			0x0001	/* 10G capable */ +#define MDIO_PMA_SPEED_2B		0x0002	/* 2BASE-TL capable */ +#define MDIO_PMA_SPEED_10P		0x0004	/* 10PASS-TS capable */ +#define MDIO_PMA_SPEED_1000		0x0010	/* 1000M capable */ +#define MDIO_PMA_SPEED_100		0x0020	/* 100M capable */ +#define MDIO_PMA_SPEED_10		0x0040	/* 10M capable */ +#define MDIO_PCS_SPEED_10P2B		0x0002	/* 10PASS-TS/2BASE-TL capable */ + +/* Device present registers. */ +#define MDIO_DEVS_PRESENT(devad)	(1 << (devad)) +#define MDIO_DEVS_PMAPMD		MDIO_DEVS_PRESENT(MDIO_MMD_PMAPMD) +#define MDIO_DEVS_WIS			MDIO_DEVS_PRESENT(MDIO_MMD_WIS) +#define MDIO_DEVS_PCS			MDIO_DEVS_PRESENT(MDIO_MMD_PCS) +#define MDIO_DEVS_PHYXS			MDIO_DEVS_PRESENT(MDIO_MMD_PHYXS) +#define MDIO_DEVS_DTEXS			MDIO_DEVS_PRESENT(MDIO_MMD_DTEXS) +#define MDIO_DEVS_TC			MDIO_DEVS_PRESENT(MDIO_MMD_TC) +#define MDIO_DEVS_AN			MDIO_DEVS_PRESENT(MDIO_MMD_AN) +#define MDIO_DEVS_C22EXT		MDIO_DEVS_PRESENT(MDIO_MMD_C22EXT) + +/* Control register 2. */ +#define MDIO_PMA_CTRL2_TYPE		0x000f	/* PMA/PMD type selection */ +#define MDIO_PMA_CTRL2_10GBCX4		0x0000	/* 10GBASE-CX4 type */ +#define MDIO_PMA_CTRL2_10GBEW		0x0001	/* 10GBASE-EW type */ +#define MDIO_PMA_CTRL2_10GBLW		0x0002	/* 10GBASE-LW type */ +#define MDIO_PMA_CTRL2_10GBSW		0x0003	/* 10GBASE-SW type */ +#define MDIO_PMA_CTRL2_10GBLX4		0x0004	/* 10GBASE-LX4 type */ +#define MDIO_PMA_CTRL2_10GBER		0x0005	/* 10GBASE-ER type */ +#define MDIO_PMA_CTRL2_10GBLR		0x0006	/* 10GBASE-LR type */ +#define MDIO_PMA_CTRL2_10GBSR		0x0007	/* 10GBASE-SR type */ +#define MDIO_PMA_CTRL2_10GBLRM		0x0008	/* 10GBASE-LRM type */ +#define MDIO_PMA_CTRL2_10GBT		0x0009	/* 10GBASE-T type */ +#define MDIO_PMA_CTRL2_10GBKX4		0x000a	/* 10GBASE-KX4 type */ +#define MDIO_PMA_CTRL2_10GBKR		0x000b	/* 10GBASE-KR type */ +#define MDIO_PMA_CTRL2_1000BT		0x000c	/* 1000BASE-T type */ +#define MDIO_PMA_CTRL2_1000BKX		0x000d	/* 1000BASE-KX type */ +#define MDIO_PMA_CTRL2_100BTX		0x000e	/* 100BASE-TX type */ +#define MDIO_PMA_CTRL2_10BT		0x000f	/* 10BASE-T type */ +#define MDIO_PCS_CTRL2_TYPE		0x0003	/* PCS type selection */ +#define MDIO_PCS_CTRL2_10GBR		0x0000	/* 10GBASE-R type */ +#define MDIO_PCS_CTRL2_10GBX		0x0001	/* 10GBASE-X type */ +#define MDIO_PCS_CTRL2_10GBW		0x0002	/* 10GBASE-W type */ +#define MDIO_PCS_CTRL2_10GBT		0x0003	/* 10GBASE-T type */ + +/* Status register 2. */ +#define MDIO_STAT2_RXFAULT		0x0400	/* Receive fault */ +#define MDIO_STAT2_TXFAULT		0x0800	/* Transmit fault */ +#define MDIO_STAT2_DEVPRST		0xc000	/* Device present */ +#define MDIO_STAT2_DEVPRST_VAL		0x8000	/* Device present value */ +#define MDIO_PMA_STAT2_LBABLE		0x0001	/* PMA loopback ability */ +#define MDIO_PMA_STAT2_10GBEW		0x0002	/* 10GBASE-EW ability */ +#define MDIO_PMA_STAT2_10GBLW		0x0004	/* 10GBASE-LW ability */ +#define MDIO_PMA_STAT2_10GBSW		0x0008	/* 10GBASE-SW ability */ +#define MDIO_PMA_STAT2_10GBLX4		0x0010	/* 10GBASE-LX4 ability */ +#define MDIO_PMA_STAT2_10GBER		0x0020	/* 10GBASE-ER ability */ +#define MDIO_PMA_STAT2_10GBLR		0x0040	/* 10GBASE-LR ability */ +#define MDIO_PMA_STAT2_10GBSR		0x0080	/* 10GBASE-SR ability */ +#define MDIO_PMD_STAT2_TXDISAB		0x0100	/* PMD TX disable ability */ +#define MDIO_PMA_STAT2_EXTABLE		0x0200	/* Extended abilities */ +#define MDIO_PMA_STAT2_RXFLTABLE	0x1000	/* Receive fault ability */ +#define MDIO_PMA_STAT2_TXFLTABLE	0x2000	/* Transmit fault ability */ +#define MDIO_PCS_STAT2_10GBR		0x0001	/* 10GBASE-R capable */ +#define MDIO_PCS_STAT2_10GBX		0x0002	/* 10GBASE-X capable */ +#define MDIO_PCS_STAT2_10GBW		0x0004	/* 10GBASE-W capable */ +#define MDIO_PCS_STAT2_RXFLTABLE	0x1000	/* Receive fault ability */ +#define MDIO_PCS_STAT2_TXFLTABLE	0x2000	/* Transmit fault ability */ + +/* Transmit disable register. */ +#define MDIO_PMD_TXDIS_GLOBAL		0x0001	/* Global PMD TX disable */ +#define MDIO_PMD_TXDIS_0		0x0002	/* PMD TX disable 0 */ +#define MDIO_PMD_TXDIS_1		0x0004	/* PMD TX disable 1 */ +#define MDIO_PMD_TXDIS_2		0x0008	/* PMD TX disable 2 */ +#define MDIO_PMD_TXDIS_3		0x0010	/* PMD TX disable 3 */ + +/* Receive signal detect register. */ +#define MDIO_PMD_RXDET_GLOBAL		0x0001	/* Global PMD RX signal detect */ +#define MDIO_PMD_RXDET_0		0x0002	/* PMD RX signal detect 0 */ +#define MDIO_PMD_RXDET_1		0x0004	/* PMD RX signal detect 1 */ +#define MDIO_PMD_RXDET_2		0x0008	/* PMD RX signal detect 2 */ +#define MDIO_PMD_RXDET_3		0x0010	/* PMD RX signal detect 3 */ + +/* Extended abilities register. */ +#define MDIO_PMA_EXTABLE_10GCX4		0x0001	/* 10GBASE-CX4 ability */ +#define MDIO_PMA_EXTABLE_10GBLRM	0x0002	/* 10GBASE-LRM ability */ +#define MDIO_PMA_EXTABLE_10GBT		0x0004	/* 10GBASE-T ability */ +#define MDIO_PMA_EXTABLE_10GBKX4	0x0008	/* 10GBASE-KX4 ability */ +#define MDIO_PMA_EXTABLE_10GBKR		0x0010	/* 10GBASE-KR ability */ +#define MDIO_PMA_EXTABLE_1000BT		0x0020	/* 1000BASE-T ability */ +#define MDIO_PMA_EXTABLE_1000BKX	0x0040	/* 1000BASE-KX ability */ +#define MDIO_PMA_EXTABLE_100BTX		0x0080	/* 100BASE-TX ability */ +#define MDIO_PMA_EXTABLE_10BT		0x0100	/* 10BASE-T ability */ + +/* PHY XGXS lane state register. */ +#define MDIO_PHYXS_LNSTAT_SYNC0		0x0001 +#define MDIO_PHYXS_LNSTAT_SYNC1		0x0002 +#define MDIO_PHYXS_LNSTAT_SYNC2		0x0004 +#define MDIO_PHYXS_LNSTAT_SYNC3		0x0008 +#define MDIO_PHYXS_LNSTAT_ALIGN		0x1000 + +/* PMA 10GBASE-T pair swap & polarity */ +#define MDIO_PMA_10GBT_SWAPPOL_ABNX	0x0001	/* Pair A/B uncrossed */ +#define MDIO_PMA_10GBT_SWAPPOL_CDNX	0x0002	/* Pair C/D uncrossed */ +#define MDIO_PMA_10GBT_SWAPPOL_AREV	0x0100	/* Pair A polarity reversed */ +#define MDIO_PMA_10GBT_SWAPPOL_BREV	0x0200	/* Pair B polarity reversed */ +#define MDIO_PMA_10GBT_SWAPPOL_CREV	0x0400	/* Pair C polarity reversed */ +#define MDIO_PMA_10GBT_SWAPPOL_DREV	0x0800	/* Pair D polarity reversed */ + +/* PMA 10GBASE-T TX power register. */ +#define MDIO_PMA_10GBT_TXPWR_SHORT	0x0001	/* Short-reach mode */ + +/* PMA 10GBASE-T SNR registers. */ +/* Value is SNR margin in dB, clamped to range [-127, 127], plus 0x8000. */ +#define MDIO_PMA_10GBT_SNR_BIAS		0x8000 +#define MDIO_PMA_10GBT_SNR_MAX		127 + +/* PMA 10GBASE-R FEC ability register. */ +#define MDIO_PMA_10GBR_FECABLE_ABLE	0x0001	/* FEC ability */ +#define MDIO_PMA_10GBR_FECABLE_ERRABLE	0x0002	/* FEC error indic. ability */ + +/* PCS 10GBASE-R/-T status register 1. */ +#define MDIO_PCS_10GBRT_STAT1_BLKLK	0x0001	/* Block lock attained */ + +/* PCS 10GBASE-R/-T status register 2. */ +#define MDIO_PCS_10GBRT_STAT2_ERR	0x00ff +#define MDIO_PCS_10GBRT_STAT2_BER	0x3f00 + +/* AN 10GBASE-T control register. */ +#define MDIO_AN_10GBT_CTRL_ADV10G	0x1000	/* Advertise 10GBASE-T */ + +/* AN 10GBASE-T status register. */ +#define MDIO_AN_10GBT_STAT_LPTRR	0x0200	/* LP training reset req. */ +#define MDIO_AN_10GBT_STAT_LPLTABLE	0x0400	/* LP loop timing ability */ +#define MDIO_AN_10GBT_STAT_LP10G	0x0800	/* LP is 10GBT capable */ +#define MDIO_AN_10GBT_STAT_REMOK	0x1000	/* Remote OK */ +#define MDIO_AN_10GBT_STAT_LOCOK	0x2000	/* Local OK */ +#define MDIO_AN_10GBT_STAT_MS		0x4000	/* Master/slave config */ +#define MDIO_AN_10GBT_STAT_MSFLT	0x8000	/* Master/slave config fault */ + +/* EEE Supported/Advertisement/LP Advertisement registers. + * + * EEE capability Register (3.20), Advertisement (7.60) and + * Link partner ability (7.61) registers have and can use the same identical + * bit masks. + */ +#define MDIO_AN_EEE_ADV_100TX	0x0002	/* Advertise 100TX EEE cap */ +#define MDIO_AN_EEE_ADV_1000T	0x0004	/* Advertise 1000T EEE cap */ +/* Note: the two defines above can be potentially used by the user-land + * and cannot remove them now. + * So, we define the new generic MDIO_EEE_100TX and MDIO_EEE_1000T macros + * using the previous ones (that can be considered obsolete). + */ +#define MDIO_EEE_100TX		MDIO_AN_EEE_ADV_100TX	/* 100TX EEE cap */ +#define MDIO_EEE_1000T		MDIO_AN_EEE_ADV_1000T	/* 1000T EEE cap */ +#define MDIO_EEE_10GT		0x0008	/* 10GT EEE cap */ +#define MDIO_EEE_1000KX		0x0010	/* 1000KX EEE cap */ +#define MDIO_EEE_10GKX4		0x0020	/* 10G KX4 EEE cap */ +#define MDIO_EEE_10GKR		0x0040	/* 10G KR EEE cap */ + +/* LASI RX_ALARM control/status registers. */ +#define MDIO_PMA_LASI_RX_PHYXSLFLT	0x0001	/* PHY XS RX local fault */ +#define MDIO_PMA_LASI_RX_PCSLFLT	0x0008	/* PCS RX local fault */ +#define MDIO_PMA_LASI_RX_PMALFLT	0x0010	/* PMA/PMD RX local fault */ +#define MDIO_PMA_LASI_RX_OPTICPOWERFLT	0x0020	/* RX optical power fault */ +#define MDIO_PMA_LASI_RX_WISLFLT	0x0200	/* WIS local fault */ + +/* LASI TX_ALARM control/status registers. */ +#define MDIO_PMA_LASI_TX_PHYXSLFLT	0x0001	/* PHY XS TX local fault */ +#define MDIO_PMA_LASI_TX_PCSLFLT	0x0008	/* PCS TX local fault */ +#define MDIO_PMA_LASI_TX_PMALFLT	0x0010	/* PMA/PMD TX local fault */ +#define MDIO_PMA_LASI_TX_LASERPOWERFLT	0x0080	/* Laser output power fault */ +#define MDIO_PMA_LASI_TX_LASERTEMPFLT	0x0100	/* Laser temperature fault */ +#define MDIO_PMA_LASI_TX_LASERBICURRFLT	0x0200	/* Laser bias current fault */ + +/* LASI control/status registers. */ +#define MDIO_PMA_LASI_LSALARM		0x0001	/* LS_ALARM enable/status */ +#define MDIO_PMA_LASI_TXALARM		0x0002	/* TX_ALARM enable/status */ +#define MDIO_PMA_LASI_RXALARM		0x0004	/* RX_ALARM enable/status */ + +/* Mapping between MDIO PRTAD/DEVAD and mii_ioctl_data::phy_id */ + +#define MDIO_PHY_ID_C45			0x8000 +#define MDIO_PHY_ID_PRTAD		0x03e0 +#define MDIO_PHY_ID_DEVAD		0x001f +#define MDIO_PHY_ID_C45_MASK						\ +	(MDIO_PHY_ID_C45 | MDIO_PHY_ID_PRTAD | MDIO_PHY_ID_DEVAD) + +static inline __u16 mdio_phy_id_c45(int prtad, int devad) +{ +	return MDIO_PHY_ID_C45 | (prtad << 5) | devad; +} + +#endif /* _UAPI__LINUX_MDIO_H__ */ diff --git a/include/uapi/linux/media.h b/include/uapi/linux/media.h new file mode 100644 index 00000000000..0ef883327de --- /dev/null +++ b/include/uapi/linux/media.h @@ -0,0 +1,132 @@ +/* + * Multimedia device API + * + * Copyright (C) 2010 Nokia Corporation + * + * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com> + *	     Sakari Ailus <sakari.ailus@iki.fi> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + */ + +#ifndef __LINUX_MEDIA_H +#define __LINUX_MEDIA_H + +#include <linux/ioctl.h> +#include <linux/types.h> +#include <linux/version.h> + +#define MEDIA_API_VERSION	KERNEL_VERSION(0, 1, 0) + +struct media_device_info { +	char driver[16]; +	char model[32]; +	char serial[40]; +	char bus_info[32]; +	__u32 media_version; +	__u32 hw_revision; +	__u32 driver_version; +	__u32 reserved[31]; +}; + +#define MEDIA_ENT_ID_FLAG_NEXT		(1 << 31) + +#define MEDIA_ENT_TYPE_SHIFT		16 +#define MEDIA_ENT_TYPE_MASK		0x00ff0000 +#define MEDIA_ENT_SUBTYPE_MASK		0x0000ffff + +#define MEDIA_ENT_T_DEVNODE		(1 << MEDIA_ENT_TYPE_SHIFT) +#define MEDIA_ENT_T_DEVNODE_V4L		(MEDIA_ENT_T_DEVNODE + 1) +#define MEDIA_ENT_T_DEVNODE_FB		(MEDIA_ENT_T_DEVNODE + 2) +#define MEDIA_ENT_T_DEVNODE_ALSA	(MEDIA_ENT_T_DEVNODE + 3) +#define MEDIA_ENT_T_DEVNODE_DVB		(MEDIA_ENT_T_DEVNODE + 4) + +#define MEDIA_ENT_T_V4L2_SUBDEV		(2 << MEDIA_ENT_TYPE_SHIFT) +#define MEDIA_ENT_T_V4L2_SUBDEV_SENSOR	(MEDIA_ENT_T_V4L2_SUBDEV + 1) +#define MEDIA_ENT_T_V4L2_SUBDEV_FLASH	(MEDIA_ENT_T_V4L2_SUBDEV + 2) +#define MEDIA_ENT_T_V4L2_SUBDEV_LENS	(MEDIA_ENT_T_V4L2_SUBDEV + 3) + +#define MEDIA_ENT_FL_DEFAULT		(1 << 0) + +struct media_entity_desc { +	__u32 id; +	char name[32]; +	__u32 type; +	__u32 revision; +	__u32 flags; +	__u32 group_id; +	__u16 pads; +	__u16 links; + +	__u32 reserved[4]; + +	union { +		/* Node specifications */ +		struct { +			__u32 major; +			__u32 minor; +		} v4l; +		struct { +			__u32 major; +			__u32 minor; +		} fb; +		struct { +			__u32 card; +			__u32 device; +			__u32 subdevice; +		} alsa; +		int dvb; + +		/* Sub-device specifications */ +		/* Nothing needed yet */ +		__u8 raw[184]; +	}; +}; + +#define MEDIA_PAD_FL_SINK		(1 << 0) +#define MEDIA_PAD_FL_SOURCE		(1 << 1) + +struct media_pad_desc { +	__u32 entity;		/* entity ID */ +	__u16 index;		/* pad index */ +	__u32 flags;		/* pad flags */ +	__u32 reserved[2]; +}; + +#define MEDIA_LNK_FL_ENABLED		(1 << 0) +#define MEDIA_LNK_FL_IMMUTABLE		(1 << 1) +#define MEDIA_LNK_FL_DYNAMIC		(1 << 2) + +struct media_link_desc { +	struct media_pad_desc source; +	struct media_pad_desc sink; +	__u32 flags; +	__u32 reserved[2]; +}; + +struct media_links_enum { +	__u32 entity; +	/* Should have enough room for pads elements */ +	struct media_pad_desc __user *pads; +	/* Should have enough room for links elements */ +	struct media_link_desc __user *links; +	__u32 reserved[4]; +}; + +#define MEDIA_IOC_DEVICE_INFO		_IOWR('|', 0x00, struct media_device_info) +#define MEDIA_IOC_ENUM_ENTITIES		_IOWR('|', 0x01, struct media_entity_desc) +#define MEDIA_IOC_ENUM_LINKS		_IOWR('|', 0x02, struct media_links_enum) +#define MEDIA_IOC_SETUP_LINK		_IOWR('|', 0x03, struct media_link_desc) + +#endif /* __LINUX_MEDIA_H */ diff --git a/include/uapi/linux/mei.h b/include/uapi/linux/mei.h new file mode 100644 index 00000000000..bc0d8b69c49 --- /dev/null +++ b/include/uapi/linux/mei.h @@ -0,0 +1,110 @@ +/****************************************************************************** + * Intel Management Engine Interface (Intel MEI) Linux driver + * Intel MEI Interface Header + * + * This file is provided under a dual BSD/GPLv2 license.  When using or + * redistributing this file, you may do so under either license. + * + * GPL LICENSE SUMMARY + * + * Copyright(c) 2003 - 2012 Intel Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110, + * USA + * + * The full GNU General Public License is included in this distribution + * in the file called LICENSE.GPL. + * + * Contact Information: + *	Intel Corporation. + *	linux-mei@linux.intel.com + *	http://www.intel.com + * + * BSD LICENSE + * + * Copyright(c) 2003 - 2012 Intel Corporation. All rights reserved. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + *  * Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + *  * Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in + *    the documentation and/or other materials provided with the + *    distribution. + *  * Neither the name Intel Corporation nor the names of its + *    contributors may be used to endorse or promote products derived + *    from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *****************************************************************************/ + +#ifndef _LINUX_MEI_H +#define _LINUX_MEI_H + +#include <linux/uuid.h> + +/* + * This IOCTL is used to associate the current file descriptor with a + * FW Client (given by UUID). This opens a communication channel + * between a host client and a FW client. From this point every read and write + * will communicate with the associated FW client. + * Only in close() (file_operation release()) the communication between + * the clients is disconnected + * + * The IOCTL argument is a struct with a union that contains + * the input parameter and the output parameter for this IOCTL. + * + * The input parameter is UUID of the FW Client. + * The output parameter is the properties of the FW client + * (FW protocol version and max message size). + * + */ +#define IOCTL_MEI_CONNECT_CLIENT \ +	_IOWR('H' , 0x01, struct mei_connect_client_data) + +/* + * Intel MEI client information struct + */ +struct mei_client { +	__u32 max_msg_length; +	__u8 protocol_version; +	__u8 reserved[3]; +}; + +/* + * IOCTL Connect Client Data structure + */ +struct mei_connect_client_data { +	union { +		uuid_le in_client_uuid; +		struct mei_client out_client_properties; +	}; +}; + +#endif /* _LINUX_MEI_H  */ diff --git a/include/uapi/linux/mempolicy.h b/include/uapi/linux/mempolicy.h new file mode 100644 index 00000000000..23e62e0537e --- /dev/null +++ b/include/uapi/linux/mempolicy.h @@ -0,0 +1,64 @@ +/* + * NUMA memory policies for Linux. + * Copyright 2003,2004 Andi Kleen SuSE Labs + */ +#ifndef _UAPI_LINUX_MEMPOLICY_H +#define _UAPI_LINUX_MEMPOLICY_H + +#include <linux/errno.h> + + +/* + * Both the MPOL_* mempolicy mode and the MPOL_F_* optional mode flags are + * passed by the user to either set_mempolicy() or mbind() in an 'int' actual. + * The MPOL_MODE_FLAGS macro determines the legal set of optional mode flags. + */ + +/* Policies */ +enum { +	MPOL_DEFAULT, +	MPOL_PREFERRED, +	MPOL_BIND, +	MPOL_INTERLEAVE, +	MPOL_MAX,	/* always last member of enum */ +}; + +enum mpol_rebind_step { +	MPOL_REBIND_ONCE,	/* do rebind work at once(not by two step) */ +	MPOL_REBIND_STEP1,	/* first step(set all the newly nodes) */ +	MPOL_REBIND_STEP2,	/* second step(clean all the disallowed nodes)*/ +	MPOL_REBIND_NSTEP, +}; + +/* Flags for set_mempolicy */ +#define MPOL_F_STATIC_NODES	(1 << 15) +#define MPOL_F_RELATIVE_NODES	(1 << 14) + +/* + * MPOL_MODE_FLAGS is the union of all possible optional mode flags passed to + * either set_mempolicy() or mbind(). + */ +#define MPOL_MODE_FLAGS	(MPOL_F_STATIC_NODES | MPOL_F_RELATIVE_NODES) + +/* Flags for get_mempolicy */ +#define MPOL_F_NODE	(1<<0)	/* return next IL mode instead of node mask */ +#define MPOL_F_ADDR	(1<<1)	/* look up vma using address */ +#define MPOL_F_MEMS_ALLOWED (1<<2) /* return allowed memories */ + +/* Flags for mbind */ +#define MPOL_MF_STRICT	(1<<0)	/* Verify existing pages in the mapping */ +#define MPOL_MF_MOVE	(1<<1)	/* Move pages owned by this process to conform to mapping */ +#define MPOL_MF_MOVE_ALL (1<<2)	/* Move every page to conform to mapping */ +#define MPOL_MF_INTERNAL (1<<3)	/* Internal flags start here */ + +/* + * Internal flags that share the struct mempolicy flags word with + * "mode flags".  These flags are allocated from bit 0 up, as they + * are never OR'ed into the mode in mempolicy API arguments. + */ +#define MPOL_F_SHARED  (1 << 0)	/* identify shared policies */ +#define MPOL_F_LOCAL   (1 << 1)	/* preferred local allocation */ +#define MPOL_F_REBINDING (1 << 2)	/* identify policies in rebinding */ + + +#endif /* _UAPI_LINUX_MEMPOLICY_H */ diff --git a/include/uapi/linux/meye.h b/include/uapi/linux/meye.h new file mode 100644 index 00000000000..0dd49954f74 --- /dev/null +++ b/include/uapi/linux/meye.h @@ -0,0 +1,66 @@ +/* + * Motion Eye video4linux driver for Sony Vaio PictureBook + * + * Copyright (C) 2001-2003 Stelian Pop <stelian@popies.net> + * + * Copyright (C) 2001-2002 Alcôve <www.alcove.com> + * + * Copyright (C) 2000 Andrew Tridgell <tridge@valinux.com> + * + * Earlier work by Werner Almesberger, Paul `Rusty' Russell and Paul Mackerras. + * + * Some parts borrowed from various video4linux drivers, especially + * bttv-driver.c and zoran.c, see original files for credits. + * + * 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 _MEYE_H_ +#define _MEYE_H_ + +/****************************************************************************/ +/* Private API for handling mjpeg capture / playback.                       */ +/****************************************************************************/ + +struct meye_params { +	unsigned char subsample; +	unsigned char quality; +	unsigned char sharpness; +	unsigned char agc; +	unsigned char picture; +	unsigned char framerate; +}; + +/* query the extended parameters */ +#define MEYEIOC_G_PARAMS	_IOR ('v', BASE_VIDIOC_PRIVATE+0, struct meye_params) +/* set the extended parameters */ +#define MEYEIOC_S_PARAMS	_IOW ('v', BASE_VIDIOC_PRIVATE+1, struct meye_params) +/* queue a buffer for mjpeg capture */ +#define MEYEIOC_QBUF_CAPT	_IOW ('v', BASE_VIDIOC_PRIVATE+2, int) +/* sync a previously queued mjpeg buffer */ +#define MEYEIOC_SYNC		_IOWR('v', BASE_VIDIOC_PRIVATE+3, int) +/* get a still uncompressed snapshot */ +#define MEYEIOC_STILLCAPT	_IO  ('v', BASE_VIDIOC_PRIVATE+4) +/* get a jpeg compressed snapshot */ +#define MEYEIOC_STILLJCAPT	_IOR ('v', BASE_VIDIOC_PRIVATE+5, int) + +/* V4L2 private controls */ +#define V4L2_CID_AGC		V4L2_CID_PRIVATE_BASE +#define V4L2_CID_MEYE_SHARPNESS	(V4L2_CID_PRIVATE_BASE + 1) +#define V4L2_CID_PICTURE	(V4L2_CID_PRIVATE_BASE + 2) +#define V4L2_CID_JPEGQUAL	(V4L2_CID_PRIVATE_BASE + 3) +#define V4L2_CID_FRAMERATE	(V4L2_CID_PRIVATE_BASE + 4) + +#endif diff --git a/include/uapi/linux/mii.h b/include/uapi/linux/mii.h new file mode 100644 index 00000000000..237fac4bc17 --- /dev/null +++ b/include/uapi/linux/mii.h @@ -0,0 +1,161 @@ +/* + * linux/mii.h: definitions for MII-compatible transceivers + * Originally drivers/net/sunhme.h. + * + * Copyright (C) 1996, 1999, 2001 David S. Miller (davem@redhat.com) + */ + +#ifndef _UAPI__LINUX_MII_H__ +#define _UAPI__LINUX_MII_H__ + +#include <linux/types.h> +#include <linux/ethtool.h> + +/* Generic MII registers. */ +#define MII_BMCR		0x00	/* Basic mode control register */ +#define MII_BMSR		0x01	/* Basic mode status register  */ +#define MII_PHYSID1		0x02	/* PHYS ID 1                   */ +#define MII_PHYSID2		0x03	/* PHYS ID 2                   */ +#define MII_ADVERTISE		0x04	/* Advertisement control reg   */ +#define MII_LPA			0x05	/* Link partner ability reg    */ +#define MII_EXPANSION		0x06	/* Expansion register          */ +#define MII_CTRL1000		0x09	/* 1000BASE-T control          */ +#define MII_STAT1000		0x0a	/* 1000BASE-T status           */ +#define	MII_MMD_CTRL		0x0d	/* MMD Access Control Register */ +#define	MII_MMD_DATA		0x0e	/* MMD Access Data Register */ +#define MII_ESTATUS		0x0f	/* Extended Status             */ +#define MII_DCOUNTER		0x12	/* Disconnect counter          */ +#define MII_FCSCOUNTER		0x13	/* False carrier counter       */ +#define MII_NWAYTEST		0x14	/* N-way auto-neg test reg     */ +#define MII_RERRCOUNTER		0x15	/* Receive error counter       */ +#define MII_SREVISION		0x16	/* Silicon revision            */ +#define MII_RESV1		0x17	/* Reserved...                 */ +#define MII_LBRERROR		0x18	/* Lpback, rx, bypass error    */ +#define MII_PHYADDR		0x19	/* PHY address                 */ +#define MII_RESV2		0x1a	/* Reserved...                 */ +#define MII_TPISTATUS		0x1b	/* TPI status for 10mbps       */ +#define MII_NCONFIG		0x1c	/* Network interface config    */ + +/* Basic mode control register. */ +#define BMCR_RESV		0x003f	/* Unused...                   */ +#define BMCR_SPEED1000		0x0040	/* MSB of Speed (1000)         */ +#define BMCR_CTST		0x0080	/* Collision test              */ +#define BMCR_FULLDPLX		0x0100	/* Full duplex                 */ +#define BMCR_ANRESTART		0x0200	/* Auto negotiation restart    */ +#define BMCR_ISOLATE		0x0400	/* Isolate data paths from MII */ +#define BMCR_PDOWN		0x0800	/* Enable low power state      */ +#define BMCR_ANENABLE		0x1000	/* Enable auto negotiation     */ +#define BMCR_SPEED100		0x2000	/* Select 100Mbps              */ +#define BMCR_LOOPBACK		0x4000	/* TXD loopback bits           */ +#define BMCR_RESET		0x8000	/* Reset to default state      */ + +/* Basic mode status register. */ +#define BMSR_ERCAP		0x0001	/* Ext-reg capability          */ +#define BMSR_JCD		0x0002	/* Jabber detected             */ +#define BMSR_LSTATUS		0x0004	/* Link status                 */ +#define BMSR_ANEGCAPABLE	0x0008	/* Able to do auto-negotiation */ +#define BMSR_RFAULT		0x0010	/* Remote fault detected       */ +#define BMSR_ANEGCOMPLETE	0x0020	/* Auto-negotiation complete   */ +#define BMSR_RESV		0x00c0	/* Unused...                   */ +#define BMSR_ESTATEN		0x0100	/* Extended Status in R15      */ +#define BMSR_100HALF2		0x0200	/* Can do 100BASE-T2 HDX       */ +#define BMSR_100FULL2		0x0400	/* Can do 100BASE-T2 FDX       */ +#define BMSR_10HALF		0x0800	/* Can do 10mbps, half-duplex  */ +#define BMSR_10FULL		0x1000	/* Can do 10mbps, full-duplex  */ +#define BMSR_100HALF		0x2000	/* Can do 100mbps, half-duplex */ +#define BMSR_100FULL		0x4000	/* Can do 100mbps, full-duplex */ +#define BMSR_100BASE4		0x8000	/* Can do 100mbps, 4k packets  */ + +/* Advertisement control register. */ +#define ADVERTISE_SLCT		0x001f	/* Selector bits               */ +#define ADVERTISE_CSMA		0x0001	/* Only selector supported     */ +#define ADVERTISE_10HALF	0x0020	/* Try for 10mbps half-duplex  */ +#define ADVERTISE_1000XFULL	0x0020	/* Try for 1000BASE-X full-duplex */ +#define ADVERTISE_10FULL	0x0040	/* Try for 10mbps full-duplex  */ +#define ADVERTISE_1000XHALF	0x0040	/* Try for 1000BASE-X half-duplex */ +#define ADVERTISE_100HALF	0x0080	/* Try for 100mbps half-duplex */ +#define ADVERTISE_1000XPAUSE	0x0080	/* Try for 1000BASE-X pause    */ +#define ADVERTISE_100FULL	0x0100	/* Try for 100mbps full-duplex */ +#define ADVERTISE_1000XPSE_ASYM	0x0100	/* Try for 1000BASE-X asym pause */ +#define ADVERTISE_100BASE4	0x0200	/* Try for 100mbps 4k packets  */ +#define ADVERTISE_PAUSE_CAP	0x0400	/* Try for pause               */ +#define ADVERTISE_PAUSE_ASYM	0x0800	/* Try for asymetric pause     */ +#define ADVERTISE_RESV		0x1000	/* Unused...                   */ +#define ADVERTISE_RFAULT	0x2000	/* Say we can detect faults    */ +#define ADVERTISE_LPACK		0x4000	/* Ack link partners response  */ +#define ADVERTISE_NPAGE		0x8000	/* Next page bit               */ + +#define ADVERTISE_FULL		(ADVERTISE_100FULL | ADVERTISE_10FULL | \ +				  ADVERTISE_CSMA) +#define ADVERTISE_ALL		(ADVERTISE_10HALF | ADVERTISE_10FULL | \ +				  ADVERTISE_100HALF | ADVERTISE_100FULL) + +/* Link partner ability register. */ +#define LPA_SLCT		0x001f	/* Same as advertise selector  */ +#define LPA_10HALF		0x0020	/* Can do 10mbps half-duplex   */ +#define LPA_1000XFULL		0x0020	/* Can do 1000BASE-X full-duplex */ +#define LPA_10FULL		0x0040	/* Can do 10mbps full-duplex   */ +#define LPA_1000XHALF		0x0040	/* Can do 1000BASE-X half-duplex */ +#define LPA_100HALF		0x0080	/* Can do 100mbps half-duplex  */ +#define LPA_1000XPAUSE		0x0080	/* Can do 1000BASE-X pause     */ +#define LPA_100FULL		0x0100	/* Can do 100mbps full-duplex  */ +#define LPA_1000XPAUSE_ASYM	0x0100	/* Can do 1000BASE-X pause asym*/ +#define LPA_100BASE4		0x0200	/* Can do 100mbps 4k packets   */ +#define LPA_PAUSE_CAP		0x0400	/* Can pause                   */ +#define LPA_PAUSE_ASYM		0x0800	/* Can pause asymetrically     */ +#define LPA_RESV		0x1000	/* Unused...                   */ +#define LPA_RFAULT		0x2000	/* Link partner faulted        */ +#define LPA_LPACK		0x4000	/* Link partner acked us       */ +#define LPA_NPAGE		0x8000	/* Next page bit               */ + +#define LPA_DUPLEX		(LPA_10FULL | LPA_100FULL) +#define LPA_100			(LPA_100FULL | LPA_100HALF | LPA_100BASE4) + +/* Expansion register for auto-negotiation. */ +#define EXPANSION_NWAY		0x0001	/* Can do N-way auto-nego      */ +#define EXPANSION_LCWP		0x0002	/* Got new RX page code word   */ +#define EXPANSION_ENABLENPAGE	0x0004	/* This enables npage words    */ +#define EXPANSION_NPCAPABLE	0x0008	/* Link partner supports npage */ +#define EXPANSION_MFAULTS	0x0010	/* Multiple faults detected    */ +#define EXPANSION_RESV		0xffe0	/* Unused...                   */ + +#define ESTATUS_1000_TFULL	0x2000	/* Can do 1000BT Full          */ +#define ESTATUS_1000_THALF	0x1000	/* Can do 1000BT Half          */ + +/* N-way test register. */ +#define NWAYTEST_RESV1		0x00ff	/* Unused...                   */ +#define NWAYTEST_LOOPBACK	0x0100	/* Enable loopback for N-way   */ +#define NWAYTEST_RESV2		0xfe00	/* Unused...                   */ + +/* 1000BASE-T Control register */ +#define ADVERTISE_1000FULL	0x0200  /* Advertise 1000BASE-T full duplex */ +#define ADVERTISE_1000HALF	0x0100  /* Advertise 1000BASE-T half duplex */ +#define CTL1000_AS_MASTER	0x0800 +#define CTL1000_ENABLE_MASTER	0x1000 + +/* 1000BASE-T Status register */ +#define LPA_1000LOCALRXOK	0x2000	/* Link partner local receiver status */ +#define LPA_1000REMRXOK		0x1000	/* Link partner remote receiver status */ +#define LPA_1000FULL		0x0800	/* Link partner 1000BASE-T full duplex */ +#define LPA_1000HALF		0x0400	/* Link partner 1000BASE-T half duplex */ + +/* Flow control flags */ +#define FLOW_CTRL_TX		0x01 +#define FLOW_CTRL_RX		0x02 + +/* MMD Access Control register fields */ +#define MII_MMD_CTRL_DEVAD_MASK	0x1f	/* Mask MMD DEVAD*/ +#define MII_MMD_CTRL_ADDR	0x0000	/* Address */ +#define MII_MMD_CTRL_NOINCR	0x4000	/* no post increment */ +#define MII_MMD_CTRL_INCR_RDWT	0x8000	/* post increment on reads & writes */ +#define MII_MMD_CTRL_INCR_ON_WT	0xC000	/* post increment on writes only */ + +/* This structure is used in all SIOCxMIIxxx ioctl calls */ +struct mii_ioctl_data { +	__u16		phy_id; +	__u16		reg_num; +	__u16		val_in; +	__u16		val_out; +}; + +#endif /* _UAPI__LINUX_MII_H__ */ diff --git a/include/uapi/linux/minix_fs.h b/include/uapi/linux/minix_fs.h new file mode 100644 index 00000000000..13fe09e0576 --- /dev/null +++ b/include/uapi/linux/minix_fs.h @@ -0,0 +1,106 @@ +#ifndef _LINUX_MINIX_FS_H +#define _LINUX_MINIX_FS_H + +#include <linux/types.h> +#include <linux/magic.h> + +/* + * The minix filesystem constants/structures + */ + +/* + * Thanks to Kees J Bot for sending me the definitions of the new + * minix filesystem (aka V2) with bigger inodes and 32-bit block + * pointers. + */ + +#define MINIX_ROOT_INO 1 + +/* Not the same as the bogus LINK_MAX in <linux/limits.h>. Oh well. */ +#define MINIX_LINK_MAX	250 +#define MINIX2_LINK_MAX	65530 + +#define MINIX_I_MAP_SLOTS	8 +#define MINIX_Z_MAP_SLOTS	64 +#define MINIX_VALID_FS		0x0001		/* Clean fs. */ +#define MINIX_ERROR_FS		0x0002		/* fs has errors. */ + +#define MINIX_INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct minix_inode))) + +/* + * This is the original minix inode layout on disk. + * Note the 8-bit gid and atime and ctime. + */ +struct minix_inode { +	__u16 i_mode; +	__u16 i_uid; +	__u32 i_size; +	__u32 i_time; +	__u8  i_gid; +	__u8  i_nlinks; +	__u16 i_zone[9]; +}; + +/* + * The new minix inode has all the time entries, as well as + * long block numbers and a third indirect block (7+1+1+1 + * instead of 7+1+1). Also, some previously 8-bit values are + * now 16-bit. The inode is now 64 bytes instead of 32. + */ +struct minix2_inode { +	__u16 i_mode; +	__u16 i_nlinks; +	__u16 i_uid; +	__u16 i_gid; +	__u32 i_size; +	__u32 i_atime; +	__u32 i_mtime; +	__u32 i_ctime; +	__u32 i_zone[10]; +}; + +/* + * minix super-block data on disk + */ +struct minix_super_block { +	__u16 s_ninodes; +	__u16 s_nzones; +	__u16 s_imap_blocks; +	__u16 s_zmap_blocks; +	__u16 s_firstdatazone; +	__u16 s_log_zone_size; +	__u32 s_max_size; +	__u16 s_magic; +	__u16 s_state; +	__u32 s_zones; +}; + +/* + * V3 minix super-block data on disk + */ +struct minix3_super_block { +	__u32 s_ninodes; +	__u16 s_pad0; +	__u16 s_imap_blocks; +	__u16 s_zmap_blocks; +	__u16 s_firstdatazone; +	__u16 s_log_zone_size; +	__u16 s_pad1; +	__u32 s_max_size; +	__u32 s_zones; +	__u16 s_magic; +	__u16 s_pad2; +	__u16 s_blocksize; +	__u8  s_disk_version; +}; + +struct minix_dir_entry { +	__u16 inode; +	char name[0]; +}; + +struct minix3_dir_entry { +	__u32 inode; +	char name[0]; +}; +#endif diff --git a/include/uapi/linux/mman.h b/include/uapi/linux/mman.h new file mode 100644 index 00000000000..ade4acd3a90 --- /dev/null +++ b/include/uapi/linux/mman.h @@ -0,0 +1,13 @@ +#ifndef _UAPI_LINUX_MMAN_H +#define _UAPI_LINUX_MMAN_H + +#include <asm/mman.h> + +#define MREMAP_MAYMOVE	1 +#define MREMAP_FIXED	2 + +#define OVERCOMMIT_GUESS		0 +#define OVERCOMMIT_ALWAYS		1 +#define OVERCOMMIT_NEVER		2 + +#endif /* _UAPI_LINUX_MMAN_H */ diff --git a/include/uapi/linux/mmc/Kbuild b/include/uapi/linux/mmc/Kbuild index aafaa5aa54d..8c1d2cb75e3 100644 --- a/include/uapi/linux/mmc/Kbuild +++ b/include/uapi/linux/mmc/Kbuild @@ -1 +1,2 @@  # UAPI Header export list +header-y += ioctl.h diff --git a/include/uapi/linux/mmc/ioctl.h b/include/uapi/linux/mmc/ioctl.h new file mode 100644 index 00000000000..1f5e6892392 --- /dev/null +++ b/include/uapi/linux/mmc/ioctl.h @@ -0,0 +1,57 @@ +#ifndef LINUX_MMC_IOCTL_H +#define LINUX_MMC_IOCTL_H + +#include <linux/types.h> + +struct mmc_ioc_cmd { +	/* Implies direction of data.  true = write, false = read */ +	int write_flag; + +	/* Application-specific command.  true = precede with CMD55 */ +	int is_acmd; + +	__u32 opcode; +	__u32 arg; +	__u32 response[4];  /* CMD response */ +	unsigned int flags; +	unsigned int blksz; +	unsigned int blocks; + +	/* +	 * Sleep at least postsleep_min_us useconds, and at most +	 * postsleep_max_us useconds *after* issuing command.  Needed for +	 * some read commands for which cards have no other way of indicating +	 * they're ready for the next command (i.e. there is no equivalent of +	 * a "busy" indicator for read operations). +	 */ +	unsigned int postsleep_min_us; +	unsigned int postsleep_max_us; + +	/* +	 * Override driver-computed timeouts.  Note the difference in units! +	 */ +	unsigned int data_timeout_ns; +	unsigned int cmd_timeout_ms; + +	/* +	 * For 64-bit machines, the next member, ``__u64 data_ptr``, wants to +	 * be 8-byte aligned.  Make sure this struct is the same size when +	 * built for 32-bit. +	 */ +	__u32 __pad; + +	/* DAT buffer */ +	__u64 data_ptr; +}; +#define mmc_ioc_cmd_set_data(ic, ptr) ic.data_ptr = (__u64)(unsigned long) ptr + +#define MMC_IOC_CMD _IOWR(MMC_BLOCK_MAJOR, 0, struct mmc_ioc_cmd) + +/* + * Since this ioctl is only meant to enhance (and not replace) normal access + * to the mmc bus device, an upper data transfer limit of MMC_IOC_MAX_BYTES + * is enforced per ioctl call.  For larger data transfers, use the normal + * block device operations. + */ +#define MMC_IOC_MAX_BYTES  (512L * 256) +#endif /* LINUX_MMC_IOCTL_H */ diff --git a/include/uapi/linux/mmtimer.h b/include/uapi/linux/mmtimer.h new file mode 100644 index 00000000000..884cabf1608 --- /dev/null +++ b/include/uapi/linux/mmtimer.h @@ -0,0 +1,56 @@ +/* + * Intel Multimedia Timer device interface + * + * This file is subject to the terms and conditions of the GNU General Public + * License.  See the file "COPYING" in the main directory of this archive + * for more details. + * + * Copyright (c) 2001-2004 Silicon Graphics, Inc.  All rights reserved. + * + * This file should define an interface compatible with the IA-PC Multimedia + * Timers Draft Specification (rev. 0.97) from Intel.  Note that some + * hardware may not be able to safely export its registers to userspace, + * so the ioctl interface should support all necessary functionality. + * + * 11/01/01 - jbarnes - initial revision + * 9/10/04 - Christoph Lameter - remove interrupt support + * 9/17/04 - jbarnes - remove test program, move some #defines to the driver + */ + +#ifndef _LINUX_MMTIMER_H +#define _LINUX_MMTIMER_H + +/* + * Breakdown of the ioctl's available.  An 'optional' next to the command + * indicates that supporting this command is optional, while 'required' + * commands must be implemented if conformance is desired. + * + * MMTIMER_GETOFFSET - optional + *   Should return the offset (relative to the start of the page where the + *   registers are mapped) for the counter in question. + * + * MMTIMER_GETRES - required + *   The resolution of the clock in femto (10^-15) seconds + * + * MMTIMER_GETFREQ - required + *   Frequency of the clock in Hz + * + * MMTIMER_GETBITS - required + *   Number of bits in the clock's counter + * + * MMTIMER_MMAPAVAIL - required + *   Returns nonzero if the registers can be mmap'd into userspace, 0 otherwise + * + * MMTIMER_GETCOUNTER - required + *   Gets the current value in the counter + */ +#define MMTIMER_IOCTL_BASE 'm' + +#define MMTIMER_GETOFFSET _IO(MMTIMER_IOCTL_BASE, 0) +#define MMTIMER_GETRES _IOR(MMTIMER_IOCTL_BASE, 1, unsigned long) +#define MMTIMER_GETFREQ _IOR(MMTIMER_IOCTL_BASE, 2, unsigned long) +#define MMTIMER_GETBITS _IO(MMTIMER_IOCTL_BASE, 4) +#define MMTIMER_MMAPAVAIL _IO(MMTIMER_IOCTL_BASE, 6) +#define MMTIMER_GETCOUNTER _IOR(MMTIMER_IOCTL_BASE, 9, unsigned long) + +#endif /* _LINUX_MMTIMER_H */ diff --git a/include/uapi/linux/mqueue.h b/include/uapi/linux/mqueue.h new file mode 100644 index 00000000000..8b5a79615fb --- /dev/null +++ b/include/uapi/linux/mqueue.h @@ -0,0 +1,53 @@ +/* Copyright (C) 2003 Krzysztof Benedyczak & Michal Wronski + +   This program is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public +   License as published by the Free Software Foundation; either +   version 2.1 of the License, or (at your option) any later version. + +   It 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 +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public +   License along with this software; if not, write to the Free +   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +   02111-1307 USA.  */ + +#ifndef _LINUX_MQUEUE_H +#define _LINUX_MQUEUE_H + +#define MQ_PRIO_MAX 	32768 +/* per-uid limit of kernel memory used by mqueue, in bytes */ +#define MQ_BYTES_MAX	819200 + +struct mq_attr { +	long	mq_flags;	/* message queue flags			*/ +	long	mq_maxmsg;	/* maximum number of messages		*/ +	long	mq_msgsize;	/* maximum message size			*/ +	long	mq_curmsgs;	/* number of messages currently queued	*/ +	long	__reserved[4];	/* ignored for input, zeroed for output */ +}; + +/* + * SIGEV_THREAD implementation: + * SIGEV_THREAD must be implemented in user space. If SIGEV_THREAD is passed + * to mq_notify, then + * - sigev_signo must be the file descriptor of an AF_NETLINK socket. It's not + *   necessary that the socket is bound. + * - sigev_value.sival_ptr must point to a cookie that is NOTIFY_COOKIE_LEN + *   bytes long. + * If the notification is triggered, then the cookie is sent to the netlink + * socket. The last byte of the cookie is replaced with the NOTIFY_?? codes: + * NOTIFY_WOKENUP if the notification got triggered, NOTIFY_REMOVED if it was + * removed, either due to a close() on the message queue fd or due to a + * mq_notify() that removed the notification. + */ +#define NOTIFY_NONE	0 +#define NOTIFY_WOKENUP	1 +#define NOTIFY_REMOVED	2 + +#define NOTIFY_COOKIE_LEN	32 + +#endif diff --git a/include/uapi/linux/mroute.h b/include/uapi/linux/mroute.h new file mode 100644 index 00000000000..16929993acc --- /dev/null +++ b/include/uapi/linux/mroute.h @@ -0,0 +1,143 @@ +#ifndef _UAPI__LINUX_MROUTE_H +#define _UAPI__LINUX_MROUTE_H + +#include <linux/sockios.h> +#include <linux/types.h> + +/* + *	Based on the MROUTING 3.5 defines primarily to keep + *	source compatibility with BSD. + * + *	See the mrouted code for the original history. + * + *      Protocol Independent Multicast (PIM) data structures included + *      Carlos Picoto (cap@di.fc.ul.pt) + * + */ + +#define MRT_BASE	200 +#define MRT_INIT	(MRT_BASE)	/* Activate the kernel mroute code 	*/ +#define MRT_DONE	(MRT_BASE+1)	/* Shutdown the kernel mroute		*/ +#define MRT_ADD_VIF	(MRT_BASE+2)	/* Add a virtual interface		*/ +#define MRT_DEL_VIF	(MRT_BASE+3)	/* Delete a virtual interface		*/ +#define MRT_ADD_MFC	(MRT_BASE+4)	/* Add a multicast forwarding entry	*/ +#define MRT_DEL_MFC	(MRT_BASE+5)	/* Delete a multicast forwarding entry	*/ +#define MRT_VERSION	(MRT_BASE+6)	/* Get the kernel multicast version	*/ +#define MRT_ASSERT	(MRT_BASE+7)	/* Activate PIM assert mode		*/ +#define MRT_PIM		(MRT_BASE+8)	/* enable PIM code			*/ +#define MRT_TABLE	(MRT_BASE+9)	/* Specify mroute table ID		*/ + +#define SIOCGETVIFCNT	SIOCPROTOPRIVATE	/* IP protocol privates */ +#define SIOCGETSGCNT	(SIOCPROTOPRIVATE+1) +#define SIOCGETRPF	(SIOCPROTOPRIVATE+2) + +#define MAXVIFS		32	 +typedef unsigned long vifbitmap_t;	/* User mode code depends on this lot */ +typedef unsigned short vifi_t; +#define ALL_VIFS	((vifi_t)(-1)) + +/* + *	Same idea as select + */ +  +#define VIFM_SET(n,m)	((m)|=(1<<(n))) +#define VIFM_CLR(n,m)	((m)&=~(1<<(n))) +#define VIFM_ISSET(n,m)	((m)&(1<<(n))) +#define VIFM_CLRALL(m)	((m)=0) +#define VIFM_COPY(mfrom,mto)	((mto)=(mfrom)) +#define VIFM_SAME(m1,m2)	((m1)==(m2)) + +/* + *	Passed by mrouted for an MRT_ADD_VIF - again we use the + *	mrouted 3.6 structures for compatibility + */ +  +struct vifctl { +	vifi_t	vifc_vifi;		/* Index of VIF */ +	unsigned char vifc_flags;	/* VIFF_ flags */ +	unsigned char vifc_threshold;	/* ttl limit */ +	unsigned int vifc_rate_limit;	/* Rate limiter values (NI) */ +	union { +		struct in_addr vifc_lcl_addr;     /* Local interface address */ +		int            vifc_lcl_ifindex;  /* Local interface index   */ +	}; +	struct in_addr vifc_rmt_addr;	/* IPIP tunnel addr */ +}; + +#define VIFF_TUNNEL		0x1	/* IPIP tunnel */ +#define VIFF_SRCRT		0x2	/* NI */ +#define VIFF_REGISTER		0x4	/* register vif	*/ +#define VIFF_USE_IFINDEX	0x8	/* use vifc_lcl_ifindex instead of +					   vifc_lcl_addr to find an interface */ + +/* + *	Cache manipulation structures for mrouted and PIMd + */ +  +struct mfcctl { +	struct in_addr mfcc_origin;		/* Origin of mcast	*/ +	struct in_addr mfcc_mcastgrp;		/* Group in question	*/ +	vifi_t	mfcc_parent;			/* Where it arrived	*/ +	unsigned char mfcc_ttls[MAXVIFS];	/* Where it is going	*/ +	unsigned int mfcc_pkt_cnt;		/* pkt count for src-grp */ +	unsigned int mfcc_byte_cnt; +	unsigned int mfcc_wrong_if; +	int	     mfcc_expire; +}; + +/*  + *	Group count retrieval for mrouted + */ +  +struct sioc_sg_req { +	struct in_addr src; +	struct in_addr grp; +	unsigned long pktcnt; +	unsigned long bytecnt; +	unsigned long wrong_if; +}; + +/* + *	To get vif packet counts + */ + +struct sioc_vif_req { +	vifi_t	vifi;		/* Which iface */ +	unsigned long icount;	/* In packets */ +	unsigned long ocount;	/* Out packets */ +	unsigned long ibytes;	/* In bytes */ +	unsigned long obytes;	/* Out bytes */ +}; + +/* + *	This is the format the mroute daemon expects to see IGMP control + *	data. Magically happens to be like an IP packet as per the original + */ +  +struct igmpmsg { +	__u32 unused1,unused2; +	unsigned char im_msgtype;		/* What is this */ +	unsigned char im_mbz;			/* Must be zero */ +	unsigned char im_vif;			/* Interface (this ought to be a vifi_t!) */ +	unsigned char unused3; +	struct in_addr im_src,im_dst; +}; + +/* + *	That's all usermode folks + */ + + + +#define MFC_ASSERT_THRESH (3*HZ)		/* Maximal freq. of asserts */ + +/* + *	Pseudo messages used by mrouted + */ + +#define IGMPMSG_NOCACHE		1		/* Kern cache fill request to mrouted */ +#define IGMPMSG_WRONGVIF	2		/* For PIM assert processing (unused) */ +#define IGMPMSG_WHOLEPKT	3		/* For PIM Register processing */ + + +#endif /* _UAPI__LINUX_MROUTE_H */ diff --git a/include/uapi/linux/mroute6.h b/include/uapi/linux/mroute6.h new file mode 100644 index 00000000000..3e89b5e7f9e --- /dev/null +++ b/include/uapi/linux/mroute6.h @@ -0,0 +1,137 @@ +#ifndef _UAPI__LINUX_MROUTE6_H +#define _UAPI__LINUX_MROUTE6_H + +#include <linux/types.h> +#include <linux/sockios.h> + +/* + *	Based on the MROUTING 3.5 defines primarily to keep + *	source compatibility with BSD. + * + *	See the pim6sd code for the original history. + * + *      Protocol Independent Multicast (PIM) data structures included + *      Carlos Picoto (cap@di.fc.ul.pt) + * + */ + +#define MRT6_BASE	200 +#define MRT6_INIT	(MRT6_BASE)	/* Activate the kernel mroute code 	*/ +#define MRT6_DONE	(MRT6_BASE+1)	/* Shutdown the kernel mroute		*/ +#define MRT6_ADD_MIF	(MRT6_BASE+2)	/* Add a virtual interface		*/ +#define MRT6_DEL_MIF	(MRT6_BASE+3)	/* Delete a virtual interface		*/ +#define MRT6_ADD_MFC	(MRT6_BASE+4)	/* Add a multicast forwarding entry	*/ +#define MRT6_DEL_MFC	(MRT6_BASE+5)	/* Delete a multicast forwarding entry	*/ +#define MRT6_VERSION	(MRT6_BASE+6)	/* Get the kernel multicast version	*/ +#define MRT6_ASSERT	(MRT6_BASE+7)	/* Activate PIM assert mode		*/ +#define MRT6_PIM	(MRT6_BASE+8)	/* enable PIM code			*/ +#define MRT6_TABLE	(MRT6_BASE+9)	/* Specify mroute table ID		*/ + +#define SIOCGETMIFCNT_IN6	SIOCPROTOPRIVATE	/* IP protocol privates */ +#define SIOCGETSGCNT_IN6	(SIOCPROTOPRIVATE+1) +#define SIOCGETRPF	(SIOCPROTOPRIVATE+2) + +#define MAXMIFS		32 +typedef unsigned long mifbitmap_t;	/* User mode code depends on this lot */ +typedef unsigned short mifi_t; +#define ALL_MIFS	((mifi_t)(-1)) + +#ifndef IF_SETSIZE +#define IF_SETSIZE	256 +#endif + +typedef	__u32		if_mask; +#define NIFBITS (sizeof(if_mask) * 8)        /* bits per mask */ + +#if !defined(__KERNEL__) +#if !defined(DIV_ROUND_UP) +#define	DIV_ROUND_UP(x,y)	(((x) + ((y) - 1)) / (y)) +#endif +#endif + +typedef struct if_set { +	if_mask ifs_bits[DIV_ROUND_UP(IF_SETSIZE, NIFBITS)]; +} if_set; + +#define IF_SET(n, p)    ((p)->ifs_bits[(n)/NIFBITS] |= (1 << ((n) % NIFBITS))) +#define IF_CLR(n, p)    ((p)->ifs_bits[(n)/NIFBITS] &= ~(1 << ((n) % NIFBITS))) +#define IF_ISSET(n, p)  ((p)->ifs_bits[(n)/NIFBITS] & (1 << ((n) % NIFBITS))) +#define IF_COPY(f, t)   bcopy(f, t, sizeof(*(f))) +#define IF_ZERO(p)      bzero(p, sizeof(*(p))) + +/* + *	Passed by mrouted for an MRT_ADD_MIF - again we use the + *	mrouted 3.6 structures for compatibility + */ + +struct mif6ctl { +	mifi_t	mif6c_mifi;		/* Index of MIF */ +	unsigned char mif6c_flags;	/* MIFF_ flags */ +	unsigned char vifc_threshold;	/* ttl limit */ +	__u16	 mif6c_pifi;		/* the index of the physical IF */ +	unsigned int vifc_rate_limit;	/* Rate limiter values (NI) */ +}; + +#define MIFF_REGISTER	0x1	/* register vif	*/ + +/* + *	Cache manipulation structures for mrouted and PIMd + */ + +struct mf6cctl { +	struct sockaddr_in6 mf6cc_origin;		/* Origin of mcast	*/ +	struct sockaddr_in6 mf6cc_mcastgrp;		/* Group in question	*/ +	mifi_t	mf6cc_parent;			/* Where it arrived	*/ +	struct if_set mf6cc_ifset;		/* Where it is going */ +}; + +/* + *	Group count retrieval for pim6sd + */ + +struct sioc_sg_req6 { +	struct sockaddr_in6 src; +	struct sockaddr_in6 grp; +	unsigned long pktcnt; +	unsigned long bytecnt; +	unsigned long wrong_if; +}; + +/* + *	To get vif packet counts + */ + +struct sioc_mif_req6 { +	mifi_t	mifi;		/* Which iface */ +	unsigned long icount;	/* In packets */ +	unsigned long ocount;	/* Out packets */ +	unsigned long ibytes;	/* In bytes */ +	unsigned long obytes;	/* Out bytes */ +}; + +/* + *	That's all usermode folks + */ + + + +/* + * Structure used to communicate from kernel to multicast router. + * We'll overlay the structure onto an MLD header (not an IPv6 heder like igmpmsg{} + * used for IPv4 implementation). This is because this structure will be passed via an + * IPv6 raw socket, on which an application will only receiver the payload i.e the data after + * the IPv6 header and all the extension headers. (See section 3 of RFC 3542) + */ + +struct mrt6msg { +#define MRT6MSG_NOCACHE		1 +#define MRT6MSG_WRONGMIF	2 +#define MRT6MSG_WHOLEPKT	3		/* used for use level encap */ +	__u8		im6_mbz;		/* must be zero		   */ +	__u8		im6_msgtype;		/* what type of message    */ +	__u16		im6_mif;		/* mif rec'd on		   */ +	__u32		im6_pad;		/* padding for 64 bit arch */ +	struct in6_addr	im6_src, im6_dst; +}; + +#endif /* _UAPI__LINUX_MROUTE6_H */ diff --git a/include/uapi/linux/msdos_fs.h b/include/uapi/linux/msdos_fs.h new file mode 100644 index 00000000000..996719f82e2 --- /dev/null +++ b/include/uapi/linux/msdos_fs.h @@ -0,0 +1,167 @@ +#ifndef _UAPI_LINUX_MSDOS_FS_H +#define _UAPI_LINUX_MSDOS_FS_H + +#include <linux/types.h> +#include <linux/magic.h> +#include <asm/byteorder.h> + +/* + * The MS-DOS filesystem constants/structures + */ + +#define SECTOR_SIZE	512		/* sector size (bytes) */ +#define SECTOR_BITS	9		/* log2(SECTOR_SIZE) */ +#define MSDOS_DPB	(MSDOS_DPS)	/* dir entries per block */ +#define MSDOS_DPB_BITS	4		/* log2(MSDOS_DPB) */ +#define MSDOS_DPS	(SECTOR_SIZE / sizeof(struct msdos_dir_entry)) +#define MSDOS_DPS_BITS	4		/* log2(MSDOS_DPS) */ +#define MSDOS_LONGNAME	256		/* maximum name length */ +#define CF_LE_W(v)	le16_to_cpu(v) +#define CF_LE_L(v)	le32_to_cpu(v) +#define CT_LE_W(v)	cpu_to_le16(v) +#define CT_LE_L(v)	cpu_to_le32(v) + +#define MSDOS_ROOT_INO	 1	/* The root inode number */ +#define MSDOS_FSINFO_INO 2	/* Used for managing the FSINFO block */ + +#define MSDOS_DIR_BITS	5	/* log2(sizeof(struct msdos_dir_entry)) */ + +/* directory limit */ +#define FAT_MAX_DIR_ENTRIES	(65536) +#define FAT_MAX_DIR_SIZE	(FAT_MAX_DIR_ENTRIES << MSDOS_DIR_BITS) + +#define ATTR_NONE	0	/* no attribute bits */ +#define ATTR_RO		1	/* read-only */ +#define ATTR_HIDDEN	2	/* hidden */ +#define ATTR_SYS	4	/* system */ +#define ATTR_VOLUME	8	/* volume label */ +#define ATTR_DIR	16	/* directory */ +#define ATTR_ARCH	32	/* archived */ + +/* attribute bits that are copied "as is" */ +#define ATTR_UNUSED	(ATTR_VOLUME | ATTR_ARCH | ATTR_SYS | ATTR_HIDDEN) +/* bits that are used by the Windows 95/Windows NT extended FAT */ +#define ATTR_EXT	(ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME) + +#define CASE_LOWER_BASE	8	/* base is lower case */ +#define CASE_LOWER_EXT	16	/* extension is lower case */ + +#define DELETED_FLAG	0xe5	/* marks file as deleted when in name[0] */ +#define IS_FREE(n)	(!*(n) || *(n) == DELETED_FLAG) + +#define FAT_LFN_LEN	255	/* maximum long name length */ +#define MSDOS_NAME	11	/* maximum name length */ +#define MSDOS_SLOTS	21	/* max # of slots for short and long names */ +#define MSDOS_DOT	".          "	/* ".", padded to MSDOS_NAME chars */ +#define MSDOS_DOTDOT	"..         "	/* "..", padded to MSDOS_NAME chars */ + +#define FAT_FIRST_ENT(s, x)	((MSDOS_SB(s)->fat_bits == 32 ? 0x0FFFFF00 : \ +	MSDOS_SB(s)->fat_bits == 16 ? 0xFF00 : 0xF00) | (x)) + +/* start of data cluster's entry (number of reserved clusters) */ +#define FAT_START_ENT	2 + +/* maximum number of clusters */ +#define MAX_FAT12	0xFF4 +#define MAX_FAT16	0xFFF4 +#define MAX_FAT32	0x0FFFFFF6 +#define MAX_FAT(s)	(MSDOS_SB(s)->fat_bits == 32 ? MAX_FAT32 : \ +	MSDOS_SB(s)->fat_bits == 16 ? MAX_FAT16 : MAX_FAT12) + +/* bad cluster mark */ +#define BAD_FAT12	0xFF7 +#define BAD_FAT16	0xFFF7 +#define BAD_FAT32	0x0FFFFFF7 + +/* standard EOF */ +#define EOF_FAT12	0xFFF +#define EOF_FAT16	0xFFFF +#define EOF_FAT32	0x0FFFFFFF + +#define FAT_ENT_FREE	(0) +#define FAT_ENT_BAD	(BAD_FAT32) +#define FAT_ENT_EOF	(EOF_FAT32) + +#define FAT_FSINFO_SIG1	0x41615252 +#define FAT_FSINFO_SIG2	0x61417272 +#define IS_FSINFO(x)	(le32_to_cpu((x)->signature1) == FAT_FSINFO_SIG1 \ +			 && le32_to_cpu((x)->signature2) == FAT_FSINFO_SIG2) + +struct __fat_dirent { +	long		d_ino; +	__kernel_off_t	d_off; +	unsigned short	d_reclen; +	char		d_name[256]; /* We must not include limits.h! */ +}; + +/* + * ioctl commands + */ +#define VFAT_IOCTL_READDIR_BOTH		_IOR('r', 1, struct __fat_dirent[2]) +#define VFAT_IOCTL_READDIR_SHORT	_IOR('r', 2, struct __fat_dirent[2]) +/* <linux/videotext.h> has used 0x72 ('r') in collision, so skip a few */ +#define FAT_IOCTL_GET_ATTRIBUTES	_IOR('r', 0x10, __u32) +#define FAT_IOCTL_SET_ATTRIBUTES	_IOW('r', 0x11, __u32) + +struct fat_boot_sector { +	__u8	ignored[3];	/* Boot strap short or near jump */ +	__u8	system_id[8];	/* Name - can be used to special case +				   partition manager volumes */ +	__u8	sector_size[2];	/* bytes per logical sector */ +	__u8	sec_per_clus;	/* sectors/cluster */ +	__le16	reserved;	/* reserved sectors */ +	__u8	fats;		/* number of FATs */ +	__u8	dir_entries[2];	/* root directory entries */ +	__u8	sectors[2];	/* number of sectors */ +	__u8	media;		/* media code */ +	__le16	fat_length;	/* sectors/FAT */ +	__le16	secs_track;	/* sectors per track */ +	__le16	heads;		/* number of heads */ +	__le32	hidden;		/* hidden sectors (unused) */ +	__le32	total_sect;	/* number of sectors (if sectors == 0) */ + +	/* The following fields are only used by FAT32 */ +	__le32	fat32_length;	/* sectors/FAT */ +	__le16	flags;		/* bit 8: fat mirroring, low 4: active fat */ +	__u8	version[2];	/* major, minor filesystem version */ +	__le32	root_cluster;	/* first cluster in root directory */ +	__le16	info_sector;	/* filesystem info sector */ +	__le16	backup_boot;	/* backup boot sector */ +	__le16	reserved2[6];	/* Unused */ +}; + +struct fat_boot_fsinfo { +	__le32   signature1;	/* 0x41615252L */ +	__le32   reserved1[120];	/* Nothing as far as I can tell */ +	__le32   signature2;	/* 0x61417272L */ +	__le32   free_clusters;	/* Free cluster count.  -1 if unknown */ +	__le32   next_cluster;	/* Most recently allocated cluster */ +	__le32   reserved2[4]; +}; + +struct msdos_dir_entry { +	__u8	name[MSDOS_NAME];/* name and extension */ +	__u8	attr;		/* attribute bits */ +	__u8    lcase;		/* Case for base and extension */ +	__u8	ctime_cs;	/* Creation time, centiseconds (0-199) */ +	__le16	ctime;		/* Creation time */ +	__le16	cdate;		/* Creation date */ +	__le16	adate;		/* Last access date */ +	__le16	starthi;	/* High 16 bits of cluster in FAT32 */ +	__le16	time,date,start;/* time, date and first cluster */ +	__le32	size;		/* file size (in bytes) */ +}; + +/* Up to 13 characters of the name */ +struct msdos_dir_slot { +	__u8    id;		/* sequence number for slot */ +	__u8    name0_4[10];	/* first 5 characters in name */ +	__u8    attr;		/* attribute byte */ +	__u8    reserved;	/* always 0 */ +	__u8    alias_checksum;	/* checksum for 8.3 alias */ +	__u8    name5_10[12];	/* 6 more characters in name */ +	__le16   start;		/* starting cluster number, 0 in long slots */ +	__u8    name11_12[4];	/* last 2 characters in name */ +}; + +#endif /* _UAPI_LINUX_MSDOS_FS_H */ diff --git a/include/uapi/linux/msg.h b/include/uapi/linux/msg.h new file mode 100644 index 00000000000..78dbd2f996a --- /dev/null +++ b/include/uapi/linux/msg.h @@ -0,0 +1,75 @@ +#ifndef _UAPI_LINUX_MSG_H +#define _UAPI_LINUX_MSG_H + +#include <linux/ipc.h> + +/* ipcs ctl commands */ +#define MSG_STAT 11 +#define MSG_INFO 12 + +/* msgrcv options */ +#define MSG_NOERROR     010000  /* no error if message is too big */ +#define MSG_EXCEPT      020000  /* recv any msg except of specified type.*/ + +/* Obsolete, used only for backwards compatibility and libc5 compiles */ +struct msqid_ds { +	struct ipc_perm msg_perm; +	struct msg *msg_first;		/* first message on queue,unused  */ +	struct msg *msg_last;		/* last message in queue,unused */ +	__kernel_time_t msg_stime;	/* last msgsnd time */ +	__kernel_time_t msg_rtime;	/* last msgrcv time */ +	__kernel_time_t msg_ctime;	/* last change time */ +	unsigned long  msg_lcbytes;	/* Reuse junk fields for 32 bit */ +	unsigned long  msg_lqbytes;	/* ditto */ +	unsigned short msg_cbytes;	/* current number of bytes on queue */ +	unsigned short msg_qnum;	/* number of messages in queue */ +	unsigned short msg_qbytes;	/* max number of bytes on queue */ +	__kernel_ipc_pid_t msg_lspid;	/* pid of last msgsnd */ +	__kernel_ipc_pid_t msg_lrpid;	/* last receive pid */ +}; + +/* Include the definition of msqid64_ds */ +#include <asm/msgbuf.h> + +/* message buffer for msgsnd and msgrcv calls */ +struct msgbuf { +	long mtype;         /* type of message */ +	char mtext[1];      /* message text */ +}; + +/* buffer for msgctl calls IPC_INFO, MSG_INFO */ +struct msginfo { +	int msgpool; +	int msgmap;  +	int msgmax;  +	int msgmnb;  +	int msgmni;  +	int msgssz;  +	int msgtql;  +	unsigned short  msgseg;  +}; + +/* + * Scaling factor to compute msgmni: + * the memory dedicated to msg queues (msgmni * msgmnb) should occupy + * at most 1/MSG_MEM_SCALE of the lowmem (see the formula in ipc/msg.c): + * up to 8MB       : msgmni = 16 (MSGMNI) + * 4 GB            : msgmni = 8K + * more than 16 GB : msgmni = 32K (IPCMNI) + */ +#define MSG_MEM_SCALE 32 + +#define MSGMNI    16   /* <= IPCMNI */     /* max # of msg queue identifiers */ +#define MSGMAX  8192   /* <= INT_MAX */   /* max size of message (bytes) */ +#define MSGMNB 16384   /* <= INT_MAX */   /* default max size of a message queue */ + +/* unused */ +#define MSGPOOL (MSGMNI * MSGMNB / 1024) /* size in kbytes of message pool */ +#define MSGTQL  MSGMNB            /* number of system message headers */ +#define MSGMAP  MSGMNB            /* number of entries in message map */ +#define MSGSSZ  16                /* message segment size */ +#define __MSGSEG ((MSGPOOL * 1024) / MSGSSZ) /* max no. of segments */ +#define MSGSEG (__MSGSEG <= 0xffff ? __MSGSEG : 0xffff) + + +#endif /* _UAPI_LINUX_MSG_H */ diff --git a/include/uapi/linux/mtio.h b/include/uapi/linux/mtio.h new file mode 100644 index 00000000000..18543e2db06 --- /dev/null +++ b/include/uapi/linux/mtio.h @@ -0,0 +1,208 @@ +/*  + * linux/mtio.h header file for Linux. Written by H. Bergman + * + * Modified for special ioctls provided by zftape in September 1997 + * by C.-J. Heine. + */ + +#ifndef _LINUX_MTIO_H +#define _LINUX_MTIO_H + +#include <linux/types.h> +#include <linux/ioctl.h> + +/* + * Structures and definitions for mag tape io control commands + */ + +/* structure for MTIOCTOP - mag tape op command */ +struct	mtop { +	short	mt_op;		/* operations defined below */ +	int	mt_count;	/* how many of them */ +}; + +/* Magnetic Tape operations [Not all operations supported by all drivers]: */ +#define MTRESET 0	/* +reset drive in case of problems */ +#define MTFSF	1	/* forward space over FileMark, +			 * position at first record of next file  +			 */ +#define MTBSF	2	/* backward space FileMark (position before FM) */ +#define MTFSR	3	/* forward space record */ +#define MTBSR	4	/* backward space record */ +#define MTWEOF	5	/* write an end-of-file record (mark) */ +#define MTREW	6	/* rewind */ +#define MTOFFL	7	/* rewind and put the drive offline (eject?) */ +#define MTNOP	8	/* no op, set status only (read with MTIOCGET) */ +#define MTRETEN 9	/* retension tape */ +#define MTBSFM	10	/* +backward space FileMark, position at FM */ +#define MTFSFM  11	/* +forward space FileMark, position at FM */ +#define MTEOM	12	/* goto end of recorded media (for appending files). +			 * MTEOM positions after the last FM, ready for +			 * appending another file. +			 */ +#define MTERASE 13	/* erase tape -- be careful! */ + +#define MTRAS1  14	/* run self test 1 (nondestructive) */ +#define MTRAS2	15	/* run self test 2 (destructive) */ +#define MTRAS3  16	/* reserved for self test 3 */ + +#define MTSETBLK 20	/* set block length (SCSI) */ +#define MTSETDENSITY 21	/* set tape density (SCSI) */ +#define MTSEEK	22	/* seek to block (Tandberg, etc.) */ +#define MTTELL	23	/* tell block (Tandberg, etc.) */ +#define MTSETDRVBUFFER 24 /* set the drive buffering according to SCSI-2 */ +			/* ordinary buffered operation with code 1 */ +#define MTFSS	25	/* space forward over setmarks */ +#define MTBSS	26	/* space backward over setmarks */ +#define MTWSM	27	/* write setmarks */ + +#define MTLOCK  28	/* lock the drive door */ +#define MTUNLOCK 29	/* unlock the drive door */ +#define MTLOAD  30	/* execute the SCSI load command */ +#define MTUNLOAD 31	/* execute the SCSI unload command */ +#define MTCOMPRESSION 32/* control compression with SCSI mode page 15 */ +#define MTSETPART 33	/* Change the active tape partition */ +#define MTMKPART  34	/* Format the tape with one or two partitions */ +#define MTWEOFI	35	/* write an end-of-file record (mark) in immediate mode */ + +/* structure for MTIOCGET - mag tape get status command */ + +struct	mtget { +	long	mt_type;	/* type of magtape device */ +	long	mt_resid;	/* residual count: (not sure) +				 *	number of bytes ignored, or +				 *	number of files not skipped, or +				 *	number of records not skipped. +				 */ +	/* the following registers are device dependent */ +	long	mt_dsreg;	/* status register */ +	long	mt_gstat;	/* generic (device independent) status */ +	long	mt_erreg;	/* error register */ +	/* The next two fields are not always used */ +	__kernel_daddr_t mt_fileno;	/* number of current file on tape */ +	__kernel_daddr_t mt_blkno;	/* current block number */ +}; + + + +/* + * Constants for mt_type. Not all of these are supported, + * and these are not all of the ones that are supported. + */ +#define MT_ISUNKNOWN		0x01 +#define MT_ISQIC02		0x02	/* Generic QIC-02 tape streamer */ +#define MT_ISWT5150		0x03	/* Wangtek 5150EQ, QIC-150, QIC-02 */ +#define MT_ISARCHIVE_5945L2	0x04	/* Archive 5945L-2, QIC-24, QIC-02? */ +#define MT_ISCMSJ500		0x05	/* CMS Jumbo 500 (QIC-02?) */ +#define MT_ISTDC3610		0x06	/* Tandberg 6310, QIC-24 */ +#define MT_ISARCHIVE_VP60I	0x07	/* Archive VP60i, QIC-02 */ +#define MT_ISARCHIVE_2150L	0x08	/* Archive Viper 2150L */ +#define MT_ISARCHIVE_2060L	0x09	/* Archive Viper 2060L */ +#define MT_ISARCHIVESC499	0x0A	/* Archive SC-499 QIC-36 controller */ +#define MT_ISQIC02_ALL_FEATURES	0x0F	/* Generic QIC-02 with all features */ +#define MT_ISWT5099EEN24	0x11	/* Wangtek 5099-een24, 60MB, QIC-24 */ +#define MT_ISTEAC_MT2ST		0x12	/* Teac MT-2ST 155mb drive, Teac DC-1 card (Wangtek type) */ +#define MT_ISEVEREX_FT40A	0x32	/* Everex FT40A (QIC-40) */ +#define MT_ISDDS1		0x51	/* DDS device without partitions */ +#define MT_ISDDS2		0x52	/* DDS device with partitions */ +#define MT_ISONSTREAM_SC        0x61   /* OnStream SCSI tape drives (SC-x0) +					  and SCSI emulated (DI, DP, USB) */ +#define MT_ISSCSI1		0x71	/* Generic ANSI SCSI-1 tape unit */ +#define MT_ISSCSI2		0x72	/* Generic ANSI SCSI-2 tape unit */ + +/* QIC-40/80/3010/3020 ftape supported drives. + * 20bit vendor ID + 0x800000 (see ftape-vendors.h) + */ +#define MT_ISFTAPE_UNKNOWN	0x800000 /* obsolete */ +#define MT_ISFTAPE_FLAG	0x800000 + + +/* structure for MTIOCPOS - mag tape get position command */ + +struct	mtpos { +	long 	mt_blkno;	/* current block number */ +}; + + +/* mag tape io control commands */ +#define	MTIOCTOP	_IOW('m', 1, struct mtop)	/* do a mag tape op */ +#define	MTIOCGET	_IOR('m', 2, struct mtget)	/* get tape status */ +#define	MTIOCPOS	_IOR('m', 3, struct mtpos)	/* get tape position */ + + +/* Generic Mag Tape (device independent) status macros for examining + * mt_gstat -- HP-UX compatible. + * There is room for more generic status bits here, but I don't + * know which of them are reserved. At least three or so should + * be added to make this really useful. + */ +#define GMT_EOF(x)              ((x) & 0x80000000) +#define GMT_BOT(x)              ((x) & 0x40000000) +#define GMT_EOT(x)              ((x) & 0x20000000) +#define GMT_SM(x)               ((x) & 0x10000000)  /* DDS setmark */ +#define GMT_EOD(x)              ((x) & 0x08000000)  /* DDS EOD */ +#define GMT_WR_PROT(x)          ((x) & 0x04000000) +/* #define GMT_ ? 		((x) & 0x02000000) */ +#define GMT_ONLINE(x)           ((x) & 0x01000000) +#define GMT_D_6250(x)           ((x) & 0x00800000) +#define GMT_D_1600(x)           ((x) & 0x00400000) +#define GMT_D_800(x)            ((x) & 0x00200000) +/* #define GMT_ ? 		((x) & 0x00100000) */ +/* #define GMT_ ? 		((x) & 0x00080000) */ +#define GMT_DR_OPEN(x)          ((x) & 0x00040000)  /* door open (no tape) */ +/* #define GMT_ ? 		((x) & 0x00020000) */ +#define GMT_IM_REP_EN(x)        ((x) & 0x00010000)  /* immediate report mode */ +#define GMT_CLN(x)              ((x) & 0x00008000)  /* cleaning requested */ +/* 15 generic status bits unused */ + + +/* SCSI-tape specific definitions */ +/* Bitfield shifts in the status  */ +#define MT_ST_BLKSIZE_SHIFT	0 +#define MT_ST_BLKSIZE_MASK	0xffffff +#define MT_ST_DENSITY_SHIFT	24 +#define MT_ST_DENSITY_MASK	0xff000000 + +#define MT_ST_SOFTERR_SHIFT	0 +#define MT_ST_SOFTERR_MASK	0xffff + +/* Bitfields for the MTSETDRVBUFFER ioctl */ +#define MT_ST_OPTIONS		0xf0000000 +#define MT_ST_BOOLEANS		0x10000000 +#define MT_ST_SETBOOLEANS	0x30000000 +#define MT_ST_CLEARBOOLEANS	0x40000000 +#define MT_ST_WRITE_THRESHOLD	0x20000000 +#define MT_ST_DEF_BLKSIZE	0x50000000 +#define MT_ST_DEF_OPTIONS	0x60000000 +#define MT_ST_TIMEOUTS		0x70000000 +#define MT_ST_SET_TIMEOUT	(MT_ST_TIMEOUTS | 0x000000) +#define MT_ST_SET_LONG_TIMEOUT	(MT_ST_TIMEOUTS | 0x100000) +#define MT_ST_SET_CLN		0x80000000 + +#define MT_ST_BUFFER_WRITES	0x1 +#define MT_ST_ASYNC_WRITES	0x2 +#define MT_ST_READ_AHEAD	0x4 +#define MT_ST_DEBUGGING		0x8 +#define MT_ST_TWO_FM		0x10 +#define MT_ST_FAST_MTEOM	0x20 +#define MT_ST_AUTO_LOCK		0x40 +#define MT_ST_DEF_WRITES	0x80 +#define MT_ST_CAN_BSR		0x100 +#define MT_ST_NO_BLKLIMS	0x200 +#define MT_ST_CAN_PARTITIONS    0x400 +#define MT_ST_SCSI2LOGICAL      0x800 +#define MT_ST_SYSV              0x1000 +#define MT_ST_NOWAIT            0x2000 +#define MT_ST_SILI		0x4000 +#define MT_ST_NOWAIT_EOF	0x8000 + +/* The mode parameters to be controlled. Parameter chosen with bits 20-28 */ +#define MT_ST_CLEAR_DEFAULT	0xfffff +#define MT_ST_DEF_DENSITY	(MT_ST_DEF_OPTIONS | 0x100000) +#define MT_ST_DEF_COMPRESSION	(MT_ST_DEF_OPTIONS | 0x200000) +#define MT_ST_DEF_DRVBUFFER	(MT_ST_DEF_OPTIONS | 0x300000) + +/* The offset for the arguments for the special HP changer load command. */ +#define MT_ST_HPLOADER_OFFSET 10000 + +#endif /* _LINUX_MTIO_H */ diff --git a/include/uapi/linux/n_r3964.h b/include/uapi/linux/n_r3964.h new file mode 100644 index 00000000000..81337cbf40b --- /dev/null +++ b/include/uapi/linux/n_r3964.h @@ -0,0 +1,98 @@ +/* r3964 linediscipline for linux + * + * ----------------------------------------------------------- + * Copyright by + * Philips Automation Projects + * Kassel (Germany) + * ----------------------------------------------------------- + * This software may be used and distributed according to the terms of + * the GNU General Public License, incorporated herein by reference. + * + * Author: + * L. Haag + * + * $Log: r3964.h,v $ + * Revision 1.4  2005/12/21 19:54:24  Kurt Huwig <kurt huwig de> + * Fixed HZ usage on 2.6 kernels + * Removed unnecessary include + * + * Revision 1.3  2001/03/18 13:02:24  dwmw2 + * Fix timer usage, use spinlocks properly. + * + * Revision 1.2  2001/03/18 12:53:15  dwmw2 + * Merge changes in 2.4.2 + * + * Revision 1.1.1.1  1998/10/13 16:43:14  dwmw2 + * This'll screw the version control + * + * Revision 1.6  1998/09/30 00:40:38  dwmw2 + * Updated to use kernel's N_R3964 if available + * + * Revision 1.4  1998/04/02 20:29:44  lhaag + * select, blocking, ... + * + * Revision 1.3  1998/02/12 18:58:43  root + * fixed some memory leaks + * calculation of checksum characters + * + * Revision 1.2  1998/02/07 13:03:17  root + * ioctl read_telegram + * + * Revision 1.1  1998/02/06 19:19:43  root + * Initial revision + * + * + */ + +#ifndef _UAPI__LINUX_N_R3964_H__ +#define _UAPI__LINUX_N_R3964_H__ + +/* line disciplines for r3964 protocol */ + + +/* + * Ioctl-commands + */ + +#define R3964_ENABLE_SIGNALS      0x5301 +#define R3964_SETPRIORITY         0x5302 +#define R3964_USE_BCC             0x5303 +#define R3964_READ_TELEGRAM       0x5304 + +/* Options for R3964_SETPRIORITY */ +#define R3964_MASTER   0 +#define R3964_SLAVE    1 + +/* Options for R3964_ENABLE_SIGNALS */ +#define R3964_SIG_ACK   0x0001 +#define R3964_SIG_DATA  0x0002 +#define R3964_SIG_ALL   0x000f +#define R3964_SIG_NONE  0x0000 +#define R3964_USE_SIGIO 0x1000 + +/* + * r3964 operation states: + */ + +/* types for msg_id: */ +enum {R3964_MSG_ACK=1, R3964_MSG_DATA }; + +#define R3964_MAX_MSG_COUNT 32 + +/* error codes for client messages */ +#define R3964_OK 0        /* no error. */ +#define R3964_TX_FAIL -1  /* transmission error, block NOT sent */ +#define R3964_OVERFLOW -2 /* msg queue overflow */ + +/* the client gets this struct when calling read(fd,...): */ +struct r3964_client_message { +	  int     msg_id; +	  int     arg; +	  int     error_code; +}; + +#define R3964_MTU      256 + + + +#endif /* _UAPI__LINUX_N_R3964_H__ */ diff --git a/include/uapi/linux/nbd.h b/include/uapi/linux/nbd.h new file mode 100644 index 00000000000..dfb514472cb --- /dev/null +++ b/include/uapi/linux/nbd.h @@ -0,0 +1,77 @@ +/* + * 1999 Copyright (C) Pavel Machek, pavel@ucw.cz. This code is GPL. + * 1999/11/04 Copyright (C) 1999 VMware, Inc. (Regis "HPReg" Duchesne) + *            Made nbd_end_request() use the io_request_lock + * 2001 Copyright (C) Steven Whitehouse + *            New nbd_end_request() for compatibility with new linux block + *            layer code. + * 2003/06/24 Louis D. Langholtz <ldl@aros.net> + *            Removed unneeded blksize_bits field from nbd_device struct. + *            Cleanup PARANOIA usage & code. + * 2004/02/19 Paul Clements + *            Removed PARANOIA, plus various cleanup and comments + */ + +#ifndef _UAPILINUX_NBD_H +#define _UAPILINUX_NBD_H + +#include <linux/types.h> + +#define NBD_SET_SOCK	_IO( 0xab, 0 ) +#define NBD_SET_BLKSIZE	_IO( 0xab, 1 ) +#define NBD_SET_SIZE	_IO( 0xab, 2 ) +#define NBD_DO_IT	_IO( 0xab, 3 ) +#define NBD_CLEAR_SOCK	_IO( 0xab, 4 ) +#define NBD_CLEAR_QUE	_IO( 0xab, 5 ) +#define NBD_PRINT_DEBUG	_IO( 0xab, 6 ) +#define NBD_SET_SIZE_BLOCKS	_IO( 0xab, 7 ) +#define NBD_DISCONNECT  _IO( 0xab, 8 ) +#define NBD_SET_TIMEOUT _IO( 0xab, 9 ) +#define NBD_SET_FLAGS   _IO( 0xab, 10) + +enum { +	NBD_CMD_READ = 0, +	NBD_CMD_WRITE = 1, +	NBD_CMD_DISC = 2, +	/* there is a gap here to match userspace */ +	NBD_CMD_TRIM = 4 +}; + +/* values for flags field */ +#define NBD_FLAG_HAS_FLAGS    (1 << 0) /* nbd-server supports flags */ +#define NBD_FLAG_READ_ONLY    (1 << 1) /* device is read-only */ +/* there is a gap here to match userspace */ +#define NBD_FLAG_SEND_TRIM    (1 << 5) /* send trim/discard */ + +#define nbd_cmd(req) ((req)->cmd[0]) + +/* userspace doesn't need the nbd_device structure */ + +/* These are sent over the network in the request/reply magic fields */ + +#define NBD_REQUEST_MAGIC 0x25609513 +#define NBD_REPLY_MAGIC 0x67446698 +/* Do *not* use magics: 0x12560953 0x96744668. */ + +/* + * This is the packet used for communication between client and + * server. All data are in network byte order. + */ +struct nbd_request { +	__be32 magic; +	__be32 type;	/* == READ || == WRITE 	*/ +	char handle[8]; +	__be64 from; +	__be32 len; +} __attribute__((packed)); + +/* + * This is the reply packet that nbd-server sends back to the client after + * it has completed an I/O request (or an error occurs). + */ +struct nbd_reply { +	__be32 magic; +	__be32 error;		/* 0 = ok, else error	*/ +	char handle[8];		/* handle you got from request	*/ +}; +#endif /* _UAPILINUX_NBD_H */ diff --git a/include/uapi/linux/ncp.h b/include/uapi/linux/ncp.h new file mode 100644 index 00000000000..99f0adeeb3f --- /dev/null +++ b/include/uapi/linux/ncp.h @@ -0,0 +1,201 @@ +/* + *  ncp.h + * + *  Copyright (C) 1995 by Volker Lendecke + *  Modified for sparc by J.F. Chadima + *  Modified for __constant_ntoh by Frank A. Vorstenbosch + * + */ + +#ifndef _LINUX_NCP_H +#define _LINUX_NCP_H + +#include <linux/types.h> + +#define NCP_PTYPE                (0x11) +#define NCP_PORT                 (0x0451) + +#define NCP_ALLOC_SLOT_REQUEST   (0x1111) +#define NCP_REQUEST              (0x2222) +#define NCP_DEALLOC_SLOT_REQUEST (0x5555) + +struct ncp_request_header { +	__u16 type; +	__u8 sequence; +	__u8 conn_low; +	__u8 task; +	__u8 conn_high; +	__u8 function; +	__u8 data[0]; +} __attribute__((packed)); + +#define NCP_REPLY                (0x3333) +#define NCP_WATCHDOG		 (0x3E3E) +#define NCP_POSITIVE_ACK         (0x9999) + +struct ncp_reply_header { +	__u16 type; +	__u8 sequence; +	__u8 conn_low; +	__u8 task; +	__u8 conn_high; +	__u8 completion_code; +	__u8 connection_state; +	__u8 data[0]; +} __attribute__((packed)); + +#define NCP_VOLNAME_LEN (16) +#define NCP_NUMBER_OF_VOLUMES (256) +struct ncp_volume_info { +	__u32 total_blocks; +	__u32 free_blocks; +	__u32 purgeable_blocks; +	__u32 not_yet_purgeable_blocks; +	__u32 total_dir_entries; +	__u32 available_dir_entries; +	__u8 sectors_per_block; +	char volume_name[NCP_VOLNAME_LEN + 1]; +}; + +#define AR_READ      (cpu_to_le16(1)) +#define AR_WRITE     (cpu_to_le16(2)) +#define AR_EXCLUSIVE (cpu_to_le16(0x20)) + +#define NCP_FILE_ID_LEN 6 + +/* Defines for Name Spaces */ +#define NW_NS_DOS     0 +#define NW_NS_MAC     1 +#define NW_NS_NFS     2 +#define NW_NS_FTAM    3 +#define NW_NS_OS2     4 + +/*  Defines for ReturnInformationMask */ +#define RIM_NAME	      (cpu_to_le32(1)) +#define RIM_SPACE_ALLOCATED   (cpu_to_le32(2)) +#define RIM_ATTRIBUTES	      (cpu_to_le32(4)) +#define RIM_DATA_SIZE	      (cpu_to_le32(8)) +#define RIM_TOTAL_SIZE	      (cpu_to_le32(0x10)) +#define RIM_EXT_ATTR_INFO     (cpu_to_le32(0x20)) +#define RIM_ARCHIVE	      (cpu_to_le32(0x40)) +#define RIM_MODIFY	      (cpu_to_le32(0x80)) +#define RIM_CREATION	      (cpu_to_le32(0x100)) +#define RIM_OWNING_NAMESPACE  (cpu_to_le32(0x200)) +#define RIM_DIRECTORY	      (cpu_to_le32(0x400)) +#define RIM_RIGHTS	      (cpu_to_le32(0x800)) +#define RIM_ALL 	      (cpu_to_le32(0xFFF)) +#define RIM_COMPRESSED_INFO   (cpu_to_le32(0x80000000)) + +/* Defines for NSInfoBitMask */ +#define NSIBM_NFS_NAME		0x0001 +#define NSIBM_NFS_MODE		0x0002 +#define NSIBM_NFS_GID		0x0004 +#define NSIBM_NFS_NLINKS	0x0008 +#define NSIBM_NFS_RDEV		0x0010 +#define NSIBM_NFS_LINK		0x0020 +#define NSIBM_NFS_CREATED	0x0040 +#define NSIBM_NFS_UID		0x0080 +#define NSIBM_NFS_ACSFLAG	0x0100 +#define NSIBM_NFS_MYFLAG	0x0200 + +/* open/create modes */ +#define OC_MODE_OPEN	  0x01 +#define OC_MODE_TRUNCATE  0x02 +#define OC_MODE_REPLACE   0x02 +#define OC_MODE_CREATE	  0x08 + +/* open/create results */ +#define OC_ACTION_NONE	   0x00 +#define OC_ACTION_OPEN	   0x01 +#define OC_ACTION_CREATE   0x02 +#define OC_ACTION_TRUNCATE 0x04 +#define OC_ACTION_REPLACE  0x04 + +/* access rights attributes */ +#ifndef AR_READ_ONLY +#define AR_READ_ONLY	   0x0001 +#define AR_WRITE_ONLY	   0x0002 +#define AR_DENY_READ	   0x0004 +#define AR_DENY_WRITE	   0x0008 +#define AR_COMPATIBILITY   0x0010 +#define AR_WRITE_THROUGH   0x0040 +#define AR_OPEN_COMPRESSED 0x0100 +#endif + +struct nw_nfs_info { +	__u32 mode; +	__u32 rdev; +}; + +struct nw_info_struct { +	__u32 spaceAlloc; +	__le32 attributes; +	__u16 flags; +	__le32 dataStreamSize; +	__le32 totalStreamSize; +	__u16 numberOfStreams; +	__le16 creationTime; +	__le16 creationDate; +	__u32 creatorID; +	__le16 modifyTime; +	__le16 modifyDate; +	__u32 modifierID; +	__le16 lastAccessDate; +	__u16 archiveTime; +	__u16 archiveDate; +	__u32 archiverID; +	__u16 inheritedRightsMask; +	__le32 dirEntNum; +	__le32 DosDirNum; +	__u32 volNumber; +	__u32 EADataSize; +	__u32 EAKeyCount; +	__u32 EAKeySize; +	__u32 NSCreator; +	__u8 nameLen; +	__u8 entryName[256]; +	/* libncp may depend on there being nothing after entryName */ +#ifdef __KERNEL__ +	struct nw_nfs_info nfs; +#endif +} __attribute__((packed)); + +/* modify mask - use with MODIFY_DOS_INFO structure */ +#define DM_ATTRIBUTES		  (cpu_to_le32(0x02)) +#define DM_CREATE_DATE		  (cpu_to_le32(0x04)) +#define DM_CREATE_TIME		  (cpu_to_le32(0x08)) +#define DM_CREATOR_ID		  (cpu_to_le32(0x10)) +#define DM_ARCHIVE_DATE 	  (cpu_to_le32(0x20)) +#define DM_ARCHIVE_TIME 	  (cpu_to_le32(0x40)) +#define DM_ARCHIVER_ID		  (cpu_to_le32(0x80)) +#define DM_MODIFY_DATE		  (cpu_to_le32(0x0100)) +#define DM_MODIFY_TIME		  (cpu_to_le32(0x0200)) +#define DM_MODIFIER_ID		  (cpu_to_le32(0x0400)) +#define DM_LAST_ACCESS_DATE	  (cpu_to_le32(0x0800)) +#define DM_INHERITED_RIGHTS_MASK  (cpu_to_le32(0x1000)) +#define DM_MAXIMUM_SPACE	  (cpu_to_le32(0x2000)) + +struct nw_modify_dos_info { +	__le32 attributes; +	__le16 creationDate; +	__le16 creationTime; +	__u32 creatorID; +	__le16 modifyDate; +	__le16 modifyTime; +	__u32 modifierID; +	__u16 archiveDate; +	__u16 archiveTime; +	__u32 archiverID; +	__le16 lastAccessDate; +	__u16 inheritanceGrantMask; +	__u16 inheritanceRevokeMask; +	__u32 maximumSpace; +} __attribute__((packed)); + +struct nw_search_sequence { +	__u8 volNumber; +	__u32 dirBase; +	__u32 sequence; +} __attribute__((packed)); + +#endif				/* _LINUX_NCP_H */ diff --git a/include/uapi/linux/ncp_fs.h b/include/uapi/linux/ncp_fs.h new file mode 100644 index 00000000000..e13eefef065 --- /dev/null +++ b/include/uapi/linux/ncp_fs.h @@ -0,0 +1,146 @@ +/* + *  ncp_fs.h + * + *  Copyright (C) 1995, 1996 by Volker Lendecke + * + */ + +#ifndef _LINUX_NCP_FS_H +#define _LINUX_NCP_FS_H + +#include <linux/fs.h> +#include <linux/in.h> +#include <linux/types.h> +#include <linux/magic.h> + +#include <linux/ipx.h> +#include <linux/ncp_no.h> + +/* + * ioctl commands + */ + +struct ncp_ioctl_request { +	unsigned int function; +	unsigned int size; +	char __user *data; +}; + +struct ncp_fs_info { +	int version; +	struct sockaddr_ipx addr; +	__kernel_uid_t mounted_uid; +	int connection;		/* Connection number the server assigned us */ +	int buffer_size;	/* The negotiated buffer size, to be +				   used for read/write requests! */ + +	int volume_number; +	__le32 directory_id; +}; + +struct ncp_fs_info_v2 { +	int version; +	unsigned long mounted_uid; +	unsigned int connection; +	unsigned int buffer_size; + +	unsigned int volume_number; +	__le32 directory_id; + +	__u32 dummy1; +	__u32 dummy2; +	__u32 dummy3; +}; + +struct ncp_sign_init +{ +	char sign_root[8]; +	char sign_last[16]; +}; + +struct ncp_lock_ioctl +{ +#define NCP_LOCK_LOG	0 +#define NCP_LOCK_SH	1 +#define NCP_LOCK_EX	2 +#define NCP_LOCK_CLEAR	256 +	int		cmd; +	int		origin; +	unsigned int	offset; +	unsigned int	length; +#define NCP_LOCK_DEFAULT_TIMEOUT	18 +#define NCP_LOCK_MAX_TIMEOUT		180 +	int		timeout; +}; + +struct ncp_setroot_ioctl +{ +	int		volNumber; +	int		namespace; +	__le32		dirEntNum; +}; + +struct ncp_objectname_ioctl +{ +#define NCP_AUTH_NONE	0x00 +#define NCP_AUTH_BIND	0x31 +#define NCP_AUTH_NDS	0x32 +	int		auth_type; +	size_t		object_name_len; +	void __user *	object_name;	/* a userspace data, in most cases user name */ +}; + +struct ncp_privatedata_ioctl +{ +	size_t		len; +	void __user *	data;		/* ~1000 for NDS */ +}; + +/* NLS charsets by ioctl */ +#define NCP_IOCSNAME_LEN 20 +struct ncp_nls_ioctl +{ +	unsigned char codepage[NCP_IOCSNAME_LEN+1]; +	unsigned char iocharset[NCP_IOCSNAME_LEN+1]; +}; + +#define	NCP_IOC_NCPREQUEST		_IOR('n', 1, struct ncp_ioctl_request) +#define	NCP_IOC_GETMOUNTUID		_IOW('n', 2, __kernel_old_uid_t) +#define NCP_IOC_GETMOUNTUID2		_IOW('n', 2, unsigned long) + +#define NCP_IOC_CONN_LOGGED_IN          _IO('n', 3) + +#define NCP_GET_FS_INFO_VERSION    (1) +#define NCP_IOC_GET_FS_INFO             _IOWR('n', 4, struct ncp_fs_info) +#define NCP_GET_FS_INFO_VERSION_V2 (2) +#define NCP_IOC_GET_FS_INFO_V2		_IOWR('n', 4, struct ncp_fs_info_v2) + +#define NCP_IOC_SIGN_INIT		_IOR('n', 5, struct ncp_sign_init) +#define NCP_IOC_SIGN_WANTED		_IOR('n', 6, int) +#define NCP_IOC_SET_SIGN_WANTED		_IOW('n', 6, int) + +#define NCP_IOC_LOCKUNLOCK		_IOR('n', 7, struct ncp_lock_ioctl) + +#define NCP_IOC_GETROOT			_IOW('n', 8, struct ncp_setroot_ioctl) +#define NCP_IOC_SETROOT			_IOR('n', 8, struct ncp_setroot_ioctl) + +#define NCP_IOC_GETOBJECTNAME		_IOWR('n', 9, struct ncp_objectname_ioctl) +#define NCP_IOC_SETOBJECTNAME		_IOR('n', 9, struct ncp_objectname_ioctl) +#define NCP_IOC_GETPRIVATEDATA		_IOWR('n', 10, struct ncp_privatedata_ioctl) +#define NCP_IOC_SETPRIVATEDATA		_IOR('n', 10, struct ncp_privatedata_ioctl) + +#define NCP_IOC_GETCHARSETS		_IOWR('n', 11, struct ncp_nls_ioctl) +#define NCP_IOC_SETCHARSETS		_IOR('n', 11, struct ncp_nls_ioctl) + +#define NCP_IOC_GETDENTRYTTL		_IOW('n', 12, __u32) +#define NCP_IOC_SETDENTRYTTL		_IOR('n', 12, __u32) + +/* + * The packet size to allocate. One page should be enough. + */ +#define NCP_PACKET_SIZE 4070 + +#define NCP_MAXPATHLEN 255 +#define NCP_MAXNAMELEN 14 + +#endif				/* _LINUX_NCP_FS_H */ diff --git a/include/uapi/linux/ncp_mount.h b/include/uapi/linux/ncp_mount.h new file mode 100644 index 00000000000..dfcbea2d889 --- /dev/null +++ b/include/uapi/linux/ncp_mount.h @@ -0,0 +1,71 @@ +/* + *  ncp_mount.h + * + *  Copyright (C) 1995, 1996 by Volker Lendecke + * + */ + +#ifndef _LINUX_NCP_MOUNT_H +#define _LINUX_NCP_MOUNT_H + +#include <linux/types.h> +#include <linux/ncp.h> + +#define NCP_MOUNT_VERSION 3	/* Binary */ + +/* Values for flags */ +#define NCP_MOUNT_SOFT		0x0001 +#define NCP_MOUNT_INTR		0x0002 +#define NCP_MOUNT_STRONG	0x0004	/* enable delete/rename of r/o files */ +#define NCP_MOUNT_NO_OS2	0x0008	/* do not use OS/2 (LONG) namespace */ +#define NCP_MOUNT_NO_NFS	0x0010	/* do not use NFS namespace */ +#define NCP_MOUNT_EXTRAS	0x0020 +#define NCP_MOUNT_SYMLINKS	0x0040	/* enable symlinks */ +#define NCP_MOUNT_NFS_EXTRAS	0x0080	/* Enable use of NFS NS meta-info */ + +struct ncp_mount_data { +	int version; +	unsigned int ncp_fd;	/* The socket to the ncp port */ +	__kernel_uid_t mounted_uid;	/* Who may umount() this filesystem? */ +	__kernel_pid_t wdog_pid;		/* Who cares for our watchdog packets? */ + +	unsigned char mounted_vol[NCP_VOLNAME_LEN + 1]; +	unsigned int time_out;	/* How long should I wait after +				   sending a NCP request? */ +	unsigned int retry_count;	/* And how often should I retry? */ +	unsigned int flags; + +	__kernel_uid_t uid; +	__kernel_gid_t gid; +	__kernel_mode_t file_mode; +	__kernel_mode_t dir_mode; +}; + +#define NCP_MOUNT_VERSION_V4	(4)	/* Binary or text */ + +struct ncp_mount_data_v4 { +	int version; +	unsigned long flags;	/* NCP_MOUNT_* flags */ +	/* MIPS uses long __kernel_uid_t, but... */ +	/* we neever pass -1, so it is safe */ +	unsigned long mounted_uid;	/* Who may umount() this filesystem? */ +	/* MIPS uses long __kernel_pid_t */ +	long wdog_pid;		/* Who cares for our watchdog packets? */ + +	unsigned int ncp_fd;	/* The socket to the ncp port */ +	unsigned int time_out;	/* How long should I wait after +				   sending a NCP request? */ +	unsigned int retry_count;	/* And how often should I retry? */ + +	/* MIPS uses long __kernel_uid_t... */ +	/* we never pass -1, so it is safe */ +	unsigned long uid; +	unsigned long gid; +	/* MIPS uses unsigned long __kernel_mode_t */ +	unsigned long file_mode; +	unsigned long dir_mode; +}; + +#define NCP_MOUNT_VERSION_V5	(5)	/* Text only */ + +#endif diff --git a/include/uapi/linux/ncp_no.h b/include/uapi/linux/ncp_no.h new file mode 100644 index 00000000000..cddaa48fb18 --- /dev/null +++ b/include/uapi/linux/ncp_no.h @@ -0,0 +1,19 @@ +#ifndef _NCP_NO +#define _NCP_NO + +/* these define the attribute byte as seen by NCP */ +#define aRONLY			(__cpu_to_le32(1)) +#define aHIDDEN			(__cpu_to_le32(2)) +#define aSYSTEM			(__cpu_to_le32(4)) +#define aEXECUTE		(__cpu_to_le32(8)) +#define aDIR			(__cpu_to_le32(0x10)) +#define aARCH			(__cpu_to_le32(0x20)) +#define aSHARED			(__cpu_to_le32(0x80)) +#define aDONTSUBALLOCATE	(__cpu_to_le32(1L<<11)) +#define aTRANSACTIONAL		(__cpu_to_le32(1L<<12)) +#define aPURGE			(__cpu_to_le32(1L<<16)) +#define aRENAMEINHIBIT		(__cpu_to_le32(1L<<17)) +#define aDELETEINHIBIT		(__cpu_to_le32(1L<<18)) +#define aDONTCOMPRESS		(__cpu_to_le32(1L<<27)) + +#endif /* _NCP_NO */ diff --git a/include/uapi/linux/neighbour.h b/include/uapi/linux/neighbour.h new file mode 100644 index 00000000000..275e5d65dcb --- /dev/null +++ b/include/uapi/linux/neighbour.h @@ -0,0 +1,159 @@ +#ifndef __LINUX_NEIGHBOUR_H +#define __LINUX_NEIGHBOUR_H + +#include <linux/types.h> +#include <linux/netlink.h> + +struct ndmsg { +	__u8		ndm_family; +	__u8		ndm_pad1; +	__u16		ndm_pad2; +	__s32		ndm_ifindex; +	__u16		ndm_state; +	__u8		ndm_flags; +	__u8		ndm_type; +}; + +enum { +	NDA_UNSPEC, +	NDA_DST, +	NDA_LLADDR, +	NDA_CACHEINFO, +	NDA_PROBES, +	__NDA_MAX +}; + +#define NDA_MAX (__NDA_MAX - 1) + +/* + *	Neighbor Cache Entry Flags + */ + +#define NTF_USE		0x01 +#define NTF_PROXY	0x08	/* == ATF_PUBL */ +#define NTF_ROUTER	0x80 + +#define NTF_SELF	0x02 +#define NTF_MASTER	0x04 + +/* + *	Neighbor Cache Entry States. + */ + +#define NUD_INCOMPLETE	0x01 +#define NUD_REACHABLE	0x02 +#define NUD_STALE	0x04 +#define NUD_DELAY	0x08 +#define NUD_PROBE	0x10 +#define NUD_FAILED	0x20 + +/* Dummy states */ +#define NUD_NOARP	0x40 +#define NUD_PERMANENT	0x80 +#define NUD_NONE	0x00 + +/* NUD_NOARP & NUD_PERMANENT are pseudostates, they never change +   and make no address resolution or NUD. +   NUD_PERMANENT is also cannot be deleted by garbage collectors. + */ + +struct nda_cacheinfo { +	__u32		ndm_confirmed; +	__u32		ndm_used; +	__u32		ndm_updated; +	__u32		ndm_refcnt; +}; + +/***************************************************************** + *		Neighbour tables specific messages. + * + * To retrieve the neighbour tables send RTM_GETNEIGHTBL with the + * NLM_F_DUMP flag set. Every neighbour table configuration is + * spread over multiple messages to avoid running into message + * size limits on systems with many interfaces. The first message + * in the sequence transports all not device specific data such as + * statistics, configuration, and the default parameter set. + * This message is followed by 0..n messages carrying device + * specific parameter sets. + * Although the ordering should be sufficient, NDTA_NAME can be + * used to identify sequences. The initial message can be identified + * by checking for NDTA_CONFIG. The device specific messages do + * not contain this TLV but have NDTPA_IFINDEX set to the + * corresponding interface index. + * + * To change neighbour table attributes, send RTM_SETNEIGHTBL + * with NDTA_NAME set. Changeable attribute include NDTA_THRESH[1-3], + * NDTA_GC_INTERVAL, and all TLVs in NDTA_PARMS unless marked + * otherwise. Device specific parameter sets can be changed by + * setting NDTPA_IFINDEX to the interface index of the corresponding + * device. + ****/ + +struct ndt_stats { +	__u64		ndts_allocs; +	__u64		ndts_destroys; +	__u64		ndts_hash_grows; +	__u64		ndts_res_failed; +	__u64		ndts_lookups; +	__u64		ndts_hits; +	__u64		ndts_rcv_probes_mcast; +	__u64		ndts_rcv_probes_ucast; +	__u64		ndts_periodic_gc_runs; +	__u64		ndts_forced_gc_runs; +}; + +enum { +	NDTPA_UNSPEC, +	NDTPA_IFINDEX,			/* u32, unchangeable */ +	NDTPA_REFCNT,			/* u32, read-only */ +	NDTPA_REACHABLE_TIME,		/* u64, read-only, msecs */ +	NDTPA_BASE_REACHABLE_TIME,	/* u64, msecs */ +	NDTPA_RETRANS_TIME,		/* u64, msecs */ +	NDTPA_GC_STALETIME,		/* u64, msecs */ +	NDTPA_DELAY_PROBE_TIME,		/* u64, msecs */ +	NDTPA_QUEUE_LEN,		/* u32 */ +	NDTPA_APP_PROBES,		/* u32 */ +	NDTPA_UCAST_PROBES,		/* u32 */ +	NDTPA_MCAST_PROBES,		/* u32 */ +	NDTPA_ANYCAST_DELAY,		/* u64, msecs */ +	NDTPA_PROXY_DELAY,		/* u64, msecs */ +	NDTPA_PROXY_QLEN,		/* u32 */ +	NDTPA_LOCKTIME,			/* u64, msecs */ +	NDTPA_QUEUE_LENBYTES,		/* u32 */ +	__NDTPA_MAX +}; +#define NDTPA_MAX (__NDTPA_MAX - 1) + +struct ndtmsg { +	__u8		ndtm_family; +	__u8		ndtm_pad1; +	__u16		ndtm_pad2; +}; + +struct ndt_config { +	__u16		ndtc_key_len; +	__u16		ndtc_entry_size; +	__u32		ndtc_entries; +	__u32		ndtc_last_flush;	/* delta to now in msecs */ +	__u32		ndtc_last_rand;		/* delta to now in msecs */ +	__u32		ndtc_hash_rnd; +	__u32		ndtc_hash_mask; +	__u32		ndtc_hash_chain_gc; +	__u32		ndtc_proxy_qlen; +}; + +enum { +	NDTA_UNSPEC, +	NDTA_NAME,			/* char *, unchangeable */ +	NDTA_THRESH1,			/* u32 */ +	NDTA_THRESH2,			/* u32 */ +	NDTA_THRESH3,			/* u32 */ +	NDTA_CONFIG,			/* struct ndt_config, read-only */ +	NDTA_PARMS,			/* nested TLV NDTPA_* */ +	NDTA_STATS,			/* struct ndt_stats, read-only */ +	NDTA_GC_INTERVAL,		/* u64, msecs */ +	__NDTA_MAX +}; +#define NDTA_MAX (__NDTA_MAX - 1) + +#endif diff --git a/include/uapi/linux/net.h b/include/uapi/linux/net.h new file mode 100644 index 00000000000..9457239ed21 --- /dev/null +++ b/include/uapi/linux/net.h @@ -0,0 +1,57 @@ +/* + * NET		An implementation of the SOCKET network access protocol. + *		This is the master header file for the Linux NET layer, + *		or, in plain English: the networking handling part of the + *		kernel. + * + * Version:	@(#)net.h	1.0.3	05/25/93 + * + * Authors:	Orest Zborowski, <obz@Kodak.COM> + *		Ross Biro + *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + * + *		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. + */ +#ifndef _UAPI_LINUX_NET_H +#define _UAPI_LINUX_NET_H + +#include <linux/socket.h> +#include <asm/socket.h> + +#define NPROTO		AF_MAX + +#define SYS_SOCKET	1		/* sys_socket(2)		*/ +#define SYS_BIND	2		/* sys_bind(2)			*/ +#define SYS_CONNECT	3		/* sys_connect(2)		*/ +#define SYS_LISTEN	4		/* sys_listen(2)		*/ +#define SYS_ACCEPT	5		/* sys_accept(2)		*/ +#define SYS_GETSOCKNAME	6		/* sys_getsockname(2)		*/ +#define SYS_GETPEERNAME	7		/* sys_getpeername(2)		*/ +#define SYS_SOCKETPAIR	8		/* sys_socketpair(2)		*/ +#define SYS_SEND	9		/* sys_send(2)			*/ +#define SYS_RECV	10		/* sys_recv(2)			*/ +#define SYS_SENDTO	11		/* sys_sendto(2)		*/ +#define SYS_RECVFROM	12		/* sys_recvfrom(2)		*/ +#define SYS_SHUTDOWN	13		/* sys_shutdown(2)		*/ +#define SYS_SETSOCKOPT	14		/* sys_setsockopt(2)		*/ +#define SYS_GETSOCKOPT	15		/* sys_getsockopt(2)		*/ +#define SYS_SENDMSG	16		/* sys_sendmsg(2)		*/ +#define SYS_RECVMSG	17		/* sys_recvmsg(2)		*/ +#define SYS_ACCEPT4	18		/* sys_accept4(2)		*/ +#define SYS_RECVMMSG	19		/* sys_recvmmsg(2)		*/ +#define SYS_SENDMMSG	20		/* sys_sendmmsg(2)		*/ + +typedef enum { +	SS_FREE = 0,			/* not allocated		*/ +	SS_UNCONNECTED,			/* unconnected to any socket	*/ +	SS_CONNECTING,			/* in process of connecting	*/ +	SS_CONNECTED,			/* connected to socket		*/ +	SS_DISCONNECTING		/* in process of disconnecting	*/ +} socket_state; + +#define __SO_ACCEPTCON	(1 << 16)	/* performed a listen		*/ + +#endif /* _UAPI_LINUX_NET_H */ diff --git a/include/uapi/linux/net_dropmon.h b/include/uapi/linux/net_dropmon.h new file mode 100644 index 00000000000..2a739462cae --- /dev/null +++ b/include/uapi/linux/net_dropmon.h @@ -0,0 +1,64 @@ +#ifndef __NET_DROPMON_H +#define __NET_DROPMON_H + +#include <linux/types.h> +#include <linux/netlink.h> + +struct net_dm_drop_point { +	__u8 pc[8]; +	__u32 count; +}; + +#define is_drop_point_hw(x) do {\ +	int ____i, ____j;\ +	for (____i = 0; ____i < 8; i ____i++)\ +		____j |= x[____i];\ +	____j;\ +} while (0) + +#define NET_DM_CFG_VERSION  0 +#define NET_DM_CFG_ALERT_COUNT  1 +#define NET_DM_CFG_ALERT_DELAY 2 +#define NET_DM_CFG_MAX 3 + +struct net_dm_config_entry { +	__u32 type; +	__u64 data __attribute__((aligned(8))); +}; + +struct net_dm_config_msg { +	__u32 entries; +	struct net_dm_config_entry options[0]; +}; + +struct net_dm_alert_msg { +	__u32 entries; +	struct net_dm_drop_point points[0]; +}; + +struct net_dm_user_msg { +	union { +		struct net_dm_config_msg user; +		struct net_dm_alert_msg alert; +	} u; +}; + + +/* These are the netlink message types for this protocol */ + +enum { +	NET_DM_CMD_UNSPEC = 0, +	NET_DM_CMD_ALERT, +	NET_DM_CMD_CONFIG, +	NET_DM_CMD_START, +	NET_DM_CMD_STOP, +	_NET_DM_CMD_MAX, +}; + +#define NET_DM_CMD_MAX (_NET_DM_CMD_MAX - 1) + +/* + * Our group identifiers + */ +#define NET_DM_GRP_ALERT 1 +#endif diff --git a/include/uapi/linux/net_tstamp.h b/include/uapi/linux/net_tstamp.h new file mode 100644 index 00000000000..ae5df122e42 --- /dev/null +++ b/include/uapi/linux/net_tstamp.h @@ -0,0 +1,113 @@ +/* + * Userspace API for hardware time stamping of network packets + * + * Copyright (C) 2008,2009 Intel Corporation + * Author: Patrick Ohly <patrick.ohly@intel.com> + * + */ + +#ifndef _NET_TIMESTAMPING_H +#define _NET_TIMESTAMPING_H + +#include <linux/socket.h>   /* for SO_TIMESTAMPING */ + +/* SO_TIMESTAMPING gets an integer bit field comprised of these values */ +enum { +	SOF_TIMESTAMPING_TX_HARDWARE = (1<<0), +	SOF_TIMESTAMPING_TX_SOFTWARE = (1<<1), +	SOF_TIMESTAMPING_RX_HARDWARE = (1<<2), +	SOF_TIMESTAMPING_RX_SOFTWARE = (1<<3), +	SOF_TIMESTAMPING_SOFTWARE = (1<<4), +	SOF_TIMESTAMPING_SYS_HARDWARE = (1<<5), +	SOF_TIMESTAMPING_RAW_HARDWARE = (1<<6), +	SOF_TIMESTAMPING_MASK = +	(SOF_TIMESTAMPING_RAW_HARDWARE - 1) | +	SOF_TIMESTAMPING_RAW_HARDWARE +}; + +/** + * struct hwtstamp_config - %SIOCSHWTSTAMP parameter + * + * @flags:	no flags defined right now, must be zero + * @tx_type:	one of HWTSTAMP_TX_* + * @rx_type:	one of one of HWTSTAMP_FILTER_* + * + * %SIOCSHWTSTAMP expects a &struct ifreq with a ifr_data pointer to + * this structure. dev_ifsioc() in the kernel takes care of the + * translation between 32 bit userspace and 64 bit kernel. The + * structure is intentionally chosen so that it has the same layout on + * 32 and 64 bit systems, don't break this! + */ +struct hwtstamp_config { +	int flags; +	int tx_type; +	int rx_filter; +}; + +/* possible values for hwtstamp_config->tx_type */ +enum hwtstamp_tx_types { +	/* +	 * No outgoing packet will need hardware time stamping; +	 * should a packet arrive which asks for it, no hardware +	 * time stamping will be done. +	 */ +	HWTSTAMP_TX_OFF, + +	/* +	 * Enables hardware time stamping for outgoing packets; +	 * the sender of the packet decides which are to be +	 * time stamped by setting %SOF_TIMESTAMPING_TX_SOFTWARE +	 * before sending the packet. +	 */ +	HWTSTAMP_TX_ON, + +	/* +	 * Enables time stamping for outgoing packets just as +	 * HWTSTAMP_TX_ON does, but also enables time stamp insertion +	 * directly into Sync packets. In this case, transmitted Sync +	 * packets will not received a time stamp via the socket error +	 * queue. +	 */ +	HWTSTAMP_TX_ONESTEP_SYNC, +}; + +/* possible values for hwtstamp_config->rx_filter */ +enum hwtstamp_rx_filters { +	/* time stamp no incoming packet at all */ +	HWTSTAMP_FILTER_NONE, + +	/* time stamp any incoming packet */ +	HWTSTAMP_FILTER_ALL, + +	/* return value: time stamp all packets requested plus some others */ +	HWTSTAMP_FILTER_SOME, + +	/* PTP v1, UDP, any kind of event packet */ +	HWTSTAMP_FILTER_PTP_V1_L4_EVENT, +	/* PTP v1, UDP, Sync packet */ +	HWTSTAMP_FILTER_PTP_V1_L4_SYNC, +	/* PTP v1, UDP, Delay_req packet */ +	HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ, +	/* PTP v2, UDP, any kind of event packet */ +	HWTSTAMP_FILTER_PTP_V2_L4_EVENT, +	/* PTP v2, UDP, Sync packet */ +	HWTSTAMP_FILTER_PTP_V2_L4_SYNC, +	/* PTP v2, UDP, Delay_req packet */ +	HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ, + +	/* 802.AS1, Ethernet, any kind of event packet */ +	HWTSTAMP_FILTER_PTP_V2_L2_EVENT, +	/* 802.AS1, Ethernet, Sync packet */ +	HWTSTAMP_FILTER_PTP_V2_L2_SYNC, +	/* 802.AS1, Ethernet, Delay_req packet */ +	HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ, + +	/* PTP v2/802.AS1, any layer, any kind of event packet */ +	HWTSTAMP_FILTER_PTP_V2_EVENT, +	/* PTP v2/802.AS1, any layer, Sync packet */ +	HWTSTAMP_FILTER_PTP_V2_SYNC, +	/* PTP v2/802.AS1, any layer, Delay_req packet */ +	HWTSTAMP_FILTER_PTP_V2_DELAY_REQ, +}; + +#endif /* _NET_TIMESTAMPING_H */ diff --git a/include/uapi/linux/netdevice.h b/include/uapi/linux/netdevice.h new file mode 100644 index 00000000000..6b9500bc2d5 --- /dev/null +++ b/include/uapi/linux/netdevice.h @@ -0,0 +1,53 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the  BSD Socket + *		interface as the means of communication with the user level. + * + *		Definitions for the Interfaces handler. + * + * Version:	@(#)dev.h	1.0.10	08/12/93 + * + * Authors:	Ross Biro + *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + *		Corey Minyard <wf-rch!minyard@relay.EU.net> + *		Donald J. Becker, <becker@cesdis.gsfc.nasa.gov> + *		Alan Cox, <alan@lxorguk.ukuu.org.uk> + *		Bjorn Ekwall. <bj0rn@blox.se> + *              Pekka Riikonen <priikone@poseidon.pspt.fi> + * + *		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. + * + *		Moved to /usr/include/linux for NET3 + */ +#ifndef _UAPI_LINUX_NETDEVICE_H +#define _UAPI_LINUX_NETDEVICE_H + +#include <linux/if.h> +#include <linux/if_ether.h> +#include <linux/if_packet.h> +#include <linux/if_link.h> + + +#define MAX_ADDR_LEN	32		/* Largest hardware address length */ + +/* Initial net device group. All devices belong to group 0 by default. */ +#define INIT_NETDEV_GROUP	0 + + + +/* Media selection options. */ +enum { +        IF_PORT_UNKNOWN = 0, +        IF_PORT_10BASE2, +        IF_PORT_10BASET, +        IF_PORT_AUI, +        IF_PORT_100BASET, +        IF_PORT_100BASETX, +        IF_PORT_100BASEFX +}; + + +#endif /* _UAPI_LINUX_NETDEVICE_H */ diff --git a/include/uapi/linux/netfilter.h b/include/uapi/linux/netfilter.h new file mode 100644 index 00000000000..f7dc0ebeeba --- /dev/null +++ b/include/uapi/linux/netfilter.h @@ -0,0 +1,72 @@ +#ifndef _UAPI__LINUX_NETFILTER_H +#define _UAPI__LINUX_NETFILTER_H + +#include <linux/types.h> +#include <linux/compiler.h> +#include <linux/sysctl.h> + + +/* Responses from hook functions. */ +#define NF_DROP 0 +#define NF_ACCEPT 1 +#define NF_STOLEN 2 +#define NF_QUEUE 3 +#define NF_REPEAT 4 +#define NF_STOP 5 +#define NF_MAX_VERDICT NF_STOP + +/* we overload the higher bits for encoding auxiliary data such as the queue + * number or errno values. Not nice, but better than additional function + * arguments. */ +#define NF_VERDICT_MASK 0x000000ff + +/* extra verdict flags have mask 0x0000ff00 */ +#define NF_VERDICT_FLAG_QUEUE_BYPASS	0x00008000 + +/* queue number (NF_QUEUE) or errno (NF_DROP) */ +#define NF_VERDICT_QMASK 0xffff0000 +#define NF_VERDICT_QBITS 16 + +#define NF_QUEUE_NR(x) ((((x) << 16) & NF_VERDICT_QMASK) | NF_QUEUE) + +#define NF_DROP_ERR(x) (((-x) << 16) | NF_DROP) + +/* only for userspace compatibility */ +#ifndef __KERNEL__ +/* Generic cache responses from hook functions. +   <= 0x2000 is used for protocol-flags. */ +#define NFC_UNKNOWN 0x4000 +#define NFC_ALTERED 0x8000 + +/* NF_VERDICT_BITS should be 8 now, but userspace might break if this changes */ +#define NF_VERDICT_BITS 16 +#endif + +enum nf_inet_hooks { +	NF_INET_PRE_ROUTING, +	NF_INET_LOCAL_IN, +	NF_INET_FORWARD, +	NF_INET_LOCAL_OUT, +	NF_INET_POST_ROUTING, +	NF_INET_NUMHOOKS +}; + +enum { +	NFPROTO_UNSPEC =  0, +	NFPROTO_IPV4   =  2, +	NFPROTO_ARP    =  3, +	NFPROTO_BRIDGE =  7, +	NFPROTO_IPV6   = 10, +	NFPROTO_DECNET = 12, +	NFPROTO_NUMPROTO, +}; + +union nf_inet_addr { +	__u32		all[4]; +	__be32		ip; +	__be32		ip6[4]; +	struct in_addr	in; +	struct in6_addr	in6; +}; + +#endif /* _UAPI__LINUX_NETFILTER_H */ diff --git a/include/uapi/linux/netfilter_arp.h b/include/uapi/linux/netfilter_arp.h new file mode 100644 index 00000000000..92bc6ddcbf7 --- /dev/null +++ b/include/uapi/linux/netfilter_arp.h @@ -0,0 +1,19 @@ +#ifndef __LINUX_ARP_NETFILTER_H +#define __LINUX_ARP_NETFILTER_H + +/* ARP-specific defines for netfilter. + * (C)2002 Rusty Russell IBM -- This code is GPL. + */ + +#include <linux/netfilter.h> + +/* There is no PF_ARP. */ +#define NF_ARP		0 + +/* ARP Hooks */ +#define NF_ARP_IN	0 +#define NF_ARP_OUT	1 +#define NF_ARP_FORWARD	2 +#define NF_ARP_NUMHOOKS	3 + +#endif /* __LINUX_ARP_NETFILTER_H */ diff --git a/include/uapi/linux/netfilter_bridge.h b/include/uapi/linux/netfilter_bridge.h new file mode 100644 index 00000000000..a5eda6db8d7 --- /dev/null +++ b/include/uapi/linux/netfilter_bridge.h @@ -0,0 +1,27 @@ +#ifndef _UAPI__LINUX_BRIDGE_NETFILTER_H +#define _UAPI__LINUX_BRIDGE_NETFILTER_H + +/* bridge-specific defines for netfilter.  + */ + +#include <linux/netfilter.h> +#include <linux/if_ether.h> +#include <linux/if_vlan.h> +#include <linux/if_pppox.h> + +/* Bridge Hooks */ +/* After promisc drops, checksum checks. */ +#define NF_BR_PRE_ROUTING	0 +/* If the packet is destined for this box. */ +#define NF_BR_LOCAL_IN		1 +/* If the packet is destined for another interface. */ +#define NF_BR_FORWARD		2 +/* Packets coming from a local process. */ +#define NF_BR_LOCAL_OUT		3 +/* Packets about to hit the wire. */ +#define NF_BR_POST_ROUTING	4 +/* Not really a hook, but used for the ebtables broute table */ +#define NF_BR_BROUTING		5 +#define NF_BR_NUMHOOKS		6 + +#endif /* _UAPI__LINUX_BRIDGE_NETFILTER_H */ diff --git a/include/uapi/linux/netfilter_decnet.h b/include/uapi/linux/netfilter_decnet.h new file mode 100644 index 00000000000..0b09732aacd --- /dev/null +++ b/include/uapi/linux/netfilter_decnet.h @@ -0,0 +1,79 @@ +#ifndef __LINUX_DECNET_NETFILTER_H +#define __LINUX_DECNET_NETFILTER_H + +/* DECnet-specific defines for netfilter.  + * This file (C) Steve Whitehouse 1999 derived from the + * ipv4 netfilter header file which is + * (C)1998 Rusty Russell -- This code is GPL. + */ + +#include <linux/netfilter.h> + +/* only for userspace compatibility */ +#ifndef __KERNEL__ + +#include <limits.h> /* for INT_MIN, INT_MAX */ + +/* IP Cache bits. */ +/* Src IP address. */ +#define NFC_DN_SRC		0x0001 +/* Dest IP address. */ +#define NFC_DN_DST		0x0002 +/* Input device. */ +#define NFC_DN_IF_IN		0x0004 +/* Output device. */ +#define NFC_DN_IF_OUT		0x0008 +#endif /* ! __KERNEL__ */ + +/* DECnet Hooks */ +/* After promisc drops, checksum checks. */ +#define NF_DN_PRE_ROUTING	0 +/* If the packet is destined for this box. */ +#define NF_DN_LOCAL_IN		1 +/* If the packet is destined for another interface. */ +#define NF_DN_FORWARD		2 +/* Packets coming from a local process. */ +#define NF_DN_LOCAL_OUT		3 +/* Packets about to hit the wire. */ +#define NF_DN_POST_ROUTING	4 +/* Input Hello Packets */ +#define NF_DN_HELLO		5 +/* Input Routing Packets */ +#define NF_DN_ROUTE		6 +#define NF_DN_NUMHOOKS		7 + +enum nf_dn_hook_priorities { +	NF_DN_PRI_FIRST = INT_MIN, +	NF_DN_PRI_CONNTRACK = -200, +	NF_DN_PRI_MANGLE = -150, +	NF_DN_PRI_NAT_DST = -100, +	NF_DN_PRI_FILTER = 0, +	NF_DN_PRI_NAT_SRC = 100, +	NF_DN_PRI_DNRTMSG = 200, +	NF_DN_PRI_LAST = INT_MAX, +}; + +struct nf_dn_rtmsg { +	int nfdn_ifindex; +}; + +#define NFDN_RTMSG(r) ((unsigned char *)(r) + NLMSG_ALIGN(sizeof(struct nf_dn_rtmsg))) + +#ifndef __KERNEL__ +/* backwards compatibility for userspace */ +#define DNRMG_L1_GROUP 0x01 +#define DNRMG_L2_GROUP 0x02 +#endif + +enum { +	DNRNG_NLGRP_NONE, +#define DNRNG_NLGRP_NONE	DNRNG_NLGRP_NONE +	DNRNG_NLGRP_L1, +#define DNRNG_NLGRP_L1		DNRNG_NLGRP_L1 +	DNRNG_NLGRP_L2, +#define DNRNG_NLGRP_L2		DNRNG_NLGRP_L2 +	__DNRNG_NLGRP_MAX +}; +#define DNRNG_NLGRP_MAX	(__DNRNG_NLGRP_MAX - 1) + +#endif /*__LINUX_DECNET_NETFILTER_H*/ diff --git a/include/uapi/linux/netfilter_ipv4.h b/include/uapi/linux/netfilter_ipv4.h new file mode 100644 index 00000000000..91ddd1f6fd4 --- /dev/null +++ b/include/uapi/linux/netfilter_ipv4.h @@ -0,0 +1,81 @@ +/* IPv4-specific defines for netfilter.  + * (C)1998 Rusty Russell -- This code is GPL. + */ +#ifndef _UAPI__LINUX_IP_NETFILTER_H +#define _UAPI__LINUX_IP_NETFILTER_H + + +#include <linux/netfilter.h> + +/* only for userspace compatibility */ +#ifndef __KERNEL__ + +#include <limits.h> /* for INT_MIN, INT_MAX */ + +/* IP Cache bits. */ +/* Src IP address. */ +#define NFC_IP_SRC		0x0001 +/* Dest IP address. */ +#define NFC_IP_DST		0x0002 +/* Input device. */ +#define NFC_IP_IF_IN		0x0004 +/* Output device. */ +#define NFC_IP_IF_OUT		0x0008 +/* TOS. */ +#define NFC_IP_TOS		0x0010 +/* Protocol. */ +#define NFC_IP_PROTO		0x0020 +/* IP options. */ +#define NFC_IP_OPTIONS		0x0040 +/* Frag & flags. */ +#define NFC_IP_FRAG		0x0080 + +/* Per-protocol information: only matters if proto match. */ +/* TCP flags. */ +#define NFC_IP_TCPFLAGS		0x0100 +/* Source port. */ +#define NFC_IP_SRC_PT		0x0200 +/* Dest port. */ +#define NFC_IP_DST_PT		0x0400 +/* Something else about the proto */ +#define NFC_IP_PROTO_UNKNOWN	0x2000 + +/* IP Hooks */ +/* After promisc drops, checksum checks. */ +#define NF_IP_PRE_ROUTING	0 +/* If the packet is destined for this box. */ +#define NF_IP_LOCAL_IN		1 +/* If the packet is destined for another interface. */ +#define NF_IP_FORWARD		2 +/* Packets coming from a local process. */ +#define NF_IP_LOCAL_OUT		3 +/* Packets about to hit the wire. */ +#define NF_IP_POST_ROUTING	4 +#define NF_IP_NUMHOOKS		5 +#endif /* ! __KERNEL__ */ + +enum nf_ip_hook_priorities { +	NF_IP_PRI_FIRST = INT_MIN, +	NF_IP_PRI_CONNTRACK_DEFRAG = -400, +	NF_IP_PRI_RAW = -300, +	NF_IP_PRI_SELINUX_FIRST = -225, +	NF_IP_PRI_CONNTRACK = -200, +	NF_IP_PRI_MANGLE = -150, +	NF_IP_PRI_NAT_DST = -100, +	NF_IP_PRI_FILTER = 0, +	NF_IP_PRI_SECURITY = 50, +	NF_IP_PRI_NAT_SRC = 100, +	NF_IP_PRI_SELINUX_LAST = 225, +	NF_IP_PRI_CONNTRACK_HELPER = 300, +	NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX, +	NF_IP_PRI_LAST = INT_MAX, +}; + +/* Arguments for setsockopt SOL_IP: */ +/* 2.0 firewalling went from 64 through 71 (and +256, +512, etc). */ +/* 2.2 firewalling (+ masq) went from 64 through 76 */ +/* 2.4 firewalling went 64 through 67. */ +#define SO_ORIGINAL_DST 80 + + +#endif /* _UAPI__LINUX_IP_NETFILTER_H */ diff --git a/include/uapi/linux/netfilter_ipv6.h b/include/uapi/linux/netfilter_ipv6.h new file mode 100644 index 00000000000..12497c6c794 --- /dev/null +++ b/include/uapi/linux/netfilter_ipv6.h @@ -0,0 +1,79 @@ +/* IPv6-specific defines for netfilter.  + * (C)1998 Rusty Russell -- This code is GPL. + * (C)1999 David Jeffery + *   this header was blatantly ripped from netfilter_ipv4.h  + *   it's amazing what adding a bunch of 6s can do =8^) + */ +#ifndef _UAPI__LINUX_IP6_NETFILTER_H +#define _UAPI__LINUX_IP6_NETFILTER_H + + +#include <linux/netfilter.h> + +/* only for userspace compatibility */ +#ifndef __KERNEL__ + +#include <limits.h> /* for INT_MIN, INT_MAX */ + +/* IP Cache bits. */ +/* Src IP address. */ +#define NFC_IP6_SRC              0x0001 +/* Dest IP address. */ +#define NFC_IP6_DST              0x0002 +/* Input device. */ +#define NFC_IP6_IF_IN            0x0004 +/* Output device. */ +#define NFC_IP6_IF_OUT           0x0008 +/* TOS. */ +#define NFC_IP6_TOS              0x0010 +/* Protocol. */ +#define NFC_IP6_PROTO            0x0020 +/* IP options. */ +#define NFC_IP6_OPTIONS          0x0040 +/* Frag & flags. */ +#define NFC_IP6_FRAG             0x0080 + + +/* Per-protocol information: only matters if proto match. */ +/* TCP flags. */ +#define NFC_IP6_TCPFLAGS         0x0100 +/* Source port. */ +#define NFC_IP6_SRC_PT           0x0200 +/* Dest port. */ +#define NFC_IP6_DST_PT           0x0400 +/* Something else about the proto */ +#define NFC_IP6_PROTO_UNKNOWN    0x2000 + +/* IP6 Hooks */ +/* After promisc drops, checksum checks. */ +#define NF_IP6_PRE_ROUTING	0 +/* If the packet is destined for this box. */ +#define NF_IP6_LOCAL_IN		1 +/* If the packet is destined for another interface. */ +#define NF_IP6_FORWARD		2 +/* Packets coming from a local process. */ +#define NF_IP6_LOCAL_OUT		3 +/* Packets about to hit the wire. */ +#define NF_IP6_POST_ROUTING	4 +#define NF_IP6_NUMHOOKS		5 +#endif /* ! __KERNEL__ */ + + +enum nf_ip6_hook_priorities { +	NF_IP6_PRI_FIRST = INT_MIN, +	NF_IP6_PRI_CONNTRACK_DEFRAG = -400, +	NF_IP6_PRI_RAW = -300, +	NF_IP6_PRI_SELINUX_FIRST = -225, +	NF_IP6_PRI_CONNTRACK = -200, +	NF_IP6_PRI_MANGLE = -150, +	NF_IP6_PRI_NAT_DST = -100, +	NF_IP6_PRI_FILTER = 0, +	NF_IP6_PRI_SECURITY = 50, +	NF_IP6_PRI_NAT_SRC = 100, +	NF_IP6_PRI_SELINUX_LAST = 225, +	NF_IP6_PRI_CONNTRACK_HELPER = 300, +	NF_IP6_PRI_LAST = INT_MAX, +}; + + +#endif /* _UAPI__LINUX_IP6_NETFILTER_H */ diff --git a/include/uapi/linux/netlink.h b/include/uapi/linux/netlink.h new file mode 100644 index 00000000000..78d5b8a546d --- /dev/null +++ b/include/uapi/linux/netlink.h @@ -0,0 +1,153 @@ +#ifndef _UAPI__LINUX_NETLINK_H +#define _UAPI__LINUX_NETLINK_H + +#include <linux/socket.h> /* for __kernel_sa_family_t */ +#include <linux/types.h> + +#define NETLINK_ROUTE		0	/* Routing/device hook				*/ +#define NETLINK_UNUSED		1	/* Unused number				*/ +#define NETLINK_USERSOCK	2	/* Reserved for user mode socket protocols 	*/ +#define NETLINK_FIREWALL	3	/* Unused number, formerly ip_queue		*/ +#define NETLINK_SOCK_DIAG	4	/* socket monitoring				*/ +#define NETLINK_NFLOG		5	/* netfilter/iptables ULOG */ +#define NETLINK_XFRM		6	/* ipsec */ +#define NETLINK_SELINUX		7	/* SELinux event notifications */ +#define NETLINK_ISCSI		8	/* Open-iSCSI */ +#define NETLINK_AUDIT		9	/* auditing */ +#define NETLINK_FIB_LOOKUP	10	 +#define NETLINK_CONNECTOR	11 +#define NETLINK_NETFILTER	12	/* netfilter subsystem */ +#define NETLINK_IP6_FW		13 +#define NETLINK_DNRTMSG		14	/* DECnet routing messages */ +#define NETLINK_KOBJECT_UEVENT	15	/* Kernel messages to userspace */ +#define NETLINK_GENERIC		16 +/* leave room for NETLINK_DM (DM Events) */ +#define NETLINK_SCSITRANSPORT	18	/* SCSI Transports */ +#define NETLINK_ECRYPTFS	19 +#define NETLINK_RDMA		20 +#define NETLINK_CRYPTO		21	/* Crypto layer */ + +#define NETLINK_INET_DIAG	NETLINK_SOCK_DIAG + +#define MAX_LINKS 32		 + +struct sockaddr_nl { +	__kernel_sa_family_t	nl_family;	/* AF_NETLINK	*/ +	unsigned short	nl_pad;		/* zero		*/ +	__u32		nl_pid;		/* port ID	*/ +       	__u32		nl_groups;	/* multicast groups mask */ +}; + +struct nlmsghdr { +	__u32		nlmsg_len;	/* Length of message including header */ +	__u16		nlmsg_type;	/* Message content */ +	__u16		nlmsg_flags;	/* Additional flags */ +	__u32		nlmsg_seq;	/* Sequence number */ +	__u32		nlmsg_pid;	/* Sending process port ID */ +}; + +/* Flags values */ + +#define NLM_F_REQUEST		1	/* It is request message. 	*/ +#define NLM_F_MULTI		2	/* Multipart message, terminated by NLMSG_DONE */ +#define NLM_F_ACK		4	/* Reply with ack, with zero or error code */ +#define NLM_F_ECHO		8	/* Echo this request 		*/ +#define NLM_F_DUMP_INTR		16	/* Dump was inconsistent due to sequence change */ + +/* Modifiers to GET request */ +#define NLM_F_ROOT	0x100	/* specify tree	root	*/ +#define NLM_F_MATCH	0x200	/* return all matching	*/ +#define NLM_F_ATOMIC	0x400	/* atomic GET		*/ +#define NLM_F_DUMP	(NLM_F_ROOT|NLM_F_MATCH) + +/* Modifiers to NEW request */ +#define NLM_F_REPLACE	0x100	/* Override existing		*/ +#define NLM_F_EXCL	0x200	/* Do not touch, if it exists	*/ +#define NLM_F_CREATE	0x400	/* Create, if it does not exist	*/ +#define NLM_F_APPEND	0x800	/* Add to end of list		*/ + +/* +   4.4BSD ADD		NLM_F_CREATE|NLM_F_EXCL +   4.4BSD CHANGE	NLM_F_REPLACE + +   True CHANGE		NLM_F_CREATE|NLM_F_REPLACE +   Append		NLM_F_CREATE +   Check		NLM_F_EXCL + */ + +#define NLMSG_ALIGNTO	4U +#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) ) +#define NLMSG_HDRLEN	 ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr))) +#define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(NLMSG_HDRLEN)) +#define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len)) +#define NLMSG_DATA(nlh)  ((void*)(((char*)nlh) + NLMSG_LENGTH(0))) +#define NLMSG_NEXT(nlh,len)	 ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \ +				  (struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len))) +#define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \ +			   (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \ +			   (nlh)->nlmsg_len <= (len)) +#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len))) + +#define NLMSG_NOOP		0x1	/* Nothing.		*/ +#define NLMSG_ERROR		0x2	/* Error		*/ +#define NLMSG_DONE		0x3	/* End of a dump	*/ +#define NLMSG_OVERRUN		0x4	/* Data lost		*/ + +#define NLMSG_MIN_TYPE		0x10	/* < 0x10: reserved control messages */ + +struct nlmsgerr { +	int		error; +	struct nlmsghdr msg; +}; + +#define NETLINK_ADD_MEMBERSHIP	1 +#define NETLINK_DROP_MEMBERSHIP	2 +#define NETLINK_PKTINFO		3 +#define NETLINK_BROADCAST_ERROR	4 +#define NETLINK_NO_ENOBUFS	5 + +struct nl_pktinfo { +	__u32	group; +}; + +#define NET_MAJOR 36		/* Major 36 is reserved for networking 						*/ + +enum { +	NETLINK_UNCONNECTED = 0, +	NETLINK_CONNECTED, +}; + +/* + *  <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)--> + * +---------------------+- - -+- - - - - - - - - -+- - -+ + * |        Header       | Pad |     Payload       | Pad | + * |   (struct nlattr)   | ing |                   | ing | + * +---------------------+- - -+- - - - - - - - - -+- - -+ + *  <-------------- nlattr->nla_len --------------> + */ + +struct nlattr { +	__u16           nla_len; +	__u16           nla_type; +}; + +/* + * nla_type (16 bits) + * +---+---+-------------------------------+ + * | N | O | Attribute Type                | + * +---+---+-------------------------------+ + * N := Carries nested attributes + * O := Payload stored in network byte order + * + * Note: The N and O flag are mutually exclusive. + */ +#define NLA_F_NESTED		(1 << 15) +#define NLA_F_NET_BYTEORDER	(1 << 14) +#define NLA_TYPE_MASK		~(NLA_F_NESTED | NLA_F_NET_BYTEORDER) + +#define NLA_ALIGNTO		4 +#define NLA_ALIGN(len)		(((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1)) +#define NLA_HDRLEN		((int) NLA_ALIGN(sizeof(struct nlattr))) + + +#endif /* _UAPI__LINUX_NETLINK_H */ diff --git a/include/uapi/linux/netrom.h b/include/uapi/linux/netrom.h new file mode 100644 index 00000000000..af7313cc9cb --- /dev/null +++ b/include/uapi/linux/netrom.h @@ -0,0 +1,36 @@ +/* + * These are the public elements of the Linux kernel NET/ROM implementation. + * For kernel AX.25 see the file ax25.h. This file requires ax25.h for the + * definition of the ax25_address structure. + */ + +#ifndef	NETROM_KERNEL_H +#define	NETROM_KERNEL_H + +#include <linux/ax25.h> + +#define NETROM_MTU	236 + +#define NETROM_T1	1 +#define NETROM_T2	2 +#define NETROM_N2	3 +#define	NETROM_T4	6 +#define	NETROM_IDLE	7 + +#define	SIOCNRDECOBS		(SIOCPROTOPRIVATE+2) + +struct nr_route_struct { +#define	NETROM_NEIGH	0 +#define	NETROM_NODE	1 +	int		type; +	ax25_address	callsign; +	char		device[16]; +	unsigned int	quality; +	char		mnemonic[7]; +	ax25_address	neighbour; +	unsigned int	obs_count; +	unsigned int	ndigis; +	ax25_address	digipeaters[AX25_MAX_DIGIS]; +}; + +#endif diff --git a/include/uapi/linux/nfc.h b/include/uapi/linux/nfc.h new file mode 100644 index 00000000000..d908d17da56 --- /dev/null +++ b/include/uapi/linux/nfc.h @@ -0,0 +1,197 @@ +/* + * Copyright (C) 2011 Instituto Nokia de Tecnologia + * + * Authors: + *    Lauro Ramos Venancio <lauro.venancio@openbossa.org> + *    Aloisio Almeida Jr <aloisio.almeida@openbossa.org> + * + * 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., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __LINUX_NFC_H +#define __LINUX_NFC_H + +#include <linux/types.h> +#include <linux/socket.h> + +#define NFC_GENL_NAME "nfc" +#define NFC_GENL_VERSION 1 + +#define NFC_GENL_MCAST_EVENT_NAME "events" + +/** + * enum nfc_commands - supported nfc commands + * + * @NFC_CMD_UNSPEC: unspecified command + * + * @NFC_CMD_GET_DEVICE: request information about a device (requires + *	%NFC_ATTR_DEVICE_INDEX) or dump request to get a list of all nfc devices + * @NFC_CMD_DEV_UP: turn on the nfc device + *	(requires %NFC_ATTR_DEVICE_INDEX) + * @NFC_CMD_DEV_DOWN: turn off the nfc device + *	(requires %NFC_ATTR_DEVICE_INDEX) + * @NFC_CMD_START_POLL: start polling for targets using the given protocols + *	(requires %NFC_ATTR_DEVICE_INDEX and %NFC_ATTR_PROTOCOLS) + * @NFC_CMD_STOP_POLL: stop polling for targets (requires + *	%NFC_ATTR_DEVICE_INDEX) + * @NFC_CMD_GET_TARGET: dump all targets found by the previous poll (requires + *	%NFC_ATTR_DEVICE_INDEX) + * @NFC_EVENT_TARGETS_FOUND: event emitted when a new target is found + *	(it sends %NFC_ATTR_DEVICE_INDEX) + * @NFC_EVENT_DEVICE_ADDED: event emitted when a new device is registred + *	(it sends %NFC_ATTR_DEVICE_NAME, %NFC_ATTR_DEVICE_INDEX and + *	%NFC_ATTR_PROTOCOLS) + * @NFC_EVENT_DEVICE_REMOVED: event emitted when a device is removed + *	(it sends %NFC_ATTR_DEVICE_INDEX) + * @NFC_EVENT_TM_ACTIVATED: event emitted when the adapter is activated in + *      target mode. + * @NFC_EVENT_DEVICE_DEACTIVATED: event emitted when the adapter is deactivated + *      from target mode. + */ +enum nfc_commands { +	NFC_CMD_UNSPEC, +	NFC_CMD_GET_DEVICE, +	NFC_CMD_DEV_UP, +	NFC_CMD_DEV_DOWN, +	NFC_CMD_DEP_LINK_UP, +	NFC_CMD_DEP_LINK_DOWN, +	NFC_CMD_START_POLL, +	NFC_CMD_STOP_POLL, +	NFC_CMD_GET_TARGET, +	NFC_EVENT_TARGETS_FOUND, +	NFC_EVENT_DEVICE_ADDED, +	NFC_EVENT_DEVICE_REMOVED, +	NFC_EVENT_TARGET_LOST, +	NFC_EVENT_TM_ACTIVATED, +	NFC_EVENT_TM_DEACTIVATED, +/* private: internal use only */ +	__NFC_CMD_AFTER_LAST +}; +#define NFC_CMD_MAX (__NFC_CMD_AFTER_LAST - 1) + +/** + * enum nfc_attrs - supported nfc attributes + * + * @NFC_ATTR_UNSPEC: unspecified attribute + * + * @NFC_ATTR_DEVICE_INDEX: index of nfc device + * @NFC_ATTR_DEVICE_NAME: device name, max 8 chars + * @NFC_ATTR_PROTOCOLS: nfc protocols - bitwise or-ed combination from + *	NFC_PROTO_*_MASK constants + * @NFC_ATTR_TARGET_INDEX: index of the nfc target + * @NFC_ATTR_TARGET_SENS_RES: NFC-A targets extra information such as NFCID + * @NFC_ATTR_TARGET_SEL_RES: NFC-A targets extra information (useful if the + *	target is not NFC-Forum compliant) + * @NFC_ATTR_TARGET_NFCID1: NFC-A targets identifier, max 10 bytes + * @NFC_ATTR_TARGET_SENSB_RES: NFC-B targets extra information, max 12 bytes + * @NFC_ATTR_TARGET_SENSF_RES: NFC-F targets extra information, max 18 bytes + * @NFC_ATTR_COMM_MODE: Passive or active mode + * @NFC_ATTR_RF_MODE: Initiator or target + * @NFC_ATTR_IM_PROTOCOLS: Initiator mode protocols to poll for + * @NFC_ATTR_TM_PROTOCOLS: Target mode protocols to listen for + */ +enum nfc_attrs { +	NFC_ATTR_UNSPEC, +	NFC_ATTR_DEVICE_INDEX, +	NFC_ATTR_DEVICE_NAME, +	NFC_ATTR_PROTOCOLS, +	NFC_ATTR_TARGET_INDEX, +	NFC_ATTR_TARGET_SENS_RES, +	NFC_ATTR_TARGET_SEL_RES, +	NFC_ATTR_TARGET_NFCID1, +	NFC_ATTR_TARGET_SENSB_RES, +	NFC_ATTR_TARGET_SENSF_RES, +	NFC_ATTR_COMM_MODE, +	NFC_ATTR_RF_MODE, +	NFC_ATTR_DEVICE_POWERED, +	NFC_ATTR_IM_PROTOCOLS, +	NFC_ATTR_TM_PROTOCOLS, +/* private: internal use only */ +	__NFC_ATTR_AFTER_LAST +}; +#define NFC_ATTR_MAX (__NFC_ATTR_AFTER_LAST - 1) + +#define NFC_DEVICE_NAME_MAXSIZE 8 +#define NFC_NFCID1_MAXSIZE 10 +#define NFC_SENSB_RES_MAXSIZE 12 +#define NFC_SENSF_RES_MAXSIZE 18 +#define NFC_GB_MAXSIZE        48 + +/* NFC protocols */ +#define NFC_PROTO_JEWEL		1 +#define NFC_PROTO_MIFARE	2 +#define NFC_PROTO_FELICA	3 +#define NFC_PROTO_ISO14443	4 +#define NFC_PROTO_NFC_DEP	5 +#define NFC_PROTO_ISO14443_B	6 + +#define NFC_PROTO_MAX		7 + +/* NFC communication modes */ +#define NFC_COMM_ACTIVE  0 +#define NFC_COMM_PASSIVE 1 + +/* NFC RF modes */ +#define NFC_RF_INITIATOR 0 +#define NFC_RF_TARGET    1 +#define NFC_RF_NONE      2 + +/* NFC protocols masks used in bitsets */ +#define NFC_PROTO_JEWEL_MASK      (1 << NFC_PROTO_JEWEL) +#define NFC_PROTO_MIFARE_MASK     (1 << NFC_PROTO_MIFARE) +#define NFC_PROTO_FELICA_MASK	  (1 << NFC_PROTO_FELICA) +#define NFC_PROTO_ISO14443_MASK	  (1 << NFC_PROTO_ISO14443) +#define NFC_PROTO_NFC_DEP_MASK	  (1 << NFC_PROTO_NFC_DEP) +#define NFC_PROTO_ISO14443_B_MASK (1 << NFC_PROTO_ISO14443_B) + +struct sockaddr_nfc { +	sa_family_t sa_family; +	__u32 dev_idx; +	__u32 target_idx; +	__u32 nfc_protocol; +}; + +#define NFC_LLCP_MAX_SERVICE_NAME 63 +struct sockaddr_nfc_llcp { +	sa_family_t sa_family; +	__u32 dev_idx; +	__u32 target_idx; +	__u32 nfc_protocol; +	__u8 dsap; /* Destination SAP, if known */ +	__u8 ssap; /* Source SAP to be bound to */ +	char service_name[NFC_LLCP_MAX_SERVICE_NAME]; /* Service name URI */; +	size_t service_name_len; +}; + +/* NFC socket protocols */ +#define NFC_SOCKPROTO_RAW	0 +#define NFC_SOCKPROTO_LLCP	1 +#define NFC_SOCKPROTO_MAX	2 + +#define NFC_HEADER_SIZE 1 + +/** + * Pseudo-header info for raw socket packets + * First byte is the adapter index + * Second byte contains flags + *  - 0x01 - Direction (0=RX, 1=TX) + *  - 0x02-0x80 - Reserved + **/ +#define NFC_LLCP_RAW_HEADER_SIZE	2 +#define NFC_LLCP_DIRECTION_RX		0x00 +#define NFC_LLCP_DIRECTION_TX		0x01 + +#endif /*__LINUX_NFC_H */ diff --git a/include/uapi/linux/nfs.h b/include/uapi/linux/nfs.h new file mode 100644 index 00000000000..5199a36dd57 --- /dev/null +++ b/include/uapi/linux/nfs.h @@ -0,0 +1,131 @@ +/* + * NFS protocol definitions + * + * This file contains constants mostly for Version 2 of the protocol, + * but also has a couple of NFSv3 bits in (notably the error codes). + */ +#ifndef _UAPI_LINUX_NFS_H +#define _UAPI_LINUX_NFS_H + +#define NFS_PROGRAM	100003 +#define NFS_PORT	2049 +#define NFS_MAXDATA	8192 +#define NFS_MAXPATHLEN	1024 +#define NFS_MAXNAMLEN	255 +#define NFS_MAXGROUPS	16 +#define NFS_FHSIZE	32 +#define NFS_COOKIESIZE	4 +#define NFS_FIFO_DEV	(-1) +#define NFSMODE_FMT	0170000 +#define NFSMODE_DIR	0040000 +#define NFSMODE_CHR	0020000 +#define NFSMODE_BLK	0060000 +#define NFSMODE_REG	0100000 +#define NFSMODE_LNK	0120000 +#define NFSMODE_SOCK	0140000 +#define NFSMODE_FIFO	0010000 + +#define NFS_MNT_PROGRAM		100005 +#define NFS_MNT_VERSION		1 +#define NFS_MNT3_VERSION	3 + +#define NFS_PIPE_DIRNAME "nfs" + +/* + * NFS stats. The good thing with these values is that NFSv3 errors are + * a superset of NFSv2 errors (with the exception of NFSERR_WFLUSH which + * no-one uses anyway), so we can happily mix code as long as we make sure + * no NFSv3 errors are returned to NFSv2 clients. + * Error codes that have a `--' in the v2 column are not part of the + * standard, but seem to be widely used nevertheless. + */ + enum nfs_stat { +	NFS_OK = 0,			/* v2 v3 v4 */ +	NFSERR_PERM = 1,		/* v2 v3 v4 */ +	NFSERR_NOENT = 2,		/* v2 v3 v4 */ +	NFSERR_IO = 5,			/* v2 v3 v4 */ +	NFSERR_NXIO = 6,		/* v2 v3 v4 */ +	NFSERR_EAGAIN = 11,		/* v2 v3 */ +	NFSERR_ACCES = 13,		/* v2 v3 v4 */ +	NFSERR_EXIST = 17,		/* v2 v3 v4 */ +	NFSERR_XDEV = 18,		/*    v3 v4 */ +	NFSERR_NODEV = 19,		/* v2 v3 v4 */ +	NFSERR_NOTDIR = 20,		/* v2 v3 v4 */ +	NFSERR_ISDIR = 21,		/* v2 v3 v4 */ +	NFSERR_INVAL = 22,		/* v2 v3 v4 */ +	NFSERR_FBIG = 27,		/* v2 v3 v4 */ +	NFSERR_NOSPC = 28,		/* v2 v3 v4 */ +	NFSERR_ROFS = 30,		/* v2 v3 v4 */ +	NFSERR_MLINK = 31,		/*    v3 v4 */ +	NFSERR_OPNOTSUPP = 45,		/* v2 v3 */ +	NFSERR_NAMETOOLONG = 63,	/* v2 v3 v4 */ +	NFSERR_NOTEMPTY = 66,		/* v2 v3 v4 */ +	NFSERR_DQUOT = 69,		/* v2 v3 v4 */ +	NFSERR_STALE = 70,		/* v2 v3 v4 */ +	NFSERR_REMOTE = 71,		/* v2 v3 */ +	NFSERR_WFLUSH = 99,		/* v2    */ +	NFSERR_BADHANDLE = 10001,	/*    v3 v4 */ +	NFSERR_NOT_SYNC = 10002,	/*    v3 */ +	NFSERR_BAD_COOKIE = 10003,	/*    v3 v4 */ +	NFSERR_NOTSUPP = 10004,		/*    v3 v4 */ +	NFSERR_TOOSMALL = 10005,	/*    v3 v4 */ +	NFSERR_SERVERFAULT = 10006,	/*    v3 v4 */ +	NFSERR_BADTYPE = 10007,		/*    v3 v4 */ +	NFSERR_JUKEBOX = 10008,		/*    v3 v4 */ +	NFSERR_SAME = 10009,		/*       v4 */ +	NFSERR_DENIED = 10010,		/*       v4 */ +	NFSERR_EXPIRED = 10011,		/*       v4 */ +	NFSERR_LOCKED = 10012,		/*       v4 */ +	NFSERR_GRACE = 10013,		/*       v4 */ +	NFSERR_FHEXPIRED = 10014,	/*       v4 */ +	NFSERR_SHARE_DENIED = 10015,	/*       v4 */ +	NFSERR_WRONGSEC = 10016,	/*       v4 */ +	NFSERR_CLID_INUSE = 10017,	/*       v4 */ +	NFSERR_RESOURCE = 10018,	/*       v4 */ +	NFSERR_MOVED = 10019,		/*       v4 */ +	NFSERR_NOFILEHANDLE = 10020,	/*       v4 */ +	NFSERR_MINOR_VERS_MISMATCH = 10021,   /* v4 */ +	NFSERR_STALE_CLIENTID = 10022,	/*       v4 */ +	NFSERR_STALE_STATEID = 10023,   /*       v4 */ +	NFSERR_OLD_STATEID = 10024,     /*       v4 */ +	NFSERR_BAD_STATEID = 10025,     /*       v4 */   +	NFSERR_BAD_SEQID = 10026,	/*       v4 */ +	NFSERR_NOT_SAME = 10027,	/*       v4 */ +	NFSERR_LOCK_RANGE = 10028,	/*       v4 */ +	NFSERR_SYMLINK = 10029,		/*       v4 */ +	NFSERR_RESTOREFH = 10030,	/*       v4 */ +	NFSERR_LEASE_MOVED = 10031,	/*       v4 */ +	NFSERR_ATTRNOTSUPP = 10032,	/*       v4 */ +	NFSERR_NO_GRACE = 10033,	/*       v4 */ +	NFSERR_RECLAIM_BAD = 10034,	/*       v4 */ +	NFSERR_RECLAIM_CONFLICT = 10035,/*       v4 */ +	NFSERR_BAD_XDR = 10036,		/*       v4 */ +	NFSERR_LOCKS_HELD = 10037,	/*       v4 */ +	NFSERR_OPENMODE = 10038,       /*       v4 */ +	NFSERR_BADOWNER = 10039,       /*       v4 */ +	NFSERR_BADCHAR = 10040,        /*       v4 */ +	NFSERR_BADNAME = 10041,        /*       v4 */ +	NFSERR_BAD_RANGE = 10042,      /*       v4 */ +	NFSERR_LOCK_NOTSUPP = 10043,   /*       v4 */ +	NFSERR_OP_ILLEGAL = 10044,     /*       v4 */ +	NFSERR_DEADLOCK = 10045,       /*       v4 */ +	NFSERR_FILE_OPEN = 10046,      /*       v4 */ +	NFSERR_ADMIN_REVOKED = 10047,  /*       v4 */ +	NFSERR_CB_PATH_DOWN = 10048,   /*       v4 */ +}; + +/* NFSv2 file types - beware, these are not the same in NFSv3 */ + +enum nfs_ftype { +	NFNON = 0, +	NFREG = 1, +	NFDIR = 2, +	NFBLK = 3, +	NFCHR = 4, +	NFLNK = 5, +	NFSOCK = 6, +	NFBAD = 7, +	NFFIFO = 8 +}; + +#endif /* _UAPI_LINUX_NFS_H */ diff --git a/include/uapi/linux/nfs2.h b/include/uapi/linux/nfs2.h new file mode 100644 index 00000000000..fde24b30cc9 --- /dev/null +++ b/include/uapi/linux/nfs2.h @@ -0,0 +1,67 @@ +/* + * NFS protocol definitions + * + * This file contains constants for Version 2 of the protocol. + */ +#ifndef _LINUX_NFS2_H +#define _LINUX_NFS2_H + +#define NFS2_PORT	2049 +#define NFS2_MAXDATA	8192 +#define NFS2_MAXPATHLEN	1024 +#define NFS2_MAXNAMLEN	255 +#define NFS2_MAXGROUPS	16 +#define NFS2_FHSIZE	32 +#define NFS2_COOKIESIZE	4 +#define NFS2_FIFO_DEV	(-1) +#define NFS2MODE_FMT	0170000 +#define NFS2MODE_DIR	0040000 +#define NFS2MODE_CHR	0020000 +#define NFS2MODE_BLK	0060000 +#define NFS2MODE_REG	0100000 +#define NFS2MODE_LNK	0120000 +#define NFS2MODE_SOCK	0140000 +#define NFS2MODE_FIFO	0010000 + + +/* NFSv2 file types - beware, these are not the same in NFSv3 */ +enum nfs2_ftype { +	NF2NON = 0, +	NF2REG = 1, +	NF2DIR = 2, +	NF2BLK = 3, +	NF2CHR = 4, +	NF2LNK = 5, +	NF2SOCK = 6, +	NF2BAD = 7, +	NF2FIFO = 8 +}; + +struct nfs2_fh { +	char			data[NFS2_FHSIZE]; +}; + +/* + * Procedure numbers for NFSv2 + */ +#define NFS2_VERSION		2 +#define NFSPROC_NULL		0 +#define NFSPROC_GETATTR		1 +#define NFSPROC_SETATTR		2 +#define NFSPROC_ROOT		3 +#define NFSPROC_LOOKUP		4 +#define NFSPROC_READLINK	5 +#define NFSPROC_READ		6 +#define NFSPROC_WRITECACHE	7 +#define NFSPROC_WRITE		8 +#define NFSPROC_CREATE		9 +#define NFSPROC_REMOVE		10 +#define NFSPROC_RENAME		11 +#define NFSPROC_LINK		12 +#define NFSPROC_SYMLINK		13 +#define NFSPROC_MKDIR		14 +#define NFSPROC_RMDIR		15 +#define NFSPROC_READDIR		16 +#define NFSPROC_STATFS		17 + +#endif /* _LINUX_NFS2_H */ diff --git a/include/uapi/linux/nfs3.h b/include/uapi/linux/nfs3.h new file mode 100644 index 00000000000..231ef4e6982 --- /dev/null +++ b/include/uapi/linux/nfs3.h @@ -0,0 +1,97 @@ +/* + * NFSv3 protocol definitions + */ +#ifndef _UAPI_LINUX_NFS3_H +#define _UAPI_LINUX_NFS3_H + +#define NFS3_PORT		2049 +#define NFS3_MAXDATA		32768 +#define NFS3_MAXPATHLEN		PATH_MAX +#define NFS3_MAXNAMLEN		NAME_MAX +#define NFS3_MAXGROUPS		16 +#define NFS3_FHSIZE		64 +#define NFS3_COOKIESIZE		4 +#define NFS3_CREATEVERFSIZE	8 +#define NFS3_COOKIEVERFSIZE	8 +#define NFS3_WRITEVERFSIZE	8 +#define NFS3_FIFO_DEV		(-1) +#define NFS3MODE_FMT		0170000 +#define NFS3MODE_DIR		0040000 +#define NFS3MODE_CHR		0020000 +#define NFS3MODE_BLK		0060000 +#define NFS3MODE_REG		0100000 +#define NFS3MODE_LNK		0120000 +#define NFS3MODE_SOCK		0140000 +#define NFS3MODE_FIFO		0010000 + +/* Flags for access() call */ +#define NFS3_ACCESS_READ	0x0001 +#define NFS3_ACCESS_LOOKUP	0x0002 +#define NFS3_ACCESS_MODIFY	0x0004 +#define NFS3_ACCESS_EXTEND	0x0008 +#define NFS3_ACCESS_DELETE	0x0010 +#define NFS3_ACCESS_EXECUTE	0x0020 +#define NFS3_ACCESS_FULL	0x003f + +/* Flags for create mode */ +enum nfs3_createmode { +	NFS3_CREATE_UNCHECKED = 0, +	NFS3_CREATE_GUARDED = 1, +	NFS3_CREATE_EXCLUSIVE = 2 +}; + +/* NFSv3 file system properties */ +#define NFS3_FSF_LINK		0x0001 +#define NFS3_FSF_SYMLINK	0x0002 +#define NFS3_FSF_HOMOGENEOUS	0x0008 +#define NFS3_FSF_CANSETTIME	0x0010 +/* Some shorthands. See fs/nfsd/nfs3proc.c */ +#define NFS3_FSF_DEFAULT	0x001B +#define NFS3_FSF_BILLYBOY	0x0018 +#define NFS3_FSF_READONLY	0x0008 + +enum nfs3_ftype { +	NF3NON  = 0, +	NF3REG  = 1, +	NF3DIR  = 2, +	NF3BLK  = 3, +	NF3CHR  = 4, +	NF3LNK  = 5, +	NF3SOCK = 6, +	NF3FIFO = 7,	/* changed from NFSv2 (was 8) */ +	NF3BAD  = 8 +}; + +struct nfs3_fh { +	unsigned short size; +	unsigned char  data[NFS3_FHSIZE]; +}; + +#define NFS3_VERSION		3 +#define NFS3PROC_NULL		0 +#define NFS3PROC_GETATTR	1 +#define NFS3PROC_SETATTR	2 +#define NFS3PROC_LOOKUP		3 +#define NFS3PROC_ACCESS		4 +#define NFS3PROC_READLINK	5 +#define NFS3PROC_READ		6 +#define NFS3PROC_WRITE		7 +#define NFS3PROC_CREATE		8 +#define NFS3PROC_MKDIR		9 +#define NFS3PROC_SYMLINK	10 +#define NFS3PROC_MKNOD		11 +#define NFS3PROC_REMOVE		12 +#define NFS3PROC_RMDIR		13 +#define NFS3PROC_RENAME		14 +#define NFS3PROC_LINK		15 +#define NFS3PROC_READDIR	16 +#define NFS3PROC_READDIRPLUS	17 +#define NFS3PROC_FSSTAT		18 +#define NFS3PROC_FSINFO		19 +#define NFS3PROC_PATHCONF	20 +#define NFS3PROC_COMMIT		21 + +#define NFS_MNT3_VERSION	3 +  + +#endif /* _UAPI_LINUX_NFS3_H */ diff --git a/include/uapi/linux/nfs4.h b/include/uapi/linux/nfs4.h new file mode 100644 index 00000000000..788128ebac4 --- /dev/null +++ b/include/uapi/linux/nfs4.h @@ -0,0 +1,178 @@ +/* + *  include/linux/nfs4.h + * + *  NFSv4 protocol definitions. + * + *  Copyright (c) 2002 The Regents of the University of Michigan. + *  All rights reserved. + * + *  Kendrick Smith <kmsmith@umich.edu> + *  Andy Adamson   <andros@umich.edu> + */ + +#ifndef _UAPI_LINUX_NFS4_H +#define _UAPI_LINUX_NFS4_H + +#include <linux/types.h> + +#define NFS4_BITMAP_SIZE	2 +#define NFS4_VERIFIER_SIZE	8 +#define NFS4_STATEID_SEQID_SIZE 4 +#define NFS4_STATEID_OTHER_SIZE 12 +#define NFS4_STATEID_SIZE	(NFS4_STATEID_SEQID_SIZE + NFS4_STATEID_OTHER_SIZE) +#define NFS4_FHSIZE		128 +#define NFS4_MAXPATHLEN		PATH_MAX +#define NFS4_MAXNAMLEN		NAME_MAX +#define NFS4_OPAQUE_LIMIT	1024 +#define NFS4_MAX_SESSIONID_LEN	16 + +#define NFS4_ACCESS_READ        0x0001 +#define NFS4_ACCESS_LOOKUP      0x0002 +#define NFS4_ACCESS_MODIFY      0x0004 +#define NFS4_ACCESS_EXTEND      0x0008 +#define NFS4_ACCESS_DELETE      0x0010 +#define NFS4_ACCESS_EXECUTE     0x0020 + +#define NFS4_FH_PERSISTENT		0x0000 +#define NFS4_FH_NOEXPIRE_WITH_OPEN	0x0001 +#define NFS4_FH_VOLATILE_ANY		0x0002 +#define NFS4_FH_VOL_MIGRATION		0x0004 +#define NFS4_FH_VOL_RENAME		0x0008 + +#define NFS4_OPEN_RESULT_CONFIRM 0x0002 +#define NFS4_OPEN_RESULT_LOCKTYPE_POSIX 0x0004 + +#define NFS4_SHARE_ACCESS_MASK	0x000F +#define NFS4_SHARE_ACCESS_READ	0x0001 +#define NFS4_SHARE_ACCESS_WRITE	0x0002 +#define NFS4_SHARE_ACCESS_BOTH	0x0003 +#define NFS4_SHARE_DENY_READ	0x0001 +#define NFS4_SHARE_DENY_WRITE	0x0002 +#define NFS4_SHARE_DENY_BOTH	0x0003 + +/* nfs41 */ +#define NFS4_SHARE_WANT_MASK		0xFF00 +#define NFS4_SHARE_WANT_NO_PREFERENCE	0x0000 +#define NFS4_SHARE_WANT_READ_DELEG	0x0100 +#define NFS4_SHARE_WANT_WRITE_DELEG	0x0200 +#define NFS4_SHARE_WANT_ANY_DELEG	0x0300 +#define NFS4_SHARE_WANT_NO_DELEG	0x0400 +#define NFS4_SHARE_WANT_CANCEL		0x0500 + +#define NFS4_SHARE_WHEN_MASK		0xF0000 +#define NFS4_SHARE_SIGNAL_DELEG_WHEN_RESRC_AVAIL	0x10000 +#define NFS4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED		0x20000 + +#define NFS4_CDFC4_FORE	0x1 +#define NFS4_CDFC4_BACK 0x2 +#define NFS4_CDFC4_BOTH 0x3 +#define NFS4_CDFC4_FORE_OR_BOTH 0x3 +#define NFS4_CDFC4_BACK_OR_BOTH 0x7 + +#define NFS4_CDFS4_FORE 0x1 +#define NFS4_CDFS4_BACK 0x2 +#define NFS4_CDFS4_BOTH 0x3 + +#define NFS4_SET_TO_SERVER_TIME	0 +#define NFS4_SET_TO_CLIENT_TIME	1 + +#define NFS4_ACE_ACCESS_ALLOWED_ACE_TYPE 0 +#define NFS4_ACE_ACCESS_DENIED_ACE_TYPE  1 +#define NFS4_ACE_SYSTEM_AUDIT_ACE_TYPE   2 +#define NFS4_ACE_SYSTEM_ALARM_ACE_TYPE   3 + +#define ACL4_SUPPORT_ALLOW_ACL 0x01 +#define ACL4_SUPPORT_DENY_ACL  0x02 +#define ACL4_SUPPORT_AUDIT_ACL 0x04 +#define ACL4_SUPPORT_ALARM_ACL 0x08 + +#define NFS4_ACE_FILE_INHERIT_ACE             0x00000001 +#define NFS4_ACE_DIRECTORY_INHERIT_ACE        0x00000002 +#define NFS4_ACE_NO_PROPAGATE_INHERIT_ACE     0x00000004 +#define NFS4_ACE_INHERIT_ONLY_ACE             0x00000008 +#define NFS4_ACE_SUCCESSFUL_ACCESS_ACE_FLAG   0x00000010 +#define NFS4_ACE_FAILED_ACCESS_ACE_FLAG       0x00000020 +#define NFS4_ACE_IDENTIFIER_GROUP             0x00000040 + +#define NFS4_ACE_READ_DATA                    0x00000001 +#define NFS4_ACE_LIST_DIRECTORY               0x00000001 +#define NFS4_ACE_WRITE_DATA                   0x00000002 +#define NFS4_ACE_ADD_FILE                     0x00000002 +#define NFS4_ACE_APPEND_DATA                  0x00000004 +#define NFS4_ACE_ADD_SUBDIRECTORY             0x00000004 +#define NFS4_ACE_READ_NAMED_ATTRS             0x00000008 +#define NFS4_ACE_WRITE_NAMED_ATTRS            0x00000010 +#define NFS4_ACE_EXECUTE                      0x00000020 +#define NFS4_ACE_DELETE_CHILD                 0x00000040 +#define NFS4_ACE_READ_ATTRIBUTES              0x00000080 +#define NFS4_ACE_WRITE_ATTRIBUTES             0x00000100 +#define NFS4_ACE_DELETE                       0x00010000 +#define NFS4_ACE_READ_ACL                     0x00020000 +#define NFS4_ACE_WRITE_ACL                    0x00040000 +#define NFS4_ACE_WRITE_OWNER                  0x00080000 +#define NFS4_ACE_SYNCHRONIZE                  0x00100000 +#define NFS4_ACE_GENERIC_READ                 0x00120081 +#define NFS4_ACE_GENERIC_WRITE                0x00160106 +#define NFS4_ACE_GENERIC_EXECUTE              0x001200A0 +#define NFS4_ACE_MASK_ALL                     0x001F01FF + +#define EXCHGID4_FLAG_SUPP_MOVED_REFER		0x00000001 +#define EXCHGID4_FLAG_SUPP_MOVED_MIGR		0x00000002 +#define EXCHGID4_FLAG_BIND_PRINC_STATEID	0x00000100 + +#define EXCHGID4_FLAG_USE_NON_PNFS		0x00010000 +#define EXCHGID4_FLAG_USE_PNFS_MDS		0x00020000 +#define EXCHGID4_FLAG_USE_PNFS_DS		0x00040000 +#define EXCHGID4_FLAG_MASK_PNFS			0x00070000 + +#define EXCHGID4_FLAG_UPD_CONFIRMED_REC_A	0x40000000 +#define EXCHGID4_FLAG_CONFIRMED_R		0x80000000 +/* + * Since the validity of these bits depends on whether + * they're set in the argument or response, have separate + * invalid flag masks for arg (_A) and resp (_R). + */ +#define EXCHGID4_FLAG_MASK_A			0x40070103 +#define EXCHGID4_FLAG_MASK_R			0x80070103 + +#define SEQ4_STATUS_CB_PATH_DOWN		0x00000001 +#define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRING	0x00000002 +#define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRED	0x00000004 +#define SEQ4_STATUS_EXPIRED_ALL_STATE_REVOKED	0x00000008 +#define SEQ4_STATUS_EXPIRED_SOME_STATE_REVOKED	0x00000010 +#define SEQ4_STATUS_ADMIN_STATE_REVOKED		0x00000020 +#define SEQ4_STATUS_RECALLABLE_STATE_REVOKED	0x00000040 +#define SEQ4_STATUS_LEASE_MOVED			0x00000080 +#define SEQ4_STATUS_RESTART_RECLAIM_NEEDED	0x00000100 +#define SEQ4_STATUS_CB_PATH_DOWN_SESSION	0x00000200 +#define SEQ4_STATUS_BACKCHANNEL_FAULT		0x00000400 + +#define NFS4_SECINFO_STYLE4_CURRENT_FH	0 +#define NFS4_SECINFO_STYLE4_PARENT	1 + +#define NFS4_MAX_UINT64	(~(u64)0) + +/* An NFS4 sessions server must support at least NFS4_MAX_OPS operations. + * If a compound requires more operations, adjust NFS4_MAX_OPS accordingly. + */ +#define NFS4_MAX_OPS   8 + +/* Our NFS4 client back channel server only wants the cb_sequene and the + * actual operation per compound + */ +#define NFS4_MAX_BACK_CHANNEL_OPS 2 + +enum nfs4_acl_whotype { +	NFS4_ACL_WHO_NAMED = 0, +	NFS4_ACL_WHO_OWNER, +	NFS4_ACL_WHO_GROUP, +	NFS4_ACL_WHO_EVERYONE, +}; + +#endif /* _UAPI_LINUX_NFS4_H */ + +/* + * Local variables: + *  c-basic-offset: 8 + * End: + */ diff --git a/include/uapi/linux/nfs4_mount.h b/include/uapi/linux/nfs4_mount.h new file mode 100644 index 00000000000..a0dcf665565 --- /dev/null +++ b/include/uapi/linux/nfs4_mount.h @@ -0,0 +1,71 @@ +#ifndef _LINUX_NFS4_MOUNT_H +#define _LINUX_NFS4_MOUNT_H + +/* + *  linux/include/linux/nfs4_mount.h + * + *  Copyright (C) 2002  Trond Myklebust + * + *  structure passed from user-space to kernel-space during an nfsv4 mount + */ + +/* + * WARNING!  Do not delete or change the order of these fields.  If + * a new field is required then add it to the end.  The version field + * tracks which fields are present.  This will ensure some measure of + * mount-to-kernel version compatibility.  Some of these aren't used yet + * but here they are anyway. + */ +#define NFS4_MOUNT_VERSION	1 + +struct nfs_string { +	unsigned int len; +	const char __user * data; +}; + +struct nfs4_mount_data { +	int version;				/* 1 */ +	int flags;				/* 1 */ +	int rsize;				/* 1 */ +	int wsize;				/* 1 */ +	int timeo;				/* 1 */ +	int retrans;				/* 1 */ +	int acregmin;				/* 1 */ +	int acregmax;				/* 1 */ +	int acdirmin;				/* 1 */ +	int acdirmax;				/* 1 */ + +	/* see the definition of 'struct clientaddr4' in RFC3010 */ +	struct nfs_string client_addr;		/* 1 */ + +	/* Mount path */ +	struct nfs_string mnt_path;		/* 1 */ + +	/* Server details */ +	struct nfs_string hostname;		/* 1 */ +	/* Server IP address */ +	unsigned int host_addrlen;		/* 1 */ +	struct sockaddr __user * host_addr;	/* 1 */ + +	/* Transport protocol to use */ +	int proto;				/* 1 */ + +	/* Pseudo-flavours to use for authentication. See RFC2623 */ +	int auth_flavourlen;			/* 1 */ +	int __user *auth_flavours;		/* 1 */ +}; + +/* bits in the flags field */ +/* Note: the fields that correspond to existing NFSv2/v3 mount options + * 	 should mirror the values from include/linux/nfs_mount.h + */ + +#define NFS4_MOUNT_SOFT		0x0001	/* 1 */ +#define NFS4_MOUNT_INTR		0x0002	/* 1 */ +#define NFS4_MOUNT_NOCTO	0x0010	/* 1 */ +#define NFS4_MOUNT_NOAC		0x0020	/* 1 */ +#define NFS4_MOUNT_STRICTLOCK	0x1000	/* 1 */ +#define NFS4_MOUNT_UNSHARED	0x8000	/* 1 */ +#define NFS4_MOUNT_FLAGMASK	0x9033 + +#endif diff --git a/include/uapi/linux/nfs_fs.h b/include/uapi/linux/nfs_fs.h new file mode 100644 index 00000000000..49142287999 --- /dev/null +++ b/include/uapi/linux/nfs_fs.h @@ -0,0 +1,61 @@ +/* + *  linux/include/linux/nfs_fs.h + * + *  Copyright (C) 1992  Rick Sladkey + * + *  OS-specific nfs filesystem definitions and declarations + */ + +#ifndef _UAPI_LINUX_NFS_FS_H +#define _UAPI_LINUX_NFS_FS_H + +#include <linux/magic.h> + +/* Default timeout values */ +#define NFS_DEF_UDP_TIMEO	(11) +#define NFS_DEF_UDP_RETRANS	(3) +#define NFS_DEF_TCP_TIMEO	(600) +#define NFS_DEF_TCP_RETRANS	(2) + +#define NFS_MAX_UDP_TIMEOUT	(60*HZ) +#define NFS_MAX_TCP_TIMEOUT	(600*HZ) + +#define NFS_DEF_ACREGMIN	(3) +#define NFS_DEF_ACREGMAX	(60) +#define NFS_DEF_ACDIRMIN	(30) +#define NFS_DEF_ACDIRMAX	(60) + +/* + * When flushing a cluster of dirty pages, there can be different + * strategies: + */ +#define FLUSH_SYNC		1	/* file being synced, or contention */ +#define FLUSH_STABLE		4	/* commit to stable storage */ +#define FLUSH_LOWPRI		8	/* low priority background flush */ +#define FLUSH_HIGHPRI		16	/* high priority memory reclaim flush */ +#define FLUSH_COND_STABLE	32	/* conditional stable write - only stable +					 * if everything fits in one RPC */ + + +/* + * NFS debug flags + */ +#define NFSDBG_VFS		0x0001 +#define NFSDBG_DIRCACHE		0x0002 +#define NFSDBG_LOOKUPCACHE	0x0004 +#define NFSDBG_PAGECACHE	0x0008 +#define NFSDBG_PROC		0x0010 +#define NFSDBG_XDR		0x0020 +#define NFSDBG_FILE		0x0040 +#define NFSDBG_ROOT		0x0080 +#define NFSDBG_CALLBACK		0x0100 +#define NFSDBG_CLIENT		0x0200 +#define NFSDBG_MOUNT		0x0400 +#define NFSDBG_FSCACHE		0x0800 +#define NFSDBG_PNFS		0x1000 +#define NFSDBG_PNFS_LD		0x2000 +#define NFSDBG_STATE		0x4000 +#define NFSDBG_ALL		0xFFFF + + +#endif /* _UAPI_LINUX_NFS_FS_H */ diff --git a/include/uapi/linux/nfs_idmap.h b/include/uapi/linux/nfs_idmap.h new file mode 100644 index 00000000000..8d4b1c7b24d --- /dev/null +++ b/include/uapi/linux/nfs_idmap.h @@ -0,0 +1,65 @@ +/* + * include/linux/nfs_idmap.h + * + *  UID and GID to name mapping for clients. + * + *  Copyright (c) 2002 The Regents of the University of Michigan. + *  All rights reserved. + * + *  Marius Aamodt Eriksen <marius@umich.edu> + * + *  Redistribution and use in source and binary forms, with or without + *  modification, are permitted provided that the following conditions + *  are met: + * + *  1. Redistributions of source code must retain the above copyright + *     notice, this list of conditions and the following disclaimer. + *  2. Redistributions in binary form must reproduce the above copyright + *     notice, this list of conditions and the following disclaimer in the + *     documentation and/or other materials provided with the distribution. + *  3. Neither the name of the University nor the names of its + *     contributors may be used to endorse or promote products derived + *     from this software without specific prior written permission. + * + *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + *  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _UAPINFS_IDMAP_H +#define _UAPINFS_IDMAP_H + +#include <linux/types.h> + +/* XXX from bits/utmp.h  */ +#define IDMAP_NAMESZ  128 + +#define IDMAP_TYPE_USER  0 +#define IDMAP_TYPE_GROUP 1 + +#define IDMAP_CONV_IDTONAME 0 +#define IDMAP_CONV_NAMETOID 1 + +#define IDMAP_STATUS_INVALIDMSG 0x01 +#define IDMAP_STATUS_AGAIN      0x02 +#define IDMAP_STATUS_LOOKUPFAIL 0x04 +#define IDMAP_STATUS_SUCCESS    0x08 + +struct idmap_msg { +	__u8  im_type; +	__u8  im_conv; +	char  im_name[IDMAP_NAMESZ]; +	__u32 im_id; +	__u8  im_status; +}; + + +#endif /* _UAPINFS_IDMAP_H */ diff --git a/include/uapi/linux/nfs_mount.h b/include/uapi/linux/nfs_mount.h new file mode 100644 index 00000000000..576bddd72e0 --- /dev/null +++ b/include/uapi/linux/nfs_mount.h @@ -0,0 +1,77 @@ +#ifndef _LINUX_NFS_MOUNT_H +#define _LINUX_NFS_MOUNT_H + +/* + *  linux/include/linux/nfs_mount.h + * + *  Copyright (C) 1992  Rick Sladkey + * + *  structure passed from user-space to kernel-space during an nfs mount + */ +#include <linux/in.h> +#include <linux/nfs.h> +#include <linux/nfs2.h> +#include <linux/nfs3.h> + +/* + * WARNING!  Do not delete or change the order of these fields.  If + * a new field is required then add it to the end.  The version field + * tracks which fields are present.  This will ensure some measure of + * mount-to-kernel version compatibility.  Some of these aren't used yet + * but here they are anyway. + */ +#define NFS_MOUNT_VERSION	6 +#define NFS_MAX_CONTEXT_LEN	256 + +struct nfs_mount_data { +	int		version;		/* 1 */ +	int		fd;			/* 1 */ +	struct nfs2_fh	old_root;		/* 1 */ +	int		flags;			/* 1 */ +	int		rsize;			/* 1 */ +	int		wsize;			/* 1 */ +	int		timeo;			/* 1 */ +	int		retrans;		/* 1 */ +	int		acregmin;		/* 1 */ +	int		acregmax;		/* 1 */ +	int		acdirmin;		/* 1 */ +	int		acdirmax;		/* 1 */ +	struct sockaddr_in addr;		/* 1 */ +	char		hostname[NFS_MAXNAMLEN + 1];		/* 1 */ +	int		namlen;			/* 2 */ +	unsigned int	bsize;			/* 3 */ +	struct nfs3_fh	root;			/* 4 */ +	int		pseudoflavor;		/* 5 */ +	char		context[NFS_MAX_CONTEXT_LEN + 1];	/* 6 */ +}; + +/* bits in the flags field visible to user space */ + +#define NFS_MOUNT_SOFT		0x0001	/* 1 */ +#define NFS_MOUNT_INTR		0x0002	/* 1 */ /* now unused, but ABI */ +#define NFS_MOUNT_SECURE	0x0004	/* 1 */ +#define NFS_MOUNT_POSIX		0x0008	/* 1 */ +#define NFS_MOUNT_NOCTO		0x0010	/* 1 */ +#define NFS_MOUNT_NOAC		0x0020	/* 1 */ +#define NFS_MOUNT_TCP		0x0040	/* 2 */ +#define NFS_MOUNT_VER3		0x0080	/* 3 */ +#define NFS_MOUNT_KERBEROS	0x0100	/* 3 */ +#define NFS_MOUNT_NONLM		0x0200	/* 3 */ +#define NFS_MOUNT_BROKEN_SUID	0x0400	/* 4 */ +#define NFS_MOUNT_NOACL		0x0800	/* 4 */ +#define NFS_MOUNT_STRICTLOCK	0x1000	/* reserved for NFSv4 */ +#define NFS_MOUNT_SECFLAVOUR	0x2000	/* 5 */ +#define NFS_MOUNT_NORDIRPLUS	0x4000	/* 5 */ +#define NFS_MOUNT_UNSHARED	0x8000	/* 5 */ +#define NFS_MOUNT_FLAGMASK	0xFFFF + +/* The following are for internal use only */ +#define NFS_MOUNT_LOOKUP_CACHE_NONEG	0x10000 +#define NFS_MOUNT_LOOKUP_CACHE_NONE	0x20000 +#define NFS_MOUNT_NORESVPORT		0x40000 +#define NFS_MOUNT_LEGACY_INTERFACE	0x80000 + +#define NFS_MOUNT_LOCAL_FLOCK	0x100000 +#define NFS_MOUNT_LOCAL_FCNTL	0x200000 + +#endif diff --git a/include/uapi/linux/nfsacl.h b/include/uapi/linux/nfsacl.h new file mode 100644 index 00000000000..9bb9771a107 --- /dev/null +++ b/include/uapi/linux/nfsacl.h @@ -0,0 +1,29 @@ +/* + * File: linux/nfsacl.h + * + * (C) 2003 Andreas Gruenbacher <agruen@suse.de> + */ +#ifndef _UAPI__LINUX_NFSACL_H +#define _UAPI__LINUX_NFSACL_H + +#define NFS_ACL_PROGRAM	100227 + +#define ACLPROC2_GETACL		1 +#define ACLPROC2_SETACL		2 +#define ACLPROC2_GETATTR	3 +#define ACLPROC2_ACCESS		4 + +#define ACLPROC3_GETACL		1 +#define ACLPROC3_SETACL		2 + + +/* Flags for the getacl/setacl mode */ +#define NFS_ACL			0x0001 +#define NFS_ACLCNT		0x0002 +#define NFS_DFACL		0x0004 +#define NFS_DFACLCNT		0x0008 + +/* Flag for Default ACL entries */ +#define NFS_ACL_DEFAULT		0x1000 + +#endif /* _UAPI__LINUX_NFSACL_H */ diff --git a/include/uapi/linux/nfsd/Kbuild b/include/uapi/linux/nfsd/Kbuild index aafaa5aa54d..c11bc404053 100644 --- a/include/uapi/linux/nfsd/Kbuild +++ b/include/uapi/linux/nfsd/Kbuild @@ -1 +1,6 @@  # UAPI Header export list +header-y += cld.h +header-y += debug.h +header-y += export.h +header-y += nfsfh.h +header-y += stats.h diff --git a/include/uapi/linux/nfsd/cld.h b/include/uapi/linux/nfsd/cld.h new file mode 100644 index 00000000000..f14a9ab06f1 --- /dev/null +++ b/include/uapi/linux/nfsd/cld.h @@ -0,0 +1,56 @@ +/* + * Upcall description for nfsdcld communication + * + * Copyright (c) 2012 Red Hat, Inc. + * Author(s): Jeff Layton <jlayton@redhat.com> + * + *  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 _NFSD_CLD_H +#define _NFSD_CLD_H + +/* latest upcall version available */ +#define CLD_UPCALL_VERSION 1 + +/* defined by RFC3530 */ +#define NFS4_OPAQUE_LIMIT 1024 + +enum cld_command { +	Cld_Create,		/* create a record for this cm_id */ +	Cld_Remove,		/* remove record of this cm_id */ +	Cld_Check,		/* is this cm_id allowed? */ +	Cld_GraceDone,		/* grace period is complete */ +}; + +/* representation of long-form NFSv4 client ID */ +struct cld_name { +	uint16_t	cn_len;				/* length of cm_id */ +	unsigned char	cn_id[NFS4_OPAQUE_LIMIT];	/* client-provided */ +} __attribute__((packed)); + +/* message struct for communication with userspace */ +struct cld_msg { +	uint8_t		cm_vers;		/* upcall version */ +	uint8_t		cm_cmd;			/* upcall command */ +	int16_t		cm_status;		/* return code */ +	uint32_t	cm_xid;			/* transaction id */ +	union { +		int64_t		cm_gracetime;	/* grace period start time */ +		struct cld_name	cm_name; +	} __attribute__((packed)) cm_u; +} __attribute__((packed)); + +#endif /* !_NFSD_CLD_H */ diff --git a/include/uapi/linux/nfsd/debug.h b/include/uapi/linux/nfsd/debug.h new file mode 100644 index 00000000000..a6f453c740b --- /dev/null +++ b/include/uapi/linux/nfsd/debug.h @@ -0,0 +1,40 @@ +/* + * linux/include/linux/nfsd/debug.h + * + * Debugging-related stuff for nfsd + * + * Copyright (C) 1995 Olaf Kirch <okir@monad.swb.de> + */ + +#ifndef _UAPILINUX_NFSD_DEBUG_H +#define _UAPILINUX_NFSD_DEBUG_H + +#include <linux/sunrpc/debug.h> + +/* + * Enable debugging for nfsd. + * Requires RPC_DEBUG. + */ +#ifdef RPC_DEBUG +# define NFSD_DEBUG		1 +#endif + +/* + * knfsd debug flags + */ +#define NFSDDBG_SOCK		0x0001 +#define NFSDDBG_FH		0x0002 +#define NFSDDBG_EXPORT		0x0004 +#define NFSDDBG_SVC		0x0008 +#define NFSDDBG_PROC		0x0010 +#define NFSDDBG_FILEOP		0x0020 +#define NFSDDBG_AUTH		0x0040 +#define NFSDDBG_REPCACHE	0x0080 +#define NFSDDBG_XDR		0x0100 +#define NFSDDBG_LOCKD		0x0200 +#define NFSDDBG_ALL		0x7FFF +#define NFSDDBG_NOCHANGE	0xFFFF + + + +#endif /* _UAPILINUX_NFSD_DEBUG_H */ diff --git a/include/uapi/linux/nfsd/export.h b/include/uapi/linux/nfsd/export.h new file mode 100644 index 00000000000..cf47c313794 --- /dev/null +++ b/include/uapi/linux/nfsd/export.h @@ -0,0 +1,58 @@ +/* + * include/linux/nfsd/export.h + *  + * Public declarations for NFS exports. The definitions for the + * syscall interface are in nfsctl.h + * + * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de> + */ + +#ifndef _UAPINFSD_EXPORT_H +#define _UAPINFSD_EXPORT_H + +# include <linux/types.h> + +/* + * Important limits for the exports stuff. + */ +#define NFSCLNT_IDMAX		1024 +#define NFSCLNT_ADDRMAX		16 +#define NFSCLNT_KEYMAX		32 + +/* + * Export flags. + */ +#define NFSEXP_READONLY		0x0001 +#define NFSEXP_INSECURE_PORT	0x0002 +#define NFSEXP_ROOTSQUASH	0x0004 +#define NFSEXP_ALLSQUASH	0x0008 +#define NFSEXP_ASYNC		0x0010 +#define NFSEXP_GATHERED_WRITES	0x0020 +/* 40 80 100 currently unused */ +#define NFSEXP_NOHIDE		0x0200 +#define NFSEXP_NOSUBTREECHECK	0x0400 +#define	NFSEXP_NOAUTHNLM	0x0800		/* Don't authenticate NLM requests - just trust */ +#define NFSEXP_MSNFS		0x1000	/* do silly things that MS clients expect; no longer supported */ +#define NFSEXP_FSID		0x2000 +#define	NFSEXP_CROSSMOUNT	0x4000 +#define	NFSEXP_NOACL		0x8000	/* reserved for possible ACL related use */ +/* + * The NFSEXP_V4ROOT flag causes the kernel to give access only to NFSv4 + * clients, and only to the single directory that is the root of the + * export; further lookup and readdir operations are treated as if every + * subdirectory was a mountpoint, and ignored if they are not themselves + * exported.  This is used by nfsd and mountd to construct the NFSv4 + * pseudofilesystem, which provides access only to paths leading to each + * exported filesystem. + */ +#define	NFSEXP_V4ROOT		0x10000 +/* All flags that we claim to support.  (Note we don't support NOACL.) */ +#define NFSEXP_ALLFLAGS		0x17E3F + +/* The flags that may vary depending on security flavor: */ +#define NFSEXP_SECINFO_FLAGS	(NFSEXP_READONLY | NFSEXP_ROOTSQUASH \ +					| NFSEXP_ALLSQUASH \ +					| NFSEXP_INSECURE_PORT) + + +#endif /* _UAPINFSD_EXPORT_H */ diff --git a/include/uapi/linux/nfsd/nfsfh.h b/include/uapi/linux/nfsd/nfsfh.h new file mode 100644 index 00000000000..616e3b39647 --- /dev/null +++ b/include/uapi/linux/nfsd/nfsfh.h @@ -0,0 +1,122 @@ +/* + * include/linux/nfsd/nfsfh.h + * + * This file describes the layout of the file handles as passed + * over the wire. + * + * Earlier versions of knfsd used to sign file handles using keyed MD5 + * or SHA. I've removed this code, because it doesn't give you more + * security than blocking external access to port 2049 on your firewall. + * + * Copyright (C) 1995, 1996, 1997 Olaf Kirch <okir@monad.swb.de> + */ + +#ifndef _UAPI_LINUX_NFSD_FH_H +#define _UAPI_LINUX_NFSD_FH_H + +#include <linux/types.h> +#include <linux/nfs.h> +#include <linux/nfs2.h> +#include <linux/nfs3.h> +#include <linux/nfs4.h> + +/* + * This is the old "dentry style" Linux NFSv2 file handle. + * + * The xino and xdev fields are currently used to transport the + * ino/dev of the exported inode. + */ +struct nfs_fhbase_old { +	__u32		fb_dcookie;	/* dentry cookie - always 0xfeebbaca */ +	__u32		fb_ino;		/* our inode number */ +	__u32		fb_dirino;	/* dir inode number, 0 for directories */ +	__u32		fb_dev;		/* our device */ +	__u32		fb_xdev; +	__u32		fb_xino; +	__u32		fb_generation; +}; + +/* + * This is the new flexible, extensible style NFSv2/v3 file handle. + * by Neil Brown <neilb@cse.unsw.edu.au> - March 2000 + * + * The file handle starts with a sequence of four-byte words. + * The first word contains a version number (1) and three descriptor bytes + * that tell how the remaining 3 variable length fields should be handled. + * These three bytes are auth_type, fsid_type and fileid_type. + * + * All four-byte values are in host-byte-order. + * + * The auth_type field specifies how the filehandle can be authenticated + * This might allow a file to be confirmed to be in a writable part of a + * filetree without checking the path from it up to the root. + * Current values: + *     0  - No authentication.  fb_auth is 0 bytes long + * Possible future values: + *     1  - 4 bytes taken from MD5 hash of the remainer of the file handle + *          prefixed by a secret and with the important export flags. + * + * The fsid_type identifies how the filesystem (or export point) is + *    encoded. + *  Current values: + *     0  - 4 byte device id (ms-2-bytes major, ls-2-bytes minor), 4byte inode number + *        NOTE: we cannot use the kdev_t device id value, because kdev_t.h + *              says we mustn't.  We must break it up and reassemble. + *     1  - 4 byte user specified identifier + *     2  - 4 byte major, 4 byte minor, 4 byte inode number - DEPRECATED + *     3  - 4 byte device id, encoded for user-space, 4 byte inode number + *     4  - 4 byte inode number and 4 byte uuid + *     5  - 8 byte uuid + *     6  - 16 byte uuid + *     7  - 8 byte inode number and 16 byte uuid + * + * The fileid_type identified how the file within the filesystem is encoded. + * This is (will be) passed to, and set by, the underlying filesystem if it supports + * filehandle operations.  The filesystem must not use the value '0' or '0xff' and may + * only use the values 1 and 2 as defined below: + *  Current values: + *    0   - The root, or export point, of the filesystem.  fb_fileid is 0 bytes. + *    1   - 32bit inode number, 32 bit generation number. + *    2   - 32bit inode number, 32 bit generation number, 32 bit parent directory inode number. + * + */ +struct nfs_fhbase_new { +	__u8		fb_version;	/* == 1, even => nfs_fhbase_old */ +	__u8		fb_auth_type; +	__u8		fb_fsid_type; +	__u8		fb_fileid_type; +	__u32		fb_auth[1]; +/*	__u32		fb_fsid[0]; floating */ +/*	__u32		fb_fileid[0]; floating */ +}; + +struct knfsd_fh { +	unsigned int	fh_size;	/* significant for NFSv3. +					 * Points to the current size while building +					 * a new file handle +					 */ +	union { +		struct nfs_fhbase_old	fh_old; +		__u32			fh_pad[NFS4_FHSIZE/4]; +		struct nfs_fhbase_new	fh_new; +	} fh_base; +}; + +#define ofh_dcookie		fh_base.fh_old.fb_dcookie +#define ofh_ino			fh_base.fh_old.fb_ino +#define ofh_dirino		fh_base.fh_old.fb_dirino +#define ofh_dev			fh_base.fh_old.fb_dev +#define ofh_xdev		fh_base.fh_old.fb_xdev +#define ofh_xino		fh_base.fh_old.fb_xino +#define ofh_generation		fh_base.fh_old.fb_generation + +#define	fh_version		fh_base.fh_new.fb_version +#define	fh_fsid_type		fh_base.fh_new.fb_fsid_type +#define	fh_auth_type		fh_base.fh_new.fb_auth_type +#define	fh_fileid_type		fh_base.fh_new.fb_fileid_type +#define	fh_auth			fh_base.fh_new.fb_auth +#define	fh_fsid			fh_base.fh_new.fb_auth + + + +#endif /* _UAPI_LINUX_NFSD_FH_H */ diff --git a/include/uapi/linux/nfsd/stats.h b/include/uapi/linux/nfsd/stats.h new file mode 100644 index 00000000000..9fb7a064426 --- /dev/null +++ b/include/uapi/linux/nfsd/stats.h @@ -0,0 +1,17 @@ +/* + * linux/include/linux/nfsd/stats.h + * + * Statistics for NFS server. + * + * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de> + */ + +#ifndef _UAPILINUX_NFSD_STATS_H +#define _UAPILINUX_NFSD_STATS_H + +#include <linux/nfs4.h> + +/* thread usage wraps very million seconds (approx one fortnight) */ +#define	NFSD_USAGE_WRAP	(HZ*1000000) + +#endif /* _UAPILINUX_NFSD_STATS_H */ diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h new file mode 100644 index 00000000000..7df9b500c80 --- /dev/null +++ b/include/uapi/linux/nl80211.h @@ -0,0 +1,3072 @@ +#ifndef __LINUX_NL80211_H +#define __LINUX_NL80211_H +/* + * 802.11 netlink interface public header + * + * Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net> + * Copyright 2008 Michael Wu <flamingice@sourmilk.net> + * Copyright 2008 Luis Carlos Cobo <luisca@cozybit.com> + * Copyright 2008 Michael Buesch <m@bues.ch> + * Copyright 2008, 2009 Luis R. Rodriguez <lrodriguez@atheros.com> + * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com> + * Copyright 2008 Colin McCabe <colin@cozybit.com> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#include <linux/types.h> + +/** + * DOC: Station handling + * + * Stations are added per interface, but a special case exists with VLAN + * interfaces. When a station is bound to an AP interface, it may be moved + * into a VLAN identified by a VLAN interface index (%NL80211_ATTR_STA_VLAN). + * The station is still assumed to belong to the AP interface it was added + * to. + * + * TODO: need more info? + */ + +/** + * DOC: Frame transmission/registration support + * + * Frame transmission and registration support exists to allow userspace + * management entities such as wpa_supplicant react to management frames + * that are not being handled by the kernel. This includes, for example, + * certain classes of action frames that cannot be handled in the kernel + * for various reasons. + * + * Frame registration is done on a per-interface basis and registrations + * cannot be removed other than by closing the socket. It is possible to + * specify a registration filter to register, for example, only for a + * certain type of action frame. In particular with action frames, those + * that userspace registers for will not be returned as unhandled by the + * driver, so that the registered application has to take responsibility + * for doing that. + * + * The type of frame that can be registered for is also dependent on the + * driver and interface type. The frame types are advertised in wiphy + * attributes so applications know what to expect. + * + * NOTE: When an interface changes type while registrations are active, + *       these registrations are ignored until the interface type is + *       changed again. This means that changing the interface type can + *       lead to a situation that couldn't otherwise be produced, but + *       any such registrations will be dormant in the sense that they + *       will not be serviced, i.e. they will not receive any frames. + * + * Frame transmission allows userspace to send for example the required + * responses to action frames. It is subject to some sanity checking, + * but many frames can be transmitted. When a frame was transmitted, its + * status is indicated to the sending socket. + * + * For more technical details, see the corresponding command descriptions + * below. + */ + +/** + * DOC: Virtual interface / concurrency capabilities + * + * Some devices are able to operate with virtual MACs, they can have + * more than one virtual interface. The capability handling for this + * is a bit complex though, as there may be a number of restrictions + * on the types of concurrency that are supported. + * + * To start with, each device supports the interface types listed in + * the %NL80211_ATTR_SUPPORTED_IFTYPES attribute, but by listing the + * types there no concurrency is implied. + * + * Once concurrency is desired, more attributes must be observed: + * To start with, since some interface types are purely managed in + * software, like the AP-VLAN type in mac80211 for example, there's + * an additional list of these, they can be added at any time and + * are only restricted by some semantic restrictions (e.g. AP-VLAN + * cannot be added without a corresponding AP interface). This list + * is exported in the %NL80211_ATTR_SOFTWARE_IFTYPES attribute. + * + * Further, the list of supported combinations is exported. This is + * in the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute. Basically, + * it exports a list of "groups", and at any point in time the + * interfaces that are currently active must fall into any one of + * the advertised groups. Within each group, there are restrictions + * on the number of interfaces of different types that are supported + * and also the number of different channels, along with potentially + * some other restrictions. See &enum nl80211_if_combination_attrs. + * + * All together, these attributes define the concurrency of virtual + * interfaces that a given device supports. + */ + +/** + * enum nl80211_commands - supported nl80211 commands + * + * @NL80211_CMD_UNSPEC: unspecified command to catch errors + * + * @NL80211_CMD_GET_WIPHY: request information about a wiphy or dump request + *	to get a list of all present wiphys. + * @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or + *	%NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME, + *	%NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ, + *	%NL80211_ATTR_WIPHY_CHANNEL_TYPE, %NL80211_ATTR_WIPHY_RETRY_SHORT, + *	%NL80211_ATTR_WIPHY_RETRY_LONG, %NL80211_ATTR_WIPHY_FRAG_THRESHOLD, + *	and/or %NL80211_ATTR_WIPHY_RTS_THRESHOLD. + *	However, for setting the channel, see %NL80211_CMD_SET_CHANNEL + *	instead, the support here is for backward compatibility only. + * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request + *	or rename notification. Has attributes %NL80211_ATTR_WIPHY and + *	%NL80211_ATTR_WIPHY_NAME. + * @NL80211_CMD_DEL_WIPHY: Wiphy deleted. Has attributes + *	%NL80211_ATTR_WIPHY and %NL80211_ATTR_WIPHY_NAME. + * + * @NL80211_CMD_GET_INTERFACE: Request an interface's configuration; + *	either a dump request on a %NL80211_ATTR_WIPHY or a specific get + *	on an %NL80211_ATTR_IFINDEX is supported. + * @NL80211_CMD_SET_INTERFACE: Set type of a virtual interface, requires + *	%NL80211_ATTR_IFINDEX and %NL80211_ATTR_IFTYPE. + * @NL80211_CMD_NEW_INTERFACE: Newly created virtual interface or response + *	to %NL80211_CMD_GET_INTERFACE. Has %NL80211_ATTR_IFINDEX, + *	%NL80211_ATTR_WIPHY and %NL80211_ATTR_IFTYPE attributes. Can also + *	be sent from userspace to request creation of a new virtual interface, + *	then requires attributes %NL80211_ATTR_WIPHY, %NL80211_ATTR_IFTYPE and + *	%NL80211_ATTR_IFNAME. + * @NL80211_CMD_DEL_INTERFACE: Virtual interface was deleted, has attributes + *	%NL80211_ATTR_IFINDEX and %NL80211_ATTR_WIPHY. Can also be sent from + *	userspace to request deletion of a virtual interface, then requires + *	attribute %NL80211_ATTR_IFINDEX. + * + * @NL80211_CMD_GET_KEY: Get sequence counter information for a key specified + *	by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC. + * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT, + *	%NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD. + * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA, + *	%NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC, %NL80211_ATTR_KEY_CIPHER, + *	and %NL80211_ATTR_KEY_SEQ attributes. + * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX + *	or %NL80211_ATTR_MAC. + * + * @NL80211_CMD_GET_BEACON: (not used) + * @NL80211_CMD_SET_BEACON: change the beacon on an access point interface + *	using the %NL80211_ATTR_BEACON_HEAD and %NL80211_ATTR_BEACON_TAIL + *	attributes. For drivers that generate the beacon and probe responses + *	internally, the following attributes must be provided: %NL80211_ATTR_IE, + *	%NL80211_ATTR_IE_PROBE_RESP and %NL80211_ATTR_IE_ASSOC_RESP. + * @NL80211_CMD_START_AP: Start AP operation on an AP interface, parameters + *	are like for %NL80211_CMD_SET_BEACON, and additionally parameters that + *	do not change are used, these include %NL80211_ATTR_BEACON_INTERVAL, + *	%NL80211_ATTR_DTIM_PERIOD, %NL80211_ATTR_SSID, + *	%NL80211_ATTR_HIDDEN_SSID, %NL80211_ATTR_CIPHERS_PAIRWISE, + *	%NL80211_ATTR_CIPHER_GROUP, %NL80211_ATTR_WPA_VERSIONS, + *	%NL80211_ATTR_AKM_SUITES, %NL80211_ATTR_PRIVACY, + *	%NL80211_ATTR_AUTH_TYPE and %NL80211_ATTR_INACTIVITY_TIMEOUT. + *	The channel to use can be set on the interface or be given using the + *	%NL80211_ATTR_WIPHY_FREQ and %NL80211_ATTR_WIPHY_CHANNEL_TYPE attrs. + * @NL80211_CMD_NEW_BEACON: old alias for %NL80211_CMD_START_AP + * @NL80211_CMD_STOP_AP: Stop AP operation on the given interface + * @NL80211_CMD_DEL_BEACON: old alias for %NL80211_CMD_STOP_AP + * + * @NL80211_CMD_GET_STATION: Get station attributes for station identified by + *	%NL80211_ATTR_MAC on the interface identified by %NL80211_ATTR_IFINDEX. + * @NL80211_CMD_SET_STATION: Set station attributes for station identified by + *	%NL80211_ATTR_MAC on the interface identified by %NL80211_ATTR_IFINDEX. + * @NL80211_CMD_NEW_STATION: Add a station with given attributes to the + *	the interface identified by %NL80211_ATTR_IFINDEX. + * @NL80211_CMD_DEL_STATION: Remove a station identified by %NL80211_ATTR_MAC + *	or, if no MAC address given, all stations, on the interface identified + *	by %NL80211_ATTR_IFINDEX. + * + * @NL80211_CMD_GET_MPATH: Get mesh path attributes for mesh path to + * 	destination %NL80211_ATTR_MAC on the interface identified by + * 	%NL80211_ATTR_IFINDEX. + * @NL80211_CMD_SET_MPATH:  Set mesh path attributes for mesh path to + * 	destination %NL80211_ATTR_MAC on the interface identified by + * 	%NL80211_ATTR_IFINDEX. + * @NL80211_CMD_NEW_MPATH: Create a new mesh path for the destination given by + *	%NL80211_ATTR_MAC via %NL80211_ATTR_MPATH_NEXT_HOP. + * @NL80211_CMD_DEL_MPATH: Delete a mesh path to the destination given by + *	%NL80211_ATTR_MAC. + * @NL80211_CMD_NEW_PATH: Add a mesh path with given attributes to the + *	the interface identified by %NL80211_ATTR_IFINDEX. + * @NL80211_CMD_DEL_PATH: Remove a mesh path identified by %NL80211_ATTR_MAC + *	or, if no MAC address given, all mesh paths, on the interface identified + *	by %NL80211_ATTR_IFINDEX. + * @NL80211_CMD_SET_BSS: Set BSS attributes for BSS identified by + *	%NL80211_ATTR_IFINDEX. + * + * @NL80211_CMD_GET_REG: ask the wireless core to send us its currently set + * 	regulatory domain. + * @NL80211_CMD_SET_REG: Set current regulatory domain. CRDA sends this command + *	after being queried by the kernel. CRDA replies by sending a regulatory + *	domain structure which consists of %NL80211_ATTR_REG_ALPHA set to our + *	current alpha2 if it found a match. It also provides + * 	NL80211_ATTR_REG_RULE_FLAGS, and a set of regulatory rules. Each + * 	regulatory rule is a nested set of attributes  given by + * 	%NL80211_ATTR_REG_RULE_FREQ_[START|END] and + * 	%NL80211_ATTR_FREQ_RANGE_MAX_BW with an attached power rule given by + * 	%NL80211_ATTR_REG_RULE_POWER_MAX_ANT_GAIN and + * 	%NL80211_ATTR_REG_RULE_POWER_MAX_EIRP. + * @NL80211_CMD_REQ_SET_REG: ask the wireless core to set the regulatory domain + * 	to the specified ISO/IEC 3166-1 alpha2 country code. The core will + * 	store this as a valid request and then query userspace for it. + * + * @NL80211_CMD_GET_MESH_CONFIG: Get mesh networking properties for the + *	interface identified by %NL80211_ATTR_IFINDEX + * + * @NL80211_CMD_SET_MESH_CONFIG: Set mesh networking properties for the + *      interface identified by %NL80211_ATTR_IFINDEX + * + * @NL80211_CMD_SET_MGMT_EXTRA_IE: Set extra IEs for management frames. The + *	interface is identified with %NL80211_ATTR_IFINDEX and the management + *	frame subtype with %NL80211_ATTR_MGMT_SUBTYPE. The extra IE data to be + *	added to the end of the specified management frame is specified with + *	%NL80211_ATTR_IE. If the command succeeds, the requested data will be + *	added to all specified management frames generated by + *	kernel/firmware/driver. + *	Note: This command has been removed and it is only reserved at this + *	point to avoid re-using existing command number. The functionality this + *	command was planned for has been provided with cleaner design with the + *	option to specify additional IEs in NL80211_CMD_TRIGGER_SCAN, + *	NL80211_CMD_AUTHENTICATE, NL80211_CMD_ASSOCIATE, + *	NL80211_CMD_DEAUTHENTICATE, and NL80211_CMD_DISASSOCIATE. + * + * @NL80211_CMD_GET_SCAN: get scan results + * @NL80211_CMD_TRIGGER_SCAN: trigger a new scan with the given parameters + *	%NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the + *	probe requests at CCK rate or not. + * @NL80211_CMD_NEW_SCAN_RESULTS: scan notification (as a reply to + *	NL80211_CMD_GET_SCAN and on the "scan" multicast group) + * @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons, + *	partial scan results may be available + * + * @NL80211_CMD_START_SCHED_SCAN: start a scheduled scan at certain + *	intervals, as specified by %NL80211_ATTR_SCHED_SCAN_INTERVAL. + *	Like with normal scans, if SSIDs (%NL80211_ATTR_SCAN_SSIDS) + *	are passed, they are used in the probe requests.  For + *	broadcast, a broadcast SSID must be passed (ie. an empty + *	string).  If no SSID is passed, no probe requests are sent and + *	a passive scan is performed.  %NL80211_ATTR_SCAN_FREQUENCIES, + *	if passed, define which channels should be scanned; if not + *	passed, all channels allowed for the current regulatory domain + *	are used.  Extra IEs can also be passed from the userspace by + *	using the %NL80211_ATTR_IE attribute. + * @NL80211_CMD_STOP_SCHED_SCAN: stop a scheduled scan.  Returns -ENOENT + *	if scheduled scan is not running. + * @NL80211_CMD_SCHED_SCAN_RESULTS: indicates that there are scheduled scan + *	results available. + * @NL80211_CMD_SCHED_SCAN_STOPPED: indicates that the scheduled scan has + *	stopped.  The driver may issue this event at any time during a + *	scheduled scan.  One reason for stopping the scan is if the hardware + *	does not support starting an association or a normal scan while running + *	a scheduled scan.  This event is also sent when the + *	%NL80211_CMD_STOP_SCHED_SCAN command is received or when the interface + *	is brought down while a scheduled scan was running. + * + * @NL80211_CMD_GET_SURVEY: get survey resuls, e.g. channel occupation + *      or noise level + * @NL80211_CMD_NEW_SURVEY_RESULTS: survey data notification (as a reply to + *	NL80211_CMD_GET_SURVEY and on the "scan" multicast group) + * + * @NL80211_CMD_SET_PMKSA: Add a PMKSA cache entry, using %NL80211_ATTR_MAC + *	(for the BSSID) and %NL80211_ATTR_PMKID. + * @NL80211_CMD_DEL_PMKSA: Delete a PMKSA cache entry, using %NL80211_ATTR_MAC + *	(for the BSSID) and %NL80211_ATTR_PMKID. + * @NL80211_CMD_FLUSH_PMKSA: Flush all PMKSA cache entries. + * + * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain + * 	has been changed and provides details of the request information + * 	that caused the change such as who initiated the regulatory request + * 	(%NL80211_ATTR_REG_INITIATOR), the wiphy_idx + * 	(%NL80211_ATTR_REG_ALPHA2) on which the request was made from if + * 	the initiator was %NL80211_REGDOM_SET_BY_COUNTRY_IE or + * 	%NL80211_REGDOM_SET_BY_DRIVER, the type of regulatory domain + * 	set (%NL80211_ATTR_REG_TYPE), if the type of regulatory domain is + * 	%NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on + * 	to (%NL80211_ATTR_REG_ALPHA2). + * @NL80211_CMD_REG_BEACON_HINT: indicates to userspace that an AP beacon + * 	has been found while world roaming thus enabling active scan or + * 	any mode of operation that initiates TX (beacons) on a channel + * 	where we would not have been able to do either before. As an example + * 	if you are world roaming (regulatory domain set to world or if your + * 	driver is using a custom world roaming regulatory domain) and while + * 	doing a passive scan on the 5 GHz band you find an AP there (if not + * 	on a DFS channel) you will now be able to actively scan for that AP + * 	or use AP mode on your card on that same channel. Note that this will + * 	never be used for channels 1-11 on the 2 GHz band as they are always + * 	enabled world wide. This beacon hint is only sent if your device had + * 	either disabled active scanning or beaconing on a channel. We send to + * 	userspace the wiphy on which we removed a restriction from + * 	(%NL80211_ATTR_WIPHY) and the channel on which this occurred + * 	before (%NL80211_ATTR_FREQ_BEFORE) and after (%NL80211_ATTR_FREQ_AFTER) + * 	the beacon hint was processed. + * + * @NL80211_CMD_AUTHENTICATE: authentication request and notification. + *	This command is used both as a command (request to authenticate) and + *	as an event on the "mlme" multicast group indicating completion of the + *	authentication process. + *	When used as a command, %NL80211_ATTR_IFINDEX is used to identify the + *	interface. %NL80211_ATTR_MAC is used to specify PeerSTAAddress (and + *	BSSID in case of station mode). %NL80211_ATTR_SSID is used to specify + *	the SSID (mainly for association, but is included in authentication + *	request, too, to help BSS selection. %NL80211_ATTR_WIPHY_FREQ is used + *	to specify the frequence of the channel in MHz. %NL80211_ATTR_AUTH_TYPE + *	is used to specify the authentication type. %NL80211_ATTR_IE is used to + *	define IEs (VendorSpecificInfo, but also including RSN IE and FT IEs) + *	to be added to the frame. + *	When used as an event, this reports reception of an Authentication + *	frame in station and IBSS modes when the local MLME processed the + *	frame, i.e., it was for the local STA and was received in correct + *	state. This is similar to MLME-AUTHENTICATE.confirm primitive in the + *	MLME SAP interface (kernel providing MLME, userspace SME). The + *	included %NL80211_ATTR_FRAME attribute contains the management frame + *	(including both the header and frame body, but not FCS). This event is + *	also used to indicate if the authentication attempt timed out. In that + *	case the %NL80211_ATTR_FRAME attribute is replaced with a + *	%NL80211_ATTR_TIMED_OUT flag (and %NL80211_ATTR_MAC to indicate which + *	pending authentication timed out). + * @NL80211_CMD_ASSOCIATE: association request and notification; like + *	NL80211_CMD_AUTHENTICATE but for Association and Reassociation + *	(similar to MLME-ASSOCIATE.request, MLME-REASSOCIATE.request, + *	MLME-ASSOCIATE.confirm or MLME-REASSOCIATE.confirm primitives). + * @NL80211_CMD_DEAUTHENTICATE: deauthentication request and notification; like + *	NL80211_CMD_AUTHENTICATE but for Deauthentication frames (similar to + *	MLME-DEAUTHENTICATION.request and MLME-DEAUTHENTICATE.indication + *	primitives). + * @NL80211_CMD_DISASSOCIATE: disassociation request and notification; like + *	NL80211_CMD_AUTHENTICATE but for Disassociation frames (similar to + *	MLME-DISASSOCIATE.request and MLME-DISASSOCIATE.indication primitives). + * + * @NL80211_CMD_MICHAEL_MIC_FAILURE: notification of a locally detected Michael + *	MIC (part of TKIP) failure; sent on the "mlme" multicast group; the + *	event includes %NL80211_ATTR_MAC to describe the source MAC address of + *	the frame with invalid MIC, %NL80211_ATTR_KEY_TYPE to show the key + *	type, %NL80211_ATTR_KEY_IDX to indicate the key identifier, and + *	%NL80211_ATTR_KEY_SEQ to indicate the TSC value of the frame; this + *	event matches with MLME-MICHAELMICFAILURE.indication() primitive + * + * @NL80211_CMD_JOIN_IBSS: Join a new IBSS -- given at least an SSID and a + *	FREQ attribute (for the initial frequency if no peer can be found) + *	and optionally a MAC (as BSSID) and FREQ_FIXED attribute if those + *	should be fixed rather than automatically determined. Can only be + *	executed on a network interface that is UP, and fixed BSSID/FREQ + *	may be rejected. Another optional parameter is the beacon interval, + *	given in the %NL80211_ATTR_BEACON_INTERVAL attribute, which if not + *	given defaults to 100 TU (102.4ms). + * @NL80211_CMD_LEAVE_IBSS: Leave the IBSS -- no special arguments, the IBSS is + *	determined by the network interface. + * + * @NL80211_CMD_TESTMODE: testmode command, takes a wiphy (or ifindex) attribute + *	to identify the device, and the TESTDATA blob attribute to pass through + *	to the driver. + * + * @NL80211_CMD_CONNECT: connection request and notification; this command + *	requests to connect to a specified network but without separating + *	auth and assoc steps. For this, you need to specify the SSID in a + *	%NL80211_ATTR_SSID attribute, and can optionally specify the association + *	IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_MAC, + *	%NL80211_ATTR_WIPHY_FREQ, %NL80211_ATTR_CONTROL_PORT, + *	%NL80211_ATTR_CONTROL_PORT_ETHERTYPE and + *	%NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT. + *	Background scan period can optionally be + *	specified in %NL80211_ATTR_BG_SCAN_PERIOD, + *	if not specified default background scan configuration + *	in driver is used and if period value is 0, bg scan will be disabled. + *	This attribute is ignored if driver does not support roam scan. + *	It is also sent as an event, with the BSSID and response IEs when the + *	connection is established or failed to be established. This can be + *	determined by the STATUS_CODE attribute. + * @NL80211_CMD_ROAM: request that the card roam (currently not implemented), + *	sent as an event when the card/driver roamed by itself. + * @NL80211_CMD_DISCONNECT: drop a given connection; also used to notify + *	userspace that a connection was dropped by the AP or due to other + *	reasons, for this the %NL80211_ATTR_DISCONNECTED_BY_AP and + *	%NL80211_ATTR_REASON_CODE attributes are used. + * + * @NL80211_CMD_SET_WIPHY_NETNS: Set a wiphy's netns. Note that all devices + *	associated with this wiphy must be down and will follow. + * + * @NL80211_CMD_REMAIN_ON_CHANNEL: Request to remain awake on the specified + *	channel for the specified amount of time. This can be used to do + *	off-channel operations like transmit a Public Action frame and wait for + *	a response while being associated to an AP on another channel. + *	%NL80211_ATTR_IFINDEX is used to specify which interface (and thus + *	radio) is used. %NL80211_ATTR_WIPHY_FREQ is used to specify the + *	frequency for the operation and %NL80211_ATTR_WIPHY_CHANNEL_TYPE may be + *	optionally used to specify additional channel parameters. + *	%NL80211_ATTR_DURATION is used to specify the duration in milliseconds + *	to remain on the channel. This command is also used as an event to + *	notify when the requested duration starts (it may take a while for the + *	driver to schedule this time due to other concurrent needs for the + *	radio). + *	When called, this operation returns a cookie (%NL80211_ATTR_COOKIE) + *	that will be included with any events pertaining to this request; + *	the cookie is also used to cancel the request. + * @NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL: This command can be used to cancel a + *	pending remain-on-channel duration if the desired operation has been + *	completed prior to expiration of the originally requested duration. + *	%NL80211_ATTR_WIPHY or %NL80211_ATTR_IFINDEX is used to specify the + *	radio. The %NL80211_ATTR_COOKIE attribute must be given as well to + *	uniquely identify the request. + *	This command is also used as an event to notify when a requested + *	remain-on-channel duration has expired. + * + * @NL80211_CMD_SET_TX_BITRATE_MASK: Set the mask of rates to be used in TX + *	rate selection. %NL80211_ATTR_IFINDEX is used to specify the interface + *	and @NL80211_ATTR_TX_RATES the set of allowed rates. + * + * @NL80211_CMD_REGISTER_FRAME: Register for receiving certain mgmt frames + *	(via @NL80211_CMD_FRAME) for processing in userspace. This command + *	requires an interface index, a frame type attribute (optional for + *	backward compatibility reasons, if not given assumes action frames) + *	and a match attribute containing the first few bytes of the frame + *	that should match, e.g. a single byte for only a category match or + *	four bytes for vendor frames including the OUI. The registration + *	cannot be dropped, but is removed automatically when the netlink + *	socket is closed. Multiple registrations can be made. + * @NL80211_CMD_REGISTER_ACTION: Alias for @NL80211_CMD_REGISTER_FRAME for + *	backward compatibility + * @NL80211_CMD_FRAME: Management frame TX request and RX notification. This + *	command is used both as a request to transmit a management frame and + *	as an event indicating reception of a frame that was not processed in + *	kernel code, but is for us (i.e., which may need to be processed in a + *	user space application). %NL80211_ATTR_FRAME is used to specify the + *	frame contents (including header). %NL80211_ATTR_WIPHY_FREQ (and + *	optionally %NL80211_ATTR_WIPHY_CHANNEL_TYPE) is used to indicate on + *	which channel the frame is to be transmitted or was received. If this + *	channel is not the current channel (remain-on-channel or the + *	operational channel) the device will switch to the given channel and + *	transmit the frame, optionally waiting for a response for the time + *	specified using %NL80211_ATTR_DURATION. When called, this operation + *	returns a cookie (%NL80211_ATTR_COOKIE) that will be included with the + *	TX status event pertaining to the TX request. + *	%NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the + *	management frames at CCK rate or not in 2GHz band. + * @NL80211_CMD_FRAME_WAIT_CANCEL: When an off-channel TX was requested, this + *	command may be used with the corresponding cookie to cancel the wait + *	time if it is known that it is no longer necessary. + * @NL80211_CMD_ACTION: Alias for @NL80211_CMD_FRAME for backward compatibility. + * @NL80211_CMD_FRAME_TX_STATUS: Report TX status of a management frame + *	transmitted with %NL80211_CMD_FRAME. %NL80211_ATTR_COOKIE identifies + *	the TX command and %NL80211_ATTR_FRAME includes the contents of the + *	frame. %NL80211_ATTR_ACK flag is included if the recipient acknowledged + *	the frame. + * @NL80211_CMD_ACTION_TX_STATUS: Alias for @NL80211_CMD_FRAME_TX_STATUS for + *	backward compatibility. + * + * @NL80211_CMD_SET_POWER_SAVE: Set powersave, using %NL80211_ATTR_PS_STATE + * @NL80211_CMD_GET_POWER_SAVE: Get powersave status in %NL80211_ATTR_PS_STATE + * + * @NL80211_CMD_SET_CQM: Connection quality monitor configuration. This command + *	is used to configure connection quality monitoring notification trigger + *	levels. + * @NL80211_CMD_NOTIFY_CQM: Connection quality monitor notification. This + *	command is used as an event to indicate the that a trigger level was + *	reached. + * @NL80211_CMD_SET_CHANNEL: Set the channel (using %NL80211_ATTR_WIPHY_FREQ + *	and %NL80211_ATTR_WIPHY_CHANNEL_TYPE) the given interface (identifed + *	by %NL80211_ATTR_IFINDEX) shall operate on. + *	In case multiple channels are supported by the device, the mechanism + *	with which it switches channels is implementation-defined. + *	When a monitor interface is given, it can only switch channel while + *	no other interfaces are operating to avoid disturbing the operation + *	of any other interfaces, and other interfaces will again take + *	precedence when they are used. + * + * @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface. + * + * @NL80211_CMD_JOIN_MESH: Join a mesh. The mesh ID must be given, and initial + *	mesh config parameters may be given. + * @NL80211_CMD_LEAVE_MESH: Leave the mesh network -- no special arguments, the + *	network is determined by the network interface. + * + * @NL80211_CMD_UNPROT_DEAUTHENTICATE: Unprotected deauthentication frame + *	notification. This event is used to indicate that an unprotected + *	deauthentication frame was dropped when MFP is in use. + * @NL80211_CMD_UNPROT_DISASSOCIATE: Unprotected disassociation frame + *	notification. This event is used to indicate that an unprotected + *	disassociation frame was dropped when MFP is in use. + * + * @NL80211_CMD_NEW_PEER_CANDIDATE: Notification on the reception of a + *      beacon or probe response from a compatible mesh peer.  This is only + *      sent while no station information (sta_info) exists for the new peer + *      candidate and when @NL80211_MESH_SETUP_USERSPACE_AUTH is set.  On + *      reception of this notification, userspace may decide to create a new + *      station (@NL80211_CMD_NEW_STATION).  To stop this notification from + *      reoccurring, the userspace authentication daemon may want to create the + *      new station with the AUTHENTICATED flag unset and maybe change it later + *      depending on the authentication result. + * + * @NL80211_CMD_GET_WOWLAN: get Wake-on-Wireless-LAN (WoWLAN) settings. + * @NL80211_CMD_SET_WOWLAN: set Wake-on-Wireless-LAN (WoWLAN) settings. + *	Since wireless is more complex than wired ethernet, it supports + *	various triggers. These triggers can be configured through this + *	command with the %NL80211_ATTR_WOWLAN_TRIGGERS attribute. For + *	more background information, see + *	http://wireless.kernel.org/en/users/Documentation/WoWLAN. + * + * @NL80211_CMD_SET_REKEY_OFFLOAD: This command is used give the driver + *	the necessary information for supporting GTK rekey offload. This + *	feature is typically used during WoWLAN. The configuration data + *	is contained in %NL80211_ATTR_REKEY_DATA (which is nested and + *	contains the data in sub-attributes). After rekeying happened, + *	this command may also be sent by the driver as an MLME event to + *	inform userspace of the new replay counter. + * + * @NL80211_CMD_PMKSA_CANDIDATE: This is used as an event to inform userspace + *	of PMKSA caching dandidates. + * + * @NL80211_CMD_TDLS_OPER: Perform a high-level TDLS command (e.g. link setup). + * @NL80211_CMD_TDLS_MGMT: Send a TDLS management frame. + * + * @NL80211_CMD_UNEXPECTED_FRAME: Used by an application controlling an AP + *	(or GO) interface (i.e. hostapd) to ask for unexpected frames to + *	implement sending deauth to stations that send unexpected class 3 + *	frames. Also used as the event sent by the kernel when such a frame + *	is received. + *	For the event, the %NL80211_ATTR_MAC attribute carries the TA and + *	other attributes like the interface index are present. + *	If used as the command it must have an interface index and you can + *	only unsubscribe from the event by closing the socket. Subscription + *	is also for %NL80211_CMD_UNEXPECTED_4ADDR_FRAME events. + * + * @NL80211_CMD_UNEXPECTED_4ADDR_FRAME: Sent as an event indicating that the + *	associated station identified by %NL80211_ATTR_MAC sent a 4addr frame + *	and wasn't already in a 4-addr VLAN. The event will be sent similarly + *	to the %NL80211_CMD_UNEXPECTED_FRAME event, to the same listener. + * + * @NL80211_CMD_PROBE_CLIENT: Probe an associated station on an AP interface + *	by sending a null data frame to it and reporting when the frame is + *	acknowleged. This is used to allow timing out inactive clients. Uses + *	%NL80211_ATTR_IFINDEX and %NL80211_ATTR_MAC. The command returns a + *	direct reply with an %NL80211_ATTR_COOKIE that is later used to match + *	up the event with the request. The event includes the same data and + *	has %NL80211_ATTR_ACK set if the frame was ACKed. + * + * @NL80211_CMD_REGISTER_BEACONS: Register this socket to receive beacons from + *	other BSSes when any interfaces are in AP mode. This helps implement + *	OLBC handling in hostapd. Beacons are reported in %NL80211_CMD_FRAME + *	messages. Note that per PHY only one application may register. + * + * @NL80211_CMD_SET_NOACK_MAP: sets a bitmap for the individual TIDs whether + *      No Acknowledgement Policy should be applied. + * + * @NL80211_CMD_CH_SWITCH_NOTIFY: An AP or GO may decide to switch channels + *	independently of the userspace SME, send this event indicating + *	%NL80211_ATTR_IFINDEX is now on %NL80211_ATTR_WIPHY_FREQ with + *	%NL80211_ATTR_WIPHY_CHANNEL_TYPE. + * + * @NL80211_CMD_START_P2P_DEVICE: Start the given P2P Device, identified by + *	its %NL80211_ATTR_WDEV identifier. It must have been created with + *	%NL80211_CMD_NEW_INTERFACE previously. After it has been started, the + *	P2P Device can be used for P2P operations, e.g. remain-on-channel and + *	public action frame TX. + * @NL80211_CMD_STOP_P2P_DEVICE: Stop the given P2P Device, identified by + *	its %NL80211_ATTR_WDEV identifier. + * + * @NL80211_CMD_CONN_FAILED: connection request to an AP failed; used to + *	notify userspace that AP has rejected the connection request from a + *	station, due to particular reason. %NL80211_ATTR_CONN_FAILED_REASON + *	is used for this. + * + * @NL80211_CMD_MAX: highest used command number + * @__NL80211_CMD_AFTER_LAST: internal use + */ +enum nl80211_commands { +/* don't change the order or add anything between, this is ABI! */ +	NL80211_CMD_UNSPEC, + +	NL80211_CMD_GET_WIPHY,		/* can dump */ +	NL80211_CMD_SET_WIPHY, +	NL80211_CMD_NEW_WIPHY, +	NL80211_CMD_DEL_WIPHY, + +	NL80211_CMD_GET_INTERFACE,	/* can dump */ +	NL80211_CMD_SET_INTERFACE, +	NL80211_CMD_NEW_INTERFACE, +	NL80211_CMD_DEL_INTERFACE, + +	NL80211_CMD_GET_KEY, +	NL80211_CMD_SET_KEY, +	NL80211_CMD_NEW_KEY, +	NL80211_CMD_DEL_KEY, + +	NL80211_CMD_GET_BEACON, +	NL80211_CMD_SET_BEACON, +	NL80211_CMD_START_AP, +	NL80211_CMD_NEW_BEACON = NL80211_CMD_START_AP, +	NL80211_CMD_STOP_AP, +	NL80211_CMD_DEL_BEACON = NL80211_CMD_STOP_AP, + +	NL80211_CMD_GET_STATION, +	NL80211_CMD_SET_STATION, +	NL80211_CMD_NEW_STATION, +	NL80211_CMD_DEL_STATION, + +	NL80211_CMD_GET_MPATH, +	NL80211_CMD_SET_MPATH, +	NL80211_CMD_NEW_MPATH, +	NL80211_CMD_DEL_MPATH, + +	NL80211_CMD_SET_BSS, + +	NL80211_CMD_SET_REG, +	NL80211_CMD_REQ_SET_REG, + +	NL80211_CMD_GET_MESH_CONFIG, +	NL80211_CMD_SET_MESH_CONFIG, + +	NL80211_CMD_SET_MGMT_EXTRA_IE /* reserved; not used */, + +	NL80211_CMD_GET_REG, + +	NL80211_CMD_GET_SCAN, +	NL80211_CMD_TRIGGER_SCAN, +	NL80211_CMD_NEW_SCAN_RESULTS, +	NL80211_CMD_SCAN_ABORTED, + +	NL80211_CMD_REG_CHANGE, + +	NL80211_CMD_AUTHENTICATE, +	NL80211_CMD_ASSOCIATE, +	NL80211_CMD_DEAUTHENTICATE, +	NL80211_CMD_DISASSOCIATE, + +	NL80211_CMD_MICHAEL_MIC_FAILURE, + +	NL80211_CMD_REG_BEACON_HINT, + +	NL80211_CMD_JOIN_IBSS, +	NL80211_CMD_LEAVE_IBSS, + +	NL80211_CMD_TESTMODE, + +	NL80211_CMD_CONNECT, +	NL80211_CMD_ROAM, +	NL80211_CMD_DISCONNECT, + +	NL80211_CMD_SET_WIPHY_NETNS, + +	NL80211_CMD_GET_SURVEY, +	NL80211_CMD_NEW_SURVEY_RESULTS, + +	NL80211_CMD_SET_PMKSA, +	NL80211_CMD_DEL_PMKSA, +	NL80211_CMD_FLUSH_PMKSA, + +	NL80211_CMD_REMAIN_ON_CHANNEL, +	NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL, + +	NL80211_CMD_SET_TX_BITRATE_MASK, + +	NL80211_CMD_REGISTER_FRAME, +	NL80211_CMD_REGISTER_ACTION = NL80211_CMD_REGISTER_FRAME, +	NL80211_CMD_FRAME, +	NL80211_CMD_ACTION = NL80211_CMD_FRAME, +	NL80211_CMD_FRAME_TX_STATUS, +	NL80211_CMD_ACTION_TX_STATUS = NL80211_CMD_FRAME_TX_STATUS, + +	NL80211_CMD_SET_POWER_SAVE, +	NL80211_CMD_GET_POWER_SAVE, + +	NL80211_CMD_SET_CQM, +	NL80211_CMD_NOTIFY_CQM, + +	NL80211_CMD_SET_CHANNEL, +	NL80211_CMD_SET_WDS_PEER, + +	NL80211_CMD_FRAME_WAIT_CANCEL, + +	NL80211_CMD_JOIN_MESH, +	NL80211_CMD_LEAVE_MESH, + +	NL80211_CMD_UNPROT_DEAUTHENTICATE, +	NL80211_CMD_UNPROT_DISASSOCIATE, + +	NL80211_CMD_NEW_PEER_CANDIDATE, + +	NL80211_CMD_GET_WOWLAN, +	NL80211_CMD_SET_WOWLAN, + +	NL80211_CMD_START_SCHED_SCAN, +	NL80211_CMD_STOP_SCHED_SCAN, +	NL80211_CMD_SCHED_SCAN_RESULTS, +	NL80211_CMD_SCHED_SCAN_STOPPED, + +	NL80211_CMD_SET_REKEY_OFFLOAD, + +	NL80211_CMD_PMKSA_CANDIDATE, + +	NL80211_CMD_TDLS_OPER, +	NL80211_CMD_TDLS_MGMT, + +	NL80211_CMD_UNEXPECTED_FRAME, + +	NL80211_CMD_PROBE_CLIENT, + +	NL80211_CMD_REGISTER_BEACONS, + +	NL80211_CMD_UNEXPECTED_4ADDR_FRAME, + +	NL80211_CMD_SET_NOACK_MAP, + +	NL80211_CMD_CH_SWITCH_NOTIFY, + +	NL80211_CMD_START_P2P_DEVICE, +	NL80211_CMD_STOP_P2P_DEVICE, + +	NL80211_CMD_CONN_FAILED, + +	/* add new commands above here */ + +	/* used to define NL80211_CMD_MAX below */ +	__NL80211_CMD_AFTER_LAST, +	NL80211_CMD_MAX = __NL80211_CMD_AFTER_LAST - 1 +}; + +/* + * Allow user space programs to use #ifdef on new commands by defining them + * here + */ +#define NL80211_CMD_SET_BSS NL80211_CMD_SET_BSS +#define NL80211_CMD_SET_MGMT_EXTRA_IE NL80211_CMD_SET_MGMT_EXTRA_IE +#define NL80211_CMD_REG_CHANGE NL80211_CMD_REG_CHANGE +#define NL80211_CMD_AUTHENTICATE NL80211_CMD_AUTHENTICATE +#define NL80211_CMD_ASSOCIATE NL80211_CMD_ASSOCIATE +#define NL80211_CMD_DEAUTHENTICATE NL80211_CMD_DEAUTHENTICATE +#define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE +#define NL80211_CMD_REG_BEACON_HINT NL80211_CMD_REG_BEACON_HINT + +#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS + +/* source-level API compatibility */ +#define NL80211_CMD_GET_MESH_PARAMS NL80211_CMD_GET_MESH_CONFIG +#define NL80211_CMD_SET_MESH_PARAMS NL80211_CMD_SET_MESH_CONFIG +#define NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE NL80211_MESH_SETUP_IE + +/** + * enum nl80211_attrs - nl80211 netlink attributes + * + * @NL80211_ATTR_UNSPEC: unspecified attribute to catch errors + * + * @NL80211_ATTR_WIPHY: index of wiphy to operate on, cf. + *	/sys/class/ieee80211/<phyname>/index + * @NL80211_ATTR_WIPHY_NAME: wiphy name (used for renaming) + * @NL80211_ATTR_WIPHY_TXQ_PARAMS: a nested array of TX queue parameters + * @NL80211_ATTR_WIPHY_FREQ: frequency of the selected channel in MHz + * @NL80211_ATTR_WIPHY_CHANNEL_TYPE: included with NL80211_ATTR_WIPHY_FREQ + *	if HT20 or HT40 are allowed (i.e., 802.11n disabled if not included): + *	NL80211_CHAN_NO_HT = HT not allowed (i.e., same as not including + *		this attribute) + *	NL80211_CHAN_HT20 = HT20 only + *	NL80211_CHAN_HT40MINUS = secondary channel is below the primary channel + *	NL80211_CHAN_HT40PLUS = secondary channel is above the primary channel + * @NL80211_ATTR_WIPHY_RETRY_SHORT: TX retry limit for frames whose length is + *	less than or equal to the RTS threshold; allowed range: 1..255; + *	dot11ShortRetryLimit; u8 + * @NL80211_ATTR_WIPHY_RETRY_LONG: TX retry limit for frames whose length is + *	greater than the RTS threshold; allowed range: 1..255; + *	dot11ShortLongLimit; u8 + * @NL80211_ATTR_WIPHY_FRAG_THRESHOLD: fragmentation threshold, i.e., maximum + *	length in octets for frames; allowed range: 256..8000, disable + *	fragmentation with (u32)-1; dot11FragmentationThreshold; u32 + * @NL80211_ATTR_WIPHY_RTS_THRESHOLD: RTS threshold (TX frames with length + *	larger than or equal to this use RTS/CTS handshake); allowed range: + *	0..65536, disable with (u32)-1; dot11RTSThreshold; u32 + * @NL80211_ATTR_WIPHY_COVERAGE_CLASS: Coverage Class as defined by IEEE 802.11 + *	section 7.3.2.9; dot11CoverageClass; u8 + * + * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on + * @NL80211_ATTR_IFNAME: network interface name + * @NL80211_ATTR_IFTYPE: type of virtual interface, see &enum nl80211_iftype + * + * @NL80211_ATTR_WDEV: wireless device identifier, used for pseudo-devices + *	that don't have a netdev (u64) + * + * @NL80211_ATTR_MAC: MAC address (various uses) + * + * @NL80211_ATTR_KEY_DATA: (temporal) key data; for TKIP this consists of + *	16 bytes encryption key followed by 8 bytes each for TX and RX MIC + *	keys + * @NL80211_ATTR_KEY_IDX: key ID (u8, 0-3) + * @NL80211_ATTR_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11 + *	section 7.3.2.25.1, e.g. 0x000FAC04) + * @NL80211_ATTR_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and + *	CCMP keys, each six bytes in little endian + * @NL80211_ATTR_KEY_DEFAULT: Flag attribute indicating the key is default key + * @NL80211_ATTR_KEY_DEFAULT_MGMT: Flag attribute indicating the key is the + *	default management key + * @NL80211_ATTR_CIPHER_SUITES_PAIRWISE: For crypto settings for connect or + *	other commands, indicates which pairwise cipher suites are used + * @NL80211_ATTR_CIPHER_SUITE_GROUP: For crypto settings for connect or + *	other commands, indicates which group cipher suite is used + * + * @NL80211_ATTR_BEACON_INTERVAL: beacon interval in TU + * @NL80211_ATTR_DTIM_PERIOD: DTIM period for beaconing + * @NL80211_ATTR_BEACON_HEAD: portion of the beacon before the TIM IE + * @NL80211_ATTR_BEACON_TAIL: portion of the beacon after the TIM IE + * + * @NL80211_ATTR_STA_AID: Association ID for the station (u16) + * @NL80211_ATTR_STA_FLAGS: flags, nested element with NLA_FLAG attributes of + *	&enum nl80211_sta_flags (deprecated, use %NL80211_ATTR_STA_FLAGS2) + * @NL80211_ATTR_STA_LISTEN_INTERVAL: listen interval as defined by + *	IEEE 802.11 7.3.1.6 (u16). + * @NL80211_ATTR_STA_SUPPORTED_RATES: supported rates, array of supported + *	rates as defined by IEEE 802.11 7.3.2.2 but without the length + *	restriction (at most %NL80211_MAX_SUPP_RATES). + * @NL80211_ATTR_STA_VLAN: interface index of VLAN interface to move station + *	to, or the AP interface the station was originally added to to. + * @NL80211_ATTR_STA_INFO: information about a station, part of station info + *	given for %NL80211_CMD_GET_STATION, nested attribute containing + *	info as possible, see &enum nl80211_sta_info. + * + * @NL80211_ATTR_WIPHY_BANDS: Information about an operating bands, + *	consisting of a nested array. + * + * @NL80211_ATTR_MESH_ID: mesh id (1-32 bytes). + * @NL80211_ATTR_STA_PLINK_ACTION: action to perform on the mesh peer link. + * @NL80211_ATTR_MPATH_NEXT_HOP: MAC address of the next hop for a mesh path. + * @NL80211_ATTR_MPATH_INFO: information about a mesh_path, part of mesh path + * 	info given for %NL80211_CMD_GET_MPATH, nested attribute described at + *	&enum nl80211_mpath_info. + * + * @NL80211_ATTR_MNTR_FLAGS: flags, nested element with NLA_FLAG attributes of + *      &enum nl80211_mntr_flags. + * + * @NL80211_ATTR_REG_ALPHA2: an ISO-3166-alpha2 country code for which the + * 	current regulatory domain should be set to or is already set to. + * 	For example, 'CR', for Costa Rica. This attribute is used by the kernel + * 	to query the CRDA to retrieve one regulatory domain. This attribute can + * 	also be used by userspace to query the kernel for the currently set + * 	regulatory domain. We chose an alpha2 as that is also used by the + * 	IEEE-802.11d country information element to identify a country. + * 	Users can also simply ask the wireless core to set regulatory domain + * 	to a specific alpha2. + * @NL80211_ATTR_REG_RULES: a nested array of regulatory domain regulatory + *	rules. + * + * @NL80211_ATTR_BSS_CTS_PROT: whether CTS protection is enabled (u8, 0 or 1) + * @NL80211_ATTR_BSS_SHORT_PREAMBLE: whether short preamble is enabled + *	(u8, 0 or 1) + * @NL80211_ATTR_BSS_SHORT_SLOT_TIME: whether short slot time enabled + *	(u8, 0 or 1) + * @NL80211_ATTR_BSS_BASIC_RATES: basic rates, array of basic + *	rates in format defined by IEEE 802.11 7.3.2.2 but without the length + *	restriction (at most %NL80211_MAX_SUPP_RATES). + * + * @NL80211_ATTR_HT_CAPABILITY: HT Capability information element (from + *	association request when used with NL80211_CMD_NEW_STATION) + * + * @NL80211_ATTR_SUPPORTED_IFTYPES: nested attribute containing all + *	supported interface types, each a flag attribute with the number + *	of the interface mode. + * + * @NL80211_ATTR_MGMT_SUBTYPE: Management frame subtype for + *	%NL80211_CMD_SET_MGMT_EXTRA_IE. + * + * @NL80211_ATTR_IE: Information element(s) data (used, e.g., with + *	%NL80211_CMD_SET_MGMT_EXTRA_IE). + * + * @NL80211_ATTR_MAX_NUM_SCAN_SSIDS: number of SSIDs you can scan with + *	a single scan request, a wiphy attribute. + * @NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS: number of SSIDs you can + *	scan with a single scheduled scan request, a wiphy attribute. + * @NL80211_ATTR_MAX_SCAN_IE_LEN: maximum length of information elements + *	that can be added to a scan request + * @NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN: maximum length of information + *	elements that can be added to a scheduled scan request + * @NL80211_ATTR_MAX_MATCH_SETS: maximum number of sets that can be + *	used with @NL80211_ATTR_SCHED_SCAN_MATCH, a wiphy attribute. + * + * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) + * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive + *	scanning and include a zero-length SSID (wildcard) for wildcard scan + * @NL80211_ATTR_BSS: scan result BSS + * + * @NL80211_ATTR_REG_INITIATOR: indicates who requested the regulatory domain + * 	currently in effect. This could be any of the %NL80211_REGDOM_SET_BY_* + * @NL80211_ATTR_REG_TYPE: indicates the type of the regulatory domain currently + * 	set. This can be one of the nl80211_reg_type (%NL80211_REGDOM_TYPE_*) + * + * @NL80211_ATTR_SUPPORTED_COMMANDS: wiphy attribute that specifies + *	an array of command numbers (i.e. a mapping index to command number) + *	that the driver for the given wiphy supports. + * + * @NL80211_ATTR_FRAME: frame data (binary attribute), including frame header + *	and body, but not FCS; used, e.g., with NL80211_CMD_AUTHENTICATE and + *	NL80211_CMD_ASSOCIATE events + * @NL80211_ATTR_SSID: SSID (binary attribute, 0..32 octets) + * @NL80211_ATTR_AUTH_TYPE: AuthenticationType, see &enum nl80211_auth_type, + *	represented as a u32 + * @NL80211_ATTR_REASON_CODE: ReasonCode for %NL80211_CMD_DEAUTHENTICATE and + *	%NL80211_CMD_DISASSOCIATE, u16 + * + * @NL80211_ATTR_KEY_TYPE: Key Type, see &enum nl80211_key_type, represented as + *	a u32 + * + * @NL80211_ATTR_FREQ_BEFORE: A channel which has suffered a regulatory change + * 	due to considerations from a beacon hint. This attribute reflects + * 	the state of the channel _before_ the beacon hint processing. This + * 	attributes consists of a nested attribute containing + * 	NL80211_FREQUENCY_ATTR_* + * @NL80211_ATTR_FREQ_AFTER: A channel which has suffered a regulatory change + * 	due to considerations from a beacon hint. This attribute reflects + * 	the state of the channel _after_ the beacon hint processing. This + * 	attributes consists of a nested attribute containing + * 	NL80211_FREQUENCY_ATTR_* + * + * @NL80211_ATTR_CIPHER_SUITES: a set of u32 values indicating the supported + *	cipher suites + * + * @NL80211_ATTR_FREQ_FIXED: a flag indicating the IBSS should not try to look + *	for other networks on different channels + * + * @NL80211_ATTR_TIMED_OUT: a flag indicating than an operation timed out; this + *	is used, e.g., with %NL80211_CMD_AUTHENTICATE event + * + * @NL80211_ATTR_USE_MFP: Whether management frame protection (IEEE 802.11w) is + *	used for the association (&enum nl80211_mfp, represented as a u32); + *	this attribute can be used + *	with %NL80211_CMD_ASSOCIATE request + * + * @NL80211_ATTR_STA_FLAGS2: Attribute containing a + *	&struct nl80211_sta_flag_update. + * + * @NL80211_ATTR_CONTROL_PORT: A flag indicating whether user space controls + *	IEEE 802.1X port, i.e., sets/clears %NL80211_STA_FLAG_AUTHORIZED, in + *	station mode. If the flag is included in %NL80211_CMD_ASSOCIATE + *	request, the driver will assume that the port is unauthorized until + *	authorized by user space. Otherwise, port is marked authorized by + *	default in station mode. + * @NL80211_ATTR_CONTROL_PORT_ETHERTYPE: A 16-bit value indicating the + *	ethertype that will be used for key negotiation. It can be + *	specified with the associate and connect commands. If it is not + *	specified, the value defaults to 0x888E (PAE, 802.1X). This + *	attribute is also used as a flag in the wiphy information to + *	indicate that protocols other than PAE are supported. + * @NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT: When included along with + *	%NL80211_ATTR_CONTROL_PORT_ETHERTYPE, indicates that the custom + *	ethertype frames used for key negotiation must not be encrypted. + * + * @NL80211_ATTR_TESTDATA: Testmode data blob, passed through to the driver. + *	We recommend using nested, driver-specific attributes within this. + * + * @NL80211_ATTR_DISCONNECTED_BY_AP: A flag indicating that the DISCONNECT + *	event was due to the AP disconnecting the station, and not due to + *	a local disconnect request. + * @NL80211_ATTR_STATUS_CODE: StatusCode for the %NL80211_CMD_CONNECT + *	event (u16) + * @NL80211_ATTR_PRIVACY: Flag attribute, used with connect(), indicating + *	that protected APs should be used. This is also used with NEW_BEACON to + *	indicate that the BSS is to use protection. + * + * @NL80211_ATTR_CIPHERS_PAIRWISE: Used with CONNECT, ASSOCIATE, and NEW_BEACON + *	to indicate which unicast key ciphers will be used with the connection + *	(an array of u32). + * @NL80211_ATTR_CIPHER_GROUP: Used with CONNECT, ASSOCIATE, and NEW_BEACON to + *	indicate which group key cipher will be used with the connection (a + *	u32). + * @NL80211_ATTR_WPA_VERSIONS: Used with CONNECT, ASSOCIATE, and NEW_BEACON to + *	indicate which WPA version(s) the AP we want to associate with is using + *	(a u32 with flags from &enum nl80211_wpa_versions). + * @NL80211_ATTR_AKM_SUITES: Used with CONNECT, ASSOCIATE, and NEW_BEACON to + *	indicate which key management algorithm(s) to use (an array of u32). + * + * @NL80211_ATTR_REQ_IE: (Re)association request information elements as + *	sent out by the card, for ROAM and successful CONNECT events. + * @NL80211_ATTR_RESP_IE: (Re)association response information elements as + *	sent by peer, for ROAM and successful CONNECT events. + * + * @NL80211_ATTR_PREV_BSSID: previous BSSID, to be used by in ASSOCIATE + *	commands to specify using a reassociate frame + * + * @NL80211_ATTR_KEY: key information in a nested attribute with + *	%NL80211_KEY_* sub-attributes + * @NL80211_ATTR_KEYS: array of keys for static WEP keys for connect() + *	and join_ibss(), key information is in a nested attribute each + *	with %NL80211_KEY_* sub-attributes + * + * @NL80211_ATTR_PID: Process ID of a network namespace. + * + * @NL80211_ATTR_GENERATION: Used to indicate consistent snapshots for + *	dumps. This number increases whenever the object list being + *	dumped changes, and as such userspace can verify that it has + *	obtained a complete and consistent snapshot by verifying that + *	all dump messages contain the same generation number. If it + *	changed then the list changed and the dump should be repeated + *	completely from scratch. + * + * @NL80211_ATTR_4ADDR: Use 4-address frames on a virtual interface + * + * @NL80211_ATTR_SURVEY_INFO: survey information about a channel, part of + *      the survey response for %NL80211_CMD_GET_SURVEY, nested attribute + *      containing info as possible, see &enum survey_info. + * + * @NL80211_ATTR_PMKID: PMK material for PMKSA caching. + * @NL80211_ATTR_MAX_NUM_PMKIDS: maximum number of PMKIDs a firmware can + *	cache, a wiphy attribute. + * + * @NL80211_ATTR_DURATION: Duration of an operation in milliseconds, u32. + * @NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION: Device attribute that + *	specifies the maximum duration that can be requested with the + *	remain-on-channel operation, in milliseconds, u32. + * + * @NL80211_ATTR_COOKIE: Generic 64-bit cookie to identify objects. + * + * @NL80211_ATTR_TX_RATES: Nested set of attributes + *	(enum nl80211_tx_rate_attributes) describing TX rates per band. The + *	enum nl80211_band value is used as the index (nla_type() of the nested + *	data. If a band is not included, it will be configured to allow all + *	rates based on negotiated supported rates information. This attribute + *	is used with %NL80211_CMD_SET_TX_BITRATE_MASK. + * + * @NL80211_ATTR_FRAME_MATCH: A binary attribute which typically must contain + *	at least one byte, currently used with @NL80211_CMD_REGISTER_FRAME. + * @NL80211_ATTR_FRAME_TYPE: A u16 indicating the frame type/subtype for the + *	@NL80211_CMD_REGISTER_FRAME command. + * @NL80211_ATTR_TX_FRAME_TYPES: wiphy capability attribute, which is a + *	nested attribute of %NL80211_ATTR_FRAME_TYPE attributes, containing + *	information about which frame types can be transmitted with + *	%NL80211_CMD_FRAME. + * @NL80211_ATTR_RX_FRAME_TYPES: wiphy capability attribute, which is a + *	nested attribute of %NL80211_ATTR_FRAME_TYPE attributes, containing + *	information about which frame types can be registered for RX. + * + * @NL80211_ATTR_ACK: Flag attribute indicating that the frame was + *	acknowledged by the recipient. + * + * @NL80211_ATTR_PS_STATE: powersave state, using &enum nl80211_ps_state values. + * + * @NL80211_ATTR_CQM: connection quality monitor configuration in a + *	nested attribute with %NL80211_ATTR_CQM_* sub-attributes. + * + * @NL80211_ATTR_LOCAL_STATE_CHANGE: Flag attribute to indicate that a command + *	is requesting a local authentication/association state change without + *	invoking actual management frame exchange. This can be used with + *	NL80211_CMD_AUTHENTICATE, NL80211_CMD_DEAUTHENTICATE, + *	NL80211_CMD_DISASSOCIATE. + * + * @NL80211_ATTR_AP_ISOLATE: (AP mode) Do not forward traffic between stations + *	connected to this BSS. + * + * @NL80211_ATTR_WIPHY_TX_POWER_SETTING: Transmit power setting type. See + *      &enum nl80211_tx_power_setting for possible values. + * @NL80211_ATTR_WIPHY_TX_POWER_LEVEL: Transmit power level in signed mBm units. + *      This is used in association with @NL80211_ATTR_WIPHY_TX_POWER_SETTING + *      for non-automatic settings. + * + * @NL80211_ATTR_SUPPORT_IBSS_RSN: The device supports IBSS RSN, which mostly + *	means support for per-station GTKs. + * + * @NL80211_ATTR_WIPHY_ANTENNA_TX: Bitmap of allowed antennas for transmitting. + *	This can be used to mask out antennas which are not attached or should + *	not be used for transmitting. If an antenna is not selected in this + *	bitmap the hardware is not allowed to transmit on this antenna. + * + *	Each bit represents one antenna, starting with antenna 1 at the first + *	bit. Depending on which antennas are selected in the bitmap, 802.11n + *	drivers can derive which chainmasks to use (if all antennas belonging to + *	a particular chain are disabled this chain should be disabled) and if + *	a chain has diversity antennas wether diversity should be used or not. + *	HT capabilities (STBC, TX Beamforming, Antenna selection) can be + *	derived from the available chains after applying the antenna mask. + *	Non-802.11n drivers can derive wether to use diversity or not. + *	Drivers may reject configurations or RX/TX mask combinations they cannot + *	support by returning -EINVAL. + * + * @NL80211_ATTR_WIPHY_ANTENNA_RX: Bitmap of allowed antennas for receiving. + *	This can be used to mask out antennas which are not attached or should + *	not be used for receiving. If an antenna is not selected in this bitmap + *	the hardware should not be configured to receive on this antenna. + *	For a more detailed description see @NL80211_ATTR_WIPHY_ANTENNA_TX. + * + * @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX: Bitmap of antennas which are available + *	for configuration as TX antennas via the above parameters. + * + * @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX: Bitmap of antennas which are available + *	for configuration as RX antennas via the above parameters. + * + * @NL80211_ATTR_MCAST_RATE: Multicast tx rate (in 100 kbps) for IBSS + * + * @NL80211_ATTR_OFFCHANNEL_TX_OK: For management frame TX, the frame may be + *	transmitted on another channel when the channel given doesn't match + *	the current channel. If the current channel doesn't match and this + *	flag isn't set, the frame will be rejected. This is also used as an + *	nl80211 capability flag. + * + * @NL80211_ATTR_BSS_HT_OPMODE: HT operation mode (u16) + * + * @NL80211_ATTR_KEY_DEFAULT_TYPES: A nested attribute containing flags + *	attributes, specifying what a key should be set as default as. + *	See &enum nl80211_key_default_types. + * + * @NL80211_ATTR_MESH_SETUP: Optional mesh setup parameters.  These cannot be + *	changed once the mesh is active. + * @NL80211_ATTR_MESH_CONFIG: Mesh configuration parameters, a nested attribute + *	containing attributes from &enum nl80211_meshconf_params. + * @NL80211_ATTR_SUPPORT_MESH_AUTH: Currently, this means the underlying driver + *	allows auth frames in a mesh to be passed to userspace for processing via + *	the @NL80211_MESH_SETUP_USERSPACE_AUTH flag. + * @NL80211_ATTR_STA_PLINK_STATE: The state of a mesh peer link as + *	defined in &enum nl80211_plink_state. Used when userspace is + *	driving the peer link management state machine. + *	@NL80211_MESH_SETUP_USERSPACE_AMPE must be enabled. + * + * @NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED: indicates, as part of the wiphy + *	capabilities, the supported WoWLAN triggers + * @NL80211_ATTR_WOWLAN_TRIGGERS: used by %NL80211_CMD_SET_WOWLAN to + *	indicate which WoW triggers should be enabled. This is also + *	used by %NL80211_CMD_GET_WOWLAN to get the currently enabled WoWLAN + *	triggers. + * + * @NL80211_ATTR_SCHED_SCAN_INTERVAL: Interval between scheduled scan + *	cycles, in msecs. + * + * @NL80211_ATTR_SCHED_SCAN_MATCH: Nested attribute with one or more + *	sets of attributes to match during scheduled scans.  Only BSSs + *	that match any of the sets will be reported.  These are + *	pass-thru filter rules. + *	For a match to succeed, the BSS must match all attributes of a + *	set.  Since not every hardware supports matching all types of + *	attributes, there is no guarantee that the reported BSSs are + *	fully complying with the match sets and userspace needs to be + *	able to ignore them by itself. + *	Thus, the implementation is somewhat hardware-dependent, but + *	this is only an optimization and the userspace application + *	needs to handle all the non-filtered results anyway. + *	If the match attributes don't make sense when combined with + *	the values passed in @NL80211_ATTR_SCAN_SSIDS (eg. if an SSID + *	is included in the probe request, but the match attributes + *	will never let it go through), -EINVAL may be returned. + *	If ommited, no filtering is done. + * + * @NL80211_ATTR_INTERFACE_COMBINATIONS: Nested attribute listing the supported + *	interface combinations. In each nested item, it contains attributes + *	defined in &enum nl80211_if_combination_attrs. + * @NL80211_ATTR_SOFTWARE_IFTYPES: Nested attribute (just like + *	%NL80211_ATTR_SUPPORTED_IFTYPES) containing the interface types that + *	are managed in software: interfaces of these types aren't subject to + *	any restrictions in their number or combinations. + * + * @NL80211_ATTR_REKEY_DATA: nested attribute containing the information + *	necessary for GTK rekeying in the device, see &enum nl80211_rekey_data. + * + * @NL80211_ATTR_SCAN_SUPP_RATES: rates per to be advertised as supported in scan, + *	nested array attribute containing an entry for each band, with the entry + *	being a list of supported rates as defined by IEEE 802.11 7.3.2.2 but + *	without the length restriction (at most %NL80211_MAX_SUPP_RATES). + * + * @NL80211_ATTR_HIDDEN_SSID: indicates whether SSID is to be hidden from Beacon + *	and Probe Response (when response to wildcard Probe Request); see + *	&enum nl80211_hidden_ssid, represented as a u32 + * + * @NL80211_ATTR_IE_PROBE_RESP: Information element(s) for Probe Response frame. + *	This is used with %NL80211_CMD_NEW_BEACON and %NL80211_CMD_SET_BEACON to + *	provide extra IEs (e.g., WPS/P2P IE) into Probe Response frames when the + *	driver (or firmware) replies to Probe Request frames. + * @NL80211_ATTR_IE_ASSOC_RESP: Information element(s) for (Re)Association + *	Response frames. This is used with %NL80211_CMD_NEW_BEACON and + *	%NL80211_CMD_SET_BEACON to provide extra IEs (e.g., WPS/P2P IE) into + *	(Re)Association Response frames when the driver (or firmware) replies to + *	(Re)Association Request frames. + * + * @NL80211_ATTR_STA_WME: Nested attribute containing the wme configuration + *	of the station, see &enum nl80211_sta_wme_attr. + * @NL80211_ATTR_SUPPORT_AP_UAPSD: the device supports uapsd when working + *	as AP. + * + * @NL80211_ATTR_ROAM_SUPPORT: Indicates whether the firmware is capable of + *	roaming to another AP in the same ESS if the signal lever is low. + * + * @NL80211_ATTR_PMKSA_CANDIDATE: Nested attribute containing the PMKSA caching + *	candidate information, see &enum nl80211_pmksa_candidate_attr. + * + * @NL80211_ATTR_TX_NO_CCK_RATE: Indicates whether to use CCK rate or not + *	for management frames transmission. In order to avoid p2p probe/action + *	frames are being transmitted at CCK rate in 2GHz band, the user space + *	applications use this attribute. + *	This attribute is used with %NL80211_CMD_TRIGGER_SCAN and + *	%NL80211_CMD_FRAME commands. + * + * @NL80211_ATTR_TDLS_ACTION: Low level TDLS action code (e.g. link setup + *	request, link setup confirm, link teardown, etc.). Values are + *	described in the TDLS (802.11z) specification. + * @NL80211_ATTR_TDLS_DIALOG_TOKEN: Non-zero token for uniquely identifying a + *	TDLS conversation between two devices. + * @NL80211_ATTR_TDLS_OPERATION: High level TDLS operation; see + *	&enum nl80211_tdls_operation, represented as a u8. + * @NL80211_ATTR_TDLS_SUPPORT: A flag indicating the device can operate + *	as a TDLS peer sta. + * @NL80211_ATTR_TDLS_EXTERNAL_SETUP: The TDLS discovery/setup and teardown + *	procedures should be performed by sending TDLS packets via + *	%NL80211_CMD_TDLS_MGMT. Otherwise %NL80211_CMD_TDLS_OPER should be + *	used for asking the driver to perform a TDLS operation. + * + * @NL80211_ATTR_DEVICE_AP_SME: This u32 attribute may be listed for devices + *	that have AP support to indicate that they have the AP SME integrated + *	with support for the features listed in this attribute, see + *	&enum nl80211_ap_sme_features. + * + * @NL80211_ATTR_DONT_WAIT_FOR_ACK: Used with %NL80211_CMD_FRAME, this tells + *	the driver to not wait for an acknowledgement. Note that due to this, + *	it will also not give a status callback nor return a cookie. This is + *	mostly useful for probe responses to save airtime. + * + * @NL80211_ATTR_FEATURE_FLAGS: This u32 attribute contains flags from + *	&enum nl80211_feature_flags and is advertised in wiphy information. + * @NL80211_ATTR_PROBE_RESP_OFFLOAD: Indicates that the HW responds to probe + *	requests while operating in AP-mode. + *	This attribute holds a bitmap of the supported protocols for + *	offloading (see &enum nl80211_probe_resp_offload_support_attr). + * + * @NL80211_ATTR_PROBE_RESP: Probe Response template data. Contains the entire + *	probe-response frame. The DA field in the 802.11 header is zero-ed out, + *	to be filled by the FW. + * @NL80211_ATTR_DISABLE_HT:  Force HT capable interfaces to disable + *      this feature.  Currently, only supported in mac80211 drivers. + * @NL80211_ATTR_HT_CAPABILITY_MASK: Specify which bits of the + *      ATTR_HT_CAPABILITY to which attention should be paid. + *      Currently, only mac80211 NICs support this feature. + *      The values that may be configured are: + *       MCS rates, MAX-AMSDU, HT-20-40 and HT_CAP_SGI_40 + *       AMPDU density and AMPDU factor. + *      All values are treated as suggestions and may be ignored + *      by the driver as required.  The actual values may be seen in + *      the station debugfs ht_caps file. + * + * @NL80211_ATTR_DFS_REGION: region for regulatory rules which this country + *    abides to when initiating radiation on DFS channels. A country maps + *    to one DFS region. + * + * @NL80211_ATTR_NOACK_MAP: This u16 bitmap contains the No Ack Policy of + *      up to 16 TIDs. + * + * @NL80211_ATTR_INACTIVITY_TIMEOUT: timeout value in seconds, this can be + *	used by the drivers which has MLME in firmware and does not have support + *	to report per station tx/rx activity to free up the staion entry from + *	the list. This needs to be used when the driver advertises the + *	capability to timeout the stations. + * + * @NL80211_ATTR_RX_SIGNAL_DBM: signal strength in dBm (as a 32-bit int); + *	this attribute is (depending on the driver capabilities) added to + *	received frames indicated with %NL80211_CMD_FRAME. + * + * @NL80211_ATTR_BG_SCAN_PERIOD: Background scan period in seconds + *      or 0 to disable background scan. + * + * @NL80211_ATTR_USER_REG_HINT_TYPE: type of regulatory hint passed from + *	userspace. If unset it is assumed the hint comes directly from + *	a user. If set code could specify exactly what type of source + *	was used to provide the hint. For the different types of + *	allowed user regulatory hints see nl80211_user_reg_hint_type. + * + * @NL80211_ATTR_CONN_FAILED_REASON: The reason for which AP has rejected + *	the connection request from a station. nl80211_connect_failed_reason + *	enum has different reasons of connection failure. + * + * @NL80211_ATTR_MAX: highest attribute number currently defined + * @__NL80211_ATTR_AFTER_LAST: internal use + */ +enum nl80211_attrs { +/* don't change the order or add anything between, this is ABI! */ +	NL80211_ATTR_UNSPEC, + +	NL80211_ATTR_WIPHY, +	NL80211_ATTR_WIPHY_NAME, + +	NL80211_ATTR_IFINDEX, +	NL80211_ATTR_IFNAME, +	NL80211_ATTR_IFTYPE, + +	NL80211_ATTR_MAC, + +	NL80211_ATTR_KEY_DATA, +	NL80211_ATTR_KEY_IDX, +	NL80211_ATTR_KEY_CIPHER, +	NL80211_ATTR_KEY_SEQ, +	NL80211_ATTR_KEY_DEFAULT, + +	NL80211_ATTR_BEACON_INTERVAL, +	NL80211_ATTR_DTIM_PERIOD, +	NL80211_ATTR_BEACON_HEAD, +	NL80211_ATTR_BEACON_TAIL, + +	NL80211_ATTR_STA_AID, +	NL80211_ATTR_STA_FLAGS, +	NL80211_ATTR_STA_LISTEN_INTERVAL, +	NL80211_ATTR_STA_SUPPORTED_RATES, +	NL80211_ATTR_STA_VLAN, +	NL80211_ATTR_STA_INFO, + +	NL80211_ATTR_WIPHY_BANDS, + +	NL80211_ATTR_MNTR_FLAGS, + +	NL80211_ATTR_MESH_ID, +	NL80211_ATTR_STA_PLINK_ACTION, +	NL80211_ATTR_MPATH_NEXT_HOP, +	NL80211_ATTR_MPATH_INFO, + +	NL80211_ATTR_BSS_CTS_PROT, +	NL80211_ATTR_BSS_SHORT_PREAMBLE, +	NL80211_ATTR_BSS_SHORT_SLOT_TIME, + +	NL80211_ATTR_HT_CAPABILITY, + +	NL80211_ATTR_SUPPORTED_IFTYPES, + +	NL80211_ATTR_REG_ALPHA2, +	NL80211_ATTR_REG_RULES, + +	NL80211_ATTR_MESH_CONFIG, + +	NL80211_ATTR_BSS_BASIC_RATES, + +	NL80211_ATTR_WIPHY_TXQ_PARAMS, +	NL80211_ATTR_WIPHY_FREQ, +	NL80211_ATTR_WIPHY_CHANNEL_TYPE, + +	NL80211_ATTR_KEY_DEFAULT_MGMT, + +	NL80211_ATTR_MGMT_SUBTYPE, +	NL80211_ATTR_IE, + +	NL80211_ATTR_MAX_NUM_SCAN_SSIDS, + +	NL80211_ATTR_SCAN_FREQUENCIES, +	NL80211_ATTR_SCAN_SSIDS, +	NL80211_ATTR_GENERATION, /* replaces old SCAN_GENERATION */ +	NL80211_ATTR_BSS, + +	NL80211_ATTR_REG_INITIATOR, +	NL80211_ATTR_REG_TYPE, + +	NL80211_ATTR_SUPPORTED_COMMANDS, + +	NL80211_ATTR_FRAME, +	NL80211_ATTR_SSID, +	NL80211_ATTR_AUTH_TYPE, +	NL80211_ATTR_REASON_CODE, + +	NL80211_ATTR_KEY_TYPE, + +	NL80211_ATTR_MAX_SCAN_IE_LEN, +	NL80211_ATTR_CIPHER_SUITES, + +	NL80211_ATTR_FREQ_BEFORE, +	NL80211_ATTR_FREQ_AFTER, + +	NL80211_ATTR_FREQ_FIXED, + + +	NL80211_ATTR_WIPHY_RETRY_SHORT, +	NL80211_ATTR_WIPHY_RETRY_LONG, +	NL80211_ATTR_WIPHY_FRAG_THRESHOLD, +	NL80211_ATTR_WIPHY_RTS_THRESHOLD, + +	NL80211_ATTR_TIMED_OUT, + +	NL80211_ATTR_USE_MFP, + +	NL80211_ATTR_STA_FLAGS2, + +	NL80211_ATTR_CONTROL_PORT, + +	NL80211_ATTR_TESTDATA, + +	NL80211_ATTR_PRIVACY, + +	NL80211_ATTR_DISCONNECTED_BY_AP, +	NL80211_ATTR_STATUS_CODE, + +	NL80211_ATTR_CIPHER_SUITES_PAIRWISE, +	NL80211_ATTR_CIPHER_SUITE_GROUP, +	NL80211_ATTR_WPA_VERSIONS, +	NL80211_ATTR_AKM_SUITES, + +	NL80211_ATTR_REQ_IE, +	NL80211_ATTR_RESP_IE, + +	NL80211_ATTR_PREV_BSSID, + +	NL80211_ATTR_KEY, +	NL80211_ATTR_KEYS, + +	NL80211_ATTR_PID, + +	NL80211_ATTR_4ADDR, + +	NL80211_ATTR_SURVEY_INFO, + +	NL80211_ATTR_PMKID, +	NL80211_ATTR_MAX_NUM_PMKIDS, + +	NL80211_ATTR_DURATION, + +	NL80211_ATTR_COOKIE, + +	NL80211_ATTR_WIPHY_COVERAGE_CLASS, + +	NL80211_ATTR_TX_RATES, + +	NL80211_ATTR_FRAME_MATCH, + +	NL80211_ATTR_ACK, + +	NL80211_ATTR_PS_STATE, + +	NL80211_ATTR_CQM, + +	NL80211_ATTR_LOCAL_STATE_CHANGE, + +	NL80211_ATTR_AP_ISOLATE, + +	NL80211_ATTR_WIPHY_TX_POWER_SETTING, +	NL80211_ATTR_WIPHY_TX_POWER_LEVEL, + +	NL80211_ATTR_TX_FRAME_TYPES, +	NL80211_ATTR_RX_FRAME_TYPES, +	NL80211_ATTR_FRAME_TYPE, + +	NL80211_ATTR_CONTROL_PORT_ETHERTYPE, +	NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, + +	NL80211_ATTR_SUPPORT_IBSS_RSN, + +	NL80211_ATTR_WIPHY_ANTENNA_TX, +	NL80211_ATTR_WIPHY_ANTENNA_RX, + +	NL80211_ATTR_MCAST_RATE, + +	NL80211_ATTR_OFFCHANNEL_TX_OK, + +	NL80211_ATTR_BSS_HT_OPMODE, + +	NL80211_ATTR_KEY_DEFAULT_TYPES, + +	NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION, + +	NL80211_ATTR_MESH_SETUP, + +	NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX, +	NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX, + +	NL80211_ATTR_SUPPORT_MESH_AUTH, +	NL80211_ATTR_STA_PLINK_STATE, + +	NL80211_ATTR_WOWLAN_TRIGGERS, +	NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED, + +	NL80211_ATTR_SCHED_SCAN_INTERVAL, + +	NL80211_ATTR_INTERFACE_COMBINATIONS, +	NL80211_ATTR_SOFTWARE_IFTYPES, + +	NL80211_ATTR_REKEY_DATA, + +	NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS, +	NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN, + +	NL80211_ATTR_SCAN_SUPP_RATES, + +	NL80211_ATTR_HIDDEN_SSID, + +	NL80211_ATTR_IE_PROBE_RESP, +	NL80211_ATTR_IE_ASSOC_RESP, + +	NL80211_ATTR_STA_WME, +	NL80211_ATTR_SUPPORT_AP_UAPSD, + +	NL80211_ATTR_ROAM_SUPPORT, + +	NL80211_ATTR_SCHED_SCAN_MATCH, +	NL80211_ATTR_MAX_MATCH_SETS, + +	NL80211_ATTR_PMKSA_CANDIDATE, + +	NL80211_ATTR_TX_NO_CCK_RATE, + +	NL80211_ATTR_TDLS_ACTION, +	NL80211_ATTR_TDLS_DIALOG_TOKEN, +	NL80211_ATTR_TDLS_OPERATION, +	NL80211_ATTR_TDLS_SUPPORT, +	NL80211_ATTR_TDLS_EXTERNAL_SETUP, + +	NL80211_ATTR_DEVICE_AP_SME, + +	NL80211_ATTR_DONT_WAIT_FOR_ACK, + +	NL80211_ATTR_FEATURE_FLAGS, + +	NL80211_ATTR_PROBE_RESP_OFFLOAD, + +	NL80211_ATTR_PROBE_RESP, + +	NL80211_ATTR_DFS_REGION, + +	NL80211_ATTR_DISABLE_HT, +	NL80211_ATTR_HT_CAPABILITY_MASK, + +	NL80211_ATTR_NOACK_MAP, + +	NL80211_ATTR_INACTIVITY_TIMEOUT, + +	NL80211_ATTR_RX_SIGNAL_DBM, + +	NL80211_ATTR_BG_SCAN_PERIOD, + +	NL80211_ATTR_WDEV, + +	NL80211_ATTR_USER_REG_HINT_TYPE, + +	NL80211_ATTR_CONN_FAILED_REASON, + +	/* add attributes here, update the policy in nl80211.c */ + +	__NL80211_ATTR_AFTER_LAST, +	NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1 +}; + +/* source-level API compatibility */ +#define NL80211_ATTR_SCAN_GENERATION NL80211_ATTR_GENERATION +#define	NL80211_ATTR_MESH_PARAMS NL80211_ATTR_MESH_CONFIG + +/* + * Allow user space programs to use #ifdef on new attributes by defining them + * here + */ +#define NL80211_CMD_CONNECT NL80211_CMD_CONNECT +#define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY +#define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES +#define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS +#define NL80211_ATTR_WIPHY_FREQ NL80211_ATTR_WIPHY_FREQ +#define NL80211_ATTR_WIPHY_CHANNEL_TYPE NL80211_ATTR_WIPHY_CHANNEL_TYPE +#define NL80211_ATTR_MGMT_SUBTYPE NL80211_ATTR_MGMT_SUBTYPE +#define NL80211_ATTR_IE NL80211_ATTR_IE +#define NL80211_ATTR_REG_INITIATOR NL80211_ATTR_REG_INITIATOR +#define NL80211_ATTR_REG_TYPE NL80211_ATTR_REG_TYPE +#define NL80211_ATTR_FRAME NL80211_ATTR_FRAME +#define NL80211_ATTR_SSID NL80211_ATTR_SSID +#define NL80211_ATTR_AUTH_TYPE NL80211_ATTR_AUTH_TYPE +#define NL80211_ATTR_REASON_CODE NL80211_ATTR_REASON_CODE +#define NL80211_ATTR_CIPHER_SUITES_PAIRWISE NL80211_ATTR_CIPHER_SUITES_PAIRWISE +#define NL80211_ATTR_CIPHER_SUITE_GROUP NL80211_ATTR_CIPHER_SUITE_GROUP +#define NL80211_ATTR_WPA_VERSIONS NL80211_ATTR_WPA_VERSIONS +#define NL80211_ATTR_AKM_SUITES NL80211_ATTR_AKM_SUITES +#define NL80211_ATTR_KEY NL80211_ATTR_KEY +#define NL80211_ATTR_KEYS NL80211_ATTR_KEYS +#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS + +#define NL80211_MAX_SUPP_RATES			32 +#define NL80211_MAX_SUPP_HT_RATES		77 +#define NL80211_MAX_SUPP_REG_RULES		32 +#define NL80211_TKIP_DATA_OFFSET_ENCR_KEY	0 +#define NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY	16 +#define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY	24 +#define NL80211_HT_CAPABILITY_LEN		26 + +#define NL80211_MAX_NR_CIPHER_SUITES		5 +#define NL80211_MAX_NR_AKM_SUITES		2 + +#define NL80211_MIN_REMAIN_ON_CHANNEL_TIME	10 + +/* default RSSI threshold for scan results if none specified. */ +#define NL80211_SCAN_RSSI_THOLD_OFF		-300 + +#define NL80211_CQM_TXE_MAX_INTVL		1800 + +/** + * enum nl80211_iftype - (virtual) interface types + * + * @NL80211_IFTYPE_UNSPECIFIED: unspecified type, driver decides + * @NL80211_IFTYPE_ADHOC: independent BSS member + * @NL80211_IFTYPE_STATION: managed BSS member + * @NL80211_IFTYPE_AP: access point + * @NL80211_IFTYPE_AP_VLAN: VLAN interface for access points; VLAN interfaces + *	are a bit special in that they must always be tied to a pre-existing + *	AP type interface. + * @NL80211_IFTYPE_WDS: wireless distribution interface + * @NL80211_IFTYPE_MONITOR: monitor interface receiving all frames + * @NL80211_IFTYPE_MESH_POINT: mesh point + * @NL80211_IFTYPE_P2P_CLIENT: P2P client + * @NL80211_IFTYPE_P2P_GO: P2P group owner + * @NL80211_IFTYPE_P2P_DEVICE: P2P device interface type, this is not a netdev + *	and therefore can't be created in the normal ways, use the + *	%NL80211_CMD_START_P2P_DEVICE and %NL80211_CMD_STOP_P2P_DEVICE + *	commands to create and destroy one + * @NL80211_IFTYPE_MAX: highest interface type number currently defined + * @NUM_NL80211_IFTYPES: number of defined interface types + * + * These values are used with the %NL80211_ATTR_IFTYPE + * to set the type of an interface. + * + */ +enum nl80211_iftype { +	NL80211_IFTYPE_UNSPECIFIED, +	NL80211_IFTYPE_ADHOC, +	NL80211_IFTYPE_STATION, +	NL80211_IFTYPE_AP, +	NL80211_IFTYPE_AP_VLAN, +	NL80211_IFTYPE_WDS, +	NL80211_IFTYPE_MONITOR, +	NL80211_IFTYPE_MESH_POINT, +	NL80211_IFTYPE_P2P_CLIENT, +	NL80211_IFTYPE_P2P_GO, +	NL80211_IFTYPE_P2P_DEVICE, + +	/* keep last */ +	NUM_NL80211_IFTYPES, +	NL80211_IFTYPE_MAX = NUM_NL80211_IFTYPES - 1 +}; + +/** + * enum nl80211_sta_flags - station flags + * + * Station flags. When a station is added to an AP interface, it is + * assumed to be already associated (and hence authenticated.) + * + * @__NL80211_STA_FLAG_INVALID: attribute number 0 is reserved + * @NL80211_STA_FLAG_AUTHORIZED: station is authorized (802.1X) + * @NL80211_STA_FLAG_SHORT_PREAMBLE: station is capable of receiving frames + *	with short barker preamble + * @NL80211_STA_FLAG_WME: station is WME/QoS capable + * @NL80211_STA_FLAG_MFP: station uses management frame protection + * @NL80211_STA_FLAG_AUTHENTICATED: station is authenticated + * @NL80211_STA_FLAG_TDLS_PEER: station is a TDLS peer -- this flag should + *	only be used in managed mode (even in the flags mask). Note that the + *	flag can't be changed, it is only valid while adding a station, and + *	attempts to change it will silently be ignored (rather than rejected + *	as errors.) + * @NL80211_STA_FLAG_MAX: highest station flag number currently defined + * @__NL80211_STA_FLAG_AFTER_LAST: internal use + */ +enum nl80211_sta_flags { +	__NL80211_STA_FLAG_INVALID, +	NL80211_STA_FLAG_AUTHORIZED, +	NL80211_STA_FLAG_SHORT_PREAMBLE, +	NL80211_STA_FLAG_WME, +	NL80211_STA_FLAG_MFP, +	NL80211_STA_FLAG_AUTHENTICATED, +	NL80211_STA_FLAG_TDLS_PEER, + +	/* keep last */ +	__NL80211_STA_FLAG_AFTER_LAST, +	NL80211_STA_FLAG_MAX = __NL80211_STA_FLAG_AFTER_LAST - 1 +}; + +#define NL80211_STA_FLAG_MAX_OLD_API	NL80211_STA_FLAG_TDLS_PEER + +/** + * struct nl80211_sta_flag_update - station flags mask/set + * @mask: mask of station flags to set + * @set: which values to set them to + * + * Both mask and set contain bits as per &enum nl80211_sta_flags. + */ +struct nl80211_sta_flag_update { +	__u32 mask; +	__u32 set; +} __attribute__((packed)); + +/** + * enum nl80211_rate_info - bitrate information + * + * These attribute types are used with %NL80211_STA_INFO_TXRATE + * when getting information about the bitrate of a station. + * There are 2 attributes for bitrate, a legacy one that represents + * a 16-bit value, and new one that represents a 32-bit value. + * If the rate value fits into 16 bit, both attributes are reported + * with the same value. If the rate is too high to fit into 16 bits + * (>6.5535Gbps) only 32-bit attribute is included. + * User space tools encouraged to use the 32-bit attribute and fall + * back to the 16-bit one for compatibility with older kernels. + * + * @__NL80211_RATE_INFO_INVALID: attribute number 0 is reserved + * @NL80211_RATE_INFO_BITRATE: total bitrate (u16, 100kbit/s) + * @NL80211_RATE_INFO_MCS: mcs index for 802.11n (u8) + * @NL80211_RATE_INFO_40_MHZ_WIDTH: 40 Mhz dualchannel bitrate + * @NL80211_RATE_INFO_SHORT_GI: 400ns guard interval + * @NL80211_RATE_INFO_BITRATE32: total bitrate (u32, 100kbit/s) + * @NL80211_RATE_INFO_MAX: highest rate_info number currently defined + * @__NL80211_RATE_INFO_AFTER_LAST: internal use + */ +enum nl80211_rate_info { +	__NL80211_RATE_INFO_INVALID, +	NL80211_RATE_INFO_BITRATE, +	NL80211_RATE_INFO_MCS, +	NL80211_RATE_INFO_40_MHZ_WIDTH, +	NL80211_RATE_INFO_SHORT_GI, +	NL80211_RATE_INFO_BITRATE32, + +	/* keep last */ +	__NL80211_RATE_INFO_AFTER_LAST, +	NL80211_RATE_INFO_MAX = __NL80211_RATE_INFO_AFTER_LAST - 1 +}; + +/** + * enum nl80211_sta_bss_param - BSS information collected by STA + * + * These attribute types are used with %NL80211_STA_INFO_BSS_PARAM + * when getting information about the bitrate of a station. + * + * @__NL80211_STA_BSS_PARAM_INVALID: attribute number 0 is reserved + * @NL80211_STA_BSS_PARAM_CTS_PROT: whether CTS protection is enabled (flag) + * @NL80211_STA_BSS_PARAM_SHORT_PREAMBLE:  whether short preamble is enabled + *	(flag) + * @NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME:  whether short slot time is enabled + *	(flag) + * @NL80211_STA_BSS_PARAM_DTIM_PERIOD: DTIM period for beaconing (u8) + * @NL80211_STA_BSS_PARAM_BEACON_INTERVAL: Beacon interval (u16) + * @NL80211_STA_BSS_PARAM_MAX: highest sta_bss_param number currently defined + * @__NL80211_STA_BSS_PARAM_AFTER_LAST: internal use + */ +enum nl80211_sta_bss_param { +	__NL80211_STA_BSS_PARAM_INVALID, +	NL80211_STA_BSS_PARAM_CTS_PROT, +	NL80211_STA_BSS_PARAM_SHORT_PREAMBLE, +	NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME, +	NL80211_STA_BSS_PARAM_DTIM_PERIOD, +	NL80211_STA_BSS_PARAM_BEACON_INTERVAL, + +	/* keep last */ +	__NL80211_STA_BSS_PARAM_AFTER_LAST, +	NL80211_STA_BSS_PARAM_MAX = __NL80211_STA_BSS_PARAM_AFTER_LAST - 1 +}; + +/** + * enum nl80211_sta_info - station information + * + * These attribute types are used with %NL80211_ATTR_STA_INFO + * when getting information about a station. + * + * @__NL80211_STA_INFO_INVALID: attribute number 0 is reserved + * @NL80211_STA_INFO_INACTIVE_TIME: time since last activity (u32, msecs) + * @NL80211_STA_INFO_RX_BYTES: total received bytes (u32, from this station) + * @NL80211_STA_INFO_TX_BYTES: total transmitted bytes (u32, to this station) + * @NL80211_STA_INFO_SIGNAL: signal strength of last received PPDU (u8, dBm) + * @NL80211_STA_INFO_TX_BITRATE: current unicast tx rate, nested attribute + * 	containing info as possible, see &enum nl80211_rate_info + * @NL80211_STA_INFO_RX_PACKETS: total received packet (u32, from this station) + * @NL80211_STA_INFO_TX_PACKETS: total transmitted packets (u32, to this + *	station) + * @NL80211_STA_INFO_TX_RETRIES: total retries (u32, to this station) + * @NL80211_STA_INFO_TX_FAILED: total failed packets (u32, to this station) + * @NL80211_STA_INFO_SIGNAL_AVG: signal strength average (u8, dBm) + * @NL80211_STA_INFO_LLID: the station's mesh LLID + * @NL80211_STA_INFO_PLID: the station's mesh PLID + * @NL80211_STA_INFO_PLINK_STATE: peer link state for the station + *	(see %enum nl80211_plink_state) + * @NL80211_STA_INFO_RX_BITRATE: last unicast data frame rx rate, nested + *	attribute, like NL80211_STA_INFO_TX_BITRATE. + * @NL80211_STA_INFO_BSS_PARAM: current station's view of BSS, nested attribute + *     containing info as possible, see &enum nl80211_sta_bss_param + * @NL80211_STA_INFO_CONNECTED_TIME: time since the station is last connected + * @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update. + * @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32) + * @NL80211_STA_INFO_T_OFFSET: timing offset with respect to this STA (s64) + * @__NL80211_STA_INFO_AFTER_LAST: internal + * @NL80211_STA_INFO_MAX: highest possible station info attribute + */ +enum nl80211_sta_info { +	__NL80211_STA_INFO_INVALID, +	NL80211_STA_INFO_INACTIVE_TIME, +	NL80211_STA_INFO_RX_BYTES, +	NL80211_STA_INFO_TX_BYTES, +	NL80211_STA_INFO_LLID, +	NL80211_STA_INFO_PLID, +	NL80211_STA_INFO_PLINK_STATE, +	NL80211_STA_INFO_SIGNAL, +	NL80211_STA_INFO_TX_BITRATE, +	NL80211_STA_INFO_RX_PACKETS, +	NL80211_STA_INFO_TX_PACKETS, +	NL80211_STA_INFO_TX_RETRIES, +	NL80211_STA_INFO_TX_FAILED, +	NL80211_STA_INFO_SIGNAL_AVG, +	NL80211_STA_INFO_RX_BITRATE, +	NL80211_STA_INFO_BSS_PARAM, +	NL80211_STA_INFO_CONNECTED_TIME, +	NL80211_STA_INFO_STA_FLAGS, +	NL80211_STA_INFO_BEACON_LOSS, +	NL80211_STA_INFO_T_OFFSET, + +	/* keep last */ +	__NL80211_STA_INFO_AFTER_LAST, +	NL80211_STA_INFO_MAX = __NL80211_STA_INFO_AFTER_LAST - 1 +}; + +/** + * enum nl80211_mpath_flags - nl80211 mesh path flags + * + * @NL80211_MPATH_FLAG_ACTIVE: the mesh path is active + * @NL80211_MPATH_FLAG_RESOLVING: the mesh path discovery process is running + * @NL80211_MPATH_FLAG_SN_VALID: the mesh path contains a valid SN + * @NL80211_MPATH_FLAG_FIXED: the mesh path has been manually set + * @NL80211_MPATH_FLAG_RESOLVED: the mesh path discovery process succeeded + */ +enum nl80211_mpath_flags { +	NL80211_MPATH_FLAG_ACTIVE =	1<<0, +	NL80211_MPATH_FLAG_RESOLVING =	1<<1, +	NL80211_MPATH_FLAG_SN_VALID =	1<<2, +	NL80211_MPATH_FLAG_FIXED =	1<<3, +	NL80211_MPATH_FLAG_RESOLVED =	1<<4, +}; + +/** + * enum nl80211_mpath_info - mesh path information + * + * These attribute types are used with %NL80211_ATTR_MPATH_INFO when getting + * information about a mesh path. + * + * @__NL80211_MPATH_INFO_INVALID: attribute number 0 is reserved + * @NL80211_MPATH_INFO_FRAME_QLEN: number of queued frames for this destination + * @NL80211_MPATH_INFO_SN: destination sequence number + * @NL80211_MPATH_INFO_METRIC: metric (cost) of this mesh path + * @NL80211_MPATH_INFO_EXPTIME: expiration time for the path, in msec from now + * @NL80211_MPATH_INFO_FLAGS: mesh path flags, enumerated in + * 	&enum nl80211_mpath_flags; + * @NL80211_MPATH_INFO_DISCOVERY_TIMEOUT: total path discovery timeout, in msec + * @NL80211_MPATH_INFO_DISCOVERY_RETRIES: mesh path discovery retries + * @NL80211_MPATH_INFO_MAX: highest mesh path information attribute number + *	currently defind + * @__NL80211_MPATH_INFO_AFTER_LAST: internal use + */ +enum nl80211_mpath_info { +	__NL80211_MPATH_INFO_INVALID, +	NL80211_MPATH_INFO_FRAME_QLEN, +	NL80211_MPATH_INFO_SN, +	NL80211_MPATH_INFO_METRIC, +	NL80211_MPATH_INFO_EXPTIME, +	NL80211_MPATH_INFO_FLAGS, +	NL80211_MPATH_INFO_DISCOVERY_TIMEOUT, +	NL80211_MPATH_INFO_DISCOVERY_RETRIES, + +	/* keep last */ +	__NL80211_MPATH_INFO_AFTER_LAST, +	NL80211_MPATH_INFO_MAX = __NL80211_MPATH_INFO_AFTER_LAST - 1 +}; + +/** + * enum nl80211_band_attr - band attributes + * @__NL80211_BAND_ATTR_INVALID: attribute number 0 is reserved + * @NL80211_BAND_ATTR_FREQS: supported frequencies in this band, + *	an array of nested frequency attributes + * @NL80211_BAND_ATTR_RATES: supported bitrates in this band, + *	an array of nested bitrate attributes + * @NL80211_BAND_ATTR_HT_MCS_SET: 16-byte attribute containing the MCS set as + *	defined in 802.11n + * @NL80211_BAND_ATTR_HT_CAPA: HT capabilities, as in the HT information IE + * @NL80211_BAND_ATTR_HT_AMPDU_FACTOR: A-MPDU factor, as in 11n + * @NL80211_BAND_ATTR_HT_AMPDU_DENSITY: A-MPDU density, as in 11n + * @NL80211_BAND_ATTR_VHT_MCS_SET: 32-byte attribute containing the MCS set as + *	defined in 802.11ac + * @NL80211_BAND_ATTR_VHT_CAPA: VHT capabilities, as in the HT information IE + * @NL80211_BAND_ATTR_MAX: highest band attribute currently defined + * @__NL80211_BAND_ATTR_AFTER_LAST: internal use + */ +enum nl80211_band_attr { +	__NL80211_BAND_ATTR_INVALID, +	NL80211_BAND_ATTR_FREQS, +	NL80211_BAND_ATTR_RATES, + +	NL80211_BAND_ATTR_HT_MCS_SET, +	NL80211_BAND_ATTR_HT_CAPA, +	NL80211_BAND_ATTR_HT_AMPDU_FACTOR, +	NL80211_BAND_ATTR_HT_AMPDU_DENSITY, + +	NL80211_BAND_ATTR_VHT_MCS_SET, +	NL80211_BAND_ATTR_VHT_CAPA, + +	/* keep last */ +	__NL80211_BAND_ATTR_AFTER_LAST, +	NL80211_BAND_ATTR_MAX = __NL80211_BAND_ATTR_AFTER_LAST - 1 +}; + +#define NL80211_BAND_ATTR_HT_CAPA NL80211_BAND_ATTR_HT_CAPA + +/** + * enum nl80211_frequency_attr - frequency attributes + * @__NL80211_FREQUENCY_ATTR_INVALID: attribute number 0 is reserved + * @NL80211_FREQUENCY_ATTR_FREQ: Frequency in MHz + * @NL80211_FREQUENCY_ATTR_DISABLED: Channel is disabled in current + *	regulatory domain. + * @NL80211_FREQUENCY_ATTR_PASSIVE_SCAN: Only passive scanning is + *	permitted on this channel in current regulatory domain. + * @NL80211_FREQUENCY_ATTR_NO_IBSS: IBSS networks are not permitted + *	on this channel in current regulatory domain. + * @NL80211_FREQUENCY_ATTR_RADAR: Radar detection is mandatory + *	on this channel in current regulatory domain. + * @NL80211_FREQUENCY_ATTR_MAX_TX_POWER: Maximum transmission power in mBm + *	(100 * dBm). + * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number + *	currently defined + * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use + */ +enum nl80211_frequency_attr { +	__NL80211_FREQUENCY_ATTR_INVALID, +	NL80211_FREQUENCY_ATTR_FREQ, +	NL80211_FREQUENCY_ATTR_DISABLED, +	NL80211_FREQUENCY_ATTR_PASSIVE_SCAN, +	NL80211_FREQUENCY_ATTR_NO_IBSS, +	NL80211_FREQUENCY_ATTR_RADAR, +	NL80211_FREQUENCY_ATTR_MAX_TX_POWER, + +	/* keep last */ +	__NL80211_FREQUENCY_ATTR_AFTER_LAST, +	NL80211_FREQUENCY_ATTR_MAX = __NL80211_FREQUENCY_ATTR_AFTER_LAST - 1 +}; + +#define NL80211_FREQUENCY_ATTR_MAX_TX_POWER NL80211_FREQUENCY_ATTR_MAX_TX_POWER + +/** + * enum nl80211_bitrate_attr - bitrate attributes + * @__NL80211_BITRATE_ATTR_INVALID: attribute number 0 is reserved + * @NL80211_BITRATE_ATTR_RATE: Bitrate in units of 100 kbps + * @NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE: Short preamble supported + *	in 2.4 GHz band. + * @NL80211_BITRATE_ATTR_MAX: highest bitrate attribute number + *	currently defined + * @__NL80211_BITRATE_ATTR_AFTER_LAST: internal use + */ +enum nl80211_bitrate_attr { +	__NL80211_BITRATE_ATTR_INVALID, +	NL80211_BITRATE_ATTR_RATE, +	NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE, + +	/* keep last */ +	__NL80211_BITRATE_ATTR_AFTER_LAST, +	NL80211_BITRATE_ATTR_MAX = __NL80211_BITRATE_ATTR_AFTER_LAST - 1 +}; + +/** + * enum nl80211_initiator - Indicates the initiator of a reg domain request + * @NL80211_REGDOM_SET_BY_CORE: Core queried CRDA for a dynamic world + * 	regulatory domain. + * @NL80211_REGDOM_SET_BY_USER: User asked the wireless core to set the + * 	regulatory domain. + * @NL80211_REGDOM_SET_BY_DRIVER: a wireless drivers has hinted to the + * 	wireless core it thinks its knows the regulatory domain we should be in. + * @NL80211_REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an + * 	802.11 country information element with regulatory information it + * 	thinks we should consider. cfg80211 only processes the country + *	code from the IE, and relies on the regulatory domain information + *	structure passed by userspace (CRDA) from our wireless-regdb. + *	If a channel is enabled but the country code indicates it should + *	be disabled we disable the channel and re-enable it upon disassociation. + */ +enum nl80211_reg_initiator { +	NL80211_REGDOM_SET_BY_CORE, +	NL80211_REGDOM_SET_BY_USER, +	NL80211_REGDOM_SET_BY_DRIVER, +	NL80211_REGDOM_SET_BY_COUNTRY_IE, +}; + +/** + * enum nl80211_reg_type - specifies the type of regulatory domain + * @NL80211_REGDOM_TYPE_COUNTRY: the regulatory domain set is one that pertains + *	to a specific country. When this is set you can count on the + *	ISO / IEC 3166 alpha2 country code being valid. + * @NL80211_REGDOM_TYPE_WORLD: the regulatory set domain is the world regulatory + * 	domain. + * @NL80211_REGDOM_TYPE_CUSTOM_WORLD: the regulatory domain set is a custom + * 	driver specific world regulatory domain. These do not apply system-wide + * 	and are only applicable to the individual devices which have requested + * 	them to be applied. + * @NL80211_REGDOM_TYPE_INTERSECTION: the regulatory domain set is the product + *	of an intersection between two regulatory domains -- the previously + *	set regulatory domain on the system and the last accepted regulatory + *	domain request to be processed. + */ +enum nl80211_reg_type { +	NL80211_REGDOM_TYPE_COUNTRY, +	NL80211_REGDOM_TYPE_WORLD, +	NL80211_REGDOM_TYPE_CUSTOM_WORLD, +	NL80211_REGDOM_TYPE_INTERSECTION, +}; + +/** + * enum nl80211_reg_rule_attr - regulatory rule attributes + * @__NL80211_REG_RULE_ATTR_INVALID: attribute number 0 is reserved + * @NL80211_ATTR_REG_RULE_FLAGS: a set of flags which specify additional + * 	considerations for a given frequency range. These are the + * 	&enum nl80211_reg_rule_flags. + * @NL80211_ATTR_FREQ_RANGE_START: starting frequencry for the regulatory + * 	rule in KHz. This is not a center of frequency but an actual regulatory + * 	band edge. + * @NL80211_ATTR_FREQ_RANGE_END: ending frequency for the regulatory rule + * 	in KHz. This is not a center a frequency but an actual regulatory + * 	band edge. + * @NL80211_ATTR_FREQ_RANGE_MAX_BW: maximum allowed bandwidth for this + * 	frequency range, in KHz. + * @NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN: the maximum allowed antenna gain + * 	for a given frequency range. The value is in mBi (100 * dBi). + * 	If you don't have one then don't send this. + * @NL80211_ATTR_POWER_RULE_MAX_EIRP: the maximum allowed EIRP for + * 	a given frequency range. The value is in mBm (100 * dBm). + * @NL80211_REG_RULE_ATTR_MAX: highest regulatory rule attribute number + *	currently defined + * @__NL80211_REG_RULE_ATTR_AFTER_LAST: internal use + */ +enum nl80211_reg_rule_attr { +	__NL80211_REG_RULE_ATTR_INVALID, +	NL80211_ATTR_REG_RULE_FLAGS, + +	NL80211_ATTR_FREQ_RANGE_START, +	NL80211_ATTR_FREQ_RANGE_END, +	NL80211_ATTR_FREQ_RANGE_MAX_BW, + +	NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN, +	NL80211_ATTR_POWER_RULE_MAX_EIRP, + +	/* keep last */ +	__NL80211_REG_RULE_ATTR_AFTER_LAST, +	NL80211_REG_RULE_ATTR_MAX = __NL80211_REG_RULE_ATTR_AFTER_LAST - 1 +}; + +/** + * enum nl80211_sched_scan_match_attr - scheduled scan match attributes + * @__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID: attribute number 0 is reserved + * @NL80211_SCHED_SCAN_MATCH_ATTR_SSID: SSID to be used for matching, + * only report BSS with matching SSID. + * @NL80211_SCHED_SCAN_MATCH_ATTR_RSSI: RSSI threshold (in dBm) for reporting a + *	BSS in scan results. Filtering is turned off if not specified. + * @NL80211_SCHED_SCAN_MATCH_ATTR_MAX: highest scheduled scan filter + *	attribute number currently defined + * @__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: internal use + */ +enum nl80211_sched_scan_match_attr { +	__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID, + +	NL80211_SCHED_SCAN_MATCH_ATTR_SSID, +	NL80211_SCHED_SCAN_MATCH_ATTR_RSSI, + +	/* keep last */ +	__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST, +	NL80211_SCHED_SCAN_MATCH_ATTR_MAX = +		__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST - 1 +}; + +/* only for backward compatibility */ +#define NL80211_ATTR_SCHED_SCAN_MATCH_SSID NL80211_SCHED_SCAN_MATCH_ATTR_SSID + +/** + * enum nl80211_reg_rule_flags - regulatory rule flags + * + * @NL80211_RRF_NO_OFDM: OFDM modulation not allowed + * @NL80211_RRF_NO_CCK: CCK modulation not allowed + * @NL80211_RRF_NO_INDOOR: indoor operation not allowed + * @NL80211_RRF_NO_OUTDOOR: outdoor operation not allowed + * @NL80211_RRF_DFS: DFS support is required to be used + * @NL80211_RRF_PTP_ONLY: this is only for Point To Point links + * @NL80211_RRF_PTMP_ONLY: this is only for Point To Multi Point links + * @NL80211_RRF_PASSIVE_SCAN: passive scan is required + * @NL80211_RRF_NO_IBSS: no IBSS is allowed + */ +enum nl80211_reg_rule_flags { +	NL80211_RRF_NO_OFDM		= 1<<0, +	NL80211_RRF_NO_CCK		= 1<<1, +	NL80211_RRF_NO_INDOOR		= 1<<2, +	NL80211_RRF_NO_OUTDOOR		= 1<<3, +	NL80211_RRF_DFS			= 1<<4, +	NL80211_RRF_PTP_ONLY		= 1<<5, +	NL80211_RRF_PTMP_ONLY		= 1<<6, +	NL80211_RRF_PASSIVE_SCAN	= 1<<7, +	NL80211_RRF_NO_IBSS		= 1<<8, +}; + +/** + * enum nl80211_dfs_regions - regulatory DFS regions + * + * @NL80211_DFS_UNSET: Country has no DFS master region specified + * @NL80211_DFS_FCC: Country follows DFS master rules from FCC + * @NL80211_DFS_ETSI: Country follows DFS master rules from ETSI + * @NL80211_DFS_JP: Country follows DFS master rules from JP/MKK/Telec + */ +enum nl80211_dfs_regions { +	NL80211_DFS_UNSET	= 0, +	NL80211_DFS_FCC		= 1, +	NL80211_DFS_ETSI	= 2, +	NL80211_DFS_JP		= 3, +}; + +/** + * enum nl80211_user_reg_hint_type - type of user regulatory hint + * + * @NL80211_USER_REG_HINT_USER: a user sent the hint. This is always + *	assumed if the attribute is not set. + * @NL80211_USER_REG_HINT_CELL_BASE: the hint comes from a cellular + *	base station. Device drivers that have been tested to work + *	properly to support this type of hint can enable these hints + *	by setting the NL80211_FEATURE_CELL_BASE_REG_HINTS feature + *	capability on the struct wiphy. The wireless core will + *	ignore all cell base station hints until at least one device + *	present has been registered with the wireless core that + *	has listed NL80211_FEATURE_CELL_BASE_REG_HINTS as a + *	supported feature. + */ +enum nl80211_user_reg_hint_type { +	NL80211_USER_REG_HINT_USER	= 0, +	NL80211_USER_REG_HINT_CELL_BASE = 1, +}; + +/** + * enum nl80211_survey_info - survey information + * + * These attribute types are used with %NL80211_ATTR_SURVEY_INFO + * when getting information about a survey. + * + * @__NL80211_SURVEY_INFO_INVALID: attribute number 0 is reserved + * @NL80211_SURVEY_INFO_FREQUENCY: center frequency of channel + * @NL80211_SURVEY_INFO_NOISE: noise level of channel (u8, dBm) + * @NL80211_SURVEY_INFO_IN_USE: channel is currently being used + * @NL80211_SURVEY_INFO_CHANNEL_TIME: amount of time (in ms) that the radio + *	spent on this channel + * @NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY: amount of the time the primary + *	channel was sensed busy (either due to activity or energy detect) + * @NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY: amount of time the extension + *	channel was sensed busy + * @NL80211_SURVEY_INFO_CHANNEL_TIME_RX: amount of time the radio spent + *	receiving data + * @NL80211_SURVEY_INFO_CHANNEL_TIME_TX: amount of time the radio spent + *	transmitting data + * @NL80211_SURVEY_INFO_MAX: highest survey info attribute number + *	currently defined + * @__NL80211_SURVEY_INFO_AFTER_LAST: internal use + */ +enum nl80211_survey_info { +	__NL80211_SURVEY_INFO_INVALID, +	NL80211_SURVEY_INFO_FREQUENCY, +	NL80211_SURVEY_INFO_NOISE, +	NL80211_SURVEY_INFO_IN_USE, +	NL80211_SURVEY_INFO_CHANNEL_TIME, +	NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY, +	NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY, +	NL80211_SURVEY_INFO_CHANNEL_TIME_RX, +	NL80211_SURVEY_INFO_CHANNEL_TIME_TX, + +	/* keep last */ +	__NL80211_SURVEY_INFO_AFTER_LAST, +	NL80211_SURVEY_INFO_MAX = __NL80211_SURVEY_INFO_AFTER_LAST - 1 +}; + +/** + * enum nl80211_mntr_flags - monitor configuration flags + * + * Monitor configuration flags. + * + * @__NL80211_MNTR_FLAG_INVALID: reserved + * + * @NL80211_MNTR_FLAG_FCSFAIL: pass frames with bad FCS + * @NL80211_MNTR_FLAG_PLCPFAIL: pass frames with bad PLCP + * @NL80211_MNTR_FLAG_CONTROL: pass control frames + * @NL80211_MNTR_FLAG_OTHER_BSS: disable BSSID filtering + * @NL80211_MNTR_FLAG_COOK_FRAMES: report frames after processing. + *	overrides all other flags. + * + * @__NL80211_MNTR_FLAG_AFTER_LAST: internal use + * @NL80211_MNTR_FLAG_MAX: highest possible monitor flag + */ +enum nl80211_mntr_flags { +	__NL80211_MNTR_FLAG_INVALID, +	NL80211_MNTR_FLAG_FCSFAIL, +	NL80211_MNTR_FLAG_PLCPFAIL, +	NL80211_MNTR_FLAG_CONTROL, +	NL80211_MNTR_FLAG_OTHER_BSS, +	NL80211_MNTR_FLAG_COOK_FRAMES, + +	/* keep last */ +	__NL80211_MNTR_FLAG_AFTER_LAST, +	NL80211_MNTR_FLAG_MAX = __NL80211_MNTR_FLAG_AFTER_LAST - 1 +}; + +/** + * enum nl80211_meshconf_params - mesh configuration parameters + * + * Mesh configuration parameters. These can be changed while the mesh is + * active. + * + * @__NL80211_MESHCONF_INVALID: internal use + * + * @NL80211_MESHCONF_RETRY_TIMEOUT: specifies the initial retry timeout in + *	millisecond units, used by the Peer Link Open message + * + * @NL80211_MESHCONF_CONFIRM_TIMEOUT: specifies the initial confirm timeout, in + *	millisecond units, used by the peer link management to close a peer link + * + * @NL80211_MESHCONF_HOLDING_TIMEOUT: specifies the holding timeout, in + *	millisecond units + * + * @NL80211_MESHCONF_MAX_PEER_LINKS: maximum number of peer links allowed + *	on this mesh interface + * + * @NL80211_MESHCONF_MAX_RETRIES: specifies the maximum number of peer link + *	open retries that can be sent to establish a new peer link instance in a + *	mesh + * + * @NL80211_MESHCONF_TTL: specifies the value of TTL field set at a source mesh + *	point. + * + * @NL80211_MESHCONF_AUTO_OPEN_PLINKS: whether we should automatically + *	open peer links when we detect compatible mesh peers. + * + * @NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES: the number of action frames + *	containing a PREQ that an MP can send to a particular destination (path + *	target) + * + * @NL80211_MESHCONF_PATH_REFRESH_TIME: how frequently to refresh mesh paths + *	(in milliseconds) + * + * @NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT: minimum length of time to wait + *	until giving up on a path discovery (in milliseconds) + * + * @NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT: The time (in TUs) for which mesh + *	points receiving a PREQ shall consider the forwarding information from + *	the root to be valid. (TU = time unit) + * + * @NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL: The minimum interval of time (in + *	TUs) during which an MP can send only one action frame containing a PREQ + *	reference element + * + * @NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: The interval of time (in TUs) + *	that it takes for an HWMP information element to propagate across the + *	mesh + * + * @NL80211_MESHCONF_HWMP_ROOTMODE: whether root mode is enabled or not + * + * @NL80211_MESHCONF_ELEMENT_TTL: specifies the value of TTL field set at a + *	source mesh point for path selection elements. + * + * @NL80211_MESHCONF_HWMP_RANN_INTERVAL:  The interval of time (in TUs) between + *	root announcements are transmitted. + * + * @NL80211_MESHCONF_GATE_ANNOUNCEMENTS: Advertise that this mesh station has + *	access to a broader network beyond the MBSS.  This is done via Root + *	Announcement frames. + * + * @NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL: The minimum interval of time (in + *	TUs) during which a mesh STA can send only one Action frame containing a + *	PERR element. + * + * @NL80211_MESHCONF_FORWARDING: set Mesh STA as forwarding or non-forwarding + *	or forwarding entity (default is TRUE - forwarding entity) + * + * @NL80211_MESHCONF_RSSI_THRESHOLD: RSSI threshold in dBm. This specifies the + *	threshold for average signal strength of candidate station to establish + *	a peer link. + * + * @NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR: maximum number of neighbors + *	to synchronize to for 11s default synchronization method + *	(see 11C.12.2.2) + * + * @NL80211_MESHCONF_HT_OPMODE: set mesh HT protection mode. + * + * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute + * + * @NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT: The time (in TUs) for + *	which mesh STAs receiving a proactive PREQ shall consider the forwarding + *	information to the root mesh STA to be valid. + * + * @NL80211_MESHCONF_HWMP_ROOT_INTERVAL: The interval of time (in TUs) between + *	proactive PREQs are transmitted. + * + * @NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL: The minimum interval of time + *	(in TUs) during which a mesh STA can send only one Action frame + *	containing a PREQ element for root path confirmation. + * + * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use + */ +enum nl80211_meshconf_params { +	__NL80211_MESHCONF_INVALID, +	NL80211_MESHCONF_RETRY_TIMEOUT, +	NL80211_MESHCONF_CONFIRM_TIMEOUT, +	NL80211_MESHCONF_HOLDING_TIMEOUT, +	NL80211_MESHCONF_MAX_PEER_LINKS, +	NL80211_MESHCONF_MAX_RETRIES, +	NL80211_MESHCONF_TTL, +	NL80211_MESHCONF_AUTO_OPEN_PLINKS, +	NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES, +	NL80211_MESHCONF_PATH_REFRESH_TIME, +	NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT, +	NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT, +	NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, +	NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME, +	NL80211_MESHCONF_HWMP_ROOTMODE, +	NL80211_MESHCONF_ELEMENT_TTL, +	NL80211_MESHCONF_HWMP_RANN_INTERVAL, +	NL80211_MESHCONF_GATE_ANNOUNCEMENTS, +	NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL, +	NL80211_MESHCONF_FORWARDING, +	NL80211_MESHCONF_RSSI_THRESHOLD, +	NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR, +	NL80211_MESHCONF_HT_OPMODE, +	NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT, +	NL80211_MESHCONF_HWMP_ROOT_INTERVAL, +	NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL, + +	/* keep last */ +	__NL80211_MESHCONF_ATTR_AFTER_LAST, +	NL80211_MESHCONF_ATTR_MAX = __NL80211_MESHCONF_ATTR_AFTER_LAST - 1 +}; + +/** + * enum nl80211_mesh_setup_params - mesh setup parameters + * + * Mesh setup parameters.  These are used to start/join a mesh and cannot be + * changed while the mesh is active. + * + * @__NL80211_MESH_SETUP_INVALID: Internal use + * + * @NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL: Enable this option to use a + *	vendor specific path selection algorithm or disable it to use the + *	default HWMP. + * + * @NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC: Enable this option to use a + *	vendor specific path metric or disable it to use the default Airtime + *	metric. + * + * @NL80211_MESH_SETUP_IE: Information elements for this mesh, for instance, a + *	robust security network ie, or a vendor specific information element + *	that vendors will use to identify the path selection methods and + *	metrics in use. + * + * @NL80211_MESH_SETUP_USERSPACE_AUTH: Enable this option if an authentication + *	daemon will be authenticating mesh candidates. + * + * @NL80211_MESH_SETUP_USERSPACE_AMPE: Enable this option if an authentication + *	daemon will be securing peer link frames.  AMPE is a secured version of + *	Mesh Peering Management (MPM) and is implemented with the assistance of + *	a userspace daemon.  When this flag is set, the kernel will send peer + *	management frames to a userspace daemon that will implement AMPE + *	functionality (security capabilities selection, key confirmation, and + *	key management).  When the flag is unset (default), the kernel can + *	autonomously complete (unsecured) mesh peering without the need of a + *	userspace daemon. + * + * @NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC: Enable this option to use a + *	vendor specific synchronization method or disable it to use the default + *	neighbor offset synchronization + * + * @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number + * + * @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use + */ +enum nl80211_mesh_setup_params { +	__NL80211_MESH_SETUP_INVALID, +	NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL, +	NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC, +	NL80211_MESH_SETUP_IE, +	NL80211_MESH_SETUP_USERSPACE_AUTH, +	NL80211_MESH_SETUP_USERSPACE_AMPE, +	NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC, + +	/* keep last */ +	__NL80211_MESH_SETUP_ATTR_AFTER_LAST, +	NL80211_MESH_SETUP_ATTR_MAX = __NL80211_MESH_SETUP_ATTR_AFTER_LAST - 1 +}; + +/** + * enum nl80211_txq_attr - TX queue parameter attributes + * @__NL80211_TXQ_ATTR_INVALID: Attribute number 0 is reserved + * @NL80211_TXQ_ATTR_AC: AC identifier (NL80211_AC_*) + * @NL80211_TXQ_ATTR_TXOP: Maximum burst time in units of 32 usecs, 0 meaning + *	disabled + * @NL80211_TXQ_ATTR_CWMIN: Minimum contention window [a value of the form + *	2^n-1 in the range 1..32767] + * @NL80211_TXQ_ATTR_CWMAX: Maximum contention window [a value of the form + *	2^n-1 in the range 1..32767] + * @NL80211_TXQ_ATTR_AIFS: Arbitration interframe space [0..255] + * @__NL80211_TXQ_ATTR_AFTER_LAST: Internal + * @NL80211_TXQ_ATTR_MAX: Maximum TXQ attribute number + */ +enum nl80211_txq_attr { +	__NL80211_TXQ_ATTR_INVALID, +	NL80211_TXQ_ATTR_AC, +	NL80211_TXQ_ATTR_TXOP, +	NL80211_TXQ_ATTR_CWMIN, +	NL80211_TXQ_ATTR_CWMAX, +	NL80211_TXQ_ATTR_AIFS, + +	/* keep last */ +	__NL80211_TXQ_ATTR_AFTER_LAST, +	NL80211_TXQ_ATTR_MAX = __NL80211_TXQ_ATTR_AFTER_LAST - 1 +}; + +enum nl80211_ac { +	NL80211_AC_VO, +	NL80211_AC_VI, +	NL80211_AC_BE, +	NL80211_AC_BK, +	NL80211_NUM_ACS +}; + +/* backward compat */ +#define NL80211_TXQ_ATTR_QUEUE	NL80211_TXQ_ATTR_AC +#define NL80211_TXQ_Q_VO	NL80211_AC_VO +#define NL80211_TXQ_Q_VI	NL80211_AC_VI +#define NL80211_TXQ_Q_BE	NL80211_AC_BE +#define NL80211_TXQ_Q_BK	NL80211_AC_BK + +enum nl80211_channel_type { +	NL80211_CHAN_NO_HT, +	NL80211_CHAN_HT20, +	NL80211_CHAN_HT40MINUS, +	NL80211_CHAN_HT40PLUS +}; + +/** + * enum nl80211_bss - netlink attributes for a BSS + * + * @__NL80211_BSS_INVALID: invalid + * @NL80211_BSS_BSSID: BSSID of the BSS (6 octets) + * @NL80211_BSS_FREQUENCY: frequency in MHz (u32) + * @NL80211_BSS_TSF: TSF of the received probe response/beacon (u64) + * @NL80211_BSS_BEACON_INTERVAL: beacon interval of the (I)BSS (u16) + * @NL80211_BSS_CAPABILITY: capability field (CPU order, u16) + * @NL80211_BSS_INFORMATION_ELEMENTS: binary attribute containing the + *	raw information elements from the probe response/beacon (bin); + *	if the %NL80211_BSS_BEACON_IES attribute is present, the IEs here are + *	from a Probe Response frame; otherwise they are from a Beacon frame. + *	However, if the driver does not indicate the source of the IEs, these + *	IEs may be from either frame subtype. + * @NL80211_BSS_SIGNAL_MBM: signal strength of probe response/beacon + *	in mBm (100 * dBm) (s32) + * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon + *	in unspecified units, scaled to 0..100 (u8) + * @NL80211_BSS_STATUS: status, if this BSS is "used" + * @NL80211_BSS_SEEN_MS_AGO: age of this BSS entry in ms + * @NL80211_BSS_BEACON_IES: binary attribute containing the raw information + *	elements from a Beacon frame (bin); not present if no Beacon frame has + *	yet been received + * @__NL80211_BSS_AFTER_LAST: internal + * @NL80211_BSS_MAX: highest BSS attribute + */ +enum nl80211_bss { +	__NL80211_BSS_INVALID, +	NL80211_BSS_BSSID, +	NL80211_BSS_FREQUENCY, +	NL80211_BSS_TSF, +	NL80211_BSS_BEACON_INTERVAL, +	NL80211_BSS_CAPABILITY, +	NL80211_BSS_INFORMATION_ELEMENTS, +	NL80211_BSS_SIGNAL_MBM, +	NL80211_BSS_SIGNAL_UNSPEC, +	NL80211_BSS_STATUS, +	NL80211_BSS_SEEN_MS_AGO, +	NL80211_BSS_BEACON_IES, + +	/* keep last */ +	__NL80211_BSS_AFTER_LAST, +	NL80211_BSS_MAX = __NL80211_BSS_AFTER_LAST - 1 +}; + +/** + * enum nl80211_bss_status - BSS "status" + * @NL80211_BSS_STATUS_AUTHENTICATED: Authenticated with this BSS. + * @NL80211_BSS_STATUS_ASSOCIATED: Associated with this BSS. + * @NL80211_BSS_STATUS_IBSS_JOINED: Joined to this IBSS. + * + * The BSS status is a BSS attribute in scan dumps, which + * indicates the status the interface has wrt. this BSS. + */ +enum nl80211_bss_status { +	NL80211_BSS_STATUS_AUTHENTICATED, +	NL80211_BSS_STATUS_ASSOCIATED, +	NL80211_BSS_STATUS_IBSS_JOINED, +}; + +/** + * enum nl80211_auth_type - AuthenticationType + * + * @NL80211_AUTHTYPE_OPEN_SYSTEM: Open System authentication + * @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only) + * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r) + * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP) + * @__NL80211_AUTHTYPE_NUM: internal + * @NL80211_AUTHTYPE_MAX: maximum valid auth algorithm + * @NL80211_AUTHTYPE_AUTOMATIC: determine automatically (if necessary by + *	trying multiple times); this is invalid in netlink -- leave out + *	the attribute for this on CONNECT commands. + */ +enum nl80211_auth_type { +	NL80211_AUTHTYPE_OPEN_SYSTEM, +	NL80211_AUTHTYPE_SHARED_KEY, +	NL80211_AUTHTYPE_FT, +	NL80211_AUTHTYPE_NETWORK_EAP, + +	/* keep last */ +	__NL80211_AUTHTYPE_NUM, +	NL80211_AUTHTYPE_MAX = __NL80211_AUTHTYPE_NUM - 1, +	NL80211_AUTHTYPE_AUTOMATIC +}; + +/** + * enum nl80211_key_type - Key Type + * @NL80211_KEYTYPE_GROUP: Group (broadcast/multicast) key + * @NL80211_KEYTYPE_PAIRWISE: Pairwise (unicast/individual) key + * @NL80211_KEYTYPE_PEERKEY: PeerKey (DLS) + * @NUM_NL80211_KEYTYPES: number of defined key types + */ +enum nl80211_key_type { +	NL80211_KEYTYPE_GROUP, +	NL80211_KEYTYPE_PAIRWISE, +	NL80211_KEYTYPE_PEERKEY, + +	NUM_NL80211_KEYTYPES +}; + +/** + * enum nl80211_mfp - Management frame protection state + * @NL80211_MFP_NO: Management frame protection not used + * @NL80211_MFP_REQUIRED: Management frame protection required + */ +enum nl80211_mfp { +	NL80211_MFP_NO, +	NL80211_MFP_REQUIRED, +}; + +enum nl80211_wpa_versions { +	NL80211_WPA_VERSION_1 = 1 << 0, +	NL80211_WPA_VERSION_2 = 1 << 1, +}; + +/** + * enum nl80211_key_default_types - key default types + * @__NL80211_KEY_DEFAULT_TYPE_INVALID: invalid + * @NL80211_KEY_DEFAULT_TYPE_UNICAST: key should be used as default + *	unicast key + * @NL80211_KEY_DEFAULT_TYPE_MULTICAST: key should be used as default + *	multicast key + * @NUM_NL80211_KEY_DEFAULT_TYPES: number of default types + */ +enum nl80211_key_default_types { +	__NL80211_KEY_DEFAULT_TYPE_INVALID, +	NL80211_KEY_DEFAULT_TYPE_UNICAST, +	NL80211_KEY_DEFAULT_TYPE_MULTICAST, + +	NUM_NL80211_KEY_DEFAULT_TYPES +}; + +/** + * enum nl80211_key_attributes - key attributes + * @__NL80211_KEY_INVALID: invalid + * @NL80211_KEY_DATA: (temporal) key data; for TKIP this consists of + *	16 bytes encryption key followed by 8 bytes each for TX and RX MIC + *	keys + * @NL80211_KEY_IDX: key ID (u8, 0-3) + * @NL80211_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11 + *	section 7.3.2.25.1, e.g. 0x000FAC04) + * @NL80211_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and + *	CCMP keys, each six bytes in little endian + * @NL80211_KEY_DEFAULT: flag indicating default key + * @NL80211_KEY_DEFAULT_MGMT: flag indicating default management key + * @NL80211_KEY_TYPE: the key type from enum nl80211_key_type, if not + *	specified the default depends on whether a MAC address was + *	given with the command using the key or not (u32) + * @NL80211_KEY_DEFAULT_TYPES: A nested attribute containing flags + *	attributes, specifying what a key should be set as default as. + *	See &enum nl80211_key_default_types. + * @__NL80211_KEY_AFTER_LAST: internal + * @NL80211_KEY_MAX: highest key attribute + */ +enum nl80211_key_attributes { +	__NL80211_KEY_INVALID, +	NL80211_KEY_DATA, +	NL80211_KEY_IDX, +	NL80211_KEY_CIPHER, +	NL80211_KEY_SEQ, +	NL80211_KEY_DEFAULT, +	NL80211_KEY_DEFAULT_MGMT, +	NL80211_KEY_TYPE, +	NL80211_KEY_DEFAULT_TYPES, + +	/* keep last */ +	__NL80211_KEY_AFTER_LAST, +	NL80211_KEY_MAX = __NL80211_KEY_AFTER_LAST - 1 +}; + +/** + * enum nl80211_tx_rate_attributes - TX rate set attributes + * @__NL80211_TXRATE_INVALID: invalid + * @NL80211_TXRATE_LEGACY: Legacy (non-MCS) rates allowed for TX rate selection + *	in an array of rates as defined in IEEE 802.11 7.3.2.2 (u8 values with + *	1 = 500 kbps) but without the IE length restriction (at most + *	%NL80211_MAX_SUPP_RATES in a single array). + * @NL80211_TXRATE_MCS: HT (MCS) rates allowed for TX rate selection + *	in an array of MCS numbers. + * @__NL80211_TXRATE_AFTER_LAST: internal + * @NL80211_TXRATE_MAX: highest TX rate attribute + */ +enum nl80211_tx_rate_attributes { +	__NL80211_TXRATE_INVALID, +	NL80211_TXRATE_LEGACY, +	NL80211_TXRATE_MCS, + +	/* keep last */ +	__NL80211_TXRATE_AFTER_LAST, +	NL80211_TXRATE_MAX = __NL80211_TXRATE_AFTER_LAST - 1 +}; + +/** + * enum nl80211_band - Frequency band + * @NL80211_BAND_2GHZ: 2.4 GHz ISM band + * @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz) + * @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 64.80 GHz) + */ +enum nl80211_band { +	NL80211_BAND_2GHZ, +	NL80211_BAND_5GHZ, +	NL80211_BAND_60GHZ, +}; + +/** + * enum nl80211_ps_state - powersave state + * @NL80211_PS_DISABLED: powersave is disabled + * @NL80211_PS_ENABLED: powersave is enabled + */ +enum nl80211_ps_state { +	NL80211_PS_DISABLED, +	NL80211_PS_ENABLED, +}; + +/** + * enum nl80211_attr_cqm - connection quality monitor attributes + * @__NL80211_ATTR_CQM_INVALID: invalid + * @NL80211_ATTR_CQM_RSSI_THOLD: RSSI threshold in dBm. This value specifies + *	the threshold for the RSSI level at which an event will be sent. Zero + *	to disable. + * @NL80211_ATTR_CQM_RSSI_HYST: RSSI hysteresis in dBm. This value specifies + *	the minimum amount the RSSI level must change after an event before a + *	new event may be issued (to reduce effects of RSSI oscillation). + * @NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT: RSSI threshold event + * @NL80211_ATTR_CQM_PKT_LOSS_EVENT: a u32 value indicating that this many + *	consecutive packets were not acknowledged by the peer + * @NL80211_ATTR_CQM_TXE_RATE: TX error rate in %. Minimum % of TX failures + *	during the given %NL80211_ATTR_CQM_TXE_INTVL before an + *	%NL80211_CMD_NOTIFY_CQM with reported %NL80211_ATTR_CQM_TXE_RATE and + *	%NL80211_ATTR_CQM_TXE_PKTS is generated. + * @NL80211_ATTR_CQM_TXE_PKTS: number of attempted packets in a given + *	%NL80211_ATTR_CQM_TXE_INTVL before %NL80211_ATTR_CQM_TXE_RATE is + *	checked. + * @NL80211_ATTR_CQM_TXE_INTVL: interval in seconds. Specifies the periodic + *	interval in which %NL80211_ATTR_CQM_TXE_PKTS and + *	%NL80211_ATTR_CQM_TXE_RATE must be satisfied before generating an + *	%NL80211_CMD_NOTIFY_CQM. Set to 0 to turn off TX error reporting. + * @__NL80211_ATTR_CQM_AFTER_LAST: internal + * @NL80211_ATTR_CQM_MAX: highest key attribute + */ +enum nl80211_attr_cqm { +	__NL80211_ATTR_CQM_INVALID, +	NL80211_ATTR_CQM_RSSI_THOLD, +	NL80211_ATTR_CQM_RSSI_HYST, +	NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT, +	NL80211_ATTR_CQM_PKT_LOSS_EVENT, +	NL80211_ATTR_CQM_TXE_RATE, +	NL80211_ATTR_CQM_TXE_PKTS, +	NL80211_ATTR_CQM_TXE_INTVL, + +	/* keep last */ +	__NL80211_ATTR_CQM_AFTER_LAST, +	NL80211_ATTR_CQM_MAX = __NL80211_ATTR_CQM_AFTER_LAST - 1 +}; + +/** + * enum nl80211_cqm_rssi_threshold_event - RSSI threshold event + * @NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW: The RSSI level is lower than the + *      configured threshold + * @NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH: The RSSI is higher than the + *      configured threshold + * @NL80211_CQM_RSSI_BEACON_LOSS_EVENT: The device experienced beacon loss. + *	(Note that deauth/disassoc will still follow if the AP is not + *	available. This event might get used as roaming event, etc.) + */ +enum nl80211_cqm_rssi_threshold_event { +	NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW, +	NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH, +	NL80211_CQM_RSSI_BEACON_LOSS_EVENT, +}; + + +/** + * enum nl80211_tx_power_setting - TX power adjustment + * @NL80211_TX_POWER_AUTOMATIC: automatically determine transmit power + * @NL80211_TX_POWER_LIMITED: limit TX power by the mBm parameter + * @NL80211_TX_POWER_FIXED: fix TX power to the mBm parameter + */ +enum nl80211_tx_power_setting { +	NL80211_TX_POWER_AUTOMATIC, +	NL80211_TX_POWER_LIMITED, +	NL80211_TX_POWER_FIXED, +}; + +/** + * enum nl80211_wowlan_packet_pattern_attr - WoWLAN packet pattern attribute + * @__NL80211_WOWLAN_PKTPAT_INVALID: invalid number for nested attribute + * @NL80211_WOWLAN_PKTPAT_PATTERN: the pattern, values where the mask has + *	a zero bit are ignored + * @NL80211_WOWLAN_PKTPAT_MASK: pattern mask, must be long enough to have + *	a bit for each byte in the pattern. The lowest-order bit corresponds + *	to the first byte of the pattern, but the bytes of the pattern are + *	in a little-endian-like format, i.e. the 9th byte of the pattern + *	corresponds to the lowest-order bit in the second byte of the mask. + *	For example: The match 00:xx:00:00:xx:00:00:00:00:xx:xx:xx (where + *	xx indicates "don't care") would be represented by a pattern of + *	twelve zero bytes, and a mask of "0xed,0x07". + *	Note that the pattern matching is done as though frames were not + *	802.11 frames but 802.3 frames, i.e. the frame is fully unpacked + *	first (including SNAP header unpacking) and then matched. + * @NUM_NL80211_WOWLAN_PKTPAT: number of attributes + * @MAX_NL80211_WOWLAN_PKTPAT: max attribute number + */ +enum nl80211_wowlan_packet_pattern_attr { +	__NL80211_WOWLAN_PKTPAT_INVALID, +	NL80211_WOWLAN_PKTPAT_MASK, +	NL80211_WOWLAN_PKTPAT_PATTERN, + +	NUM_NL80211_WOWLAN_PKTPAT, +	MAX_NL80211_WOWLAN_PKTPAT = NUM_NL80211_WOWLAN_PKTPAT - 1, +}; + +/** + * struct nl80211_wowlan_pattern_support - pattern support information + * @max_patterns: maximum number of patterns supported + * @min_pattern_len: minimum length of each pattern + * @max_pattern_len: maximum length of each pattern + * + * This struct is carried in %NL80211_WOWLAN_TRIG_PKT_PATTERN when + * that is part of %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED in the + * capability information given by the kernel to userspace. + */ +struct nl80211_wowlan_pattern_support { +	__u32 max_patterns; +	__u32 min_pattern_len; +	__u32 max_pattern_len; +} __attribute__((packed)); + +/** + * enum nl80211_wowlan_triggers - WoWLAN trigger definitions + * @__NL80211_WOWLAN_TRIG_INVALID: invalid number for nested attributes + * @NL80211_WOWLAN_TRIG_ANY: wake up on any activity, do not really put + *	the chip into a special state -- works best with chips that have + *	support for low-power operation already (flag) + * @NL80211_WOWLAN_TRIG_DISCONNECT: wake up on disconnect, the way disconnect + *	is detected is implementation-specific (flag) + * @NL80211_WOWLAN_TRIG_MAGIC_PKT: wake up on magic packet (6x 0xff, followed + *	by 16 repetitions of MAC addr, anywhere in payload) (flag) + * @NL80211_WOWLAN_TRIG_PKT_PATTERN: wake up on the specified packet patterns + *	which are passed in an array of nested attributes, each nested attribute + *	defining a with attributes from &struct nl80211_wowlan_trig_pkt_pattern. + *	Each pattern defines a wakeup packet. The matching is done on the MSDU, + *	i.e. as though the packet was an 802.3 packet, so the pattern matching + *	is done after the packet is converted to the MSDU. + * + *	In %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED, it is a binary attribute + *	carrying a &struct nl80211_wowlan_pattern_support. + * @NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED: Not a real trigger, and cannot be + *	used when setting, used only to indicate that GTK rekeying is supported + *	by the device (flag) + * @NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE: wake up on GTK rekey failure (if + *	done by the device) (flag) + * @NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST: wake up on EAP Identity Request + *	packet (flag) + * @NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE: wake up on 4-way handshake (flag) + * @NL80211_WOWLAN_TRIG_RFKILL_RELEASE: wake up when rfkill is released + *	(on devices that have rfkill in the device) (flag) + * @NUM_NL80211_WOWLAN_TRIG: number of wake on wireless triggers + * @MAX_NL80211_WOWLAN_TRIG: highest wowlan trigger attribute number + */ +enum nl80211_wowlan_triggers { +	__NL80211_WOWLAN_TRIG_INVALID, +	NL80211_WOWLAN_TRIG_ANY, +	NL80211_WOWLAN_TRIG_DISCONNECT, +	NL80211_WOWLAN_TRIG_MAGIC_PKT, +	NL80211_WOWLAN_TRIG_PKT_PATTERN, +	NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED, +	NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE, +	NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST, +	NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE, +	NL80211_WOWLAN_TRIG_RFKILL_RELEASE, + +	/* keep last */ +	NUM_NL80211_WOWLAN_TRIG, +	MAX_NL80211_WOWLAN_TRIG = NUM_NL80211_WOWLAN_TRIG - 1 +}; + +/** + * enum nl80211_iface_limit_attrs - limit attributes + * @NL80211_IFACE_LIMIT_UNSPEC: (reserved) + * @NL80211_IFACE_LIMIT_MAX: maximum number of interfaces that + *	can be chosen from this set of interface types (u32) + * @NL80211_IFACE_LIMIT_TYPES: nested attribute containing a + *	flag attribute for each interface type in this set + * @NUM_NL80211_IFACE_LIMIT: number of attributes + * @MAX_NL80211_IFACE_LIMIT: highest attribute number + */ +enum nl80211_iface_limit_attrs { +	NL80211_IFACE_LIMIT_UNSPEC, +	NL80211_IFACE_LIMIT_MAX, +	NL80211_IFACE_LIMIT_TYPES, + +	/* keep last */ +	NUM_NL80211_IFACE_LIMIT, +	MAX_NL80211_IFACE_LIMIT = NUM_NL80211_IFACE_LIMIT - 1 +}; + +/** + * enum nl80211_if_combination_attrs -- interface combination attributes + * + * @NL80211_IFACE_COMB_UNSPEC: (reserved) + * @NL80211_IFACE_COMB_LIMITS: Nested attributes containing the limits + *	for given interface types, see &enum nl80211_iface_limit_attrs. + * @NL80211_IFACE_COMB_MAXNUM: u32 attribute giving the total number of + *	interfaces that can be created in this group. This number doesn't + *	apply to interfaces purely managed in software, which are listed + *	in a separate attribute %NL80211_ATTR_INTERFACES_SOFTWARE. + * @NL80211_IFACE_COMB_STA_AP_BI_MATCH: flag attribute specifying that + *	beacon intervals within this group must be all the same even for + *	infrastructure and AP/GO combinations, i.e. the GO(s) must adopt + *	the infrastructure network's beacon interval. + * @NL80211_IFACE_COMB_NUM_CHANNELS: u32 attribute specifying how many + *	different channels may be used within this group. + * @NUM_NL80211_IFACE_COMB: number of attributes + * @MAX_NL80211_IFACE_COMB: highest attribute number + * + * Examples: + *	limits = [ #{STA} <= 1, #{AP} <= 1 ], matching BI, channels = 1, max = 2 + *	=> allows an AP and a STA that must match BIs + * + *	numbers = [ #{AP, P2P-GO} <= 8 ], channels = 1, max = 8 + *	=> allows 8 of AP/GO + * + *	numbers = [ #{STA} <= 2 ], channels = 2, max = 2 + *	=> allows two STAs on different channels + * + *	numbers = [ #{STA} <= 1, #{P2P-client,P2P-GO} <= 3 ], max = 4 + *	=> allows a STA plus three P2P interfaces + * + * The list of these four possiblities could completely be contained + * within the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute to indicate + * that any of these groups must match. + * + * "Combinations" of just a single interface will not be listed here, + * a single interface of any valid interface type is assumed to always + * be possible by itself. This means that implicitly, for each valid + * interface type, the following group always exists: + *	numbers = [ #{<type>} <= 1 ], channels = 1, max = 1 + */ +enum nl80211_if_combination_attrs { +	NL80211_IFACE_COMB_UNSPEC, +	NL80211_IFACE_COMB_LIMITS, +	NL80211_IFACE_COMB_MAXNUM, +	NL80211_IFACE_COMB_STA_AP_BI_MATCH, +	NL80211_IFACE_COMB_NUM_CHANNELS, + +	/* keep last */ +	NUM_NL80211_IFACE_COMB, +	MAX_NL80211_IFACE_COMB = NUM_NL80211_IFACE_COMB - 1 +}; + + +/** + * enum nl80211_plink_state - state of a mesh peer link finite state machine + * + * @NL80211_PLINK_LISTEN: initial state, considered the implicit + *	state of non existant mesh peer links + * @NL80211_PLINK_OPN_SNT: mesh plink open frame has been sent to + *	this mesh peer + * @NL80211_PLINK_OPN_RCVD: mesh plink open frame has been received + *	from this mesh peer + * @NL80211_PLINK_CNF_RCVD: mesh plink confirm frame has been + *	received from this mesh peer + * @NL80211_PLINK_ESTAB: mesh peer link is established + * @NL80211_PLINK_HOLDING: mesh peer link is being closed or cancelled + * @NL80211_PLINK_BLOCKED: all frames transmitted from this mesh + *	plink are discarded + * @NUM_NL80211_PLINK_STATES: number of peer link states + * @MAX_NL80211_PLINK_STATES: highest numerical value of plink states + */ +enum nl80211_plink_state { +	NL80211_PLINK_LISTEN, +	NL80211_PLINK_OPN_SNT, +	NL80211_PLINK_OPN_RCVD, +	NL80211_PLINK_CNF_RCVD, +	NL80211_PLINK_ESTAB, +	NL80211_PLINK_HOLDING, +	NL80211_PLINK_BLOCKED, + +	/* keep last */ +	NUM_NL80211_PLINK_STATES, +	MAX_NL80211_PLINK_STATES = NUM_NL80211_PLINK_STATES - 1 +}; + +#define NL80211_KCK_LEN			16 +#define NL80211_KEK_LEN			16 +#define NL80211_REPLAY_CTR_LEN		8 + +/** + * enum nl80211_rekey_data - attributes for GTK rekey offload + * @__NL80211_REKEY_DATA_INVALID: invalid number for nested attributes + * @NL80211_REKEY_DATA_KEK: key encryption key (binary) + * @NL80211_REKEY_DATA_KCK: key confirmation key (binary) + * @NL80211_REKEY_DATA_REPLAY_CTR: replay counter (binary) + * @NUM_NL80211_REKEY_DATA: number of rekey attributes (internal) + * @MAX_NL80211_REKEY_DATA: highest rekey attribute (internal) + */ +enum nl80211_rekey_data { +	__NL80211_REKEY_DATA_INVALID, +	NL80211_REKEY_DATA_KEK, +	NL80211_REKEY_DATA_KCK, +	NL80211_REKEY_DATA_REPLAY_CTR, + +	/* keep last */ +	NUM_NL80211_REKEY_DATA, +	MAX_NL80211_REKEY_DATA = NUM_NL80211_REKEY_DATA - 1 +}; + +/** + * enum nl80211_hidden_ssid - values for %NL80211_ATTR_HIDDEN_SSID + * @NL80211_HIDDEN_SSID_NOT_IN_USE: do not hide SSID (i.e., broadcast it in + *	Beacon frames) + * @NL80211_HIDDEN_SSID_ZERO_LEN: hide SSID by using zero-length SSID element + *	in Beacon frames + * @NL80211_HIDDEN_SSID_ZERO_CONTENTS: hide SSID by using correct length of SSID + *	element in Beacon frames but zero out each byte in the SSID + */ +enum nl80211_hidden_ssid { +	NL80211_HIDDEN_SSID_NOT_IN_USE, +	NL80211_HIDDEN_SSID_ZERO_LEN, +	NL80211_HIDDEN_SSID_ZERO_CONTENTS +}; + +/** + * enum nl80211_sta_wme_attr - station WME attributes + * @__NL80211_STA_WME_INVALID: invalid number for nested attribute + * @NL80211_STA_WME_UAPSD_QUEUES: bitmap of uapsd queues. the format + *	is the same as the AC bitmap in the QoS info field. + * @NL80211_STA_WME_MAX_SP: max service period. the format is the same + *	as the MAX_SP field in the QoS info field (but already shifted down). + * @__NL80211_STA_WME_AFTER_LAST: internal + * @NL80211_STA_WME_MAX: highest station WME attribute + */ +enum nl80211_sta_wme_attr { +	__NL80211_STA_WME_INVALID, +	NL80211_STA_WME_UAPSD_QUEUES, +	NL80211_STA_WME_MAX_SP, + +	/* keep last */ +	__NL80211_STA_WME_AFTER_LAST, +	NL80211_STA_WME_MAX = __NL80211_STA_WME_AFTER_LAST - 1 +}; + +/** + * enum nl80211_pmksa_candidate_attr - attributes for PMKSA caching candidates + * @__NL80211_PMKSA_CANDIDATE_INVALID: invalid number for nested attributes + * @NL80211_PMKSA_CANDIDATE_INDEX: candidate index (u32; the smaller, the higher + *	priority) + * @NL80211_PMKSA_CANDIDATE_BSSID: candidate BSSID (6 octets) + * @NL80211_PMKSA_CANDIDATE_PREAUTH: RSN pre-authentication supported (flag) + * @NUM_NL80211_PMKSA_CANDIDATE: number of PMKSA caching candidate attributes + *	(internal) + * @MAX_NL80211_PMKSA_CANDIDATE: highest PMKSA caching candidate attribute + *	(internal) + */ +enum nl80211_pmksa_candidate_attr { +	__NL80211_PMKSA_CANDIDATE_INVALID, +	NL80211_PMKSA_CANDIDATE_INDEX, +	NL80211_PMKSA_CANDIDATE_BSSID, +	NL80211_PMKSA_CANDIDATE_PREAUTH, + +	/* keep last */ +	NUM_NL80211_PMKSA_CANDIDATE, +	MAX_NL80211_PMKSA_CANDIDATE = NUM_NL80211_PMKSA_CANDIDATE - 1 +}; + +/** + * enum nl80211_tdls_operation - values for %NL80211_ATTR_TDLS_OPERATION + * @NL80211_TDLS_DISCOVERY_REQ: Send a TDLS discovery request + * @NL80211_TDLS_SETUP: Setup TDLS link + * @NL80211_TDLS_TEARDOWN: Teardown a TDLS link which is already established + * @NL80211_TDLS_ENABLE_LINK: Enable TDLS link + * @NL80211_TDLS_DISABLE_LINK: Disable TDLS link + */ +enum nl80211_tdls_operation { +	NL80211_TDLS_DISCOVERY_REQ, +	NL80211_TDLS_SETUP, +	NL80211_TDLS_TEARDOWN, +	NL80211_TDLS_ENABLE_LINK, +	NL80211_TDLS_DISABLE_LINK, +}; + +/* + * enum nl80211_ap_sme_features - device-integrated AP features + * Reserved for future use, no bits are defined in + * NL80211_ATTR_DEVICE_AP_SME yet. +enum nl80211_ap_sme_features { +}; + */ + +/** + * enum nl80211_feature_flags - device/driver features + * @NL80211_FEATURE_SK_TX_STATUS: This driver supports reflecting back + *	TX status to the socket error queue when requested with the + *	socket option. + * @NL80211_FEATURE_HT_IBSS: This driver supports IBSS with HT datarates. + * @NL80211_FEATURE_INACTIVITY_TIMER: This driver takes care of freeing up + *	the connected inactive stations in AP mode. + * @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested + *	to work properly to suppport receiving regulatory hints from + *	cellular base stations. + * @NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL: If this is set, an active + *	P2P Device (%NL80211_IFTYPE_P2P_DEVICE) requires its own channel + *	in the interface combinations, even when it's only used for scan + *	and remain-on-channel. This could be due to, for example, the + *	remain-on-channel implementation requiring a channel context. + */ +enum nl80211_feature_flags { +	NL80211_FEATURE_SK_TX_STATUS			= 1 << 0, +	NL80211_FEATURE_HT_IBSS				= 1 << 1, +	NL80211_FEATURE_INACTIVITY_TIMER		= 1 << 2, +	NL80211_FEATURE_CELL_BASE_REG_HINTS		= 1 << 3, +	NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL	= 1 << 4, +}; + +/** + * enum nl80211_probe_resp_offload_support_attr - optional supported + *	protocols for probe-response offloading by the driver/FW. + *	To be used with the %NL80211_ATTR_PROBE_RESP_OFFLOAD attribute. + *	Each enum value represents a bit in the bitmap of supported + *	protocols. Typically a subset of probe-requests belonging to a + *	supported protocol will be excluded from offload and uploaded + *	to the host. + * + * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS: Support for WPS ver. 1 + * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2: Support for WPS ver. 2 + * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P: Support for P2P + * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U: Support for 802.11u + */ +enum nl80211_probe_resp_offload_support_attr { +	NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS =	1<<0, +	NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 =	1<<1, +	NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P =	1<<2, +	NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U =	1<<3, +}; + +/** + * enum nl80211_connect_failed_reason - connection request failed reasons + * @NL80211_CONN_FAIL_MAX_CLIENTS: Maximum number of clients that can be + *	handled by the AP is reached. + * @NL80211_CONN_FAIL_BLOCKED_CLIENT: Client's MAC is in the AP's blocklist. + */ +enum nl80211_connect_failed_reason { +	NL80211_CONN_FAIL_MAX_CLIENTS, +	NL80211_CONN_FAIL_BLOCKED_CLIENT, +}; + +#endif /* __LINUX_NL80211_H */ diff --git a/include/uapi/linux/nubus.h b/include/uapi/linux/nubus.h new file mode 100644 index 00000000000..77513d2b563 --- /dev/null +++ b/include/uapi/linux/nubus.h @@ -0,0 +1,244 @@ +/* +  nubus.h: various definitions and prototypes for NuBus drivers to use. + +  Originally written by Alan Cox. + +  Hacked to death by C. Scott Ananian and David Huggins-Daines. +   +  Some of the constants in here are from the corresponding +  NetBSD/OpenBSD header file, by Allen Briggs.  We figured out the +  rest of them on our own. */ + +#ifndef _UAPILINUX_NUBUS_H +#define _UAPILINUX_NUBUS_H + +#include <linux/types.h> + +enum nubus_category { +	NUBUS_CAT_BOARD          = 0x0001, +	NUBUS_CAT_DISPLAY        = 0x0003, +	NUBUS_CAT_NETWORK        = 0x0004, +	NUBUS_CAT_COMMUNICATIONS = 0x0006, +	NUBUS_CAT_FONT           = 0x0009, +	NUBUS_CAT_CPU            = 0x000A, +	/* For lack of a better name */ +	NUBUS_CAT_DUODOCK        = 0x0020 +}; + +enum nubus_type_network { +	NUBUS_TYPE_ETHERNET      = 0x0001, +	NUBUS_TYPE_RS232         = 0x0002 +}; + +enum nubus_type_display { +	NUBUS_TYPE_VIDEO         = 0x0001 +}; + +enum nubus_type_cpu { +	NUBUS_TYPE_68020         = 0x0003, +	NUBUS_TYPE_68030         = 0x0004, +	NUBUS_TYPE_68040         = 0x0005 +}; + +/* Known <Cat,Type,SW,HW> tuples: (according to TattleTech and Slots) + *  68030 motherboards: <10,4,0,24> + *  68040 motherboards: <10,5,0,24> + *  DuoDock Plus: <32,1,1,2> + * + *  Toby Frame Buffer card: <3,1,1,1> + *  RBV built-in video (IIci): <3,1,1,24> + *  Valkyrie built-in video (Q630): <3,1,1,46> + *  Macintosh Display Card: <3,1,1,25> + *  Sonora built-in video (P460): <3,1,1,34> + *  Jet framebuffer (DuoDock Plus): <3,1,1,41> + * + *  SONIC comm-slot/on-board and DuoDock Ethernet: <4,1,1,272> + *  SONIC LC-PDS Ethernet (Dayna, but like Apple 16-bit, sort of): <4,1,1,271> + *  Apple SONIC LC-PDS Ethernet ("Apple Ethernet LC Twisted-Pair Card"): <4,1,0,281> + *  Sonic Systems Ethernet A-Series Card: <4,1,268,256> + *  Asante MacCon NuBus-A: <4,1,260,256> (alpha-1.0,1.1 revision) + *   ROM on the above card: <2,1,0,0> + *  Cabletron ethernet card: <4,1,1,265> + *  Farallon ethernet card: <4,1,268,256> (identical to Sonic Systems card) + *  Kinetics EtherPort IIN: <4,1,259,262> + *  API Engineering EtherRun_LCa PDS enet card: <4,1,282,256> + * + *  Add your devices to the list!  You can obtain the "Slots" utility + *  from Apple's FTP site at: + *  ftp://dev.apple.com/devworld/Tool_Chest/Devices_-_Hardware/NuBus_Slot_Manager/ + * + *  Alternately, TattleTech can be found at any Info-Mac mirror site.   + *  or from its distribution site: ftp://ftp.decismkr.com/dms + */ + +/* DrSW: Uniquely identifies the software interface to a board.  This +   is usually the one you want to look at when writing a driver.  It's +   not as useful as you think, though, because as we should know by +   now (duh), "Apple Compatible" can mean a lot of things... */ + +/* Add known DrSW values here */ +enum nubus_drsw { +	/* NUBUS_CAT_DISPLAY */ +	NUBUS_DRSW_APPLE        = 0x0001, +	NUBUS_DRSW_APPLE_HIRES  = 0x0013, /* MacII HiRes card driver */ +	 +	/* NUBUS_CAT_NETWORK */ +	NUBUS_DRSW_3COM         = 0x0000, +	NUBUS_DRSW_CABLETRON    = 0x0001, +	NUBUS_DRSW_SONIC_LC     = 0x0001, +	NUBUS_DRSW_KINETICS     = 0x0103, +	NUBUS_DRSW_ASANTE       = 0x0104, +	NUBUS_DRSW_TECHWORKS    = 0x0109, +	NUBUS_DRSW_DAYNA        = 0x010b, +	NUBUS_DRSW_FARALLON     = 0x010c, +	NUBUS_DRSW_APPLE_SN     = 0x010f, +	NUBUS_DRSW_DAYNA2       = 0x0115, +	NUBUS_DRSW_FOCUS        = 0x011a, +	NUBUS_DRSW_ASANTE_CS    = 0x011d, /* use asante SMC9194 driver */ +	NUBUS_DRSW_DAYNA_LC     = 0x011e, + +	/* NUBUS_CAT_CPU */ +	NUBUS_DRSW_NONE         = 0x0000, +}; + +/* DrHW: Uniquely identifies the hardware interface to a board (or at +   least, it should...  some video cards are known to incorrectly +   identify themselves as Toby cards) */ + +/* Add known DrHW values here */ +enum nubus_drhw { +	/* NUBUS_CAT_DISPLAY */ +	NUBUS_DRHW_APPLE_TFB      = 0x0001, /* Toby frame buffer card */ +	NUBUS_DRHW_APPLE_WVC      = 0x0006, /* Apple Workstation Video Card */ +	NUBUS_DRHW_SIGMA_CLRMAX   = 0x0007, /* Sigma Design ColorMax */ +	NUBUS_DRHW_APPLE_SE30     = 0x0009, /* Apple SE/30 video */ +	NUBUS_DRHW_APPLE_HRVC     = 0x0013, /* Mac II High-Res Video Card */ +	NUBUS_DRHW_APPLE_PVC      = 0x0017, /* Mac II Portrait Video Card */ +	NUBUS_DRHW_APPLE_RBV1     = 0x0018, /* IIci RBV video */ +	NUBUS_DRHW_APPLE_MDC      = 0x0019, /* Macintosh Display Card */ +	NUBUS_DRHW_APPLE_SONORA   = 0x0022, /* Sonora built-in video */ +	NUBUS_DRHW_APPLE_24AC     = 0x002b, /* Mac 24AC Video Card */ +	NUBUS_DRHW_APPLE_VALKYRIE = 0x002e, +	NUBUS_DRHW_APPLE_JET      = 0x0029, /* Jet framebuffer (DuoDock) */ +	NUBUS_DRHW_SMAC_GFX       = 0x0105, /* SuperMac GFX */ +	NUBUS_DRHW_RASTER_CB264   = 0x013B, /* RasterOps ColorBoard 264 */ +	NUBUS_DRHW_MICRON_XCEED   = 0x0146, /* Micron Exceed color */ +	NUBUS_DRHW_RDIUS_GSC      = 0x0153, /* Radius GS/C */ +	NUBUS_DRHW_SMAC_SPEC8     = 0x017B, /* SuperMac Spectrum/8 */ +	NUBUS_DRHW_SMAC_SPEC24    = 0x017C, /* SuperMac Spectrum/24 */ +	NUBUS_DRHW_RASTER_CB364   = 0x026F, /* RasterOps ColorBoard 364 */ +	NUBUS_DRHW_RDIUS_DCGX     = 0x027C, /* Radius DirectColor/GX */ +	NUBUS_DRHW_RDIUS_PC8      = 0x0291, /* Radius PrecisionColor 8 */ +	NUBUS_DRHW_LAPIS_PCS8     = 0x0292, /* Lapis ProColorServer 8 */ +	NUBUS_DRHW_RASTER_24XLI   = 0x02A0, /* RasterOps 8/24 XLi */ +	NUBUS_DRHW_RASTER_PBPGT   = 0x02A5, /* RasterOps PaintBoard Prism GT */ +	NUBUS_DRHW_EMACH_FSX      = 0x02AE, /* E-Machines Futura SX */ +	NUBUS_DRHW_RASTER_24XLTV  = 0x02B7, /* RasterOps 24XLTV */ +	NUBUS_DRHW_SMAC_THUND24   = 0x02CB, /* SuperMac Thunder/24 */ +	NUBUS_DRHW_SMAC_THUNDLGHT = 0x03D9, /* SuperMac ThunderLight */ +	NUBUS_DRHW_RDIUS_PC24XP   = 0x0406, /* Radius PrecisionColor 24Xp */ +	NUBUS_DRHW_RDIUS_PC24X    = 0x040A, /* Radius PrecisionColor 24X */ +	NUBUS_DRHW_RDIUS_PC8XJ    = 0x040B, /* Radius PrecisionColor 8XJ */ +	 +	/* NUBUS_CAT_NETWORK */ +	NUBUS_DRHW_INTERLAN       = 0x0100, +	NUBUS_DRHW_SMC9194        = 0x0101, +	NUBUS_DRHW_KINETICS       = 0x0106, +	NUBUS_DRHW_CABLETRON      = 0x0109, +	NUBUS_DRHW_ASANTE_LC      = 0x010f, +	NUBUS_DRHW_SONIC          = 0x0110, +	NUBUS_DRHW_TECHWORKS      = 0x0112, +	NUBUS_DRHW_APPLE_SONIC_NB = 0x0118, +	NUBUS_DRHW_APPLE_SONIC_LC = 0x0119, +	NUBUS_DRHW_FOCUS          = 0x011c, +	NUBUS_DRHW_SONNET         = 0x011d, +}; + +/* Resource IDs: These are the identifiers for the various weird and +   wonderful tidbits of information that may or may not reside in the +   NuBus ROM directory. */ +enum nubus_res_id { +	NUBUS_RESID_TYPE         = 0x0001, +	NUBUS_RESID_NAME         = 0x0002, +	NUBUS_RESID_ICON         = 0x0003, +	NUBUS_RESID_DRVRDIR      = 0x0004, +	NUBUS_RESID_LOADREC      = 0x0005, +	NUBUS_RESID_BOOTREC      = 0x0006, +	NUBUS_RESID_FLAGS        = 0x0007, +	NUBUS_RESID_HWDEVID      = 0x0008, +	NUBUS_RESID_MINOR_BASEOS = 0x000a, +	NUBUS_RESID_MINOR_LENGTH = 0x000b, +	NUBUS_RESID_MAJOR_BASEOS = 0x000c, +	NUBUS_RESID_MAJOR_LENGTH = 0x000d, +	NUBUS_RESID_CICN         = 0x000f, +	NUBUS_RESID_ICL8         = 0x0010, +	NUBUS_RESID_ICL4         = 0x0011, +}; + +/* Category-specific resources. */ +enum nubus_board_res_id { +	NUBUS_RESID_BOARDID      = 0x0020, +	NUBUS_RESID_PRAMINITDATA = 0x0021, +	NUBUS_RESID_PRIMARYINIT  = 0x0022, +	NUBUS_RESID_TIMEOUTCONST = 0x0023, +	NUBUS_RESID_VENDORINFO   = 0x0024, +	NUBUS_RESID_BOARDFLAGS   = 0x0025, +	NUBUS_RESID_SECONDINIT   = 0x0026, + +	/* Not sure why Apple put these next two in here */ +	NUBUS_RESID_VIDNAMES     = 0x0041, +	NUBUS_RESID_VIDMODES     = 0x007e +}; + +/* Fields within the vendor info directory */ +enum nubus_vendor_res_id { +	NUBUS_RESID_VEND_ID     = 0x0001, +	NUBUS_RESID_VEND_SERIAL = 0x0002, +	NUBUS_RESID_VEND_REV    = 0x0003, +	NUBUS_RESID_VEND_PART   = 0x0004, +	NUBUS_RESID_VEND_DATE   = 0x0005 +}; + +enum nubus_net_res_id { +	NUBUS_RESID_MAC_ADDRESS  = 0x0080 +}; + +enum nubus_cpu_res_id { +	NUBUS_RESID_MEMINFO      = 0x0081, +	NUBUS_RESID_ROMINFO      = 0x0082 +}; + +enum nubus_display_res_id { +	NUBUS_RESID_GAMMADIR    = 0x0040, +	NUBUS_RESID_FIRSTMODE   = 0x0080, +	NUBUS_RESID_SECONDMODE  = 0x0081, +	NUBUS_RESID_THIRDMODE   = 0x0082, +	NUBUS_RESID_FOURTHMODE  = 0x0083, +	NUBUS_RESID_FIFTHMODE   = 0x0084, +	NUBUS_RESID_SIXTHMODE   = 0x0085 +}; + +struct nubus_dir +{ +	unsigned char *base; +	unsigned char *ptr; +	int done; +	int mask; +}; + +struct nubus_dirent +{ +	unsigned char *base; +	unsigned char type; +	__u32 data;	/* Actually 24bits used */ +	int mask; +}; + + +/* We'd like to get rid of this eventually.  Only daynaport.c uses it now. */ +static inline void *nubus_slot_addr(int slot) +{ +	return (void *)(0xF0000000|(slot<<24)); +} + +#endif /* _UAPILINUX_NUBUS_H */ diff --git a/include/uapi/linux/nvram.h b/include/uapi/linux/nvram.h new file mode 100644 index 00000000000..0986c433738 --- /dev/null +++ b/include/uapi/linux/nvram.h @@ -0,0 +1,16 @@ +#ifndef _UAPI_LINUX_NVRAM_H +#define _UAPI_LINUX_NVRAM_H + +#include <linux/ioctl.h> + +/* /dev/nvram ioctls */ +#define NVRAM_INIT	_IO('p', 0x40) /* initialize NVRAM and set checksum */ +#define NVRAM_SETCKS	_IO('p', 0x41) /* recalculate checksum */ + +/* for all current systems, this is where NVRAM starts */ +#define NVRAM_FIRST_BYTE    14 +/* all these functions expect an NVRAM offset, not an absolute */ +#define NVRAM_OFFSET(x)   ((x)-NVRAM_FIRST_BYTE) + + +#endif /* _UAPI_LINUX_NVRAM_H */ diff --git a/include/uapi/linux/omap3isp.h b/include/uapi/linux/omap3isp.h new file mode 100644 index 00000000000..c090cf9249b --- /dev/null +++ b/include/uapi/linux/omap3isp.h @@ -0,0 +1,646 @@ +/* + * omap3isp.h + * + * TI OMAP3 ISP - User-space API + * + * Copyright (C) 2010 Nokia Corporation + * Copyright (C) 2009 Texas Instruments, Inc. + * + * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com> + *	     Sakari Ailus <sakari.ailus@iki.fi> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + */ + +#ifndef OMAP3_ISP_USER_H +#define OMAP3_ISP_USER_H + +#include <linux/types.h> +#include <linux/videodev2.h> + +/* + * Private IOCTLs + * + * VIDIOC_OMAP3ISP_CCDC_CFG: Set CCDC configuration + * VIDIOC_OMAP3ISP_PRV_CFG: Set preview engine configuration + * VIDIOC_OMAP3ISP_AEWB_CFG: Set AEWB module configuration + * VIDIOC_OMAP3ISP_HIST_CFG: Set histogram module configuration + * VIDIOC_OMAP3ISP_AF_CFG: Set auto-focus module configuration + * VIDIOC_OMAP3ISP_STAT_REQ: Read statistics (AEWB/AF/histogram) data + * VIDIOC_OMAP3ISP_STAT_EN: Enable/disable a statistics module + */ + +#define VIDIOC_OMAP3ISP_CCDC_CFG \ +	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct omap3isp_ccdc_update_config) +#define VIDIOC_OMAP3ISP_PRV_CFG \ +	_IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct omap3isp_prev_update_config) +#define VIDIOC_OMAP3ISP_AEWB_CFG \ +	_IOWR('V', BASE_VIDIOC_PRIVATE + 3, struct omap3isp_h3a_aewb_config) +#define VIDIOC_OMAP3ISP_HIST_CFG \ +	_IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct omap3isp_hist_config) +#define VIDIOC_OMAP3ISP_AF_CFG \ +	_IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct omap3isp_h3a_af_config) +#define VIDIOC_OMAP3ISP_STAT_REQ \ +	_IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct omap3isp_stat_data) +#define VIDIOC_OMAP3ISP_STAT_EN \ +	_IOWR('V', BASE_VIDIOC_PRIVATE + 7, unsigned long) + +/* + * Events + * + * V4L2_EVENT_OMAP3ISP_AEWB: AEWB statistics data ready + * V4L2_EVENT_OMAP3ISP_AF: AF statistics data ready + * V4L2_EVENT_OMAP3ISP_HIST: Histogram statistics data ready + */ + +#define V4L2_EVENT_OMAP3ISP_CLASS	(V4L2_EVENT_PRIVATE_START | 0x100) +#define V4L2_EVENT_OMAP3ISP_AEWB	(V4L2_EVENT_OMAP3ISP_CLASS | 0x1) +#define V4L2_EVENT_OMAP3ISP_AF		(V4L2_EVENT_OMAP3ISP_CLASS | 0x2) +#define V4L2_EVENT_OMAP3ISP_HIST	(V4L2_EVENT_OMAP3ISP_CLASS | 0x3) + +struct omap3isp_stat_event_status { +	__u32 frame_number; +	__u16 config_counter; +	__u8 buf_err; +}; + +/* AE/AWB related structures and flags*/ + +/* H3A Range Constants */ +#define OMAP3ISP_AEWB_MAX_SATURATION_LIM	1023 +#define OMAP3ISP_AEWB_MIN_WIN_H			2 +#define OMAP3ISP_AEWB_MAX_WIN_H			256 +#define OMAP3ISP_AEWB_MIN_WIN_W			6 +#define OMAP3ISP_AEWB_MAX_WIN_W			256 +#define OMAP3ISP_AEWB_MIN_WINVC			1 +#define OMAP3ISP_AEWB_MIN_WINHC			1 +#define OMAP3ISP_AEWB_MAX_WINVC			128 +#define OMAP3ISP_AEWB_MAX_WINHC			36 +#define OMAP3ISP_AEWB_MAX_WINSTART		4095 +#define OMAP3ISP_AEWB_MIN_SUB_INC		2 +#define OMAP3ISP_AEWB_MAX_SUB_INC		32 +#define OMAP3ISP_AEWB_MAX_BUF_SIZE		83600 + +#define OMAP3ISP_AF_IIRSH_MIN			0 +#define OMAP3ISP_AF_IIRSH_MAX			4095 +#define OMAP3ISP_AF_PAXEL_HORIZONTAL_COUNT_MIN	1 +#define OMAP3ISP_AF_PAXEL_HORIZONTAL_COUNT_MAX	36 +#define OMAP3ISP_AF_PAXEL_VERTICAL_COUNT_MIN	1 +#define OMAP3ISP_AF_PAXEL_VERTICAL_COUNT_MAX	128 +#define OMAP3ISP_AF_PAXEL_INCREMENT_MIN		2 +#define OMAP3ISP_AF_PAXEL_INCREMENT_MAX		32 +#define OMAP3ISP_AF_PAXEL_HEIGHT_MIN		2 +#define OMAP3ISP_AF_PAXEL_HEIGHT_MAX		256 +#define OMAP3ISP_AF_PAXEL_WIDTH_MIN		16 +#define OMAP3ISP_AF_PAXEL_WIDTH_MAX		256 +#define OMAP3ISP_AF_PAXEL_HZSTART_MIN		1 +#define OMAP3ISP_AF_PAXEL_HZSTART_MAX		4095 +#define OMAP3ISP_AF_PAXEL_VTSTART_MIN		0 +#define OMAP3ISP_AF_PAXEL_VTSTART_MAX		4095 +#define OMAP3ISP_AF_THRESHOLD_MAX		255 +#define OMAP3ISP_AF_COEF_MAX			4095 +#define OMAP3ISP_AF_PAXEL_SIZE			48 +#define OMAP3ISP_AF_MAX_BUF_SIZE		221184 + +/** + * struct omap3isp_h3a_aewb_config - AE AWB configuration reset values + * saturation_limit: Saturation limit. + * @win_height: Window Height. Range 2 - 256, even values only. + * @win_width: Window Width. Range 6 - 256, even values only. + * @ver_win_count: Vertical Window Count. Range 1 - 128. + * @hor_win_count: Horizontal Window Count. Range 1 - 36. + * @ver_win_start: Vertical Window Start. Range 0 - 4095. + * @hor_win_start: Horizontal Window Start. Range 0 - 4095. + * @blk_ver_win_start: Black Vertical Windows Start. Range 0 - 4095. + * @blk_win_height: Black Window Height. Range 2 - 256, even values only. + * @subsample_ver_inc: Subsample Vertical points increment Range 2 - 32, even + *                     values only. + * @subsample_hor_inc: Subsample Horizontal points increment Range 2 - 32, even + *                     values only. + * @alaw_enable: AEW ALAW EN flag. + */ +struct omap3isp_h3a_aewb_config { +	/* +	 * Common fields. +	 * They should be the first ones and must be in the same order as in +	 * ispstat_generic_config struct. +	 */ +	__u32 buf_size; +	__u16 config_counter; + +	/* Private fields */ +	__u16 saturation_limit; +	__u16 win_height; +	__u16 win_width; +	__u16 ver_win_count; +	__u16 hor_win_count; +	__u16 ver_win_start; +	__u16 hor_win_start; +	__u16 blk_ver_win_start; +	__u16 blk_win_height; +	__u16 subsample_ver_inc; +	__u16 subsample_hor_inc; +	__u8 alaw_enable; +}; + +/** + * struct omap3isp_stat_data - Statistic data sent to or received from user + * @ts: Timestamp of returned framestats. + * @buf: Pointer to pass to user. + * @frame_number: Frame number of requested stats. + * @cur_frame: Current frame number being processed. + * @config_counter: Number of the configuration associated with the data. + */ +struct omap3isp_stat_data { +	struct timeval ts; +	void __user *buf; +	__u32 buf_size; +	__u16 frame_number; +	__u16 cur_frame; +	__u16 config_counter; +}; + + +/* Histogram related structs */ + +/* Flags for number of bins */ +#define OMAP3ISP_HIST_BINS_32		0 +#define OMAP3ISP_HIST_BINS_64		1 +#define OMAP3ISP_HIST_BINS_128		2 +#define OMAP3ISP_HIST_BINS_256		3 + +/* Number of bins * 4 colors * 4-bytes word */ +#define OMAP3ISP_HIST_MEM_SIZE_BINS(n)	((1 << ((n)+5))*4*4) + +#define OMAP3ISP_HIST_MEM_SIZE		1024 +#define OMAP3ISP_HIST_MIN_REGIONS	1 +#define OMAP3ISP_HIST_MAX_REGIONS	4 +#define OMAP3ISP_HIST_MAX_WB_GAIN	255 +#define OMAP3ISP_HIST_MIN_WB_GAIN	0 +#define OMAP3ISP_HIST_MAX_BIT_WIDTH	14 +#define OMAP3ISP_HIST_MIN_BIT_WIDTH	8 +#define OMAP3ISP_HIST_MAX_WG		4 +#define OMAP3ISP_HIST_MAX_BUF_SIZE	4096 + +/* Source */ +#define OMAP3ISP_HIST_SOURCE_CCDC	0 +#define OMAP3ISP_HIST_SOURCE_MEM	1 + +/* CFA pattern */ +#define OMAP3ISP_HIST_CFA_BAYER		0 +#define OMAP3ISP_HIST_CFA_FOVEONX3	1 + +struct omap3isp_hist_region { +	__u16 h_start; +	__u16 h_end; +	__u16 v_start; +	__u16 v_end; +}; + +struct omap3isp_hist_config { +	/* +	 * Common fields. +	 * They should be the first ones and must be in the same order as in +	 * ispstat_generic_config struct. +	 */ +	__u32 buf_size; +	__u16 config_counter; + +	__u8 num_acc_frames;	/* Num of image frames to be processed and +				   accumulated for each histogram frame */ +	__u16 hist_bins;	/* number of bins: 32, 64, 128, or 256 */ +	__u8 cfa;		/* BAYER or FOVEON X3 */ +	__u8 wg[OMAP3ISP_HIST_MAX_WG];	/* White Balance Gain */ +	__u8 num_regions;	/* number of regions to be configured */ +	struct omap3isp_hist_region region[OMAP3ISP_HIST_MAX_REGIONS]; +}; + +/* Auto Focus related structs */ + +#define OMAP3ISP_AF_NUM_COEF		11 + +enum omap3isp_h3a_af_fvmode { +	OMAP3ISP_AF_MODE_SUMMED = 0, +	OMAP3ISP_AF_MODE_PEAK = 1 +}; + +/* Red, Green, and blue pixel location in the AF windows */ +enum omap3isp_h3a_af_rgbpos { +	OMAP3ISP_AF_GR_GB_BAYER = 0,	/* GR and GB as Bayer pattern */ +	OMAP3ISP_AF_RG_GB_BAYER = 1,	/* RG and GB as Bayer pattern */ +	OMAP3ISP_AF_GR_BG_BAYER = 2,	/* GR and BG as Bayer pattern */ +	OMAP3ISP_AF_RG_BG_BAYER = 3,	/* RG and BG as Bayer pattern */ +	OMAP3ISP_AF_GG_RB_CUSTOM = 4,	/* GG and RB as custom pattern */ +	OMAP3ISP_AF_RB_GG_CUSTOM = 5	/* RB and GG as custom pattern */ +}; + +/* Contains the information regarding the Horizontal Median Filter */ +struct omap3isp_h3a_af_hmf { +	__u8 enable;	/* Status of Horizontal Median Filter */ +	__u8 threshold;	/* Threshold Value for Horizontal Median Filter */ +}; + +/* Contains the information regarding the IIR Filters */ +struct omap3isp_h3a_af_iir { +	__u16 h_start;			/* IIR horizontal start */ +	__u16 coeff_set0[OMAP3ISP_AF_NUM_COEF];	/* Filter coefficient, set 0 */ +	__u16 coeff_set1[OMAP3ISP_AF_NUM_COEF];	/* Filter coefficient, set 1 */ +}; + +/* Contains the information regarding the Paxels Structure in AF Engine */ +struct omap3isp_h3a_af_paxel { +	__u16 h_start;	/* Horizontal Start Position */ +	__u16 v_start;	/* Vertical Start Position */ +	__u8 width;	/* Width of the Paxel */ +	__u8 height;	/* Height of the Paxel */ +	__u8 h_cnt;	/* Horizontal Count */ +	__u8 v_cnt;	/* vertical Count */ +	__u8 line_inc;	/* Line Increment */ +}; + +/* Contains the parameters required for hardware set up of AF Engine */ +struct omap3isp_h3a_af_config { +	/* +	 * Common fields. +	 * They should be the first ones and must be in the same order as in +	 * ispstat_generic_config struct. +	 */ +	__u32 buf_size; +	__u16 config_counter; + +	struct omap3isp_h3a_af_hmf hmf;		/* HMF configurations */ +	struct omap3isp_h3a_af_iir iir;		/* IIR filter configurations */ +	struct omap3isp_h3a_af_paxel paxel;	/* Paxel parameters */ +	enum omap3isp_h3a_af_rgbpos rgb_pos;	/* RGB Positions */ +	enum omap3isp_h3a_af_fvmode fvmode;	/* Accumulator mode */ +	__u8 alaw_enable;			/* AF ALAW status */ +}; + +/* ISP CCDC structs */ + +/* Abstraction layer CCDC configurations */ +#define OMAP3ISP_CCDC_ALAW		(1 << 0) +#define OMAP3ISP_CCDC_LPF		(1 << 1) +#define OMAP3ISP_CCDC_BLCLAMP		(1 << 2) +#define OMAP3ISP_CCDC_BCOMP		(1 << 3) +#define OMAP3ISP_CCDC_FPC		(1 << 4) +#define OMAP3ISP_CCDC_CULL		(1 << 5) +#define OMAP3ISP_CCDC_CONFIG_LSC	(1 << 7) +#define OMAP3ISP_CCDC_TBL_LSC		(1 << 8) + +#define OMAP3ISP_RGB_MAX		3 + +/* Enumeration constants for Alaw input width */ +enum omap3isp_alaw_ipwidth { +	OMAP3ISP_ALAW_BIT12_3 = 0x3, +	OMAP3ISP_ALAW_BIT11_2 = 0x4, +	OMAP3ISP_ALAW_BIT10_1 = 0x5, +	OMAP3ISP_ALAW_BIT9_0 = 0x6 +}; + +/** + * struct omap3isp_ccdc_lsc_config - LSC configuration + * @offset: Table Offset of the gain table. + * @gain_mode_n: Vertical dimension of a paxel in LSC configuration. + * @gain_mode_m: Horizontal dimension of a paxel in LSC configuration. + * @gain_format: Gain table format. + * @fmtsph: Start pixel horizontal from start of the HS sync pulse. + * @fmtlnh: Number of pixels in horizontal direction to use for the data + *          reformatter. + * @fmtslv: Start line from start of VS sync pulse for the data reformatter. + * @fmtlnv: Number of lines in vertical direction for the data reformatter. + * @initial_x: X position, in pixels, of the first active pixel in reference + *             to the first active paxel. Must be an even number. + * @initial_y: Y position, in pixels, of the first active pixel in reference + *             to the first active paxel. Must be an even number. + * @size: Size of LSC gain table. Filled when loaded from userspace. + */ +struct omap3isp_ccdc_lsc_config { +	__u16 offset; +	__u8 gain_mode_n; +	__u8 gain_mode_m; +	__u8 gain_format; +	__u16 fmtsph; +	__u16 fmtlnh; +	__u16 fmtslv; +	__u16 fmtlnv; +	__u8 initial_x; +	__u8 initial_y; +	__u32 size; +}; + +/** + * struct omap3isp_ccdc_bclamp - Optical & Digital black clamp subtract + * @obgain: Optical black average gain. + * @obstpixel: Start Pixel w.r.t. HS pulse in Optical black sample. + * @oblines: Optical Black Sample lines. + * @oblen: Optical Black Sample Length. + * @dcsubval: Digital Black Clamp subtract value. + */ +struct omap3isp_ccdc_bclamp { +	__u8 obgain; +	__u8 obstpixel; +	__u8 oblines; +	__u8 oblen; +	__u16 dcsubval; +}; + +/** + * struct omap3isp_ccdc_fpc - Faulty Pixels Correction + * @fpnum: Number of faulty pixels to be corrected in the frame. + * @fpcaddr: Memory address of the FPC Table + */ +struct omap3isp_ccdc_fpc { +	__u16 fpnum; +	__u32 fpcaddr; +}; + +/** + * struct omap3isp_ccdc_blcomp - Black Level Compensation parameters + * @b_mg: B/Mg pixels. 2's complement. -128 to +127. + * @gb_g: Gb/G pixels. 2's complement. -128 to +127. + * @gr_cy: Gr/Cy pixels. 2's complement. -128 to +127. + * @r_ye: R/Ye pixels. 2's complement. -128 to +127. + */ +struct omap3isp_ccdc_blcomp { +	__u8 b_mg; +	__u8 gb_g; +	__u8 gr_cy; +	__u8 r_ye; +}; + +/** + * omap3isp_ccdc_culling - Culling parameters + * @v_pattern: Vertical culling pattern. + * @h_odd: Horizontal Culling pattern for odd lines. + * @h_even: Horizontal Culling pattern for even lines. + */ +struct omap3isp_ccdc_culling { +	__u8 v_pattern; +	__u16 h_odd; +	__u16 h_even; +}; + +/** + * omap3isp_ccdc_update_config - CCDC configuration + * @update: Specifies which CCDC registers should be updated. + * @flag: Specifies which CCDC functions should be enabled. + * @alawip: Enable/Disable A-Law compression. + * @bclamp: Black clamp control register. + * @blcomp: Black level compensation value for RGrGbB Pixels. 2's complement. + * @fpc: Number of faulty pixels corrected in the frame, address of FPC table. + * @cull: Cull control register. + * @lsc: Pointer to LSC gain table. + */ +struct omap3isp_ccdc_update_config { +	__u16 update; +	__u16 flag; +	enum omap3isp_alaw_ipwidth alawip; +	struct omap3isp_ccdc_bclamp __user *bclamp; +	struct omap3isp_ccdc_blcomp __user *blcomp; +	struct omap3isp_ccdc_fpc __user *fpc; +	struct omap3isp_ccdc_lsc_config __user *lsc_cfg; +	struct omap3isp_ccdc_culling __user *cull; +	__u8 __user *lsc; +}; + +/* Preview configurations */ +#define OMAP3ISP_PREV_LUMAENH		(1 << 0) +#define OMAP3ISP_PREV_INVALAW		(1 << 1) +#define OMAP3ISP_PREV_HRZ_MED		(1 << 2) +#define OMAP3ISP_PREV_CFA		(1 << 3) +#define OMAP3ISP_PREV_CHROMA_SUPP	(1 << 4) +#define OMAP3ISP_PREV_WB		(1 << 5) +#define OMAP3ISP_PREV_BLKADJ		(1 << 6) +#define OMAP3ISP_PREV_RGB2RGB		(1 << 7) +#define OMAP3ISP_PREV_COLOR_CONV	(1 << 8) +#define OMAP3ISP_PREV_YC_LIMIT		(1 << 9) +#define OMAP3ISP_PREV_DEFECT_COR	(1 << 10) +/* Bit 11 was OMAP3ISP_PREV_GAMMABYPASS, now merged with OMAP3ISP_PREV_GAMMA */ +#define OMAP3ISP_PREV_DRK_FRM_CAPTURE	(1 << 12) +#define OMAP3ISP_PREV_DRK_FRM_SUBTRACT	(1 << 13) +#define OMAP3ISP_PREV_LENS_SHADING	(1 << 14) +#define OMAP3ISP_PREV_NF		(1 << 15) +#define OMAP3ISP_PREV_GAMMA		(1 << 16) + +#define OMAP3ISP_PREV_NF_TBL_SIZE	64 +#define OMAP3ISP_PREV_CFA_TBL_SIZE	576 +#define OMAP3ISP_PREV_CFA_BLK_SIZE	(OMAP3ISP_PREV_CFA_TBL_SIZE / 4) +#define OMAP3ISP_PREV_GAMMA_TBL_SIZE	1024 +#define OMAP3ISP_PREV_YENH_TBL_SIZE	128 + +#define OMAP3ISP_PREV_DETECT_CORRECT_CHANNELS	4 + +/** + * struct omap3isp_prev_hmed - Horizontal Median Filter + * @odddist: Distance between consecutive pixels of same color in the odd line. + * @evendist: Distance between consecutive pixels of same color in the even + *            line. + * @thres: Horizontal median filter threshold. + */ +struct omap3isp_prev_hmed { +	__u8 odddist; +	__u8 evendist; +	__u8 thres; +}; + +/* + * Enumeration for CFA Formats supported by preview + */ +enum omap3isp_cfa_fmt { +	OMAP3ISP_CFAFMT_BAYER, +	OMAP3ISP_CFAFMT_SONYVGA, +	OMAP3ISP_CFAFMT_RGBFOVEON, +	OMAP3ISP_CFAFMT_DNSPL, +	OMAP3ISP_CFAFMT_HONEYCOMB, +	OMAP3ISP_CFAFMT_RRGGBBFOVEON +}; + +/** + * struct omap3isp_prev_cfa - CFA Interpolation + * @format: CFA Format Enum value supported by preview. + * @gradthrs_vert: CFA Gradient Threshold - Vertical. + * @gradthrs_horz: CFA Gradient Threshold - Horizontal. + * @table: Pointer to the CFA table. + */ +struct omap3isp_prev_cfa { +	enum omap3isp_cfa_fmt format; +	__u8 gradthrs_vert; +	__u8 gradthrs_horz; +	__u32 table[4][OMAP3ISP_PREV_CFA_BLK_SIZE]; +}; + +/** + * struct omap3isp_prev_csup - Chrominance Suppression + * @gain: Gain. + * @thres: Threshold. + * @hypf_en: Flag to enable/disable the High Pass Filter. + */ +struct omap3isp_prev_csup { +	__u8 gain; +	__u8 thres; +	__u8 hypf_en; +}; + +/** + * struct omap3isp_prev_wbal - White Balance + * @dgain: Digital gain (U10Q8). + * @coef3: White balance gain - COEF 3 (U8Q5). + * @coef2: White balance gain - COEF 2 (U8Q5). + * @coef1: White balance gain - COEF 1 (U8Q5). + * @coef0: White balance gain - COEF 0 (U8Q5). + */ +struct omap3isp_prev_wbal { +	__u16 dgain; +	__u8 coef3; +	__u8 coef2; +	__u8 coef1; +	__u8 coef0; +}; + +/** + * struct omap3isp_prev_blkadj - Black Level Adjustment + * @red: Black level offset adjustment for Red in 2's complement format + * @green: Black level offset adjustment for Green in 2's complement format + * @blue: Black level offset adjustment for Blue in 2's complement format + */ +struct omap3isp_prev_blkadj { +	/*Black level offset adjustment for Red in 2's complement format */ +	__u8 red; +	/*Black level offset adjustment for Green in 2's complement format */ +	__u8 green; +	/* Black level offset adjustment for Blue in 2's complement format */ +	__u8 blue; +}; + +/** + * struct omap3isp_prev_rgbtorgb - RGB to RGB Blending + * @matrix: Blending values(S12Q8 format) + *              [RR] [GR] [BR] + *              [RG] [GG] [BG] + *              [RB] [GB] [BB] + * @offset: Blending offset value for R,G,B in 2's complement integer format. + */ +struct omap3isp_prev_rgbtorgb { +	__u16 matrix[OMAP3ISP_RGB_MAX][OMAP3ISP_RGB_MAX]; +	__u16 offset[OMAP3ISP_RGB_MAX]; +}; + +/** + * struct omap3isp_prev_csc - Color Space Conversion from RGB-YCbYCr + * @matrix: Color space conversion coefficients(S10Q8) + *              [CSCRY]  [CSCGY]  [CSCBY] + *              [CSCRCB] [CSCGCB] [CSCBCB] + *              [CSCRCR] [CSCGCR] [CSCBCR] + * @offset: CSC offset values for Y offset, CB offset and CR offset respectively + */ +struct omap3isp_prev_csc { +	__u16 matrix[OMAP3ISP_RGB_MAX][OMAP3ISP_RGB_MAX]; +	__s16 offset[OMAP3ISP_RGB_MAX]; +}; + +/** + * struct omap3isp_prev_yclimit - Y, C Value Limit + * @minC: Minimum C value + * @maxC: Maximum C value + * @minY: Minimum Y value + * @maxY: Maximum Y value + */ +struct omap3isp_prev_yclimit { +	__u8 minC; +	__u8 maxC; +	__u8 minY; +	__u8 maxY; +}; + +/** + * struct omap3isp_prev_dcor - Defect correction + * @couplet_mode_en: Flag to enable or disable the couplet dc Correction in NF + * @detect_correct: Thresholds for correction bit 0:10 detect 16:25 correct + */ +struct omap3isp_prev_dcor { +	__u8 couplet_mode_en; +	__u32 detect_correct[OMAP3ISP_PREV_DETECT_CORRECT_CHANNELS]; +}; + +/** + * struct omap3isp_prev_nf - Noise Filter + * @spread: Spread value to be used in Noise Filter + * @table: Pointer to the Noise Filter table + */ +struct omap3isp_prev_nf { +	__u8 spread; +	__u32 table[OMAP3ISP_PREV_NF_TBL_SIZE]; +}; + +/** + * struct omap3isp_prev_gtables - Gamma correction tables + * @red: Array for red gamma table. + * @green: Array for green gamma table. + * @blue: Array for blue gamma table. + */ +struct omap3isp_prev_gtables { +	__u32 red[OMAP3ISP_PREV_GAMMA_TBL_SIZE]; +	__u32 green[OMAP3ISP_PREV_GAMMA_TBL_SIZE]; +	__u32 blue[OMAP3ISP_PREV_GAMMA_TBL_SIZE]; +}; + +/** + * struct omap3isp_prev_luma - Luma enhancement + * @table: Array for luma enhancement table. + */ +struct omap3isp_prev_luma { +	__u32 table[OMAP3ISP_PREV_YENH_TBL_SIZE]; +}; + +/** + * struct omap3isp_prev_update_config - Preview engine configuration (user) + * @update: Specifies which ISP Preview registers should be updated. + * @flag: Specifies which ISP Preview functions should be enabled. + * @shading_shift: 3bit value of shift used in shading compensation. + * @luma: Pointer to luma enhancement structure. + * @hmed: Pointer to structure containing the odd and even distance. + *        between the pixels in the image along with the filter threshold. + * @cfa: Pointer to structure containing the CFA interpolation table, CFA. + *       format in the image, vertical and horizontal gradient threshold. + * @csup: Pointer to Structure for Chrominance Suppression coefficients. + * @wbal: Pointer to structure for White Balance. + * @blkadj: Pointer to structure for Black Adjustment. + * @rgb2rgb: Pointer to structure for RGB to RGB Blending. + * @csc: Pointer to structure for Color Space Conversion from RGB-YCbYCr. + * @yclimit: Pointer to structure for Y, C Value Limit. + * @dcor: Pointer to structure for defect correction. + * @nf: Pointer to structure for Noise Filter + * @gamma: Pointer to gamma structure. + */ +struct omap3isp_prev_update_config { +	__u32 update; +	__u32 flag; +	__u32 shading_shift; +	struct omap3isp_prev_luma __user *luma; +	struct omap3isp_prev_hmed __user *hmed; +	struct omap3isp_prev_cfa __user *cfa; +	struct omap3isp_prev_csup __user *csup; +	struct omap3isp_prev_wbal __user *wbal; +	struct omap3isp_prev_blkadj __user *blkadj; +	struct omap3isp_prev_rgbtorgb __user *rgb2rgb; +	struct omap3isp_prev_csc __user *csc; +	struct omap3isp_prev_yclimit __user *yclimit; +	struct omap3isp_prev_dcor __user *dcor; +	struct omap3isp_prev_nf __user *nf; +	struct omap3isp_prev_gtables __user *gamma; +}; + +#endif	/* OMAP3_ISP_USER_H */ diff --git a/include/uapi/linux/omapfb.h b/include/uapi/linux/omapfb.h new file mode 100644 index 00000000000..7c97bc00ac6 --- /dev/null +++ b/include/uapi/linux/omapfb.h @@ -0,0 +1,222 @@ +/* + * File: include/linux/omapfb.h + * + * Framebuffer driver for TI OMAP boards + * + * Copyright (C) 2004 Nokia Corporation + * Author: Imre Deak <imre.deak@nokia.com> + * + * 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., + * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. + */ + +#ifndef _UAPI__LINUX_OMAPFB_H__ +#define _UAPI__LINUX_OMAPFB_H__ + +#include <linux/fb.h> +#include <linux/ioctl.h> +#include <linux/types.h> + +/* IOCTL commands. */ + +#define OMAP_IOW(num, dtype)	_IOW('O', num, dtype) +#define OMAP_IOR(num, dtype)	_IOR('O', num, dtype) +#define OMAP_IOWR(num, dtype)	_IOWR('O', num, dtype) +#define OMAP_IO(num)		_IO('O', num) + +#define OMAPFB_MIRROR		OMAP_IOW(31, int) +#define OMAPFB_SYNC_GFX		OMAP_IO(37) +#define OMAPFB_VSYNC		OMAP_IO(38) +#define OMAPFB_SET_UPDATE_MODE	OMAP_IOW(40, int) +#define OMAPFB_GET_CAPS		OMAP_IOR(42, struct omapfb_caps) +#define OMAPFB_GET_UPDATE_MODE	OMAP_IOW(43, int) +#define OMAPFB_LCD_TEST		OMAP_IOW(45, int) +#define OMAPFB_CTRL_TEST	OMAP_IOW(46, int) +#define OMAPFB_UPDATE_WINDOW_OLD OMAP_IOW(47, struct omapfb_update_window_old) +#define OMAPFB_SET_COLOR_KEY	OMAP_IOW(50, struct omapfb_color_key) +#define OMAPFB_GET_COLOR_KEY	OMAP_IOW(51, struct omapfb_color_key) +#define OMAPFB_SETUP_PLANE	OMAP_IOW(52, struct omapfb_plane_info) +#define OMAPFB_QUERY_PLANE	OMAP_IOW(53, struct omapfb_plane_info) +#define OMAPFB_UPDATE_WINDOW	OMAP_IOW(54, struct omapfb_update_window) +#define OMAPFB_SETUP_MEM	OMAP_IOW(55, struct omapfb_mem_info) +#define OMAPFB_QUERY_MEM	OMAP_IOW(56, struct omapfb_mem_info) +#define OMAPFB_WAITFORVSYNC	OMAP_IO(57) +#define OMAPFB_MEMORY_READ	OMAP_IOR(58, struct omapfb_memory_read) +#define OMAPFB_GET_OVERLAY_COLORMODE OMAP_IOR(59, struct omapfb_ovl_colormode) +#define OMAPFB_WAITFORGO	OMAP_IO(60) +#define OMAPFB_GET_VRAM_INFO	OMAP_IOR(61, struct omapfb_vram_info) +#define OMAPFB_SET_TEARSYNC	OMAP_IOW(62, struct omapfb_tearsync_info) +#define OMAPFB_GET_DISPLAY_INFO	OMAP_IOR(63, struct omapfb_display_info) + +#define OMAPFB_CAPS_GENERIC_MASK	0x00000fff +#define OMAPFB_CAPS_LCDC_MASK		0x00fff000 +#define OMAPFB_CAPS_PANEL_MASK		0xff000000 + +#define OMAPFB_CAPS_MANUAL_UPDATE	0x00001000 +#define OMAPFB_CAPS_TEARSYNC		0x00002000 +#define OMAPFB_CAPS_PLANE_RELOCATE_MEM	0x00004000 +#define OMAPFB_CAPS_PLANE_SCALE		0x00008000 +#define OMAPFB_CAPS_WINDOW_PIXEL_DOUBLE	0x00010000 +#define OMAPFB_CAPS_WINDOW_SCALE	0x00020000 +#define OMAPFB_CAPS_WINDOW_OVERLAY	0x00040000 +#define OMAPFB_CAPS_WINDOW_ROTATE	0x00080000 +#define OMAPFB_CAPS_SET_BACKLIGHT	0x01000000 + +/* Values from DSP must map to lower 16-bits */ +#define OMAPFB_FORMAT_MASK		0x00ff +#define OMAPFB_FORMAT_FLAG_DOUBLE	0x0100 +#define OMAPFB_FORMAT_FLAG_TEARSYNC	0x0200 +#define OMAPFB_FORMAT_FLAG_FORCE_VSYNC	0x0400 +#define OMAPFB_FORMAT_FLAG_ENABLE_OVERLAY	0x0800 +#define OMAPFB_FORMAT_FLAG_DISABLE_OVERLAY	0x1000 + +#define OMAPFB_MEMTYPE_SDRAM		0 +#define OMAPFB_MEMTYPE_SRAM		1 +#define OMAPFB_MEMTYPE_MAX		1 + +#define OMAPFB_MEM_IDX_ENABLED	0x80 +#define OMAPFB_MEM_IDX_MASK	0x7f + +enum omapfb_color_format { +	OMAPFB_COLOR_RGB565 = 0, +	OMAPFB_COLOR_YUV422, +	OMAPFB_COLOR_YUV420, +	OMAPFB_COLOR_CLUT_8BPP, +	OMAPFB_COLOR_CLUT_4BPP, +	OMAPFB_COLOR_CLUT_2BPP, +	OMAPFB_COLOR_CLUT_1BPP, +	OMAPFB_COLOR_RGB444, +	OMAPFB_COLOR_YUY422, + +	OMAPFB_COLOR_ARGB16, +	OMAPFB_COLOR_RGB24U,	/* RGB24, 32-bit container */ +	OMAPFB_COLOR_RGB24P,	/* RGB24, 24-bit container */ +	OMAPFB_COLOR_ARGB32, +	OMAPFB_COLOR_RGBA32, +	OMAPFB_COLOR_RGBX32, +}; + +struct omapfb_update_window { +	__u32 x, y; +	__u32 width, height; +	__u32 format; +	__u32 out_x, out_y; +	__u32 out_width, out_height; +	__u32 reserved[8]; +}; + +struct omapfb_update_window_old { +	__u32 x, y; +	__u32 width, height; +	__u32 format; +}; + +enum omapfb_plane { +	OMAPFB_PLANE_GFX = 0, +	OMAPFB_PLANE_VID1, +	OMAPFB_PLANE_VID2, +}; + +enum omapfb_channel_out { +	OMAPFB_CHANNEL_OUT_LCD = 0, +	OMAPFB_CHANNEL_OUT_DIGIT, +}; + +struct omapfb_plane_info { +	__u32 pos_x; +	__u32 pos_y; +	__u8  enabled; +	__u8  channel_out; +	__u8  mirror; +	__u8  mem_idx; +	__u32 out_width; +	__u32 out_height; +	__u32 reserved2[12]; +}; + +struct omapfb_mem_info { +	__u32 size; +	__u8  type; +	__u8  reserved[3]; +}; + +struct omapfb_caps { +	__u32 ctrl; +	__u32 plane_color; +	__u32 wnd_color; +}; + +enum omapfb_color_key_type { +	OMAPFB_COLOR_KEY_DISABLED = 0, +	OMAPFB_COLOR_KEY_GFX_DST, +	OMAPFB_COLOR_KEY_VID_SRC, +}; + +struct omapfb_color_key { +	__u8  channel_out; +	__u32 background; +	__u32 trans_key; +	__u8  key_type; +}; + +enum omapfb_update_mode { +	OMAPFB_UPDATE_DISABLED = 0, +	OMAPFB_AUTO_UPDATE, +	OMAPFB_MANUAL_UPDATE +}; + +struct omapfb_memory_read { +	__u16 x; +	__u16 y; +	__u16 w; +	__u16 h; +	size_t buffer_size; +	void __user *buffer; +}; + +struct omapfb_ovl_colormode { +	__u8 overlay_idx; +	__u8 mode_idx; +	__u32 bits_per_pixel; +	__u32 nonstd; +	struct fb_bitfield red; +	struct fb_bitfield green; +	struct fb_bitfield blue; +	struct fb_bitfield transp; +}; + +struct omapfb_vram_info { +	__u32 total; +	__u32 free; +	__u32 largest_free_block; +	__u32 reserved[5]; +}; + +struct omapfb_tearsync_info { +	__u8 enabled; +	__u8 reserved1[3]; +	__u16 line; +	__u16 reserved2; +}; + +struct omapfb_display_info { +	__u16 xres; +	__u16 yres; +	__u32 width;	/* phys width of the display in micrometers */ +	__u32 height;	/* phys height of the display in micrometers */ +	__u32 reserved[5]; +}; + + +#endif /* _UAPI__LINUX_OMAPFB_H__ */ diff --git a/include/uapi/linux/oom.h b/include/uapi/linux/oom.h new file mode 100644 index 00000000000..a49c4afc706 --- /dev/null +++ b/include/uapi/linux/oom.h @@ -0,0 +1,11 @@ +#ifndef _UAPI__INCLUDE_LINUX_OOM_H +#define _UAPI__INCLUDE_LINUX_OOM_H + +/* + * /proc/<pid>/oom_score_adj set to OOM_SCORE_ADJ_MIN disables oom killing for + * pid. + */ +#define OOM_SCORE_ADJ_MIN	(-1000) +#define OOM_SCORE_ADJ_MAX	1000 + +#endif /* _UAPI__INCLUDE_LINUX_OOM_H */ diff --git a/include/uapi/linux/packet_diag.h b/include/uapi/linux/packet_diag.h new file mode 100644 index 00000000000..93f5fa94a43 --- /dev/null +++ b/include/uapi/linux/packet_diag.h @@ -0,0 +1,72 @@ +#ifndef __PACKET_DIAG_H__ +#define __PACKET_DIAG_H__ + +#include <linux/types.h> + +struct packet_diag_req { +	__u8	sdiag_family; +	__u8	sdiag_protocol; +	__u16	pad; +	__u32	pdiag_ino; +	__u32	pdiag_show; +	__u32	pdiag_cookie[2]; +}; + +#define PACKET_SHOW_INFO	0x00000001 /* Basic packet_sk information */ +#define PACKET_SHOW_MCLIST	0x00000002 /* A set of packet_diag_mclist-s */ +#define PACKET_SHOW_RING_CFG	0x00000004 /* Rings configuration parameters */ +#define PACKET_SHOW_FANOUT	0x00000008 + +struct packet_diag_msg { +	__u8	pdiag_family; +	__u8	pdiag_type; +	__u16	pdiag_num; + +	__u32	pdiag_ino; +	__u32	pdiag_cookie[2]; +}; + +enum { +	PACKET_DIAG_INFO, +	PACKET_DIAG_MCLIST, +	PACKET_DIAG_RX_RING, +	PACKET_DIAG_TX_RING, +	PACKET_DIAG_FANOUT, + +	PACKET_DIAG_MAX, +}; + +struct packet_diag_info { +	__u32	pdi_index; +	__u32	pdi_version; +	__u32	pdi_reserve; +	__u32	pdi_copy_thresh; +	__u32	pdi_tstamp; +	__u32	pdi_flags; + +#define PDI_RUNNING	0x1 +#define PDI_AUXDATA	0x2 +#define PDI_ORIGDEV	0x4 +#define PDI_VNETHDR	0x8 +#define PDI_LOSS	0x10 +}; + +struct packet_diag_mclist { +	__u32	pdmc_index; +	__u32	pdmc_count; +	__u16	pdmc_type; +	__u16	pdmc_alen; +	__u8	pdmc_addr[MAX_ADDR_LEN]; +}; + +struct packet_diag_ring { +	__u32	pdr_block_size; +	__u32	pdr_block_nr; +	__u32	pdr_frame_size; +	__u32	pdr_frame_nr; +	__u32	pdr_retire_tmo; +	__u32	pdr_sizeof_priv; +	__u32	pdr_features; +}; + +#endif diff --git a/include/uapi/linux/param.h b/include/uapi/linux/param.h new file mode 100644 index 00000000000..092e92f67b5 --- /dev/null +++ b/include/uapi/linux/param.h @@ -0,0 +1,6 @@ +#ifndef _LINUX_PARAM_H +#define _LINUX_PARAM_H + +#include <asm/param.h> + +#endif diff --git a/include/uapi/linux/parport.h b/include/uapi/linux/parport.h new file mode 100644 index 00000000000..f41388f88dc --- /dev/null +++ b/include/uapi/linux/parport.h @@ -0,0 +1,95 @@ +/* + * Any part of this program may be used in documents licensed under + * the GNU Free Documentation License, Version 1.1 or any later version + * published by the Free Software Foundation. + */ + +#ifndef _UAPI_PARPORT_H_ +#define _UAPI_PARPORT_H_ + +/* Start off with user-visible constants */ + +/* Maximum of 16 ports per machine */ +#define PARPORT_MAX  16 + +/* Magic numbers */ +#define PARPORT_IRQ_NONE  -1 +#define PARPORT_DMA_NONE  -1 +#define PARPORT_IRQ_AUTO  -2 +#define PARPORT_DMA_AUTO  -2 +#define PARPORT_DMA_NOFIFO -3 +#define PARPORT_DISABLE   -2 +#define PARPORT_IRQ_PROBEONLY -3 +#define PARPORT_IOHI_AUTO -1 + +#define PARPORT_CONTROL_STROBE    0x1 +#define PARPORT_CONTROL_AUTOFD    0x2 +#define PARPORT_CONTROL_INIT      0x4 +#define PARPORT_CONTROL_SELECT    0x8 + +#define PARPORT_STATUS_ERROR      0x8 +#define PARPORT_STATUS_SELECT     0x10 +#define PARPORT_STATUS_PAPEROUT   0x20 +#define PARPORT_STATUS_ACK        0x40 +#define PARPORT_STATUS_BUSY       0x80 + +/* Type classes for Plug-and-Play probe.  */ +typedef enum { +	PARPORT_CLASS_LEGACY = 0,       /* Non-IEEE1284 device */ +	PARPORT_CLASS_PRINTER, +	PARPORT_CLASS_MODEM, +	PARPORT_CLASS_NET, +	PARPORT_CLASS_HDC,              /* Hard disk controller */ +	PARPORT_CLASS_PCMCIA, +	PARPORT_CLASS_MEDIA,            /* Multimedia device */ +	PARPORT_CLASS_FDC,              /* Floppy disk controller */ +	PARPORT_CLASS_PORTS, +	PARPORT_CLASS_SCANNER, +	PARPORT_CLASS_DIGCAM, +	PARPORT_CLASS_OTHER,            /* Anything else */ +	PARPORT_CLASS_UNSPEC,           /* No CLS field in ID */ +	PARPORT_CLASS_SCSIADAPTER +} parport_device_class; + +/* The "modes" entry in parport is a bit field representing the +   capabilities of the hardware. */ +#define PARPORT_MODE_PCSPP	(1<<0) /* IBM PC registers available. */ +#define PARPORT_MODE_TRISTATE	(1<<1) /* Can tristate. */ +#define PARPORT_MODE_EPP	(1<<2) /* Hardware EPP. */ +#define PARPORT_MODE_ECP	(1<<3) /* Hardware ECP. */ +#define PARPORT_MODE_COMPAT	(1<<4) /* Hardware 'printer protocol'. */ +#define PARPORT_MODE_DMA	(1<<5) /* Hardware can DMA. */ +#define PARPORT_MODE_SAFEININT	(1<<6) /* SPP registers accessible in IRQ. */ + +/* IEEE1284 modes:  +   Nibble mode, byte mode, ECP, ECPRLE and EPP are their own +   'extensibility request' values.  Others are special. +   'Real' ECP modes must have the IEEE1284_MODE_ECP bit set.  */ +#define IEEE1284_MODE_NIBBLE             0 +#define IEEE1284_MODE_BYTE              (1<<0) +#define IEEE1284_MODE_COMPAT            (1<<8) +#define IEEE1284_MODE_BECP              (1<<9) /* Bounded ECP mode */ +#define IEEE1284_MODE_ECP               (1<<4) +#define IEEE1284_MODE_ECPRLE            (IEEE1284_MODE_ECP | (1<<5)) +#define IEEE1284_MODE_ECPSWE            (1<<10) /* Software-emulated */ +#define IEEE1284_MODE_EPP               (1<<6) +#define IEEE1284_MODE_EPPSL             (1<<11) /* EPP 1.7 */ +#define IEEE1284_MODE_EPPSWE            (1<<12) /* Software-emulated */ +#define IEEE1284_DEVICEID               (1<<2)  /* This is a flag */ +#define IEEE1284_EXT_LINK               (1<<14) /* This flag causes the +						 * extensibility link to +						 * be requested, using +						 * bits 0-6. */ + +/* For the benefit of parport_read/write, you can use these with + * parport_negotiate to use address operations.  They have no effect + * other than to make parport_read/write use address transfers. */ +#define IEEE1284_ADDR			(1<<13)	/* This is a flag */ +#define IEEE1284_DATA			 0	/* So is this */ + +/* Flags for block transfer operations. */ +#define PARPORT_EPP_FAST		(1<<0) /* Unreliable counts. */ +#define PARPORT_W91284PIC		(1<<1) /* have a Warp9 w91284pic in the device */ + +/* The rest is for the kernel only */ +#endif /* _UAPI_PARPORT_H_ */ diff --git a/include/uapi/linux/patchkey.h b/include/uapi/linux/patchkey.h new file mode 100644 index 00000000000..1bda0e56bc5 --- /dev/null +++ b/include/uapi/linux/patchkey.h @@ -0,0 +1,37 @@ +/* + * <linux/patchkey.h> -- definition of _PATCHKEY macro + * + * Copyright (C) 2005 Stuart Brady + * + * This exists because awe_voice.h defined its own _PATCHKEY and it wasn't + * clear whether removing this would break anything in userspace. + * + * Do not include this file directly.  Please use <sys/soundcard.h> instead. + * For kernel code, use <linux/soundcard.h> + */ + +#ifndef _LINUX_PATCHKEY_H_INDIRECT +#error "patchkey.h included directly" +#endif + +#ifndef _UAPI_LINUX_PATCHKEY_H +#define _UAPI_LINUX_PATCHKEY_H + +/* Endian macros. */ +#ifndef __KERNEL__ +#  include <endian.h> +#endif + +#if !defined(__KERNEL__) +#if defined(__BYTE_ORDER) +#  if __BYTE_ORDER == __BIG_ENDIAN +#    define _PATCHKEY(id) (0xfd00|id) +#  elif __BYTE_ORDER == __LITTLE_ENDIAN +#    define _PATCHKEY(id) ((id<<8)|0x00fd) +#  else +#    error "could not determine byte order" +#  endif +#endif +#endif + +#endif /* _UAPI_LINUX_PATCHKEY_H */ diff --git a/include/uapi/linux/pci.h b/include/uapi/linux/pci.h new file mode 100644 index 00000000000..3c292bc0d1c --- /dev/null +++ b/include/uapi/linux/pci.h @@ -0,0 +1,41 @@ +/* + *	pci.h + * + *	PCI defines and function prototypes + *	Copyright 1994, Drew Eckhardt + *	Copyright 1997--1999 Martin Mares <mj@ucw.cz> + * + *	For more information, please consult the following manuals (look at + *	http://www.pcisig.com/ for how to get them): + * + *	PCI BIOS Specification + *	PCI Local Bus Specification + *	PCI to PCI Bridge Specification + *	PCI System Design Guide + */ + +#ifndef _UAPILINUX_PCI_H +#define _UAPILINUX_PCI_H + +#include <linux/pci_regs.h>	/* The pci register defines */ + +/* + * The PCI interface treats multi-function devices as independent + * devices.  The slot/function address of each device is encoded + * in a single byte as follows: + * + *	7:3 = slot + *	2:0 = function + */ +#define PCI_DEVFN(slot, func)	((((slot) & 0x1f) << 3) | ((func) & 0x07)) +#define PCI_SLOT(devfn)		(((devfn) >> 3) & 0x1f) +#define PCI_FUNC(devfn)		((devfn) & 0x07) + +/* Ioctls for /proc/bus/pci/X/Y nodes. */ +#define PCIIOC_BASE		('P' << 24 | 'C' << 16 | 'I' << 8) +#define PCIIOC_CONTROLLER	(PCIIOC_BASE | 0x00)	/* Get controller for PCI device. */ +#define PCIIOC_MMAP_IS_IO	(PCIIOC_BASE | 0x01)	/* Set mmap state to I/O space. */ +#define PCIIOC_MMAP_IS_MEM	(PCIIOC_BASE | 0x02)	/* Set mmap state to MEM space. */ +#define PCIIOC_WRITE_COMBINE	(PCIIOC_BASE | 0x03)	/* Enable/disable write-combining. */ + +#endif /* _UAPILINUX_PCI_H */ diff --git a/include/uapi/linux/pci_regs.h b/include/uapi/linux/pci_regs.h new file mode 100644 index 00000000000..20ae747ddf3 --- /dev/null +++ b/include/uapi/linux/pci_regs.h @@ -0,0 +1,846 @@ +/* + *	pci_regs.h + * + *	PCI standard defines + *	Copyright 1994, Drew Eckhardt + *	Copyright 1997--1999 Martin Mares <mj@ucw.cz> + * + *	For more information, please consult the following manuals (look at + *	http://www.pcisig.com/ for how to get them): + * + *	PCI BIOS Specification + *	PCI Local Bus Specification + *	PCI to PCI Bridge Specification + *	PCI System Design Guide + * + * 	For hypertransport information, please consult the following manuals + * 	from http://www.hypertransport.org + * + *	The Hypertransport I/O Link Specification + */ + +#ifndef LINUX_PCI_REGS_H +#define LINUX_PCI_REGS_H + +/* + * Under PCI, each device has 256 bytes of configuration address space, + * of which the first 64 bytes are standardized as follows: + */ +#define PCI_STD_HEADER_SIZEOF	64 +#define PCI_VENDOR_ID		0x00	/* 16 bits */ +#define PCI_DEVICE_ID		0x02	/* 16 bits */ +#define PCI_COMMAND		0x04	/* 16 bits */ +#define  PCI_COMMAND_IO		0x1	/* Enable response in I/O space */ +#define  PCI_COMMAND_MEMORY	0x2	/* Enable response in Memory space */ +#define  PCI_COMMAND_MASTER	0x4	/* Enable bus mastering */ +#define  PCI_COMMAND_SPECIAL	0x8	/* Enable response to special cycles */ +#define  PCI_COMMAND_INVALIDATE	0x10	/* Use memory write and invalidate */ +#define  PCI_COMMAND_VGA_PALETTE 0x20	/* Enable palette snooping */ +#define  PCI_COMMAND_PARITY	0x40	/* Enable parity checking */ +#define  PCI_COMMAND_WAIT 	0x80	/* Enable address/data stepping */ +#define  PCI_COMMAND_SERR	0x100	/* Enable SERR */ +#define  PCI_COMMAND_FAST_BACK	0x200	/* Enable back-to-back writes */ +#define  PCI_COMMAND_INTX_DISABLE 0x400 /* INTx Emulation Disable */ + +#define PCI_STATUS		0x06	/* 16 bits */ +#define  PCI_STATUS_INTERRUPT	0x08	/* Interrupt status */ +#define  PCI_STATUS_CAP_LIST	0x10	/* Support Capability List */ +#define  PCI_STATUS_66MHZ	0x20	/* Support 66 Mhz PCI 2.1 bus */ +#define  PCI_STATUS_UDF		0x40	/* Support User Definable Features [obsolete] */ +#define  PCI_STATUS_FAST_BACK	0x80	/* Accept fast-back to back */ +#define  PCI_STATUS_PARITY	0x100	/* Detected parity error */ +#define  PCI_STATUS_DEVSEL_MASK	0x600	/* DEVSEL timing */ +#define  PCI_STATUS_DEVSEL_FAST		0x000 +#define  PCI_STATUS_DEVSEL_MEDIUM	0x200 +#define  PCI_STATUS_DEVSEL_SLOW		0x400 +#define  PCI_STATUS_SIG_TARGET_ABORT	0x800 /* Set on target abort */ +#define  PCI_STATUS_REC_TARGET_ABORT	0x1000 /* Master ack of " */ +#define  PCI_STATUS_REC_MASTER_ABORT	0x2000 /* Set on master abort */ +#define  PCI_STATUS_SIG_SYSTEM_ERROR	0x4000 /* Set when we drive SERR */ +#define  PCI_STATUS_DETECTED_PARITY	0x8000 /* Set on parity error */ + +#define PCI_CLASS_REVISION	0x08	/* High 24 bits are class, low 8 revision */ +#define PCI_REVISION_ID		0x08	/* Revision ID */ +#define PCI_CLASS_PROG		0x09	/* Reg. Level Programming Interface */ +#define PCI_CLASS_DEVICE	0x0a	/* Device class */ + +#define PCI_CACHE_LINE_SIZE	0x0c	/* 8 bits */ +#define PCI_LATENCY_TIMER	0x0d	/* 8 bits */ +#define PCI_HEADER_TYPE		0x0e	/* 8 bits */ +#define  PCI_HEADER_TYPE_NORMAL		0 +#define  PCI_HEADER_TYPE_BRIDGE		1 +#define  PCI_HEADER_TYPE_CARDBUS	2 + +#define PCI_BIST		0x0f	/* 8 bits */ +#define  PCI_BIST_CODE_MASK	0x0f	/* Return result */ +#define  PCI_BIST_START		0x40	/* 1 to start BIST, 2 secs or less */ +#define  PCI_BIST_CAPABLE	0x80	/* 1 if BIST capable */ + +/* + * Base addresses specify locations in memory or I/O space. + * Decoded size can be determined by writing a value of + * 0xffffffff to the register, and reading it back.  Only + * 1 bits are decoded. + */ +#define PCI_BASE_ADDRESS_0	0x10	/* 32 bits */ +#define PCI_BASE_ADDRESS_1	0x14	/* 32 bits [htype 0,1 only] */ +#define PCI_BASE_ADDRESS_2	0x18	/* 32 bits [htype 0 only] */ +#define PCI_BASE_ADDRESS_3	0x1c	/* 32 bits */ +#define PCI_BASE_ADDRESS_4	0x20	/* 32 bits */ +#define PCI_BASE_ADDRESS_5	0x24	/* 32 bits */ +#define  PCI_BASE_ADDRESS_SPACE		0x01	/* 0 = memory, 1 = I/O */ +#define  PCI_BASE_ADDRESS_SPACE_IO	0x01 +#define  PCI_BASE_ADDRESS_SPACE_MEMORY	0x00 +#define  PCI_BASE_ADDRESS_MEM_TYPE_MASK	0x06 +#define  PCI_BASE_ADDRESS_MEM_TYPE_32	0x00	/* 32 bit address */ +#define  PCI_BASE_ADDRESS_MEM_TYPE_1M	0x02	/* Below 1M [obsolete] */ +#define  PCI_BASE_ADDRESS_MEM_TYPE_64	0x04	/* 64 bit address */ +#define  PCI_BASE_ADDRESS_MEM_PREFETCH	0x08	/* prefetchable? */ +#define  PCI_BASE_ADDRESS_MEM_MASK	(~0x0fUL) +#define  PCI_BASE_ADDRESS_IO_MASK	(~0x03UL) +/* bit 1 is reserved if address_space = 1 */ + +/* Header type 0 (normal devices) */ +#define PCI_CARDBUS_CIS		0x28 +#define PCI_SUBSYSTEM_VENDOR_ID	0x2c +#define PCI_SUBSYSTEM_ID	0x2e +#define PCI_ROM_ADDRESS		0x30	/* Bits 31..11 are address, 10..1 reserved */ +#define  PCI_ROM_ADDRESS_ENABLE	0x01 +#define PCI_ROM_ADDRESS_MASK	(~0x7ffUL) + +#define PCI_CAPABILITY_LIST	0x34	/* Offset of first capability list entry */ + +/* 0x35-0x3b are reserved */ +#define PCI_INTERRUPT_LINE	0x3c	/* 8 bits */ +#define PCI_INTERRUPT_PIN	0x3d	/* 8 bits */ +#define PCI_MIN_GNT		0x3e	/* 8 bits */ +#define PCI_MAX_LAT		0x3f	/* 8 bits */ + +/* Header type 1 (PCI-to-PCI bridges) */ +#define PCI_PRIMARY_BUS		0x18	/* Primary bus number */ +#define PCI_SECONDARY_BUS	0x19	/* Secondary bus number */ +#define PCI_SUBORDINATE_BUS	0x1a	/* Highest bus number behind the bridge */ +#define PCI_SEC_LATENCY_TIMER	0x1b	/* Latency timer for secondary interface */ +#define PCI_IO_BASE		0x1c	/* I/O range behind the bridge */ +#define PCI_IO_LIMIT		0x1d +#define  PCI_IO_RANGE_TYPE_MASK	0x0fUL	/* I/O bridging type */ +#define  PCI_IO_RANGE_TYPE_16	0x00 +#define  PCI_IO_RANGE_TYPE_32	0x01 +#define  PCI_IO_RANGE_MASK	(~0x0fUL) /* Standard 4K I/O windows */ +#define  PCI_IO_1K_RANGE_MASK	(~0x03UL) /* Intel 1K I/O windows */ +#define PCI_SEC_STATUS		0x1e	/* Secondary status register, only bit 14 used */ +#define PCI_MEMORY_BASE		0x20	/* Memory range behind */ +#define PCI_MEMORY_LIMIT	0x22 +#define  PCI_MEMORY_RANGE_TYPE_MASK 0x0fUL +#define  PCI_MEMORY_RANGE_MASK	(~0x0fUL) +#define PCI_PREF_MEMORY_BASE	0x24	/* Prefetchable memory range behind */ +#define PCI_PREF_MEMORY_LIMIT	0x26 +#define  PCI_PREF_RANGE_TYPE_MASK 0x0fUL +#define  PCI_PREF_RANGE_TYPE_32	0x00 +#define  PCI_PREF_RANGE_TYPE_64	0x01 +#define  PCI_PREF_RANGE_MASK	(~0x0fUL) +#define PCI_PREF_BASE_UPPER32	0x28	/* Upper half of prefetchable memory range */ +#define PCI_PREF_LIMIT_UPPER32	0x2c +#define PCI_IO_BASE_UPPER16	0x30	/* Upper half of I/O addresses */ +#define PCI_IO_LIMIT_UPPER16	0x32 +/* 0x34 same as for htype 0 */ +/* 0x35-0x3b is reserved */ +#define PCI_ROM_ADDRESS1	0x38	/* Same as PCI_ROM_ADDRESS, but for htype 1 */ +/* 0x3c-0x3d are same as for htype 0 */ +#define PCI_BRIDGE_CONTROL	0x3e +#define  PCI_BRIDGE_CTL_PARITY	0x01	/* Enable parity detection on secondary interface */ +#define  PCI_BRIDGE_CTL_SERR	0x02	/* The same for SERR forwarding */ +#define  PCI_BRIDGE_CTL_ISA	0x04	/* Enable ISA mode */ +#define  PCI_BRIDGE_CTL_VGA	0x08	/* Forward VGA addresses */ +#define  PCI_BRIDGE_CTL_MASTER_ABORT	0x20  /* Report master aborts */ +#define  PCI_BRIDGE_CTL_BUS_RESET	0x40	/* Secondary bus reset */ +#define  PCI_BRIDGE_CTL_FAST_BACK	0x80	/* Fast Back2Back enabled on secondary interface */ + +/* Header type 2 (CardBus bridges) */ +#define PCI_CB_CAPABILITY_LIST	0x14 +/* 0x15 reserved */ +#define PCI_CB_SEC_STATUS	0x16	/* Secondary status */ +#define PCI_CB_PRIMARY_BUS	0x18	/* PCI bus number */ +#define PCI_CB_CARD_BUS		0x19	/* CardBus bus number */ +#define PCI_CB_SUBORDINATE_BUS	0x1a	/* Subordinate bus number */ +#define PCI_CB_LATENCY_TIMER	0x1b	/* CardBus latency timer */ +#define PCI_CB_MEMORY_BASE_0	0x1c +#define PCI_CB_MEMORY_LIMIT_0	0x20 +#define PCI_CB_MEMORY_BASE_1	0x24 +#define PCI_CB_MEMORY_LIMIT_1	0x28 +#define PCI_CB_IO_BASE_0	0x2c +#define PCI_CB_IO_BASE_0_HI	0x2e +#define PCI_CB_IO_LIMIT_0	0x30 +#define PCI_CB_IO_LIMIT_0_HI	0x32 +#define PCI_CB_IO_BASE_1	0x34 +#define PCI_CB_IO_BASE_1_HI	0x36 +#define PCI_CB_IO_LIMIT_1	0x38 +#define PCI_CB_IO_LIMIT_1_HI	0x3a +#define  PCI_CB_IO_RANGE_MASK	(~0x03UL) +/* 0x3c-0x3d are same as for htype 0 */ +#define PCI_CB_BRIDGE_CONTROL	0x3e +#define  PCI_CB_BRIDGE_CTL_PARITY	0x01	/* Similar to standard bridge control register */ +#define  PCI_CB_BRIDGE_CTL_SERR		0x02 +#define  PCI_CB_BRIDGE_CTL_ISA		0x04 +#define  PCI_CB_BRIDGE_CTL_VGA		0x08 +#define  PCI_CB_BRIDGE_CTL_MASTER_ABORT	0x20 +#define  PCI_CB_BRIDGE_CTL_CB_RESET	0x40	/* CardBus reset */ +#define  PCI_CB_BRIDGE_CTL_16BIT_INT	0x80	/* Enable interrupt for 16-bit cards */ +#define  PCI_CB_BRIDGE_CTL_PREFETCH_MEM0 0x100	/* Prefetch enable for both memory regions */ +#define  PCI_CB_BRIDGE_CTL_PREFETCH_MEM1 0x200 +#define  PCI_CB_BRIDGE_CTL_POST_WRITES	0x400 +#define PCI_CB_SUBSYSTEM_VENDOR_ID	0x40 +#define PCI_CB_SUBSYSTEM_ID		0x42 +#define PCI_CB_LEGACY_MODE_BASE		0x44	/* 16-bit PC Card legacy mode base address (ExCa) */ +/* 0x48-0x7f reserved */ + +/* Capability lists */ + +#define PCI_CAP_LIST_ID		0	/* Capability ID */ +#define  PCI_CAP_ID_PM		0x01	/* Power Management */ +#define  PCI_CAP_ID_AGP		0x02	/* Accelerated Graphics Port */ +#define  PCI_CAP_ID_VPD		0x03	/* Vital Product Data */ +#define  PCI_CAP_ID_SLOTID	0x04	/* Slot Identification */ +#define  PCI_CAP_ID_MSI		0x05	/* Message Signalled Interrupts */ +#define  PCI_CAP_ID_CHSWP	0x06	/* CompactPCI HotSwap */ +#define  PCI_CAP_ID_PCIX	0x07	/* PCI-X */ +#define  PCI_CAP_ID_HT		0x08	/* HyperTransport */ +#define  PCI_CAP_ID_VNDR	0x09	/* Vendor specific */ +#define  PCI_CAP_ID_DBG		0x0A	/* Debug port */ +#define  PCI_CAP_ID_CCRC	0x0B	/* CompactPCI Central Resource Control */ +#define  PCI_CAP_ID_SHPC 	0x0C	/* PCI Standard Hot-Plug Controller */ +#define  PCI_CAP_ID_SSVID	0x0D	/* Bridge subsystem vendor/device ID */ +#define  PCI_CAP_ID_AGP3	0x0E	/* AGP Target PCI-PCI bridge */ +#define  PCI_CAP_ID_SECDEV	0x0F	/* Secure Device */ +#define  PCI_CAP_ID_EXP 	0x10	/* PCI Express */ +#define  PCI_CAP_ID_MSIX	0x11	/* MSI-X */ +#define  PCI_CAP_ID_SATA	0x12	/* SATA Data/Index Conf. */ +#define  PCI_CAP_ID_AF		0x13	/* PCI Advanced Features */ +#define  PCI_CAP_ID_MAX		PCI_CAP_ID_AF +#define PCI_CAP_LIST_NEXT	1	/* Next capability in the list */ +#define PCI_CAP_FLAGS		2	/* Capability defined flags (16 bits) */ +#define PCI_CAP_SIZEOF		4 + +/* Power Management Registers */ + +#define PCI_PM_PMC		2	/* PM Capabilities Register */ +#define  PCI_PM_CAP_VER_MASK	0x0007	/* Version */ +#define  PCI_PM_CAP_PME_CLOCK	0x0008	/* PME clock required */ +#define  PCI_PM_CAP_RESERVED    0x0010  /* Reserved field */ +#define  PCI_PM_CAP_DSI		0x0020	/* Device specific initialization */ +#define  PCI_PM_CAP_AUX_POWER	0x01C0	/* Auxiliary power support mask */ +#define  PCI_PM_CAP_D1		0x0200	/* D1 power state support */ +#define  PCI_PM_CAP_D2		0x0400	/* D2 power state support */ +#define  PCI_PM_CAP_PME		0x0800	/* PME pin supported */ +#define  PCI_PM_CAP_PME_MASK	0xF800	/* PME Mask of all supported states */ +#define  PCI_PM_CAP_PME_D0	0x0800	/* PME# from D0 */ +#define  PCI_PM_CAP_PME_D1	0x1000	/* PME# from D1 */ +#define  PCI_PM_CAP_PME_D2	0x2000	/* PME# from D2 */ +#define  PCI_PM_CAP_PME_D3	0x4000	/* PME# from D3 (hot) */ +#define  PCI_PM_CAP_PME_D3cold	0x8000	/* PME# from D3 (cold) */ +#define  PCI_PM_CAP_PME_SHIFT	11	/* Start of the PME Mask in PMC */ +#define PCI_PM_CTRL		4	/* PM control and status register */ +#define  PCI_PM_CTRL_STATE_MASK	0x0003	/* Current power state (D0 to D3) */ +#define  PCI_PM_CTRL_NO_SOFT_RESET	0x0008	/* No reset for D3hot->D0 */ +#define  PCI_PM_CTRL_PME_ENABLE	0x0100	/* PME pin enable */ +#define  PCI_PM_CTRL_DATA_SEL_MASK	0x1e00	/* Data select (??) */ +#define  PCI_PM_CTRL_DATA_SCALE_MASK	0x6000	/* Data scale (??) */ +#define  PCI_PM_CTRL_PME_STATUS	0x8000	/* PME pin status */ +#define PCI_PM_PPB_EXTENSIONS	6	/* PPB support extensions (??) */ +#define  PCI_PM_PPB_B2_B3	0x40	/* Stop clock when in D3hot (??) */ +#define  PCI_PM_BPCC_ENABLE	0x80	/* Bus power/clock control enable (??) */ +#define PCI_PM_DATA_REGISTER	7	/* (??) */ +#define PCI_PM_SIZEOF		8 + +/* AGP registers */ + +#define PCI_AGP_VERSION		2	/* BCD version number */ +#define PCI_AGP_RFU		3	/* Rest of capability flags */ +#define PCI_AGP_STATUS		4	/* Status register */ +#define  PCI_AGP_STATUS_RQ_MASK	0xff000000	/* Maximum number of requests - 1 */ +#define  PCI_AGP_STATUS_SBA	0x0200	/* Sideband addressing supported */ +#define  PCI_AGP_STATUS_64BIT	0x0020	/* 64-bit addressing supported */ +#define  PCI_AGP_STATUS_FW	0x0010	/* FW transfers supported */ +#define  PCI_AGP_STATUS_RATE4	0x0004	/* 4x transfer rate supported */ +#define  PCI_AGP_STATUS_RATE2	0x0002	/* 2x transfer rate supported */ +#define  PCI_AGP_STATUS_RATE1	0x0001	/* 1x transfer rate supported */ +#define PCI_AGP_COMMAND		8	/* Control register */ +#define  PCI_AGP_COMMAND_RQ_MASK 0xff000000  /* Master: Maximum number of requests */ +#define  PCI_AGP_COMMAND_SBA	0x0200	/* Sideband addressing enabled */ +#define  PCI_AGP_COMMAND_AGP	0x0100	/* Allow processing of AGP transactions */ +#define  PCI_AGP_COMMAND_64BIT	0x0020 	/* Allow processing of 64-bit addresses */ +#define  PCI_AGP_COMMAND_FW	0x0010 	/* Force FW transfers */ +#define  PCI_AGP_COMMAND_RATE4	0x0004	/* Use 4x rate */ +#define  PCI_AGP_COMMAND_RATE2	0x0002	/* Use 2x rate */ +#define  PCI_AGP_COMMAND_RATE1	0x0001	/* Use 1x rate */ +#define PCI_AGP_SIZEOF		12 + +/* Vital Product Data */ + +#define PCI_VPD_ADDR		2	/* Address to access (15 bits!) */ +#define  PCI_VPD_ADDR_MASK	0x7fff	/* Address mask */ +#define  PCI_VPD_ADDR_F		0x8000	/* Write 0, 1 indicates completion */ +#define PCI_VPD_DATA		4	/* 32-bits of data returned here */ +#define PCI_CAP_VPD_SIZEOF	8 + +/* Slot Identification */ + +#define PCI_SID_ESR		2	/* Expansion Slot Register */ +#define  PCI_SID_ESR_NSLOTS	0x1f	/* Number of expansion slots available */ +#define  PCI_SID_ESR_FIC	0x20	/* First In Chassis Flag */ +#define PCI_SID_CHASSIS_NR	3	/* Chassis Number */ + +/* Message Signalled Interrupts registers */ + +#define PCI_MSI_FLAGS		2	/* Various flags */ +#define  PCI_MSI_FLAGS_64BIT	0x80	/* 64-bit addresses allowed */ +#define  PCI_MSI_FLAGS_QSIZE	0x70	/* Message queue size configured */ +#define  PCI_MSI_FLAGS_QMASK	0x0e	/* Maximum queue size available */ +#define  PCI_MSI_FLAGS_ENABLE	0x01	/* MSI feature enabled */ +#define  PCI_MSI_FLAGS_MASKBIT	0x100	/* 64-bit mask bits allowed */ +#define PCI_MSI_RFU		3	/* Rest of capability flags */ +#define PCI_MSI_ADDRESS_LO	4	/* Lower 32 bits */ +#define PCI_MSI_ADDRESS_HI	8	/* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */ +#define PCI_MSI_DATA_32		8	/* 16 bits of data for 32-bit devices */ +#define PCI_MSI_MASK_32		12	/* Mask bits register for 32-bit devices */ +#define PCI_MSI_PENDING_32	16	/* Pending intrs for 32-bit devices */ +#define PCI_MSI_DATA_64		12	/* 16 bits of data for 64-bit devices */ +#define PCI_MSI_MASK_64		16	/* Mask bits register for 64-bit devices */ +#define PCI_MSI_PENDING_64	20	/* Pending intrs for 64-bit devices */ + +/* MSI-X registers */ +#define PCI_MSIX_FLAGS		2 +#define  PCI_MSIX_FLAGS_QSIZE	0x7FF +#define  PCI_MSIX_FLAGS_ENABLE	(1 << 15) +#define  PCI_MSIX_FLAGS_MASKALL	(1 << 14) +#define PCI_MSIX_TABLE		4 +#define PCI_MSIX_PBA		8 +#define  PCI_MSIX_FLAGS_BIRMASK	(7 << 0) +#define PCI_CAP_MSIX_SIZEOF	12	/* size of MSIX registers */ + +/* MSI-X entry's format */ +#define PCI_MSIX_ENTRY_SIZE		16 +#define  PCI_MSIX_ENTRY_LOWER_ADDR	0 +#define  PCI_MSIX_ENTRY_UPPER_ADDR	4 +#define  PCI_MSIX_ENTRY_DATA		8 +#define  PCI_MSIX_ENTRY_VECTOR_CTRL	12 +#define   PCI_MSIX_ENTRY_CTRL_MASKBIT	1 + +/* CompactPCI Hotswap Register */ + +#define PCI_CHSWP_CSR		2	/* Control and Status Register */ +#define  PCI_CHSWP_DHA		0x01	/* Device Hiding Arm */ +#define  PCI_CHSWP_EIM		0x02	/* ENUM# Signal Mask */ +#define  PCI_CHSWP_PIE		0x04	/* Pending Insert or Extract */ +#define  PCI_CHSWP_LOO		0x08	/* LED On / Off */ +#define  PCI_CHSWP_PI		0x30	/* Programming Interface */ +#define  PCI_CHSWP_EXT		0x40	/* ENUM# status - extraction */ +#define  PCI_CHSWP_INS		0x80	/* ENUM# status - insertion */ + +/* PCI Advanced Feature registers */ + +#define PCI_AF_LENGTH		2 +#define PCI_AF_CAP		3 +#define  PCI_AF_CAP_TP		0x01 +#define  PCI_AF_CAP_FLR		0x02 +#define PCI_AF_CTRL		4 +#define  PCI_AF_CTRL_FLR	0x01 +#define PCI_AF_STATUS		5 +#define  PCI_AF_STATUS_TP	0x01 +#define PCI_CAP_AF_SIZEOF	6	/* size of AF registers */ + +/* PCI-X registers */ + +#define PCI_X_CMD		2	/* Modes & Features */ +#define  PCI_X_CMD_DPERR_E	0x0001	/* Data Parity Error Recovery Enable */ +#define  PCI_X_CMD_ERO		0x0002	/* Enable Relaxed Ordering */ +#define  PCI_X_CMD_READ_512	0x0000	/* 512 byte maximum read byte count */ +#define  PCI_X_CMD_READ_1K	0x0004	/* 1Kbyte maximum read byte count */ +#define  PCI_X_CMD_READ_2K	0x0008	/* 2Kbyte maximum read byte count */ +#define  PCI_X_CMD_READ_4K	0x000c	/* 4Kbyte maximum read byte count */ +#define  PCI_X_CMD_MAX_READ	0x000c	/* Max Memory Read Byte Count */ +				/* Max # of outstanding split transactions */ +#define  PCI_X_CMD_SPLIT_1	0x0000	/* Max 1 */ +#define  PCI_X_CMD_SPLIT_2	0x0010	/* Max 2 */ +#define  PCI_X_CMD_SPLIT_3	0x0020	/* Max 3 */ +#define  PCI_X_CMD_SPLIT_4	0x0030	/* Max 4 */ +#define  PCI_X_CMD_SPLIT_8	0x0040	/* Max 8 */ +#define  PCI_X_CMD_SPLIT_12	0x0050	/* Max 12 */ +#define  PCI_X_CMD_SPLIT_16	0x0060	/* Max 16 */ +#define  PCI_X_CMD_SPLIT_32	0x0070	/* Max 32 */ +#define  PCI_X_CMD_MAX_SPLIT	0x0070	/* Max Outstanding Split Transactions */ +#define  PCI_X_CMD_VERSION(x) 	(((x) >> 12) & 3) /* Version */ +#define PCI_X_STATUS		4	/* PCI-X capabilities */ +#define  PCI_X_STATUS_DEVFN	0x000000ff	/* A copy of devfn */ +#define  PCI_X_STATUS_BUS	0x0000ff00	/* A copy of bus nr */ +#define  PCI_X_STATUS_64BIT	0x00010000	/* 64-bit device */ +#define  PCI_X_STATUS_133MHZ	0x00020000	/* 133 MHz capable */ +#define  PCI_X_STATUS_SPL_DISC	0x00040000	/* Split Completion Discarded */ +#define  PCI_X_STATUS_UNX_SPL	0x00080000	/* Unexpected Split Completion */ +#define  PCI_X_STATUS_COMPLEX	0x00100000	/* Device Complexity */ +#define  PCI_X_STATUS_MAX_READ	0x00600000	/* Designed Max Memory Read Count */ +#define  PCI_X_STATUS_MAX_SPLIT	0x03800000	/* Designed Max Outstanding Split Transactions */ +#define  PCI_X_STATUS_MAX_CUM	0x1c000000	/* Designed Max Cumulative Read Size */ +#define  PCI_X_STATUS_SPL_ERR	0x20000000	/* Rcvd Split Completion Error Msg */ +#define  PCI_X_STATUS_266MHZ	0x40000000	/* 266 MHz capable */ +#define  PCI_X_STATUS_533MHZ	0x80000000	/* 533 MHz capable */ +#define PCI_X_ECC_CSR		8	/* ECC control and status */ +#define PCI_CAP_PCIX_SIZEOF_V0	8	/* size of registers for Version 0 */ +#define PCI_CAP_PCIX_SIZEOF_V1	24	/* size for Version 1 */ +#define PCI_CAP_PCIX_SIZEOF_V2	PCI_CAP_PCIX_SIZEOF_V1	/* Same for v2 */ + +/* PCI Bridge Subsystem ID registers */ + +#define PCI_SSVID_VENDOR_ID     4	/* PCI-Bridge subsystem vendor id register */ +#define PCI_SSVID_DEVICE_ID     6	/* PCI-Bridge subsystem device id register */ + +/* PCI Express capability registers */ + +#define PCI_EXP_FLAGS		2	/* Capabilities register */ +#define PCI_EXP_FLAGS_VERS	0x000f	/* Capability version */ +#define PCI_EXP_FLAGS_TYPE	0x00f0	/* Device/Port type */ +#define  PCI_EXP_TYPE_ENDPOINT	0x0	/* Express Endpoint */ +#define  PCI_EXP_TYPE_LEG_END	0x1	/* Legacy Endpoint */ +#define  PCI_EXP_TYPE_ROOT_PORT 0x4	/* Root Port */ +#define  PCI_EXP_TYPE_UPSTREAM	0x5	/* Upstream Port */ +#define  PCI_EXP_TYPE_DOWNSTREAM 0x6	/* Downstream Port */ +#define  PCI_EXP_TYPE_PCI_BRIDGE 0x7	/* PCI/PCI-X Bridge */ +#define  PCI_EXP_TYPE_PCIE_BRIDGE 0x8	/* PCI/PCI-X to PCIE Bridge */ +#define  PCI_EXP_TYPE_RC_END	0x9	/* Root Complex Integrated Endpoint */ +#define  PCI_EXP_TYPE_RC_EC	0xa	/* Root Complex Event Collector */ +#define PCI_EXP_FLAGS_SLOT	0x0100	/* Slot implemented */ +#define PCI_EXP_FLAGS_IRQ	0x3e00	/* Interrupt message number */ +#define PCI_EXP_DEVCAP		4	/* Device capabilities */ +#define  PCI_EXP_DEVCAP_PAYLOAD	0x07	/* Max_Payload_Size */ +#define  PCI_EXP_DEVCAP_PHANTOM	0x18	/* Phantom functions */ +#define  PCI_EXP_DEVCAP_EXT_TAG	0x20	/* Extended tags */ +#define  PCI_EXP_DEVCAP_L0S	0x1c0	/* L0s Acceptable Latency */ +#define  PCI_EXP_DEVCAP_L1	0xe00	/* L1 Acceptable Latency */ +#define  PCI_EXP_DEVCAP_ATN_BUT	0x1000	/* Attention Button Present */ +#define  PCI_EXP_DEVCAP_ATN_IND	0x2000	/* Attention Indicator Present */ +#define  PCI_EXP_DEVCAP_PWR_IND	0x4000	/* Power Indicator Present */ +#define  PCI_EXP_DEVCAP_RBER	0x8000	/* Role-Based Error Reporting */ +#define  PCI_EXP_DEVCAP_PWR_VAL	0x3fc0000 /* Slot Power Limit Value */ +#define  PCI_EXP_DEVCAP_PWR_SCL	0xc000000 /* Slot Power Limit Scale */ +#define  PCI_EXP_DEVCAP_FLR     0x10000000 /* Function Level Reset */ +#define PCI_EXP_DEVCTL		8	/* Device Control */ +#define  PCI_EXP_DEVCTL_CERE	0x0001	/* Correctable Error Reporting En. */ +#define  PCI_EXP_DEVCTL_NFERE	0x0002	/* Non-Fatal Error Reporting Enable */ +#define  PCI_EXP_DEVCTL_FERE	0x0004	/* Fatal Error Reporting Enable */ +#define  PCI_EXP_DEVCTL_URRE	0x0008	/* Unsupported Request Reporting En. */ +#define  PCI_EXP_DEVCTL_RELAX_EN 0x0010 /* Enable relaxed ordering */ +#define  PCI_EXP_DEVCTL_PAYLOAD	0x00e0	/* Max_Payload_Size */ +#define  PCI_EXP_DEVCTL_EXT_TAG	0x0100	/* Extended Tag Field Enable */ +#define  PCI_EXP_DEVCTL_PHANTOM	0x0200	/* Phantom Functions Enable */ +#define  PCI_EXP_DEVCTL_AUX_PME	0x0400	/* Auxiliary Power PM Enable */ +#define  PCI_EXP_DEVCTL_NOSNOOP_EN 0x0800  /* Enable No Snoop */ +#define  PCI_EXP_DEVCTL_READRQ	0x7000	/* Max_Read_Request_Size */ +#define  PCI_EXP_DEVCTL_BCR_FLR 0x8000  /* Bridge Configuration Retry / FLR */ +#define PCI_EXP_DEVSTA		10	/* Device Status */ +#define  PCI_EXP_DEVSTA_CED	0x01	/* Correctable Error Detected */ +#define  PCI_EXP_DEVSTA_NFED	0x02	/* Non-Fatal Error Detected */ +#define  PCI_EXP_DEVSTA_FED	0x04	/* Fatal Error Detected */ +#define  PCI_EXP_DEVSTA_URD	0x08	/* Unsupported Request Detected */ +#define  PCI_EXP_DEVSTA_AUXPD	0x10	/* AUX Power Detected */ +#define  PCI_EXP_DEVSTA_TRPND	0x20	/* Transactions Pending */ +#define PCI_EXP_LNKCAP		12	/* Link Capabilities */ +#define  PCI_EXP_LNKCAP_SLS	0x0000000f /* Supported Link Speeds */ +#define  PCI_EXP_LNKCAP_MLW	0x000003f0 /* Maximum Link Width */ +#define  PCI_EXP_LNKCAP_ASPMS	0x00000c00 /* ASPM Support */ +#define  PCI_EXP_LNKCAP_L0SEL	0x00007000 /* L0s Exit Latency */ +#define  PCI_EXP_LNKCAP_L1EL	0x00038000 /* L1 Exit Latency */ +#define  PCI_EXP_LNKCAP_CLKPM	0x00040000 /* L1 Clock Power Management */ +#define  PCI_EXP_LNKCAP_SDERC	0x00080000 /* Surprise Down Error Reporting Capable */ +#define  PCI_EXP_LNKCAP_DLLLARC	0x00100000 /* Data Link Layer Link Active Reporting Capable */ +#define  PCI_EXP_LNKCAP_LBNC	0x00200000 /* Link Bandwidth Notification Capability */ +#define  PCI_EXP_LNKCAP_PN	0xff000000 /* Port Number */ +#define PCI_EXP_LNKCTL		16	/* Link Control */ +#define  PCI_EXP_LNKCTL_ASPMC	0x0003	/* ASPM Control */ +#define  PCI_EXP_LNKCTL_RCB	0x0008	/* Read Completion Boundary */ +#define  PCI_EXP_LNKCTL_LD	0x0010	/* Link Disable */ +#define  PCI_EXP_LNKCTL_RL	0x0020	/* Retrain Link */ +#define  PCI_EXP_LNKCTL_CCC	0x0040	/* Common Clock Configuration */ +#define  PCI_EXP_LNKCTL_ES	0x0080	/* Extended Synch */ +#define  PCI_EXP_LNKCTL_CLKREQ_EN 0x100	/* Enable clkreq */ +#define  PCI_EXP_LNKCTL_HAWD	0x0200	/* Hardware Autonomous Width Disable */ +#define  PCI_EXP_LNKCTL_LBMIE	0x0400	/* Link Bandwidth Management Interrupt Enable */ +#define  PCI_EXP_LNKCTL_LABIE	0x0800	/* Lnk Autonomous Bandwidth Interrupt Enable */ +#define PCI_EXP_LNKSTA		18	/* Link Status */ +#define  PCI_EXP_LNKSTA_CLS	0x000f	/* Current Link Speed */ +#define  PCI_EXP_LNKSTA_CLS_2_5GB 0x01	/* Current Link Speed 2.5GT/s */ +#define  PCI_EXP_LNKSTA_CLS_5_0GB 0x02	/* Current Link Speed 5.0GT/s */ +#define  PCI_EXP_LNKSTA_NLW	0x03f0	/* Nogotiated Link Width */ +#define  PCI_EXP_LNKSTA_NLW_SHIFT 4	/* start of NLW mask in link status */ +#define  PCI_EXP_LNKSTA_LT	0x0800	/* Link Training */ +#define  PCI_EXP_LNKSTA_SLC	0x1000	/* Slot Clock Configuration */ +#define  PCI_EXP_LNKSTA_DLLLA	0x2000	/* Data Link Layer Link Active */ +#define  PCI_EXP_LNKSTA_LBMS	0x4000	/* Link Bandwidth Management Status */ +#define  PCI_EXP_LNKSTA_LABS	0x8000	/* Link Autonomous Bandwidth Status */ +#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V1	20	/* v1 endpoints end here */ +#define PCI_EXP_SLTCAP		20	/* Slot Capabilities */ +#define  PCI_EXP_SLTCAP_ABP	0x00000001 /* Attention Button Present */ +#define  PCI_EXP_SLTCAP_PCP	0x00000002 /* Power Controller Present */ +#define  PCI_EXP_SLTCAP_MRLSP	0x00000004 /* MRL Sensor Present */ +#define  PCI_EXP_SLTCAP_AIP	0x00000008 /* Attention Indicator Present */ +#define  PCI_EXP_SLTCAP_PIP	0x00000010 /* Power Indicator Present */ +#define  PCI_EXP_SLTCAP_HPS	0x00000020 /* Hot-Plug Surprise */ +#define  PCI_EXP_SLTCAP_HPC	0x00000040 /* Hot-Plug Capable */ +#define  PCI_EXP_SLTCAP_SPLV	0x00007f80 /* Slot Power Limit Value */ +#define  PCI_EXP_SLTCAP_SPLS	0x00018000 /* Slot Power Limit Scale */ +#define  PCI_EXP_SLTCAP_EIP	0x00020000 /* Electromechanical Interlock Present */ +#define  PCI_EXP_SLTCAP_NCCS	0x00040000 /* No Command Completed Support */ +#define  PCI_EXP_SLTCAP_PSN	0xfff80000 /* Physical Slot Number */ +#define PCI_EXP_SLTCTL		24	/* Slot Control */ +#define  PCI_EXP_SLTCTL_ABPE	0x0001	/* Attention Button Pressed Enable */ +#define  PCI_EXP_SLTCTL_PFDE	0x0002	/* Power Fault Detected Enable */ +#define  PCI_EXP_SLTCTL_MRLSCE	0x0004	/* MRL Sensor Changed Enable */ +#define  PCI_EXP_SLTCTL_PDCE	0x0008	/* Presence Detect Changed Enable */ +#define  PCI_EXP_SLTCTL_CCIE	0x0010	/* Command Completed Interrupt Enable */ +#define  PCI_EXP_SLTCTL_HPIE	0x0020	/* Hot-Plug Interrupt Enable */ +#define  PCI_EXP_SLTCTL_AIC	0x00c0	/* Attention Indicator Control */ +#define  PCI_EXP_SLTCTL_PIC	0x0300	/* Power Indicator Control */ +#define  PCI_EXP_SLTCTL_PCC	0x0400	/* Power Controller Control */ +#define  PCI_EXP_SLTCTL_EIC	0x0800	/* Electromechanical Interlock Control */ +#define  PCI_EXP_SLTCTL_DLLSCE	0x1000	/* Data Link Layer State Changed Enable */ +#define PCI_EXP_SLTSTA		26	/* Slot Status */ +#define  PCI_EXP_SLTSTA_ABP	0x0001	/* Attention Button Pressed */ +#define  PCI_EXP_SLTSTA_PFD	0x0002	/* Power Fault Detected */ +#define  PCI_EXP_SLTSTA_MRLSC	0x0004	/* MRL Sensor Changed */ +#define  PCI_EXP_SLTSTA_PDC	0x0008	/* Presence Detect Changed */ +#define  PCI_EXP_SLTSTA_CC	0x0010	/* Command Completed */ +#define  PCI_EXP_SLTSTA_MRLSS	0x0020	/* MRL Sensor State */ +#define  PCI_EXP_SLTSTA_PDS	0x0040	/* Presence Detect State */ +#define  PCI_EXP_SLTSTA_EIS	0x0080	/* Electromechanical Interlock Status */ +#define  PCI_EXP_SLTSTA_DLLSC	0x0100	/* Data Link Layer State Changed */ +#define PCI_EXP_RTCTL		28	/* Root Control */ +#define  PCI_EXP_RTCTL_SECEE	0x01	/* System Error on Correctable Error */ +#define  PCI_EXP_RTCTL_SENFEE	0x02	/* System Error on Non-Fatal Error */ +#define  PCI_EXP_RTCTL_SEFEE	0x04	/* System Error on Fatal Error */ +#define  PCI_EXP_RTCTL_PMEIE	0x08	/* PME Interrupt Enable */ +#define  PCI_EXP_RTCTL_CRSSVE	0x10	/* CRS Software Visibility Enable */ +#define PCI_EXP_RTCAP		30	/* Root Capabilities */ +#define PCI_EXP_RTSTA		32	/* Root Status */ +#define PCI_EXP_RTSTA_PME	0x10000 /* PME status */ +#define PCI_EXP_RTSTA_PENDING	0x20000 /* PME pending */ +/* + * Note that the following PCI Express 'Capability Structure' registers + * were introduced with 'Capability Version' 0x2 (v2).  These registers + * do not exist on devices with Capability Version 1.  Use pci_pcie_cap2() + * to use these fields safely. + */ +#define PCI_EXP_DEVCAP2		36	/* Device Capabilities 2 */ +#define  PCI_EXP_DEVCAP2_ARI	0x20	/* Alternative Routing-ID */ +#define  PCI_EXP_DEVCAP2_LTR	0x800	/* Latency tolerance reporting */ +#define  PCI_EXP_OBFF_MASK	0xc0000 /* OBFF support mechanism */ +#define  PCI_EXP_OBFF_MSG	0x40000 /* New message signaling */ +#define  PCI_EXP_OBFF_WAKE	0x80000 /* Re-use WAKE# for OBFF */ +#define PCI_EXP_DEVCTL2		40	/* Device Control 2 */ +#define  PCI_EXP_DEVCTL2_ARI	0x20	/* Alternative Routing-ID */ +#define  PCI_EXP_IDO_REQ_EN	0x100	/* ID-based ordering request enable */ +#define  PCI_EXP_IDO_CMP_EN	0x200	/* ID-based ordering completion enable */ +#define  PCI_EXP_LTR_EN		0x400	/* Latency tolerance reporting */ +#define  PCI_EXP_OBFF_MSGA_EN	0x2000	/* OBFF enable with Message type A */ +#define  PCI_EXP_OBFF_MSGB_EN	0x4000	/* OBFF enable with Message type B */ +#define  PCI_EXP_OBFF_WAKE_EN	0x6000	/* OBFF using WAKE# signaling */ +#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2	44	/* v2 endpoints end here */ +#define PCI_EXP_LNKCAP2		44	/* Link Capability 2 */ +#define  PCI_EXP_LNKCAP2_SLS_2_5GB 0x01	/* Current Link Speed 2.5GT/s */ +#define  PCI_EXP_LNKCAP2_SLS_5_0GB 0x02	/* Current Link Speed 5.0GT/s */ +#define  PCI_EXP_LNKCAP2_SLS_8_0GB 0x04	/* Current Link Speed 8.0GT/s */ +#define  PCI_EXP_LNKCAP2_CROSSLINK 0x100 /* Crosslink supported */ +#define PCI_EXP_LNKCTL2		48	/* Link Control 2 */ +#define PCI_EXP_LNKSTA2		50	/* Link Status 2 */ +#define PCI_EXP_SLTCTL2		56	/* Slot Control 2 */ + +/* Extended Capabilities (PCI-X 2.0 and Express) */ +#define PCI_EXT_CAP_ID(header)		(header & 0x0000ffff) +#define PCI_EXT_CAP_VER(header)		((header >> 16) & 0xf) +#define PCI_EXT_CAP_NEXT(header)	((header >> 20) & 0xffc) + +#define PCI_EXT_CAP_ID_ERR	0x01	/* Advanced Error Reporting */ +#define PCI_EXT_CAP_ID_VC	0x02	/* Virtual Channel Capability */ +#define PCI_EXT_CAP_ID_DSN	0x03	/* Device Serial Number */ +#define PCI_EXT_CAP_ID_PWR	0x04	/* Power Budgeting */ +#define PCI_EXT_CAP_ID_RCLD	0x05	/* Root Complex Link Declaration */ +#define PCI_EXT_CAP_ID_RCILC	0x06	/* Root Complex Internal Link Control */ +#define PCI_EXT_CAP_ID_RCEC	0x07	/* Root Complex Event Collector */ +#define PCI_EXT_CAP_ID_MFVC	0x08	/* Multi-Function VC Capability */ +#define PCI_EXT_CAP_ID_VC9	0x09	/* same as _VC */ +#define PCI_EXT_CAP_ID_RCRB	0x0A	/* Root Complex RB? */ +#define PCI_EXT_CAP_ID_VNDR	0x0B	/* Vendor Specific */ +#define PCI_EXT_CAP_ID_CAC	0x0C	/* Config Access - obsolete */ +#define PCI_EXT_CAP_ID_ACS	0x0D	/* Access Control Services */ +#define PCI_EXT_CAP_ID_ARI	0x0E	/* Alternate Routing ID */ +#define PCI_EXT_CAP_ID_ATS	0x0F	/* Address Translation Services */ +#define PCI_EXT_CAP_ID_SRIOV	0x10	/* Single Root I/O Virtualization */ +#define PCI_EXT_CAP_ID_MRIOV	0x11	/* Multi Root I/O Virtualization */ +#define PCI_EXT_CAP_ID_MCAST	0x12	/* Multicast */ +#define PCI_EXT_CAP_ID_PRI	0x13	/* Page Request Interface */ +#define PCI_EXT_CAP_ID_AMD_XXX	0x14	/* reserved for AMD */ +#define PCI_EXT_CAP_ID_REBAR	0x15	/* resizable BAR */ +#define PCI_EXT_CAP_ID_DPA	0x16	/* dynamic power alloc */ +#define PCI_EXT_CAP_ID_TPH	0x17	/* TPH request */ +#define PCI_EXT_CAP_ID_LTR	0x18	/* latency tolerance reporting */ +#define PCI_EXT_CAP_ID_SECPCI	0x19	/* Secondary PCIe */ +#define PCI_EXT_CAP_ID_PMUX	0x1A	/* Protocol Multiplexing */ +#define PCI_EXT_CAP_ID_PASID	0x1B	/* Process Address Space ID */ +#define PCI_EXT_CAP_ID_MAX	PCI_EXT_CAP_ID_PASID + +#define PCI_EXT_CAP_DSN_SIZEOF	12 +#define PCI_EXT_CAP_MCAST_ENDPOINT_SIZEOF 40 + +/* Advanced Error Reporting */ +#define PCI_ERR_UNCOR_STATUS	4	/* Uncorrectable Error Status */ +#define  PCI_ERR_UNC_TRAIN	0x00000001	/* Training */ +#define  PCI_ERR_UNC_DLP	0x00000010	/* Data Link Protocol */ +#define  PCI_ERR_UNC_SURPDN	0x00000020	/* Surprise Down */ +#define  PCI_ERR_UNC_POISON_TLP	0x00001000	/* Poisoned TLP */ +#define  PCI_ERR_UNC_FCP	0x00002000	/* Flow Control Protocol */ +#define  PCI_ERR_UNC_COMP_TIME	0x00004000	/* Completion Timeout */ +#define  PCI_ERR_UNC_COMP_ABORT	0x00008000	/* Completer Abort */ +#define  PCI_ERR_UNC_UNX_COMP	0x00010000	/* Unexpected Completion */ +#define  PCI_ERR_UNC_RX_OVER	0x00020000	/* Receiver Overflow */ +#define  PCI_ERR_UNC_MALF_TLP	0x00040000	/* Malformed TLP */ +#define  PCI_ERR_UNC_ECRC	0x00080000	/* ECRC Error Status */ +#define  PCI_ERR_UNC_UNSUP	0x00100000	/* Unsupported Request */ +#define  PCI_ERR_UNC_ACSV	0x00200000	/* ACS Violation */ +#define  PCI_ERR_UNC_INTN	0x00400000	/* internal error */ +#define  PCI_ERR_UNC_MCBTLP	0x00800000	/* MC blocked TLP */ +#define  PCI_ERR_UNC_ATOMEG	0x01000000	/* Atomic egress blocked */ +#define  PCI_ERR_UNC_TLPPRE	0x02000000	/* TLP prefix blocked */ +#define PCI_ERR_UNCOR_MASK	8	/* Uncorrectable Error Mask */ +	/* Same bits as above */ +#define PCI_ERR_UNCOR_SEVER	12	/* Uncorrectable Error Severity */ +	/* Same bits as above */ +#define PCI_ERR_COR_STATUS	16	/* Correctable Error Status */ +#define  PCI_ERR_COR_RCVR	0x00000001	/* Receiver Error Status */ +#define  PCI_ERR_COR_BAD_TLP	0x00000040	/* Bad TLP Status */ +#define  PCI_ERR_COR_BAD_DLLP	0x00000080	/* Bad DLLP Status */ +#define  PCI_ERR_COR_REP_ROLL	0x00000100	/* REPLAY_NUM Rollover */ +#define  PCI_ERR_COR_REP_TIMER	0x00001000	/* Replay Timer Timeout */ +#define  PCI_ERR_COR_ADV_NFAT	0x00002000	/* Advisory Non-Fatal */ +#define  PCI_ERR_COR_INTERNAL	0x00004000	/* Corrected Internal */ +#define  PCI_ERR_COR_LOG_OVER	0x00008000	/* Header Log Overflow */ +#define PCI_ERR_COR_MASK	20	/* Correctable Error Mask */ +	/* Same bits as above */ +#define PCI_ERR_CAP		24	/* Advanced Error Capabilities */ +#define  PCI_ERR_CAP_FEP(x)	((x) & 31)	/* First Error Pointer */ +#define  PCI_ERR_CAP_ECRC_GENC	0x00000020	/* ECRC Generation Capable */ +#define  PCI_ERR_CAP_ECRC_GENE	0x00000040	/* ECRC Generation Enable */ +#define  PCI_ERR_CAP_ECRC_CHKC	0x00000080	/* ECRC Check Capable */ +#define  PCI_ERR_CAP_ECRC_CHKE	0x00000100	/* ECRC Check Enable */ +#define PCI_ERR_HEADER_LOG	28	/* Header Log Register (16 bytes) */ +#define PCI_ERR_ROOT_COMMAND	44	/* Root Error Command */ +/* Correctable Err Reporting Enable */ +#define PCI_ERR_ROOT_CMD_COR_EN		0x00000001 +/* Non-fatal Err Reporting Enable */ +#define PCI_ERR_ROOT_CMD_NONFATAL_EN	0x00000002 +/* Fatal Err Reporting Enable */ +#define PCI_ERR_ROOT_CMD_FATAL_EN	0x00000004 +#define PCI_ERR_ROOT_STATUS	48 +#define PCI_ERR_ROOT_COR_RCV		0x00000001	/* ERR_COR Received */ +/* Multi ERR_COR Received */ +#define PCI_ERR_ROOT_MULTI_COR_RCV	0x00000002 +/* ERR_FATAL/NONFATAL Recevied */ +#define PCI_ERR_ROOT_UNCOR_RCV		0x00000004 +/* Multi ERR_FATAL/NONFATAL Recevied */ +#define PCI_ERR_ROOT_MULTI_UNCOR_RCV	0x00000008 +#define PCI_ERR_ROOT_FIRST_FATAL	0x00000010	/* First Fatal */ +#define PCI_ERR_ROOT_NONFATAL_RCV	0x00000020	/* Non-Fatal Received */ +#define PCI_ERR_ROOT_FATAL_RCV		0x00000040	/* Fatal Received */ +#define PCI_ERR_ROOT_ERR_SRC	52	/* Error Source Identification */ + +/* Virtual Channel */ +#define PCI_VC_PORT_REG1	4 +#define  PCI_VC_REG1_EVCC	0x7	/* extended vc count */ +#define PCI_VC_PORT_REG2	8 +#define  PCI_VC_REG2_32_PHASE	0x2 +#define  PCI_VC_REG2_64_PHASE	0x4 +#define  PCI_VC_REG2_128_PHASE	0x8 +#define PCI_VC_PORT_CTRL	12 +#define PCI_VC_PORT_STATUS	14 +#define PCI_VC_RES_CAP		16 +#define PCI_VC_RES_CTRL		20 +#define PCI_VC_RES_STATUS	26 +#define PCI_CAP_VC_BASE_SIZEOF		0x10 +#define PCI_CAP_VC_PER_VC_SIZEOF	0x0C + +/* Power Budgeting */ +#define PCI_PWR_DSR		4	/* Data Select Register */ +#define PCI_PWR_DATA		8	/* Data Register */ +#define  PCI_PWR_DATA_BASE(x)	((x) & 0xff)	    /* Base Power */ +#define  PCI_PWR_DATA_SCALE(x)	(((x) >> 8) & 3)    /* Data Scale */ +#define  PCI_PWR_DATA_PM_SUB(x)	(((x) >> 10) & 7)   /* PM Sub State */ +#define  PCI_PWR_DATA_PM_STATE(x) (((x) >> 13) & 3) /* PM State */ +#define  PCI_PWR_DATA_TYPE(x)	(((x) >> 15) & 7)   /* Type */ +#define  PCI_PWR_DATA_RAIL(x)	(((x) >> 18) & 7)   /* Power Rail */ +#define PCI_PWR_CAP		12	/* Capability */ +#define  PCI_PWR_CAP_BUDGET(x)	((x) & 1)	/* Included in system budget */ +#define PCI_EXT_CAP_PWR_SIZEOF	16 + +/* Vendor-Specific (VSEC, PCI_EXT_CAP_ID_VNDR) */ +#define PCI_VNDR_HEADER		4	/* Vendor-Specific Header */ +#define  PCI_VNDR_HEADER_ID(x)	((x) & 0xffff) +#define  PCI_VNDR_HEADER_REV(x)	(((x) >> 16) & 0xf) +#define  PCI_VNDR_HEADER_LEN(x)	(((x) >> 20) & 0xfff) + +/* + * Hypertransport sub capability types + * + * Unfortunately there are both 3 bit and 5 bit capability types defined + * in the HT spec, catering for that is a little messy. You probably don't + * want to use these directly, just use pci_find_ht_capability() and it + * will do the right thing for you. + */ +#define HT_3BIT_CAP_MASK	0xE0 +#define HT_CAPTYPE_SLAVE	0x00	/* Slave/Primary link configuration */ +#define HT_CAPTYPE_HOST		0x20	/* Host/Secondary link configuration */ + +#define HT_5BIT_CAP_MASK	0xF8 +#define HT_CAPTYPE_IRQ		0x80	/* IRQ Configuration */ +#define HT_CAPTYPE_REMAPPING_40	0xA0	/* 40 bit address remapping */ +#define HT_CAPTYPE_REMAPPING_64 0xA2	/* 64 bit address remapping */ +#define HT_CAPTYPE_UNITID_CLUMP	0x90	/* Unit ID clumping */ +#define HT_CAPTYPE_EXTCONF	0x98	/* Extended Configuration Space Access */ +#define HT_CAPTYPE_MSI_MAPPING	0xA8	/* MSI Mapping Capability */ +#define  HT_MSI_FLAGS		0x02		/* Offset to flags */ +#define  HT_MSI_FLAGS_ENABLE	0x1		/* Mapping enable */ +#define  HT_MSI_FLAGS_FIXED	0x2		/* Fixed mapping only */ +#define  HT_MSI_FIXED_ADDR	0x00000000FEE00000ULL	/* Fixed addr */ +#define  HT_MSI_ADDR_LO		0x04		/* Offset to low addr bits */ +#define  HT_MSI_ADDR_LO_MASK	0xFFF00000	/* Low address bit mask */ +#define  HT_MSI_ADDR_HI		0x08		/* Offset to high addr bits */ +#define HT_CAPTYPE_DIRECT_ROUTE	0xB0	/* Direct routing configuration */ +#define HT_CAPTYPE_VCSET	0xB8	/* Virtual Channel configuration */ +#define HT_CAPTYPE_ERROR_RETRY	0xC0	/* Retry on error configuration */ +#define HT_CAPTYPE_GEN3		0xD0	/* Generation 3 hypertransport configuration */ +#define HT_CAPTYPE_PM		0xE0	/* Hypertransport powermanagement configuration */ +#define HT_CAP_SIZEOF_LONG	28	/* slave & primary */ +#define HT_CAP_SIZEOF_SHORT	24	/* host & secondary */ + +/* Alternative Routing-ID Interpretation */ +#define PCI_ARI_CAP		0x04	/* ARI Capability Register */ +#define  PCI_ARI_CAP_MFVC	0x0001	/* MFVC Function Groups Capability */ +#define  PCI_ARI_CAP_ACS	0x0002	/* ACS Function Groups Capability */ +#define  PCI_ARI_CAP_NFN(x)	(((x) >> 8) & 0xff) /* Next Function Number */ +#define PCI_ARI_CTRL		0x06	/* ARI Control Register */ +#define  PCI_ARI_CTRL_MFVC	0x0001	/* MFVC Function Groups Enable */ +#define  PCI_ARI_CTRL_ACS	0x0002	/* ACS Function Groups Enable */ +#define  PCI_ARI_CTRL_FG(x)	(((x) >> 4) & 7) /* Function Group */ +#define PCI_EXT_CAP_ARI_SIZEOF	8 + +/* Address Translation Service */ +#define PCI_ATS_CAP		0x04	/* ATS Capability Register */ +#define  PCI_ATS_CAP_QDEP(x)	((x) & 0x1f)	/* Invalidate Queue Depth */ +#define  PCI_ATS_MAX_QDEP	32	/* Max Invalidate Queue Depth */ +#define PCI_ATS_CTRL		0x06	/* ATS Control Register */ +#define  PCI_ATS_CTRL_ENABLE	0x8000	/* ATS Enable */ +#define  PCI_ATS_CTRL_STU(x)	((x) & 0x1f)	/* Smallest Translation Unit */ +#define  PCI_ATS_MIN_STU	12	/* shift of minimum STU block */ +#define PCI_EXT_CAP_ATS_SIZEOF	8 + +/* Page Request Interface */ +#define PCI_PRI_CTRL		0x04	/* PRI control register */ +#define  PCI_PRI_CTRL_ENABLE	0x01	/* Enable */ +#define  PCI_PRI_CTRL_RESET	0x02	/* Reset */ +#define PCI_PRI_STATUS		0x06	/* PRI status register */ +#define  PCI_PRI_STATUS_RF	0x001	/* Response Failure */ +#define  PCI_PRI_STATUS_UPRGI	0x002	/* Unexpected PRG index */ +#define  PCI_PRI_STATUS_STOPPED	0x100	/* PRI Stopped */ +#define PCI_PRI_MAX_REQ		0x08	/* PRI max reqs supported */ +#define PCI_PRI_ALLOC_REQ	0x0c	/* PRI max reqs allowed */ +#define PCI_EXT_CAP_PRI_SIZEOF	16 + +/* PASID capability */ +#define PCI_PASID_CAP		0x04    /* PASID feature register */ +#define  PCI_PASID_CAP_EXEC	0x02	/* Exec permissions Supported */ +#define  PCI_PASID_CAP_PRIV	0x04	/* Priviledge Mode Supported */ +#define PCI_PASID_CTRL		0x06    /* PASID control register */ +#define  PCI_PASID_CTRL_ENABLE	0x01	/* Enable bit */ +#define  PCI_PASID_CTRL_EXEC	0x02	/* Exec permissions Enable */ +#define  PCI_PASID_CTRL_PRIV	0x04	/* Priviledge Mode Enable */ +#define PCI_EXT_CAP_PASID_SIZEOF	8 + +/* Single Root I/O Virtualization */ +#define PCI_SRIOV_CAP		0x04	/* SR-IOV Capabilities */ +#define  PCI_SRIOV_CAP_VFM	0x01	/* VF Migration Capable */ +#define  PCI_SRIOV_CAP_INTR(x)	((x) >> 21) /* Interrupt Message Number */ +#define PCI_SRIOV_CTRL		0x08	/* SR-IOV Control */ +#define  PCI_SRIOV_CTRL_VFE	0x01	/* VF Enable */ +#define  PCI_SRIOV_CTRL_VFM	0x02	/* VF Migration Enable */ +#define  PCI_SRIOV_CTRL_INTR	0x04	/* VF Migration Interrupt Enable */ +#define  PCI_SRIOV_CTRL_MSE	0x08	/* VF Memory Space Enable */ +#define  PCI_SRIOV_CTRL_ARI	0x10	/* ARI Capable Hierarchy */ +#define PCI_SRIOV_STATUS	0x0a	/* SR-IOV Status */ +#define  PCI_SRIOV_STATUS_VFM	0x01	/* VF Migration Status */ +#define PCI_SRIOV_INITIAL_VF	0x0c	/* Initial VFs */ +#define PCI_SRIOV_TOTAL_VF	0x0e	/* Total VFs */ +#define PCI_SRIOV_NUM_VF	0x10	/* Number of VFs */ +#define PCI_SRIOV_FUNC_LINK	0x12	/* Function Dependency Link */ +#define PCI_SRIOV_VF_OFFSET	0x14	/* First VF Offset */ +#define PCI_SRIOV_VF_STRIDE	0x16	/* Following VF Stride */ +#define PCI_SRIOV_VF_DID	0x1a	/* VF Device ID */ +#define PCI_SRIOV_SUP_PGSIZE	0x1c	/* Supported Page Sizes */ +#define PCI_SRIOV_SYS_PGSIZE	0x20	/* System Page Size */ +#define PCI_SRIOV_BAR		0x24	/* VF BAR0 */ +#define  PCI_SRIOV_NUM_BARS	6	/* Number of VF BARs */ +#define PCI_SRIOV_VFM		0x3c	/* VF Migration State Array Offset*/ +#define  PCI_SRIOV_VFM_BIR(x)	((x) & 7)	/* State BIR */ +#define  PCI_SRIOV_VFM_OFFSET(x) ((x) & ~7)	/* State Offset */ +#define  PCI_SRIOV_VFM_UA	0x0	/* Inactive.Unavailable */ +#define  PCI_SRIOV_VFM_MI	0x1	/* Dormant.MigrateIn */ +#define  PCI_SRIOV_VFM_MO	0x2	/* Active.MigrateOut */ +#define  PCI_SRIOV_VFM_AV	0x3	/* Active.Available */ +#define PCI_EXT_CAP_SRIOV_SIZEOF 64 + +#define PCI_LTR_MAX_SNOOP_LAT	0x4 +#define PCI_LTR_MAX_NOSNOOP_LAT	0x6 +#define  PCI_LTR_VALUE_MASK	0x000003ff +#define  PCI_LTR_SCALE_MASK	0x00001c00 +#define  PCI_LTR_SCALE_SHIFT	10 +#define PCI_EXT_CAP_LTR_SIZEOF	8 + +/* Access Control Service */ +#define PCI_ACS_CAP		0x04	/* ACS Capability Register */ +#define  PCI_ACS_SV		0x01	/* Source Validation */ +#define  PCI_ACS_TB		0x02	/* Translation Blocking */ +#define  PCI_ACS_RR		0x04	/* P2P Request Redirect */ +#define  PCI_ACS_CR		0x08	/* P2P Completion Redirect */ +#define  PCI_ACS_UF		0x10	/* Upstream Forwarding */ +#define  PCI_ACS_EC		0x20	/* P2P Egress Control */ +#define  PCI_ACS_DT		0x40	/* Direct Translated P2P */ +#define PCI_ACS_EGRESS_BITS	0x05	/* ACS Egress Control Vector Size */ +#define PCI_ACS_CTRL		0x06	/* ACS Control Register */ +#define PCI_ACS_EGRESS_CTL_V	0x08	/* ACS Egress Control Vector */ + +#define PCI_VSEC_HDR		4	/* extended cap - vendor specific */ +#define  PCI_VSEC_HDR_LEN_SHIFT	20	/* shift for length field */ + +/* sata capability */ +#define PCI_SATA_REGS		4	/* SATA REGs specifier */ +#define  PCI_SATA_REGS_MASK	0xF	/* location - BAR#/inline */ +#define  PCI_SATA_REGS_INLINE	0xF	/* REGS in config space */ +#define PCI_SATA_SIZEOF_SHORT	8 +#define PCI_SATA_SIZEOF_LONG	16 + +/* resizable BARs */ +#define PCI_REBAR_CTRL		8	/* control register */ +#define  PCI_REBAR_CTRL_NBAR_MASK	(7 << 5)	/* mask for # bars */ +#define  PCI_REBAR_CTRL_NBAR_SHIFT	5	/* shift for # bars */ + +/* dynamic power allocation */ +#define PCI_DPA_CAP		4	/* capability register */ +#define  PCI_DPA_CAP_SUBSTATE_MASK	0x1F	/* # substates - 1 */ +#define PCI_DPA_BASE_SIZEOF	16	/* size with 0 substates */ + +/* TPH Requester */ +#define PCI_TPH_CAP		4	/* capability register */ +#define  PCI_TPH_CAP_LOC_MASK	0x600	/* location mask */ +#define   PCI_TPH_LOC_NONE	0x000	/* no location */ +#define   PCI_TPH_LOC_CAP	0x200	/* in capability */ +#define   PCI_TPH_LOC_MSIX	0x400	/* in MSI-X */ +#define PCI_TPH_CAP_ST_MASK	0x07FF0000	/* st table mask */ +#define PCI_TPH_CAP_ST_SHIFT	16	/* st table shift */ +#define PCI_TPH_BASE_SIZEOF	12	/* size with no st table */ + +#endif /* LINUX_PCI_REGS_H */ diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h new file mode 100644 index 00000000000..4f63c05d27c --- /dev/null +++ b/include/uapi/linux/perf_event.h @@ -0,0 +1,615 @@ +/* + * Performance events: + * + *    Copyright (C) 2008-2009, Thomas Gleixner <tglx@linutronix.de> + *    Copyright (C) 2008-2011, Red Hat, Inc., Ingo Molnar + *    Copyright (C) 2008-2011, Red Hat, Inc., Peter Zijlstra + * + * Data type definitions, declarations, prototypes. + * + *    Started by: Thomas Gleixner and Ingo Molnar + * + * For licencing details see kernel-base/COPYING + */ +#ifndef _UAPI_LINUX_PERF_EVENT_H +#define _UAPI_LINUX_PERF_EVENT_H + +#include <linux/types.h> +#include <linux/ioctl.h> +#include <asm/byteorder.h> + +/* + * User-space ABI bits: + */ + +/* + * attr.type + */ +enum perf_type_id { +	PERF_TYPE_HARDWARE			= 0, +	PERF_TYPE_SOFTWARE			= 1, +	PERF_TYPE_TRACEPOINT			= 2, +	PERF_TYPE_HW_CACHE			= 3, +	PERF_TYPE_RAW				= 4, +	PERF_TYPE_BREAKPOINT			= 5, + +	PERF_TYPE_MAX,				/* non-ABI */ +}; + +/* + * Generalized performance event event_id types, used by the + * attr.event_id parameter of the sys_perf_event_open() + * syscall: + */ +enum perf_hw_id { +	/* +	 * Common hardware events, generalized by the kernel: +	 */ +	PERF_COUNT_HW_CPU_CYCLES		= 0, +	PERF_COUNT_HW_INSTRUCTIONS		= 1, +	PERF_COUNT_HW_CACHE_REFERENCES		= 2, +	PERF_COUNT_HW_CACHE_MISSES		= 3, +	PERF_COUNT_HW_BRANCH_INSTRUCTIONS	= 4, +	PERF_COUNT_HW_BRANCH_MISSES		= 5, +	PERF_COUNT_HW_BUS_CYCLES		= 6, +	PERF_COUNT_HW_STALLED_CYCLES_FRONTEND	= 7, +	PERF_COUNT_HW_STALLED_CYCLES_BACKEND	= 8, +	PERF_COUNT_HW_REF_CPU_CYCLES		= 9, + +	PERF_COUNT_HW_MAX,			/* non-ABI */ +}; + +/* + * Generalized hardware cache events: + * + *       { L1-D, L1-I, LLC, ITLB, DTLB, BPU, NODE } x + *       { read, write, prefetch } x + *       { accesses, misses } + */ +enum perf_hw_cache_id { +	PERF_COUNT_HW_CACHE_L1D			= 0, +	PERF_COUNT_HW_CACHE_L1I			= 1, +	PERF_COUNT_HW_CACHE_LL			= 2, +	PERF_COUNT_HW_CACHE_DTLB		= 3, +	PERF_COUNT_HW_CACHE_ITLB		= 4, +	PERF_COUNT_HW_CACHE_BPU			= 5, +	PERF_COUNT_HW_CACHE_NODE		= 6, + +	PERF_COUNT_HW_CACHE_MAX,		/* non-ABI */ +}; + +enum perf_hw_cache_op_id { +	PERF_COUNT_HW_CACHE_OP_READ		= 0, +	PERF_COUNT_HW_CACHE_OP_WRITE		= 1, +	PERF_COUNT_HW_CACHE_OP_PREFETCH		= 2, + +	PERF_COUNT_HW_CACHE_OP_MAX,		/* non-ABI */ +}; + +enum perf_hw_cache_op_result_id { +	PERF_COUNT_HW_CACHE_RESULT_ACCESS	= 0, +	PERF_COUNT_HW_CACHE_RESULT_MISS		= 1, + +	PERF_COUNT_HW_CACHE_RESULT_MAX,		/* non-ABI */ +}; + +/* + * Special "software" events provided by the kernel, even if the hardware + * does not support performance events. These events measure various + * physical and sw events of the kernel (and allow the profiling of them as + * well): + */ +enum perf_sw_ids { +	PERF_COUNT_SW_CPU_CLOCK			= 0, +	PERF_COUNT_SW_TASK_CLOCK		= 1, +	PERF_COUNT_SW_PAGE_FAULTS		= 2, +	PERF_COUNT_SW_CONTEXT_SWITCHES		= 3, +	PERF_COUNT_SW_CPU_MIGRATIONS		= 4, +	PERF_COUNT_SW_PAGE_FAULTS_MIN		= 5, +	PERF_COUNT_SW_PAGE_FAULTS_MAJ		= 6, +	PERF_COUNT_SW_ALIGNMENT_FAULTS		= 7, +	PERF_COUNT_SW_EMULATION_FAULTS		= 8, + +	PERF_COUNT_SW_MAX,			/* non-ABI */ +}; + +/* + * Bits that can be set in attr.sample_type to request information + * in the overflow packets. + */ +enum perf_event_sample_format { +	PERF_SAMPLE_IP				= 1U << 0, +	PERF_SAMPLE_TID				= 1U << 1, +	PERF_SAMPLE_TIME			= 1U << 2, +	PERF_SAMPLE_ADDR			= 1U << 3, +	PERF_SAMPLE_READ			= 1U << 4, +	PERF_SAMPLE_CALLCHAIN			= 1U << 5, +	PERF_SAMPLE_ID				= 1U << 6, +	PERF_SAMPLE_CPU				= 1U << 7, +	PERF_SAMPLE_PERIOD			= 1U << 8, +	PERF_SAMPLE_STREAM_ID			= 1U << 9, +	PERF_SAMPLE_RAW				= 1U << 10, +	PERF_SAMPLE_BRANCH_STACK		= 1U << 11, +	PERF_SAMPLE_REGS_USER			= 1U << 12, +	PERF_SAMPLE_STACK_USER			= 1U << 13, + +	PERF_SAMPLE_MAX = 1U << 14,		/* non-ABI */ +}; + +/* + * values to program into branch_sample_type when PERF_SAMPLE_BRANCH is set + * + * If the user does not pass priv level information via branch_sample_type, + * the kernel uses the event's priv level. Branch and event priv levels do + * not have to match. Branch priv level is checked for permissions. + * + * The branch types can be combined, however BRANCH_ANY covers all types + * of branches and therefore it supersedes all the other types. + */ +enum perf_branch_sample_type { +	PERF_SAMPLE_BRANCH_USER		= 1U << 0, /* user branches */ +	PERF_SAMPLE_BRANCH_KERNEL	= 1U << 1, /* kernel branches */ +	PERF_SAMPLE_BRANCH_HV		= 1U << 2, /* hypervisor branches */ + +	PERF_SAMPLE_BRANCH_ANY		= 1U << 3, /* any branch types */ +	PERF_SAMPLE_BRANCH_ANY_CALL	= 1U << 4, /* any call branch */ +	PERF_SAMPLE_BRANCH_ANY_RETURN	= 1U << 5, /* any return branch */ +	PERF_SAMPLE_BRANCH_IND_CALL	= 1U << 6, /* indirect calls */ + +	PERF_SAMPLE_BRANCH_MAX		= 1U << 7, /* non-ABI */ +}; + +#define PERF_SAMPLE_BRANCH_PLM_ALL \ +	(PERF_SAMPLE_BRANCH_USER|\ +	 PERF_SAMPLE_BRANCH_KERNEL|\ +	 PERF_SAMPLE_BRANCH_HV) + +/* + * Values to determine ABI of the registers dump. + */ +enum perf_sample_regs_abi { +	PERF_SAMPLE_REGS_ABI_NONE	= 0, +	PERF_SAMPLE_REGS_ABI_32		= 1, +	PERF_SAMPLE_REGS_ABI_64		= 2, +}; + +/* + * The format of the data returned by read() on a perf event fd, + * as specified by attr.read_format: + * + * struct read_format { + *	{ u64		value; + *	  { u64		time_enabled; } && PERF_FORMAT_TOTAL_TIME_ENABLED + *	  { u64		time_running; } && PERF_FORMAT_TOTAL_TIME_RUNNING + *	  { u64		id;           } && PERF_FORMAT_ID + *	} && !PERF_FORMAT_GROUP + * + *	{ u64		nr; + *	  { u64		time_enabled; } && PERF_FORMAT_TOTAL_TIME_ENABLED + *	  { u64		time_running; } && PERF_FORMAT_TOTAL_TIME_RUNNING + *	  { u64		value; + *	    { u64	id;           } && PERF_FORMAT_ID + *	  }		cntr[nr]; + *	} && PERF_FORMAT_GROUP + * }; + */ +enum perf_event_read_format { +	PERF_FORMAT_TOTAL_TIME_ENABLED		= 1U << 0, +	PERF_FORMAT_TOTAL_TIME_RUNNING		= 1U << 1, +	PERF_FORMAT_ID				= 1U << 2, +	PERF_FORMAT_GROUP			= 1U << 3, + +	PERF_FORMAT_MAX = 1U << 4,		/* non-ABI */ +}; + +#define PERF_ATTR_SIZE_VER0	64	/* sizeof first published struct */ +#define PERF_ATTR_SIZE_VER1	72	/* add: config2 */ +#define PERF_ATTR_SIZE_VER2	80	/* add: branch_sample_type */ +#define PERF_ATTR_SIZE_VER3	96	/* add: sample_regs_user */ +					/* add: sample_stack_user */ + +/* + * Hardware event_id to monitor via a performance monitoring event: + */ +struct perf_event_attr { + +	/* +	 * Major type: hardware/software/tracepoint/etc. +	 */ +	__u32			type; + +	/* +	 * Size of the attr structure, for fwd/bwd compat. +	 */ +	__u32			size; + +	/* +	 * Type specific configuration information. +	 */ +	__u64			config; + +	union { +		__u64		sample_period; +		__u64		sample_freq; +	}; + +	__u64			sample_type; +	__u64			read_format; + +	__u64			disabled       :  1, /* off by default        */ +				inherit	       :  1, /* children inherit it   */ +				pinned	       :  1, /* must always be on PMU */ +				exclusive      :  1, /* only group on PMU     */ +				exclude_user   :  1, /* don't count user      */ +				exclude_kernel :  1, /* ditto kernel          */ +				exclude_hv     :  1, /* ditto hypervisor      */ +				exclude_idle   :  1, /* don't count when idle */ +				mmap           :  1, /* include mmap data     */ +				comm	       :  1, /* include comm data     */ +				freq           :  1, /* use freq, not period  */ +				inherit_stat   :  1, /* per task counts       */ +				enable_on_exec :  1, /* next exec enables     */ +				task           :  1, /* trace fork/exit       */ +				watermark      :  1, /* wakeup_watermark      */ +				/* +				 * precise_ip: +				 * +				 *  0 - SAMPLE_IP can have arbitrary skid +				 *  1 - SAMPLE_IP must have constant skid +				 *  2 - SAMPLE_IP requested to have 0 skid +				 *  3 - SAMPLE_IP must have 0 skid +				 * +				 *  See also PERF_RECORD_MISC_EXACT_IP +				 */ +				precise_ip     :  2, /* skid constraint       */ +				mmap_data      :  1, /* non-exec mmap data    */ +				sample_id_all  :  1, /* sample_type all events */ + +				exclude_host   :  1, /* don't count in host   */ +				exclude_guest  :  1, /* don't count in guest  */ + +				exclude_callchain_kernel : 1, /* exclude kernel callchains */ +				exclude_callchain_user   : 1, /* exclude user callchains */ + +				__reserved_1   : 41; + +	union { +		__u32		wakeup_events;	  /* wakeup every n events */ +		__u32		wakeup_watermark; /* bytes before wakeup   */ +	}; + +	__u32			bp_type; +	union { +		__u64		bp_addr; +		__u64		config1; /* extension of config */ +	}; +	union { +		__u64		bp_len; +		__u64		config2; /* extension of config1 */ +	}; +	__u64	branch_sample_type; /* enum perf_branch_sample_type */ + +	/* +	 * Defines set of user regs to dump on samples. +	 * See asm/perf_regs.h for details. +	 */ +	__u64	sample_regs_user; + +	/* +	 * Defines size of the user stack to dump on samples. +	 */ +	__u32	sample_stack_user; + +	/* Align to u64. */ +	__u32	__reserved_2; +}; + +#define perf_flags(attr)	(*(&(attr)->read_format + 1)) + +/* + * Ioctls that can be done on a perf event fd: + */ +#define PERF_EVENT_IOC_ENABLE		_IO ('$', 0) +#define PERF_EVENT_IOC_DISABLE		_IO ('$', 1) +#define PERF_EVENT_IOC_REFRESH		_IO ('$', 2) +#define PERF_EVENT_IOC_RESET		_IO ('$', 3) +#define PERF_EVENT_IOC_PERIOD		_IOW('$', 4, __u64) +#define PERF_EVENT_IOC_SET_OUTPUT	_IO ('$', 5) +#define PERF_EVENT_IOC_SET_FILTER	_IOW('$', 6, char *) + +enum perf_event_ioc_flags { +	PERF_IOC_FLAG_GROUP		= 1U << 0, +}; + +/* + * Structure of the page that can be mapped via mmap + */ +struct perf_event_mmap_page { +	__u32	version;		/* version number of this structure */ +	__u32	compat_version;		/* lowest version this is compat with */ + +	/* +	 * Bits needed to read the hw events in user-space. +	 * +	 *   u32 seq, time_mult, time_shift, idx, width; +	 *   u64 count, enabled, running; +	 *   u64 cyc, time_offset; +	 *   s64 pmc = 0; +	 * +	 *   do { +	 *     seq = pc->lock; +	 *     barrier() +	 * +	 *     enabled = pc->time_enabled; +	 *     running = pc->time_running; +	 * +	 *     if (pc->cap_usr_time && enabled != running) { +	 *       cyc = rdtsc(); +	 *       time_offset = pc->time_offset; +	 *       time_mult   = pc->time_mult; +	 *       time_shift  = pc->time_shift; +	 *     } +	 * +	 *     idx = pc->index; +	 *     count = pc->offset; +	 *     if (pc->cap_usr_rdpmc && idx) { +	 *       width = pc->pmc_width; +	 *       pmc = rdpmc(idx - 1); +	 *     } +	 * +	 *     barrier(); +	 *   } while (pc->lock != seq); +	 * +	 * NOTE: for obvious reason this only works on self-monitoring +	 *       processes. +	 */ +	__u32	lock;			/* seqlock for synchronization */ +	__u32	index;			/* hardware event identifier */ +	__s64	offset;			/* add to hardware event value */ +	__u64	time_enabled;		/* time event active */ +	__u64	time_running;		/* time event on cpu */ +	union { +		__u64	capabilities; +		__u64	cap_usr_time  : 1, +			cap_usr_rdpmc : 1, +			cap_____res   : 62; +	}; + +	/* +	 * If cap_usr_rdpmc this field provides the bit-width of the value +	 * read using the rdpmc() or equivalent instruction. This can be used +	 * to sign extend the result like: +	 * +	 *   pmc <<= 64 - width; +	 *   pmc >>= 64 - width; // signed shift right +	 *   count += pmc; +	 */ +	__u16	pmc_width; + +	/* +	 * If cap_usr_time the below fields can be used to compute the time +	 * delta since time_enabled (in ns) using rdtsc or similar. +	 * +	 *   u64 quot, rem; +	 *   u64 delta; +	 * +	 *   quot = (cyc >> time_shift); +	 *   rem = cyc & ((1 << time_shift) - 1); +	 *   delta = time_offset + quot * time_mult + +	 *              ((rem * time_mult) >> time_shift); +	 * +	 * Where time_offset,time_mult,time_shift and cyc are read in the +	 * seqcount loop described above. This delta can then be added to +	 * enabled and possible running (if idx), improving the scaling: +	 * +	 *   enabled += delta; +	 *   if (idx) +	 *     running += delta; +	 * +	 *   quot = count / running; +	 *   rem  = count % running; +	 *   count = quot * enabled + (rem * enabled) / running; +	 */ +	__u16	time_shift; +	__u32	time_mult; +	__u64	time_offset; + +		/* +		 * Hole for extension of the self monitor capabilities +		 */ + +	__u64	__reserved[120];	/* align to 1k */ + +	/* +	 * Control data for the mmap() data buffer. +	 * +	 * User-space reading the @data_head value should issue an rmb(), on +	 * SMP capable platforms, after reading this value -- see +	 * perf_event_wakeup(). +	 * +	 * When the mapping is PROT_WRITE the @data_tail value should be +	 * written by userspace to reflect the last read data. In this case +	 * the kernel will not over-write unread data. +	 */ +	__u64   data_head;		/* head in the data section */ +	__u64	data_tail;		/* user-space written tail */ +}; + +#define PERF_RECORD_MISC_CPUMODE_MASK		(7 << 0) +#define PERF_RECORD_MISC_CPUMODE_UNKNOWN	(0 << 0) +#define PERF_RECORD_MISC_KERNEL			(1 << 0) +#define PERF_RECORD_MISC_USER			(2 << 0) +#define PERF_RECORD_MISC_HYPERVISOR		(3 << 0) +#define PERF_RECORD_MISC_GUEST_KERNEL		(4 << 0) +#define PERF_RECORD_MISC_GUEST_USER		(5 << 0) + +/* + * Indicates that the content of PERF_SAMPLE_IP points to + * the actual instruction that triggered the event. See also + * perf_event_attr::precise_ip. + */ +#define PERF_RECORD_MISC_EXACT_IP		(1 << 14) +/* + * Reserve the last bit to indicate some extended misc field + */ +#define PERF_RECORD_MISC_EXT_RESERVED		(1 << 15) + +struct perf_event_header { +	__u32	type; +	__u16	misc; +	__u16	size; +}; + +enum perf_event_type { + +	/* +	 * If perf_event_attr.sample_id_all is set then all event types will +	 * have the sample_type selected fields related to where/when +	 * (identity) an event took place (TID, TIME, ID, CPU, STREAM_ID) +	 * described in PERF_RECORD_SAMPLE below, it will be stashed just after +	 * the perf_event_header and the fields already present for the existing +	 * fields, i.e. at the end of the payload. That way a newer perf.data +	 * file will be supported by older perf tools, with these new optional +	 * fields being ignored. +	 * +	 * The MMAP events record the PROT_EXEC mappings so that we can +	 * correlate userspace IPs to code. They have the following structure: +	 * +	 * struct { +	 *	struct perf_event_header	header; +	 * +	 *	u32				pid, tid; +	 *	u64				addr; +	 *	u64				len; +	 *	u64				pgoff; +	 *	char				filename[]; +	 * }; +	 */ +	PERF_RECORD_MMAP			= 1, + +	/* +	 * struct { +	 *	struct perf_event_header	header; +	 *	u64				id; +	 *	u64				lost; +	 * }; +	 */ +	PERF_RECORD_LOST			= 2, + +	/* +	 * struct { +	 *	struct perf_event_header	header; +	 * +	 *	u32				pid, tid; +	 *	char				comm[]; +	 * }; +	 */ +	PERF_RECORD_COMM			= 3, + +	/* +	 * struct { +	 *	struct perf_event_header	header; +	 *	u32				pid, ppid; +	 *	u32				tid, ptid; +	 *	u64				time; +	 * }; +	 */ +	PERF_RECORD_EXIT			= 4, + +	/* +	 * struct { +	 *	struct perf_event_header	header; +	 *	u64				time; +	 *	u64				id; +	 *	u64				stream_id; +	 * }; +	 */ +	PERF_RECORD_THROTTLE			= 5, +	PERF_RECORD_UNTHROTTLE			= 6, + +	/* +	 * struct { +	 *	struct perf_event_header	header; +	 *	u32				pid, ppid; +	 *	u32				tid, ptid; +	 *	u64				time; +	 * }; +	 */ +	PERF_RECORD_FORK			= 7, + +	/* +	 * struct { +	 *	struct perf_event_header	header; +	 *	u32				pid, tid; +	 * +	 *	struct read_format		values; +	 * }; +	 */ +	PERF_RECORD_READ			= 8, + +	/* +	 * struct { +	 *	struct perf_event_header	header; +	 * +	 *	{ u64			ip;	  } && PERF_SAMPLE_IP +	 *	{ u32			pid, tid; } && PERF_SAMPLE_TID +	 *	{ u64			time;     } && PERF_SAMPLE_TIME +	 *	{ u64			addr;     } && PERF_SAMPLE_ADDR +	 *	{ u64			id;	  } && PERF_SAMPLE_ID +	 *	{ u64			stream_id;} && PERF_SAMPLE_STREAM_ID +	 *	{ u32			cpu, res; } && PERF_SAMPLE_CPU +	 *	{ u64			period;   } && PERF_SAMPLE_PERIOD +	 * +	 *	{ struct read_format	values;	  } && PERF_SAMPLE_READ +	 * +	 *	{ u64			nr, +	 *	  u64			ips[nr];  } && PERF_SAMPLE_CALLCHAIN +	 * +	 *	# +	 *	# The RAW record below is opaque data wrt the ABI +	 *	# +	 *	# That is, the ABI doesn't make any promises wrt to +	 *	# the stability of its content, it may vary depending +	 *	# on event, hardware, kernel version and phase of +	 *	# the moon. +	 *	# +	 *	# In other words, PERF_SAMPLE_RAW contents are not an ABI. +	 *	# +	 * +	 *	{ u32			size; +	 *	  char                  data[size];}&& PERF_SAMPLE_RAW +	 * +	 *	{ u64 from, to, flags } lbr[nr];} && PERF_SAMPLE_BRANCH_STACK +	 * +	 * 	{ u64			abi; # enum perf_sample_regs_abi +	 * 	  u64			regs[weight(mask)]; } && PERF_SAMPLE_REGS_USER +	 * +	 * 	{ u64			size; +	 * 	  char			data[size]; +	 * 	  u64			dyn_size; } && PERF_SAMPLE_STACK_USER +	 * }; +	 */ +	PERF_RECORD_SAMPLE			= 9, + +	PERF_RECORD_MAX,			/* non-ABI */ +}; + +#define PERF_MAX_STACK_DEPTH		127 + +enum perf_callchain_context { +	PERF_CONTEXT_HV			= (__u64)-32, +	PERF_CONTEXT_KERNEL		= (__u64)-128, +	PERF_CONTEXT_USER		= (__u64)-512, + +	PERF_CONTEXT_GUEST		= (__u64)-2048, +	PERF_CONTEXT_GUEST_KERNEL	= (__u64)-2176, +	PERF_CONTEXT_GUEST_USER		= (__u64)-2560, + +	PERF_CONTEXT_MAX		= (__u64)-4095, +}; + +#define PERF_FLAG_FD_NO_GROUP		(1U << 0) +#define PERF_FLAG_FD_OUTPUT		(1U << 1) +#define PERF_FLAG_PID_CGROUP		(1U << 2) /* pid=cgroup id, per-cpu mode only */ + +#endif /* _UAPI_LINUX_PERF_EVENT_H */ diff --git a/include/uapi/linux/personality.h b/include/uapi/linux/personality.h new file mode 100644 index 00000000000..aa169c4339d --- /dev/null +++ b/include/uapi/linux/personality.h @@ -0,0 +1,69 @@ +#ifndef _UAPI_LINUX_PERSONALITY_H +#define _UAPI_LINUX_PERSONALITY_H + + +/* + * Flags for bug emulation. + * + * These occupy the top three bytes. + */ +enum { +	UNAME26	=               0x0020000, +	ADDR_NO_RANDOMIZE = 	0x0040000,	/* disable randomization of VA space */ +	FDPIC_FUNCPTRS =	0x0080000,	/* userspace function ptrs point to descriptors +						 * (signal handling) +						 */ +	MMAP_PAGE_ZERO =	0x0100000, +	ADDR_COMPAT_LAYOUT =	0x0200000, +	READ_IMPLIES_EXEC =	0x0400000, +	ADDR_LIMIT_32BIT =	0x0800000, +	SHORT_INODE =		0x1000000, +	WHOLE_SECONDS =		0x2000000, +	STICKY_TIMEOUTS	=	0x4000000, +	ADDR_LIMIT_3GB = 	0x8000000, +}; + +/* + * Security-relevant compatibility flags that must be + * cleared upon setuid or setgid exec: + */ +#define PER_CLEAR_ON_SETID (READ_IMPLIES_EXEC  | \ +			    ADDR_NO_RANDOMIZE  | \ +			    ADDR_COMPAT_LAYOUT | \ +			    MMAP_PAGE_ZERO) + +/* + * Personality types. + * + * These go in the low byte.  Avoid using the top bit, it will + * conflict with error returns. + */ +enum { +	PER_LINUX =		0x0000, +	PER_LINUX_32BIT =	0x0000 | ADDR_LIMIT_32BIT, +	PER_LINUX_FDPIC =	0x0000 | FDPIC_FUNCPTRS, +	PER_SVR4 =		0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO, +	PER_SVR3 =		0x0002 | STICKY_TIMEOUTS | SHORT_INODE, +	PER_SCOSVR3 =		0x0003 | STICKY_TIMEOUTS | +					 WHOLE_SECONDS | SHORT_INODE, +	PER_OSR5 =		0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS, +	PER_WYSEV386 =		0x0004 | STICKY_TIMEOUTS | SHORT_INODE, +	PER_ISCR4 =		0x0005 | STICKY_TIMEOUTS, +	PER_BSD =		0x0006, +	PER_SUNOS =		0x0006 | STICKY_TIMEOUTS, +	PER_XENIX =		0x0007 | STICKY_TIMEOUTS | SHORT_INODE, +	PER_LINUX32 =		0x0008, +	PER_LINUX32_3GB =	0x0008 | ADDR_LIMIT_3GB, +	PER_IRIX32 =		0x0009 | STICKY_TIMEOUTS,/* IRIX5 32-bit */ +	PER_IRIXN32 =		0x000a | STICKY_TIMEOUTS,/* IRIX6 new 32-bit */ +	PER_IRIX64 =		0x000b | STICKY_TIMEOUTS,/* IRIX6 64-bit */ +	PER_RISCOS =		0x000c, +	PER_SOLARIS =		0x000d | STICKY_TIMEOUTS, +	PER_UW7 =		0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO, +	PER_OSF4 =		0x000f,			 /* OSF/1 v4 */ +	PER_HPUX =		0x0010, +	PER_MASK =		0x00ff, +}; + + +#endif /* _UAPI_LINUX_PERSONALITY_H */ diff --git a/include/uapi/linux/pfkeyv2.h b/include/uapi/linux/pfkeyv2.h new file mode 100644 index 00000000000..0b80c806631 --- /dev/null +++ b/include/uapi/linux/pfkeyv2.h @@ -0,0 +1,370 @@ +/* PF_KEY user interface, this is defined by rfc2367 so + * do not make arbitrary modifications or else this header + * file will not be compliant. + */ + +#ifndef _LINUX_PFKEY2_H +#define _LINUX_PFKEY2_H + +#include <linux/types.h> + +#define PF_KEY_V2		2 +#define PFKEYV2_REVISION	199806L + +struct sadb_msg { +	__u8		sadb_msg_version; +	__u8		sadb_msg_type; +	__u8		sadb_msg_errno; +	__u8		sadb_msg_satype; +	__u16	sadb_msg_len; +	__u16	sadb_msg_reserved; +	__u32	sadb_msg_seq; +	__u32	sadb_msg_pid; +} __attribute__((packed)); +/* sizeof(struct sadb_msg) == 16 */ + +struct sadb_ext { +	__u16	sadb_ext_len; +	__u16	sadb_ext_type; +} __attribute__((packed)); +/* sizeof(struct sadb_ext) == 4 */ + +struct sadb_sa { +	__u16	sadb_sa_len; +	__u16	sadb_sa_exttype; +	__be32		sadb_sa_spi; +	__u8		sadb_sa_replay; +	__u8		sadb_sa_state; +	__u8		sadb_sa_auth; +	__u8		sadb_sa_encrypt; +	__u32	sadb_sa_flags; +} __attribute__((packed)); +/* sizeof(struct sadb_sa) == 16 */ + +struct sadb_lifetime { +	__u16	sadb_lifetime_len; +	__u16	sadb_lifetime_exttype; +	__u32	sadb_lifetime_allocations; +	__u64	sadb_lifetime_bytes; +	__u64	sadb_lifetime_addtime; +	__u64	sadb_lifetime_usetime; +} __attribute__((packed)); +/* sizeof(struct sadb_lifetime) == 32 */ + +struct sadb_address { +	__u16	sadb_address_len; +	__u16	sadb_address_exttype; +	__u8		sadb_address_proto; +	__u8		sadb_address_prefixlen; +	__u16	sadb_address_reserved; +} __attribute__((packed)); +/* sizeof(struct sadb_address) == 8 */ + +struct sadb_key { +	__u16	sadb_key_len; +	__u16	sadb_key_exttype; +	__u16	sadb_key_bits; +	__u16	sadb_key_reserved; +} __attribute__((packed)); +/* sizeof(struct sadb_key) == 8 */ + +struct sadb_ident { +	__u16	sadb_ident_len; +	__u16	sadb_ident_exttype; +	__u16	sadb_ident_type; +	__u16	sadb_ident_reserved; +	__u64	sadb_ident_id; +} __attribute__((packed)); +/* sizeof(struct sadb_ident) == 16 */ + +struct sadb_sens { +	__u16	sadb_sens_len; +	__u16	sadb_sens_exttype; +	__u32	sadb_sens_dpd; +	__u8		sadb_sens_sens_level; +	__u8		sadb_sens_sens_len; +	__u8		sadb_sens_integ_level; +	__u8		sadb_sens_integ_len; +	__u32	sadb_sens_reserved; +} __attribute__((packed)); +/* sizeof(struct sadb_sens) == 16 */ + +/* followed by: +	__u64	sadb_sens_bitmap[sens_len]; +	__u64	sadb_integ_bitmap[integ_len];  */ + +struct sadb_prop { +	__u16	sadb_prop_len; +	__u16	sadb_prop_exttype; +	__u8		sadb_prop_replay; +	__u8		sadb_prop_reserved[3]; +} __attribute__((packed)); +/* sizeof(struct sadb_prop) == 8 */ + +/* followed by: +	struct sadb_comb sadb_combs[(sadb_prop_len + +		sizeof(__u64) - sizeof(struct sadb_prop)) / +		sizeof(struct sadb_comb)]; */ + +struct sadb_comb { +	__u8		sadb_comb_auth; +	__u8		sadb_comb_encrypt; +	__u16	sadb_comb_flags; +	__u16	sadb_comb_auth_minbits; +	__u16	sadb_comb_auth_maxbits; +	__u16	sadb_comb_encrypt_minbits; +	__u16	sadb_comb_encrypt_maxbits; +	__u32	sadb_comb_reserved; +	__u32	sadb_comb_soft_allocations; +	__u32	sadb_comb_hard_allocations; +	__u64	sadb_comb_soft_bytes; +	__u64	sadb_comb_hard_bytes; +	__u64	sadb_comb_soft_addtime; +	__u64	sadb_comb_hard_addtime; +	__u64	sadb_comb_soft_usetime; +	__u64	sadb_comb_hard_usetime; +} __attribute__((packed)); +/* sizeof(struct sadb_comb) == 72 */ + +struct sadb_supported { +	__u16	sadb_supported_len; +	__u16	sadb_supported_exttype; +	__u32	sadb_supported_reserved; +} __attribute__((packed)); +/* sizeof(struct sadb_supported) == 8 */ + +/* followed by: +	struct sadb_alg sadb_algs[(sadb_supported_len + +		sizeof(__u64) - sizeof(struct sadb_supported)) / +		sizeof(struct sadb_alg)]; */ + +struct sadb_alg { +	__u8		sadb_alg_id; +	__u8		sadb_alg_ivlen; +	__u16	sadb_alg_minbits; +	__u16	sadb_alg_maxbits; +	__u16	sadb_alg_reserved; +} __attribute__((packed)); +/* sizeof(struct sadb_alg) == 8 */ + +struct sadb_spirange { +	__u16	sadb_spirange_len; +	__u16	sadb_spirange_exttype; +	__u32	sadb_spirange_min; +	__u32	sadb_spirange_max; +	__u32	sadb_spirange_reserved; +} __attribute__((packed)); +/* sizeof(struct sadb_spirange) == 16 */ + +struct sadb_x_kmprivate { +	__u16	sadb_x_kmprivate_len; +	__u16	sadb_x_kmprivate_exttype; +	__u32	sadb_x_kmprivate_reserved; +} __attribute__((packed)); +/* sizeof(struct sadb_x_kmprivate) == 8 */ + +struct sadb_x_sa2 { +	__u16	sadb_x_sa2_len; +	__u16	sadb_x_sa2_exttype; +	__u8		sadb_x_sa2_mode; +	__u8		sadb_x_sa2_reserved1; +	__u16	sadb_x_sa2_reserved2; +	__u32	sadb_x_sa2_sequence; +	__u32	sadb_x_sa2_reqid; +} __attribute__((packed)); +/* sizeof(struct sadb_x_sa2) == 16 */ + +struct sadb_x_policy { +	__u16	sadb_x_policy_len; +	__u16	sadb_x_policy_exttype; +	__u16	sadb_x_policy_type; +	__u8		sadb_x_policy_dir; +	__u8		sadb_x_policy_reserved; +	__u32	sadb_x_policy_id; +	__u32	sadb_x_policy_priority; +} __attribute__((packed)); +/* sizeof(struct sadb_x_policy) == 16 */ + +struct sadb_x_ipsecrequest { +	__u16	sadb_x_ipsecrequest_len; +	__u16	sadb_x_ipsecrequest_proto; +	__u8		sadb_x_ipsecrequest_mode; +	__u8		sadb_x_ipsecrequest_level; +	__u16	sadb_x_ipsecrequest_reserved1; +	__u32	sadb_x_ipsecrequest_reqid; +	__u32	sadb_x_ipsecrequest_reserved2; +} __attribute__((packed)); +/* sizeof(struct sadb_x_ipsecrequest) == 16 */ + +/* This defines the TYPE of Nat Traversal in use.  Currently only one + * type of NAT-T is supported, draft-ietf-ipsec-udp-encaps-06 + */ +struct sadb_x_nat_t_type { +	__u16	sadb_x_nat_t_type_len; +	__u16	sadb_x_nat_t_type_exttype; +	__u8		sadb_x_nat_t_type_type; +	__u8		sadb_x_nat_t_type_reserved[3]; +} __attribute__((packed)); +/* sizeof(struct sadb_x_nat_t_type) == 8 */ + +/* Pass a NAT Traversal port (Source or Dest port) */ +struct sadb_x_nat_t_port { +	__u16	sadb_x_nat_t_port_len; +	__u16	sadb_x_nat_t_port_exttype; +	__be16		sadb_x_nat_t_port_port; +	__u16	sadb_x_nat_t_port_reserved; +} __attribute__((packed)); +/* sizeof(struct sadb_x_nat_t_port) == 8 */ + +/* Generic LSM security context */ +struct sadb_x_sec_ctx { +	__u16	sadb_x_sec_len; +	__u16	sadb_x_sec_exttype; +	__u8		sadb_x_ctx_alg;  /* LSMs: e.g., selinux == 1 */ +	__u8		sadb_x_ctx_doi; +	__u16	sadb_x_ctx_len; +} __attribute__((packed)); +/* sizeof(struct sadb_sec_ctx) = 8 */ + +/* Used by MIGRATE to pass addresses IKE will use to perform + * negotiation with the peer */ +struct sadb_x_kmaddress { +	__u16	sadb_x_kmaddress_len; +	__u16	sadb_x_kmaddress_exttype; +	__u32	sadb_x_kmaddress_reserved; +} __attribute__((packed)); +/* sizeof(struct sadb_x_kmaddress) == 8 */ + +/* Message types */ +#define SADB_RESERVED		0 +#define SADB_GETSPI		1 +#define SADB_UPDATE		2 +#define SADB_ADD		3 +#define SADB_DELETE		4 +#define SADB_GET		5 +#define SADB_ACQUIRE		6 +#define SADB_REGISTER		7 +#define SADB_EXPIRE		8 +#define SADB_FLUSH		9 +#define SADB_DUMP		10 +#define SADB_X_PROMISC		11 +#define SADB_X_PCHANGE		12 +#define SADB_X_SPDUPDATE	13 +#define SADB_X_SPDADD		14 +#define SADB_X_SPDDELETE	15 +#define SADB_X_SPDGET		16 +#define SADB_X_SPDACQUIRE	17 +#define SADB_X_SPDDUMP		18 +#define SADB_X_SPDFLUSH		19 +#define SADB_X_SPDSETIDX	20 +#define SADB_X_SPDEXPIRE	21 +#define SADB_X_SPDDELETE2	22 +#define SADB_X_NAT_T_NEW_MAPPING	23 +#define SADB_X_MIGRATE		24 +#define SADB_MAX		24 + +/* Security Association flags */ +#define SADB_SAFLAGS_PFS	1 +#define SADB_SAFLAGS_NOPMTUDISC	0x20000000 +#define SADB_SAFLAGS_DECAP_DSCP	0x40000000 +#define SADB_SAFLAGS_NOECN	0x80000000 + +/* Security Association states */ +#define SADB_SASTATE_LARVAL	0 +#define SADB_SASTATE_MATURE	1 +#define SADB_SASTATE_DYING	2 +#define SADB_SASTATE_DEAD	3 +#define SADB_SASTATE_MAX	3 + +/* Security Association types */ +#define SADB_SATYPE_UNSPEC	0 +#define SADB_SATYPE_AH		2 +#define SADB_SATYPE_ESP		3 +#define SADB_SATYPE_RSVP	5 +#define SADB_SATYPE_OSPFV2	6 +#define SADB_SATYPE_RIPV2	7 +#define SADB_SATYPE_MIP		8 +#define SADB_X_SATYPE_IPCOMP	9 +#define SADB_SATYPE_MAX		9 + +/* Authentication algorithms */ +#define SADB_AALG_NONE			0 +#define SADB_AALG_MD5HMAC		2 +#define SADB_AALG_SHA1HMAC		3 +#define SADB_X_AALG_SHA2_256HMAC	5 +#define SADB_X_AALG_SHA2_384HMAC	6 +#define SADB_X_AALG_SHA2_512HMAC	7 +#define SADB_X_AALG_RIPEMD160HMAC	8 +#define SADB_X_AALG_AES_XCBC_MAC	9 +#define SADB_X_AALG_NULL		251	/* kame */ +#define SADB_AALG_MAX			251 + +/* Encryption algorithms */ +#define SADB_EALG_NONE			0 +#define SADB_EALG_DESCBC		2 +#define SADB_EALG_3DESCBC		3 +#define SADB_X_EALG_CASTCBC		6 +#define SADB_X_EALG_BLOWFISHCBC		7 +#define SADB_EALG_NULL			11 +#define SADB_X_EALG_AESCBC		12 +#define SADB_X_EALG_AESCTR		13 +#define SADB_X_EALG_AES_CCM_ICV8	14 +#define SADB_X_EALG_AES_CCM_ICV12	15 +#define SADB_X_EALG_AES_CCM_ICV16	16 +#define SADB_X_EALG_AES_GCM_ICV8	18 +#define SADB_X_EALG_AES_GCM_ICV12	19 +#define SADB_X_EALG_AES_GCM_ICV16	20 +#define SADB_X_EALG_CAMELLIACBC		22 +#define SADB_X_EALG_NULL_AES_GMAC	23 +#define SADB_EALG_MAX                   253 /* last EALG */ +/* private allocations should use 249-255 (RFC2407) */ +#define SADB_X_EALG_SERPENTCBC  252     /* draft-ietf-ipsec-ciph-aes-cbc-00 */ +#define SADB_X_EALG_TWOFISHCBC  253     /* draft-ietf-ipsec-ciph-aes-cbc-00 */ + +/* Compression algorithms */ +#define SADB_X_CALG_NONE		0 +#define SADB_X_CALG_OUI			1 +#define SADB_X_CALG_DEFLATE		2 +#define SADB_X_CALG_LZS			3 +#define SADB_X_CALG_LZJH		4 +#define SADB_X_CALG_MAX			4 + +/* Extension Header values */ +#define SADB_EXT_RESERVED		0 +#define SADB_EXT_SA			1 +#define SADB_EXT_LIFETIME_CURRENT	2 +#define SADB_EXT_LIFETIME_HARD		3 +#define SADB_EXT_LIFETIME_SOFT		4 +#define SADB_EXT_ADDRESS_SRC		5 +#define SADB_EXT_ADDRESS_DST		6 +#define SADB_EXT_ADDRESS_PROXY		7 +#define SADB_EXT_KEY_AUTH		8 +#define SADB_EXT_KEY_ENCRYPT		9 +#define SADB_EXT_IDENTITY_SRC		10 +#define SADB_EXT_IDENTITY_DST		11 +#define SADB_EXT_SENSITIVITY		12 +#define SADB_EXT_PROPOSAL		13 +#define SADB_EXT_SUPPORTED_AUTH		14 +#define SADB_EXT_SUPPORTED_ENCRYPT	15 +#define SADB_EXT_SPIRANGE		16 +#define SADB_X_EXT_KMPRIVATE		17 +#define SADB_X_EXT_POLICY		18 +#define SADB_X_EXT_SA2			19 +/* The next four entries are for setting up NAT Traversal */ +#define SADB_X_EXT_NAT_T_TYPE		20 +#define SADB_X_EXT_NAT_T_SPORT		21 +#define SADB_X_EXT_NAT_T_DPORT		22 +#define SADB_X_EXT_NAT_T_OA		23 +#define SADB_X_EXT_SEC_CTX		24 +/* Used with MIGRATE to pass @ to IKE for negotiation */ +#define SADB_X_EXT_KMADDRESS		25 +#define SADB_EXT_MAX			25 + +/* Identity Extension values */ +#define SADB_IDENTTYPE_RESERVED	0 +#define SADB_IDENTTYPE_PREFIX	1 +#define SADB_IDENTTYPE_FQDN	2 +#define SADB_IDENTTYPE_USERFQDN	3 +#define SADB_IDENTTYPE_MAX	3 + +#endif /* !(_LINUX_PFKEY2_H) */ diff --git a/include/uapi/linux/pg.h b/include/uapi/linux/pg.h new file mode 100644 index 00000000000..db994bb0c79 --- /dev/null +++ b/include/uapi/linux/pg.h @@ -0,0 +1,63 @@ +/* 	pg.h (c) 1998  Grant R. Guenther <grant@torque.net> + 		       Under the terms of the GNU General Public License + + +	pg.h defines the user interface to the generic ATAPI packet +        command driver for parallel port ATAPI devices (pg). The +	driver is loosely modelled after the generic SCSI driver, sg, +	although the actual interface is different. + +	The pg driver provides a simple character device interface for +        sending ATAPI commands to a device.  With the exception of the +	ATAPI reset operation, all operations are performed by a pair +        of read and write operations to the appropriate /dev/pgN device. +	A write operation delivers a command and any outbound data in +        a single buffer.  Normally, the write will succeed unless the +        device is offline or malfunctioning, or there is already another +	command pending.  If the write succeeds, it should be followed +        immediately by a read operation, to obtain any returned data and +        status information.  A read will fail if there is no operation +        in progress. + +	As a special case, the device can be reset with a write operation, +        and in this case, no following read is expected, or permitted. + +	There are no ioctl() operations.  Any single operation +	may transfer at most PG_MAX_DATA bytes.  Note that the driver must +        copy the data through an internal buffer.  In keeping with all +	current ATAPI devices, command packets are assumed to be exactly +	12 bytes in length. + +	To permit future changes to this interface, the headers in the +	read and write buffers contain a single character "magic" flag. +        Currently this flag must be the character "P". + +*/ + +#define PG_MAGIC	'P' +#define PG_RESET	'Z' +#define PG_COMMAND	'C' + +#define PG_MAX_DATA	32768 + +struct pg_write_hdr { + +	char	magic;		/* == PG_MAGIC */ +	char	func;		/* PG_RESET or PG_COMMAND */ +	int     dlen;		/* number of bytes expected to transfer */ +	int     timeout;	/* number of seconds before timeout */ +	char	packet[12];	/* packet command */ + +}; + +struct pg_read_hdr { + +	char	magic;		/* == PG_MAGIC */ +	char	scsi;		/* "scsi" status == sense key */ +	int	dlen;		/* size of device transfer request */ +	int     duration;	/* time in seconds command took */ +	char    pad[12];	/* not used */ + +}; + +/* end of pg.h */ diff --git a/include/uapi/linux/phantom.h b/include/uapi/linux/phantom.h new file mode 100644 index 00000000000..94dd6645c60 --- /dev/null +++ b/include/uapi/linux/phantom.h @@ -0,0 +1,49 @@ +/* + *  Copyright (C) 2005-2007 Jiri Slaby <jirislaby@gmail.com> + * + *  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. + */ + +#ifndef __PHANTOM_H +#define __PHANTOM_H + +#include <linux/types.h> + +/* PHN_(G/S)ET_REG param */ +struct phm_reg { +	__u32 reg; +	__u32 value; +}; + +/* PHN_(G/S)ET_REGS param */ +struct phm_regs { +	__u32 count; +	__u32 mask; +	__u32 values[8]; +}; + +#define PH_IOC_MAGIC		'p' +#define PHN_GET_REG		_IOWR(PH_IOC_MAGIC, 0, struct phm_reg *) +#define PHN_SET_REG		_IOW(PH_IOC_MAGIC, 1, struct phm_reg *) +#define PHN_GET_REGS		_IOWR(PH_IOC_MAGIC, 2, struct phm_regs *) +#define PHN_SET_REGS		_IOW(PH_IOC_MAGIC, 3, struct phm_regs *) +/* this ioctl tells the driver, that the caller is not OpenHaptics and might + * use improved registers update (no more phantom switchoffs when using + * libphantom) */ +#define PHN_NOT_OH		_IO(PH_IOC_MAGIC, 4) +#define PHN_GETREG		_IOWR(PH_IOC_MAGIC, 5, struct phm_reg) +#define PHN_SETREG		_IOW(PH_IOC_MAGIC, 6, struct phm_reg) +#define PHN_GETREGS		_IOWR(PH_IOC_MAGIC, 7, struct phm_regs) +#define PHN_SETREGS		_IOW(PH_IOC_MAGIC, 8, struct phm_regs) + +#define PHN_CONTROL		0x6     /* control byte in iaddr space */ +#define PHN_CTL_AMP		0x1     /*   switch after torques change */ +#define PHN_CTL_BUT		0x2     /*   is button switched */ +#define PHN_CTL_IRQ		0x10    /*   is irq enabled */ + +#define PHN_ZERO_FORCE		2048	/* zero torque on motor */ + +#endif diff --git a/include/uapi/linux/phonet.h b/include/uapi/linux/phonet.h new file mode 100644 index 00000000000..a3e1d65b3ed --- /dev/null +++ b/include/uapi/linux/phonet.h @@ -0,0 +1,185 @@ +/** + * file phonet.h + * + * Phonet sockets kernel interface + * + * Copyright (C) 2008 Nokia 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 + * version 2 as published by the Free Software Foundation. + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + */ + +#ifndef _UAPILINUX_PHONET_H +#define _UAPILINUX_PHONET_H + +#include <linux/types.h> +#include <linux/socket.h> + +/* Automatic protocol selection */ +#define PN_PROTO_TRANSPORT	0 +/* Phonet datagram socket */ +#define PN_PROTO_PHONET		1 +/* Phonet pipe */ +#define PN_PROTO_PIPE		2 +#define PHONET_NPROTO		3 + +/* Socket options for SOL_PNPIPE level */ +#define PNPIPE_ENCAP		1 +#define PNPIPE_IFINDEX		2 +#define PNPIPE_HANDLE		3 +#define PNPIPE_INITSTATE	4 + +#define PNADDR_ANY		0 +#define PNADDR_BROADCAST	0xFC +#define PNPORT_RESOURCE_ROUTING	0 + +/* Values for PNPIPE_ENCAP option */ +#define PNPIPE_ENCAP_NONE	0 +#define PNPIPE_ENCAP_IP		1 + +/* ioctls */ +#define SIOCPNGETOBJECT		(SIOCPROTOPRIVATE + 0) +#define SIOCPNENABLEPIPE	(SIOCPROTOPRIVATE + 13) +#define SIOCPNADDRESOURCE	(SIOCPROTOPRIVATE + 14) +#define SIOCPNDELRESOURCE	(SIOCPROTOPRIVATE + 15) + +/* Phonet protocol header */ +struct phonethdr { +	__u8	pn_rdev; +	__u8	pn_sdev; +	__u8	pn_res; +	__be16	pn_length; +	__u8	pn_robj; +	__u8	pn_sobj; +} __attribute__((packed)); + +/* Common Phonet payload header */ +struct phonetmsg { +	__u8	pn_trans_id;	/* transaction ID */ +	__u8	pn_msg_id;	/* message type */ +	union { +		struct { +			__u8	pn_submsg_id;	/* message subtype */ +			__u8	pn_data[5]; +		} base; +		struct { +			__u16	pn_e_res_id;	/* extended resource ID */ +			__u8	pn_e_submsg_id;	/* message subtype */ +			__u8	pn_e_data[3]; +		} ext; +	} pn_msg_u; +}; +#define PN_COMMON_MESSAGE	0xF0 +#define PN_COMMGR		0x10 +#define PN_PREFIX		0xE0 /* resource for extended messages */ +#define pn_submsg_id		pn_msg_u.base.pn_submsg_id +#define pn_e_submsg_id		pn_msg_u.ext.pn_e_submsg_id +#define pn_e_res_id		pn_msg_u.ext.pn_e_res_id +#define pn_data			pn_msg_u.base.pn_data +#define pn_e_data		pn_msg_u.ext.pn_e_data + +/* data for unreachable errors */ +#define PN_COMM_SERVICE_NOT_IDENTIFIED_RESP	0x01 +#define PN_COMM_ISA_ENTITY_NOT_REACHABLE_RESP	0x14 +#define pn_orig_msg_id		pn_data[0] +#define pn_status		pn_data[1] +#define pn_e_orig_msg_id	pn_e_data[0] +#define pn_e_status		pn_e_data[1] + +/* Phonet socket address structure */ +struct sockaddr_pn { +	__kernel_sa_family_t spn_family; +	__u8 spn_obj; +	__u8 spn_dev; +	__u8 spn_resource; +	__u8 spn_zero[sizeof(struct sockaddr) - sizeof(__kernel_sa_family_t) - 3]; +} __attribute__((packed)); + +/* Well known address */ +#define PN_DEV_PC	0x10 + +static inline __u16 pn_object(__u8 addr, __u16 port) +{ +	return (addr << 8) | (port & 0x3ff); +} + +static inline __u8 pn_obj(__u16 handle) +{ +	return handle & 0xff; +} + +static inline __u8 pn_dev(__u16 handle) +{ +	return handle >> 8; +} + +static inline __u16 pn_port(__u16 handle) +{ +	return handle & 0x3ff; +} + +static inline __u8 pn_addr(__u16 handle) +{ +	return (handle >> 8) & 0xfc; +} + +static inline void pn_sockaddr_set_addr(struct sockaddr_pn *spn, __u8 addr) +{ +	spn->spn_dev &= 0x03; +	spn->spn_dev |= addr & 0xfc; +} + +static inline void pn_sockaddr_set_port(struct sockaddr_pn *spn, __u16 port) +{ +	spn->spn_dev &= 0xfc; +	spn->spn_dev |= (port >> 8) & 0x03; +	spn->spn_obj = port & 0xff; +} + +static inline void pn_sockaddr_set_object(struct sockaddr_pn *spn, +						__u16 handle) +{ +	spn->spn_dev = pn_dev(handle); +	spn->spn_obj = pn_obj(handle); +} + +static inline void pn_sockaddr_set_resource(struct sockaddr_pn *spn, +						__u8 resource) +{ +	spn->spn_resource = resource; +} + +static inline __u8 pn_sockaddr_get_addr(const struct sockaddr_pn *spn) +{ +	return spn->spn_dev & 0xfc; +} + +static inline __u16 pn_sockaddr_get_port(const struct sockaddr_pn *spn) +{ +	return ((spn->spn_dev & 0x03) << 8) | spn->spn_obj; +} + +static inline __u16 pn_sockaddr_get_object(const struct sockaddr_pn *spn) +{ +	return pn_object(spn->spn_dev, spn->spn_obj); +} + +static inline __u8 pn_sockaddr_get_resource(const struct sockaddr_pn *spn) +{ +	return spn->spn_resource; +} + +/* Phonet device ioctl requests */ + +#endif /* _UAPILINUX_PHONET_H */ diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h new file mode 100644 index 00000000000..082eafaf026 --- /dev/null +++ b/include/uapi/linux/pkt_cls.h @@ -0,0 +1,469 @@ +#ifndef __LINUX_PKT_CLS_H +#define __LINUX_PKT_CLS_H + +#include <linux/types.h> +#include <linux/pkt_sched.h> + +/* I think i could have done better macros ; for now this is stolen from + * some arch/mips code - jhs +*/ +#define _TC_MAKE32(x) ((x)) + +#define _TC_MAKEMASK1(n) (_TC_MAKE32(1) << _TC_MAKE32(n)) +#define _TC_MAKEMASK(v,n) (_TC_MAKE32((_TC_MAKE32(1)<<(v))-1) << _TC_MAKE32(n)) +#define _TC_MAKEVALUE(v,n) (_TC_MAKE32(v) << _TC_MAKE32(n)) +#define _TC_GETVALUE(v,n,m) ((_TC_MAKE32(v) & _TC_MAKE32(m)) >> _TC_MAKE32(n)) + +/* verdict bit breakdown  + * +bit 0: when set -> this packet has been munged already + +bit 1: when set -> It is ok to munge this packet + +bit 2,3,4,5: Reclassify counter - sort of reverse TTL - if exceeded +assume loop + +bit 6,7: Where this packet was last seen  +0: Above the transmit example at the socket level +1: on the Ingress +2: on the Egress + +bit 8: when set --> Request not to classify on ingress.  + +bits 9,10,11: redirect counter -  redirect TTL. Loop avoidance + + * + * */ + +#define TC_MUNGED          _TC_MAKEMASK1(0) +#define SET_TC_MUNGED(v)   ( TC_MUNGED | (v & ~TC_MUNGED)) +#define CLR_TC_MUNGED(v)   ( v & ~TC_MUNGED) + +#define TC_OK2MUNGE        _TC_MAKEMASK1(1) +#define SET_TC_OK2MUNGE(v)   ( TC_OK2MUNGE | (v & ~TC_OK2MUNGE)) +#define CLR_TC_OK2MUNGE(v)   ( v & ~TC_OK2MUNGE) + +#define S_TC_VERD          _TC_MAKE32(2) +#define M_TC_VERD          _TC_MAKEMASK(4,S_TC_VERD) +#define G_TC_VERD(x)       _TC_GETVALUE(x,S_TC_VERD,M_TC_VERD) +#define V_TC_VERD(x)       _TC_MAKEVALUE(x,S_TC_VERD) +#define SET_TC_VERD(v,n)   ((V_TC_VERD(n)) | (v & ~M_TC_VERD)) + +#define S_TC_FROM          _TC_MAKE32(6) +#define M_TC_FROM          _TC_MAKEMASK(2,S_TC_FROM) +#define G_TC_FROM(x)       _TC_GETVALUE(x,S_TC_FROM,M_TC_FROM) +#define V_TC_FROM(x)       _TC_MAKEVALUE(x,S_TC_FROM) +#define SET_TC_FROM(v,n)   ((V_TC_FROM(n)) | (v & ~M_TC_FROM)) +#define AT_STACK	0x0 +#define AT_INGRESS	0x1 +#define AT_EGRESS	0x2 + +#define TC_NCLS          _TC_MAKEMASK1(8) +#define SET_TC_NCLS(v)   ( TC_NCLS | (v & ~TC_NCLS)) +#define CLR_TC_NCLS(v)   ( v & ~TC_NCLS) + +#define S_TC_RTTL          _TC_MAKE32(9) +#define M_TC_RTTL          _TC_MAKEMASK(3,S_TC_RTTL) +#define G_TC_RTTL(x)       _TC_GETVALUE(x,S_TC_RTTL,M_TC_RTTL) +#define V_TC_RTTL(x)       _TC_MAKEVALUE(x,S_TC_RTTL) +#define SET_TC_RTTL(v,n)   ((V_TC_RTTL(n)) | (v & ~M_TC_RTTL)) + +#define S_TC_AT          _TC_MAKE32(12) +#define M_TC_AT          _TC_MAKEMASK(2,S_TC_AT) +#define G_TC_AT(x)       _TC_GETVALUE(x,S_TC_AT,M_TC_AT) +#define V_TC_AT(x)       _TC_MAKEVALUE(x,S_TC_AT) +#define SET_TC_AT(v,n)   ((V_TC_AT(n)) | (v & ~M_TC_AT)) + +/* Action attributes */ +enum { +	TCA_ACT_UNSPEC, +	TCA_ACT_KIND, +	TCA_ACT_OPTIONS, +	TCA_ACT_INDEX, +	TCA_ACT_STATS, +	__TCA_ACT_MAX +}; + +#define TCA_ACT_MAX __TCA_ACT_MAX +#define TCA_OLD_COMPAT (TCA_ACT_MAX+1) +#define TCA_ACT_MAX_PRIO 32 +#define TCA_ACT_BIND	1 +#define TCA_ACT_NOBIND	0 +#define TCA_ACT_UNBIND	1 +#define TCA_ACT_NOUNBIND	0 +#define TCA_ACT_REPLACE		1 +#define TCA_ACT_NOREPLACE	0 +#define MAX_REC_LOOP 4 +#define MAX_RED_LOOP 4 + +#define TC_ACT_UNSPEC	(-1) +#define TC_ACT_OK		0 +#define TC_ACT_RECLASSIFY	1 +#define TC_ACT_SHOT		2 +#define TC_ACT_PIPE		3 +#define TC_ACT_STOLEN		4 +#define TC_ACT_QUEUED		5 +#define TC_ACT_REPEAT		6 +#define TC_ACT_JUMP		0x10000000 + +/* Action type identifiers*/ +enum { +	TCA_ID_UNSPEC=0, +	TCA_ID_POLICE=1, +	/* other actions go here */ +	__TCA_ID_MAX=255 +}; + +#define TCA_ID_MAX __TCA_ID_MAX + +struct tc_police { +	__u32			index; +	int			action; +#define TC_POLICE_UNSPEC	TC_ACT_UNSPEC +#define TC_POLICE_OK		TC_ACT_OK +#define TC_POLICE_RECLASSIFY	TC_ACT_RECLASSIFY +#define TC_POLICE_SHOT		TC_ACT_SHOT +#define TC_POLICE_PIPE		TC_ACT_PIPE + +	__u32			limit; +	__u32			burst; +	__u32			mtu; +	struct tc_ratespec	rate; +	struct tc_ratespec	peakrate; +	int 			refcnt; +	int 			bindcnt; +	__u32			capab; +}; + +struct tcf_t { +	__u64   install; +	__u64   lastuse; +	__u64   expires; +}; + +struct tc_cnt { +	int                   refcnt;  +	int                   bindcnt; +}; + +#define tc_gen \ +	__u32                 index; \ +	__u32                 capab; \ +	int                   action; \ +	int                   refcnt; \ +	int                   bindcnt + +enum { +	TCA_POLICE_UNSPEC, +	TCA_POLICE_TBF, +	TCA_POLICE_RATE, +	TCA_POLICE_PEAKRATE, +	TCA_POLICE_AVRATE, +	TCA_POLICE_RESULT, +	__TCA_POLICE_MAX +#define TCA_POLICE_RESULT TCA_POLICE_RESULT +}; + +#define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1) + +/* U32 filters */ + +#define TC_U32_HTID(h) ((h)&0xFFF00000) +#define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20) +#define TC_U32_HASH(h) (((h)>>12)&0xFF) +#define TC_U32_NODE(h) ((h)&0xFFF) +#define TC_U32_KEY(h) ((h)&0xFFFFF) +#define TC_U32_UNSPEC	0 +#define TC_U32_ROOT	(0xFFF00000) + +enum { +	TCA_U32_UNSPEC, +	TCA_U32_CLASSID, +	TCA_U32_HASH, +	TCA_U32_LINK, +	TCA_U32_DIVISOR, +	TCA_U32_SEL, +	TCA_U32_POLICE, +	TCA_U32_ACT,    +	TCA_U32_INDEV, +	TCA_U32_PCNT, +	TCA_U32_MARK, +	__TCA_U32_MAX +}; + +#define TCA_U32_MAX (__TCA_U32_MAX - 1) + +struct tc_u32_key { +	__be32		mask; +	__be32		val; +	int		off; +	int		offmask; +}; + +struct tc_u32_sel { +	unsigned char		flags; +	unsigned char		offshift; +	unsigned char		nkeys; + +	__be16			offmask; +	__u16			off; +	short			offoff; + +	short			hoff; +	__be32			hmask; +	struct tc_u32_key	keys[0]; +}; + +struct tc_u32_mark { +	__u32		val; +	__u32		mask; +	__u32		success; +}; + +struct tc_u32_pcnt { +	__u64 rcnt; +	__u64 rhit; +	__u64 kcnts[0]; +}; + +/* Flags */ + +#define TC_U32_TERMINAL		1 +#define TC_U32_OFFSET		2 +#define TC_U32_VAROFFSET	4 +#define TC_U32_EAT		8 + +#define TC_U32_MAXDEPTH 8 + + +/* RSVP filter */ + +enum { +	TCA_RSVP_UNSPEC, +	TCA_RSVP_CLASSID, +	TCA_RSVP_DST, +	TCA_RSVP_SRC, +	TCA_RSVP_PINFO, +	TCA_RSVP_POLICE, +	TCA_RSVP_ACT, +	__TCA_RSVP_MAX +}; + +#define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 ) + +struct tc_rsvp_gpi { +	__u32	key; +	__u32	mask; +	int	offset; +}; + +struct tc_rsvp_pinfo { +	struct tc_rsvp_gpi dpi; +	struct tc_rsvp_gpi spi; +	__u8	protocol; +	__u8	tunnelid; +	__u8	tunnelhdr; +	__u8	pad; +}; + +/* ROUTE filter */ + +enum { +	TCA_ROUTE4_UNSPEC, +	TCA_ROUTE4_CLASSID, +	TCA_ROUTE4_TO, +	TCA_ROUTE4_FROM, +	TCA_ROUTE4_IIF, +	TCA_ROUTE4_POLICE, +	TCA_ROUTE4_ACT, +	__TCA_ROUTE4_MAX +}; + +#define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1) + + +/* FW filter */ + +enum { +	TCA_FW_UNSPEC, +	TCA_FW_CLASSID, +	TCA_FW_POLICE, +	TCA_FW_INDEV, /*  used by CONFIG_NET_CLS_IND */ +	TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */ +	TCA_FW_MASK, +	__TCA_FW_MAX +}; + +#define TCA_FW_MAX (__TCA_FW_MAX - 1) + +/* TC index filter */ + +enum { +	TCA_TCINDEX_UNSPEC, +	TCA_TCINDEX_HASH, +	TCA_TCINDEX_MASK, +	TCA_TCINDEX_SHIFT, +	TCA_TCINDEX_FALL_THROUGH, +	TCA_TCINDEX_CLASSID, +	TCA_TCINDEX_POLICE, +	TCA_TCINDEX_ACT, +	__TCA_TCINDEX_MAX +}; + +#define TCA_TCINDEX_MAX     (__TCA_TCINDEX_MAX - 1) + +/* Flow filter */ + +enum { +	FLOW_KEY_SRC, +	FLOW_KEY_DST, +	FLOW_KEY_PROTO, +	FLOW_KEY_PROTO_SRC, +	FLOW_KEY_PROTO_DST, +	FLOW_KEY_IIF, +	FLOW_KEY_PRIORITY, +	FLOW_KEY_MARK, +	FLOW_KEY_NFCT, +	FLOW_KEY_NFCT_SRC, +	FLOW_KEY_NFCT_DST, +	FLOW_KEY_NFCT_PROTO_SRC, +	FLOW_KEY_NFCT_PROTO_DST, +	FLOW_KEY_RTCLASSID, +	FLOW_KEY_SKUID, +	FLOW_KEY_SKGID, +	FLOW_KEY_VLAN_TAG, +	FLOW_KEY_RXHASH, +	__FLOW_KEY_MAX, +}; + +#define FLOW_KEY_MAX	(__FLOW_KEY_MAX - 1) + +enum { +	FLOW_MODE_MAP, +	FLOW_MODE_HASH, +}; + +enum { +	TCA_FLOW_UNSPEC, +	TCA_FLOW_KEYS, +	TCA_FLOW_MODE, +	TCA_FLOW_BASECLASS, +	TCA_FLOW_RSHIFT, +	TCA_FLOW_ADDEND, +	TCA_FLOW_MASK, +	TCA_FLOW_XOR, +	TCA_FLOW_DIVISOR, +	TCA_FLOW_ACT, +	TCA_FLOW_POLICE, +	TCA_FLOW_EMATCHES, +	TCA_FLOW_PERTURB, +	__TCA_FLOW_MAX +}; + +#define TCA_FLOW_MAX	(__TCA_FLOW_MAX - 1) + +/* Basic filter */ + +enum { +	TCA_BASIC_UNSPEC, +	TCA_BASIC_CLASSID, +	TCA_BASIC_EMATCHES, +	TCA_BASIC_ACT, +	TCA_BASIC_POLICE, +	__TCA_BASIC_MAX +}; + +#define TCA_BASIC_MAX (__TCA_BASIC_MAX - 1) + + +/* Cgroup classifier */ + +enum { +	TCA_CGROUP_UNSPEC, +	TCA_CGROUP_ACT, +	TCA_CGROUP_POLICE, +	TCA_CGROUP_EMATCHES, +	__TCA_CGROUP_MAX, +}; + +#define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1) + +/* Extended Matches */ + +struct tcf_ematch_tree_hdr { +	__u16		nmatches; +	__u16		progid; +}; + +enum { +	TCA_EMATCH_TREE_UNSPEC, +	TCA_EMATCH_TREE_HDR, +	TCA_EMATCH_TREE_LIST, +	__TCA_EMATCH_TREE_MAX +}; +#define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1) + +struct tcf_ematch_hdr { +	__u16		matchid; +	__u16		kind; +	__u16		flags; +	__u16		pad; /* currently unused */ +}; + +/*  0                   1 + *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5  + * +-----------------------+-+-+---+ + * |         Unused        |S|I| R | + * +-----------------------+-+-+---+ + * + * R(2) ::= relation to next ematch + *          where: 0 0 END (last ematch) + *                 0 1 AND + *                 1 0 OR + *                 1 1 Unused (invalid) + * I(1) ::= invert result + * S(1) ::= simple payload + */ +#define TCF_EM_REL_END	0 +#define TCF_EM_REL_AND	(1<<0) +#define TCF_EM_REL_OR	(1<<1) +#define TCF_EM_INVERT	(1<<2) +#define TCF_EM_SIMPLE	(1<<3) + +#define TCF_EM_REL_MASK	3 +#define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK) + +enum { +	TCF_LAYER_LINK, +	TCF_LAYER_NETWORK, +	TCF_LAYER_TRANSPORT, +	__TCF_LAYER_MAX +}; +#define TCF_LAYER_MAX (__TCF_LAYER_MAX - 1) + +/* Ematch type assignments + *   1..32767		Reserved for ematches inside kernel tree + *   32768..65535	Free to use, not reliable + */ +#define	TCF_EM_CONTAINER	0 +#define	TCF_EM_CMP		1 +#define	TCF_EM_NBYTE		2 +#define	TCF_EM_U32		3 +#define	TCF_EM_META		4 +#define	TCF_EM_TEXT		5 +#define	TCF_EM_VLAN		6 +#define	TCF_EM_CANID		7 +#define	TCF_EM_IPSET		8 +#define	TCF_EM_MAX		8 + +enum { +	TCF_EM_PROG_TC +}; + +enum { +	TCF_EM_OPND_EQ, +	TCF_EM_OPND_GT, +	TCF_EM_OPND_LT +}; + +#endif diff --git a/include/uapi/linux/pkt_sched.h b/include/uapi/linux/pkt_sched.h new file mode 100644 index 00000000000..32aef0a439e --- /dev/null +++ b/include/uapi/linux/pkt_sched.h @@ -0,0 +1,738 @@ +#ifndef __LINUX_PKT_SCHED_H +#define __LINUX_PKT_SCHED_H + +#include <linux/types.h> + +/* Logical priority bands not depending on specific packet scheduler. +   Every scheduler will map them to real traffic classes, if it has +   no more precise mechanism to classify packets. + +   These numbers have no special meaning, though their coincidence +   with obsolete IPv6 values is not occasional :-). New IPv6 drafts +   preferred full anarchy inspired by diffserv group. + +   Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy +   class, actually, as rule it will be handled with more care than +   filler or even bulk. + */ + +#define TC_PRIO_BESTEFFORT		0 +#define TC_PRIO_FILLER			1 +#define TC_PRIO_BULK			2 +#define TC_PRIO_INTERACTIVE_BULK	4 +#define TC_PRIO_INTERACTIVE		6 +#define TC_PRIO_CONTROL			7 + +#define TC_PRIO_MAX			15 + +/* Generic queue statistics, available for all the elements. +   Particular schedulers may have also their private records. + */ + +struct tc_stats { +	__u64	bytes;			/* Number of enqueued bytes */ +	__u32	packets;		/* Number of enqueued packets	*/ +	__u32	drops;			/* Packets dropped because of lack of resources */ +	__u32	overlimits;		/* Number of throttle events when this +					 * flow goes out of allocated bandwidth */ +	__u32	bps;			/* Current flow byte rate */ +	__u32	pps;			/* Current flow packet rate */ +	__u32	qlen; +	__u32	backlog; +}; + +struct tc_estimator { +	signed char	interval; +	unsigned char	ewma_log; +}; + +/* "Handles" +   --------- + +    All the traffic control objects have 32bit identifiers, or "handles". + +    They can be considered as opaque numbers from user API viewpoint, +    but actually they always consist of two fields: major and +    minor numbers, which are interpreted by kernel specially, +    that may be used by applications, though not recommended. + +    F.e. qdisc handles always have minor number equal to zero, +    classes (or flows) have major equal to parent qdisc major, and +    minor uniquely identifying class inside qdisc. + +    Macros to manipulate handles: + */ + +#define TC_H_MAJ_MASK (0xFFFF0000U) +#define TC_H_MIN_MASK (0x0000FFFFU) +#define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK) +#define TC_H_MIN(h) ((h)&TC_H_MIN_MASK) +#define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK)) + +#define TC_H_UNSPEC	(0U) +#define TC_H_ROOT	(0xFFFFFFFFU) +#define TC_H_INGRESS    (0xFFFFFFF1U) + +struct tc_ratespec { +	unsigned char	cell_log; +	unsigned char	__reserved; +	unsigned short	overhead; +	short		cell_align; +	unsigned short	mpu; +	__u32		rate; +}; + +#define TC_RTAB_SIZE	1024 + +struct tc_sizespec { +	unsigned char	cell_log; +	unsigned char	size_log; +	short		cell_align; +	int		overhead; +	unsigned int	linklayer; +	unsigned int	mpu; +	unsigned int	mtu; +	unsigned int	tsize; +}; + +enum { +	TCA_STAB_UNSPEC, +	TCA_STAB_BASE, +	TCA_STAB_DATA, +	__TCA_STAB_MAX +}; + +#define TCA_STAB_MAX (__TCA_STAB_MAX - 1) + +/* FIFO section */ + +struct tc_fifo_qopt { +	__u32	limit;	/* Queue length: bytes for bfifo, packets for pfifo */ +}; + +/* PRIO section */ + +#define TCQ_PRIO_BANDS	16 +#define TCQ_MIN_PRIO_BANDS 2 + +struct tc_prio_qopt { +	int	bands;			/* Number of bands */ +	__u8	priomap[TC_PRIO_MAX+1];	/* Map: logical priority -> PRIO band */ +}; + +/* MULTIQ section */ + +struct tc_multiq_qopt { +	__u16	bands;			/* Number of bands */ +	__u16	max_bands;		/* Maximum number of queues */ +}; + +/* PLUG section */ + +#define TCQ_PLUG_BUFFER                0 +#define TCQ_PLUG_RELEASE_ONE           1 +#define TCQ_PLUG_RELEASE_INDEFINITE    2 +#define TCQ_PLUG_LIMIT                 3 + +struct tc_plug_qopt { +	/* TCQ_PLUG_BUFFER: Inset a plug into the queue and +	 *  buffer any incoming packets +	 * TCQ_PLUG_RELEASE_ONE: Dequeue packets from queue head +	 *   to beginning of the next plug. +	 * TCQ_PLUG_RELEASE_INDEFINITE: Dequeue all packets from queue. +	 *   Stop buffering packets until the next TCQ_PLUG_BUFFER +	 *   command is received (just act as a pass-thru queue). +	 * TCQ_PLUG_LIMIT: Increase/decrease queue size +	 */ +	int             action; +	__u32           limit; +}; + +/* TBF section */ + +struct tc_tbf_qopt { +	struct tc_ratespec rate; +	struct tc_ratespec peakrate; +	__u32		limit; +	__u32		buffer; +	__u32		mtu; +}; + +enum { +	TCA_TBF_UNSPEC, +	TCA_TBF_PARMS, +	TCA_TBF_RTAB, +	TCA_TBF_PTAB, +	__TCA_TBF_MAX, +}; + +#define TCA_TBF_MAX (__TCA_TBF_MAX - 1) + + +/* TEQL section */ + +/* TEQL does not require any parameters */ + +/* SFQ section */ + +struct tc_sfq_qopt { +	unsigned	quantum;	/* Bytes per round allocated to flow */ +	int		perturb_period;	/* Period of hash perturbation */ +	__u32		limit;		/* Maximal packets in queue */ +	unsigned	divisor;	/* Hash divisor  */ +	unsigned	flows;		/* Maximal number of flows  */ +}; + +struct tc_sfqred_stats { +	__u32           prob_drop;      /* Early drops, below max threshold */ +	__u32           forced_drop;	/* Early drops, after max threshold */ +	__u32           prob_mark;      /* Marked packets, below max threshold */ +	__u32           forced_mark;    /* Marked packets, after max threshold */ +	__u32           prob_mark_head; /* Marked packets, below max threshold */ +	__u32           forced_mark_head;/* Marked packets, after max threshold */ +}; + +struct tc_sfq_qopt_v1 { +	struct tc_sfq_qopt v0; +	unsigned int	depth;		/* max number of packets per flow */ +	unsigned int	headdrop; +/* SFQRED parameters */ +	__u32		limit;		/* HARD maximal flow queue length (bytes) */ +	__u32		qth_min;	/* Min average length threshold (bytes) */ +	__u32		qth_max;	/* Max average length threshold (bytes) */ +	unsigned char   Wlog;		/* log(W)		*/ +	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/ +	unsigned char   Scell_log;	/* cell size for idle damping */ +	unsigned char	flags; +	__u32		max_P;		/* probability, high resolution */ +/* SFQRED stats */ +	struct tc_sfqred_stats stats; +}; + + +struct tc_sfq_xstats { +	__s32		allot; +}; + +/* RED section */ + +enum { +	TCA_RED_UNSPEC, +	TCA_RED_PARMS, +	TCA_RED_STAB, +	TCA_RED_MAX_P, +	__TCA_RED_MAX, +}; + +#define TCA_RED_MAX (__TCA_RED_MAX - 1) + +struct tc_red_qopt { +	__u32		limit;		/* HARD maximal queue length (bytes)	*/ +	__u32		qth_min;	/* Min average length threshold (bytes) */ +	__u32		qth_max;	/* Max average length threshold (bytes) */ +	unsigned char   Wlog;		/* log(W)		*/ +	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/ +	unsigned char   Scell_log;	/* cell size for idle damping */ +	unsigned char	flags; +#define TC_RED_ECN		1 +#define TC_RED_HARDDROP		2 +#define TC_RED_ADAPTATIVE	4 +}; + +struct tc_red_xstats { +	__u32           early;          /* Early drops */ +	__u32           pdrop;          /* Drops due to queue limits */ +	__u32           other;          /* Drops due to drop() calls */ +	__u32           marked;         /* Marked packets */ +}; + +/* GRED section */ + +#define MAX_DPs 16 + +enum { +       TCA_GRED_UNSPEC, +       TCA_GRED_PARMS, +       TCA_GRED_STAB, +       TCA_GRED_DPS, +       TCA_GRED_MAX_P, +	   __TCA_GRED_MAX, +}; + +#define TCA_GRED_MAX (__TCA_GRED_MAX - 1) + +struct tc_gred_qopt { +	__u32		limit;        /* HARD maximal queue length (bytes)    */ +	__u32		qth_min;      /* Min average length threshold (bytes) */ +	__u32		qth_max;      /* Max average length threshold (bytes) */ +	__u32		DP;           /* up to 2^32 DPs */ +	__u32		backlog; +	__u32		qave; +	__u32		forced; +	__u32		early; +	__u32		other; +	__u32		pdrop; +	__u8		Wlog;         /* log(W)               */ +	__u8		Plog;         /* log(P_max/(qth_max-qth_min)) */ +	__u8		Scell_log;    /* cell size for idle damping */ +	__u8		prio;         /* prio of this VQ */ +	__u32		packets; +	__u32		bytesin; +}; + +/* gred setup */ +struct tc_gred_sopt { +	__u32		DPs; +	__u32		def_DP; +	__u8		grio; +	__u8		flags; +	__u16		pad1; +}; + +/* CHOKe section */ + +enum { +	TCA_CHOKE_UNSPEC, +	TCA_CHOKE_PARMS, +	TCA_CHOKE_STAB, +	TCA_CHOKE_MAX_P, +	__TCA_CHOKE_MAX, +}; + +#define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1) + +struct tc_choke_qopt { +	__u32		limit;		/* Hard queue length (packets)	*/ +	__u32		qth_min;	/* Min average threshold (packets) */ +	__u32		qth_max;	/* Max average threshold (packets) */ +	unsigned char   Wlog;		/* log(W)		*/ +	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/ +	unsigned char   Scell_log;	/* cell size for idle damping */ +	unsigned char	flags;		/* see RED flags */ +}; + +struct tc_choke_xstats { +	__u32		early;          /* Early drops */ +	__u32		pdrop;          /* Drops due to queue limits */ +	__u32		other;          /* Drops due to drop() calls */ +	__u32		marked;         /* Marked packets */ +	__u32		matched;	/* Drops due to flow match */ +}; + +/* HTB section */ +#define TC_HTB_NUMPRIO		8 +#define TC_HTB_MAXDEPTH		8 +#define TC_HTB_PROTOVER		3 /* the same as HTB and TC's major */ + +struct tc_htb_opt { +	struct tc_ratespec 	rate; +	struct tc_ratespec 	ceil; +	__u32	buffer; +	__u32	cbuffer; +	__u32	quantum; +	__u32	level;		/* out only */ +	__u32	prio; +}; +struct tc_htb_glob { +	__u32 version;		/* to match HTB/TC */ +    	__u32 rate2quantum;	/* bps->quantum divisor */ +    	__u32 defcls;		/* default class number */ +	__u32 debug;		/* debug flags */ + +	/* stats */ +	__u32 direct_pkts; /* count of non shaped packets */ +}; +enum { +	TCA_HTB_UNSPEC, +	TCA_HTB_PARMS, +	TCA_HTB_INIT, +	TCA_HTB_CTAB, +	TCA_HTB_RTAB, +	__TCA_HTB_MAX, +}; + +#define TCA_HTB_MAX (__TCA_HTB_MAX - 1) + +struct tc_htb_xstats { +	__u32 lends; +	__u32 borrows; +	__u32 giants;	/* too big packets (rate will not be accurate) */ +	__u32 tokens; +	__u32 ctokens; +}; + +/* HFSC section */ + +struct tc_hfsc_qopt { +	__u16	defcls;		/* default class */ +}; + +struct tc_service_curve { +	__u32	m1;		/* slope of the first segment in bps */ +	__u32	d;		/* x-projection of the first segment in us */ +	__u32	m2;		/* slope of the second segment in bps */ +}; + +struct tc_hfsc_stats { +	__u64	work;		/* total work done */ +	__u64	rtwork;		/* work done by real-time criteria */ +	__u32	period;		/* current period */ +	__u32	level;		/* class level in hierarchy */ +}; + +enum { +	TCA_HFSC_UNSPEC, +	TCA_HFSC_RSC, +	TCA_HFSC_FSC, +	TCA_HFSC_USC, +	__TCA_HFSC_MAX, +}; + +#define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1) + + +/* CBQ section */ + +#define TC_CBQ_MAXPRIO		8 +#define TC_CBQ_MAXLEVEL		8 +#define TC_CBQ_DEF_EWMA		5 + +struct tc_cbq_lssopt { +	unsigned char	change; +	unsigned char	flags; +#define TCF_CBQ_LSS_BOUNDED	1 +#define TCF_CBQ_LSS_ISOLATED	2 +	unsigned char  	ewma_log; +	unsigned char  	level; +#define TCF_CBQ_LSS_FLAGS	1 +#define TCF_CBQ_LSS_EWMA	2 +#define TCF_CBQ_LSS_MAXIDLE	4 +#define TCF_CBQ_LSS_MINIDLE	8 +#define TCF_CBQ_LSS_OFFTIME	0x10 +#define TCF_CBQ_LSS_AVPKT	0x20 +	__u32		maxidle; +	__u32		minidle; +	__u32		offtime; +	__u32		avpkt; +}; + +struct tc_cbq_wrropt { +	unsigned char	flags; +	unsigned char	priority; +	unsigned char	cpriority; +	unsigned char	__reserved; +	__u32		allot; +	__u32		weight; +}; + +struct tc_cbq_ovl { +	unsigned char	strategy; +#define	TC_CBQ_OVL_CLASSIC	0 +#define	TC_CBQ_OVL_DELAY	1 +#define	TC_CBQ_OVL_LOWPRIO	2 +#define	TC_CBQ_OVL_DROP		3 +#define	TC_CBQ_OVL_RCLASSIC	4 +	unsigned char	priority2; +	__u16		pad; +	__u32		penalty; +}; + +struct tc_cbq_police { +	unsigned char	police; +	unsigned char	__res1; +	unsigned short	__res2; +}; + +struct tc_cbq_fopt { +	__u32		split; +	__u32		defmap; +	__u32		defchange; +}; + +struct tc_cbq_xstats { +	__u32		borrows; +	__u32		overactions; +	__s32		avgidle; +	__s32		undertime; +}; + +enum { +	TCA_CBQ_UNSPEC, +	TCA_CBQ_LSSOPT, +	TCA_CBQ_WRROPT, +	TCA_CBQ_FOPT, +	TCA_CBQ_OVL_STRATEGY, +	TCA_CBQ_RATE, +	TCA_CBQ_RTAB, +	TCA_CBQ_POLICE, +	__TCA_CBQ_MAX, +}; + +#define TCA_CBQ_MAX	(__TCA_CBQ_MAX - 1) + +/* dsmark section */ + +enum { +	TCA_DSMARK_UNSPEC, +	TCA_DSMARK_INDICES, +	TCA_DSMARK_DEFAULT_INDEX, +	TCA_DSMARK_SET_TC_INDEX, +	TCA_DSMARK_MASK, +	TCA_DSMARK_VALUE, +	__TCA_DSMARK_MAX, +}; + +#define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1) + +/* ATM  section */ + +enum { +	TCA_ATM_UNSPEC, +	TCA_ATM_FD,		/* file/socket descriptor */ +	TCA_ATM_PTR,		/* pointer to descriptor - later */ +	TCA_ATM_HDR,		/* LL header */ +	TCA_ATM_EXCESS,		/* excess traffic class (0 for CLP)  */ +	TCA_ATM_ADDR,		/* PVC address (for output only) */ +	TCA_ATM_STATE,		/* VC state (ATM_VS_*; for output only) */ +	__TCA_ATM_MAX, +}; + +#define TCA_ATM_MAX	(__TCA_ATM_MAX - 1) + +/* Network emulator */ + +enum { +	TCA_NETEM_UNSPEC, +	TCA_NETEM_CORR, +	TCA_NETEM_DELAY_DIST, +	TCA_NETEM_REORDER, +	TCA_NETEM_CORRUPT, +	TCA_NETEM_LOSS, +	TCA_NETEM_RATE, +	TCA_NETEM_ECN, +	__TCA_NETEM_MAX, +}; + +#define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1) + +struct tc_netem_qopt { +	__u32	latency;	/* added delay (us) */ +	__u32   limit;		/* fifo limit (packets) */ +	__u32	loss;		/* random packet loss (0=none ~0=100%) */ +	__u32	gap;		/* re-ordering gap (0 for none) */ +	__u32   duplicate;	/* random packet dup  (0=none ~0=100%) */ +	__u32	jitter;		/* random jitter in latency (us) */ +}; + +struct tc_netem_corr { +	__u32	delay_corr;	/* delay correlation */ +	__u32	loss_corr;	/* packet loss correlation */ +	__u32	dup_corr;	/* duplicate correlation  */ +}; + +struct tc_netem_reorder { +	__u32	probability; +	__u32	correlation; +}; + +struct tc_netem_corrupt { +	__u32	probability; +	__u32	correlation; +}; + +struct tc_netem_rate { +	__u32	rate;	/* byte/s */ +	__s32	packet_overhead; +	__u32	cell_size; +	__s32	cell_overhead; +}; + +enum { +	NETEM_LOSS_UNSPEC, +	NETEM_LOSS_GI,		/* General Intuitive - 4 state model */ +	NETEM_LOSS_GE,		/* Gilbert Elliot models */ +	__NETEM_LOSS_MAX +}; +#define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1) + +/* State transition probabilities for 4 state model */ +struct tc_netem_gimodel { +	__u32	p13; +	__u32	p31; +	__u32	p32; +	__u32	p14; +	__u32	p23; +}; + +/* Gilbert-Elliot models */ +struct tc_netem_gemodel { +	__u32 p; +	__u32 r; +	__u32 h; +	__u32 k1; +}; + +#define NETEM_DIST_SCALE	8192 +#define NETEM_DIST_MAX		16384 + +/* DRR */ + +enum { +	TCA_DRR_UNSPEC, +	TCA_DRR_QUANTUM, +	__TCA_DRR_MAX +}; + +#define TCA_DRR_MAX	(__TCA_DRR_MAX - 1) + +struct tc_drr_stats { +	__u32	deficit; +}; + +/* MQPRIO */ +#define TC_QOPT_BITMASK 15 +#define TC_QOPT_MAX_QUEUE 16 + +struct tc_mqprio_qopt { +	__u8	num_tc; +	__u8	prio_tc_map[TC_QOPT_BITMASK + 1]; +	__u8	hw; +	__u16	count[TC_QOPT_MAX_QUEUE]; +	__u16	offset[TC_QOPT_MAX_QUEUE]; +}; + +/* SFB */ + +enum { +	TCA_SFB_UNSPEC, +	TCA_SFB_PARMS, +	__TCA_SFB_MAX, +}; + +#define TCA_SFB_MAX (__TCA_SFB_MAX - 1) + +/* + * Note: increment, decrement are Q0.16 fixed-point values. + */ +struct tc_sfb_qopt { +	__u32 rehash_interval;	/* delay between hash move, in ms */ +	__u32 warmup_time;	/* double buffering warmup time in ms (warmup_time < rehash_interval) */ +	__u32 max;		/* max len of qlen_min */ +	__u32 bin_size;		/* maximum queue length per bin */ +	__u32 increment;	/* probability increment, (d1 in Blue) */ +	__u32 decrement;	/* probability decrement, (d2 in Blue) */ +	__u32 limit;		/* max SFB queue length */ +	__u32 penalty_rate;	/* inelastic flows are rate limited to 'rate' pps */ +	__u32 penalty_burst; +}; + +struct tc_sfb_xstats { +	__u32 earlydrop; +	__u32 penaltydrop; +	__u32 bucketdrop; +	__u32 queuedrop; +	__u32 childdrop; /* drops in child qdisc */ +	__u32 marked; +	__u32 maxqlen; +	__u32 maxprob; +	__u32 avgprob; +}; + +#define SFB_MAX_PROB 0xFFFF + +/* QFQ */ +enum { +	TCA_QFQ_UNSPEC, +	TCA_QFQ_WEIGHT, +	TCA_QFQ_LMAX, +	__TCA_QFQ_MAX +}; + +#define TCA_QFQ_MAX	(__TCA_QFQ_MAX - 1) + +struct tc_qfq_stats { +	__u32 weight; +	__u32 lmax; +}; + +/* CODEL */ + +enum { +	TCA_CODEL_UNSPEC, +	TCA_CODEL_TARGET, +	TCA_CODEL_LIMIT, +	TCA_CODEL_INTERVAL, +	TCA_CODEL_ECN, +	__TCA_CODEL_MAX +}; + +#define TCA_CODEL_MAX	(__TCA_CODEL_MAX - 1) + +struct tc_codel_xstats { +	__u32	maxpacket; /* largest packet we've seen so far */ +	__u32	count;	   /* how many drops we've done since the last time we +			    * entered dropping state +			    */ +	__u32	lastcount; /* count at entry to dropping state */ +	__u32	ldelay;    /* in-queue delay seen by most recently dequeued packet */ +	__s32	drop_next; /* time to drop next packet */ +	__u32	drop_overlimit; /* number of time max qdisc packet limit was hit */ +	__u32	ecn_mark;  /* number of packets we ECN marked instead of dropped */ +	__u32	dropping;  /* are we in dropping state ? */ +}; + +/* FQ_CODEL */ + +enum { +	TCA_FQ_CODEL_UNSPEC, +	TCA_FQ_CODEL_TARGET, +	TCA_FQ_CODEL_LIMIT, +	TCA_FQ_CODEL_INTERVAL, +	TCA_FQ_CODEL_ECN, +	TCA_FQ_CODEL_FLOWS, +	TCA_FQ_CODEL_QUANTUM, +	__TCA_FQ_CODEL_MAX +}; + +#define TCA_FQ_CODEL_MAX	(__TCA_FQ_CODEL_MAX - 1) + +enum { +	TCA_FQ_CODEL_XSTATS_QDISC, +	TCA_FQ_CODEL_XSTATS_CLASS, +}; + +struct tc_fq_codel_qd_stats { +	__u32	maxpacket;	/* largest packet we've seen so far */ +	__u32	drop_overlimit; /* number of time max qdisc +				 * packet limit was hit +				 */ +	__u32	ecn_mark;	/* number of packets we ECN marked +				 * instead of being dropped +				 */ +	__u32	new_flow_count; /* number of time packets +				 * created a 'new flow' +				 */ +	__u32	new_flows_len;	/* count of flows in new list */ +	__u32	old_flows_len;	/* count of flows in old list */ +}; + +struct tc_fq_codel_cl_stats { +	__s32	deficit; +	__u32	ldelay;		/* in-queue delay seen by most recently +				 * dequeued packet +				 */ +	__u32	count; +	__u32	lastcount; +	__u32	dropping; +	__s32	drop_next; +}; + +struct tc_fq_codel_xstats { +	__u32	type; +	union { +		struct tc_fq_codel_qd_stats qdisc_stats; +		struct tc_fq_codel_cl_stats class_stats; +	}; +}; + +#endif diff --git a/include/uapi/linux/pktcdvd.h b/include/uapi/linux/pktcdvd.h new file mode 100644 index 00000000000..2640b9d4e24 --- /dev/null +++ b/include/uapi/linux/pktcdvd.h @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2000 Jens Axboe <axboe@suse.de> + * Copyright (C) 2001-2004 Peter Osterlund <petero2@telia.com> + * + * May be copied or modified under the terms of the GNU General Public + * License.  See linux/COPYING for more information. + * + * Packet writing layer for ATAPI and SCSI CD-R, CD-RW, DVD-R, and + * DVD-RW devices. + * + */ +#ifndef _UAPI__PKTCDVD_H +#define _UAPI__PKTCDVD_H + +#include <linux/types.h> + +/* + * 1 for normal debug messages, 2 is very verbose. 0 to turn it off. + */ +#define PACKET_DEBUG		1 + +#define	MAX_WRITERS		8 + +#define PKT_RB_POOL_SIZE	512 + +/* + * How long we should hold a non-full packet before starting data gathering. + */ +#define PACKET_WAIT_TIME	(HZ * 5 / 1000) + +/* + * use drive write caching -- we need deferred error handling to be + * able to successfully recover with this option (drive will return good + * status as soon as the cdb is validated). + */ +#if defined(CONFIG_CDROM_PKTCDVD_WCACHE) +#define USE_WCACHING		1 +#else +#define USE_WCACHING		0 +#endif + +/* + * No user-servicable parts beyond this point -> + */ + +/* + * device types + */ +#define PACKET_CDR		1 +#define	PACKET_CDRW		2 +#define PACKET_DVDR		3 +#define PACKET_DVDRW		4 + +/* + * flags + */ +#define PACKET_WRITABLE		1	/* pd is writable */ +#define PACKET_NWA_VALID	2	/* next writable address valid */ +#define PACKET_LRA_VALID	3	/* last recorded address valid */ +#define PACKET_MERGE_SEGS	4	/* perform segment merging to keep */ +					/* underlying cdrom device happy */ + +/* + * Disc status -- from READ_DISC_INFO + */ +#define PACKET_DISC_EMPTY	0 +#define PACKET_DISC_INCOMPLETE	1 +#define PACKET_DISC_COMPLETE	2 +#define PACKET_DISC_OTHER	3 + +/* + * write type, and corresponding data block type + */ +#define PACKET_MODE1		1 +#define PACKET_MODE2		2 +#define PACKET_BLOCK_MODE1	8 +#define PACKET_BLOCK_MODE2	10 + +/* + * Last session/border status + */ +#define PACKET_SESSION_EMPTY		0 +#define PACKET_SESSION_INCOMPLETE	1 +#define PACKET_SESSION_RESERVED		2 +#define PACKET_SESSION_COMPLETE		3 + +#define PACKET_MCN			"4a656e734178626f65323030300000" + +#undef PACKET_USE_LS + +#define PKT_CTRL_CMD_SETUP	0 +#define PKT_CTRL_CMD_TEARDOWN	1 +#define PKT_CTRL_CMD_STATUS	2 + +struct pkt_ctrl_command { +	__u32 command;				/* in: Setup, teardown, status */ +	__u32 dev_index;			/* in/out: Device index */ +	__u32 dev;				/* in/out: Device nr for cdrw device */ +	__u32 pkt_dev;				/* in/out: Device nr for packet device */ +	__u32 num_devices;			/* out: Largest device index + 1 */ +	__u32 padding;				/* Not used */ +}; + +/* + * packet ioctls + */ +#define PACKET_IOCTL_MAGIC	('X') +#define PACKET_CTRL_CMD		_IOWR(PACKET_IOCTL_MAGIC, 1, struct pkt_ctrl_command) + + +#endif /* _UAPI__PKTCDVD_H */ diff --git a/include/uapi/linux/pmu.h b/include/uapi/linux/pmu.h new file mode 100644 index 00000000000..caead364b6e --- /dev/null +++ b/include/uapi/linux/pmu.h @@ -0,0 +1,139 @@ +/* + * Definitions for talking to the PMU.  The PMU is a microcontroller + * which controls battery charging and system power on PowerBook 3400 + * and 2400 models as well as the RTC and various other things. + * + * Copyright (C) 1998 Paul Mackerras. + */ + +#ifndef _UAPI_LINUX_PMU_H +#define _UAPI_LINUX_PMU_H + +#define PMU_DRIVER_VERSION	2 + +/* + * PMU commands + */ +#define PMU_POWER_CTRL0		0x10	/* control power of some devices */ +#define PMU_POWER_CTRL		0x11	/* control power of some devices */ +#define PMU_ADB_CMD		0x20	/* send ADB packet */ +#define PMU_ADB_POLL_OFF	0x21	/* disable ADB auto-poll */ +#define PMU_WRITE_NVRAM		0x33	/* write non-volatile RAM */ +#define PMU_READ_NVRAM		0x3b	/* read non-volatile RAM */ +#define PMU_SET_RTC		0x30	/* set real-time clock */ +#define PMU_READ_RTC		0x38	/* read real-time clock */ +#define PMU_SET_VOLBUTTON	0x40	/* set volume up/down position */ +#define PMU_BACKLIGHT_BRIGHT	0x41	/* set backlight brightness */ +#define PMU_GET_VOLBUTTON	0x48	/* get volume up/down position */ +#define PMU_PCEJECT		0x4c	/* eject PC-card from slot */ +#define PMU_BATTERY_STATE	0x6b	/* report battery state etc. */ +#define PMU_SMART_BATTERY_STATE	0x6f	/* report battery state (new way) */ +#define PMU_SET_INTR_MASK	0x70	/* set PMU interrupt mask */ +#define PMU_INT_ACK		0x78	/* read interrupt bits */ +#define PMU_SHUTDOWN		0x7e	/* turn power off */ +#define PMU_CPU_SPEED		0x7d	/* control CPU speed on some models */ +#define PMU_SLEEP		0x7f	/* put CPU to sleep */ +#define PMU_POWER_EVENTS	0x8f	/* Send power-event commands to PMU */ +#define PMU_I2C_CMD		0x9a	/* I2C operations */ +#define PMU_RESET		0xd0	/* reset CPU */ +#define PMU_GET_BRIGHTBUTTON	0xd9	/* report brightness up/down pos */ +#define PMU_GET_COVER		0xdc	/* report cover open/closed */ +#define PMU_SYSTEM_READY	0xdf	/* tell PMU we are awake */ +#define PMU_GET_VERSION		0xea	/* read the PMU version */ + +/* Bits to use with the PMU_POWER_CTRL0 command */ +#define PMU_POW0_ON		0x80	/* OR this to power ON the device */ +#define PMU_POW0_OFF		0x00	/* leave bit 7 to 0 to power it OFF */ +#define PMU_POW0_HARD_DRIVE	0x04	/* Hard drive power (on wallstreet/lombard ?) */ + +/* Bits to use with the PMU_POWER_CTRL command */ +#define PMU_POW_ON		0x80	/* OR this to power ON the device */ +#define PMU_POW_OFF		0x00	/* leave bit 7 to 0 to power it OFF */ +#define PMU_POW_BACKLIGHT	0x01	/* backlight power */ +#define PMU_POW_CHARGER		0x02	/* battery charger power */ +#define PMU_POW_IRLED		0x04	/* IR led power (on wallstreet) */ +#define PMU_POW_MEDIABAY	0x08	/* media bay power (wallstreet/lombard ?) */ + +/* Bits in PMU interrupt and interrupt mask bytes */ +#define PMU_INT_PCEJECT		0x04	/* PC-card eject buttons */ +#define PMU_INT_SNDBRT		0x08	/* sound/brightness up/down buttons */ +#define PMU_INT_ADB		0x10	/* ADB autopoll or reply data */ +#define PMU_INT_BATTERY		0x20	/* Battery state change */ +#define PMU_INT_ENVIRONMENT	0x40	/* Environment interrupts */ +#define PMU_INT_TICK		0x80	/* 1-second tick interrupt */ + +/* Other bits in PMU interrupt valid when PMU_INT_ADB is set */ +#define PMU_INT_ADB_AUTO	0x04	/* ADB autopoll, when PMU_INT_ADB */ +#define PMU_INT_WAITING_CHARGER	0x01	/* ??? */ +#define PMU_INT_AUTO_SRQ_POLL	0x02	/* ??? */ + +/* Bits in the environement message (either obtained via PMU_GET_COVER, + * or via PMU_INT_ENVIRONMENT on core99 */ +#define PMU_ENV_LID_CLOSED	0x01	/* The lid is closed */ + +/* I2C related definitions */ +#define PMU_I2C_MODE_SIMPLE	0 +#define PMU_I2C_MODE_STDSUB	1 +#define PMU_I2C_MODE_COMBINED	2 + +#define PMU_I2C_BUS_STATUS	0 +#define PMU_I2C_BUS_SYSCLK	1 +#define PMU_I2C_BUS_POWER	2 + +#define PMU_I2C_STATUS_OK	0 +#define PMU_I2C_STATUS_DATAREAD	1 +#define PMU_I2C_STATUS_BUSY	0xfe + + +/* Kind of PMU (model) */ +enum { +	PMU_UNKNOWN, +	PMU_OHARE_BASED,	/* 2400, 3400, 3500 (old G3 powerbook) */ +	PMU_HEATHROW_BASED,	/* PowerBook G3 series */ +	PMU_PADDINGTON_BASED,	/* 1999 PowerBook G3 */ +	PMU_KEYLARGO_BASED,	/* Core99 motherboard (PMU99) */ +	PMU_68K_V1,		/* 68K PMU, version 1 */ +	PMU_68K_V2, 		/* 68K PMU, version 2 */ +}; + +/* PMU PMU_POWER_EVENTS commands */ +enum { +	PMU_PWR_GET_POWERUP_EVENTS	= 0x00, +	PMU_PWR_SET_POWERUP_EVENTS	= 0x01, +	PMU_PWR_CLR_POWERUP_EVENTS	= 0x02, +	PMU_PWR_GET_WAKEUP_EVENTS	= 0x03, +	PMU_PWR_SET_WAKEUP_EVENTS	= 0x04, +	PMU_PWR_CLR_WAKEUP_EVENTS	= 0x05, +}; + +/* Power events wakeup bits */ +enum { +	PMU_PWR_WAKEUP_KEY		= 0x01,	/* Wake on key press */ +	PMU_PWR_WAKEUP_AC_INSERT	= 0x02, /* Wake on AC adapter plug */ +	PMU_PWR_WAKEUP_AC_CHANGE	= 0x04, +	PMU_PWR_WAKEUP_LID_OPEN		= 0x08, +	PMU_PWR_WAKEUP_RING		= 0x10, +}; +	 +/* + * Ioctl commands for the /dev/pmu device + */ +#include <linux/ioctl.h> + +/* no param */ +#define PMU_IOC_SLEEP		_IO('B', 0) +/* out param: u32*	backlight value: 0 to 15 */ +#define PMU_IOC_GET_BACKLIGHT	_IOR('B', 1, size_t) +/* in param: u32	backlight value: 0 to 15 */ +#define PMU_IOC_SET_BACKLIGHT	_IOW('B', 2, size_t) +/* out param: u32*	PMU model */ +#define PMU_IOC_GET_MODEL	_IOR('B', 3, size_t) +/* out param: u32*	has_adb: 0 or 1 */ +#define PMU_IOC_HAS_ADB		_IOR('B', 4, size_t)  +/* out param: u32*	can_sleep: 0 or 1 */ +#define PMU_IOC_CAN_SLEEP	_IOR('B', 5, size_t)  +/* no param, but historically was _IOR('B', 6, 0), meaning 4 bytes */ +#define PMU_IOC_GRAB_BACKLIGHT	_IOR('B', 6, size_t)  + + +#endif /* _UAPI_LINUX_PMU_H */ diff --git a/include/uapi/linux/poll.h b/include/uapi/linux/poll.h new file mode 100644 index 00000000000..2001fedfb22 --- /dev/null +++ b/include/uapi/linux/poll.h @@ -0,0 +1 @@ +#include <asm/poll.h> diff --git a/include/uapi/linux/posix_types.h b/include/uapi/linux/posix_types.h new file mode 100644 index 00000000000..988f76e636e --- /dev/null +++ b/include/uapi/linux/posix_types.h @@ -0,0 +1,37 @@ +#ifndef _LINUX_POSIX_TYPES_H +#define _LINUX_POSIX_TYPES_H + +#include <linux/stddef.h> + +/* + * This allows for 1024 file descriptors: if NR_OPEN is ever grown + * beyond that you'll have to change this too. But 1024 fd's seem to be + * enough even for such "real" unices like OSF/1, so hopefully this is + * one limit that doesn't have to be changed [again]. + * + * Note that POSIX wants the FD_CLEAR(fd,fdsetp) defines to be in + * <sys/time.h> (and thus <linux/time.h>) - but this is a more logical + * place for them. Solved by having dummy defines in <sys/time.h>. + */ + +/* + * This macro may have been defined in <gnu/types.h>. But we always + * use the one here. + */ +#undef __FD_SETSIZE +#define __FD_SETSIZE	1024 + +typedef struct { +	unsigned long fds_bits[__FD_SETSIZE / (8 * sizeof(long))]; +} __kernel_fd_set; + +/* Type of a signal handler.  */ +typedef void (*__kernel_sighandler_t)(int); + +/* Type of a SYSV IPC key.  */ +typedef int __kernel_key_t; +typedef int __kernel_mqd_t; + +#include <asm/posix_types.h> + +#endif /* _LINUX_POSIX_TYPES_H */ diff --git a/include/uapi/linux/ppdev.h b/include/uapi/linux/ppdev.h new file mode 100644 index 00000000000..dc18c5d23eb --- /dev/null +++ b/include/uapi/linux/ppdev.h @@ -0,0 +1,99 @@ +/* + * linux/include/linux/ppdev.h + * + * User-space parallel port device driver (header file). + * + * Copyright (C) 1998-9 Tim Waugh <tim@cyberelk.demon.co.uk> + * + * 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. + * + * Added PPGETTIME/PPSETTIME, Fred Barnes, 1999 + * Added PPGETMODES/PPGETMODE/PPGETPHASE, Fred Barnes <frmb2@ukc.ac.uk>, 03/01/2001 + */ + +#define PP_IOCTL	'p' + +/* Set mode for read/write (e.g. IEEE1284_MODE_EPP) */ +#define PPSETMODE	_IOW(PP_IOCTL, 0x80, int) + +/* Read status */ +#define PPRSTATUS	_IOR(PP_IOCTL, 0x81, unsigned char) +#define PPWSTATUS	OBSOLETE__IOW(PP_IOCTL, 0x82, unsigned char) + +/* Read/write control */ +#define PPRCONTROL	_IOR(PP_IOCTL, 0x83, unsigned char) +#define PPWCONTROL	_IOW(PP_IOCTL, 0x84, unsigned char) + +struct ppdev_frob_struct { +	unsigned char mask; +	unsigned char val; +}; +#define PPFCONTROL      _IOW(PP_IOCTL, 0x8e, struct ppdev_frob_struct) + +/* Read/write data */ +#define PPRDATA		_IOR(PP_IOCTL, 0x85, unsigned char) +#define PPWDATA		_IOW(PP_IOCTL, 0x86, unsigned char) + +/* Read/write econtrol (not used) */ +#define PPRECONTROL	OBSOLETE__IOR(PP_IOCTL, 0x87, unsigned char) +#define PPWECONTROL	OBSOLETE__IOW(PP_IOCTL, 0x88, unsigned char) + +/* Read/write FIFO (not used) */ +#define PPRFIFO		OBSOLETE__IOR(PP_IOCTL, 0x89, unsigned char) +#define PPWFIFO		OBSOLETE__IOW(PP_IOCTL, 0x8a, unsigned char) + +/* Claim the port to start using it */ +#define PPCLAIM		_IO(PP_IOCTL, 0x8b) + +/* Release the port when you aren't using it */ +#define PPRELEASE	_IO(PP_IOCTL, 0x8c) + +/* Yield the port (release it if another driver is waiting, + * then reclaim) */ +#define PPYIELD		_IO(PP_IOCTL, 0x8d) + +/* Register device exclusively (must be before PPCLAIM). */ +#define PPEXCL		_IO(PP_IOCTL, 0x8f) + +/* Data line direction: non-zero for input mode. */ +#define PPDATADIR	_IOW(PP_IOCTL, 0x90, int) + +/* Negotiate a particular IEEE 1284 mode. */ +#define PPNEGOT		_IOW(PP_IOCTL, 0x91, int) + +/* Set control lines when an interrupt occurs. */ +#define PPWCTLONIRQ	_IOW(PP_IOCTL, 0x92, unsigned char) + +/* Clear (and return) interrupt count. */ +#define PPCLRIRQ	_IOR(PP_IOCTL, 0x93, int) + +/* Set the IEEE 1284 phase that we're in (e.g. IEEE1284_PH_FWD_IDLE) */ +#define PPSETPHASE	_IOW(PP_IOCTL, 0x94, int) + +/* Set and get port timeout (struct timeval's) */ +#define PPGETTIME	_IOR(PP_IOCTL, 0x95, struct timeval) +#define PPSETTIME	_IOW(PP_IOCTL, 0x96, struct timeval) + +/* Get available modes (what the hardware can do) */ +#define PPGETMODES	_IOR(PP_IOCTL, 0x97, unsigned int) + +/* Get the current mode and phaze */ +#define PPGETMODE	_IOR(PP_IOCTL, 0x98, int) +#define PPGETPHASE	_IOR(PP_IOCTL, 0x99, int) + +/* get/set flags */ +#define PPGETFLAGS	_IOR(PP_IOCTL, 0x9a, int) +#define PPSETFLAGS	_IOW(PP_IOCTL, 0x9b, int) + +/* flags visible to the world */ +#define PP_FASTWRITE	(1<<2) +#define PP_FASTREAD	(1<<3) +#define PP_W91284PIC	(1<<4) + +/* only masks user-visible flags */ +#define PP_FLAGMASK	(PP_FASTWRITE | PP_FASTREAD | PP_W91284PIC) + + diff --git a/include/uapi/linux/ppp-comp.h b/include/uapi/linux/ppp-comp.h new file mode 100644 index 00000000000..0a15bbb04e1 --- /dev/null +++ b/include/uapi/linux/ppp-comp.h @@ -0,0 +1,93 @@ +/* + * ppp-comp.h - Definitions for doing PPP packet compression. + * + * Copyright 1994-1998 Paul Mackerras. + * + *  This program is free software; you can redistribute it and/or + *  modify it under the terms of the GNU General Public License + *  version 2 as published by the Free Software Foundation. + */ +#ifndef _UAPI_NET_PPP_COMP_H +#define _UAPI_NET_PPP_COMP_H + + +/* + * CCP codes. + */ + +#define CCP_CONFREQ	1 +#define CCP_CONFACK	2 +#define CCP_TERMREQ	5 +#define CCP_TERMACK	6 +#define CCP_RESETREQ	14 +#define CCP_RESETACK	15 + +/* + * Max # bytes for a CCP option + */ + +#define CCP_MAX_OPTION_LENGTH	32 + +/* + * Parts of a CCP packet. + */ + +#define CCP_CODE(dp)		((dp)[0]) +#define CCP_ID(dp)		((dp)[1]) +#define CCP_LENGTH(dp)		(((dp)[2] << 8) + (dp)[3]) +#define CCP_HDRLEN		4 + +#define CCP_OPT_CODE(dp)	((dp)[0]) +#define CCP_OPT_LENGTH(dp)	((dp)[1]) +#define CCP_OPT_MINLEN		2 + +/* + * Definitions for BSD-Compress. + */ + +#define CI_BSD_COMPRESS		21	/* config. option for BSD-Compress */ +#define CILEN_BSD_COMPRESS	3	/* length of config. option */ + +/* Macros for handling the 3rd byte of the BSD-Compress config option. */ +#define BSD_NBITS(x)		((x) & 0x1F)	/* number of bits requested */ +#define BSD_VERSION(x)		((x) >> 5)	/* version of option format */ +#define BSD_CURRENT_VERSION	1		/* current version number */ +#define BSD_MAKE_OPT(v, n)	(((v) << 5) | (n)) + +#define BSD_MIN_BITS		9	/* smallest code size supported */ +#define BSD_MAX_BITS		15	/* largest code size supported */ + +/* + * Definitions for Deflate. + */ + +#define CI_DEFLATE		26	/* config option for Deflate */ +#define CI_DEFLATE_DRAFT	24	/* value used in original draft RFC */ +#define CILEN_DEFLATE		4	/* length of its config option */ + +#define DEFLATE_MIN_SIZE	9 +#define DEFLATE_MAX_SIZE	15 +#define DEFLATE_METHOD_VAL	8 +#define DEFLATE_SIZE(x)		(((x) >> 4) + 8) +#define DEFLATE_METHOD(x)	((x) & 0x0F) +#define DEFLATE_MAKE_OPT(w)	((((w) - 8) << 4) + DEFLATE_METHOD_VAL) +#define DEFLATE_CHK_SEQUENCE	0 + +/* + * Definitions for MPPE. + */ + +#define CI_MPPE                18      /* config option for MPPE */ +#define CILEN_MPPE              6      /* length of config option */ + +/* + * Definitions for other, as yet unsupported, compression methods. + */ + +#define CI_PREDICTOR_1		1	/* config option for Predictor-1 */ +#define CILEN_PREDICTOR_1	2	/* length of its config option */ +#define CI_PREDICTOR_2		2	/* config option for Predictor-2 */ +#define CILEN_PREDICTOR_2	2	/* length of its config option */ + + +#endif /* _UAPI_NET_PPP_COMP_H */ diff --git a/include/uapi/linux/ppp-ioctl.h b/include/uapi/linux/ppp-ioctl.h new file mode 100644 index 00000000000..2d9a8859550 --- /dev/null +++ b/include/uapi/linux/ppp-ioctl.h @@ -0,0 +1,119 @@ +/* + * ppp-ioctl.h - PPP ioctl definitions. + * + * Copyright 1999-2002 Paul Mackerras. + * + *  This program is free software; you can redistribute it and/or + *  modify it under the terms of the GNU General Public License + *  version 2 as published by the Free Software Foundation. + */ +#ifndef _PPP_IOCTL_H +#define _PPP_IOCTL_H + +#include <linux/types.h> +#include <linux/compiler.h> + +/* + * Bit definitions for flags argument to PPPIOCGFLAGS/PPPIOCSFLAGS. + */ +#define SC_COMP_PROT	0x00000001	/* protocol compression (output) */ +#define SC_COMP_AC	0x00000002	/* header compression (output) */ +#define	SC_COMP_TCP	0x00000004	/* TCP (VJ) compression (output) */ +#define SC_NO_TCP_CCID	0x00000008	/* disable VJ connection-id comp. */ +#define SC_REJ_COMP_AC	0x00000010	/* reject adrs/ctrl comp. on input */ +#define SC_REJ_COMP_TCP	0x00000020	/* reject TCP (VJ) comp. on input */ +#define SC_CCP_OPEN	0x00000040	/* Look at CCP packets */ +#define SC_CCP_UP	0x00000080	/* May send/recv compressed packets */ +#define SC_ENABLE_IP	0x00000100	/* IP packets may be exchanged */ +#define SC_LOOP_TRAFFIC	0x00000200	/* send traffic to pppd */ +#define SC_MULTILINK	0x00000400	/* do multilink encapsulation */ +#define SC_MP_SHORTSEQ	0x00000800	/* use short MP sequence numbers */ +#define SC_COMP_RUN	0x00001000	/* compressor has been inited */ +#define SC_DECOMP_RUN	0x00002000	/* decompressor has been inited */ +#define SC_MP_XSHORTSEQ	0x00004000	/* transmit short MP seq numbers */ +#define SC_DEBUG	0x00010000	/* enable debug messages */ +#define SC_LOG_INPKT	0x00020000	/* log contents of good pkts recvd */ +#define SC_LOG_OUTPKT	0x00040000	/* log contents of pkts sent */ +#define SC_LOG_RAWIN	0x00080000	/* log all chars received */ +#define SC_LOG_FLUSH	0x00100000	/* log all chars flushed */ +#define	SC_SYNC		0x00200000	/* synchronous serial mode */ +#define	SC_MUST_COMP    0x00400000	/* no uncompressed packets may be sent or received */ +#define	SC_MASK		0x0f600fff	/* bits that user can change */ + +/* state bits */ +#define SC_XMIT_BUSY	0x10000000	/* (used by isdn_ppp?) */ +#define SC_RCV_ODDP	0x08000000	/* have rcvd char with odd parity */ +#define SC_RCV_EVNP	0x04000000	/* have rcvd char with even parity */ +#define SC_RCV_B7_1	0x02000000	/* have rcvd char with bit 7 = 1 */ +#define SC_RCV_B7_0	0x01000000	/* have rcvd char with bit 7 = 0 */ +#define SC_DC_FERROR	0x00800000	/* fatal decomp error detected */ +#define SC_DC_ERROR	0x00400000	/* non-fatal decomp error detected */ + +/* Used with PPPIOCGNPMODE/PPPIOCSNPMODE */ +struct npioctl { +	int		protocol;	/* PPP protocol, e.g. PPP_IP */ +	enum NPmode	mode; +}; + +/* Structure describing a CCP configuration option, for PPPIOCSCOMPRESS */ +struct ppp_option_data { +	__u8	__user *ptr; +	__u32	length; +	int	transmit; +}; + +/* For PPPIOCGL2TPSTATS */ +struct pppol2tp_ioc_stats { +	__u16		tunnel_id;	/* redundant */ +	__u16		session_id;	/* if zero, get tunnel stats */ +	__u32		using_ipsec:1;	/* valid only for session_id == 0 */ +	__aligned_u64	tx_packets; +	__aligned_u64	tx_bytes; +	__aligned_u64	tx_errors; +	__aligned_u64	rx_packets; +	__aligned_u64	rx_bytes; +	__aligned_u64	rx_seq_discards; +	__aligned_u64	rx_oos_packets; +	__aligned_u64	rx_errors; +}; + +/* + * Ioctl definitions. + */ + +#define	PPPIOCGFLAGS	_IOR('t', 90, int)	/* get configuration flags */ +#define	PPPIOCSFLAGS	_IOW('t', 89, int)	/* set configuration flags */ +#define	PPPIOCGASYNCMAP	_IOR('t', 88, int)	/* get async map */ +#define	PPPIOCSASYNCMAP	_IOW('t', 87, int)	/* set async map */ +#define	PPPIOCGUNIT	_IOR('t', 86, int)	/* get ppp unit number */ +#define	PPPIOCGRASYNCMAP _IOR('t', 85, int)	/* get receive async map */ +#define	PPPIOCSRASYNCMAP _IOW('t', 84, int)	/* set receive async map */ +#define	PPPIOCGMRU	_IOR('t', 83, int)	/* get max receive unit */ +#define	PPPIOCSMRU	_IOW('t', 82, int)	/* set max receive unit */ +#define	PPPIOCSMAXCID	_IOW('t', 81, int)	/* set VJ max slot ID */ +#define PPPIOCGXASYNCMAP _IOR('t', 80, ext_accm) /* get extended ACCM */ +#define PPPIOCSXASYNCMAP _IOW('t', 79, ext_accm) /* set extended ACCM */ +#define PPPIOCXFERUNIT	_IO('t', 78)		/* transfer PPP unit */ +#define PPPIOCSCOMPRESS	_IOW('t', 77, struct ppp_option_data) +#define PPPIOCGNPMODE	_IOWR('t', 76, struct npioctl) /* get NP mode */ +#define PPPIOCSNPMODE	_IOW('t', 75, struct npioctl)  /* set NP mode */ +#define PPPIOCSPASS	_IOW('t', 71, struct sock_fprog) /* set pass filter */ +#define PPPIOCSACTIVE	_IOW('t', 70, struct sock_fprog) /* set active filt */ +#define PPPIOCGDEBUG	_IOR('t', 65, int)	/* Read debug level */ +#define PPPIOCSDEBUG	_IOW('t', 64, int)	/* Set debug level */ +#define PPPIOCGIDLE	_IOR('t', 63, struct ppp_idle) /* get idle time */ +#define PPPIOCNEWUNIT	_IOWR('t', 62, int)	/* create new ppp unit */ +#define PPPIOCATTACH	_IOW('t', 61, int)	/* attach to ppp unit */ +#define PPPIOCDETACH	_IOW('t', 60, int)	/* detach from ppp unit/chan */ +#define PPPIOCSMRRU	_IOW('t', 59, int)	/* set multilink MRU */ +#define PPPIOCCONNECT	_IOW('t', 58, int)	/* connect channel to unit */ +#define PPPIOCDISCONN	_IO('t', 57)		/* disconnect channel */ +#define PPPIOCATTCHAN	_IOW('t', 56, int)	/* attach to ppp channel */ +#define PPPIOCGCHAN	_IOR('t', 55, int)	/* get ppp channel number */ +#define PPPIOCGL2TPSTATS _IOR('t', 54, struct pppol2tp_ioc_stats) + +#define SIOCGPPPSTATS   (SIOCDEVPRIVATE + 0) +#define SIOCGPPPVER     (SIOCDEVPRIVATE + 1)	/* NEVER change this!! */ +#define SIOCGPPPCSTATS  (SIOCDEVPRIVATE + 2) + +#endif /* _PPP_IOCTL_H */ diff --git a/include/uapi/linux/ppp_defs.h b/include/uapi/linux/ppp_defs.h new file mode 100644 index 00000000000..283fc05dbbd --- /dev/null +++ b/include/uapi/linux/ppp_defs.h @@ -0,0 +1,150 @@ +/* + * ppp_defs.h - PPP definitions. + * + * Copyright 1994-2000 Paul Mackerras. + * + *  This program is free software; you can redistribute it and/or + *  modify it under the terms of the GNU General Public License + *  version 2 as published by the Free Software Foundation. + */ +#include <linux/types.h> + +#ifndef _UAPI_PPP_DEFS_H_ +#define _UAPI_PPP_DEFS_H_ + +/* + * The basic PPP frame. + */ +#define PPP_HDRLEN	4	/* octets for standard ppp header */ +#define PPP_FCSLEN	2	/* octets for FCS */ +#define PPP_MRU		1500	/* default MRU = max length of info field */ + +#define PPP_ADDRESS(p)	(((__u8 *)(p))[0]) +#define PPP_CONTROL(p)	(((__u8 *)(p))[1]) +#define PPP_PROTOCOL(p)	((((__u8 *)(p))[2] << 8) + ((__u8 *)(p))[3]) + +/* + * Significant octet values. + */ +#define	PPP_ALLSTATIONS	0xff	/* All-Stations broadcast address */ +#define	PPP_UI		0x03	/* Unnumbered Information */ +#define	PPP_FLAG	0x7e	/* Flag Sequence */ +#define	PPP_ESCAPE	0x7d	/* Asynchronous Control Escape */ +#define	PPP_TRANS	0x20	/* Asynchronous transparency modifier */ + +/* + * Protocol field values. + */ +#define PPP_IP		0x21	/* Internet Protocol */ +#define PPP_AT		0x29	/* AppleTalk Protocol */ +#define PPP_IPX		0x2b	/* IPX protocol */ +#define	PPP_VJC_COMP	0x2d	/* VJ compressed TCP */ +#define	PPP_VJC_UNCOMP	0x2f	/* VJ uncompressed TCP */ +#define PPP_MP		0x3d	/* Multilink protocol */ +#define PPP_IPV6	0x57	/* Internet Protocol Version 6 */ +#define PPP_COMPFRAG	0xfb	/* fragment compressed below bundle */ +#define PPP_COMP	0xfd	/* compressed packet */ +#define PPP_MPLS_UC	0x0281	/* Multi Protocol Label Switching - Unicast */ +#define PPP_MPLS_MC	0x0283	/* Multi Protocol Label Switching - Multicast */ +#define PPP_IPCP	0x8021	/* IP Control Protocol */ +#define PPP_ATCP	0x8029	/* AppleTalk Control Protocol */ +#define PPP_IPXCP	0x802b	/* IPX Control Protocol */ +#define PPP_IPV6CP	0x8057	/* IPv6 Control Protocol */ +#define PPP_CCPFRAG	0x80fb	/* CCP at link level (below MP bundle) */ +#define PPP_CCP		0x80fd	/* Compression Control Protocol */ +#define PPP_MPLSCP	0x80fd	/* MPLS Control Protocol */ +#define PPP_LCP		0xc021	/* Link Control Protocol */ +#define PPP_PAP		0xc023	/* Password Authentication Protocol */ +#define PPP_LQR		0xc025	/* Link Quality Report protocol */ +#define PPP_CHAP	0xc223	/* Cryptographic Handshake Auth. Protocol */ +#define PPP_CBCP	0xc029	/* Callback Control Protocol */ + +/* + * Values for FCS calculations. + */ + +#define PPP_INITFCS	0xffff	/* Initial FCS value */ +#define PPP_GOODFCS	0xf0b8	/* Good final FCS value */ + + +/* + * Extended asyncmap - allows any character to be escaped. + */ + +typedef __u32		ext_accm[8]; + +/* + * What to do with network protocol (NP) packets. + */ +enum NPmode { +    NPMODE_PASS,		/* pass the packet through */ +    NPMODE_DROP,		/* silently drop the packet */ +    NPMODE_ERROR,		/* return an error */ +    NPMODE_QUEUE		/* save it up for later. */ +}; + +/* + * Statistics for LQRP and pppstats + */ +struct pppstat	{ +    __u32	ppp_discards;	/* # frames discarded */ + +    __u32	ppp_ibytes;	/* bytes received */ +    __u32	ppp_ioctects;	/* bytes received not in error */ +    __u32	ppp_ipackets;	/* packets received */ +    __u32	ppp_ierrors;	/* receive errors */ +    __u32	ppp_ilqrs;	/* # LQR frames received */ + +    __u32	ppp_obytes;	/* raw bytes sent */ +    __u32	ppp_ooctects;	/* frame bytes sent */ +    __u32	ppp_opackets;	/* packets sent */ +    __u32	ppp_oerrors;	/* transmit errors */  +    __u32	ppp_olqrs;	/* # LQR frames sent */ +}; + +struct vjstat { +    __u32	vjs_packets;	/* outbound packets */ +    __u32	vjs_compressed;	/* outbound compressed packets */ +    __u32	vjs_searches;	/* searches for connection state */ +    __u32	vjs_misses;	/* times couldn't find conn. state */ +    __u32	vjs_uncompressedin; /* inbound uncompressed packets */ +    __u32	vjs_compressedin;   /* inbound compressed packets */ +    __u32	vjs_errorin;	/* inbound unknown type packets */ +    __u32	vjs_tossed;	/* inbound packets tossed because of error */ +}; + +struct compstat { +    __u32	unc_bytes;	/* total uncompressed bytes */ +    __u32	unc_packets;	/* total uncompressed packets */ +    __u32	comp_bytes;	/* compressed bytes */ +    __u32	comp_packets;	/* compressed packets */ +    __u32	inc_bytes;	/* incompressible bytes */ +    __u32	inc_packets;	/* incompressible packets */ + +    /* the compression ratio is defined as in_count / bytes_out */ +    __u32       in_count;	/* Bytes received */ +    __u32       bytes_out;	/* Bytes transmitted */ + +    double	ratio;		/* not computed in kernel. */ +}; + +struct ppp_stats { +    struct pppstat	p;	/* basic PPP statistics */ +    struct vjstat	vj;	/* VJ header compression statistics */ +}; + +struct ppp_comp_stats { +    struct compstat	c;	/* packet compression statistics */ +    struct compstat	d;	/* packet decompression statistics */ +}; + +/* + * The following structure records the time in seconds since + * the last NP packet was sent or received. + */ +struct ppp_idle { +    __kernel_time_t xmit_idle;	/* time since last NP packet sent */ +    __kernel_time_t recv_idle;	/* time since last NP packet received */ +}; + +#endif /* _UAPI_PPP_DEFS_H_ */ diff --git a/include/uapi/linux/pps.h b/include/uapi/linux/pps.h new file mode 100644 index 00000000000..a9bb1d93451 --- /dev/null +++ b/include/uapi/linux/pps.h @@ -0,0 +1,131 @@ +/* + * PPS API header + * + * Copyright (C) 2005-2009   Rodolfo Giometti <giometti@linux.it> + * + *   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 _PPS_H_ +#define _PPS_H_ + +#include <linux/types.h> + +#define PPS_VERSION		"5.3.6" +#define PPS_MAX_SOURCES		16		/* should be enough... */ + +/* Implementation note: the logical states ``assert'' and ``clear'' + * are implemented in terms of the chip register, i.e. ``assert'' + * means the bit is set.  */ + +/* + * 3.2 New data structures + */ + +#define PPS_API_VERS_1		1 +#define PPS_API_VERS		PPS_API_VERS_1	/* we use API version 1 */ +#define PPS_MAX_NAME_LEN	32 + +/* 32-bit vs. 64-bit compatibility. + * + * 0n i386, the alignment of a uint64_t is only 4 bytes, while on most other + * architectures it's 8 bytes. On i386, there will be no padding between the + * two consecutive 'struct pps_ktime' members of struct pps_kinfo and struct + * pps_kparams. But on most platforms there will be padding to ensure correct + * alignment. + * + * The simple fix is probably to add an explicit padding. + *					 		[David Woodhouse] + */ +struct pps_ktime { +	__s64 sec; +	__s32 nsec; +	__u32 flags; +}; +#define PPS_TIME_INVALID	(1<<0)	/* used to specify timeout==NULL */ + +struct pps_kinfo { +	__u32 assert_sequence;		/* seq. num. of assert event */ +	__u32 clear_sequence; 		/* seq. num. of clear event */ +	struct pps_ktime assert_tu;	/* time of assert event */ +	struct pps_ktime clear_tu;	/* time of clear event */ +	int current_mode;		/* current mode bits */ +}; + +struct pps_kparams { +	int api_version;		/* API version # */ +	int mode;			/* mode bits */ +	struct pps_ktime assert_off_tu;	/* offset compensation for assert */ +	struct pps_ktime clear_off_tu;	/* offset compensation for clear */ +}; + +/* + * 3.3 Mode bit definitions + */ + +/* Device/implementation parameters */ +#define PPS_CAPTUREASSERT	0x01	/* capture assert events */ +#define PPS_CAPTURECLEAR	0x02	/* capture clear events */ +#define PPS_CAPTUREBOTH		0x03	/* capture assert and clear events */ + +#define PPS_OFFSETASSERT	0x10	/* apply compensation for assert ev. */ +#define PPS_OFFSETCLEAR		0x20	/* apply compensation for clear ev. */ + +#define PPS_CANWAIT		0x100	/* can we wait for an event? */ +#define PPS_CANPOLL		0x200	/* bit reserved for future use */ + +/* Kernel actions */ +#define PPS_ECHOASSERT		0x40	/* feed back assert event to output */ +#define PPS_ECHOCLEAR		0x80	/* feed back clear event to output */ + +/* Timestamp formats */ +#define PPS_TSFMT_TSPEC		0x1000	/* select timespec format */ +#define PPS_TSFMT_NTPFP		0x2000	/* select NTP format */ + +/* + * 3.4.4 New functions: disciplining the kernel timebase + */ + +/* Kernel consumers */ +#define PPS_KC_HARDPPS		0	/* hardpps() (or equivalent) */ +#define PPS_KC_HARDPPS_PLL	1	/* hardpps() constrained to +					   use a phase-locked loop */ +#define PPS_KC_HARDPPS_FLL	2	/* hardpps() constrained to +					   use a frequency-locked loop */ +/* + * Here begins the implementation-specific part! + */ + +struct pps_fdata { +	struct pps_kinfo info; +	struct pps_ktime timeout; +}; + +struct pps_bind_args { +	int tsformat;	/* format of time stamps */ +	int edge;	/* selected event type */ +	int consumer;	/* selected kernel consumer */ +}; + +#include <linux/ioctl.h> + +#define PPS_GETPARAMS		_IOR('p', 0xa1, struct pps_kparams *) +#define PPS_SETPARAMS		_IOW('p', 0xa2, struct pps_kparams *) +#define PPS_GETCAP		_IOR('p', 0xa3, int *) +#define PPS_FETCH		_IOWR('p', 0xa4, struct pps_fdata *) +#define PPS_KC_BIND		_IOW('p', 0xa5, struct pps_bind_args *) + +#endif /* _PPS_H_ */ diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h new file mode 100644 index 00000000000..289760f424a --- /dev/null +++ b/include/uapi/linux/prctl.h @@ -0,0 +1,152 @@ +#ifndef _LINUX_PRCTL_H +#define _LINUX_PRCTL_H + +/* Values to pass as first argument to prctl() */ + +#define PR_SET_PDEATHSIG  1  /* Second arg is a signal */ +#define PR_GET_PDEATHSIG  2  /* Second arg is a ptr to return the signal */ + +/* Get/set current->mm->dumpable */ +#define PR_GET_DUMPABLE   3 +#define PR_SET_DUMPABLE   4 + +/* Get/set unaligned access control bits (if meaningful) */ +#define PR_GET_UNALIGN	  5 +#define PR_SET_UNALIGN	  6 +# define PR_UNALIGN_NOPRINT	1	/* silently fix up unaligned user accesses */ +# define PR_UNALIGN_SIGBUS	2	/* generate SIGBUS on unaligned user access */ + +/* Get/set whether or not to drop capabilities on setuid() away from + * uid 0 (as per security/commoncap.c) */ +#define PR_GET_KEEPCAPS   7 +#define PR_SET_KEEPCAPS   8 + +/* Get/set floating-point emulation control bits (if meaningful) */ +#define PR_GET_FPEMU  9 +#define PR_SET_FPEMU 10 +# define PR_FPEMU_NOPRINT	1	/* silently emulate fp operations accesses */ +# define PR_FPEMU_SIGFPE	2	/* don't emulate fp operations, send SIGFPE instead */ + +/* Get/set floating-point exception mode (if meaningful) */ +#define PR_GET_FPEXC	11 +#define PR_SET_FPEXC	12 +# define PR_FP_EXC_SW_ENABLE	0x80	/* Use FPEXC for FP exception enables */ +# define PR_FP_EXC_DIV		0x010000	/* floating point divide by zero */ +# define PR_FP_EXC_OVF		0x020000	/* floating point overflow */ +# define PR_FP_EXC_UND		0x040000	/* floating point underflow */ +# define PR_FP_EXC_RES		0x080000	/* floating point inexact result */ +# define PR_FP_EXC_INV		0x100000	/* floating point invalid operation */ +# define PR_FP_EXC_DISABLED	0	/* FP exceptions disabled */ +# define PR_FP_EXC_NONRECOV	1	/* async non-recoverable exc. mode */ +# define PR_FP_EXC_ASYNC	2	/* async recoverable exception mode */ +# define PR_FP_EXC_PRECISE	3	/* precise exception mode */ + +/* Get/set whether we use statistical process timing or accurate timestamp + * based process timing */ +#define PR_GET_TIMING   13 +#define PR_SET_TIMING   14 +# define PR_TIMING_STATISTICAL  0       /* Normal, traditional, +                                                   statistical process timing */ +# define PR_TIMING_TIMESTAMP    1       /* Accurate timestamp based +                                                   process timing */ + +#define PR_SET_NAME    15		/* Set process name */ +#define PR_GET_NAME    16		/* Get process name */ + +/* Get/set process endian */ +#define PR_GET_ENDIAN	19 +#define PR_SET_ENDIAN	20 +# define PR_ENDIAN_BIG		0 +# define PR_ENDIAN_LITTLE	1	/* True little endian mode */ +# define PR_ENDIAN_PPC_LITTLE	2	/* "PowerPC" pseudo little endian */ + +/* Get/set process seccomp mode */ +#define PR_GET_SECCOMP	21 +#define PR_SET_SECCOMP	22 + +/* Get/set the capability bounding set (as per security/commoncap.c) */ +#define PR_CAPBSET_READ 23 +#define PR_CAPBSET_DROP 24 + +/* Get/set the process' ability to use the timestamp counter instruction */ +#define PR_GET_TSC 25 +#define PR_SET_TSC 26 +# define PR_TSC_ENABLE		1	/* allow the use of the timestamp counter */ +# define PR_TSC_SIGSEGV		2	/* throw a SIGSEGV instead of reading the TSC */ + +/* Get/set securebits (as per security/commoncap.c) */ +#define PR_GET_SECUREBITS 27 +#define PR_SET_SECUREBITS 28 + +/* + * Get/set the timerslack as used by poll/select/nanosleep + * A value of 0 means "use default" + */ +#define PR_SET_TIMERSLACK 29 +#define PR_GET_TIMERSLACK 30 + +#define PR_TASK_PERF_EVENTS_DISABLE		31 +#define PR_TASK_PERF_EVENTS_ENABLE		32 + +/* + * Set early/late kill mode for hwpoison memory corruption. + * This influences when the process gets killed on a memory corruption. + */ +#define PR_MCE_KILL	33 +# define PR_MCE_KILL_CLEAR   0 +# define PR_MCE_KILL_SET     1 + +# define PR_MCE_KILL_LATE    0 +# define PR_MCE_KILL_EARLY   1 +# define PR_MCE_KILL_DEFAULT 2 + +#define PR_MCE_KILL_GET 34 + +/* + * Tune up process memory map specifics. + */ +#define PR_SET_MM		35 +# define PR_SET_MM_START_CODE		1 +# define PR_SET_MM_END_CODE		2 +# define PR_SET_MM_START_DATA		3 +# define PR_SET_MM_END_DATA		4 +# define PR_SET_MM_START_STACK		5 +# define PR_SET_MM_START_BRK		6 +# define PR_SET_MM_BRK			7 +# define PR_SET_MM_ARG_START		8 +# define PR_SET_MM_ARG_END		9 +# define PR_SET_MM_ENV_START		10 +# define PR_SET_MM_ENV_END		11 +# define PR_SET_MM_AUXV			12 +# define PR_SET_MM_EXE_FILE		13 + +/* + * Set specific pid that is allowed to ptrace the current task. + * A value of 0 mean "no process". + */ +#define PR_SET_PTRACER 0x59616d61 +# define PR_SET_PTRACER_ANY ((unsigned long)-1) + +#define PR_SET_CHILD_SUBREAPER	36 +#define PR_GET_CHILD_SUBREAPER	37 + +/* + * If no_new_privs is set, then operations that grant new privileges (i.e. + * execve) will either fail or not grant them.  This affects suid/sgid, + * file capabilities, and LSMs. + * + * Operations that merely manipulate or drop existing privileges (setresuid, + * capset, etc.) will still work.  Drop those privileges if you want them gone. + * + * Changing LSM security domain is considered a new privilege.  So, for example, + * asking selinux for a specific new context (e.g. with runcon) will result + * in execve returning -EPERM. + * + * See Documentation/prctl/no_new_privs.txt for more details. + */ +#define PR_SET_NO_NEW_PRIVS	38 +#define PR_GET_NO_NEW_PRIVS	39 + +#define PR_GET_TID_ADDRESS	40 + +#endif /* _LINUX_PRCTL_H */ diff --git a/include/uapi/linux/ptp_clock.h b/include/uapi/linux/ptp_clock.h new file mode 100644 index 00000000000..94e981f810a --- /dev/null +++ b/include/uapi/linux/ptp_clock.h @@ -0,0 +1,84 @@ +/* + * PTP 1588 clock support - user space interface + * + * Copyright (C) 2010 OMICRON electronics GmbH + * + *  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 _PTP_CLOCK_H_ +#define _PTP_CLOCK_H_ + +#include <linux/ioctl.h> +#include <linux/types.h> + +/* PTP_xxx bits, for the flags field within the request structures. */ +#define PTP_ENABLE_FEATURE (1<<0) +#define PTP_RISING_EDGE    (1<<1) +#define PTP_FALLING_EDGE   (1<<2) + +/* + * struct ptp_clock_time - represents a time value + * + * The sign of the seconds field applies to the whole value. The + * nanoseconds field is always unsigned. The reserved field is + * included for sub-nanosecond resolution, should the demand for + * this ever appear. + * + */ +struct ptp_clock_time { +	__s64 sec;  /* seconds */ +	__u32 nsec; /* nanoseconds */ +	__u32 reserved; +}; + +struct ptp_clock_caps { +	int max_adj;   /* Maximum frequency adjustment in parts per billon. */ +	int n_alarm;   /* Number of programmable alarms. */ +	int n_ext_ts;  /* Number of external time stamp channels. */ +	int n_per_out; /* Number of programmable periodic signals. */ +	int pps;       /* Whether the clock supports a PPS callback. */ +	int rsv[15];   /* Reserved for future use. */ +}; + +struct ptp_extts_request { +	unsigned int index;  /* Which channel to configure. */ +	unsigned int flags;  /* Bit field for PTP_xxx flags. */ +	unsigned int rsv[2]; /* Reserved for future use. */ +}; + +struct ptp_perout_request { +	struct ptp_clock_time start;  /* Absolute start time. */ +	struct ptp_clock_time period; /* Desired period, zero means disable. */ +	unsigned int index;           /* Which channel to configure. */ +	unsigned int flags;           /* Reserved for future use. */ +	unsigned int rsv[4];          /* Reserved for future use. */ +}; + +#define PTP_CLK_MAGIC '=' + +#define PTP_CLOCK_GETCAPS  _IOR(PTP_CLK_MAGIC, 1, struct ptp_clock_caps) +#define PTP_EXTTS_REQUEST  _IOW(PTP_CLK_MAGIC, 2, struct ptp_extts_request) +#define PTP_PEROUT_REQUEST _IOW(PTP_CLK_MAGIC, 3, struct ptp_perout_request) +#define PTP_ENABLE_PPS     _IOW(PTP_CLK_MAGIC, 4, int) + +struct ptp_extts_event { +	struct ptp_clock_time t; /* Time event occured. */ +	unsigned int index;      /* Which channel produced the event. */ +	unsigned int flags;      /* Reserved for future use. */ +	unsigned int rsv[2];     /* Reserved for future use. */ +}; + +#endif diff --git a/include/uapi/linux/ptrace.h b/include/uapi/linux/ptrace.h new file mode 100644 index 00000000000..1ef6c056a9e --- /dev/null +++ b/include/uapi/linux/ptrace.h @@ -0,0 +1,81 @@ +#ifndef _UAPI_LINUX_PTRACE_H +#define _UAPI_LINUX_PTRACE_H +/* ptrace.h */ +/* structs and defines to help the user use the ptrace system call. */ + +/* has the defines to get at the registers. */ + + +#define PTRACE_TRACEME		   0 +#define PTRACE_PEEKTEXT		   1 +#define PTRACE_PEEKDATA		   2 +#define PTRACE_PEEKUSR		   3 +#define PTRACE_POKETEXT		   4 +#define PTRACE_POKEDATA		   5 +#define PTRACE_POKEUSR		   6 +#define PTRACE_CONT		   7 +#define PTRACE_KILL		   8 +#define PTRACE_SINGLESTEP	   9 + +#define PTRACE_ATTACH		  16 +#define PTRACE_DETACH		  17 + +#define PTRACE_SYSCALL		  24 + +/* 0x4200-0x4300 are reserved for architecture-independent additions.  */ +#define PTRACE_SETOPTIONS	0x4200 +#define PTRACE_GETEVENTMSG	0x4201 +#define PTRACE_GETSIGINFO	0x4202 +#define PTRACE_SETSIGINFO	0x4203 + +/* + * Generic ptrace interface that exports the architecture specific regsets + * using the corresponding NT_* types (which are also used in the core dump). + * Please note that the NT_PRSTATUS note type in a core dump contains a full + * 'struct elf_prstatus'. But the user_regset for NT_PRSTATUS contains just the + * elf_gregset_t that is the pr_reg field of 'struct elf_prstatus'. For all the + * other user_regset flavors, the user_regset layout and the ELF core dump note + * payload are exactly the same layout. + * + * This interface usage is as follows: + *	struct iovec iov = { buf, len}; + * + *	ret = ptrace(PTRACE_GETREGSET/PTRACE_SETREGSET, pid, NT_XXX_TYPE, &iov); + * + * On the successful completion, iov.len will be updated by the kernel, + * specifying how much the kernel has written/read to/from the user's iov.buf. + */ +#define PTRACE_GETREGSET	0x4204 +#define PTRACE_SETREGSET	0x4205 + +#define PTRACE_SEIZE		0x4206 +#define PTRACE_INTERRUPT	0x4207 +#define PTRACE_LISTEN		0x4208 + +/* Wait extended result codes for the above trace options.  */ +#define PTRACE_EVENT_FORK	1 +#define PTRACE_EVENT_VFORK	2 +#define PTRACE_EVENT_CLONE	3 +#define PTRACE_EVENT_EXEC	4 +#define PTRACE_EVENT_VFORK_DONE	5 +#define PTRACE_EVENT_EXIT	6 +#define PTRACE_EVENT_SECCOMP	7 +/* Extended result codes which enabled by means other than options.  */ +#define PTRACE_EVENT_STOP	128 + +/* Options set using PTRACE_SETOPTIONS or using PTRACE_SEIZE @data param */ +#define PTRACE_O_TRACESYSGOOD	1 +#define PTRACE_O_TRACEFORK	(1 << PTRACE_EVENT_FORK) +#define PTRACE_O_TRACEVFORK	(1 << PTRACE_EVENT_VFORK) +#define PTRACE_O_TRACECLONE	(1 << PTRACE_EVENT_CLONE) +#define PTRACE_O_TRACEEXEC	(1 << PTRACE_EVENT_EXEC) +#define PTRACE_O_TRACEVFORKDONE	(1 << PTRACE_EVENT_VFORK_DONE) +#define PTRACE_O_TRACEEXIT	(1 << PTRACE_EVENT_EXIT) +#define PTRACE_O_TRACESECCOMP	(1 << PTRACE_EVENT_SECCOMP) + +#define PTRACE_O_MASK		0x000000ff + +#include <asm/ptrace.h> + + +#endif /* _UAPI_LINUX_PTRACE_H */ diff --git a/include/uapi/linux/qnx4_fs.h b/include/uapi/linux/qnx4_fs.h new file mode 100644 index 00000000000..8b9aee1a9ce --- /dev/null +++ b/include/uapi/linux/qnx4_fs.h @@ -0,0 +1,88 @@ +/* + *  Name                         : qnx4_fs.h + *  Author                       : Richard Frowijn + *  Function                     : qnx4 global filesystem definitions + *  History                      : 23-03-1998 created + */ +#ifndef _LINUX_QNX4_FS_H +#define _LINUX_QNX4_FS_H + +#include <linux/types.h> +#include <linux/qnxtypes.h> +#include <linux/magic.h> + +#define QNX4_ROOT_INO 1 + +#define QNX4_MAX_XTNTS_PER_XBLK	60 +/* for di_status */ +#define QNX4_FILE_USED          0x01 +#define QNX4_FILE_MODIFIED      0x02 +#define QNX4_FILE_BUSY          0x04 +#define QNX4_FILE_LINK          0x08 +#define QNX4_FILE_INODE         0x10 +#define QNX4_FILE_FSYSCLEAN     0x20 + +#define QNX4_I_MAP_SLOTS	8 +#define QNX4_Z_MAP_SLOTS	64 +#define QNX4_VALID_FS		0x0001	/* Clean fs. */ +#define QNX4_ERROR_FS		0x0002	/* fs has errors. */ +#define QNX4_BLOCK_SIZE         0x200	/* blocksize of 512 bytes */ +#define QNX4_BLOCK_SIZE_BITS    9	/* blocksize shift */ +#define QNX4_DIR_ENTRY_SIZE     0x040	/* dir entry size of 64 bytes */ +#define QNX4_DIR_ENTRY_SIZE_BITS 6	/* dir entry size shift */ +#define QNX4_XBLK_ENTRY_SIZE    0x200	/* xblk entry size */ +#define QNX4_INODES_PER_BLOCK   0x08	/* 512 / 64 */ + +/* for filenames */ +#define QNX4_SHORT_NAME_MAX	16 +#define QNX4_NAME_MAX		48 + +/* + * This is the original qnx4 inode layout on disk. + */ +struct qnx4_inode_entry { +	char		di_fname[QNX4_SHORT_NAME_MAX]; +	qnx4_off_t	di_size; +	qnx4_xtnt_t	di_first_xtnt; +	__le32		di_xblk; +	__le32		di_ftime; +	__le32		di_mtime; +	__le32		di_atime; +	__le32		di_ctime; +	qnx4_nxtnt_t	di_num_xtnts; +	qnx4_mode_t	di_mode; +	qnx4_muid_t	di_uid; +	qnx4_mgid_t	di_gid; +	qnx4_nlink_t	di_nlink; +	__u8		di_zero[4]; +	qnx4_ftype_t	di_type; +	__u8		di_status; +}; + +struct qnx4_link_info { +	char		dl_fname[QNX4_NAME_MAX]; +	__le32		dl_inode_blk; +	__u8		dl_inode_ndx; +	__u8		dl_spare[10]; +	__u8		dl_status; +}; + +struct qnx4_xblk { +	__le32		xblk_next_xblk; +	__le32		xblk_prev_xblk; +	__u8		xblk_num_xtnts; +	__u8		xblk_spare[3]; +	__le32		xblk_num_blocks; +	qnx4_xtnt_t	xblk_xtnts[QNX4_MAX_XTNTS_PER_XBLK]; +	char		xblk_signature[8]; +	qnx4_xtnt_t	xblk_first_xtnt; +}; + +struct qnx4_super_block { +	struct qnx4_inode_entry RootDir; +	struct qnx4_inode_entry Inode; +	struct qnx4_inode_entry Boot; +	struct qnx4_inode_entry AltBoot; +}; + +#endif diff --git a/include/uapi/linux/qnxtypes.h b/include/uapi/linux/qnxtypes.h new file mode 100644 index 00000000000..bebbe5cc4fb --- /dev/null +++ b/include/uapi/linux/qnxtypes.h @@ -0,0 +1,28 @@ +/* + *  Name                         : qnxtypes.h + *  Author                       : Richard Frowijn + *  Function                     : standard qnx types + *  History                      : 22-03-1998 created + * + */ + +#ifndef _QNX4TYPES_H +#define _QNX4TYPES_H + +#include <linux/types.h> + +typedef __le16 qnx4_nxtnt_t; +typedef __u8  qnx4_ftype_t; + +typedef struct { +	__le32 xtnt_blk; +	__le32 xtnt_size; +} qnx4_xtnt_t; + +typedef __le16 qnx4_mode_t; +typedef __le16 qnx4_muid_t; +typedef __le16 qnx4_mgid_t; +typedef __le32 qnx4_off_t; +typedef __le16 qnx4_nlink_t; + +#endif diff --git a/include/uapi/linux/quota.h b/include/uapi/linux/quota.h new file mode 100644 index 00000000000..3b6cfbeb086 --- /dev/null +++ b/include/uapi/linux/quota.h @@ -0,0 +1,171 @@ +/* + * Copyright (c) 1982, 1986 Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Robert Elz at The University of Melbourne. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef _UAPI_LINUX_QUOTA_ +#define _UAPI_LINUX_QUOTA_ + +#include <linux/errno.h> +#include <linux/types.h> + +#define __DQUOT_VERSION__	"dquot_6.5.2" + +#define MAXQUOTAS 2 +#define USRQUOTA  0		/* element used for user quotas */ +#define GRPQUOTA  1		/* element used for group quotas */ + +/* + * Definitions for the default names of the quotas files. + */ +#define INITQFNAMES { \ +	"user",    /* USRQUOTA */ \ +	"group",   /* GRPQUOTA */ \ +	"undefined", \ +}; + +/* + * Command definitions for the 'quotactl' system call. + * The commands are broken into a main command defined below + * and a subcommand that is used to convey the type of + * quota that is being manipulated (see above). + */ +#define SUBCMDMASK  0x00ff +#define SUBCMDSHIFT 8 +#define QCMD(cmd, type)  (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK)) + +#define Q_SYNC     0x800001	/* sync disk copy of a filesystems quotas */ +#define Q_QUOTAON  0x800002	/* turn quotas on */ +#define Q_QUOTAOFF 0x800003	/* turn quotas off */ +#define Q_GETFMT   0x800004	/* get quota format used on given filesystem */ +#define Q_GETINFO  0x800005	/* get information about quota files */ +#define Q_SETINFO  0x800006	/* set information about quota files */ +#define Q_GETQUOTA 0x800007	/* get user quota structure */ +#define Q_SETQUOTA 0x800008	/* set user quota structure */ + +/* Quota format type IDs */ +#define	QFMT_VFS_OLD 1 +#define	QFMT_VFS_V0 2 +#define QFMT_OCFS2 3 +#define	QFMT_VFS_V1 4 + +/* Size of block in which space limits are passed through the quota + * interface */ +#define QIF_DQBLKSIZE_BITS 10 +#define QIF_DQBLKSIZE (1 << QIF_DQBLKSIZE_BITS) + +/* + * Quota structure used for communication with userspace via quotactl + * Following flags are used to specify which fields are valid + */ +enum { +	QIF_BLIMITS_B = 0, +	QIF_SPACE_B, +	QIF_ILIMITS_B, +	QIF_INODES_B, +	QIF_BTIME_B, +	QIF_ITIME_B, +}; + +#define QIF_BLIMITS	(1 << QIF_BLIMITS_B) +#define QIF_SPACE	(1 << QIF_SPACE_B) +#define QIF_ILIMITS	(1 << QIF_ILIMITS_B) +#define QIF_INODES	(1 << QIF_INODES_B) +#define QIF_BTIME	(1 << QIF_BTIME_B) +#define QIF_ITIME	(1 << QIF_ITIME_B) +#define QIF_LIMITS	(QIF_BLIMITS | QIF_ILIMITS) +#define QIF_USAGE	(QIF_SPACE | QIF_INODES) +#define QIF_TIMES	(QIF_BTIME | QIF_ITIME) +#define QIF_ALL		(QIF_LIMITS | QIF_USAGE | QIF_TIMES) + +struct if_dqblk { +	__u64 dqb_bhardlimit; +	__u64 dqb_bsoftlimit; +	__u64 dqb_curspace; +	__u64 dqb_ihardlimit; +	__u64 dqb_isoftlimit; +	__u64 dqb_curinodes; +	__u64 dqb_btime; +	__u64 dqb_itime; +	__u32 dqb_valid; +}; + +/* + * Structure used for setting quota information about file via quotactl + * Following flags are used to specify which fields are valid + */ +#define IIF_BGRACE	1 +#define IIF_IGRACE	2 +#define IIF_FLAGS	4 +#define IIF_ALL		(IIF_BGRACE | IIF_IGRACE | IIF_FLAGS) + +struct if_dqinfo { +	__u64 dqi_bgrace; +	__u64 dqi_igrace; +	__u32 dqi_flags; +	__u32 dqi_valid; +}; + +/* + * Definitions for quota netlink interface + */ +#define QUOTA_NL_NOWARN 0 +#define QUOTA_NL_IHARDWARN 1		/* Inode hardlimit reached */ +#define QUOTA_NL_ISOFTLONGWARN 2 	/* Inode grace time expired */ +#define QUOTA_NL_ISOFTWARN 3		/* Inode softlimit reached */ +#define QUOTA_NL_BHARDWARN 4		/* Block hardlimit reached */ +#define QUOTA_NL_BSOFTLONGWARN 5	/* Block grace time expired */ +#define QUOTA_NL_BSOFTWARN 6		/* Block softlimit reached */ +#define QUOTA_NL_IHARDBELOW 7		/* Usage got below inode hardlimit */ +#define QUOTA_NL_ISOFTBELOW 8		/* Usage got below inode softlimit */ +#define QUOTA_NL_BHARDBELOW 9		/* Usage got below block hardlimit */ +#define QUOTA_NL_BSOFTBELOW 10		/* Usage got below block softlimit */ + +enum { +	QUOTA_NL_C_UNSPEC, +	QUOTA_NL_C_WARNING, +	__QUOTA_NL_C_MAX, +}; +#define QUOTA_NL_C_MAX (__QUOTA_NL_C_MAX - 1) + +enum { +	QUOTA_NL_A_UNSPEC, +	QUOTA_NL_A_QTYPE, +	QUOTA_NL_A_EXCESS_ID, +	QUOTA_NL_A_WARNING, +	QUOTA_NL_A_DEV_MAJOR, +	QUOTA_NL_A_DEV_MINOR, +	QUOTA_NL_A_CAUSED_ID, +	__QUOTA_NL_A_MAX, +}; +#define QUOTA_NL_A_MAX (__QUOTA_NL_A_MAX - 1) + + +#endif /* _UAPI_LINUX_QUOTA_ */ diff --git a/include/uapi/linux/radeonfb.h b/include/uapi/linux/radeonfb.h new file mode 100644 index 00000000000..8c4bbdecc44 --- /dev/null +++ b/include/uapi/linux/radeonfb.h @@ -0,0 +1,15 @@ +#ifndef __LINUX_RADEONFB_H__ +#define __LINUX_RADEONFB_H__ + +#include <asm/ioctl.h> +#include <linux/types.h> + +#define ATY_RADEON_LCD_ON	0x00000001 +#define ATY_RADEON_CRT_ON	0x00000002 + + +#define FBIO_RADEON_GET_MIRROR	_IOR('@', 3, size_t) +#define FBIO_RADEON_SET_MIRROR	_IOW('@', 4, size_t) + +#endif + diff --git a/include/uapi/linux/random.h b/include/uapi/linux/random.h new file mode 100644 index 00000000000..7471b5b3b8b --- /dev/null +++ b/include/uapi/linux/random.h @@ -0,0 +1,50 @@ +/* + * include/linux/random.h + * + * Include file for the random number generator. + */ + +#ifndef _UAPI_LINUX_RANDOM_H +#define _UAPI_LINUX_RANDOM_H + +#include <linux/types.h> +#include <linux/ioctl.h> +#include <linux/irqnr.h> + +/* ioctl()'s for the random number generator */ + +/* Get the entropy count. */ +#define RNDGETENTCNT	_IOR( 'R', 0x00, int ) + +/* Add to (or subtract from) the entropy count.  (Superuser only.) */ +#define RNDADDTOENTCNT	_IOW( 'R', 0x01, int ) + +/* Get the contents of the entropy pool.  (Superuser only.) */ +#define RNDGETPOOL	_IOR( 'R', 0x02, int [2] ) + +/*  + * Write bytes into the entropy pool and add to the entropy count. + * (Superuser only.) + */ +#define RNDADDENTROPY	_IOW( 'R', 0x03, int [2] ) + +/* Clear entropy count to 0.  (Superuser only.) */ +#define RNDZAPENTCNT	_IO( 'R', 0x04 ) + +/* Clear the entropy pool and associated counters.  (Superuser only.) */ +#define RNDCLEARPOOL	_IO( 'R', 0x06 ) + +struct rand_pool_info { +	int	entropy_count; +	int	buf_size; +	__u32	buf[0]; +}; + +struct rnd_state { +	__u32 s1, s2, s3; +}; + +/* Exported functions */ + + +#endif /* _UAPI_LINUX_RANDOM_H */ diff --git a/include/uapi/linux/raw.h b/include/uapi/linux/raw.h new file mode 100644 index 00000000000..62d543e7060 --- /dev/null +++ b/include/uapi/linux/raw.h @@ -0,0 +1,18 @@ +#ifndef __LINUX_RAW_H +#define __LINUX_RAW_H + +#include <linux/types.h> + +#define RAW_SETBIND	_IO( 0xac, 0 ) +#define RAW_GETBIND	_IO( 0xac, 1 ) + +struct raw_config_request  +{ +	int	raw_minor; +	__u64	block_major; +	__u64	block_minor; +}; + +#define MAX_RAW_MINORS CONFIG_MAX_RAW_DEVS + +#endif /* __LINUX_RAW_H */ diff --git a/include/uapi/linux/rds.h b/include/uapi/linux/rds.h new file mode 100644 index 00000000000..91950950aa5 --- /dev/null +++ b/include/uapi/linux/rds.h @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2008 Oracle.  All rights reserved. + * + * This software is available to you under a choice of one of two + * licenses.  You may choose to be licensed under the terms of the GNU + * General Public License (GPL) Version 2, available from the file + * COPYING in the main directory of this source tree, or the + * OpenIB.org BSD license below: + * + *     Redistribution and use in source and binary forms, with or + *     without modification, are permitted provided that the following + *     conditions are met: + * + *      - Redistributions of source code must retain the above + *        copyright notice, this list of conditions and the following + *        disclaimer. + * + *      - Redistributions in binary form must reproduce the above + *        copyright notice, this list of conditions and the following + *        disclaimer in the documentation and/or other materials + *        provided with the distribution. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + */ + +#ifndef _LINUX_RDS_H +#define _LINUX_RDS_H + +#include <linux/types.h> + +#define RDS_IB_ABI_VERSION		0x301 + +/* + * setsockopt/getsockopt for SOL_RDS + */ +#define RDS_CANCEL_SENT_TO      	1 +#define RDS_GET_MR			2 +#define RDS_FREE_MR			3 +/* deprecated: RDS_BARRIER 4 */ +#define RDS_RECVERR			5 +#define RDS_CONG_MONITOR		6 +#define RDS_GET_MR_FOR_DEST		7 + +/* + * Control message types for SOL_RDS. + * + * CMSG_RDMA_ARGS (sendmsg) + *	Request a RDMA transfer to/from the specified + *	memory ranges. + *	The cmsg_data is a struct rds_rdma_args. + * RDS_CMSG_RDMA_DEST (recvmsg, sendmsg) + *	Kernel informs application about intended + *	source/destination of a RDMA transfer + * RDS_CMSG_RDMA_MAP (sendmsg) + *	Application asks kernel to map the given + *	memory range into a IB MR, and send the + *	R_Key along in an RDS extension header. + *	The cmsg_data is a struct rds_get_mr_args, + *	the same as for the GET_MR setsockopt. + * RDS_CMSG_RDMA_STATUS (recvmsg) + *	Returns the status of a completed RDMA operation. + */ +#define RDS_CMSG_RDMA_ARGS		1 +#define RDS_CMSG_RDMA_DEST		2 +#define RDS_CMSG_RDMA_MAP		3 +#define RDS_CMSG_RDMA_STATUS		4 +#define RDS_CMSG_CONG_UPDATE		5 +#define RDS_CMSG_ATOMIC_FADD		6 +#define RDS_CMSG_ATOMIC_CSWP		7 +#define RDS_CMSG_MASKED_ATOMIC_FADD	8 +#define RDS_CMSG_MASKED_ATOMIC_CSWP	9 + +#define RDS_INFO_FIRST			10000 +#define RDS_INFO_COUNTERS		10000 +#define RDS_INFO_CONNECTIONS		10001 +/* 10002 aka RDS_INFO_FLOWS is deprecated */ +#define RDS_INFO_SEND_MESSAGES		10003 +#define RDS_INFO_RETRANS_MESSAGES       10004 +#define RDS_INFO_RECV_MESSAGES          10005 +#define RDS_INFO_SOCKETS                10006 +#define RDS_INFO_TCP_SOCKETS            10007 +#define RDS_INFO_IB_CONNECTIONS		10008 +#define RDS_INFO_CONNECTION_STATS	10009 +#define RDS_INFO_IWARP_CONNECTIONS	10010 +#define RDS_INFO_LAST			10010 + +struct rds_info_counter { +	uint8_t	name[32]; +	uint64_t	value; +} __attribute__((packed)); + +#define RDS_INFO_CONNECTION_FLAG_SENDING	0x01 +#define RDS_INFO_CONNECTION_FLAG_CONNECTING	0x02 +#define RDS_INFO_CONNECTION_FLAG_CONNECTED	0x04 + +#define TRANSNAMSIZ	16 + +struct rds_info_connection { +	uint64_t	next_tx_seq; +	uint64_t	next_rx_seq; +	__be32		laddr; +	__be32		faddr; +	uint8_t	transport[TRANSNAMSIZ];		/* null term ascii */ +	uint8_t	flags; +} __attribute__((packed)); + +#define RDS_INFO_MESSAGE_FLAG_ACK               0x01 +#define RDS_INFO_MESSAGE_FLAG_FAST_ACK          0x02 + +struct rds_info_message { +	uint64_t	seq; +	uint32_t	len; +	__be32		laddr; +	__be32		faddr; +	__be16		lport; +	__be16		fport; +	uint8_t	flags; +} __attribute__((packed)); + +struct rds_info_socket { +	uint32_t	sndbuf; +	__be32		bound_addr; +	__be32		connected_addr; +	__be16		bound_port; +	__be16		connected_port; +	uint32_t	rcvbuf; +	uint64_t	inum; +} __attribute__((packed)); + +struct rds_info_tcp_socket { +	__be32          local_addr; +	__be16          local_port; +	__be32          peer_addr; +	__be16          peer_port; +	uint64_t       hdr_rem; +	uint64_t       data_rem; +	uint32_t       last_sent_nxt; +	uint32_t       last_expected_una; +	uint32_t       last_seen_una; +} __attribute__((packed)); + +#define RDS_IB_GID_LEN	16 +struct rds_info_rdma_connection { +	__be32		src_addr; +	__be32		dst_addr; +	uint8_t		src_gid[RDS_IB_GID_LEN]; +	uint8_t		dst_gid[RDS_IB_GID_LEN]; + +	uint32_t	max_send_wr; +	uint32_t	max_recv_wr; +	uint32_t	max_send_sge; +	uint32_t	rdma_mr_max; +	uint32_t	rdma_mr_size; +}; + +/* + * Congestion monitoring. + * Congestion control in RDS happens at the host connection + * level by exchanging a bitmap marking congested ports. + * By default, a process sleeping in poll() is always woken + * up when the congestion map is updated. + * With explicit monitoring, an application can have more + * fine-grained control. + * The application installs a 64bit mask value in the socket, + * where each bit corresponds to a group of ports. + * When a congestion update arrives, RDS checks the set of + * ports that are now uncongested against the list bit mask + * installed in the socket, and if they overlap, we queue a + * cong_notification on the socket. + * + * To install the congestion monitor bitmask, use RDS_CONG_MONITOR + * with the 64bit mask. + * Congestion updates are received via RDS_CMSG_CONG_UPDATE + * control messages. + * + * The correspondence between bits and ports is + *	1 << (portnum % 64) + */ +#define RDS_CONG_MONITOR_SIZE	64 +#define RDS_CONG_MONITOR_BIT(port)  (((unsigned int) port) % RDS_CONG_MONITOR_SIZE) +#define RDS_CONG_MONITOR_MASK(port) (1ULL << RDS_CONG_MONITOR_BIT(port)) + +/* + * RDMA related types + */ + +/* + * This encapsulates a remote memory location. + * In the current implementation, it contains the R_Key + * of the remote memory region, and the offset into it + * (so that the application does not have to worry about + * alignment). + */ +typedef uint64_t	rds_rdma_cookie_t; + +struct rds_iovec { +	uint64_t	addr; +	uint64_t	bytes; +}; + +struct rds_get_mr_args { +	struct rds_iovec vec; +	uint64_t	cookie_addr; +	uint64_t	flags; +}; + +struct rds_get_mr_for_dest_args { +	struct sockaddr_storage	dest_addr; +	struct rds_iovec 	vec; +	uint64_t		cookie_addr; +	uint64_t		flags; +}; + +struct rds_free_mr_args { +	rds_rdma_cookie_t cookie; +	uint64_t	flags; +}; + +struct rds_rdma_args { +	rds_rdma_cookie_t cookie; +	struct rds_iovec remote_vec; +	uint64_t	local_vec_addr; +	uint64_t	nr_local; +	uint64_t	flags; +	uint64_t	user_token; +}; + +struct rds_atomic_args { +	rds_rdma_cookie_t cookie; +	uint64_t 	local_addr; +	uint64_t 	remote_addr; +	union { +		struct { +			uint64_t	compare; +			uint64_t	swap; +		} cswp; +		struct { +			uint64_t	add; +		} fadd; +		struct { +			uint64_t	compare; +			uint64_t	swap; +			uint64_t	compare_mask; +			uint64_t	swap_mask; +		} m_cswp; +		struct { +			uint64_t	add; +			uint64_t	nocarry_mask; +		} m_fadd; +	}; +	uint64_t	flags; +	uint64_t	user_token; +}; + +struct rds_rdma_notify { +	uint64_t	user_token; +	int32_t		status; +}; + +#define RDS_RDMA_SUCCESS	0 +#define RDS_RDMA_REMOTE_ERROR	1 +#define RDS_RDMA_CANCELED	2 +#define RDS_RDMA_DROPPED	3 +#define RDS_RDMA_OTHER_ERROR	4 + +/* + * Common set of flags for all RDMA related structs + */ +#define RDS_RDMA_READWRITE	0x0001 +#define RDS_RDMA_FENCE		0x0002	/* use FENCE for immediate send */ +#define RDS_RDMA_INVALIDATE	0x0004	/* invalidate R_Key after freeing MR */ +#define RDS_RDMA_USE_ONCE	0x0008	/* free MR after use */ +#define RDS_RDMA_DONTWAIT	0x0010	/* Don't wait in SET_BARRIER */ +#define RDS_RDMA_NOTIFY_ME	0x0020	/* Notify when operation completes */ +#define RDS_RDMA_SILENT		0x0040	/* Do not interrupt remote */ + +#endif /* IB_RDS_H */ diff --git a/include/uapi/linux/reboot.h b/include/uapi/linux/reboot.h new file mode 100644 index 00000000000..09d056d4fc5 --- /dev/null +++ b/include/uapi/linux/reboot.h @@ -0,0 +1,39 @@ +#ifndef _UAPI_LINUX_REBOOT_H +#define _UAPI_LINUX_REBOOT_H + +/* + * Magic values required to use _reboot() system call. + */ + +#define	LINUX_REBOOT_MAGIC1	0xfee1dead +#define	LINUX_REBOOT_MAGIC2	672274793 +#define	LINUX_REBOOT_MAGIC2A	85072278 +#define	LINUX_REBOOT_MAGIC2B	369367448 +#define	LINUX_REBOOT_MAGIC2C	537993216 + + +/* + * Commands accepted by the _reboot() system call. + * + * RESTART     Restart system using default command and mode. + * HALT        Stop OS and give system control to ROM monitor, if any. + * CAD_ON      Ctrl-Alt-Del sequence causes RESTART command. + * CAD_OFF     Ctrl-Alt-Del sequence sends SIGINT to init task. + * POWER_OFF   Stop OS and remove all power from system, if possible. + * RESTART2    Restart system using given command string. + * SW_SUSPEND  Suspend system using software suspend if compiled in. + * KEXEC       Restart system using a previously loaded Linux kernel + */ + +#define	LINUX_REBOOT_CMD_RESTART	0x01234567 +#define	LINUX_REBOOT_CMD_HALT		0xCDEF0123 +#define	LINUX_REBOOT_CMD_CAD_ON		0x89ABCDEF +#define	LINUX_REBOOT_CMD_CAD_OFF	0x00000000 +#define	LINUX_REBOOT_CMD_POWER_OFF	0x4321FEDC +#define	LINUX_REBOOT_CMD_RESTART2	0xA1B2C3D4 +#define	LINUX_REBOOT_CMD_SW_SUSPEND	0xD000FCE2 +#define	LINUX_REBOOT_CMD_KEXEC		0x45584543 + + + +#endif /* _UAPI_LINUX_REBOOT_H */ diff --git a/include/uapi/linux/reiserfs_fs.h b/include/uapi/linux/reiserfs_fs.h new file mode 100644 index 00000000000..ea3700cd736 --- /dev/null +++ b/include/uapi/linux/reiserfs_fs.h @@ -0,0 +1,26 @@ +/* + * Copyright 1996, 1997, 1998 Hans Reiser, see reiserfs/README for licensing and copyright details + */ +#ifndef _LINUX_REISER_FS_H +#define _LINUX_REISER_FS_H + +#include <linux/types.h> +#include <linux/magic.h> + +/* + *  include/linux/reiser_fs.h + * + *  Reiser File System constants and structures + * + */ + +/* ioctl's command */ +#define REISERFS_IOC_UNPACK		_IOW(0xCD,1,long) +/* define following flags to be the same as in ext2, so that chattr(1), +   lsattr(1) will work with us. */ +#define REISERFS_IOC_GETFLAGS		FS_IOC_GETFLAGS +#define REISERFS_IOC_SETFLAGS		FS_IOC_SETFLAGS +#define REISERFS_IOC_GETVERSION		FS_IOC_GETVERSION +#define REISERFS_IOC_SETVERSION		FS_IOC_SETVERSION + +#endif				/* _LINUX_REISER_FS_H */ diff --git a/include/uapi/linux/reiserfs_xattr.h b/include/uapi/linux/reiserfs_xattr.h new file mode 100644 index 00000000000..d8ce17c2459 --- /dev/null +++ b/include/uapi/linux/reiserfs_xattr.h @@ -0,0 +1,24 @@ +/* +  File: linux/reiserfs_xattr.h +*/ + +#ifndef _LINUX_REISERFS_XATTR_H +#define _LINUX_REISERFS_XATTR_H + +#include <linux/types.h> + +/* Magic value in header */ +#define REISERFS_XATTR_MAGIC 0x52465841	/* "RFXA" */ + +struct reiserfs_xattr_header { +	__le32 h_magic;		/* magic number for identification */ +	__le32 h_hash;		/* hash of the value */ +}; + +struct reiserfs_security_handle { +	char *name; +	void *value; +	size_t length; +}; + +#endif  /*  _LINUX_REISERFS_XATTR_H  */ diff --git a/include/uapi/linux/resource.h b/include/uapi/linux/resource.h new file mode 100644 index 00000000000..e0ed28477f4 --- /dev/null +++ b/include/uapi/linux/resource.h @@ -0,0 +1,80 @@ +#ifndef _UAPI_LINUX_RESOURCE_H +#define _UAPI_LINUX_RESOURCE_H + +#include <linux/time.h> +#include <linux/types.h> + +/* + * Resource control/accounting header file for linux + */ + +/* + * Definition of struct rusage taken from BSD 4.3 Reno + *  + * We don't support all of these yet, but we might as well have them.... + * Otherwise, each time we add new items, programs which depend on this + * structure will lose.  This reduces the chances of that happening. + */ +#define	RUSAGE_SELF	0 +#define	RUSAGE_CHILDREN	(-1) +#define RUSAGE_BOTH	(-2)		/* sys_wait4() uses this */ +#define	RUSAGE_THREAD	1		/* only the calling thread */ + +struct	rusage { +	struct timeval ru_utime;	/* user time used */ +	struct timeval ru_stime;	/* system time used */ +	long	ru_maxrss;		/* maximum resident set size */ +	long	ru_ixrss;		/* integral shared memory size */ +	long	ru_idrss;		/* integral unshared data size */ +	long	ru_isrss;		/* integral unshared stack size */ +	long	ru_minflt;		/* page reclaims */ +	long	ru_majflt;		/* page faults */ +	long	ru_nswap;		/* swaps */ +	long	ru_inblock;		/* block input operations */ +	long	ru_oublock;		/* block output operations */ +	long	ru_msgsnd;		/* messages sent */ +	long	ru_msgrcv;		/* messages received */ +	long	ru_nsignals;		/* signals received */ +	long	ru_nvcsw;		/* voluntary context switches */ +	long	ru_nivcsw;		/* involuntary " */ +}; + +struct rlimit { +	unsigned long	rlim_cur; +	unsigned long	rlim_max; +}; + +#define RLIM64_INFINITY		(~0ULL) + +struct rlimit64 { +	__u64 rlim_cur; +	__u64 rlim_max; +}; + +#define	PRIO_MIN	(-20) +#define	PRIO_MAX	20 + +#define	PRIO_PROCESS	0 +#define	PRIO_PGRP	1 +#define	PRIO_USER	2 + +/* + * Limit the stack by to some sane default: root can always + * increase this limit if needed..  8MB seems reasonable. + */ +#define _STK_LIM	(8*1024*1024) + +/* + * GPG2 wants 64kB of mlocked memory, to make sure pass phrases + * and other sensitive information are never written to disk. + */ +#define MLOCK_LIMIT	((PAGE_SIZE > 64*1024) ? PAGE_SIZE : 64*1024) + +/* + * Due to binary compatibility, the actual resource numbers + * may be different for different linux versions.. + */ +#include <asm/resource.h> + + +#endif /* _UAPI_LINUX_RESOURCE_H */ diff --git a/include/uapi/linux/rfkill.h b/include/uapi/linux/rfkill.h new file mode 100644 index 00000000000..2753c6cc974 --- /dev/null +++ b/include/uapi/linux/rfkill.h @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2006 - 2007 Ivo van Doorn + * Copyright (C) 2007 Dmitry Torokhov + * Copyright 2009 Johannes Berg <johannes@sipsolutions.net> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +#ifndef _UAPI__RFKILL_H +#define _UAPI__RFKILL_H + + +#include <linux/types.h> + +/* define userspace visible states */ +#define RFKILL_STATE_SOFT_BLOCKED	0 +#define RFKILL_STATE_UNBLOCKED		1 +#define RFKILL_STATE_HARD_BLOCKED	2 + +/** + * enum rfkill_type - type of rfkill switch. + * + * @RFKILL_TYPE_ALL: toggles all switches (requests only - not a switch type) + * @RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device. + * @RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. + * @RFKILL_TYPE_UWB: switch is on a ultra wideband device. + * @RFKILL_TYPE_WIMAX: switch is on a WiMAX device. + * @RFKILL_TYPE_WWAN: switch is on a wireless WAN device. + * @RFKILL_TYPE_GPS: switch is on a GPS device. + * @RFKILL_TYPE_FM: switch is on a FM radio device. + * @NUM_RFKILL_TYPES: number of defined rfkill types + */ +enum rfkill_type { +	RFKILL_TYPE_ALL = 0, +	RFKILL_TYPE_WLAN, +	RFKILL_TYPE_BLUETOOTH, +	RFKILL_TYPE_UWB, +	RFKILL_TYPE_WIMAX, +	RFKILL_TYPE_WWAN, +	RFKILL_TYPE_GPS, +	RFKILL_TYPE_FM, +	NUM_RFKILL_TYPES, +}; + +/** + * enum rfkill_operation - operation types + * @RFKILL_OP_ADD: a device was added + * @RFKILL_OP_DEL: a device was removed + * @RFKILL_OP_CHANGE: a device's state changed -- userspace changes one device + * @RFKILL_OP_CHANGE_ALL: userspace changes all devices (of a type, or all) + */ +enum rfkill_operation { +	RFKILL_OP_ADD = 0, +	RFKILL_OP_DEL, +	RFKILL_OP_CHANGE, +	RFKILL_OP_CHANGE_ALL, +}; + +/** + * struct rfkill_event - events for userspace on /dev/rfkill + * @idx: index of dev rfkill + * @type: type of the rfkill struct + * @op: operation code + * @hard: hard state (0/1) + * @soft: soft state (0/1) + * + * Structure used for userspace communication on /dev/rfkill, + * used for events from the kernel and control to the kernel. + */ +struct rfkill_event { +	__u32 idx; +	__u8  type; +	__u8  op; +	__u8  soft, hard; +} __attribute__((packed)); + +/* + * We are planning to be backward and forward compatible with changes + * to the event struct, by adding new, optional, members at the end. + * When reading an event (whether the kernel from userspace or vice + * versa) we need to accept anything that's at least as large as the + * version 1 event size, but might be able to accept other sizes in + * the future. + * + * One exception is the kernel -- we already have two event sizes in + * that we've made the 'hard' member optional since our only option + * is to ignore it anyway. + */ +#define RFKILL_EVENT_SIZE_V1	8 + +/* ioctl for turning off rfkill-input (if present) */ +#define RFKILL_IOC_MAGIC	'R' +#define RFKILL_IOC_NOINPUT	1 +#define RFKILL_IOCTL_NOINPUT	_IO(RFKILL_IOC_MAGIC, RFKILL_IOC_NOINPUT) + +/* and that's all userspace gets */ + +#endif /* _UAPI__RFKILL_H */ diff --git a/include/uapi/linux/romfs_fs.h b/include/uapi/linux/romfs_fs.h new file mode 100644 index 00000000000..5f57f93b284 --- /dev/null +++ b/include/uapi/linux/romfs_fs.h @@ -0,0 +1,59 @@ +#ifndef __LINUX_ROMFS_FS_H +#define __LINUX_ROMFS_FS_H + +#include <linux/types.h> +#include <linux/fs.h> + +/* The basic structures of the romfs filesystem */ + +#define ROMBSIZE BLOCK_SIZE +#define ROMBSBITS BLOCK_SIZE_BITS +#define ROMBMASK (ROMBSIZE-1) +#define ROMFS_MAGIC 0x7275 + +#define ROMFS_MAXFN 128 + +#define __mkw(h,l) (((h)&0x00ff)<< 8|((l)&0x00ff)) +#define __mkl(h,l) (((h)&0xffff)<<16|((l)&0xffff)) +#define __mk4(a,b,c,d) cpu_to_be32(__mkl(__mkw(a,b),__mkw(c,d))) +#define ROMSB_WORD0 __mk4('-','r','o','m') +#define ROMSB_WORD1 __mk4('1','f','s','-') + +/* On-disk "super block" */ + +struct romfs_super_block { +	__be32 word0; +	__be32 word1; +	__be32 size; +	__be32 checksum; +	char name[0];		/* volume name */ +}; + +/* On disk inode */ + +struct romfs_inode { +	__be32 next;		/* low 4 bits see ROMFH_ */ +	__be32 spec; +	__be32 size; +	__be32 checksum; +	char name[0]; +}; + +#define ROMFH_TYPE 7 +#define ROMFH_HRD 0 +#define ROMFH_DIR 1 +#define ROMFH_REG 2 +#define ROMFH_SYM 3 +#define ROMFH_BLK 4 +#define ROMFH_CHR 5 +#define ROMFH_SCK 6 +#define ROMFH_FIF 7 +#define ROMFH_EXEC 8 + +/* Alignment */ + +#define ROMFH_SIZE 16 +#define ROMFH_PAD (ROMFH_SIZE-1) +#define ROMFH_MASK (~ROMFH_PAD) + +#endif diff --git a/include/uapi/linux/rose.h b/include/uapi/linux/rose.h new file mode 100644 index 00000000000..1fcfe95893b --- /dev/null +++ b/include/uapi/linux/rose.h @@ -0,0 +1,90 @@ +/* + * These are the public elements of the Linux kernel Rose implementation. + * For kernel AX.25 see the file ax25.h. This file requires ax25.h for the + * definition of the ax25_address structure. + */ + +#ifndef	ROSE_KERNEL_H +#define	ROSE_KERNEL_H + +#include <linux/socket.h> +#include <linux/ax25.h> + +#define ROSE_MTU	251 + +#define ROSE_MAX_DIGIS 6 + +#define	ROSE_DEFER	1 +#define ROSE_T1		2 +#define	ROSE_T2		3 +#define	ROSE_T3		4 +#define	ROSE_IDLE	5 +#define	ROSE_QBITINCL	6 +#define	ROSE_HOLDBACK	7 + +#define	SIOCRSGCAUSE		(SIOCPROTOPRIVATE+0) +#define	SIOCRSSCAUSE		(SIOCPROTOPRIVATE+1) +#define	SIOCRSL2CALL		(SIOCPROTOPRIVATE+2) +#define	SIOCRSSL2CALL		(SIOCPROTOPRIVATE+2) +#define	SIOCRSACCEPT		(SIOCPROTOPRIVATE+3) +#define	SIOCRSCLRRT		(SIOCPROTOPRIVATE+4) +#define	SIOCRSGL2CALL		(SIOCPROTOPRIVATE+5) +#define	SIOCRSGFACILITIES	(SIOCPROTOPRIVATE+6) + +#define	ROSE_DTE_ORIGINATED	0x00 +#define	ROSE_NUMBER_BUSY	0x01 +#define	ROSE_INVALID_FACILITY	0x03 +#define	ROSE_NETWORK_CONGESTION	0x05 +#define	ROSE_OUT_OF_ORDER	0x09 +#define	ROSE_ACCESS_BARRED	0x0B +#define	ROSE_NOT_OBTAINABLE	0x0D +#define	ROSE_REMOTE_PROCEDURE	0x11 +#define	ROSE_LOCAL_PROCEDURE	0x13 +#define	ROSE_SHIP_ABSENT	0x39 + +typedef struct { +	char		rose_addr[5]; +} rose_address; + +struct sockaddr_rose { +	__kernel_sa_family_t srose_family; +	rose_address	srose_addr; +	ax25_address	srose_call; +	int		srose_ndigis; +	ax25_address	srose_digi; +}; + +struct full_sockaddr_rose { +	__kernel_sa_family_t srose_family; +	rose_address	srose_addr; +	ax25_address	srose_call; +	unsigned int	srose_ndigis; +	ax25_address	srose_digis[ROSE_MAX_DIGIS]; +}; + +struct rose_route_struct { +	rose_address	address; +	unsigned short	mask; +	ax25_address	neighbour; +	char		device[16]; +	unsigned char	ndigis; +	ax25_address	digipeaters[AX25_MAX_DIGIS]; +}; + +struct rose_cause_struct { +	unsigned char	cause; +	unsigned char	diagnostic; +}; + +struct rose_facilities_struct { +	rose_address	source_addr,   dest_addr; +	ax25_address	source_call,   dest_call; +	unsigned char	source_ndigis, dest_ndigis; +	ax25_address	source_digis[ROSE_MAX_DIGIS]; +	ax25_address	dest_digis[ROSE_MAX_DIGIS]; +	unsigned int	rand; +	rose_address	fail_addr; +	ax25_address	fail_call; +}; + +#endif diff --git a/include/uapi/linux/route.h b/include/uapi/linux/route.h new file mode 100644 index 00000000000..6600708311c --- /dev/null +++ b/include/uapi/linux/route.h @@ -0,0 +1,69 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the  BSD Socket + *		interface as the means of communication with the user level. + * + *		Global definitions for the IP router interface. + * + * Version:	@(#)route.h	1.0.3	05/27/93 + * + * Authors:	Original taken from Berkeley UNIX 4.3, (c) UCB 1986-1988 + *		for the purposes of compatibility only. + * + *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + * + * Changes: + *              Mike McLagan    :       Routing by source + * + *		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. + */ +#ifndef _LINUX_ROUTE_H +#define _LINUX_ROUTE_H + +#include <linux/if.h> +#include <linux/compiler.h> + +/* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */ +struct rtentry { +	unsigned long	rt_pad1; +	struct sockaddr	rt_dst;		/* target address		*/ +	struct sockaddr	rt_gateway;	/* gateway addr (RTF_GATEWAY)	*/ +	struct sockaddr	rt_genmask;	/* target network mask (IP)	*/ +	unsigned short	rt_flags; +	short		rt_pad2; +	unsigned long	rt_pad3; +	void		*rt_pad4; +	short		rt_metric;	/* +1 for binary compatibility!	*/ +	char __user	*rt_dev;	/* forcing the device at add	*/ +	unsigned long	rt_mtu;		/* per route MTU/Window 	*/ +#ifndef __KERNEL__ +#define rt_mss	rt_mtu			/* Compatibility :-(            */ +#endif +	unsigned long	rt_window;	/* Window clamping 		*/ +	unsigned short	rt_irtt;	/* Initial RTT			*/ +}; + + +#define	RTF_UP		0x0001		/* route usable		  	*/ +#define	RTF_GATEWAY	0x0002		/* destination is a gateway	*/ +#define	RTF_HOST	0x0004		/* host entry (net otherwise)	*/ +#define RTF_REINSTATE	0x0008		/* reinstate route after tmout	*/ +#define	RTF_DYNAMIC	0x0010		/* created dyn. (by redirect)	*/ +#define	RTF_MODIFIED	0x0020		/* modified dyn. (by redirect)	*/ +#define RTF_MTU		0x0040		/* specific MTU for this route	*/ +#define RTF_MSS		RTF_MTU		/* Compatibility :-(		*/ +#define RTF_WINDOW	0x0080		/* per route window clamping	*/ +#define RTF_IRTT	0x0100		/* Initial round trip time	*/ +#define RTF_REJECT	0x0200		/* Reject route			*/ + +/* + *	<linux/ipv6_route.h> uses RTF values >= 64k + */ + + + +#endif	/* _LINUX_ROUTE_H */ + diff --git a/include/uapi/linux/rtc.h b/include/uapi/linux/rtc.h new file mode 100644 index 00000000000..f8c82e6f25d --- /dev/null +++ b/include/uapi/linux/rtc.h @@ -0,0 +1,107 @@ +/* + * Generic RTC interface. + * This version contains the part of the user interface to the Real Time Clock + * service. It is used with both the legacy mc146818 and also  EFI + * Struct rtc_time and first 12 ioctl by Paul Gortmaker, 1996 - separated out + * from <linux/mc146818rtc.h> to this file for 2.4 kernels. + * + * Copyright (C) 1999 Hewlett-Packard Co. + * Copyright (C) 1999 Stephane Eranian <eranian@hpl.hp.com> + */ +#ifndef _UAPI_LINUX_RTC_H_ +#define _UAPI_LINUX_RTC_H_ + +/* + * The struct used to pass data via the following ioctl. Similar to the + * struct tm in <time.h>, but it needs to be here so that the kernel + * source is self contained, allowing cross-compiles, etc. etc. + */ + +struct rtc_time { +	int tm_sec; +	int tm_min; +	int tm_hour; +	int tm_mday; +	int tm_mon; +	int tm_year; +	int tm_wday; +	int tm_yday; +	int tm_isdst; +}; + +/* + * This data structure is inspired by the EFI (v0.92) wakeup + * alarm API. + */ +struct rtc_wkalrm { +	unsigned char enabled;	/* 0 = alarm disabled, 1 = alarm enabled */ +	unsigned char pending;  /* 0 = alarm not pending, 1 = alarm pending */ +	struct rtc_time time;	/* time the alarm is set to */ +}; + +/* + * Data structure to control PLL correction some better RTC feature + * pll_value is used to get or set current value of correction, + * the rest of the struct is used to query HW capabilities. + * This is modeled after the RTC used in Q40/Q60 computers but + * should be sufficiently flexible for other devices + * + * +ve pll_value means clock will run faster by + *   pll_value*pll_posmult/pll_clock + * -ve pll_value means clock will run slower by + *   pll_value*pll_negmult/pll_clock + */ + +struct rtc_pll_info { +	int pll_ctrl;       /* placeholder for fancier control */ +	int pll_value;      /* get/set correction value */ +	int pll_max;        /* max +ve (faster) adjustment value */ +	int pll_min;        /* max -ve (slower) adjustment value */ +	int pll_posmult;    /* factor for +ve correction */ +	int pll_negmult;    /* factor for -ve correction */ +	long pll_clock;     /* base PLL frequency */ +}; + +/* + * ioctl calls that are permitted to the /dev/rtc interface, if + * any of the RTC drivers are enabled. + */ + +#define RTC_AIE_ON	_IO('p', 0x01)	/* Alarm int. enable on		*/ +#define RTC_AIE_OFF	_IO('p', 0x02)	/* ... off			*/ +#define RTC_UIE_ON	_IO('p', 0x03)	/* Update int. enable on	*/ +#define RTC_UIE_OFF	_IO('p', 0x04)	/* ... off			*/ +#define RTC_PIE_ON	_IO('p', 0x05)	/* Periodic int. enable on	*/ +#define RTC_PIE_OFF	_IO('p', 0x06)	/* ... off			*/ +#define RTC_WIE_ON	_IO('p', 0x0f)  /* Watchdog int. enable on	*/ +#define RTC_WIE_OFF	_IO('p', 0x10)  /* ... off			*/ + +#define RTC_ALM_SET	_IOW('p', 0x07, struct rtc_time) /* Set alarm time  */ +#define RTC_ALM_READ	_IOR('p', 0x08, struct rtc_time) /* Read alarm time */ +#define RTC_RD_TIME	_IOR('p', 0x09, struct rtc_time) /* Read RTC time   */ +#define RTC_SET_TIME	_IOW('p', 0x0a, struct rtc_time) /* Set RTC time    */ +#define RTC_IRQP_READ	_IOR('p', 0x0b, unsigned long)	 /* Read IRQ rate   */ +#define RTC_IRQP_SET	_IOW('p', 0x0c, unsigned long)	 /* Set IRQ rate    */ +#define RTC_EPOCH_READ	_IOR('p', 0x0d, unsigned long)	 /* Read epoch      */ +#define RTC_EPOCH_SET	_IOW('p', 0x0e, unsigned long)	 /* Set epoch       */ + +#define RTC_WKALM_SET	_IOW('p', 0x0f, struct rtc_wkalrm)/* Set wakeup alarm*/ +#define RTC_WKALM_RD	_IOR('p', 0x10, struct rtc_wkalrm)/* Get wakeup alarm*/ + +#define RTC_PLL_GET	_IOR('p', 0x11, struct rtc_pll_info)  /* Get PLL correction */ +#define RTC_PLL_SET	_IOW('p', 0x12, struct rtc_pll_info)  /* Set PLL correction */ + +#define RTC_VL_READ	_IOR('p', 0x13, int)	/* Voltage low detector */ +#define RTC_VL_CLR	_IO('p', 0x14)		/* Clear voltage low information */ + +/* interrupt flags */ +#define RTC_IRQF 0x80	/* Any of the following is active */ +#define RTC_PF 0x40	/* Periodic interrupt */ +#define RTC_AF 0x20	/* Alarm interrupt */ +#define RTC_UF 0x10	/* Update interrupt for 1Hz RTC */ + + +#define RTC_MAX_FREQ	8192 + + +#endif /* _UAPI_LINUX_RTC_H_ */ diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h new file mode 100644 index 00000000000..fcd768b09f6 --- /dev/null +++ b/include/uapi/linux/rtnetlink.h @@ -0,0 +1,612 @@ +#ifndef _UAPI__LINUX_RTNETLINK_H +#define _UAPI__LINUX_RTNETLINK_H + +#include <linux/types.h> +#include <linux/netlink.h> +#include <linux/if_link.h> +#include <linux/if_addr.h> +#include <linux/neighbour.h> + +/* rtnetlink families. Values up to 127 are reserved for real address + * families, values above 128 may be used arbitrarily. + */ +#define RTNL_FAMILY_IPMR		128 +#define RTNL_FAMILY_IP6MR		129 +#define RTNL_FAMILY_MAX			129 + +/**** + *		Routing/neighbour discovery messages. + ****/ + +/* Types of messages */ + +enum { +	RTM_BASE	= 16, +#define RTM_BASE	RTM_BASE + +	RTM_NEWLINK	= 16, +#define RTM_NEWLINK	RTM_NEWLINK +	RTM_DELLINK, +#define RTM_DELLINK	RTM_DELLINK +	RTM_GETLINK, +#define RTM_GETLINK	RTM_GETLINK +	RTM_SETLINK, +#define RTM_SETLINK	RTM_SETLINK + +	RTM_NEWADDR	= 20, +#define RTM_NEWADDR	RTM_NEWADDR +	RTM_DELADDR, +#define RTM_DELADDR	RTM_DELADDR +	RTM_GETADDR, +#define RTM_GETADDR	RTM_GETADDR + +	RTM_NEWROUTE	= 24, +#define RTM_NEWROUTE	RTM_NEWROUTE +	RTM_DELROUTE, +#define RTM_DELROUTE	RTM_DELROUTE +	RTM_GETROUTE, +#define RTM_GETROUTE	RTM_GETROUTE + +	RTM_NEWNEIGH	= 28, +#define RTM_NEWNEIGH	RTM_NEWNEIGH +	RTM_DELNEIGH, +#define RTM_DELNEIGH	RTM_DELNEIGH +	RTM_GETNEIGH, +#define RTM_GETNEIGH	RTM_GETNEIGH + +	RTM_NEWRULE	= 32, +#define RTM_NEWRULE	RTM_NEWRULE +	RTM_DELRULE, +#define RTM_DELRULE	RTM_DELRULE +	RTM_GETRULE, +#define RTM_GETRULE	RTM_GETRULE + +	RTM_NEWQDISC	= 36, +#define RTM_NEWQDISC	RTM_NEWQDISC +	RTM_DELQDISC, +#define RTM_DELQDISC	RTM_DELQDISC +	RTM_GETQDISC, +#define RTM_GETQDISC	RTM_GETQDISC + +	RTM_NEWTCLASS	= 40, +#define RTM_NEWTCLASS	RTM_NEWTCLASS +	RTM_DELTCLASS, +#define RTM_DELTCLASS	RTM_DELTCLASS +	RTM_GETTCLASS, +#define RTM_GETTCLASS	RTM_GETTCLASS + +	RTM_NEWTFILTER	= 44, +#define RTM_NEWTFILTER	RTM_NEWTFILTER +	RTM_DELTFILTER, +#define RTM_DELTFILTER	RTM_DELTFILTER +	RTM_GETTFILTER, +#define RTM_GETTFILTER	RTM_GETTFILTER + +	RTM_NEWACTION	= 48, +#define RTM_NEWACTION   RTM_NEWACTION +	RTM_DELACTION, +#define RTM_DELACTION   RTM_DELACTION +	RTM_GETACTION, +#define RTM_GETACTION   RTM_GETACTION + +	RTM_NEWPREFIX	= 52, +#define RTM_NEWPREFIX	RTM_NEWPREFIX + +	RTM_GETMULTICAST = 58, +#define RTM_GETMULTICAST RTM_GETMULTICAST + +	RTM_GETANYCAST	= 62, +#define RTM_GETANYCAST	RTM_GETANYCAST + +	RTM_NEWNEIGHTBL	= 64, +#define RTM_NEWNEIGHTBL	RTM_NEWNEIGHTBL +	RTM_GETNEIGHTBL	= 66, +#define RTM_GETNEIGHTBL	RTM_GETNEIGHTBL +	RTM_SETNEIGHTBL, +#define RTM_SETNEIGHTBL	RTM_SETNEIGHTBL + +	RTM_NEWNDUSEROPT = 68, +#define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT + +	RTM_NEWADDRLABEL = 72, +#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL +	RTM_DELADDRLABEL, +#define RTM_DELADDRLABEL RTM_DELADDRLABEL +	RTM_GETADDRLABEL, +#define RTM_GETADDRLABEL RTM_GETADDRLABEL + +	RTM_GETDCB = 78, +#define RTM_GETDCB RTM_GETDCB +	RTM_SETDCB, +#define RTM_SETDCB RTM_SETDCB + +	__RTM_MAX, +#define RTM_MAX		(((__RTM_MAX + 3) & ~3) - 1) +}; + +#define RTM_NR_MSGTYPES	(RTM_MAX + 1 - RTM_BASE) +#define RTM_NR_FAMILIES	(RTM_NR_MSGTYPES >> 2) +#define RTM_FAM(cmd)	(((cmd) - RTM_BASE) >> 2) + +/*  +   Generic structure for encapsulation of optional route information. +   It is reminiscent of sockaddr, but with sa_family replaced +   with attribute type. + */ + +struct rtattr { +	unsigned short	rta_len; +	unsigned short	rta_type; +}; + +/* Macros to handle rtattributes */ + +#define RTA_ALIGNTO	4 +#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) ) +#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \ +			 (rta)->rta_len >= sizeof(struct rtattr) && \ +			 (rta)->rta_len <= (len)) +#define RTA_NEXT(rta,attrlen)	((attrlen) -= RTA_ALIGN((rta)->rta_len), \ +				 (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len))) +#define RTA_LENGTH(len)	(RTA_ALIGN(sizeof(struct rtattr)) + (len)) +#define RTA_SPACE(len)	RTA_ALIGN(RTA_LENGTH(len)) +#define RTA_DATA(rta)   ((void*)(((char*)(rta)) + RTA_LENGTH(0))) +#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0)) + + + + +/****************************************************************************** + *		Definitions used in routing table administration. + ****/ + +struct rtmsg { +	unsigned char		rtm_family; +	unsigned char		rtm_dst_len; +	unsigned char		rtm_src_len; +	unsigned char		rtm_tos; + +	unsigned char		rtm_table;	/* Routing table id */ +	unsigned char		rtm_protocol;	/* Routing protocol; see below	*/ +	unsigned char		rtm_scope;	/* See below */	 +	unsigned char		rtm_type;	/* See below	*/ + +	unsigned		rtm_flags; +}; + +/* rtm_type */ + +enum { +	RTN_UNSPEC, +	RTN_UNICAST,		/* Gateway or direct route	*/ +	RTN_LOCAL,		/* Accept locally		*/ +	RTN_BROADCAST,		/* Accept locally as broadcast, +				   send as broadcast */ +	RTN_ANYCAST,		/* Accept locally as broadcast, +				   but send as unicast */ +	RTN_MULTICAST,		/* Multicast route		*/ +	RTN_BLACKHOLE,		/* Drop				*/ +	RTN_UNREACHABLE,	/* Destination is unreachable   */ +	RTN_PROHIBIT,		/* Administratively prohibited	*/ +	RTN_THROW,		/* Not in this table		*/ +	RTN_NAT,		/* Translate this address	*/ +	RTN_XRESOLVE,		/* Use external resolver	*/ +	__RTN_MAX +}; + +#define RTN_MAX (__RTN_MAX - 1) + + +/* rtm_protocol */ + +#define RTPROT_UNSPEC	0 +#define RTPROT_REDIRECT	1	/* Route installed by ICMP redirects; +				   not used by current IPv4 */ +#define RTPROT_KERNEL	2	/* Route installed by kernel		*/ +#define RTPROT_BOOT	3	/* Route installed during boot		*/ +#define RTPROT_STATIC	4	/* Route installed by administrator	*/ + +/* Values of protocol >= RTPROT_STATIC are not interpreted by kernel; +   they are just passed from user and back as is. +   It will be used by hypothetical multiple routing daemons. +   Note that protocol values should be standardized in order to +   avoid conflicts. + */ + +#define RTPROT_GATED	8	/* Apparently, GateD */ +#define RTPROT_RA	9	/* RDISC/ND router advertisements */ +#define RTPROT_MRT	10	/* Merit MRT */ +#define RTPROT_ZEBRA	11	/* Zebra */ +#define RTPROT_BIRD	12	/* BIRD */ +#define RTPROT_DNROUTED	13	/* DECnet routing daemon */ +#define RTPROT_XORP	14	/* XORP */ +#define RTPROT_NTK	15	/* Netsukuku */ +#define RTPROT_DHCP	16      /* DHCP client */ + +/* rtm_scope + +   Really it is not scope, but sort of distance to the destination. +   NOWHERE are reserved for not existing destinations, HOST is our +   local addresses, LINK are destinations, located on directly attached +   link and UNIVERSE is everywhere in the Universe. + +   Intermediate values are also possible f.e. interior routes +   could be assigned a value between UNIVERSE and LINK. +*/ + +enum rt_scope_t { +	RT_SCOPE_UNIVERSE=0, +/* User defined values  */ +	RT_SCOPE_SITE=200, +	RT_SCOPE_LINK=253, +	RT_SCOPE_HOST=254, +	RT_SCOPE_NOWHERE=255 +}; + +/* rtm_flags */ + +#define RTM_F_NOTIFY		0x100	/* Notify user of route change	*/ +#define RTM_F_CLONED		0x200	/* This route is cloned		*/ +#define RTM_F_EQUALIZE		0x400	/* Multipath equalizer: NI	*/ +#define RTM_F_PREFIX		0x800	/* Prefix addresses		*/ + +/* Reserved table identifiers */ + +enum rt_class_t { +	RT_TABLE_UNSPEC=0, +/* User defined values */ +	RT_TABLE_COMPAT=252, +	RT_TABLE_DEFAULT=253, +	RT_TABLE_MAIN=254, +	RT_TABLE_LOCAL=255, +	RT_TABLE_MAX=0xFFFFFFFF +}; + + +/* Routing message attributes */ + +enum rtattr_type_t { +	RTA_UNSPEC, +	RTA_DST, +	RTA_SRC, +	RTA_IIF, +	RTA_OIF, +	RTA_GATEWAY, +	RTA_PRIORITY, +	RTA_PREFSRC, +	RTA_METRICS, +	RTA_MULTIPATH, +	RTA_PROTOINFO, /* no longer used */ +	RTA_FLOW, +	RTA_CACHEINFO, +	RTA_SESSION, /* no longer used */ +	RTA_MP_ALGO, /* no longer used */ +	RTA_TABLE, +	RTA_MARK, +	__RTA_MAX +}; + +#define RTA_MAX (__RTA_MAX - 1) + +#define RTM_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg)))) +#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg)) + +/* RTM_MULTIPATH --- array of struct rtnexthop. + * + * "struct rtnexthop" describes all necessary nexthop information, + * i.e. parameters of path to a destination via this nexthop. + * + * At the moment it is impossible to set different prefsrc, mtu, window + * and rtt for different paths from multipath. + */ + +struct rtnexthop { +	unsigned short		rtnh_len; +	unsigned char		rtnh_flags; +	unsigned char		rtnh_hops; +	int			rtnh_ifindex; +}; + +/* rtnh_flags */ + +#define RTNH_F_DEAD		1	/* Nexthop is dead (used by multipath)	*/ +#define RTNH_F_PERVASIVE	2	/* Do recursive gateway lookup	*/ +#define RTNH_F_ONLINK		4	/* Gateway is forced on link	*/ + +/* Macros to handle hexthops */ + +#define RTNH_ALIGNTO	4 +#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) ) +#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \ +			   ((int)(rtnh)->rtnh_len) <= (len)) +#define RTNH_NEXT(rtnh)	((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len))) +#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len)) +#define RTNH_SPACE(len)	RTNH_ALIGN(RTNH_LENGTH(len)) +#define RTNH_DATA(rtnh)   ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0))) + +/* RTM_CACHEINFO */ + +struct rta_cacheinfo { +	__u32	rta_clntref; +	__u32	rta_lastuse; +	__s32	rta_expires; +	__u32	rta_error; +	__u32	rta_used; + +#define RTNETLINK_HAVE_PEERINFO 1 +	__u32	rta_id; +	__u32	rta_ts; +	__u32	rta_tsage; +}; + +/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */ + +enum { +	RTAX_UNSPEC, +#define RTAX_UNSPEC RTAX_UNSPEC +	RTAX_LOCK, +#define RTAX_LOCK RTAX_LOCK +	RTAX_MTU, +#define RTAX_MTU RTAX_MTU +	RTAX_WINDOW, +#define RTAX_WINDOW RTAX_WINDOW +	RTAX_RTT, +#define RTAX_RTT RTAX_RTT +	RTAX_RTTVAR, +#define RTAX_RTTVAR RTAX_RTTVAR +	RTAX_SSTHRESH, +#define RTAX_SSTHRESH RTAX_SSTHRESH +	RTAX_CWND, +#define RTAX_CWND RTAX_CWND +	RTAX_ADVMSS, +#define RTAX_ADVMSS RTAX_ADVMSS +	RTAX_REORDERING, +#define RTAX_REORDERING RTAX_REORDERING +	RTAX_HOPLIMIT, +#define RTAX_HOPLIMIT RTAX_HOPLIMIT +	RTAX_INITCWND, +#define RTAX_INITCWND RTAX_INITCWND +	RTAX_FEATURES, +#define RTAX_FEATURES RTAX_FEATURES +	RTAX_RTO_MIN, +#define RTAX_RTO_MIN RTAX_RTO_MIN +	RTAX_INITRWND, +#define RTAX_INITRWND RTAX_INITRWND +	__RTAX_MAX +}; + +#define RTAX_MAX (__RTAX_MAX - 1) + +#define RTAX_FEATURE_ECN	0x00000001 +#define RTAX_FEATURE_SACK	0x00000002 +#define RTAX_FEATURE_TIMESTAMP	0x00000004 +#define RTAX_FEATURE_ALLFRAG	0x00000008 + +struct rta_session { +	__u8	proto; +	__u8	pad1; +	__u16	pad2; + +	union { +		struct { +			__u16	sport; +			__u16	dport; +		} ports; + +		struct { +			__u8	type; +			__u8	code; +			__u16	ident; +		} icmpt; + +		__u32		spi; +	} u; +}; + +/**** + *		General form of address family dependent message. + ****/ + +struct rtgenmsg { +	unsigned char		rtgen_family; +}; + +/***************************************************************** + *		Link layer specific messages. + ****/ + +/* struct ifinfomsg + * passes link level specific information, not dependent + * on network protocol. + */ + +struct ifinfomsg { +	unsigned char	ifi_family; +	unsigned char	__ifi_pad; +	unsigned short	ifi_type;		/* ARPHRD_* */ +	int		ifi_index;		/* Link index	*/ +	unsigned	ifi_flags;		/* IFF_* flags	*/ +	unsigned	ifi_change;		/* IFF_* change mask */ +}; + +/******************************************************************** + *		prefix information  + ****/ + +struct prefixmsg { +	unsigned char	prefix_family; +	unsigned char	prefix_pad1; +	unsigned short	prefix_pad2; +	int		prefix_ifindex; +	unsigned char	prefix_type; +	unsigned char	prefix_len; +	unsigned char	prefix_flags; +	unsigned char	prefix_pad3; +}; + +enum  +{ +	PREFIX_UNSPEC, +	PREFIX_ADDRESS, +	PREFIX_CACHEINFO, +	__PREFIX_MAX +}; + +#define PREFIX_MAX	(__PREFIX_MAX - 1) + +struct prefix_cacheinfo { +	__u32	preferred_time; +	__u32	valid_time; +}; + + +/***************************************************************** + *		Traffic control messages. + ****/ + +struct tcmsg { +	unsigned char	tcm_family; +	unsigned char	tcm__pad1; +	unsigned short	tcm__pad2; +	int		tcm_ifindex; +	__u32		tcm_handle; +	__u32		tcm_parent; +	__u32		tcm_info; +}; + +enum { +	TCA_UNSPEC, +	TCA_KIND, +	TCA_OPTIONS, +	TCA_STATS, +	TCA_XSTATS, +	TCA_RATE, +	TCA_FCNT, +	TCA_STATS2, +	TCA_STAB, +	__TCA_MAX +}; + +#define TCA_MAX (__TCA_MAX - 1) + +#define TCA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg)))) +#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg)) + +/******************************************************************** + *		Neighbor Discovery userland options + ****/ + +struct nduseroptmsg { +	unsigned char	nduseropt_family; +	unsigned char	nduseropt_pad1; +	unsigned short	nduseropt_opts_len;	/* Total length of options */ +	int		nduseropt_ifindex; +	__u8		nduseropt_icmp_type; +	__u8		nduseropt_icmp_code; +	unsigned short	nduseropt_pad2; +	unsigned int	nduseropt_pad3; +	/* Followed by one or more ND options */ +}; + +enum { +	NDUSEROPT_UNSPEC, +	NDUSEROPT_SRCADDR, +	__NDUSEROPT_MAX +}; + +#define NDUSEROPT_MAX	(__NDUSEROPT_MAX - 1) + +#ifndef __KERNEL__ +/* RTnetlink multicast groups - backwards compatibility for userspace */ +#define RTMGRP_LINK		1 +#define RTMGRP_NOTIFY		2 +#define RTMGRP_NEIGH		4 +#define RTMGRP_TC		8 + +#define RTMGRP_IPV4_IFADDR	0x10 +#define RTMGRP_IPV4_MROUTE	0x20 +#define RTMGRP_IPV4_ROUTE	0x40 +#define RTMGRP_IPV4_RULE	0x80 + +#define RTMGRP_IPV6_IFADDR	0x100 +#define RTMGRP_IPV6_MROUTE	0x200 +#define RTMGRP_IPV6_ROUTE	0x400 +#define RTMGRP_IPV6_IFINFO	0x800 + +#define RTMGRP_DECnet_IFADDR    0x1000 +#define RTMGRP_DECnet_ROUTE     0x4000 + +#define RTMGRP_IPV6_PREFIX	0x20000 +#endif + +/* RTnetlink multicast groups */ +enum rtnetlink_groups { +	RTNLGRP_NONE, +#define RTNLGRP_NONE		RTNLGRP_NONE +	RTNLGRP_LINK, +#define RTNLGRP_LINK		RTNLGRP_LINK +	RTNLGRP_NOTIFY, +#define RTNLGRP_NOTIFY		RTNLGRP_NOTIFY +	RTNLGRP_NEIGH, +#define RTNLGRP_NEIGH		RTNLGRP_NEIGH +	RTNLGRP_TC, +#define RTNLGRP_TC		RTNLGRP_TC +	RTNLGRP_IPV4_IFADDR, +#define RTNLGRP_IPV4_IFADDR	RTNLGRP_IPV4_IFADDR +	RTNLGRP_IPV4_MROUTE, +#define	RTNLGRP_IPV4_MROUTE	RTNLGRP_IPV4_MROUTE +	RTNLGRP_IPV4_ROUTE, +#define RTNLGRP_IPV4_ROUTE	RTNLGRP_IPV4_ROUTE +	RTNLGRP_IPV4_RULE, +#define RTNLGRP_IPV4_RULE	RTNLGRP_IPV4_RULE +	RTNLGRP_IPV6_IFADDR, +#define RTNLGRP_IPV6_IFADDR	RTNLGRP_IPV6_IFADDR +	RTNLGRP_IPV6_MROUTE, +#define RTNLGRP_IPV6_MROUTE	RTNLGRP_IPV6_MROUTE +	RTNLGRP_IPV6_ROUTE, +#define RTNLGRP_IPV6_ROUTE	RTNLGRP_IPV6_ROUTE +	RTNLGRP_IPV6_IFINFO, +#define RTNLGRP_IPV6_IFINFO	RTNLGRP_IPV6_IFINFO +	RTNLGRP_DECnet_IFADDR, +#define RTNLGRP_DECnet_IFADDR	RTNLGRP_DECnet_IFADDR +	RTNLGRP_NOP2, +	RTNLGRP_DECnet_ROUTE, +#define RTNLGRP_DECnet_ROUTE	RTNLGRP_DECnet_ROUTE +	RTNLGRP_DECnet_RULE, +#define RTNLGRP_DECnet_RULE	RTNLGRP_DECnet_RULE +	RTNLGRP_NOP4, +	RTNLGRP_IPV6_PREFIX, +#define RTNLGRP_IPV6_PREFIX	RTNLGRP_IPV6_PREFIX +	RTNLGRP_IPV6_RULE, +#define RTNLGRP_IPV6_RULE	RTNLGRP_IPV6_RULE +	RTNLGRP_ND_USEROPT, +#define RTNLGRP_ND_USEROPT	RTNLGRP_ND_USEROPT +	RTNLGRP_PHONET_IFADDR, +#define RTNLGRP_PHONET_IFADDR	RTNLGRP_PHONET_IFADDR +	RTNLGRP_PHONET_ROUTE, +#define RTNLGRP_PHONET_ROUTE	RTNLGRP_PHONET_ROUTE +	RTNLGRP_DCB, +#define RTNLGRP_DCB		RTNLGRP_DCB +	__RTNLGRP_MAX +}; +#define RTNLGRP_MAX	(__RTNLGRP_MAX - 1) + +/* TC action piece */ +struct tcamsg { +	unsigned char	tca_family; +	unsigned char	tca__pad1; +	unsigned short	tca__pad2; +}; +#define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg)))) +#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg)) +#define TCA_ACT_TAB 1 /* attr type must be >=1 */	 +#define TCAA_MAX 1 + +/* New extended info filters for IFLA_EXT_MASK */ +#define RTEXT_FILTER_VF		(1 << 0) + +/* End of information exported to user level */ + + + +#endif /* _UAPI__LINUX_RTNETLINK_H */ diff --git a/include/uapi/linux/scc.h b/include/uapi/linux/scc.h new file mode 100644 index 00000000000..72b6b815337 --- /dev/null +++ b/include/uapi/linux/scc.h @@ -0,0 +1,172 @@ +/* $Id: scc.h,v 1.29 1997/04/02 14:56:45 jreuter Exp jreuter $ */ + +#ifndef _UAPI_SCC_H +#define _UAPI_SCC_H + + +/* selection of hardware types */ + +#define PA0HZP		0x00	/* hardware type for PA0HZP SCC card and compatible */ +#define EAGLE		0x01    /* hardware type for EAGLE card */ +#define PC100		0x02	/* hardware type for PC100 card */ +#define PRIMUS		0x04	/* hardware type for PRIMUS-PC (DG9BL) card */ +#define DRSI		0x08	/* hardware type for DRSI PC*Packet card */ +#define BAYCOM		0x10	/* hardware type for BayCom (U)SCC */ + +/* DEV ioctl() commands */ + +enum SCC_ioctl_cmds { +	SIOCSCCRESERVED = SIOCDEVPRIVATE, +	SIOCSCCCFG, +	SIOCSCCINI, +	SIOCSCCCHANINI, +	SIOCSCCSMEM, +	SIOCSCCGKISS, +	SIOCSCCSKISS, +	SIOCSCCGSTAT, +	SIOCSCCCAL +}; + +/* Device parameter control (from WAMPES) */ + +enum L1_params { +	PARAM_DATA, +	PARAM_TXDELAY, +	PARAM_PERSIST, +	PARAM_SLOTTIME, +	PARAM_TXTAIL, +	PARAM_FULLDUP, +	PARAM_SOFTDCD,		/* was: PARAM_HW */ +	PARAM_MUTE,		/* ??? */ +	PARAM_DTR, +	PARAM_RTS, +	PARAM_SPEED, +	PARAM_ENDDELAY,		/* ??? */ +	PARAM_GROUP, +	PARAM_IDLE, +	PARAM_MIN, +	PARAM_MAXKEY, +	PARAM_WAIT, +	PARAM_MAXDEFER, +	PARAM_TX, +	PARAM_HWEVENT = 31, +	PARAM_RETURN = 255	/* reset kiss mode */ +}; + +/* fulldup parameter */ + +enum FULLDUP_modes { +	KISS_DUPLEX_HALF,	/* normal CSMA operation */ +	KISS_DUPLEX_FULL,	/* fullduplex, key down trx after transmission */ +	KISS_DUPLEX_LINK,	/* fullduplex, key down trx after 'idletime' sec */ +	KISS_DUPLEX_OPTIMA	/* fullduplex, let the protocol layer control the hw */ +}; + +/* misc. parameters */ + +#define TIMER_OFF	65535U	/* to switch off timers */ +#define NO_SUCH_PARAM	65534U	/* param not implemented */ + +/* HWEVENT parameter */ + +enum HWEVENT_opts { +	HWEV_DCD_ON, +	HWEV_DCD_OFF, +	HWEV_ALL_SENT +}; + +/* channel grouping */ + +#define RXGROUP		0100	/* if set, only tx when all channels clear */ +#define TXGROUP		0200	/* if set, don't transmit simultaneously */ + +/* Tx/Rx clock sources */ + +enum CLOCK_sources { +	CLK_DPLL,	/* normal halfduplex operation */ +	CLK_EXTERNAL,	/* external clocking (G3RUH/DF9IC modems) */ +	CLK_DIVIDER,	/* Rx = DPLL, Tx = divider (fullduplex with */ +			/* modems without clock regeneration */ +	CLK_BRG		/* experimental fullduplex mode with DPLL/BRG for */ +			/* MODEMs without clock recovery */ +}; + +/* Tx state */ + +enum TX_state { +	TXS_IDLE,	/* Transmitter off, no data pending */ +	TXS_BUSY,	/* waiting for permission to send / tailtime */ +	TXS_ACTIVE,	/* Transmitter on, sending data */ +	TXS_NEWFRAME,	/* reset CRC and send (next) frame */ +	TXS_IDLE2,	/* Transmitter on, no data pending */ +	TXS_WAIT,	/* Waiting for Mintime to expire */ +	TXS_TIMEOUT	/* We had a transmission timeout */ +}; + +typedef unsigned long io_port;	/* type definition for an 'io port address' */ + +/* SCC statistical information */ + +struct scc_stat { +        long rxints;            /* Receiver interrupts */ +        long txints;            /* Transmitter interrupts */ +        long exints;            /* External/status interrupts */ +        long spints;            /* Special receiver interrupts */ + +        long txframes;          /* Packets sent */ +        long rxframes;          /* Number of Frames Actually Received */ +        long rxerrs;            /* CRC Errors */ +        long txerrs;		/* KISS errors */ +         +	unsigned int nospace;	/* "Out of buffers" */ +	unsigned int rx_over;	/* Receiver Overruns */ +	unsigned int tx_under;	/* Transmitter Underruns */ + +	unsigned int tx_state;	/* Transmitter state */ +	int tx_queued;		/* tx frames enqueued */ + +	unsigned int maxqueue;	/* allocated tx_buffers */ +	unsigned int bufsize;	/* used buffersize */ +}; + +struct scc_modem { +	long speed;		/* Line speed, bps */ +	char clocksrc;		/* 0 = DPLL, 1 = external, 2 = divider */ +	char nrz;		/* NRZ instead of NRZI */	 +}; + +struct scc_kiss_cmd { +	int  	 command;	/* one of the KISS-Commands defined above */ +	unsigned param;		/* KISS-Param */ +}; + +struct scc_hw_config { +	io_port data_a;		/* data port channel A */ +	io_port ctrl_a;		/* control port channel A */ +	io_port data_b;		/* data port channel B */ +	io_port ctrl_b;		/* control port channel B */ +	io_port vector_latch;	/* INTACK-Latch (#) */ +	io_port	special;	/* special function port */ + +	int	irq;		/* irq */ +	long	clock;		/* clock */ +	char	option;		/* command for function port */ + +	char brand;		/* hardware type */ +	char escc;		/* use ext. features of a 8580/85180/85280 */ +}; + +/* (#) only one INTACK latch allowed. */ + + +struct scc_mem_config { +	unsigned int dummy; +	unsigned int bufsize; +}; + +struct scc_calibrate { +	unsigned int time; +	unsigned char pattern; +}; + +#endif /* _UAPI_SCC_H */ diff --git a/include/uapi/linux/sched.h b/include/uapi/linux/sched.h new file mode 100644 index 00000000000..5a0f945927a --- /dev/null +++ b/include/uapi/linux/sched.h @@ -0,0 +1,46 @@ +#ifndef _UAPI_LINUX_SCHED_H +#define _UAPI_LINUX_SCHED_H + +/* + * cloning flags: + */ +#define CSIGNAL		0x000000ff	/* signal mask to be sent at exit */ +#define CLONE_VM	0x00000100	/* set if VM shared between processes */ +#define CLONE_FS	0x00000200	/* set if fs info shared between processes */ +#define CLONE_FILES	0x00000400	/* set if open files shared between processes */ +#define CLONE_SIGHAND	0x00000800	/* set if signal handlers and blocked signals shared */ +#define CLONE_PTRACE	0x00002000	/* set if we want to let tracing continue on the child too */ +#define CLONE_VFORK	0x00004000	/* set if the parent wants the child to wake it up on mm_release */ +#define CLONE_PARENT	0x00008000	/* set if we want to have the same parent as the cloner */ +#define CLONE_THREAD	0x00010000	/* Same thread group? */ +#define CLONE_NEWNS	0x00020000	/* New namespace group? */ +#define CLONE_SYSVSEM	0x00040000	/* share system V SEM_UNDO semantics */ +#define CLONE_SETTLS	0x00080000	/* create a new TLS for the child */ +#define CLONE_PARENT_SETTID	0x00100000	/* set the TID in the parent */ +#define CLONE_CHILD_CLEARTID	0x00200000	/* clear the TID in the child */ +#define CLONE_DETACHED		0x00400000	/* Unused, ignored */ +#define CLONE_UNTRACED		0x00800000	/* set if the tracing process can't force CLONE_PTRACE on this clone */ +#define CLONE_CHILD_SETTID	0x01000000	/* set the TID in the child */ +/* 0x02000000 was previously the unused CLONE_STOPPED (Start in stopped state) +   and is now available for re-use. */ +#define CLONE_NEWUTS		0x04000000	/* New utsname group? */ +#define CLONE_NEWIPC		0x08000000	/* New ipcs */ +#define CLONE_NEWUSER		0x10000000	/* New user namespace */ +#define CLONE_NEWPID		0x20000000	/* New pid namespace */ +#define CLONE_NEWNET		0x40000000	/* New network namespace */ +#define CLONE_IO		0x80000000	/* Clone io context */ + +/* + * Scheduling policies + */ +#define SCHED_NORMAL		0 +#define SCHED_FIFO		1 +#define SCHED_RR		2 +#define SCHED_BATCH		3 +/* SCHED_ISO: reserved but not implemented yet */ +#define SCHED_IDLE		5 +/* Can be ORed in to make sure the process is reverted back to SCHED_NORMAL on fork */ +#define SCHED_RESET_ON_FORK     0x40000000 + + +#endif /* _UAPI_LINUX_SCHED_H */ diff --git a/include/uapi/linux/screen_info.h b/include/uapi/linux/screen_info.h new file mode 100644 index 00000000000..7530e744762 --- /dev/null +++ b/include/uapi/linux/screen_info.h @@ -0,0 +1,74 @@ +#ifndef _UAPI_SCREEN_INFO_H +#define _UAPI_SCREEN_INFO_H + +#include <linux/types.h> + +/* + * These are set up by the setup-routine at boot-time: + */ + +struct screen_info { +	__u8  orig_x;		/* 0x00 */ +	__u8  orig_y;		/* 0x01 */ +	__u16 ext_mem_k;	/* 0x02 */ +	__u16 orig_video_page;	/* 0x04 */ +	__u8  orig_video_mode;	/* 0x06 */ +	__u8  orig_video_cols;	/* 0x07 */ +	__u8  flags;		/* 0x08 */ +	__u8  unused2;		/* 0x09 */ +	__u16 orig_video_ega_bx;/* 0x0a */ +	__u16 unused3;		/* 0x0c */ +	__u8  orig_video_lines;	/* 0x0e */ +	__u8  orig_video_isVGA;	/* 0x0f */ +	__u16 orig_video_points;/* 0x10 */ + +	/* VESA graphic mode -- linear frame buffer */ +	__u16 lfb_width;	/* 0x12 */ +	__u16 lfb_height;	/* 0x14 */ +	__u16 lfb_depth;	/* 0x16 */ +	__u32 lfb_base;		/* 0x18 */ +	__u32 lfb_size;		/* 0x1c */ +	__u16 cl_magic, cl_offset; /* 0x20 */ +	__u16 lfb_linelength;	/* 0x24 */ +	__u8  red_size;		/* 0x26 */ +	__u8  red_pos;		/* 0x27 */ +	__u8  green_size;	/* 0x28 */ +	__u8  green_pos;	/* 0x29 */ +	__u8  blue_size;	/* 0x2a */ +	__u8  blue_pos;		/* 0x2b */ +	__u8  rsvd_size;	/* 0x2c */ +	__u8  rsvd_pos;		/* 0x2d */ +	__u16 vesapm_seg;	/* 0x2e */ +	__u16 vesapm_off;	/* 0x30 */ +	__u16 pages;		/* 0x32 */ +	__u16 vesa_attributes;	/* 0x34 */ +	__u32 capabilities;     /* 0x36 */ +	__u8  _reserved[6];	/* 0x3a */ +} __attribute__((packed)); + +#define VIDEO_TYPE_MDA		0x10	/* Monochrome Text Display	*/ +#define VIDEO_TYPE_CGA		0x11	/* CGA Display 			*/ +#define VIDEO_TYPE_EGAM		0x20	/* EGA/VGA in Monochrome Mode	*/ +#define VIDEO_TYPE_EGAC		0x21	/* EGA in Color Mode		*/ +#define VIDEO_TYPE_VGAC		0x22	/* VGA+ in Color Mode		*/ +#define VIDEO_TYPE_VLFB		0x23	/* VESA VGA in graphic mode	*/ + +#define VIDEO_TYPE_PICA_S3	0x30	/* ACER PICA-61 local S3 video	*/ +#define VIDEO_TYPE_MIPS_G364	0x31    /* MIPS Magnum 4000 G364 video  */ +#define VIDEO_TYPE_SGI          0x33    /* Various SGI graphics hardware */ + +#define VIDEO_TYPE_TGAC		0x40	/* DEC TGA */ + +#define VIDEO_TYPE_SUN          0x50    /* Sun frame buffer. */ +#define VIDEO_TYPE_SUNPCI       0x51    /* Sun PCI based frame buffer. */ + +#define VIDEO_TYPE_PMAC		0x60	/* PowerMacintosh frame buffer. */ + +#define VIDEO_TYPE_EFI		0x70	/* EFI graphic mode		*/ + +#define VIDEO_FLAGS_NOCURSOR	(1 << 0) /* The video mode has no cursor set */ + +#define VIDEO_CAPABILITY_SKIP_QUIRKS	(1 << 0) + + +#endif /* _UAPI_SCREEN_INFO_H */ diff --git a/include/uapi/linux/sdla.h b/include/uapi/linux/sdla.h new file mode 100644 index 00000000000..95eaff9c9e4 --- /dev/null +++ b/include/uapi/linux/sdla.h @@ -0,0 +1,116 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the  BSD Socket + *		interface as the means of communication with the user level. + * + *		Global definitions for the Frame relay interface. + * + * Version:	@(#)if_ifrad.h	0.20	13 Apr 96 + * + * Author:	Mike McLagan <mike.mclagan@linux.org> + * + * Changes: + *		0.15	Mike McLagan	Structure packing + * + *		0.20	Mike McLagan	New flags for S508 buffer handling + * + *		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. + */ + +#ifndef _UAPISDLA_H +#define _UAPISDLA_H + +/* adapter type */ +#define SDLA_TYPES +#define SDLA_S502A			5020 +#define SDLA_S502E			5021 +#define SDLA_S503			5030 +#define SDLA_S507			5070 +#define SDLA_S508			5080 +#define SDLA_S509			5090 +#define SDLA_UNKNOWN			-1 + +/* port selection flags for the S508 */ +#define SDLA_S508_PORT_V35		0x00 +#define SDLA_S508_PORT_RS232		0x02 + +/* Z80 CPU speeds */ +#define SDLA_CPU_3M			0x00 +#define SDLA_CPU_5M			0x01 +#define SDLA_CPU_7M			0x02 +#define SDLA_CPU_8M			0x03 +#define SDLA_CPU_10M			0x04 +#define SDLA_CPU_16M			0x05 +#define SDLA_CPU_12M			0x06 + +/* some private IOCTLs */ +#define SDLA_IDENTIFY			(FRAD_LAST_IOCTL + 1) +#define SDLA_CPUSPEED			(FRAD_LAST_IOCTL + 2) +#define SDLA_PROTOCOL			(FRAD_LAST_IOCTL + 3) + +#define SDLA_CLEARMEM			(FRAD_LAST_IOCTL + 4) +#define SDLA_WRITEMEM			(FRAD_LAST_IOCTL + 5) +#define SDLA_READMEM			(FRAD_LAST_IOCTL + 6) + +struct sdla_mem { +   int  addr; +   int  len; +   void __user *data; +}; + +#define SDLA_START			(FRAD_LAST_IOCTL + 7) +#define SDLA_STOP			(FRAD_LAST_IOCTL + 8) + +/* some offsets in the Z80's memory space */ +#define SDLA_NMIADDR			0x0000 +#define SDLA_CONF_ADDR			0x0010 +#define SDLA_S502A_NMIADDR		0x0066 +#define SDLA_CODE_BASEADDR		0x0100 +#define SDLA_WINDOW_SIZE		0x2000 +#define SDLA_ADDR_MASK			0x1FFF + +/* largest handleable block of data */ +#define SDLA_MAX_DATA			4080 +#define SDLA_MAX_MTU			4072	/* MAX_DATA - sizeof(fradhdr) */ +#define SDLA_MAX_DLCI			24 + +/* this should be the same as frad_conf */ +struct sdla_conf { +   short station; +   short config; +   short kbaud; +   short clocking; +   short max_frm; +   short T391; +   short T392; +   short N391; +   short N392; +   short N393; +   short CIR_fwd; +   short Bc_fwd; +   short Be_fwd; +   short CIR_bwd; +   short Bc_bwd; +   short Be_bwd; +}; + +/* this should be the same as dlci_conf */ +struct sdla_dlci_conf { +   short config; +   short CIR_fwd; +   short Bc_fwd; +   short Be_fwd; +   short CIR_bwd; +   short Bc_bwd; +   short Be_bwd;  +   short Tc_fwd; +   short Tc_bwd; +   short Tf_max; +   short Tb_max; +}; + + +#endif /* _UAPISDLA_H */ diff --git a/include/uapi/linux/seccomp.h b/include/uapi/linux/seccomp.h new file mode 100644 index 00000000000..ac2dc9f7297 --- /dev/null +++ b/include/uapi/linux/seccomp.h @@ -0,0 +1,47 @@ +#ifndef _UAPI_LINUX_SECCOMP_H +#define _UAPI_LINUX_SECCOMP_H + +#include <linux/compiler.h> +#include <linux/types.h> + + +/* Valid values for seccomp.mode and prctl(PR_SET_SECCOMP, <mode>) */ +#define SECCOMP_MODE_DISABLED	0 /* seccomp is not in use. */ +#define SECCOMP_MODE_STRICT	1 /* uses hard-coded filter. */ +#define SECCOMP_MODE_FILTER	2 /* uses user-supplied filter. */ + +/* + * All BPF programs must return a 32-bit value. + * The bottom 16-bits are for optional return data. + * The upper 16-bits are ordered from least permissive values to most. + * + * The ordering ensures that a min_t() over composed return values always + * selects the least permissive choice. + */ +#define SECCOMP_RET_KILL	0x00000000U /* kill the task immediately */ +#define SECCOMP_RET_TRAP	0x00030000U /* disallow and force a SIGSYS */ +#define SECCOMP_RET_ERRNO	0x00050000U /* returns an errno */ +#define SECCOMP_RET_TRACE	0x7ff00000U /* pass to a tracer or disallow */ +#define SECCOMP_RET_ALLOW	0x7fff0000U /* allow */ + +/* Masks for the return value sections. */ +#define SECCOMP_RET_ACTION	0x7fff0000U +#define SECCOMP_RET_DATA	0x0000ffffU + +/** + * struct seccomp_data - the format the BPF program executes over. + * @nr: the system call number + * @arch: indicates system call convention as an AUDIT_ARCH_* value + *        as defined in <linux/audit.h>. + * @instruction_pointer: at the time of the system call. + * @args: up to 6 system call arguments always stored as 64-bit values + *        regardless of the architecture. + */ +struct seccomp_data { +	int nr; +	__u32 arch; +	__u64 instruction_pointer; +	__u64 args[6]; +}; + +#endif /* _UAPI_LINUX_SECCOMP_H */ diff --git a/include/uapi/linux/securebits.h b/include/uapi/linux/securebits.h new file mode 100644 index 00000000000..985aac9e6bf --- /dev/null +++ b/include/uapi/linux/securebits.h @@ -0,0 +1,51 @@ +#ifndef _UAPI_LINUX_SECUREBITS_H +#define _UAPI_LINUX_SECUREBITS_H + +/* Each securesetting is implemented using two bits. One bit specifies +   whether the setting is on or off. The other bit specify whether the +   setting is locked or not. A setting which is locked cannot be +   changed from user-level. */ +#define issecure_mask(X)	(1 << (X)) + +#define SECUREBITS_DEFAULT 0x00000000 + +/* When set UID 0 has no special privileges. When unset, we support +   inheritance of root-permissions and suid-root executable under +   compatibility mode. We raise the effective and inheritable bitmasks +   *of the executable file* if the effective uid of the new process is +   0. If the real uid is 0, we raise the effective (legacy) bit of the +   executable file. */ +#define SECURE_NOROOT			0 +#define SECURE_NOROOT_LOCKED		1  /* make bit-0 immutable */ + +#define SECBIT_NOROOT		(issecure_mask(SECURE_NOROOT)) +#define SECBIT_NOROOT_LOCKED	(issecure_mask(SECURE_NOROOT_LOCKED)) + +/* When set, setuid to/from uid 0 does not trigger capability-"fixup". +   When unset, to provide compatiblility with old programs relying on +   set*uid to gain/lose privilege, transitions to/from uid 0 cause +   capabilities to be gained/lost. */ +#define SECURE_NO_SETUID_FIXUP		2 +#define SECURE_NO_SETUID_FIXUP_LOCKED	3  /* make bit-2 immutable */ + +#define SECBIT_NO_SETUID_FIXUP	(issecure_mask(SECURE_NO_SETUID_FIXUP)) +#define SECBIT_NO_SETUID_FIXUP_LOCKED \ +			(issecure_mask(SECURE_NO_SETUID_FIXUP_LOCKED)) + +/* When set, a process can retain its capabilities even after +   transitioning to a non-root user (the set-uid fixup suppressed by +   bit 2). Bit-4 is cleared when a process calls exec(); setting both +   bit 4 and 5 will create a barrier through exec that no exec()'d +   child can use this feature again. */ +#define SECURE_KEEP_CAPS		4 +#define SECURE_KEEP_CAPS_LOCKED		5  /* make bit-4 immutable */ + +#define SECBIT_KEEP_CAPS	(issecure_mask(SECURE_KEEP_CAPS)) +#define SECBIT_KEEP_CAPS_LOCKED (issecure_mask(SECURE_KEEP_CAPS_LOCKED)) + +#define SECURE_ALL_BITS		(issecure_mask(SECURE_NOROOT) | \ +				 issecure_mask(SECURE_NO_SETUID_FIXUP) | \ +				 issecure_mask(SECURE_KEEP_CAPS)) +#define SECURE_ALL_LOCKS	(SECURE_ALL_BITS << 1) + +#endif /* _UAPI_LINUX_SECUREBITS_H */ diff --git a/include/uapi/linux/selinux_netlink.h b/include/uapi/linux/selinux_netlink.h new file mode 100644 index 00000000000..d239797785c --- /dev/null +++ b/include/uapi/linux/selinux_netlink.h @@ -0,0 +1,50 @@ +/* + * Netlink event notifications for SELinux. + * + * Author: James Morris <jmorris@redhat.com> + * + * Copyright (C) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + */ +#ifndef _LINUX_SELINUX_NETLINK_H +#define _LINUX_SELINUX_NETLINK_H + +#include <linux/types.h> + +/* Message types. */ +#define SELNL_MSG_BASE 0x10 +enum { +	SELNL_MSG_SETENFORCE = SELNL_MSG_BASE, +	SELNL_MSG_POLICYLOAD, +	SELNL_MSG_MAX +}; + +#ifndef __KERNEL__ +/* Multicast groups - backwards compatiblility for userspace */ +#define SELNL_GRP_NONE		0x00000000 +#define SELNL_GRP_AVC		0x00000001	/* AVC notifications */ +#define SELNL_GRP_ALL		0xffffffff +#endif + +enum selinux_nlgroups { +	SELNLGRP_NONE, +#define SELNLGRP_NONE	SELNLGRP_NONE +	SELNLGRP_AVC, +#define SELNLGRP_AVC	SELNLGRP_AVC +	__SELNLGRP_MAX +}; +#define SELNLGRP_MAX	(__SELNLGRP_MAX - 1) + +/* Message structures */ +struct selnl_msg_setenforce { +	__s32		val; +}; + +struct selnl_msg_policyload { +	__u32	seqno; +}; + +#endif /* _LINUX_SELINUX_NETLINK_H */ diff --git a/include/uapi/linux/sem.h b/include/uapi/linux/sem.h new file mode 100644 index 00000000000..541fce03b50 --- /dev/null +++ b/include/uapi/linux/sem.h @@ -0,0 +1,80 @@ +#ifndef _UAPI_LINUX_SEM_H +#define _UAPI_LINUX_SEM_H + +#include <linux/ipc.h> + +/* semop flags */ +#define SEM_UNDO        0x1000  /* undo the operation on exit */ + +/* semctl Command Definitions. */ +#define GETPID  11       /* get sempid */ +#define GETVAL  12       /* get semval */ +#define GETALL  13       /* get all semval's */ +#define GETNCNT 14       /* get semncnt */ +#define GETZCNT 15       /* get semzcnt */ +#define SETVAL  16       /* set semval */ +#define SETALL  17       /* set all semval's */ + +/* ipcs ctl cmds */ +#define SEM_STAT 18 +#define SEM_INFO 19 + +/* Obsolete, used only for backwards compatibility and libc5 compiles */ +struct semid_ds { +	struct ipc_perm	sem_perm;		/* permissions .. see ipc.h */ +	__kernel_time_t	sem_otime;		/* last semop time */ +	__kernel_time_t	sem_ctime;		/* last change time */ +	struct sem	*sem_base;		/* ptr to first semaphore in array */ +	struct sem_queue *sem_pending;		/* pending operations to be processed */ +	struct sem_queue **sem_pending_last;	/* last pending operation */ +	struct sem_undo	*undo;			/* undo requests on this array */ +	unsigned short	sem_nsems;		/* no. of semaphores in array */ +}; + +/* Include the definition of semid64_ds */ +#include <asm/sembuf.h> + +/* semop system calls takes an array of these. */ +struct sembuf { +	unsigned short  sem_num;	/* semaphore index in array */ +	short		sem_op;		/* semaphore operation */ +	short		sem_flg;	/* operation flags */ +}; + +/* arg for semctl system calls. */ +union semun { +	int val;			/* value for SETVAL */ +	struct semid_ds __user *buf;	/* buffer for IPC_STAT & IPC_SET */ +	unsigned short __user *array;	/* array for GETALL & SETALL */ +	struct seminfo __user *__buf;	/* buffer for IPC_INFO */ +	void __user *__pad; +}; + +struct  seminfo { +	int semmap; +	int semmni; +	int semmns; +	int semmnu; +	int semmsl; +	int semopm; +	int semume; +	int semusz; +	int semvmx; +	int semaem; +}; + +#define SEMMNI  128             /* <= IPCMNI  max # of semaphore identifiers */ +#define SEMMSL  250             /* <= 8 000 max num of semaphores per id */ +#define SEMMNS  (SEMMNI*SEMMSL) /* <= INT_MAX max # of semaphores in system */ +#define SEMOPM  32	        /* <= 1 000 max num of ops per semop call */ +#define SEMVMX  32767           /* <= 32767 semaphore maximum value */ +#define SEMAEM  SEMVMX          /* adjust on exit max value */ + +/* unused */ +#define SEMUME  SEMOPM          /* max num of undo entries per process */ +#define SEMMNU  SEMMNS          /* num of undo structures system wide */ +#define SEMMAP  SEMMNS          /* # of entries in semaphore map */ +#define SEMUSZ  20		/* sizeof struct sem_undo */ + + +#endif /* _UAPI_LINUX_SEM_H */ diff --git a/include/uapi/linux/serial.h b/include/uapi/linux/serial.h new file mode 100644 index 00000000000..5e0d0ed61cf --- /dev/null +++ b/include/uapi/linux/serial.h @@ -0,0 +1,126 @@ +/* + * include/linux/serial.h + * + * Copyright (C) 1992 by Theodore Ts'o. + *  + * Redistribution of this file is permitted under the terms of the GNU  + * Public License (GPL) + */ + +#ifndef _UAPI_LINUX_SERIAL_H +#define _UAPI_LINUX_SERIAL_H + +#include <linux/types.h> + +#include <linux/tty_flags.h> + + +struct serial_struct { +	int	type; +	int	line; +	unsigned int	port; +	int	irq; +	int	flags; +	int	xmit_fifo_size; +	int	custom_divisor; +	int	baud_base; +	unsigned short	close_delay; +	char	io_type; +	char	reserved_char[1]; +	int	hub6; +	unsigned short	closing_wait; /* time to wait before closing */ +	unsigned short	closing_wait2; /* no longer used... */ +	unsigned char	*iomem_base; +	unsigned short	iomem_reg_shift; +	unsigned int	port_high; +	unsigned long	iomap_base;	/* cookie passed into ioremap */ +}; + +/* + * For the close wait times, 0 means wait forever for serial port to + * flush its output.  65535 means don't wait at all. + */ +#define ASYNC_CLOSING_WAIT_INF	0 +#define ASYNC_CLOSING_WAIT_NONE	65535 + +/* + * These are the supported serial types. + */ +#define PORT_UNKNOWN	0 +#define PORT_8250	1 +#define PORT_16450	2 +#define PORT_16550	3 +#define PORT_16550A	4 +#define PORT_CIRRUS     5	/* usurped by cyclades.c */ +#define PORT_16650	6 +#define PORT_16650V2	7 +#define PORT_16750	8 +#define PORT_STARTECH	9	/* usurped by cyclades.c */ +#define PORT_16C950	10	/* Oxford Semiconductor */ +#define PORT_16654	11 +#define PORT_16850	12 +#define PORT_RSA	13	/* RSA-DV II/S card */ +#define PORT_MAX	13 + +#define SERIAL_IO_PORT	0 +#define SERIAL_IO_HUB6	1 +#define SERIAL_IO_MEM	2 + +#define UART_CLEAR_FIFO		0x01 +#define UART_USE_FIFO		0x02 +#define UART_STARTECH		0x04 +#define UART_NATSEMI		0x08 + + +/* + * Multiport serial configuration structure --- external structure + */ +struct serial_multiport_struct { +	int		irq; +	int		port1; +	unsigned char	mask1, match1; +	int		port2; +	unsigned char	mask2, match2; +	int		port3; +	unsigned char	mask3, match3; +	int		port4; +	unsigned char	mask4, match4; +	int		port_monitor; +	int	reserved[32]; +}; + +/* + * Serial input interrupt line counters -- external structure + * Four lines can interrupt: CTS, DSR, RI, DCD + */ +struct serial_icounter_struct { +	int cts, dsr, rng, dcd; +	int rx, tx; +	int frame, overrun, parity, brk; +	int buf_overrun; +	int reserved[9]; +}; + +/* + * Serial interface for controlling RS485 settings on chips with suitable + * support. Set with TIOCSRS485 and get with TIOCGRS485 if supported by your + * platform. The set function returns the new state, with any unsupported bits + * reverted appropriately. + */ + +struct serial_rs485 { +	__u32	flags;			/* RS485 feature flags */ +#define SER_RS485_ENABLED		(1 << 0)	/* If enabled */ +#define SER_RS485_RTS_ON_SEND		(1 << 1)	/* Logical level for +							   RTS pin when +							   sending */ +#define SER_RS485_RTS_AFTER_SEND	(1 << 2)	/* Logical level for +							   RTS pin after sent*/ +#define SER_RS485_RX_DURING_TX		(1 << 4) +	__u32	delay_rts_before_send;	/* Delay before send (milliseconds) */ +	__u32	delay_rts_after_send;	/* Delay after send (milliseconds) */ +	__u32	padding[5];		/* Memory is cheap, new structs +					   are a royal PITA .. */ +}; + +#endif /* _UAPI_LINUX_SERIAL_H */ diff --git a/include/uapi/linux/serial_core.h b/include/uapi/linux/serial_core.h new file mode 100644 index 00000000000..7e1ab20adc0 --- /dev/null +++ b/include/uapi/linux/serial_core.h @@ -0,0 +1,219 @@ +/* + *  linux/drivers/char/serial_core.h + * + *  Copyright (C) 2000 Deep Blue Solutions Ltd. + * + * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + */ +#ifndef _UAPILINUX_SERIAL_CORE_H +#define _UAPILINUX_SERIAL_CORE_H + +#include <linux/serial.h> + +/* + * The type definitions.  These are from Ted Ts'o's serial.h + */ +#define PORT_UNKNOWN	0 +#define PORT_8250	1 +#define PORT_16450	2 +#define PORT_16550	3 +#define PORT_16550A	4 +#define PORT_CIRRUS	5 +#define PORT_16650	6 +#define PORT_16650V2	7 +#define PORT_16750	8 +#define PORT_STARTECH	9 +#define PORT_16C950	10 +#define PORT_16654	11 +#define PORT_16850	12 +#define PORT_RSA	13 +#define PORT_NS16550A	14 +#define PORT_XSCALE	15 +#define PORT_RM9000	16	/* PMC-Sierra RM9xxx internal UART */ +#define PORT_OCTEON	17	/* Cavium OCTEON internal UART */ +#define PORT_AR7	18	/* Texas Instruments AR7 internal UART */ +#define PORT_U6_16550A	19	/* ST-Ericsson U6xxx internal UART */ +#define PORT_TEGRA	20	/* NVIDIA Tegra internal UART */ +#define PORT_XR17D15X	21	/* Exar XR17D15x UART */ +#define PORT_LPC3220	22	/* NXP LPC32xx SoC "Standard" UART */ +#define PORT_8250_CIR	23	/* CIR infrared port, has its own driver */ +#define PORT_MAX_8250	23	/* max port ID */ + +/* + * ARM specific type numbers.  These are not currently guaranteed + * to be implemented, and will change in the future.  These are + * separate so any additions to the old serial.c that occur before + * we are merged can be easily merged here. + */ +#define PORT_PXA	31 +#define PORT_AMBA	32 +#define PORT_CLPS711X	33 +#define PORT_SA1100	34 +#define PORT_UART00	35 +#define PORT_21285	37 + +/* Sparc type numbers.  */ +#define PORT_SUNZILOG	38 +#define PORT_SUNSAB	39 + +/* DEC */ +#define PORT_DZ		46 +#define PORT_ZS		47 + +/* Parisc type numbers. */ +#define PORT_MUX	48 + +/* Atmel AT91 / AT32 SoC */ +#define PORT_ATMEL	49 + +/* Macintosh Zilog type numbers */ +#define PORT_MAC_ZILOG	50	/* m68k : not yet implemented */ +#define PORT_PMAC_ZILOG	51 + +/* SH-SCI */ +#define PORT_SCI	52 +#define PORT_SCIF	53 +#define PORT_IRDA	54 + +/* Samsung S3C2410 SoC and derivatives thereof */ +#define PORT_S3C2410    55 + +/* SGI IP22 aka Indy / Challenge S / Indigo 2 */ +#define PORT_IP22ZILOG	56 + +/* Sharp LH7a40x -- an ARM9 SoC series */ +#define PORT_LH7A40X	57 + +/* PPC CPM type number */ +#define PORT_CPM        58 + +/* MPC52xx (and MPC512x) type numbers */ +#define PORT_MPC52xx	59 + +/* IBM icom */ +#define PORT_ICOM	60 + +/* Samsung S3C2440 SoC */ +#define PORT_S3C2440	61 + +/* Motorola i.MX SoC */ +#define PORT_IMX	62 + +/* Marvell MPSC */ +#define PORT_MPSC	63 + +/* TXX9 type number */ +#define PORT_TXX9	64 + +/* NEC VR4100 series SIU/DSIU */ +#define PORT_VR41XX_SIU		65 +#define PORT_VR41XX_DSIU	66 + +/* Samsung S3C2400 SoC */ +#define PORT_S3C2400	67 + +/* M32R SIO */ +#define PORT_M32R_SIO	68 + +/*Digi jsm */ +#define PORT_JSM        69 + +#define PORT_PNX8XXX	70 + +/* Hilscher netx */ +#define PORT_NETX	71 + +/* SUN4V Hypervisor Console */ +#define PORT_SUNHV	72 + +#define PORT_S3C2412	73 + +/* Xilinx uartlite */ +#define PORT_UARTLITE	74 + +/* Blackfin bf5xx */ +#define PORT_BFIN	75 + +/* Micrel KS8695 */ +#define PORT_KS8695	76 + +/* Broadcom SB1250, etc. SOC */ +#define PORT_SB1250_DUART	77 + +/* Freescale ColdFire */ +#define PORT_MCF	78 + +/* Blackfin SPORT */ +#define PORT_BFIN_SPORT		79 + +/* MN10300 on-chip UART numbers */ +#define PORT_MN10300		80 +#define PORT_MN10300_CTS	81 + +#define PORT_SC26XX	82 + +/* SH-SCI */ +#define PORT_SCIFA	83 + +#define PORT_S3C6400	84 + +/* NWPSERIAL */ +#define PORT_NWPSERIAL	85 + +/* MAX3100 */ +#define PORT_MAX3100    86 + +/* Timberdale UART */ +#define PORT_TIMBUART	87 + +/* Qualcomm MSM SoCs */ +#define PORT_MSM	88 + +/* BCM63xx family SoCs */ +#define PORT_BCM63XX	89 + +/* Aeroflex Gaisler GRLIB APBUART */ +#define PORT_APBUART    90 + +/* Altera UARTs */ +#define PORT_ALTERA_JTAGUART	91 +#define PORT_ALTERA_UART	92 + +/* SH-SCI */ +#define PORT_SCIFB	93 + +/* MAX310X */ +#define PORT_MAX310X	94 + +/* High Speed UART for Medfield */ +#define PORT_MFD	95 + +/* TI OMAP-UART */ +#define PORT_OMAP	96 + +/* VIA VT8500 SoC */ +#define PORT_VT8500	97 + +/* Xilinx PSS UART */ +#define PORT_XUARTPS	98 + +/* Atheros AR933X SoC */ +#define PORT_AR933X	99 + +/* Energy Micro efm32 SoC */ +#define PORT_EFMUART   100 + + +#endif /* _UAPILINUX_SERIAL_CORE_H */ diff --git a/include/uapi/linux/serial_reg.h b/include/uapi/linux/serial_reg.h new file mode 100644 index 00000000000..5ed325e88a8 --- /dev/null +++ b/include/uapi/linux/serial_reg.h @@ -0,0 +1,371 @@ +/* + * include/linux/serial_reg.h + * + * Copyright (C) 1992, 1994 by Theodore Ts'o. + *  + * Redistribution of this file is permitted under the terms of the GNU  + * Public License (GPL) + *  + * These are the UART port assignments, expressed as offsets from the base + * register.  These assignments should hold for any serial port based on + * a 8250, 16450, or 16550(A). + */ + +#ifndef _LINUX_SERIAL_REG_H +#define _LINUX_SERIAL_REG_H + +/* + * DLAB=0 + */ +#define UART_RX		0	/* In:  Receive buffer */ +#define UART_TX		0	/* Out: Transmit buffer */ + +#define UART_IER	1	/* Out: Interrupt Enable Register */ +#define UART_IER_MSI		0x08 /* Enable Modem status interrupt */ +#define UART_IER_RLSI		0x04 /* Enable receiver line status interrupt */ +#define UART_IER_THRI		0x02 /* Enable Transmitter holding register int. */ +#define UART_IER_RDI		0x01 /* Enable receiver data interrupt */ +/* + * Sleep mode for ST16650 and TI16750.  For the ST16650, EFR[4]=1 + */ +#define UART_IERX_SLEEP		0x10 /* Enable sleep mode */ + +#define UART_IIR	2	/* In:  Interrupt ID Register */ +#define UART_IIR_NO_INT		0x01 /* No interrupts pending */ +#define UART_IIR_ID		0x06 /* Mask for the interrupt ID */ +#define UART_IIR_MSI		0x00 /* Modem status interrupt */ +#define UART_IIR_THRI		0x02 /* Transmitter holding register empty */ +#define UART_IIR_RDI		0x04 /* Receiver data interrupt */ +#define UART_IIR_RLSI		0x06 /* Receiver line status interrupt */ + +#define UART_IIR_BUSY		0x07 /* DesignWare APB Busy Detect */ + +#define UART_IIR_RX_TIMEOUT	0x0c /* OMAP RX Timeout interrupt */ +#define UART_IIR_XOFF		0x10 /* OMAP XOFF/Special Character */ +#define UART_IIR_CTS_RTS_DSR	0x20 /* OMAP CTS/RTS/DSR Change */ + +#define UART_FCR	2	/* Out: FIFO Control Register */ +#define UART_FCR_ENABLE_FIFO	0x01 /* Enable the FIFO */ +#define UART_FCR_CLEAR_RCVR	0x02 /* Clear the RCVR FIFO */ +#define UART_FCR_CLEAR_XMIT	0x04 /* Clear the XMIT FIFO */ +#define UART_FCR_DMA_SELECT	0x08 /* For DMA applications */ +/* + * Note: The FIFO trigger levels are chip specific: + *	RX:76 = 00  01  10  11	TX:54 = 00  01  10  11 + * PC16550D:	 1   4   8  14		xx  xx  xx  xx + * TI16C550A:	 1   4   8  14          xx  xx  xx  xx + * TI16C550C:	 1   4   8  14          xx  xx  xx  xx + * ST16C550:	 1   4   8  14		xx  xx  xx  xx + * ST16C650:	 8  16  24  28		16   8  24  30	PORT_16650V2 + * NS16C552:	 1   4   8  14		xx  xx  xx  xx + * ST16C654:	 8  16  56  60		 8  16  32  56	PORT_16654 + * TI16C750:	 1  16  32  56		xx  xx  xx  xx	PORT_16750 + * TI16C752:	 8  16  56  60		 8  16  32  56 + * Tegra:	 1   4   8  14		16   8   4   1	PORT_TEGRA + */ +#define UART_FCR_R_TRIG_00	0x00 +#define UART_FCR_R_TRIG_01	0x40 +#define UART_FCR_R_TRIG_10	0x80 +#define UART_FCR_R_TRIG_11	0xc0 +#define UART_FCR_T_TRIG_00	0x00 +#define UART_FCR_T_TRIG_01	0x10 +#define UART_FCR_T_TRIG_10	0x20 +#define UART_FCR_T_TRIG_11	0x30 + +#define UART_FCR_TRIGGER_MASK	0xC0 /* Mask for the FIFO trigger range */ +#define UART_FCR_TRIGGER_1	0x00 /* Mask for trigger set at 1 */ +#define UART_FCR_TRIGGER_4	0x40 /* Mask for trigger set at 4 */ +#define UART_FCR_TRIGGER_8	0x80 /* Mask for trigger set at 8 */ +#define UART_FCR_TRIGGER_14	0xC0 /* Mask for trigger set at 14 */ +/* 16650 definitions */ +#define UART_FCR6_R_TRIGGER_8	0x00 /* Mask for receive trigger set at 1 */ +#define UART_FCR6_R_TRIGGER_16	0x40 /* Mask for receive trigger set at 4 */ +#define UART_FCR6_R_TRIGGER_24  0x80 /* Mask for receive trigger set at 8 */ +#define UART_FCR6_R_TRIGGER_28	0xC0 /* Mask for receive trigger set at 14 */ +#define UART_FCR6_T_TRIGGER_16	0x00 /* Mask for transmit trigger set at 16 */ +#define UART_FCR6_T_TRIGGER_8	0x10 /* Mask for transmit trigger set at 8 */ +#define UART_FCR6_T_TRIGGER_24  0x20 /* Mask for transmit trigger set at 24 */ +#define UART_FCR6_T_TRIGGER_30	0x30 /* Mask for transmit trigger set at 30 */ +#define UART_FCR7_64BYTE	0x20 /* Go into 64 byte mode (TI16C750) */ + +#define UART_LCR	3	/* Out: Line Control Register */ +/* + * Note: if the word length is 5 bits (UART_LCR_WLEN5), then setting  + * UART_LCR_STOP will select 1.5 stop bits, not 2 stop bits. + */ +#define UART_LCR_DLAB		0x80 /* Divisor latch access bit */ +#define UART_LCR_SBC		0x40 /* Set break control */ +#define UART_LCR_SPAR		0x20 /* Stick parity (?) */ +#define UART_LCR_EPAR		0x10 /* Even parity select */ +#define UART_LCR_PARITY		0x08 /* Parity Enable */ +#define UART_LCR_STOP		0x04 /* Stop bits: 0=1 bit, 1=2 bits */ +#define UART_LCR_WLEN5		0x00 /* Wordlength: 5 bits */ +#define UART_LCR_WLEN6		0x01 /* Wordlength: 6 bits */ +#define UART_LCR_WLEN7		0x02 /* Wordlength: 7 bits */ +#define UART_LCR_WLEN8		0x03 /* Wordlength: 8 bits */ + +/* + * Access to some registers depends on register access / configuration + * mode. + */ +#define UART_LCR_CONF_MODE_A	UART_LCR_DLAB	/* Configutation mode A */ +#define UART_LCR_CONF_MODE_B	0xBF		/* Configutation mode B */ + +#define UART_MCR	4	/* Out: Modem Control Register */ +#define UART_MCR_CLKSEL		0x80 /* Divide clock by 4 (TI16C752, EFR[4]=1) */ +#define UART_MCR_TCRTLR		0x40 /* Access TCR/TLR (TI16C752, EFR[4]=1) */ +#define UART_MCR_XONANY		0x20 /* Enable Xon Any (TI16C752, EFR[4]=1) */ +#define UART_MCR_AFE		0x20 /* Enable auto-RTS/CTS (TI16C550C/TI16C750) */ +#define UART_MCR_LOOP		0x10 /* Enable loopback test mode */ +#define UART_MCR_OUT2		0x08 /* Out2 complement */ +#define UART_MCR_OUT1		0x04 /* Out1 complement */ +#define UART_MCR_RTS		0x02 /* RTS complement */ +#define UART_MCR_DTR		0x01 /* DTR complement */ + +#define UART_LSR	5	/* In:  Line Status Register */ +#define UART_LSR_FIFOE		0x80 /* Fifo error */ +#define UART_LSR_TEMT		0x40 /* Transmitter empty */ +#define UART_LSR_THRE		0x20 /* Transmit-hold-register empty */ +#define UART_LSR_BI		0x10 /* Break interrupt indicator */ +#define UART_LSR_FE		0x08 /* Frame error indicator */ +#define UART_LSR_PE		0x04 /* Parity error indicator */ +#define UART_LSR_OE		0x02 /* Overrun error indicator */ +#define UART_LSR_DR		0x01 /* Receiver data ready */ +#define UART_LSR_BRK_ERROR_BITS	0x1E /* BI, FE, PE, OE bits */ + +#define UART_MSR	6	/* In:  Modem Status Register */ +#define UART_MSR_DCD		0x80 /* Data Carrier Detect */ +#define UART_MSR_RI		0x40 /* Ring Indicator */ +#define UART_MSR_DSR		0x20 /* Data Set Ready */ +#define UART_MSR_CTS		0x10 /* Clear to Send */ +#define UART_MSR_DDCD		0x08 /* Delta DCD */ +#define UART_MSR_TERI		0x04 /* Trailing edge ring indicator */ +#define UART_MSR_DDSR		0x02 /* Delta DSR */ +#define UART_MSR_DCTS		0x01 /* Delta CTS */ +#define UART_MSR_ANY_DELTA	0x0F /* Any of the delta bits! */ + +#define UART_SCR	7	/* I/O: Scratch Register */ + +/* + * DLAB=1 + */ +#define UART_DLL	0	/* Out: Divisor Latch Low */ +#define UART_DLM	1	/* Out: Divisor Latch High */ + +/* + * LCR=0xBF (or DLAB=1 for 16C660) + */ +#define UART_EFR	2	/* I/O: Extended Features Register */ +#define UART_XR_EFR	9	/* I/O: Extended Features Register (XR17D15x) */ +#define UART_EFR_CTS		0x80 /* CTS flow control */ +#define UART_EFR_RTS		0x40 /* RTS flow control */ +#define UART_EFR_SCD		0x20 /* Special character detect */ +#define UART_EFR_ECB		0x10 /* Enhanced control bit */ +/* + * the low four bits control software flow control + */ + +/* + * LCR=0xBF, TI16C752, ST16650, ST16650A, ST16654 + */ +#define UART_XON1	4	/* I/O: Xon character 1 */ +#define UART_XON2	5	/* I/O: Xon character 2 */ +#define UART_XOFF1	6	/* I/O: Xoff character 1 */ +#define UART_XOFF2	7	/* I/O: Xoff character 2 */ + +/* + * EFR[4]=1 MCR[6]=1, TI16C752 + */ +#define UART_TI752_TCR	6	/* I/O: transmission control register */ +#define UART_TI752_TLR	7	/* I/O: trigger level register */ + +/* + * LCR=0xBF, XR16C85x + */ +#define UART_TRG	0	/* FCTR bit 7 selects Rx or Tx +				 * In: Fifo count +				 * Out: Fifo custom trigger levels */ +/* + * These are the definitions for the Programmable Trigger Register + */ +#define UART_TRG_1		0x01 +#define UART_TRG_4		0x04 +#define UART_TRG_8		0x08 +#define UART_TRG_16		0x10 +#define UART_TRG_32		0x20 +#define UART_TRG_64		0x40 +#define UART_TRG_96		0x60 +#define UART_TRG_120		0x78 +#define UART_TRG_128		0x80 + +#define UART_FCTR	1	/* Feature Control Register */ +#define UART_FCTR_RTS_NODELAY	0x00  /* RTS flow control delay */ +#define UART_FCTR_RTS_4DELAY	0x01 +#define UART_FCTR_RTS_6DELAY	0x02 +#define UART_FCTR_RTS_8DELAY	0x03 +#define UART_FCTR_IRDA		0x04  /* IrDa data encode select */ +#define UART_FCTR_TX_INT	0x08  /* Tx interrupt type select */ +#define UART_FCTR_TRGA		0x00  /* Tx/Rx 550 trigger table select */ +#define UART_FCTR_TRGB		0x10  /* Tx/Rx 650 trigger table select */ +#define UART_FCTR_TRGC		0x20  /* Tx/Rx 654 trigger table select */ +#define UART_FCTR_TRGD		0x30  /* Tx/Rx 850 programmable trigger select */ +#define UART_FCTR_SCR_SWAP	0x40  /* Scratch pad register swap */ +#define UART_FCTR_RX		0x00  /* Programmable trigger mode select */ +#define UART_FCTR_TX		0x80  /* Programmable trigger mode select */ + +/* + * LCR=0xBF, FCTR[6]=1 + */ +#define UART_EMSR	7	/* Extended Mode Select Register */ +#define UART_EMSR_FIFO_COUNT	0x01  /* Rx/Tx select */ +#define UART_EMSR_ALT_COUNT	0x02  /* Alternating count select */ + +/* + * The Intel XScale on-chip UARTs define these bits + */ +#define UART_IER_DMAE	0x80	/* DMA Requests Enable */ +#define UART_IER_UUE	0x40	/* UART Unit Enable */ +#define UART_IER_NRZE	0x20	/* NRZ coding Enable */ +#define UART_IER_RTOIE	0x10	/* Receiver Time Out Interrupt Enable */ + +#define UART_IIR_TOD	0x08	/* Character Timeout Indication Detected */ + +#define UART_FCR_PXAR1	0x00	/* receive FIFO threshold = 1 */ +#define UART_FCR_PXAR8	0x40	/* receive FIFO threshold = 8 */ +#define UART_FCR_PXAR16	0x80	/* receive FIFO threshold = 16 */ +#define UART_FCR_PXAR32	0xc0	/* receive FIFO threshold = 32 */ + +/* + * Intel MID on-chip HSU (High Speed UART) defined bits + */ +#define UART_FCR_HSU_64_1B	0x00	/* receive FIFO treshold = 1 */ +#define UART_FCR_HSU_64_16B	0x40	/* receive FIFO treshold = 16 */ +#define UART_FCR_HSU_64_32B	0x80	/* receive FIFO treshold = 32 */ +#define UART_FCR_HSU_64_56B	0xc0	/* receive FIFO treshold = 56 */ + +#define UART_FCR_HSU_16_1B	0x00	/* receive FIFO treshold = 1 */ +#define UART_FCR_HSU_16_4B	0x40	/* receive FIFO treshold = 4 */ +#define UART_FCR_HSU_16_8B	0x80	/* receive FIFO treshold = 8 */ +#define UART_FCR_HSU_16_14B	0xc0	/* receive FIFO treshold = 14 */ + +#define UART_FCR_HSU_64B_FIFO	0x20	/* chose 64 bytes FIFO */ +#define UART_FCR_HSU_16B_FIFO	0x00	/* chose 16 bytes FIFO */ + +#define UART_FCR_HALF_EMPT_TXI	0x00	/* trigger TX_EMPT IRQ for half empty */ +#define UART_FCR_FULL_EMPT_TXI	0x08	/* trigger TX_EMPT IRQ for full empty */ + +/* + * These register definitions are for the 16C950 + */ +#define UART_ASR	0x01	/* Additional Status Register */ +#define UART_RFL	0x03	/* Receiver FIFO level */ +#define UART_TFL 	0x04	/* Transmitter FIFO level */ +#define UART_ICR	0x05	/* Index Control Register */ + +/* The 16950 ICR registers */ +#define UART_ACR	0x00	/* Additional Control Register */ +#define UART_CPR	0x01	/* Clock Prescalar Register */ +#define UART_TCR	0x02	/* Times Clock Register */ +#define UART_CKS	0x03	/* Clock Select Register */ +#define UART_TTL	0x04	/* Transmitter Interrupt Trigger Level */ +#define UART_RTL	0x05	/* Receiver Interrupt Trigger Level */ +#define UART_FCL	0x06	/* Flow Control Level Lower */ +#define UART_FCH	0x07	/* Flow Control Level Higher */ +#define UART_ID1	0x08	/* ID #1 */ +#define UART_ID2	0x09	/* ID #2 */ +#define UART_ID3	0x0A	/* ID #3 */ +#define UART_REV	0x0B	/* Revision */ +#define UART_CSR	0x0C	/* Channel Software Reset */ +#define UART_NMR	0x0D	/* Nine-bit Mode Register */ +#define UART_CTR	0xFF + +/* + * The 16C950 Additional Control Register + */ +#define UART_ACR_RXDIS	0x01	/* Receiver disable */ +#define UART_ACR_TXDIS	0x02	/* Transmitter disable */ +#define UART_ACR_DSRFC	0x04	/* DSR Flow Control */ +#define UART_ACR_TLENB	0x20	/* 950 trigger levels enable */ +#define UART_ACR_ICRRD	0x40	/* ICR Read enable */ +#define UART_ACR_ASREN	0x80	/* Additional status enable */ + + + +/* + * These definitions are for the RSA-DV II/S card, from + * + * Kiyokazu SUTO <suto@ks-and-ks.ne.jp> + */ + +#define UART_RSA_BASE (-8) + +#define UART_RSA_MSR ((UART_RSA_BASE) + 0) /* I/O: Mode Select Register */ + +#define UART_RSA_MSR_SWAP (1 << 0) /* Swap low/high 8 bytes in I/O port addr */ +#define UART_RSA_MSR_FIFO (1 << 2) /* Enable the external FIFO */ +#define UART_RSA_MSR_FLOW (1 << 3) /* Enable the auto RTS/CTS flow control */ +#define UART_RSA_MSR_ITYP (1 << 4) /* Level (1) / Edge triger (0) */ + +#define UART_RSA_IER ((UART_RSA_BASE) + 1) /* I/O: Interrupt Enable Register */ + +#define UART_RSA_IER_Rx_FIFO_H (1 << 0) /* Enable Rx FIFO half full int. */ +#define UART_RSA_IER_Tx_FIFO_H (1 << 1) /* Enable Tx FIFO half full int. */ +#define UART_RSA_IER_Tx_FIFO_E (1 << 2) /* Enable Tx FIFO empty int. */ +#define UART_RSA_IER_Rx_TOUT (1 << 3) /* Enable char receive timeout int */ +#define UART_RSA_IER_TIMER (1 << 4) /* Enable timer interrupt */ + +#define UART_RSA_SRR ((UART_RSA_BASE) + 2) /* IN: Status Read Register */ + +#define UART_RSA_SRR_Tx_FIFO_NEMP (1 << 0) /* Tx FIFO is not empty (1) */ +#define UART_RSA_SRR_Tx_FIFO_NHFL (1 << 1) /* Tx FIFO is not half full (1) */ +#define UART_RSA_SRR_Tx_FIFO_NFUL (1 << 2) /* Tx FIFO is not full (1) */ +#define UART_RSA_SRR_Rx_FIFO_NEMP (1 << 3) /* Rx FIFO is not empty (1) */ +#define UART_RSA_SRR_Rx_FIFO_NHFL (1 << 4) /* Rx FIFO is not half full (1) */ +#define UART_RSA_SRR_Rx_FIFO_NFUL (1 << 5) /* Rx FIFO is not full (1) */ +#define UART_RSA_SRR_Rx_TOUT (1 << 6) /* Character reception timeout occurred (1) */ +#define UART_RSA_SRR_TIMER (1 << 7) /* Timer interrupt occurred */ + +#define UART_RSA_FRR ((UART_RSA_BASE) + 2) /* OUT: FIFO Reset Register */ + +#define UART_RSA_TIVSR ((UART_RSA_BASE) + 3) /* I/O: Timer Interval Value Set Register */ + +#define UART_RSA_TCR ((UART_RSA_BASE) + 4) /* OUT: Timer Control Register */ + +#define UART_RSA_TCR_SWITCH (1 << 0) /* Timer on */ + +/* + * The RSA DSV/II board has two fixed clock frequencies.  One is the + * standard rate, and the other is 8 times faster. + */ +#define SERIAL_RSA_BAUD_BASE (921600) +#define SERIAL_RSA_BAUD_BASE_LO (SERIAL_RSA_BAUD_BASE / 8) + +/* + * Extra serial register definitions for the internal UARTs + * in TI OMAP processors. + */ +#define UART_OMAP_MDR1		0x08	/* Mode definition register */ +#define UART_OMAP_MDR2		0x09	/* Mode definition register 2 */ +#define UART_OMAP_SCR		0x10	/* Supplementary control register */ +#define UART_OMAP_SSR		0x11	/* Supplementary status register */ +#define UART_OMAP_EBLR		0x12	/* BOF length register */ +#define UART_OMAP_OSC_12M_SEL	0x13	/* OMAP1510 12MHz osc select */ +#define UART_OMAP_MVER		0x14	/* Module version register */ +#define UART_OMAP_SYSC		0x15	/* System configuration register */ +#define UART_OMAP_SYSS		0x16	/* System status register */ +#define UART_OMAP_WER		0x17	/* Wake-up enable register */ + +/* + * These are the definitions for the MDR1 register + */ +#define UART_OMAP_MDR1_16X_MODE		0x00	/* UART 16x mode */ +#define UART_OMAP_MDR1_SIR_MODE		0x01	/* SIR mode */ +#define UART_OMAP_MDR1_16X_ABAUD_MODE	0x02	/* UART 16x auto-baud */ +#define UART_OMAP_MDR1_13X_MODE		0x03	/* UART 13x mode */ +#define UART_OMAP_MDR1_MIR_MODE		0x04	/* MIR mode */ +#define UART_OMAP_MDR1_FIR_MODE		0x05	/* FIR mode */ +#define UART_OMAP_MDR1_CIR_MODE		0x06	/* CIR mode */ +#define UART_OMAP_MDR1_DISABLE		0x07	/* Disable (default state) */ + +#endif /* _LINUX_SERIAL_REG_H */ + diff --git a/include/uapi/linux/serio.h b/include/uapi/linux/serio.h new file mode 100644 index 00000000000..9f53fa7fc13 --- /dev/null +++ b/include/uapi/linux/serio.h @@ -0,0 +1,80 @@ +/* + * Copyright (C) 1999-2002 Vojtech Pavlik +* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ +#ifndef _UAPI_SERIO_H +#define _UAPI_SERIO_H + + +#include <linux/ioctl.h> + +#define SPIOCSTYPE	_IOW('q', 0x01, unsigned long) + + +/* + * bit masks for use in "interrupt" flags (3rd argument) + */ +#define SERIO_TIMEOUT	1 +#define SERIO_PARITY	2 +#define SERIO_FRAME	4 + +/* + * Serio types + */ +#define SERIO_XT	0x00 +#define SERIO_8042	0x01 +#define SERIO_RS232	0x02 +#define SERIO_HIL_MLC	0x03 +#define SERIO_PS_PSTHRU	0x05 +#define SERIO_8042_XL	0x06 + +/* + * Serio protocols + */ +#define SERIO_UNKNOWN	0x00 +#define SERIO_MSC	0x01 +#define SERIO_SUN	0x02 +#define SERIO_MS	0x03 +#define SERIO_MP	0x04 +#define SERIO_MZ	0x05 +#define SERIO_MZP	0x06 +#define SERIO_MZPP	0x07 +#define SERIO_VSXXXAA	0x08 +#define SERIO_SUNKBD	0x10 +#define SERIO_WARRIOR	0x18 +#define SERIO_SPACEORB	0x19 +#define SERIO_MAGELLAN	0x1a +#define SERIO_SPACEBALL	0x1b +#define SERIO_GUNZE	0x1c +#define SERIO_IFORCE	0x1d +#define SERIO_STINGER	0x1e +#define SERIO_NEWTON	0x1f +#define SERIO_STOWAWAY	0x20 +#define SERIO_H3600	0x21 +#define SERIO_PS2SER	0x22 +#define SERIO_TWIDKBD	0x23 +#define SERIO_TWIDJOY	0x24 +#define SERIO_HIL	0x25 +#define SERIO_SNES232	0x26 +#define SERIO_SEMTECH	0x27 +#define SERIO_LKKBD	0x28 +#define SERIO_ELO	0x29 +#define SERIO_MICROTOUCH	0x30 +#define SERIO_PENMOUNT	0x31 +#define SERIO_TOUCHRIGHT	0x32 +#define SERIO_TOUCHWIN	0x33 +#define SERIO_TAOSEVM	0x34 +#define SERIO_FUJITSU	0x35 +#define SERIO_ZHENHUA	0x36 +#define SERIO_INEXIO	0x37 +#define SERIO_TOUCHIT213	0x38 +#define SERIO_W8001	0x39 +#define SERIO_DYNAPRO	0x3a +#define SERIO_HAMPSHIRE	0x3b +#define SERIO_PS2MULT	0x3c +#define SERIO_TSC40	0x3d + +#endif /* _UAPI_SERIO_H */ diff --git a/include/uapi/linux/shm.h b/include/uapi/linux/shm.h new file mode 100644 index 00000000000..ec36fa1a83a --- /dev/null +++ b/include/uapi/linux/shm.h @@ -0,0 +1,79 @@ +#ifndef _UAPI_LINUX_SHM_H_ +#define _UAPI_LINUX_SHM_H_ + +#include <linux/ipc.h> +#include <linux/errno.h> +#ifndef __KERNEL__ +#include <unistd.h> +#endif + +/* + * SHMMAX, SHMMNI and SHMALL are upper limits are defaults which can + * be increased by sysctl + */ + +#define SHMMAX 0x2000000		 /* max shared seg size (bytes) */ +#define SHMMIN 1			 /* min shared seg size (bytes) */ +#define SHMMNI 4096			 /* max num of segs system wide */ +#ifndef __KERNEL__ +#define SHMALL (SHMMAX/getpagesize()*(SHMMNI/16)) +#endif +#define SHMSEG SHMMNI			 /* max shared segs per process */ + + +/* Obsolete, used only for backwards compatibility and libc5 compiles */ +struct shmid_ds { +	struct ipc_perm		shm_perm;	/* operation perms */ +	int			shm_segsz;	/* size of segment (bytes) */ +	__kernel_time_t		shm_atime;	/* last attach time */ +	__kernel_time_t		shm_dtime;	/* last detach time */ +	__kernel_time_t		shm_ctime;	/* last change time */ +	__kernel_ipc_pid_t	shm_cpid;	/* pid of creator */ +	__kernel_ipc_pid_t	shm_lpid;	/* pid of last operator */ +	unsigned short		shm_nattch;	/* no. of current attaches */ +	unsigned short 		shm_unused;	/* compatibility */ +	void 			*shm_unused2;	/* ditto - used by DIPC */ +	void			*shm_unused3;	/* unused */ +}; + +/* Include the definition of shmid64_ds and shminfo64 */ +#include <asm/shmbuf.h> + +/* permission flag for shmget */ +#define SHM_R		0400	/* or S_IRUGO from <linux/stat.h> */ +#define SHM_W		0200	/* or S_IWUGO from <linux/stat.h> */ + +/* mode for attach */ +#define	SHM_RDONLY	010000	/* read-only access */ +#define	SHM_RND		020000	/* round attach address to SHMLBA boundary */ +#define	SHM_REMAP	040000	/* take-over region on attach */ +#define	SHM_EXEC	0100000	/* execution access */ + +/* super user shmctl commands */ +#define SHM_LOCK 	11 +#define SHM_UNLOCK 	12 + +/* ipcs ctl commands */ +#define SHM_STAT 	13 +#define SHM_INFO 	14 + +/* Obsolete, used only for backwards compatibility */ +struct	shminfo { +	int shmmax; +	int shmmin; +	int shmmni; +	int shmseg; +	int shmall; +}; + +struct shm_info { +	int used_ids; +	unsigned long shm_tot;	/* total allocated shm */ +	unsigned long shm_rss;	/* total resident shm */ +	unsigned long shm_swp;	/* total swapped shm */ +	unsigned long swap_attempts; +	unsigned long swap_successes; +}; + + +#endif /* _UAPI_LINUX_SHM_H_ */ diff --git a/include/uapi/linux/signal.h b/include/uapi/linux/signal.h new file mode 100644 index 00000000000..dff452ed6d0 --- /dev/null +++ b/include/uapi/linux/signal.h @@ -0,0 +1,8 @@ +#ifndef _UAPI_LINUX_SIGNAL_H +#define _UAPI_LINUX_SIGNAL_H + +#include <asm/signal.h> +#include <asm/siginfo.h> + + +#endif /* _UAPI_LINUX_SIGNAL_H */ diff --git a/include/uapi/linux/signalfd.h b/include/uapi/linux/signalfd.h new file mode 100644 index 00000000000..492c6def340 --- /dev/null +++ b/include/uapi/linux/signalfd.h @@ -0,0 +1,52 @@ +/* + *  include/linux/signalfd.h + * + *  Copyright (C) 2007  Davide Libenzi <davidel@xmailserver.org> + * + */ + +#ifndef _UAPI_LINUX_SIGNALFD_H +#define _UAPI_LINUX_SIGNALFD_H + +#include <linux/types.h> +/* For O_CLOEXEC and O_NONBLOCK */ +#include <linux/fcntl.h> + +/* Flags for signalfd4.  */ +#define SFD_CLOEXEC O_CLOEXEC +#define SFD_NONBLOCK O_NONBLOCK + +struct signalfd_siginfo { +	__u32 ssi_signo; +	__s32 ssi_errno; +	__s32 ssi_code; +	__u32 ssi_pid; +	__u32 ssi_uid; +	__s32 ssi_fd; +	__u32 ssi_tid; +	__u32 ssi_band; +	__u32 ssi_overrun; +	__u32 ssi_trapno; +	__s32 ssi_status; +	__s32 ssi_int; +	__u64 ssi_ptr; +	__u64 ssi_utime; +	__u64 ssi_stime; +	__u64 ssi_addr; +	__u16 ssi_addr_lsb; + +	/* +	 * Pad strcture to 128 bytes. Remember to update the +	 * pad size when you add new members. We use a fixed +	 * size structure to avoid compatibility problems with +	 * future versions, and we leave extra space for additional +	 * members. We use fixed size members because this strcture +	 * comes out of a read(2) and we really don't want to have +	 * a compat on read(2). +	 */ +	__u8 __pad[46]; +}; + + + +#endif /* _UAPI_LINUX_SIGNALFD_H */ diff --git a/include/uapi/linux/snmp.h b/include/uapi/linux/snmp.h new file mode 100644 index 00000000000..fdfba235f9f --- /dev/null +++ b/include/uapi/linux/snmp.h @@ -0,0 +1,284 @@ +/* + * Definitions for MIBs + * + * Author: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org> + */ + +#ifndef _LINUX_SNMP_H +#define _LINUX_SNMP_H + +/* ipstats mib definitions */ +/* + * RFC 1213:  MIB-II + * RFC 2011 (updates 1213):  SNMPv2-MIB-IP + * RFC 2863:  Interfaces Group MIB + * RFC 2465:  IPv6 MIB: General Group + * draft-ietf-ipv6-rfc2011-update-10.txt: MIB for IP: IP Statistics Tables + */ +enum +{ +	IPSTATS_MIB_NUM = 0, +/* frequently written fields in fast path, kept in same cache line */ +	IPSTATS_MIB_INPKTS,			/* InReceives */ +	IPSTATS_MIB_INOCTETS,			/* InOctets */ +	IPSTATS_MIB_INDELIVERS,			/* InDelivers */ +	IPSTATS_MIB_OUTFORWDATAGRAMS,		/* OutForwDatagrams */ +	IPSTATS_MIB_OUTPKTS,			/* OutRequests */ +	IPSTATS_MIB_OUTOCTETS,			/* OutOctets */ +/* other fields */ +	IPSTATS_MIB_INHDRERRORS,		/* InHdrErrors */ +	IPSTATS_MIB_INTOOBIGERRORS,		/* InTooBigErrors */ +	IPSTATS_MIB_INNOROUTES,			/* InNoRoutes */ +	IPSTATS_MIB_INADDRERRORS,		/* InAddrErrors */ +	IPSTATS_MIB_INUNKNOWNPROTOS,		/* InUnknownProtos */ +	IPSTATS_MIB_INTRUNCATEDPKTS,		/* InTruncatedPkts */ +	IPSTATS_MIB_INDISCARDS,			/* InDiscards */ +	IPSTATS_MIB_OUTDISCARDS,		/* OutDiscards */ +	IPSTATS_MIB_OUTNOROUTES,		/* OutNoRoutes */ +	IPSTATS_MIB_REASMTIMEOUT,		/* ReasmTimeout */ +	IPSTATS_MIB_REASMREQDS,			/* ReasmReqds */ +	IPSTATS_MIB_REASMOKS,			/* ReasmOKs */ +	IPSTATS_MIB_REASMFAILS,			/* ReasmFails */ +	IPSTATS_MIB_FRAGOKS,			/* FragOKs */ +	IPSTATS_MIB_FRAGFAILS,			/* FragFails */ +	IPSTATS_MIB_FRAGCREATES,		/* FragCreates */ +	IPSTATS_MIB_INMCASTPKTS,		/* InMcastPkts */ +	IPSTATS_MIB_OUTMCASTPKTS,		/* OutMcastPkts */ +	IPSTATS_MIB_INBCASTPKTS,		/* InBcastPkts */ +	IPSTATS_MIB_OUTBCASTPKTS,		/* OutBcastPkts */ +	IPSTATS_MIB_INMCASTOCTETS,		/* InMcastOctets */ +	IPSTATS_MIB_OUTMCASTOCTETS,		/* OutMcastOctets */ +	IPSTATS_MIB_INBCASTOCTETS,		/* InBcastOctets */ +	IPSTATS_MIB_OUTBCASTOCTETS,		/* OutBcastOctets */ +	__IPSTATS_MIB_MAX +}; + +/* icmp mib definitions */ +/* + * RFC 1213:  MIB-II ICMP Group + * RFC 2011 (updates 1213):  SNMPv2 MIB for IP: ICMP group + */ +enum +{ +	ICMP_MIB_NUM = 0, +	ICMP_MIB_INMSGS,			/* InMsgs */ +	ICMP_MIB_INERRORS,			/* InErrors */ +	ICMP_MIB_INDESTUNREACHS,		/* InDestUnreachs */ +	ICMP_MIB_INTIMEEXCDS,			/* InTimeExcds */ +	ICMP_MIB_INPARMPROBS,			/* InParmProbs */ +	ICMP_MIB_INSRCQUENCHS,			/* InSrcQuenchs */ +	ICMP_MIB_INREDIRECTS,			/* InRedirects */ +	ICMP_MIB_INECHOS,			/* InEchos */ +	ICMP_MIB_INECHOREPS,			/* InEchoReps */ +	ICMP_MIB_INTIMESTAMPS,			/* InTimestamps */ +	ICMP_MIB_INTIMESTAMPREPS,		/* InTimestampReps */ +	ICMP_MIB_INADDRMASKS,			/* InAddrMasks */ +	ICMP_MIB_INADDRMASKREPS,		/* InAddrMaskReps */ +	ICMP_MIB_OUTMSGS,			/* OutMsgs */ +	ICMP_MIB_OUTERRORS,			/* OutErrors */ +	ICMP_MIB_OUTDESTUNREACHS,		/* OutDestUnreachs */ +	ICMP_MIB_OUTTIMEEXCDS,			/* OutTimeExcds */ +	ICMP_MIB_OUTPARMPROBS,			/* OutParmProbs */ +	ICMP_MIB_OUTSRCQUENCHS,			/* OutSrcQuenchs */ +	ICMP_MIB_OUTREDIRECTS,			/* OutRedirects */ +	ICMP_MIB_OUTECHOS,			/* OutEchos */ +	ICMP_MIB_OUTECHOREPS,			/* OutEchoReps */ +	ICMP_MIB_OUTTIMESTAMPS,			/* OutTimestamps */ +	ICMP_MIB_OUTTIMESTAMPREPS,		/* OutTimestampReps */ +	ICMP_MIB_OUTADDRMASKS,			/* OutAddrMasks */ +	ICMP_MIB_OUTADDRMASKREPS,		/* OutAddrMaskReps */ +	__ICMP_MIB_MAX +}; + +#define __ICMPMSG_MIB_MAX 512	/* Out+In for all 8-bit ICMP types */ + +/* icmp6 mib definitions */ +/* + * RFC 2466:  ICMPv6-MIB + */ +enum +{ +	ICMP6_MIB_NUM = 0, +	ICMP6_MIB_INMSGS,			/* InMsgs */ +	ICMP6_MIB_INERRORS,			/* InErrors */ +	ICMP6_MIB_OUTMSGS,			/* OutMsgs */ +	ICMP6_MIB_OUTERRORS,			/* OutErrors */ +	__ICMP6_MIB_MAX +}; + +#define __ICMP6MSG_MIB_MAX 512 /* Out+In for all 8-bit ICMPv6 types */ + +/* tcp mib definitions */ +/* + * RFC 1213:  MIB-II TCP group + * RFC 2012 (updates 1213):  SNMPv2-MIB-TCP + */ +enum +{ +	TCP_MIB_NUM = 0, +	TCP_MIB_RTOALGORITHM,			/* RtoAlgorithm */ +	TCP_MIB_RTOMIN,				/* RtoMin */ +	TCP_MIB_RTOMAX,				/* RtoMax */ +	TCP_MIB_MAXCONN,			/* MaxConn */ +	TCP_MIB_ACTIVEOPENS,			/* ActiveOpens */ +	TCP_MIB_PASSIVEOPENS,			/* PassiveOpens */ +	TCP_MIB_ATTEMPTFAILS,			/* AttemptFails */ +	TCP_MIB_ESTABRESETS,			/* EstabResets */ +	TCP_MIB_CURRESTAB,			/* CurrEstab */ +	TCP_MIB_INSEGS,				/* InSegs */ +	TCP_MIB_OUTSEGS,			/* OutSegs */ +	TCP_MIB_RETRANSSEGS,			/* RetransSegs */ +	TCP_MIB_INERRS,				/* InErrs */ +	TCP_MIB_OUTRSTS,			/* OutRsts */ +	__TCP_MIB_MAX +}; + +/* udp mib definitions */ +/* + * RFC 1213:  MIB-II UDP group + * RFC 2013 (updates 1213):  SNMPv2-MIB-UDP + */ +enum +{ +	UDP_MIB_NUM = 0, +	UDP_MIB_INDATAGRAMS,			/* InDatagrams */ +	UDP_MIB_NOPORTS,			/* NoPorts */ +	UDP_MIB_INERRORS,			/* InErrors */ +	UDP_MIB_OUTDATAGRAMS,			/* OutDatagrams */ +	UDP_MIB_RCVBUFERRORS,			/* RcvbufErrors */ +	UDP_MIB_SNDBUFERRORS,			/* SndbufErrors */ +	__UDP_MIB_MAX +}; + +/* linux mib definitions */ +enum +{ +	LINUX_MIB_NUM = 0, +	LINUX_MIB_SYNCOOKIESSENT,		/* SyncookiesSent */ +	LINUX_MIB_SYNCOOKIESRECV,		/* SyncookiesRecv */ +	LINUX_MIB_SYNCOOKIESFAILED,		/* SyncookiesFailed */ +	LINUX_MIB_EMBRYONICRSTS,		/* EmbryonicRsts */ +	LINUX_MIB_PRUNECALLED,			/* PruneCalled */ +	LINUX_MIB_RCVPRUNED,			/* RcvPruned */ +	LINUX_MIB_OFOPRUNED,			/* OfoPruned */ +	LINUX_MIB_OUTOFWINDOWICMPS,		/* OutOfWindowIcmps */ +	LINUX_MIB_LOCKDROPPEDICMPS,		/* LockDroppedIcmps */ +	LINUX_MIB_ARPFILTER,			/* ArpFilter */ +	LINUX_MIB_TIMEWAITED,			/* TimeWaited */ +	LINUX_MIB_TIMEWAITRECYCLED,		/* TimeWaitRecycled */ +	LINUX_MIB_TIMEWAITKILLED,		/* TimeWaitKilled */ +	LINUX_MIB_PAWSPASSIVEREJECTED,		/* PAWSPassiveRejected */ +	LINUX_MIB_PAWSACTIVEREJECTED,		/* PAWSActiveRejected */ +	LINUX_MIB_PAWSESTABREJECTED,		/* PAWSEstabRejected */ +	LINUX_MIB_DELAYEDACKS,			/* DelayedACKs */ +	LINUX_MIB_DELAYEDACKLOCKED,		/* DelayedACKLocked */ +	LINUX_MIB_DELAYEDACKLOST,		/* DelayedACKLost */ +	LINUX_MIB_LISTENOVERFLOWS,		/* ListenOverflows */ +	LINUX_MIB_LISTENDROPS,			/* ListenDrops */ +	LINUX_MIB_TCPPREQUEUED,			/* TCPPrequeued */ +	LINUX_MIB_TCPDIRECTCOPYFROMBACKLOG,	/* TCPDirectCopyFromBacklog */ +	LINUX_MIB_TCPDIRECTCOPYFROMPREQUEUE,	/* TCPDirectCopyFromPrequeue */ +	LINUX_MIB_TCPPREQUEUEDROPPED,		/* TCPPrequeueDropped */ +	LINUX_MIB_TCPHPHITS,			/* TCPHPHits */ +	LINUX_MIB_TCPHPHITSTOUSER,		/* TCPHPHitsToUser */ +	LINUX_MIB_TCPPUREACKS,			/* TCPPureAcks */ +	LINUX_MIB_TCPHPACKS,			/* TCPHPAcks */ +	LINUX_MIB_TCPRENORECOVERY,		/* TCPRenoRecovery */ +	LINUX_MIB_TCPSACKRECOVERY,		/* TCPSackRecovery */ +	LINUX_MIB_TCPSACKRENEGING,		/* TCPSACKReneging */ +	LINUX_MIB_TCPFACKREORDER,		/* TCPFACKReorder */ +	LINUX_MIB_TCPSACKREORDER,		/* TCPSACKReorder */ +	LINUX_MIB_TCPRENOREORDER,		/* TCPRenoReorder */ +	LINUX_MIB_TCPTSREORDER,			/* TCPTSReorder */ +	LINUX_MIB_TCPFULLUNDO,			/* TCPFullUndo */ +	LINUX_MIB_TCPPARTIALUNDO,		/* TCPPartialUndo */ +	LINUX_MIB_TCPDSACKUNDO,			/* TCPDSACKUndo */ +	LINUX_MIB_TCPLOSSUNDO,			/* TCPLossUndo */ +	LINUX_MIB_TCPLOSTRETRANSMIT,		/* TCPLostRetransmit */ +	LINUX_MIB_TCPRENOFAILURES,		/* TCPRenoFailures */ +	LINUX_MIB_TCPSACKFAILURES,		/* TCPSackFailures */ +	LINUX_MIB_TCPLOSSFAILURES,		/* TCPLossFailures */ +	LINUX_MIB_TCPFASTRETRANS,		/* TCPFastRetrans */ +	LINUX_MIB_TCPFORWARDRETRANS,		/* TCPForwardRetrans */ +	LINUX_MIB_TCPSLOWSTARTRETRANS,		/* TCPSlowStartRetrans */ +	LINUX_MIB_TCPTIMEOUTS,			/* TCPTimeouts */ +	LINUX_MIB_TCPRENORECOVERYFAIL,		/* TCPRenoRecoveryFail */ +	LINUX_MIB_TCPSACKRECOVERYFAIL,		/* TCPSackRecoveryFail */ +	LINUX_MIB_TCPSCHEDULERFAILED,		/* TCPSchedulerFailed */ +	LINUX_MIB_TCPRCVCOLLAPSED,		/* TCPRcvCollapsed */ +	LINUX_MIB_TCPDSACKOLDSENT,		/* TCPDSACKOldSent */ +	LINUX_MIB_TCPDSACKOFOSENT,		/* TCPDSACKOfoSent */ +	LINUX_MIB_TCPDSACKRECV,			/* TCPDSACKRecv */ +	LINUX_MIB_TCPDSACKOFORECV,		/* TCPDSACKOfoRecv */ +	LINUX_MIB_TCPABORTONDATA,		/* TCPAbortOnData */ +	LINUX_MIB_TCPABORTONCLOSE,		/* TCPAbortOnClose */ +	LINUX_MIB_TCPABORTONMEMORY,		/* TCPAbortOnMemory */ +	LINUX_MIB_TCPABORTONTIMEOUT,		/* TCPAbortOnTimeout */ +	LINUX_MIB_TCPABORTONLINGER,		/* TCPAbortOnLinger */ +	LINUX_MIB_TCPABORTFAILED,		/* TCPAbortFailed */ +	LINUX_MIB_TCPMEMORYPRESSURES,		/* TCPMemoryPressures */ +	LINUX_MIB_TCPSACKDISCARD,		/* TCPSACKDiscard */ +	LINUX_MIB_TCPDSACKIGNOREDOLD,		/* TCPSACKIgnoredOld */ +	LINUX_MIB_TCPDSACKIGNOREDNOUNDO,	/* TCPSACKIgnoredNoUndo */ +	LINUX_MIB_TCPSPURIOUSRTOS,		/* TCPSpuriousRTOs */ +	LINUX_MIB_TCPMD5NOTFOUND,		/* TCPMD5NotFound */ +	LINUX_MIB_TCPMD5UNEXPECTED,		/* TCPMD5Unexpected */ +	LINUX_MIB_SACKSHIFTED, +	LINUX_MIB_SACKMERGED, +	LINUX_MIB_SACKSHIFTFALLBACK, +	LINUX_MIB_TCPBACKLOGDROP, +	LINUX_MIB_TCPMINTTLDROP, /* RFC 5082 */ +	LINUX_MIB_TCPDEFERACCEPTDROP, +	LINUX_MIB_IPRPFILTER, /* IP Reverse Path Filter (rp_filter) */ +	LINUX_MIB_TCPTIMEWAITOVERFLOW,		/* TCPTimeWaitOverflow */ +	LINUX_MIB_TCPREQQFULLDOCOOKIES,		/* TCPReqQFullDoCookies */ +	LINUX_MIB_TCPREQQFULLDROP,		/* TCPReqQFullDrop */ +	LINUX_MIB_TCPRETRANSFAIL,		/* TCPRetransFail */ +	LINUX_MIB_TCPRCVCOALESCE,		/* TCPRcvCoalesce */ +	LINUX_MIB_TCPOFOQUEUE,			/* TCPOFOQueue */ +	LINUX_MIB_TCPOFODROP,			/* TCPOFODrop */ +	LINUX_MIB_TCPOFOMERGE,			/* TCPOFOMerge */ +	LINUX_MIB_TCPCHALLENGEACK,		/* TCPChallengeACK */ +	LINUX_MIB_TCPSYNCHALLENGE,		/* TCPSYNChallenge */ +	LINUX_MIB_TCPFASTOPENACTIVE,		/* TCPFastOpenActive */ +	LINUX_MIB_TCPFASTOPENPASSIVE,		/* TCPFastOpenPassive*/ +	LINUX_MIB_TCPFASTOPENPASSIVEFAIL,	/* TCPFastOpenPassiveFail */ +	LINUX_MIB_TCPFASTOPENLISTENOVERFLOW,	/* TCPFastOpenListenOverflow */ +	LINUX_MIB_TCPFASTOPENCOOKIEREQD,	/* TCPFastOpenCookieReqd */ +	__LINUX_MIB_MAX +}; + +/* linux Xfrm mib definitions */ +enum +{ +	LINUX_MIB_XFRMNUM = 0, +	LINUX_MIB_XFRMINERROR,			/* XfrmInError */ +	LINUX_MIB_XFRMINBUFFERERROR,		/* XfrmInBufferError */ +	LINUX_MIB_XFRMINHDRERROR,		/* XfrmInHdrError */ +	LINUX_MIB_XFRMINNOSTATES,		/* XfrmInNoStates */ +	LINUX_MIB_XFRMINSTATEPROTOERROR,	/* XfrmInStateProtoError */ +	LINUX_MIB_XFRMINSTATEMODEERROR,		/* XfrmInStateModeError */ +	LINUX_MIB_XFRMINSTATESEQERROR,		/* XfrmInStateSeqError */ +	LINUX_MIB_XFRMINSTATEEXPIRED,		/* XfrmInStateExpired */ +	LINUX_MIB_XFRMINSTATEMISMATCH,		/* XfrmInStateMismatch */ +	LINUX_MIB_XFRMINSTATEINVALID,		/* XfrmInStateInvalid */ +	LINUX_MIB_XFRMINTMPLMISMATCH,		/* XfrmInTmplMismatch */ +	LINUX_MIB_XFRMINNOPOLS,			/* XfrmInNoPols */ +	LINUX_MIB_XFRMINPOLBLOCK,		/* XfrmInPolBlock */ +	LINUX_MIB_XFRMINPOLERROR,		/* XfrmInPolError */ +	LINUX_MIB_XFRMOUTERROR,			/* XfrmOutError */ +	LINUX_MIB_XFRMOUTBUNDLEGENERROR,	/* XfrmOutBundleGenError */ +	LINUX_MIB_XFRMOUTBUNDLECHECKERROR,	/* XfrmOutBundleCheckError */ +	LINUX_MIB_XFRMOUTNOSTATES,		/* XfrmOutNoStates */ +	LINUX_MIB_XFRMOUTSTATEPROTOERROR,	/* XfrmOutStateProtoError */ +	LINUX_MIB_XFRMOUTSTATEMODEERROR,	/* XfrmOutStateModeError */ +	LINUX_MIB_XFRMOUTSTATESEQERROR,		/* XfrmOutStateSeqError */ +	LINUX_MIB_XFRMOUTSTATEEXPIRED,		/* XfrmOutStateExpired */ +	LINUX_MIB_XFRMOUTPOLBLOCK,		/* XfrmOutPolBlock */ +	LINUX_MIB_XFRMOUTPOLDEAD,		/* XfrmOutPolDead */ +	LINUX_MIB_XFRMOUTPOLERROR,		/* XfrmOutPolError */ +	LINUX_MIB_XFRMFWDHDRERROR,		/* XfrmFwdHdrError*/ +	__LINUX_MIB_XFRMMAX +}; + +#endif	/* _LINUX_SNMP_H */ diff --git a/include/uapi/linux/sock_diag.h b/include/uapi/linux/sock_diag.h new file mode 100644 index 00000000000..b00e29efb16 --- /dev/null +++ b/include/uapi/linux/sock_diag.h @@ -0,0 +1,26 @@ +#ifndef _UAPI__SOCK_DIAG_H__ +#define _UAPI__SOCK_DIAG_H__ + +#include <linux/types.h> + +#define SOCK_DIAG_BY_FAMILY 20 + +struct sock_diag_req { +	__u8	sdiag_family; +	__u8	sdiag_protocol; +}; + +enum { +	SK_MEMINFO_RMEM_ALLOC, +	SK_MEMINFO_RCVBUF, +	SK_MEMINFO_WMEM_ALLOC, +	SK_MEMINFO_SNDBUF, +	SK_MEMINFO_FWD_ALLOC, +	SK_MEMINFO_WMEM_QUEUED, +	SK_MEMINFO_OPTMEM, +	SK_MEMINFO_BACKLOG, + +	SK_MEMINFO_VARS, +}; + +#endif /* _UAPI__SOCK_DIAG_H__ */ diff --git a/include/uapi/linux/socket.h b/include/uapi/linux/socket.h new file mode 100644 index 00000000000..76ab0c68561 --- /dev/null +++ b/include/uapi/linux/socket.h @@ -0,0 +1,21 @@ +#ifndef _UAPI_LINUX_SOCKET_H +#define _UAPI_LINUX_SOCKET_H + +/* + * Desired design of maximum size and alignment (see RFC2553) + */ +#define _K_SS_MAXSIZE	128	/* Implementation specific max size */ +#define _K_SS_ALIGNSIZE	(__alignof__ (struct sockaddr *)) +				/* Implementation specific desired alignment */ + +typedef unsigned short __kernel_sa_family_t; + +struct __kernel_sockaddr_storage { +	__kernel_sa_family_t	ss_family;		/* address family */ +	/* Following field(s) are implementation specific */ +	char		__data[_K_SS_MAXSIZE - sizeof(unsigned short)]; +				/* space to achieve desired size, */ +				/* _SS_MAXSIZE value minus size of ss_family */ +} __attribute__ ((aligned(_K_SS_ALIGNSIZE)));	/* force desired alignment */ + +#endif /* _UAPI_LINUX_SOCKET_H */ diff --git a/include/uapi/linux/sockios.h b/include/uapi/linux/sockios.h new file mode 100644 index 00000000000..7997a506ad4 --- /dev/null +++ b/include/uapi/linux/sockios.h @@ -0,0 +1,148 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the  BSD Socket + *		interface as the means of communication with the user level. + * + *		Definitions of the socket-level I/O control calls. + * + * Version:	@(#)sockios.h	1.0.2	03/09/93 + * + * Authors:	Ross Biro + *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + * + *		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. + */ +#ifndef _LINUX_SOCKIOS_H +#define _LINUX_SOCKIOS_H + +#include <asm/sockios.h> + +/* Linux-specific socket ioctls */ +#define SIOCINQ		FIONREAD +#define SIOCOUTQ	TIOCOUTQ        /* output queue size (not sent + not acked) */ + +/* Routing table calls. */ +#define SIOCADDRT	0x890B		/* add routing table entry	*/ +#define SIOCDELRT	0x890C		/* delete routing table entry	*/ +#define SIOCRTMSG	0x890D		/* call to routing system	*/ + +/* Socket configuration controls. */ +#define SIOCGIFNAME	0x8910		/* get iface name		*/ +#define SIOCSIFLINK	0x8911		/* set iface channel		*/ +#define SIOCGIFCONF	0x8912		/* get iface list		*/ +#define SIOCGIFFLAGS	0x8913		/* get flags			*/ +#define SIOCSIFFLAGS	0x8914		/* set flags			*/ +#define SIOCGIFADDR	0x8915		/* get PA address		*/ +#define SIOCSIFADDR	0x8916		/* set PA address		*/ +#define SIOCGIFDSTADDR	0x8917		/* get remote PA address	*/ +#define SIOCSIFDSTADDR	0x8918		/* set remote PA address	*/ +#define SIOCGIFBRDADDR	0x8919		/* get broadcast PA address	*/ +#define SIOCSIFBRDADDR	0x891a		/* set broadcast PA address	*/ +#define SIOCGIFNETMASK	0x891b		/* get network PA mask		*/ +#define SIOCSIFNETMASK	0x891c		/* set network PA mask		*/ +#define SIOCGIFMETRIC	0x891d		/* get metric			*/ +#define SIOCSIFMETRIC	0x891e		/* set metric			*/ +#define SIOCGIFMEM	0x891f		/* get memory address (BSD)	*/ +#define SIOCSIFMEM	0x8920		/* set memory address (BSD)	*/ +#define SIOCGIFMTU	0x8921		/* get MTU size			*/ +#define SIOCSIFMTU	0x8922		/* set MTU size			*/ +#define SIOCSIFNAME	0x8923		/* set interface name */ +#define	SIOCSIFHWADDR	0x8924		/* set hardware address 	*/ +#define SIOCGIFENCAP	0x8925		/* get/set encapsulations       */ +#define SIOCSIFENCAP	0x8926		 +#define SIOCGIFHWADDR	0x8927		/* Get hardware address		*/ +#define SIOCGIFSLAVE	0x8929		/* Driver slaving support	*/ +#define SIOCSIFSLAVE	0x8930 +#define SIOCADDMULTI	0x8931		/* Multicast address lists	*/ +#define SIOCDELMULTI	0x8932 +#define SIOCGIFINDEX	0x8933		/* name -> if_index mapping	*/ +#define SIOGIFINDEX	SIOCGIFINDEX	/* misprint compatibility :-)	*/ +#define SIOCSIFPFLAGS	0x8934		/* set/get extended flags set	*/ +#define SIOCGIFPFLAGS	0x8935 +#define SIOCDIFADDR	0x8936		/* delete PA address		*/ +#define	SIOCSIFHWBROADCAST	0x8937	/* set hardware broadcast addr	*/ +#define SIOCGIFCOUNT	0x8938		/* get number of devices */ + +#define SIOCGIFBR	0x8940		/* Bridging support		*/ +#define SIOCSIFBR	0x8941		/* Set bridging options 	*/ + +#define SIOCGIFTXQLEN	0x8942		/* Get the tx queue length	*/ +#define SIOCSIFTXQLEN	0x8943		/* Set the tx queue length 	*/ + +/* SIOCGIFDIVERT was:	0x8944		Frame diversion support */ +/* SIOCSIFDIVERT was:	0x8945		Set frame diversion options */ + +#define SIOCETHTOOL	0x8946		/* Ethtool interface		*/ + +#define SIOCGMIIPHY	0x8947		/* Get address of MII PHY in use. */ +#define SIOCGMIIREG	0x8948		/* Read MII PHY register.	*/ +#define SIOCSMIIREG	0x8949		/* Write MII PHY register.	*/ + +#define SIOCWANDEV	0x894A		/* get/set netdev parameters	*/ + +#define SIOCOUTQNSD	0x894B		/* output queue size (not sent only) */ + +/* ARP cache control calls. */ +		    /*  0x8950 - 0x8952  * obsolete calls, don't re-use */ +#define SIOCDARP	0x8953		/* delete ARP table entry	*/ +#define SIOCGARP	0x8954		/* get ARP table entry		*/ +#define SIOCSARP	0x8955		/* set ARP table entry		*/ + +/* RARP cache control calls. */ +#define SIOCDRARP	0x8960		/* delete RARP table entry	*/ +#define SIOCGRARP	0x8961		/* get RARP table entry		*/ +#define SIOCSRARP	0x8962		/* set RARP table entry		*/ + +/* Driver configuration calls */ + +#define SIOCGIFMAP	0x8970		/* Get device parameters	*/ +#define SIOCSIFMAP	0x8971		/* Set device parameters	*/ + +/* DLCI configuration calls */ + +#define SIOCADDDLCI	0x8980		/* Create new DLCI device	*/ +#define SIOCDELDLCI	0x8981		/* Delete DLCI device		*/ + +#define SIOCGIFVLAN	0x8982		/* 802.1Q VLAN support		*/ +#define SIOCSIFVLAN	0x8983		/* Set 802.1Q VLAN options 	*/ + +/* bonding calls */ + +#define SIOCBONDENSLAVE	0x8990		/* enslave a device to the bond */ +#define SIOCBONDRELEASE 0x8991		/* release a slave from the bond*/ +#define SIOCBONDSETHWADDR      0x8992	/* set the hw addr of the bond  */ +#define SIOCBONDSLAVEINFOQUERY 0x8993   /* rtn info about slave state   */ +#define SIOCBONDINFOQUERY      0x8994	/* rtn info about bond state    */ +#define SIOCBONDCHANGEACTIVE   0x8995   /* update to a new active slave */ +			 +/* bridge calls */ +#define SIOCBRADDBR     0x89a0		/* create new bridge device     */ +#define SIOCBRDELBR     0x89a1		/* remove bridge device         */ +#define SIOCBRADDIF	0x89a2		/* add interface to bridge      */ +#define SIOCBRDELIF	0x89a3		/* remove interface from bridge */ + +/* hardware time stamping: parameters in linux/net_tstamp.h */ +#define SIOCSHWTSTAMP   0x89b0 + +/* Device private ioctl calls */ + +/* + *	These 16 ioctls are available to devices via the do_ioctl() device + *	vector. Each device should include this file and redefine these names + *	as their own. Because these are device dependent it is a good idea + *	_NOT_ to issue them to random objects and hope. + * + *	THESE IOCTLS ARE _DEPRECATED_ AND WILL DISAPPEAR IN 2.5.X -DaveM + */ +  +#define SIOCDEVPRIVATE	0x89F0	/* to 89FF */ + +/* + *	These 16 ioctl calls are protocol private + */ +  +#define SIOCPROTOPRIVATE 0x89E0 /* to 89EF */ +#endif	/* _LINUX_SOCKIOS_H */ diff --git a/include/uapi/linux/som.h b/include/uapi/linux/som.h new file mode 100644 index 00000000000..166594e4e7b --- /dev/null +++ b/include/uapi/linux/som.h @@ -0,0 +1,154 @@ +#ifndef _LINUX_SOM_H +#define _LINUX_SOM_H + +/* File format definition for SOM executables / shared libraries */ + +/* we need struct timespec */ +#include <linux/time.h> + +#define SOM_PAGESIZE 4096 + +/* this is the SOM header */ +struct som_hdr { +	short		system_id;		/* magic number - system */ +	short		a_magic;		/* magic number - file type */ +	unsigned int	version_id;		/* versiod ID: YYMMDDHH */ +	struct timespec	file_time;		/* system clock */ +	unsigned int	entry_space;		/* space for entry point */ +	unsigned int	entry_subspace;		/* subspace for entry point */ +	unsigned int	entry_offset;		/* offset of entry point */ +	unsigned int	aux_header_location;	/* auxiliary header location */ +	unsigned int	aux_header_size;	/* auxiliary header size */ +	unsigned int	som_length;		/* length of entire SOM */ +	unsigned int	presumed_dp;		/* compiler's DP value */ +	unsigned int	space_location;		/* space dictionary location */ +	unsigned int	space_total;		/* number of space entries */ +	unsigned int	subspace_location;	/* subspace entries location */ +	unsigned int	subspace_total;		/* number of subspace entries */ +	unsigned int	loader_fixup_location;	/* MPE/iX loader fixup */ +	unsigned int	loader_fixup_total;	/* number of fixup records */ +	unsigned int	space_strings_location;	/* (sub)space names */ +	unsigned int	space_strings_size;	/* size of strings area */ +	unsigned int	init_array_location;	/* reserved */ +	unsigned int	init_array_total;	/* reserved */ +	unsigned int	compiler_location;	/* module dictionary */ +	unsigned int	compiler_total;		/* number of modules */ +	unsigned int	symbol_location;	/* symbol dictionary */ +	unsigned int	symbol_total;		/* number of symbols */ +	unsigned int	fixup_request_location;	/* fixup requests */ +	unsigned int	fixup_request_total;	/* number of fixup requests */ +	unsigned int	symbol_strings_location;/* module & symbol names area */ +	unsigned int	symbol_strings_size;	/* size of strings area */ +	unsigned int	unloadable_sp_location;	/* unloadable spaces location */ +	unsigned int	unloadable_sp_size;	/* size of data */ +	unsigned int	checksum; +}; + +/* values for system_id */ + +#define SOM_SID_PARISC_1_0	0x020b +#define SOM_SID_PARISC_1_1	0x0210 +#define SOM_SID_PARISC_2_0	0x0214 + +/* values for a_magic */ + +#define SOM_LIB_EXEC		0x0104 +#define SOM_RELOCATABLE		0x0106 +#define SOM_EXEC_NONSHARE	0x0107 +#define SOM_EXEC_SHARE		0x0108 +#define SOM_EXEC_DEMAND		0x010B +#define SOM_LIB_DYN		0x010D +#define SOM_LIB_SHARE		0x010E +#define SOM_LIB_RELOC		0x0619 + +/* values for version_id.  Decimal not hex, yes.  Grr. */ + +#define SOM_ID_OLD		85082112 +#define SOM_ID_NEW		87102412 + +struct aux_id { +	unsigned int	mandatory :1;	/* the linker must understand this */ +	unsigned int	copy	  :1;	/* Must be copied by the linker */ +	unsigned int	append	  :1;	/* Must be merged by the linker */ +	unsigned int	ignore	  :1;	/* Discard section if unknown */ +	unsigned int	reserved  :12; +	unsigned int	type	  :16;	/* Header type */ +	unsigned int	length;		/* length of _following_ data */ +}; + +/* The Exec Auxiliary Header.  Called The HP-UX Header within HP apparently. */ +struct som_exec_auxhdr { +	struct aux_id	som_auxhdr; +	int		exec_tsize;	/* Text size in bytes */ +	int		exec_tmem;	/* Address to load text at */ +	int		exec_tfile;	/* Location of text in file */ +	int		exec_dsize;	/* Data size in bytes */ +	int		exec_dmem;	/* Address to load data at */ +	int		exec_dfile;	/* Location of data in file */ +	int		exec_bsize;	/* Uninitialised data (bss) */ +	int		exec_entry;	/* Address to start executing */ +	int		exec_flags;	/* loader flags */ +	int		exec_bfill;	/* initialisation value for bss */ +}; + +/* Oh, the things people do to avoid casts.  Shame it'll break with gcc's + * new aliasing rules really. + */ +union name_pt { +	char *		n_name; +	unsigned int	n_strx; +}; + +/* The Space Dictionary */ +struct space_dictionary_record { +	union name_pt	name;			/* index to subspace name */ +	unsigned int	is_loadable	:1;	/* loadable */ +	unsigned int	is_defined	:1;	/* defined within file */ +	unsigned int	is_private	:1;	/* not sharable */ +	unsigned int	has_intermediate_code :1; /* contains intermediate code */ +	unsigned int	is_tspecific	:1;	/* thread specific */ +	unsigned int	reserved	:11;	/* for future expansion */ +	unsigned int	sort_key	:8;	/* for linker */ +	unsigned int	reserved2	:8;	/* for future expansion */ + +	int		space_number;		/* index */ +	int		subspace_index;		/* index into subspace dict */ +	unsigned int	subspace_quantity;	/* number of subspaces */ +	int		loader_fix_index;	/* for loader */ +	unsigned int	loader_fix_quantity;	/* for loader */ +	int		init_pointer_index;	/* data pointer array index */ +	unsigned int	init_pointer_quantity;	/* number of data pointers */ +}; + +/* The Subspace Dictionary */ +struct subspace_dictionary_record { +	int		space_index; +	unsigned int	access_control_bits :7; +	unsigned int	memory_resident	:1; +	unsigned int	dup_common	:1; +	unsigned int	is_common	:1; +	unsigned int	quadrant	:2; +	unsigned int	initially_frozen :1; +	unsigned int	is_first	:1; +	unsigned int	code_only	:1; +	unsigned int	sort_key	:8; +	unsigned int	replicate_init	:1; +	unsigned int	continuation	:1; +	unsigned int	is_tspecific	:1; +	unsigned int	is_comdat	:1; +	unsigned int	reserved	:4; + +	int		file_loc_init_value; +	unsigned int	initialization_length; +	unsigned int	subspace_start; +	unsigned int	subspace_length; + +	unsigned int	reserved2	:5; +	unsigned int	alignment	:27; + +	union name_pt	name; +	int		fixup_request_index; +	unsigned int	fixup_request_quantity; +}; + +#endif /* _LINUX_SOM_H */ diff --git a/include/uapi/linux/sonet.h b/include/uapi/linux/sonet.h new file mode 100644 index 00000000000..cc54acee81b --- /dev/null +++ b/include/uapi/linux/sonet.h @@ -0,0 +1,60 @@ +/* sonet.h - SONET/SHD physical layer control */ +  +/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */ +  + +#ifndef _UAPILINUX_SONET_H +#define _UAPILINUX_SONET_H + +#define __SONET_ITEMS \ +    __HANDLE_ITEM(section_bip); 	/* section parity errors (B1) */ \ +    __HANDLE_ITEM(line_bip);		/* line parity errors (B2) */ \ +    __HANDLE_ITEM(path_bip);		/* path parity errors (B3) */ \ +    __HANDLE_ITEM(line_febe);		/* line parity errors at remote */ \ +    __HANDLE_ITEM(path_febe);		/* path parity errors at remote */ \ +    __HANDLE_ITEM(corr_hcs);		/* correctable header errors */ \ +    __HANDLE_ITEM(uncorr_hcs);		/* uncorrectable header errors */ \ +    __HANDLE_ITEM(tx_cells);		/* cells sent */ \ +    __HANDLE_ITEM(rx_cells);		/* cells received */ + +struct sonet_stats { +#define __HANDLE_ITEM(i) int i +	__SONET_ITEMS +#undef __HANDLE_ITEM +} __attribute__ ((packed)); + + +#define SONET_GETSTAT	_IOR('a',ATMIOC_PHYTYP,struct sonet_stats) +					/* get statistics */ +#define SONET_GETSTATZ	_IOR('a',ATMIOC_PHYTYP+1,struct sonet_stats) +					/* ... and zero counters */ +#define SONET_SETDIAG	_IOWR('a',ATMIOC_PHYTYP+2,int) +					/* set error insertion */ +#define SONET_CLRDIAG	_IOWR('a',ATMIOC_PHYTYP+3,int) +					/* clear error insertion */ +#define SONET_GETDIAG	_IOR('a',ATMIOC_PHYTYP+4,int) +					/* query error insertion */ +#define SONET_SETFRAMING _IOW('a',ATMIOC_PHYTYP+5,int) +					/* set framing mode (SONET/SDH) */ +#define SONET_GETFRAMING _IOR('a',ATMIOC_PHYTYP+6,int) +					/* get framing mode */ +#define SONET_GETFRSENSE _IOR('a',ATMIOC_PHYTYP+7, \ +  unsigned char[SONET_FRSENSE_SIZE])	/* get framing sense information */ + +#define SONET_INS_SBIP	  1		/* section BIP */ +#define SONET_INS_LBIP	  2		/* line BIP */ +#define SONET_INS_PBIP	  4		/* path BIP */ +#define SONET_INS_FRAME	  8		/* out of frame */ +#define SONET_INS_LOS	 16		/* set line to zero */ +#define SONET_INS_LAIS	 32		/* line alarm indication signal */ +#define SONET_INS_PAIS	 64		/* path alarm indication signal */ +#define SONET_INS_HCS	128		/* insert HCS error */ + +#define SONET_FRAME_SONET 0		/* SONET STS-3 framing */ +#define SONET_FRAME_SDH   1		/* SDH STM-1 framing */ + +#define SONET_FRSENSE_SIZE 6		/* C1[3],H1[3] (0xff for unknown) */ + + + +#endif /* _UAPILINUX_SONET_H */ diff --git a/include/uapi/linux/sonypi.h b/include/uapi/linux/sonypi.h new file mode 100644 index 00000000000..85078a28357 --- /dev/null +++ b/include/uapi/linux/sonypi.h @@ -0,0 +1,146 @@ +/* + * Sony Programmable I/O Control Device driver for VAIO + * + * Copyright (C) 2001-2005 Stelian Pop <stelian@popies.net> + * + * Copyright (C) 2005 Narayanan R S <nars@kadamba.org> + + * Copyright (C) 2001-2002 Alcôve <www.alcove.com> + * + * Copyright (C) 2001 Michael Ashley <m.ashley@unsw.edu.au> + * + * Copyright (C) 2001 Junichi Morita <jun1m@mars.dti.ne.jp> + * + * Copyright (C) 2000 Takaya Kinjo <t-kinjo@tc4.so-net.ne.jp> + * + * Copyright (C) 2000 Andrew Tridgell <tridge@valinux.com> + * + * Earlier work by Werner Almesberger, Paul `Rusty' Russell and Paul Mackerras. + * + * 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 _UAPI_SONYPI_H_ +#define _UAPI_SONYPI_H_ + +#include <linux/types.h> + +/* events the user application reading /dev/sonypi can use */ + +#define SONYPI_EVENT_IGNORE			 0 +#define SONYPI_EVENT_JOGDIAL_DOWN		 1 +#define SONYPI_EVENT_JOGDIAL_UP			 2 +#define SONYPI_EVENT_JOGDIAL_DOWN_PRESSED	 3 +#define SONYPI_EVENT_JOGDIAL_UP_PRESSED		 4 +#define SONYPI_EVENT_JOGDIAL_PRESSED		 5 +#define SONYPI_EVENT_JOGDIAL_RELEASED		 6	/* obsolete */ +#define SONYPI_EVENT_CAPTURE_PRESSED		 7 +#define SONYPI_EVENT_CAPTURE_RELEASED		 8	/* obsolete */ +#define SONYPI_EVENT_CAPTURE_PARTIALPRESSED	 9 +#define SONYPI_EVENT_CAPTURE_PARTIALRELEASED	10 +#define SONYPI_EVENT_FNKEY_ESC			11 +#define SONYPI_EVENT_FNKEY_F1			12 +#define SONYPI_EVENT_FNKEY_F2			13 +#define SONYPI_EVENT_FNKEY_F3			14 +#define SONYPI_EVENT_FNKEY_F4			15 +#define SONYPI_EVENT_FNKEY_F5			16 +#define SONYPI_EVENT_FNKEY_F6			17 +#define SONYPI_EVENT_FNKEY_F7			18 +#define SONYPI_EVENT_FNKEY_F8			19 +#define SONYPI_EVENT_FNKEY_F9			20 +#define SONYPI_EVENT_FNKEY_F10			21 +#define SONYPI_EVENT_FNKEY_F11			22 +#define SONYPI_EVENT_FNKEY_F12			23 +#define SONYPI_EVENT_FNKEY_1			24 +#define SONYPI_EVENT_FNKEY_2			25 +#define SONYPI_EVENT_FNKEY_D			26 +#define SONYPI_EVENT_FNKEY_E			27 +#define SONYPI_EVENT_FNKEY_F			28 +#define SONYPI_EVENT_FNKEY_S			29 +#define SONYPI_EVENT_FNKEY_B			30 +#define SONYPI_EVENT_BLUETOOTH_PRESSED		31 +#define SONYPI_EVENT_PKEY_P1			32 +#define SONYPI_EVENT_PKEY_P2			33 +#define SONYPI_EVENT_PKEY_P3			34 +#define SONYPI_EVENT_BACK_PRESSED		35 +#define SONYPI_EVENT_LID_CLOSED			36 +#define SONYPI_EVENT_LID_OPENED			37 +#define SONYPI_EVENT_BLUETOOTH_ON		38 +#define SONYPI_EVENT_BLUETOOTH_OFF		39 +#define SONYPI_EVENT_HELP_PRESSED		40 +#define SONYPI_EVENT_FNKEY_ONLY			41 +#define SONYPI_EVENT_JOGDIAL_FAST_DOWN		42 +#define SONYPI_EVENT_JOGDIAL_FAST_UP		43 +#define SONYPI_EVENT_JOGDIAL_FAST_DOWN_PRESSED	44 +#define SONYPI_EVENT_JOGDIAL_FAST_UP_PRESSED	45 +#define SONYPI_EVENT_JOGDIAL_VFAST_DOWN		46 +#define SONYPI_EVENT_JOGDIAL_VFAST_UP		47 +#define SONYPI_EVENT_JOGDIAL_VFAST_DOWN_PRESSED	48 +#define SONYPI_EVENT_JOGDIAL_VFAST_UP_PRESSED	49 +#define SONYPI_EVENT_ZOOM_PRESSED		50 +#define SONYPI_EVENT_THUMBPHRASE_PRESSED	51 +#define SONYPI_EVENT_MEYE_FACE			52 +#define SONYPI_EVENT_MEYE_OPPOSITE		53 +#define SONYPI_EVENT_MEMORYSTICK_INSERT		54 +#define SONYPI_EVENT_MEMORYSTICK_EJECT		55 +#define SONYPI_EVENT_ANYBUTTON_RELEASED		56 +#define SONYPI_EVENT_BATTERY_INSERT		57 +#define SONYPI_EVENT_BATTERY_REMOVE		58 +#define SONYPI_EVENT_FNKEY_RELEASED		59 +#define SONYPI_EVENT_WIRELESS_ON		60 +#define SONYPI_EVENT_WIRELESS_OFF		61 +#define SONYPI_EVENT_ZOOM_IN_PRESSED		62 +#define SONYPI_EVENT_ZOOM_OUT_PRESSED		63 +#define SONYPI_EVENT_CD_EJECT_PRESSED		64 +#define SONYPI_EVENT_MODEKEY_PRESSED		65 +#define SONYPI_EVENT_PKEY_P4			66 +#define SONYPI_EVENT_PKEY_P5			67 +#define SONYPI_EVENT_SETTINGKEY_PRESSED		68 +#define SONYPI_EVENT_VOLUME_INC_PRESSED		69 +#define SONYPI_EVENT_VOLUME_DEC_PRESSED		70 +#define SONYPI_EVENT_BRIGHTNESS_PRESSED		71 +#define SONYPI_EVENT_MEDIA_PRESSED		72 +#define SONYPI_EVENT_VENDOR_PRESSED		73 + +/* get/set brightness */ +#define SONYPI_IOCGBRT		_IOR('v', 0, __u8) +#define SONYPI_IOCSBRT		_IOW('v', 0, __u8) + +/* get battery full capacity/remaining capacity */ +#define SONYPI_IOCGBAT1CAP	_IOR('v', 2, __u16) +#define SONYPI_IOCGBAT1REM	_IOR('v', 3, __u16) +#define SONYPI_IOCGBAT2CAP	_IOR('v', 4, __u16) +#define SONYPI_IOCGBAT2REM	_IOR('v', 5, __u16) + +/* get battery flags: battery1/battery2/ac adapter present */ +#define SONYPI_BFLAGS_B1	0x01 +#define SONYPI_BFLAGS_B2	0x02 +#define SONYPI_BFLAGS_AC	0x04 +#define SONYPI_IOCGBATFLAGS	_IOR('v', 7, __u8) + +/* get/set bluetooth subsystem state on/off */ +#define SONYPI_IOCGBLUE		_IOR('v', 8, __u8) +#define SONYPI_IOCSBLUE		_IOW('v', 9, __u8) + +/* get/set fan state on/off */ +#define SONYPI_IOCGFAN		_IOR('v', 10, __u8) +#define SONYPI_IOCSFAN		_IOW('v', 11, __u8) + +/* get temperature (C) */ +#define SONYPI_IOCGTEMP		_IOR('v', 12, __u8) + + +#endif /* _UAPI_SONYPI_H_ */ diff --git a/include/uapi/linux/sound.h b/include/uapi/linux/sound.h new file mode 100644 index 00000000000..014c9117c22 --- /dev/null +++ b/include/uapi/linux/sound.h @@ -0,0 +1,31 @@ +#ifndef _UAPI_LINUX_SOUND_H +#define _UAPI_LINUX_SOUND_H + +/* + * Minor numbers for the sound driver. + */ + +#include <linux/fs.h> + +#define SND_DEV_CTL		0	/* Control port /dev/mixer */ +#define SND_DEV_SEQ		1	/* Sequencer output /dev/sequencer (FM +						synthesizer and MIDI output) */ +#define SND_DEV_MIDIN		2	/* Raw midi access */ +#define SND_DEV_DSP		3	/* Digitized voice /dev/dsp */ +#define SND_DEV_AUDIO		4	/* Sparc compatible /dev/audio */ +#define SND_DEV_DSP16		5	/* Like /dev/dsp but 16 bits/sample */ +/* #define SND_DEV_STATUS	6 */	/* /dev/sndstat (obsolete) */ +#define SND_DEV_UNUSED		6 +#define SND_DEV_AWFM		7	/* Reserved */ +#define SND_DEV_SEQ2		8	/* /dev/sequencer, level 2 interface */ +/* #define SND_DEV_SNDPROC	9 */	/* /dev/sndproc for programmable devices (not used) */ +/* #define SND_DEV_DMMIDI	9 */ +#define SND_DEV_SYNTH		9	/* Raw synth access /dev/synth (same as /dev/dmfm) */ +#define SND_DEV_DMFM		10	/* Raw synth access /dev/dmfm */ +#define SND_DEV_UNKNOWN11	11 +#define SND_DEV_ADSP		12	/* Like /dev/dsp (obsolete) */ +#define SND_DEV_AMIDI		13	/* Like /dev/midi (obsolete) */ +#define SND_DEV_ADMMIDI		14	/* Like /dev/dmmidi (onsolete) */ + + +#endif /* _UAPI_LINUX_SOUND_H */ diff --git a/include/uapi/linux/soundcard.h b/include/uapi/linux/soundcard.h new file mode 100644 index 00000000000..f3b21f98987 --- /dev/null +++ b/include/uapi/linux/soundcard.h @@ -0,0 +1,1282 @@ +/* + * Copyright by Hannu Savolainen 1993-1997 + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. 2. + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#ifndef _UAPISOUNDCARD_H +#define _UAPISOUNDCARD_H + + +/* + * OSS interface version. With versions earlier than 3.6 this value is + * an integer with value less than 361. In versions 3.6 and later + * it's a six digit hexadecimal value. For example value + * of 0x030600 represents OSS version 3.6.0. + * Use ioctl(fd, OSS_GETVERSION, &int) to get the version number of + * the currently active driver. + */ +#define SOUND_VERSION	0x030802 +#define OPEN_SOUND_SYSTEM + +/* In Linux we need to be prepared for cross compiling */ +#include <linux/ioctl.h> + +/* Endian macros. */ +#ifndef __KERNEL__ +#  include <endian.h> +#endif + +/* + *	Supported card ID numbers (Should be somewhere else?) + */ + +#define SNDCARD_ADLIB		1 +#define SNDCARD_SB		2 +#define SNDCARD_PAS		3 +#define SNDCARD_GUS		4 +#define SNDCARD_MPU401		5 +#define SNDCARD_SB16		6 +#define SNDCARD_SB16MIDI	7 +#define SNDCARD_UART6850	8 +#define SNDCARD_GUS16		9 +#define SNDCARD_MSS		10 +#define SNDCARD_PSS     	11 +#define SNDCARD_SSCAPE		12 +#define SNDCARD_PSS_MPU     	13 +#define SNDCARD_PSS_MSS     	14 +#define SNDCARD_SSCAPE_MSS	15 +#define SNDCARD_TRXPRO		16 +#define SNDCARD_TRXPRO_SB	17 +#define SNDCARD_TRXPRO_MPU	18 +#define SNDCARD_MAD16		19 +#define SNDCARD_MAD16_MPU	20 +#define SNDCARD_CS4232		21 +#define SNDCARD_CS4232_MPU	22 +#define SNDCARD_MAUI		23 +#define SNDCARD_PSEUDO_MSS	24 +#define SNDCARD_GUSPNP		25 +#define SNDCARD_UART401		26 +/* Sound card numbers 27 to N are reserved. Don't add more numbers here. */ + +/*********************************** + * IOCTL Commands for /dev/sequencer + */ + +#ifndef _SIOWR +#if defined(_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__))) +/* Use already defined ioctl defines if they exist (except with Sun or Sparc) */ +#define	SIOCPARM_MASK	IOCPARM_MASK +#define	SIOC_VOID	IOC_VOID +#define	SIOC_OUT	IOC_OUT +#define	SIOC_IN		IOC_IN +#define	SIOC_INOUT	IOC_INOUT +#define _SIOC_SIZE	_IOC_SIZE +#define _SIOC_DIR	_IOC_DIR +#define _SIOC_NONE	_IOC_NONE +#define _SIOC_READ	_IOC_READ +#define _SIOC_WRITE	_IOC_WRITE +#define	_SIO		_IO +#define	_SIOR		_IOR +#define	_SIOW		_IOW +#define	_SIOWR		_IOWR +#else + +/* Ioctl's have the command encoded in the lower word, + * and the size of any in or out parameters in the upper + * word.  The high 2 bits of the upper word are used + * to encode the in/out status of the parameter; for now + * we restrict parameters to at most 8191 bytes. + */ +/* #define	SIOCTYPE		(0xff<<8) */ +#define	SIOCPARM_MASK	0x1fff		/* parameters must be < 8192 bytes */ +#define	SIOC_VOID	0x00000000	/* no parameters */ +#define	SIOC_OUT	0x20000000	/* copy out parameters */ +#define	SIOC_IN		0x40000000	/* copy in parameters */ +#define	SIOC_INOUT	(SIOC_IN|SIOC_OUT) +/* the 0x20000000 is so we can distinguish new ioctl's from old */ +#define	_SIO(x,y)	((int)(SIOC_VOID|(x<<8)|y)) +#define	_SIOR(x,y,t)	((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y)) +#define	_SIOW(x,y,t)	((int)(SIOC_IN|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y)) +/* this should be _SIORW, but stdio got there first */ +#define	_SIOWR(x,y,t)	((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y)) +#define _SIOC_SIZE(x)	((x>>16)&SIOCPARM_MASK)	 +#define _SIOC_DIR(x)	(x & 0xf0000000) +#define _SIOC_NONE	SIOC_VOID +#define _SIOC_READ	SIOC_OUT +#define _SIOC_WRITE	SIOC_IN +#  endif /* _IOWR */ +#endif  /* !_SIOWR */ + +#define SNDCTL_SEQ_RESET		_SIO  ('Q', 0) +#define SNDCTL_SEQ_SYNC			_SIO  ('Q', 1) +#define SNDCTL_SYNTH_INFO		_SIOWR('Q', 2, struct synth_info) +#define SNDCTL_SEQ_CTRLRATE		_SIOWR('Q', 3, int)	/* Set/get timer resolution (HZ) */ +#define SNDCTL_SEQ_GETOUTCOUNT		_SIOR ('Q', 4, int) +#define SNDCTL_SEQ_GETINCOUNT		_SIOR ('Q', 5, int) +#define SNDCTL_SEQ_PERCMODE		_SIOW ('Q', 6, int) +#define SNDCTL_FM_LOAD_INSTR		_SIOW ('Q', 7, struct sbi_instrument)	/* Obsolete. Don't use!!!!!! */ +#define SNDCTL_SEQ_TESTMIDI		_SIOW ('Q', 8, int) +#define SNDCTL_SEQ_RESETSAMPLES		_SIOW ('Q', 9, int) +#define SNDCTL_SEQ_NRSYNTHS		_SIOR ('Q',10, int) +#define SNDCTL_SEQ_NRMIDIS		_SIOR ('Q',11, int) +#define SNDCTL_MIDI_INFO		_SIOWR('Q',12, struct midi_info) +#define SNDCTL_SEQ_THRESHOLD		_SIOW ('Q',13, int) +#define SNDCTL_SYNTH_MEMAVL		_SIOWR('Q',14, int)	/* in=dev#, out=memsize */ +#define SNDCTL_FM_4OP_ENABLE		_SIOW ('Q',15, int)	/* in=dev# */ +#define SNDCTL_SEQ_PANIC		_SIO  ('Q',17) +#define SNDCTL_SEQ_OUTOFBAND		_SIOW ('Q',18, struct seq_event_rec) +#define SNDCTL_SEQ_GETTIME		_SIOR ('Q',19, int) +#define SNDCTL_SYNTH_ID			_SIOWR('Q',20, struct synth_info) +#define SNDCTL_SYNTH_CONTROL		_SIOWR('Q',21, struct synth_control) +#define SNDCTL_SYNTH_REMOVESAMPLE	_SIOWR('Q',22, struct remove_sample) + +typedef struct synth_control +{ +	int devno;	/* Synthesizer # */ +	char data[4000]; /* Device spesific command/data record */ +}synth_control; + +typedef struct remove_sample +{ +	int devno;	/* Synthesizer # */ +	int bankno;	/* MIDI bank # (0=General MIDI) */ +	int instrno;	/* MIDI instrument number */ +} remove_sample; + +typedef struct seq_event_rec { +		unsigned char arr[8]; +} seq_event_rec; + +#define SNDCTL_TMR_TIMEBASE		_SIOWR('T', 1, int) +#define SNDCTL_TMR_START		_SIO  ('T', 2) +#define SNDCTL_TMR_STOP			_SIO  ('T', 3) +#define SNDCTL_TMR_CONTINUE		_SIO  ('T', 4) +#define SNDCTL_TMR_TEMPO		_SIOWR('T', 5, int) +#define SNDCTL_TMR_SOURCE		_SIOWR('T', 6, int) +#	define TMR_INTERNAL		0x00000001 +#	define TMR_EXTERNAL		0x00000002 +#		define TMR_MODE_MIDI	0x00000010 +#		define TMR_MODE_FSK	0x00000020 +#		define TMR_MODE_CLS	0x00000040 +#		define TMR_MODE_SMPTE	0x00000080 +#define SNDCTL_TMR_METRONOME		_SIOW ('T', 7, int) +#define SNDCTL_TMR_SELECT		_SIOW ('T', 8, int) + +/* + * Some big endian/little endian handling macros + */ + +#define _LINUX_PATCHKEY_H_INDIRECT +#include <linux/patchkey.h> +#undef _LINUX_PATCHKEY_H_INDIRECT + +#if !defined(__KERNEL__) +# if defined(__BYTE_ORDER) +#  if __BYTE_ORDER == __BIG_ENDIAN +#    define AFMT_S16_NE AFMT_S16_BE +#  elif __BYTE_ORDER == __LITTLE_ENDIAN +#    define AFMT_S16_NE AFMT_S16_LE +#  else +#    error "could not determine byte order" +#  endif +# endif +#endif + +/* + *	Sample loading mechanism for internal synthesizers (/dev/sequencer) + *	The following patch_info structure has been designed to support + *	Gravis UltraSound. It tries to be universal format for uploading + *	sample based patches but is probably too limited. + * + *      (PBD) As Hannu guessed, the GUS structure is too limited for  + *      the WaveFront, but this is the right place for a constant definition. + */ + +struct patch_info { +		unsigned short key;		/* Use WAVE_PATCH here */ +#define WAVE_PATCH	   _PATCHKEY(0x04) +#define GUS_PATCH	   WAVE_PATCH +#define WAVEFRONT_PATCH    _PATCHKEY(0x06) + +		short device_no;	/* Synthesizer number */ +		short instr_no;		/* Midi pgm# */ + +		unsigned int mode; +/* + * The least significant byte has the same format than the GUS .PAT + * files + */ +#define WAVE_16_BITS	0x01	/* bit 0 = 8 or 16 bit wave data. */ +#define WAVE_UNSIGNED	0x02	/* bit 1 = Signed - Unsigned data. */ +#define WAVE_LOOPING	0x04	/* bit 2 = looping enabled-1. */ +#define WAVE_BIDIR_LOOP	0x08	/* bit 3 = Set is bidirectional looping. */ +#define WAVE_LOOP_BACK	0x10	/* bit 4 = Set is looping backward. */ +#define WAVE_SUSTAIN_ON	0x20	/* bit 5 = Turn sustaining on. (Env. pts. 3)*/ +#define WAVE_ENVELOPES	0x40	/* bit 6 = Enable envelopes - 1 */ +#define WAVE_FAST_RELEASE 0x80	/* bit 7 = Shut off immediately after note off */ +				/* 	(use the env_rate/env_offs fields). */ +/* Linux specific bits */ +#define WAVE_VIBRATO	0x00010000	/* The vibrato info is valid */ +#define WAVE_TREMOLO	0x00020000	/* The tremolo info is valid */ +#define WAVE_SCALE	0x00040000	/* The scaling info is valid */ +#define WAVE_FRACTIONS	0x00080000	/* Fraction information is valid */ +/* Reserved bits */ +#define WAVE_ROM	0x40000000	/* For future use */ +#define WAVE_MULAW	0x20000000	/* For future use */ +/* Other bits must be zeroed */ + +		int len;	/* Size of the wave data in bytes */ +		int loop_start, loop_end; /* Byte offsets from the beginning */ + +/*  + * The base_freq and base_note fields are used when computing the + * playback speed for a note. The base_note defines the tone frequency + * which is heard if the sample is played using the base_freq as the + * playback speed. + * + * The low_note and high_note fields define the minimum and maximum note + * frequencies for which this sample is valid. It is possible to define + * more than one samples for an instrument number at the same time. The + * low_note and high_note fields are used to select the most suitable one. + * + * The fields base_note, high_note and low_note should contain + * the note frequency multiplied by 1000. For example value for the + * middle A is 440*1000. + */ + +		unsigned int base_freq; +		unsigned int base_note; +		unsigned int high_note; +		unsigned int low_note; +		int panning;	/* -128=left, 127=right */ +		int detuning; + +/*	New fields introduced in version 1.99.5	*/ + +       /* Envelope. Enabled by mode bit WAVE_ENVELOPES	*/ +		unsigned char	env_rate[ 6 ];	 /* GUS HW ramping rate */ +		unsigned char	env_offset[ 6 ]; /* 255 == 100% */ + +	/*  +	 * The tremolo, vibrato and scale info are not supported yet. +	 * Enable by setting the mode bits WAVE_TREMOLO, WAVE_VIBRATO or +	 * WAVE_SCALE +	 */ + +		unsigned char	tremolo_sweep; +		unsigned char	tremolo_rate; +		unsigned char	tremolo_depth; +	 +		unsigned char	vibrato_sweep; +		unsigned char	vibrato_rate; +		unsigned char	vibrato_depth; + +		int		scale_frequency; +		unsigned int	scale_factor;		/* from 0 to 2048 or 0 to 2 */ +	 +	        int		volume; +		int		fractions; +		int		reserved1; +	        int		spare[2]; +		char data[1];	/* The waveform data starts here */ +	}; + +struct sysex_info { +		short key;		/* Use SYSEX_PATCH or MAUI_PATCH here */ +#define SYSEX_PATCH	_PATCHKEY(0x05) +#define MAUI_PATCH	_PATCHKEY(0x06) +		short device_no;	/* Synthesizer number */ +		int len;	/* Size of the sysex data in bytes */ +		unsigned char data[1];	/* Sysex data starts here */ +	}; + +/* + * /dev/sequencer input events. + * + * The data written to the /dev/sequencer is a stream of events. Events + * are records of 4 or 8 bytes. The first byte defines the size.  + * Any number of events can be written with a write call. There + * is a set of macros for sending these events. Use these macros if you + * want to maximize portability of your program. + * + * Events SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO. Are also input events. + * (All input events are currently 4 bytes long. Be prepared to support + * 8 byte events also. If you receive any event having first byte >= 128, + * it's a 8 byte event. + * + * The events are documented at the end of this file. + * + * Normal events (4 bytes) + * There is also a 8 byte version of most of the 4 byte events. The + * 8 byte one is recommended. + */ +#define SEQ_NOTEOFF		0 +#define SEQ_FMNOTEOFF		SEQ_NOTEOFF	/* Just old name */ +#define SEQ_NOTEON		1 +#define	SEQ_FMNOTEON		SEQ_NOTEON +#define SEQ_WAIT		TMR_WAIT_ABS +#define SEQ_PGMCHANGE		3 +#define SEQ_FMPGMCHANGE		SEQ_PGMCHANGE +#define SEQ_SYNCTIMER		TMR_START +#define SEQ_MIDIPUTC		5 +#define SEQ_DRUMON		6	/*** OBSOLETE ***/ +#define SEQ_DRUMOFF		7	/*** OBSOLETE ***/ +#define SEQ_ECHO		TMR_ECHO	/* For synching programs with output */ +#define SEQ_AFTERTOUCH		9 +#define SEQ_CONTROLLER		10 + +/******************************************* + *	Midi controller numbers + ******************************************* + * Controllers 0 to 31 (0x00 to 0x1f) and + * 32 to 63 (0x20 to 0x3f) are continuous + * controllers. + * In the MIDI 1.0 these controllers are sent using + * two messages. Controller numbers 0 to 31 are used + * to send the MSB and the controller numbers 32 to 63 + * are for the LSB. Note that just 7 bits are used in MIDI bytes. + */ + +#define	   CTL_BANK_SELECT		0x00 +#define	   CTL_MODWHEEL			0x01 +#define    CTL_BREATH			0x02 +/*		undefined		0x03 */ +#define    CTL_FOOT			0x04 +#define    CTL_PORTAMENTO_TIME		0x05 +#define    CTL_DATA_ENTRY		0x06 +#define    CTL_MAIN_VOLUME		0x07 +#define    CTL_BALANCE			0x08 +/*		undefined		0x09 */ +#define    CTL_PAN			0x0a +#define    CTL_EXPRESSION		0x0b +/*		undefined		0x0c */ +/*		undefined		0x0d */ +/*		undefined		0x0e */ +/*		undefined		0x0f */ +#define    CTL_GENERAL_PURPOSE1	0x10 +#define    CTL_GENERAL_PURPOSE2	0x11 +#define    CTL_GENERAL_PURPOSE3	0x12 +#define    CTL_GENERAL_PURPOSE4	0x13 +/*		undefined		0x14 - 0x1f */ + +/*		undefined		0x20 */ +/* The controller numbers 0x21 to 0x3f are reserved for the */ +/* least significant bytes of the controllers 0x00 to 0x1f. */ +/* These controllers are not recognised by the driver. */ + +/* Controllers 64 to 69 (0x40 to 0x45) are on/off switches. */ +/* 0=OFF and 127=ON (intermediate values are possible) */ +#define    CTL_DAMPER_PEDAL		0x40 +#define    CTL_SUSTAIN			0x40	/* Alias */ +#define    CTL_HOLD			0x40	/* Alias */ +#define    CTL_PORTAMENTO		0x41 +#define    CTL_SOSTENUTO		0x42 +#define    CTL_SOFT_PEDAL		0x43 +/*		undefined		0x44 */ +#define    CTL_HOLD2			0x45 +/*		undefined		0x46 - 0x4f */ + +#define    CTL_GENERAL_PURPOSE5	0x50 +#define    CTL_GENERAL_PURPOSE6	0x51 +#define    CTL_GENERAL_PURPOSE7	0x52 +#define    CTL_GENERAL_PURPOSE8	0x53 +/*		undefined		0x54 - 0x5a */ +#define    CTL_EXT_EFF_DEPTH		0x5b +#define    CTL_TREMOLO_DEPTH		0x5c +#define    CTL_CHORUS_DEPTH		0x5d +#define    CTL_DETUNE_DEPTH		0x5e +#define    CTL_CELESTE_DEPTH		0x5e	/* Alias for the above one */ +#define    CTL_PHASER_DEPTH		0x5f +#define    CTL_DATA_INCREMENT		0x60 +#define    CTL_DATA_DECREMENT		0x61 +#define    CTL_NONREG_PARM_NUM_LSB	0x62 +#define    CTL_NONREG_PARM_NUM_MSB	0x63 +#define    CTL_REGIST_PARM_NUM_LSB	0x64 +#define    CTL_REGIST_PARM_NUM_MSB	0x65 +/*		undefined		0x66 - 0x78 */ +/*		reserved		0x79 - 0x7f */ + +/* Pseudo controllers (not midi compatible) */ +#define    CTRL_PITCH_BENDER		255 +#define    CTRL_PITCH_BENDER_RANGE	254 +#define    CTRL_EXPRESSION		253	/* Obsolete */ +#define    CTRL_MAIN_VOLUME		252	/* Obsolete */ +#define SEQ_BALANCE		11 +#define SEQ_VOLMODE             12 + +/* + * Volume mode decides how volumes are used + */ + +#define VOL_METHOD_ADAGIO	1 +#define VOL_METHOD_LINEAR	2 + +/* + * Note! SEQ_WAIT, SEQ_MIDIPUTC and SEQ_ECHO are used also as + *	 input events. + */ + +/* + * Event codes 0xf0 to 0xfc are reserved for future extensions. + */ + +#define SEQ_FULLSIZE		0xfd	/* Long events */ +/* + *	SEQ_FULLSIZE events are used for loading patches/samples to the + *	synthesizer devices. These events are passed directly to the driver + *	of the associated synthesizer device. There is no limit to the size + *	of the extended events. These events are not queued but executed + *	immediately when the write() is called (execution can take several + *	seconds of time).  + * + *	When a SEQ_FULLSIZE message is written to the device, it must + *	be written using exactly one write() call. Other events cannot + *	be mixed to the same write. + *	 + *	For FM synths (YM3812/OPL3) use struct sbi_instrument and write it to the  + *	/dev/sequencer. Don't write other data together with the instrument structure + *	Set the key field of the structure to FM_PATCH. The device field is used to + *	route the patch to the corresponding device. + * + *	For wave table use struct patch_info. Initialize the key field + *      to WAVE_PATCH. + */ +#define SEQ_PRIVATE		0xfe	/* Low level HW dependent events (8 bytes) */ +#define SEQ_EXTENDED		0xff	/* Extended events (8 bytes) OBSOLETE */ + +/* + * Record for FM patches + */ + +typedef unsigned char sbi_instr_data[32]; + +struct sbi_instrument { +		unsigned short	key;	/* FM_PATCH or OPL3_PATCH */ +#define FM_PATCH	_PATCHKEY(0x01) +#define OPL3_PATCH	_PATCHKEY(0x03) +		short		device;		/*	Synth# (0-4)	*/ +		int 		channel;	/*	Program# to be initialized 	*/ +		sbi_instr_data	operators;	/*	Register settings for operator cells (.SBI format)	*/ +	}; + +struct synth_info {	/* Read only */ +		char	name[30]; +		int	device;		/* 0-N. INITIALIZE BEFORE CALLING */ +		int	synth_type; +#define SYNTH_TYPE_FM			0 +#define SYNTH_TYPE_SAMPLE		1 +#define SYNTH_TYPE_MIDI			2	/* Midi interface */ + +		int	synth_subtype; +#define FM_TYPE_ADLIB			0x00 +#define FM_TYPE_OPL3			0x01 +#define MIDI_TYPE_MPU401		0x401 + +#define SAMPLE_TYPE_BASIC		0x10 +#define SAMPLE_TYPE_GUS			SAMPLE_TYPE_BASIC +#define SAMPLE_TYPE_WAVEFRONT           0x11 + +		int	perc_mode;	/* No longer supported */ +		int	nr_voices; +		int	nr_drums;	/* Obsolete field */ +		int	instr_bank_size; +		unsigned int	capabilities;	 +#define SYNTH_CAP_PERCMODE		0x00000001 /* No longer used */ +#define SYNTH_CAP_OPL3			0x00000002 /* Set if OPL3 supported */ +#define SYNTH_CAP_INPUT			0x00000004 /* Input (MIDI) device */ +		int	dummies[19];	/* Reserve space */ +	}; + +struct sound_timer_info { +		char name[32]; +		int caps; +	}; + +#define MIDI_CAP_MPU401		1		/* MPU-401 intelligent mode */ + +struct midi_info { +		char		name[30]; +		int		device;		/* 0-N. INITIALIZE BEFORE CALLING */ +		unsigned int	capabilities;	/* To be defined later */ +		int		dev_type; +		int		dummies[18];	/* Reserve space */ +	}; + +/******************************************** + * ioctl commands for the /dev/midi## + */ +typedef struct { +		unsigned char cmd; +		char nr_args, nr_returns; +		unsigned char data[30]; +	} mpu_command_rec; + +#define SNDCTL_MIDI_PRETIME		_SIOWR('m', 0, int) +#define SNDCTL_MIDI_MPUMODE		_SIOWR('m', 1, int) +#define SNDCTL_MIDI_MPUCMD		_SIOWR('m', 2, mpu_command_rec) + +/******************************************** + * IOCTL commands for /dev/dsp and /dev/audio + */ + +#define SNDCTL_DSP_RESET		_SIO  ('P', 0) +#define SNDCTL_DSP_SYNC			_SIO  ('P', 1) +#define SNDCTL_DSP_SPEED		_SIOWR('P', 2, int) +#define SNDCTL_DSP_STEREO		_SIOWR('P', 3, int) +#define SNDCTL_DSP_GETBLKSIZE		_SIOWR('P', 4, int) +#define SNDCTL_DSP_SAMPLESIZE		SNDCTL_DSP_SETFMT +#define SNDCTL_DSP_CHANNELS		_SIOWR('P', 6, int) +#define SOUND_PCM_WRITE_CHANNELS	SNDCTL_DSP_CHANNELS +#define SOUND_PCM_WRITE_FILTER		_SIOWR('P', 7, int) +#define SNDCTL_DSP_POST			_SIO  ('P', 8) +#define SNDCTL_DSP_SUBDIVIDE		_SIOWR('P', 9, int) +#define SNDCTL_DSP_SETFRAGMENT		_SIOWR('P',10, int) + +/*	Audio data formats (Note! U8=8 and S16_LE=16 for compatibility) */ +#define SNDCTL_DSP_GETFMTS		_SIOR ('P',11, int) /* Returns a mask */ +#define SNDCTL_DSP_SETFMT		_SIOWR('P',5, int) /* Selects ONE fmt*/ +#	define AFMT_QUERY		0x00000000	/* Return current fmt */ +#	define AFMT_MU_LAW		0x00000001 +#	define AFMT_A_LAW		0x00000002 +#	define AFMT_IMA_ADPCM		0x00000004 +#	define AFMT_U8			0x00000008 +#	define AFMT_S16_LE		0x00000010	/* Little endian signed 16*/ +#	define AFMT_S16_BE		0x00000020	/* Big endian signed 16 */ +#	define AFMT_S8			0x00000040 +#	define AFMT_U16_LE		0x00000080	/* Little endian U16 */ +#	define AFMT_U16_BE		0x00000100	/* Big endian U16 */ +#	define AFMT_MPEG		0x00000200	/* MPEG (2) audio */ +#	define AFMT_AC3		0x00000400	/* Dolby Digital AC3 */ + +/* + * Buffer status queries. + */ +typedef struct audio_buf_info { +			int fragments;	/* # of available fragments (partially usend ones not counted) */ +			int fragstotal;	/* Total # of fragments allocated */ +			int fragsize;	/* Size of a fragment in bytes */ + +			int bytes;	/* Available space in bytes (includes partially used fragments) */ +			/* Note! 'bytes' could be more than fragments*fragsize */ +		} audio_buf_info; + +#define SNDCTL_DSP_GETOSPACE		_SIOR ('P',12, audio_buf_info) +#define SNDCTL_DSP_GETISPACE		_SIOR ('P',13, audio_buf_info) +#define SNDCTL_DSP_NONBLOCK		_SIO  ('P',14) +#define SNDCTL_DSP_GETCAPS		_SIOR ('P',15, int) +#	define DSP_CAP_REVISION		0x000000ff	/* Bits for revision level (0 to 255) */ +#	define DSP_CAP_DUPLEX		0x00000100	/* Full duplex record/playback */ +#	define DSP_CAP_REALTIME		0x00000200	/* Real time capability */ +#	define DSP_CAP_BATCH		0x00000400	/* Device has some kind of */ +							/* internal buffers which may */ +							/* cause some delays and */ +							/* decrease precision of timing */ +#	define DSP_CAP_COPROC		0x00000800	/* Has a coprocessor */ +							/* Sometimes it's a DSP */ +							/* but usually not */ +#	define DSP_CAP_TRIGGER		0x00001000	/* Supports SETTRIGGER */ +#	define DSP_CAP_MMAP		0x00002000	/* Supports mmap() */ +#	define DSP_CAP_MULTI		0x00004000	/* support multiple open */ +#	define DSP_CAP_BIND		0x00008000	/* channel binding to front/rear/cneter/lfe */ + + +#define SNDCTL_DSP_GETTRIGGER		_SIOR ('P',16, int) +#define SNDCTL_DSP_SETTRIGGER		_SIOW ('P',16, int) +#	define PCM_ENABLE_INPUT		0x00000001 +#	define PCM_ENABLE_OUTPUT		0x00000002 + +typedef struct count_info { +		int bytes;	/* Total # of bytes processed */ +		int blocks;	/* # of fragment transitions since last time */ +		int ptr;	/* Current DMA pointer value */ +	} count_info; + +#define SNDCTL_DSP_GETIPTR		_SIOR ('P',17, count_info) +#define SNDCTL_DSP_GETOPTR		_SIOR ('P',18, count_info) + +typedef struct buffmem_desc { +		unsigned *buffer; +		int size; +	} buffmem_desc; +#define SNDCTL_DSP_MAPINBUF		_SIOR ('P', 19, buffmem_desc) +#define SNDCTL_DSP_MAPOUTBUF		_SIOR ('P', 20, buffmem_desc) +#define SNDCTL_DSP_SETSYNCRO		_SIO  ('P', 21) +#define SNDCTL_DSP_SETDUPLEX		_SIO  ('P', 22) +#define SNDCTL_DSP_GETODELAY		_SIOR ('P', 23, int) + +#define SNDCTL_DSP_GETCHANNELMASK		_SIOWR('P', 64, int) +#define SNDCTL_DSP_BIND_CHANNEL		_SIOWR('P', 65, int) +#	define DSP_BIND_QUERY		0x00000000 +#	define DSP_BIND_FRONT		0x00000001 +#	define DSP_BIND_SURR		0x00000002 +#	define DSP_BIND_CENTER_LFE	0x00000004 +#	define DSP_BIND_HANDSET		0x00000008 +#	define DSP_BIND_MIC		0x00000010 +#	define DSP_BIND_MODEM1		0x00000020 +#	define DSP_BIND_MODEM2		0x00000040 +#	define DSP_BIND_I2S		0x00000080 +#	define DSP_BIND_SPDIF		0x00000100 + +#define SNDCTL_DSP_SETSPDIF		_SIOW ('P', 66, int) +#define SNDCTL_DSP_GETSPDIF		_SIOR ('P', 67, int) +#	define SPDIF_PRO	0x0001 +#	define SPDIF_N_AUD	0x0002 +#	define SPDIF_COPY	0x0004 +#	define SPDIF_PRE	0x0008 +#	define SPDIF_CC		0x07f0 +#	define SPDIF_L		0x0800 +#	define SPDIF_DRS	0x4000 +#	define SPDIF_V		0x8000 + +/* + * Application's profile defines the way how playback underrun situations should be handled. + *  + *	APF_NORMAL (the default) and APF_NETWORK make the driver to cleanup the + *	playback buffer whenever an underrun occurs. This consumes some time + *	prevents looping the existing buffer. + *	APF_CPUINTENS is intended to be set by CPU intensive applications which + *	are likely to run out of time occasionally. In this mode the buffer cleanup is + *	disabled which saves CPU time but also let's the previous buffer content to + *	be played during the "pause" after the underrun. + */ +#define SNDCTL_DSP_PROFILE		_SIOW ('P', 23, int) +#define	  APF_NORMAL	0	/* Normal applications */ +#define	  APF_NETWORK	1	/* Underruns probably caused by an "external" delay */ +#define   APF_CPUINTENS 2	/* Underruns probably caused by "overheating" the CPU */ + +#define SOUND_PCM_READ_RATE		_SIOR ('P', 2, int) +#define SOUND_PCM_READ_CHANNELS		_SIOR ('P', 6, int) +#define SOUND_PCM_READ_BITS		_SIOR ('P', 5, int) +#define SOUND_PCM_READ_FILTER		_SIOR ('P', 7, int) + +/* Some alias names */ +#define SOUND_PCM_WRITE_BITS		SNDCTL_DSP_SETFMT +#define SOUND_PCM_WRITE_RATE		SNDCTL_DSP_SPEED +#define SOUND_PCM_POST			SNDCTL_DSP_POST +#define SOUND_PCM_RESET			SNDCTL_DSP_RESET +#define SOUND_PCM_SYNC			SNDCTL_DSP_SYNC +#define SOUND_PCM_SUBDIVIDE		SNDCTL_DSP_SUBDIVIDE +#define SOUND_PCM_SETFRAGMENT		SNDCTL_DSP_SETFRAGMENT +#define SOUND_PCM_GETFMTS		SNDCTL_DSP_GETFMTS +#define SOUND_PCM_SETFMT		SNDCTL_DSP_SETFMT +#define SOUND_PCM_GETOSPACE		SNDCTL_DSP_GETOSPACE +#define SOUND_PCM_GETISPACE		SNDCTL_DSP_GETISPACE +#define SOUND_PCM_NONBLOCK		SNDCTL_DSP_NONBLOCK +#define SOUND_PCM_GETCAPS		SNDCTL_DSP_GETCAPS +#define SOUND_PCM_GETTRIGGER		SNDCTL_DSP_GETTRIGGER +#define SOUND_PCM_SETTRIGGER		SNDCTL_DSP_SETTRIGGER +#define SOUND_PCM_SETSYNCRO		SNDCTL_DSP_SETSYNCRO +#define SOUND_PCM_GETIPTR		SNDCTL_DSP_GETIPTR +#define SOUND_PCM_GETOPTR		SNDCTL_DSP_GETOPTR +#define SOUND_PCM_MAPINBUF		SNDCTL_DSP_MAPINBUF +#define SOUND_PCM_MAPOUTBUF		SNDCTL_DSP_MAPOUTBUF + +/* + * ioctl calls to be used in communication with coprocessors and + * DSP chips. + */ + +typedef struct copr_buffer { +		int command;	/* Set to 0 if not used */ +		int flags; +#define CPF_NONE		0x0000 +#define CPF_FIRST		0x0001	/* First block */ +#define CPF_LAST		0x0002	/* Last block */ +		int len; +		int offs;	/* If required by the device (0 if not used) */ + +		unsigned char data[4000]; /* NOTE! 4000 is not 4k */ +	} copr_buffer; + +typedef struct copr_debug_buf { +		int command;	/* Used internally. Set to 0 */ +		int parm1; +		int parm2; +		int flags;	 +		int len;	/* Length of data in bytes */ +	} copr_debug_buf; + +typedef struct copr_msg { +		int len; +		unsigned char data[4000]; +	} copr_msg; + +#define SNDCTL_COPR_RESET             _SIO  ('C',  0) +#define SNDCTL_COPR_LOAD	      _SIOWR('C',  1, copr_buffer) +#define SNDCTL_COPR_RDATA	      _SIOWR('C',  2, copr_debug_buf) +#define SNDCTL_COPR_RCODE	      _SIOWR('C',  3, copr_debug_buf) +#define SNDCTL_COPR_WDATA	      _SIOW ('C',  4, copr_debug_buf) +#define SNDCTL_COPR_WCODE	      _SIOW ('C',  5, copr_debug_buf) +#define SNDCTL_COPR_RUN		      _SIOWR('C',  6, copr_debug_buf) +#define SNDCTL_COPR_HALT	      _SIOWR('C',  7, copr_debug_buf) +#define SNDCTL_COPR_SENDMSG	      _SIOWR('C',  8, copr_msg) +#define SNDCTL_COPR_RCVMSG	      _SIOR ('C',  9, copr_msg) + +/********************************************* + * IOCTL commands for /dev/mixer + */ +	 +/*  + * Mixer devices + * + * There can be up to 20 different analog mixer channels. The + * SOUND_MIXER_NRDEVICES gives the currently supported maximum.  + * The SOUND_MIXER_READ_DEVMASK returns a bitmask which tells + * the devices supported by the particular mixer. + */ + +#define SOUND_MIXER_NRDEVICES	25 +#define SOUND_MIXER_VOLUME	0 +#define SOUND_MIXER_BASS	1 +#define SOUND_MIXER_TREBLE	2 +#define SOUND_MIXER_SYNTH	3 +#define SOUND_MIXER_PCM		4 +#define SOUND_MIXER_SPEAKER	5 +#define SOUND_MIXER_LINE	6 +#define SOUND_MIXER_MIC		7 +#define SOUND_MIXER_CD		8 +#define SOUND_MIXER_IMIX	9	/*  Recording monitor  */ +#define SOUND_MIXER_ALTPCM	10 +#define SOUND_MIXER_RECLEV	11	/* Recording level */ +#define SOUND_MIXER_IGAIN	12	/* Input gain */ +#define SOUND_MIXER_OGAIN	13	/* Output gain */ +/*  + * The AD1848 codec and compatibles have three line level inputs + * (line, aux1 and aux2). Since each card manufacturer have assigned + * different meanings to these inputs, it's inpractical to assign + * specific meanings (line, cd, synth etc.) to them. + */ +#define SOUND_MIXER_LINE1	14	/* Input source 1  (aux1) */ +#define SOUND_MIXER_LINE2	15	/* Input source 2  (aux2) */ +#define SOUND_MIXER_LINE3	16	/* Input source 3  (line) */ +#define SOUND_MIXER_DIGITAL1	17	/* Digital (input) 1 */ +#define SOUND_MIXER_DIGITAL2	18	/* Digital (input) 2 */ +#define SOUND_MIXER_DIGITAL3	19	/* Digital (input) 3 */ +#define SOUND_MIXER_PHONEIN	20	/* Phone input */ +#define SOUND_MIXER_PHONEOUT	21	/* Phone output */ +#define SOUND_MIXER_VIDEO	22	/* Video/TV (audio) in */ +#define SOUND_MIXER_RADIO	23	/* Radio in */ +#define SOUND_MIXER_MONITOR	24	/* Monitor (usually mic) volume */ + +/* Some on/off settings (SOUND_SPECIAL_MIN - SOUND_SPECIAL_MAX) */ +/* Not counted to SOUND_MIXER_NRDEVICES, but use the same number space */ +#define SOUND_ONOFF_MIN		28 +#define SOUND_ONOFF_MAX		30 + +/* Note!	Number 31 cannot be used since the sign bit is reserved */ +#define SOUND_MIXER_NONE	31 + +/* + * The following unsupported macros are no longer functional. + * Use SOUND_MIXER_PRIVATE# macros in future. + */ +#define SOUND_MIXER_ENHANCE	SOUND_MIXER_NONE +#define SOUND_MIXER_MUTE	SOUND_MIXER_NONE +#define SOUND_MIXER_LOUD	SOUND_MIXER_NONE + + +#define SOUND_DEVICE_LABELS	{"Vol  ", "Bass ", "Trebl", "Synth", "Pcm  ", "Spkr ", "Line ", \ +				 "Mic  ", "CD   ", "Mix  ", "Pcm2 ", "Rec  ", "IGain", "OGain", \ +				 "Line1", "Line2", "Line3", "Digital1", "Digital2", "Digital3", \ +				 "PhoneIn", "PhoneOut", "Video", "Radio", "Monitor"} + +#define SOUND_DEVICE_NAMES	{"vol", "bass", "treble", "synth", "pcm", "speaker", "line", \ +				 "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", \ +				 "line1", "line2", "line3", "dig1", "dig2", "dig3", \ +				 "phin", "phout", "video", "radio", "monitor"} + +/*	Device bitmask identifiers	*/ + +#define SOUND_MIXER_RECSRC	0xff	/* Arg contains a bit for each recording source */ +#define SOUND_MIXER_DEVMASK	0xfe	/* Arg contains a bit for each supported device */ +#define SOUND_MIXER_RECMASK	0xfd	/* Arg contains a bit for each supported recording source */ +#define SOUND_MIXER_CAPS	0xfc +#	define SOUND_CAP_EXCL_INPUT	0x00000001	/* Only one recording source at a time */ +#define SOUND_MIXER_STEREODEVS	0xfb	/* Mixer channels supporting stereo */ +#define SOUND_MIXER_OUTSRC	0xfa	/* Arg contains a bit for each input source to output */ +#define SOUND_MIXER_OUTMASK	0xf9	/* Arg contains a bit for each supported input source to output */ + +/*	Device mask bits	*/ + +#define SOUND_MASK_VOLUME	(1 << SOUND_MIXER_VOLUME) +#define SOUND_MASK_BASS		(1 << SOUND_MIXER_BASS) +#define SOUND_MASK_TREBLE	(1 << SOUND_MIXER_TREBLE) +#define SOUND_MASK_SYNTH	(1 << SOUND_MIXER_SYNTH) +#define SOUND_MASK_PCM		(1 << SOUND_MIXER_PCM) +#define SOUND_MASK_SPEAKER	(1 << SOUND_MIXER_SPEAKER) +#define SOUND_MASK_LINE		(1 << SOUND_MIXER_LINE) +#define SOUND_MASK_MIC		(1 << SOUND_MIXER_MIC) +#define SOUND_MASK_CD		(1 << SOUND_MIXER_CD) +#define SOUND_MASK_IMIX		(1 << SOUND_MIXER_IMIX) +#define SOUND_MASK_ALTPCM	(1 << SOUND_MIXER_ALTPCM) +#define SOUND_MASK_RECLEV	(1 << SOUND_MIXER_RECLEV) +#define SOUND_MASK_IGAIN	(1 << SOUND_MIXER_IGAIN) +#define SOUND_MASK_OGAIN	(1 << SOUND_MIXER_OGAIN) +#define SOUND_MASK_LINE1	(1 << SOUND_MIXER_LINE1) +#define SOUND_MASK_LINE2	(1 << SOUND_MIXER_LINE2) +#define SOUND_MASK_LINE3	(1 << SOUND_MIXER_LINE3) +#define SOUND_MASK_DIGITAL1	(1 << SOUND_MIXER_DIGITAL1) +#define SOUND_MASK_DIGITAL2	(1 << SOUND_MIXER_DIGITAL2) +#define SOUND_MASK_DIGITAL3	(1 << SOUND_MIXER_DIGITAL3) +#define SOUND_MASK_PHONEIN	(1 << SOUND_MIXER_PHONEIN) +#define SOUND_MASK_PHONEOUT	(1 << SOUND_MIXER_PHONEOUT) +#define SOUND_MASK_RADIO	(1 << SOUND_MIXER_RADIO) +#define SOUND_MASK_VIDEO	(1 << SOUND_MIXER_VIDEO) +#define SOUND_MASK_MONITOR	(1 << SOUND_MIXER_MONITOR) + +/* Obsolete macros */ +#define SOUND_MASK_MUTE		(1 << SOUND_MIXER_MUTE) +#define SOUND_MASK_ENHANCE	(1 << SOUND_MIXER_ENHANCE) +#define SOUND_MASK_LOUD		(1 << SOUND_MIXER_LOUD) + +#define MIXER_READ(dev)		_SIOR('M', dev, int) +#define SOUND_MIXER_READ_VOLUME		MIXER_READ(SOUND_MIXER_VOLUME) +#define SOUND_MIXER_READ_BASS		MIXER_READ(SOUND_MIXER_BASS) +#define SOUND_MIXER_READ_TREBLE		MIXER_READ(SOUND_MIXER_TREBLE) +#define SOUND_MIXER_READ_SYNTH		MIXER_READ(SOUND_MIXER_SYNTH) +#define SOUND_MIXER_READ_PCM		MIXER_READ(SOUND_MIXER_PCM) +#define SOUND_MIXER_READ_SPEAKER	MIXER_READ(SOUND_MIXER_SPEAKER) +#define SOUND_MIXER_READ_LINE		MIXER_READ(SOUND_MIXER_LINE) +#define SOUND_MIXER_READ_MIC		MIXER_READ(SOUND_MIXER_MIC) +#define SOUND_MIXER_READ_CD		MIXER_READ(SOUND_MIXER_CD) +#define SOUND_MIXER_READ_IMIX		MIXER_READ(SOUND_MIXER_IMIX) +#define SOUND_MIXER_READ_ALTPCM		MIXER_READ(SOUND_MIXER_ALTPCM) +#define SOUND_MIXER_READ_RECLEV		MIXER_READ(SOUND_MIXER_RECLEV) +#define SOUND_MIXER_READ_IGAIN		MIXER_READ(SOUND_MIXER_IGAIN) +#define SOUND_MIXER_READ_OGAIN		MIXER_READ(SOUND_MIXER_OGAIN) +#define SOUND_MIXER_READ_LINE1		MIXER_READ(SOUND_MIXER_LINE1) +#define SOUND_MIXER_READ_LINE2		MIXER_READ(SOUND_MIXER_LINE2) +#define SOUND_MIXER_READ_LINE3		MIXER_READ(SOUND_MIXER_LINE3) + +/* Obsolete macros */ +#define SOUND_MIXER_READ_MUTE		MIXER_READ(SOUND_MIXER_MUTE) +#define SOUND_MIXER_READ_ENHANCE	MIXER_READ(SOUND_MIXER_ENHANCE) +#define SOUND_MIXER_READ_LOUD		MIXER_READ(SOUND_MIXER_LOUD) + +#define SOUND_MIXER_READ_RECSRC		MIXER_READ(SOUND_MIXER_RECSRC) +#define SOUND_MIXER_READ_DEVMASK	MIXER_READ(SOUND_MIXER_DEVMASK) +#define SOUND_MIXER_READ_RECMASK	MIXER_READ(SOUND_MIXER_RECMASK) +#define SOUND_MIXER_READ_STEREODEVS	MIXER_READ(SOUND_MIXER_STEREODEVS) +#define SOUND_MIXER_READ_CAPS		MIXER_READ(SOUND_MIXER_CAPS) + +#define MIXER_WRITE(dev)		_SIOWR('M', dev, int) +#define SOUND_MIXER_WRITE_VOLUME	MIXER_WRITE(SOUND_MIXER_VOLUME) +#define SOUND_MIXER_WRITE_BASS		MIXER_WRITE(SOUND_MIXER_BASS) +#define SOUND_MIXER_WRITE_TREBLE	MIXER_WRITE(SOUND_MIXER_TREBLE) +#define SOUND_MIXER_WRITE_SYNTH		MIXER_WRITE(SOUND_MIXER_SYNTH) +#define SOUND_MIXER_WRITE_PCM		MIXER_WRITE(SOUND_MIXER_PCM) +#define SOUND_MIXER_WRITE_SPEAKER	MIXER_WRITE(SOUND_MIXER_SPEAKER) +#define SOUND_MIXER_WRITE_LINE		MIXER_WRITE(SOUND_MIXER_LINE) +#define SOUND_MIXER_WRITE_MIC		MIXER_WRITE(SOUND_MIXER_MIC) +#define SOUND_MIXER_WRITE_CD		MIXER_WRITE(SOUND_MIXER_CD) +#define SOUND_MIXER_WRITE_IMIX		MIXER_WRITE(SOUND_MIXER_IMIX) +#define SOUND_MIXER_WRITE_ALTPCM	MIXER_WRITE(SOUND_MIXER_ALTPCM) +#define SOUND_MIXER_WRITE_RECLEV	MIXER_WRITE(SOUND_MIXER_RECLEV) +#define SOUND_MIXER_WRITE_IGAIN		MIXER_WRITE(SOUND_MIXER_IGAIN) +#define SOUND_MIXER_WRITE_OGAIN		MIXER_WRITE(SOUND_MIXER_OGAIN) +#define SOUND_MIXER_WRITE_LINE1		MIXER_WRITE(SOUND_MIXER_LINE1) +#define SOUND_MIXER_WRITE_LINE2		MIXER_WRITE(SOUND_MIXER_LINE2) +#define SOUND_MIXER_WRITE_LINE3		MIXER_WRITE(SOUND_MIXER_LINE3) + +/* Obsolete macros */ +#define SOUND_MIXER_WRITE_MUTE		MIXER_WRITE(SOUND_MIXER_MUTE) +#define SOUND_MIXER_WRITE_ENHANCE	MIXER_WRITE(SOUND_MIXER_ENHANCE) +#define SOUND_MIXER_WRITE_LOUD		MIXER_WRITE(SOUND_MIXER_LOUD) + +#define SOUND_MIXER_WRITE_RECSRC	MIXER_WRITE(SOUND_MIXER_RECSRC) + +typedef struct mixer_info +{ +  char id[16]; +  char name[32]; +  int  modify_counter; +  int fillers[10]; +} mixer_info; + +typedef struct _old_mixer_info /* Obsolete */ +{ +  char id[16]; +  char name[32]; +} _old_mixer_info; + +#define SOUND_MIXER_INFO		_SIOR ('M', 101, mixer_info) +#define SOUND_OLD_MIXER_INFO		_SIOR ('M', 101, _old_mixer_info) + +/* + * A mechanism for accessing "proprietary" mixer features. This method + * permits passing 128 bytes of arbitrary data between a mixer application + * and the mixer driver. Interpretation of the record is defined by + * the particular mixer driver. + */ +typedef unsigned char mixer_record[128]; + +#define SOUND_MIXER_ACCESS		_SIOWR('M', 102, mixer_record) + +/* + * Two ioctls for special souncard function + */ +#define SOUND_MIXER_AGC  _SIOWR('M', 103, int) +#define SOUND_MIXER_3DSE  _SIOWR('M', 104, int) + +/* + * The SOUND_MIXER_PRIVATE# commands can be redefined by low level drivers. + * These features can be used when accessing device specific features. + */ +#define SOUND_MIXER_PRIVATE1		_SIOWR('M', 111, int) +#define SOUND_MIXER_PRIVATE2		_SIOWR('M', 112, int) +#define SOUND_MIXER_PRIVATE3		_SIOWR('M', 113, int) +#define SOUND_MIXER_PRIVATE4		_SIOWR('M', 114, int) +#define SOUND_MIXER_PRIVATE5		_SIOWR('M', 115, int) + +/* + * SOUND_MIXER_GETLEVELS and SOUND_MIXER_SETLEVELS calls can be used + * for querying current mixer settings from the driver and for loading + * default volume settings _prior_ activating the mixer (loading + * doesn't affect current state of the mixer hardware). These calls + * are for internal use only. + */ + +typedef struct mixer_vol_table { +  int num;	/* Index to volume table */ +  char name[32]; +  int levels[32]; +} mixer_vol_table; + +#define SOUND_MIXER_GETLEVELS		_SIOWR('M', 116, mixer_vol_table) +#define SOUND_MIXER_SETLEVELS		_SIOWR('M', 117, mixer_vol_table) + +/*  + * An ioctl for identifying the driver version. It will return value + * of the SOUND_VERSION macro used when compiling the driver. + * This call was introduced in OSS version 3.6 and it will not work + * with earlier versions (returns EINVAL). + */ +#define OSS_GETVERSION			_SIOR ('M', 118, int) + +/* + * Level 2 event types for /dev/sequencer + */ + +/* + * The 4 most significant bits of byte 0 specify the class of + * the event:  + * + *	0x8X = system level events, + *	0x9X = device/port specific events, event[1] = device/port, + *		The last 4 bits give the subtype: + *			0x02	= Channel event (event[3] = chn). + *			0x01	= note event (event[4] = note). + *			(0x01 is not used alone but always with bit 0x02). + *	       event[2] = MIDI message code (0x80=note off etc.) + * + */ + +#define EV_SEQ_LOCAL		0x80 +#define EV_TIMING		0x81 +#define EV_CHN_COMMON		0x92 +#define EV_CHN_VOICE		0x93 +#define EV_SYSEX		0x94 +/* + * Event types 200 to 220 are reserved for application use. + * These numbers will not be used by the driver. + */ + +/* + * Events for event type EV_CHN_VOICE + */ + +#define MIDI_NOTEOFF		0x80 +#define MIDI_NOTEON		0x90 +#define MIDI_KEY_PRESSURE	0xA0 + +/* + * Events for event type EV_CHN_COMMON + */ + +#define MIDI_CTL_CHANGE		0xB0 +#define MIDI_PGM_CHANGE		0xC0 +#define MIDI_CHN_PRESSURE	0xD0 +#define MIDI_PITCH_BEND		0xE0 + +#define MIDI_SYSTEM_PREFIX	0xF0 + +/* + * Timer event types + */ +#define TMR_WAIT_REL		1	/* Time relative to the prev time */ +#define TMR_WAIT_ABS		2	/* Absolute time since TMR_START */ +#define TMR_STOP		3 +#define TMR_START		4 +#define TMR_CONTINUE		5 +#define TMR_TEMPO		6 +#define TMR_ECHO		8 +#define TMR_CLOCK		9	/* MIDI clock */ +#define TMR_SPP			10	/* Song position pointer */ +#define TMR_TIMESIG		11	/* Time signature */ + +/* + *	Local event types + */ +#define LOCL_STARTAUDIO		1 + +#if !defined(__KERNEL__) || defined(USE_SEQ_MACROS) +/* + *	Some convenience macros to simplify programming of the + *	/dev/sequencer interface + * + *	This is a legacy interface for applications written against + *	the OSSlib-3.8 style interface. It is no longer possible + *	to actually link against OSSlib with this header, but we + *	still provide these macros for programs using them. + * + *	If you want to use OSSlib, it is recommended that you get + *	the GPL version of OSS-4.x and build against that version + *	of the header. + * + *	We redefine the extern keyword so that make headers_check + *	does not complain about SEQ_USE_EXTBUF. + */ +#define SEQ_DECLAREBUF()		SEQ_USE_EXTBUF() + +void seqbuf_dump(void);	/* This function must be provided by programs */ + +#define SEQ_PM_DEFINES int __foo_bar___ + +#define SEQ_LOAD_GMINSTR(dev, instr) +#define SEQ_LOAD_GMDRUM(dev, drum) + +#define _SEQ_EXTERN extern +#define SEQ_USE_EXTBUF() \ +		_SEQ_EXTERN unsigned char _seqbuf[]; \ +		_SEQ_EXTERN int _seqbuflen; _SEQ_EXTERN int _seqbufptr + +#ifndef USE_SIMPLE_MACROS +/* Sample seqbuf_dump() implementation: + * + *	SEQ_DEFINEBUF (2048);	-- Defines a buffer for 2048 bytes + * + *	int seqfd;		-- The file descriptor for /dev/sequencer. + * + *	void + *	seqbuf_dump () + *	{ + *	  if (_seqbufptr) + *	    if (write (seqfd, _seqbuf, _seqbufptr) == -1) + *	      { + *		perror ("write /dev/sequencer"); + *		exit (-1); + *	      } + *	  _seqbufptr = 0; + *	} + */ + +#define SEQ_DEFINEBUF(len)		unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0 +#define _SEQ_NEEDBUF(len)		if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump() +#define _SEQ_ADVBUF(len)		_seqbufptr += len +#define SEQ_DUMPBUF			seqbuf_dump +#else +/* + * This variation of the sequencer macros is used just to format one event + * using fixed buffer. + *  + * The program using the macro library must define the following macros before + * using this library. + * + * #define _seqbuf 		 name of the buffer (unsigned char[])  + * #define _SEQ_ADVBUF(len)	 If the applic needs to know the exact + *				 size of the event, this macro can be used. + *				 Otherwise this must be defined as empty. + * #define _seqbufptr		 Define the name of index variable or 0 if + *				 not required.  + */ +#define _SEQ_NEEDBUF(len)	/* empty */ +#endif + +#define SEQ_VOLUME_MODE(dev, mode)	{_SEQ_NEEDBUF(8);\ +					_seqbuf[_seqbufptr] = SEQ_EXTENDED;\ +					_seqbuf[_seqbufptr+1] = SEQ_VOLMODE;\ +					_seqbuf[_seqbufptr+2] = (dev);\ +					_seqbuf[_seqbufptr+3] = (mode);\ +					_seqbuf[_seqbufptr+4] = 0;\ +					_seqbuf[_seqbufptr+5] = 0;\ +					_seqbuf[_seqbufptr+6] = 0;\ +					_seqbuf[_seqbufptr+7] = 0;\ +					_SEQ_ADVBUF(8);} + +/* + * Midi voice messages + */ + +#define _CHN_VOICE(dev, event, chn, note, parm) \ +					{_SEQ_NEEDBUF(8);\ +					_seqbuf[_seqbufptr] = EV_CHN_VOICE;\ +					_seqbuf[_seqbufptr+1] = (dev);\ +					_seqbuf[_seqbufptr+2] = (event);\ +					_seqbuf[_seqbufptr+3] = (chn);\ +					_seqbuf[_seqbufptr+4] = (note);\ +					_seqbuf[_seqbufptr+5] = (parm);\ +					_seqbuf[_seqbufptr+6] = (0);\ +					_seqbuf[_seqbufptr+7] = 0;\ +					_SEQ_ADVBUF(8);} + +#define SEQ_START_NOTE(dev, chn, note, vol) \ +		_CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol) + +#define SEQ_STOP_NOTE(dev, chn, note, vol) \ +		_CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol) + +#define SEQ_KEY_PRESSURE(dev, chn, note, pressure) \ +		_CHN_VOICE(dev, MIDI_KEY_PRESSURE, chn, note, pressure) + +/* + * Midi channel messages + */ + +#define _CHN_COMMON(dev, event, chn, p1, p2, w14) \ +					{_SEQ_NEEDBUF(8);\ +					_seqbuf[_seqbufptr] = EV_CHN_COMMON;\ +					_seqbuf[_seqbufptr+1] = (dev);\ +					_seqbuf[_seqbufptr+2] = (event);\ +					_seqbuf[_seqbufptr+3] = (chn);\ +					_seqbuf[_seqbufptr+4] = (p1);\ +					_seqbuf[_seqbufptr+5] = (p2);\ +					*(short *)&_seqbuf[_seqbufptr+6] = (w14);\ +					_SEQ_ADVBUF(8);} +/* + * SEQ_SYSEX permits sending of sysex messages. (It may look that it permits + * sending any MIDI bytes but it's absolutely not possible. Trying to do + * so _will_ cause problems with MPU401 intelligent mode). + * + * Sysex messages are sent in blocks of 1 to 6 bytes. Longer messages must be  + * sent by calling SEQ_SYSEX() several times (there must be no other events + * between them). First sysex fragment must have 0xf0 in the first byte + * and the last byte (buf[len-1] of the last fragment must be 0xf7. No byte + * between these sysex start and end markers cannot be larger than 0x7f. Also + * lengths of each fragments (except the last one) must be 6. + * + * Breaking the above rules may work with some MIDI ports but is likely to + * cause fatal problems with some other devices (such as MPU401). + */ +#define SEQ_SYSEX(dev, buf, len) \ +					{int ii, ll=(len); \ +					 unsigned char *bufp=buf;\ +					 if (ll>6)ll=6;\ +					_SEQ_NEEDBUF(8);\ +					_seqbuf[_seqbufptr] = EV_SYSEX;\ +					_seqbuf[_seqbufptr+1] = (dev);\ +					for(ii=0;ii<ll;ii++)\ +					   _seqbuf[_seqbufptr+ii+2] = bufp[ii];\ +					for(ii=ll;ii<6;ii++)\ +					   _seqbuf[_seqbufptr+ii+2] = 0xff;\ +					_SEQ_ADVBUF(8);} + +#define SEQ_CHN_PRESSURE(dev, chn, pressure) \ +		_CHN_COMMON(dev, MIDI_CHN_PRESSURE, chn, pressure, 0, 0) + +#define SEQ_SET_PATCH SEQ_PGM_CHANGE +#define SEQ_PGM_CHANGE(dev, chn, patch) \ +		_CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0) + +#define SEQ_CONTROL(dev, chn, controller, value) \ +		_CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value) + +#define SEQ_BENDER(dev, chn, value) \ +		_CHN_COMMON(dev, MIDI_PITCH_BEND, chn, 0, 0, value) + + +#define SEQ_V2_X_CONTROL(dev, voice, controller, value)	{_SEQ_NEEDBUF(8);\ +					_seqbuf[_seqbufptr] = SEQ_EXTENDED;\ +					_seqbuf[_seqbufptr+1] = SEQ_CONTROLLER;\ +					_seqbuf[_seqbufptr+2] = (dev);\ +					_seqbuf[_seqbufptr+3] = (voice);\ +					_seqbuf[_seqbufptr+4] = (controller);\ +					_seqbuf[_seqbufptr+5] = ((value)&0xff);\ +					_seqbuf[_seqbufptr+6] = ((value>>8)&0xff);\ +					_seqbuf[_seqbufptr+7] = 0;\ +					_SEQ_ADVBUF(8);} +/* + * The following 5 macros are incorrectly implemented and obsolete. + * Use SEQ_BENDER and SEQ_CONTROL (with proper controller) instead. + */ +#define SEQ_PITCHBEND(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value) +#define SEQ_BENDER_RANGE(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value) +#define SEQ_EXPRESSION(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_EXPRESSION, value*128) +#define SEQ_MAIN_VOLUME(dev, voice, value) SEQ_CONTROL(dev, voice, CTL_MAIN_VOLUME, (value*16383)/100) +#define SEQ_PANNING(dev, voice, pos) SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2) + +/* + * Timing and synchronization macros + */ + +#define _TIMER_EVENT(ev, parm)		{_SEQ_NEEDBUF(8);\ +				 	_seqbuf[_seqbufptr+0] = EV_TIMING; \ +				 	_seqbuf[_seqbufptr+1] = (ev); \ +					_seqbuf[_seqbufptr+2] = 0;\ +					_seqbuf[_seqbufptr+3] = 0;\ +				 	*(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \ +					_SEQ_ADVBUF(8);} + +#define SEQ_START_TIMER()		_TIMER_EVENT(TMR_START, 0) +#define SEQ_STOP_TIMER()		_TIMER_EVENT(TMR_STOP, 0) +#define SEQ_CONTINUE_TIMER()		_TIMER_EVENT(TMR_CONTINUE, 0) +#define SEQ_WAIT_TIME(ticks)		_TIMER_EVENT(TMR_WAIT_ABS, ticks) +#define SEQ_DELTA_TIME(ticks)		_TIMER_EVENT(TMR_WAIT_REL, ticks) +#define SEQ_ECHO_BACK(key)		_TIMER_EVENT(TMR_ECHO, key) +#define SEQ_SET_TEMPO(value)		_TIMER_EVENT(TMR_TEMPO, value) +#define SEQ_SONGPOS(pos)		_TIMER_EVENT(TMR_SPP, pos) +#define SEQ_TIME_SIGNATURE(sig)		_TIMER_EVENT(TMR_TIMESIG, sig) + +/* + * Local control events + */ + +#define _LOCAL_EVENT(ev, parm)		{_SEQ_NEEDBUF(8);\ +				 	_seqbuf[_seqbufptr+0] = EV_SEQ_LOCAL; \ +				 	_seqbuf[_seqbufptr+1] = (ev); \ +					_seqbuf[_seqbufptr+2] = 0;\ +					_seqbuf[_seqbufptr+3] = 0;\ +				 	*(unsigned int *)&_seqbuf[_seqbufptr+4] = (parm); \ +					_SEQ_ADVBUF(8);} + +#define SEQ_PLAYAUDIO(devmask)		_LOCAL_EVENT(LOCL_STARTAUDIO, devmask) +/* + * Events for the level 1 interface only  + */ + +#define SEQ_MIDIOUT(device, byte)	{_SEQ_NEEDBUF(4);\ +					_seqbuf[_seqbufptr] = SEQ_MIDIPUTC;\ +					_seqbuf[_seqbufptr+1] = (byte);\ +					_seqbuf[_seqbufptr+2] = (device);\ +					_seqbuf[_seqbufptr+3] = 0;\ +					_SEQ_ADVBUF(4);} + +/* + * Patch loading. + */ +#define SEQ_WRPATCH(patchx, len) \ +		{if (_seqbufptr) SEQ_DUMPBUF();\ +		 if (write(seqfd, (char*)(patchx), len)==-1) \ +		    perror("Write patch: /dev/sequencer");} +#define SEQ_WRPATCH2(patchx, len) \ +		(SEQ_DUMPBUF(), write(seqfd, (char*)(patchx), len)) + +#endif +#endif /* _UAPISOUNDCARD_H */ diff --git a/include/uapi/linux/spi/Kbuild b/include/uapi/linux/spi/Kbuild index aafaa5aa54d..0cc747eff16 100644 --- a/include/uapi/linux/spi/Kbuild +++ b/include/uapi/linux/spi/Kbuild @@ -1 +1,2 @@  # UAPI Header export list +header-y += spidev.h diff --git a/include/uapi/linux/spi/spidev.h b/include/uapi/linux/spi/spidev.h new file mode 100644 index 00000000000..52d9ed01855 --- /dev/null +++ b/include/uapi/linux/spi/spidev.h @@ -0,0 +1,131 @@ +/* + * include/linux/spi/spidev.h + * + * Copyright (C) 2006 SWAPP + *	Andrea Paterniani <a.paterniani@swapp-eng.it> + * + * 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 SPIDEV_H +#define SPIDEV_H + +#include <linux/types.h> + +/* User space versions of kernel symbols for SPI clocking modes, + * matching <linux/spi/spi.h> + */ + +#define SPI_CPHA		0x01 +#define SPI_CPOL		0x02 + +#define SPI_MODE_0		(0|0) +#define SPI_MODE_1		(0|SPI_CPHA) +#define SPI_MODE_2		(SPI_CPOL|0) +#define SPI_MODE_3		(SPI_CPOL|SPI_CPHA) + +#define SPI_CS_HIGH		0x04 +#define SPI_LSB_FIRST		0x08 +#define SPI_3WIRE		0x10 +#define SPI_LOOP		0x20 +#define SPI_NO_CS		0x40 +#define SPI_READY		0x80 + +/*---------------------------------------------------------------------------*/ + +/* IOCTL commands */ + +#define SPI_IOC_MAGIC			'k' + +/** + * struct spi_ioc_transfer - describes a single SPI transfer + * @tx_buf: Holds pointer to userspace buffer with transmit data, or null. + *	If no data is provided, zeroes are shifted out. + * @rx_buf: Holds pointer to userspace buffer for receive data, or null. + * @len: Length of tx and rx buffers, in bytes. + * @speed_hz: Temporary override of the device's bitrate. + * @bits_per_word: Temporary override of the device's wordsize. + * @delay_usecs: If nonzero, how long to delay after the last bit transfer + *	before optionally deselecting the device before the next transfer. + * @cs_change: True to deselect device before starting the next transfer. + * + * This structure is mapped directly to the kernel spi_transfer structure; + * the fields have the same meanings, except of course that the pointers + * are in a different address space (and may be of different sizes in some + * cases, such as 32-bit i386 userspace over a 64-bit x86_64 kernel). + * Zero-initialize the structure, including currently unused fields, to + * accommodate potential future updates. + * + * SPI_IOC_MESSAGE gives userspace the equivalent of kernel spi_sync(). + * Pass it an array of related transfers, they'll execute together. + * Each transfer may be half duplex (either direction) or full duplex. + * + *	struct spi_ioc_transfer mesg[4]; + *	... + *	status = ioctl(fd, SPI_IOC_MESSAGE(4), mesg); + * + * So for example one transfer might send a nine bit command (right aligned + * in a 16-bit word), the next could read a block of 8-bit data before + * terminating that command by temporarily deselecting the chip; the next + * could send a different nine bit command (re-selecting the chip), and the + * last transfer might write some register values. + */ +struct spi_ioc_transfer { +	__u64		tx_buf; +	__u64		rx_buf; + +	__u32		len; +	__u32		speed_hz; + +	__u16		delay_usecs; +	__u8		bits_per_word; +	__u8		cs_change; +	__u32		pad; + +	/* If the contents of 'struct spi_ioc_transfer' ever change +	 * incompatibly, then the ioctl number (currently 0) must change; +	 * ioctls with constant size fields get a bit more in the way of +	 * error checking than ones (like this) where that field varies. +	 * +	 * NOTE: struct layout is the same in 64bit and 32bit userspace. +	 */ +}; + +/* not all platforms use <asm-generic/ioctl.h> or _IOC_TYPECHECK() ... */ +#define SPI_MSGSIZE(N) \ +	((((N)*(sizeof (struct spi_ioc_transfer))) < (1 << _IOC_SIZEBITS)) \ +		? ((N)*(sizeof (struct spi_ioc_transfer))) : 0) +#define SPI_IOC_MESSAGE(N) _IOW(SPI_IOC_MAGIC, 0, char[SPI_MSGSIZE(N)]) + + +/* Read / Write of SPI mode (SPI_MODE_0..SPI_MODE_3) */ +#define SPI_IOC_RD_MODE			_IOR(SPI_IOC_MAGIC, 1, __u8) +#define SPI_IOC_WR_MODE			_IOW(SPI_IOC_MAGIC, 1, __u8) + +/* Read / Write SPI bit justification */ +#define SPI_IOC_RD_LSB_FIRST		_IOR(SPI_IOC_MAGIC, 2, __u8) +#define SPI_IOC_WR_LSB_FIRST		_IOW(SPI_IOC_MAGIC, 2, __u8) + +/* Read / Write SPI device word length (1..N) */ +#define SPI_IOC_RD_BITS_PER_WORD	_IOR(SPI_IOC_MAGIC, 3, __u8) +#define SPI_IOC_WR_BITS_PER_WORD	_IOW(SPI_IOC_MAGIC, 3, __u8) + +/* Read / Write SPI device default max speed hz */ +#define SPI_IOC_RD_MAX_SPEED_HZ		_IOR(SPI_IOC_MAGIC, 4, __u32) +#define SPI_IOC_WR_MAX_SPEED_HZ		_IOW(SPI_IOC_MAGIC, 4, __u32) + + + +#endif /* SPIDEV_H */ diff --git a/include/uapi/linux/stat.h b/include/uapi/linux/stat.h new file mode 100644 index 00000000000..7fec7e36d92 --- /dev/null +++ b/include/uapi/linux/stat.h @@ -0,0 +1,45 @@ +#ifndef _UAPI_LINUX_STAT_H +#define _UAPI_LINUX_STAT_H + + +#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) + +#define S_IFMT  00170000 +#define S_IFSOCK 0140000 +#define S_IFLNK	 0120000 +#define S_IFREG  0100000 +#define S_IFBLK  0060000 +#define S_IFDIR  0040000 +#define S_IFCHR  0020000 +#define S_IFIFO  0010000 +#define S_ISUID  0004000 +#define S_ISGID  0002000 +#define S_ISVTX  0001000 + +#define S_ISLNK(m)	(((m) & S_IFMT) == S_IFLNK) +#define S_ISREG(m)	(((m) & S_IFMT) == S_IFREG) +#define S_ISDIR(m)	(((m) & S_IFMT) == S_IFDIR) +#define S_ISCHR(m)	(((m) & S_IFMT) == S_IFCHR) +#define S_ISBLK(m)	(((m) & S_IFMT) == S_IFBLK) +#define S_ISFIFO(m)	(((m) & S_IFMT) == S_IFIFO) +#define S_ISSOCK(m)	(((m) & S_IFMT) == S_IFSOCK) + +#define S_IRWXU 00700 +#define S_IRUSR 00400 +#define S_IWUSR 00200 +#define S_IXUSR 00100 + +#define S_IRWXG 00070 +#define S_IRGRP 00040 +#define S_IWGRP 00020 +#define S_IXGRP 00010 + +#define S_IRWXO 00007 +#define S_IROTH 00004 +#define S_IWOTH 00002 +#define S_IXOTH 00001 + +#endif + + +#endif /* _UAPI_LINUX_STAT_H */ diff --git a/include/uapi/linux/stddef.h b/include/uapi/linux/stddef.h new file mode 100644 index 00000000000..aa9f1042874 --- /dev/null +++ b/include/uapi/linux/stddef.h @@ -0,0 +1 @@ +#include <linux/compiler.h> diff --git a/include/uapi/linux/string.h b/include/uapi/linux/string.h new file mode 100644 index 00000000000..e32e545cff5 --- /dev/null +++ b/include/uapi/linux/string.h @@ -0,0 +1,9 @@ +#ifndef _UAPI_LINUX_STRING_H_ +#define _UAPI_LINUX_STRING_H_ + +/* We don't want strings.h stuff being used by user stuff by accident */ + +#ifndef __KERNEL__ +#include <string.h> +#endif /* __KERNEL__ */ +#endif /* _UAPI_LINUX_STRING_H_ */ diff --git a/include/uapi/linux/sunrpc/Kbuild b/include/uapi/linux/sunrpc/Kbuild index aafaa5aa54d..8e02e47c20f 100644 --- a/include/uapi/linux/sunrpc/Kbuild +++ b/include/uapi/linux/sunrpc/Kbuild @@ -1 +1,2 @@  # UAPI Header export list +header-y += debug.h diff --git a/include/uapi/linux/sunrpc/debug.h b/include/uapi/linux/sunrpc/debug.h new file mode 100644 index 00000000000..830e34493a8 --- /dev/null +++ b/include/uapi/linux/sunrpc/debug.h @@ -0,0 +1,48 @@ +/* + * linux/include/linux/sunrpc/debug.h + * + * Debugging support for sunrpc module + * + * Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de> + */ + +#ifndef _UAPI_LINUX_SUNRPC_DEBUG_H_ +#define _UAPI_LINUX_SUNRPC_DEBUG_H_ + +/* + * RPC debug facilities + */ +#define RPCDBG_XPRT		0x0001 +#define RPCDBG_CALL		0x0002 +#define RPCDBG_DEBUG		0x0004 +#define RPCDBG_NFS		0x0008 +#define RPCDBG_AUTH		0x0010 +#define RPCDBG_BIND		0x0020 +#define RPCDBG_SCHED		0x0040 +#define RPCDBG_TRANS		0x0080 +#define RPCDBG_SVCXPRT		0x0100 +#define RPCDBG_SVCDSP		0x0200 +#define RPCDBG_MISC		0x0400 +#define RPCDBG_CACHE		0x0800 +#define RPCDBG_ALL		0x7fff + + +/* + * Declarations for the sysctl debug interface, which allows to read or + * change the debug flags for rpc, nfs, nfsd, and lockd. Since the sunrpc + * module currently registers its sysctl table dynamically, the sysctl path + * for module FOO is <CTL_SUNRPC, CTL_FOODEBUG>. + */ + +enum { +	CTL_RPCDEBUG = 1, +	CTL_NFSDEBUG, +	CTL_NFSDDEBUG, +	CTL_NLMDEBUG, +	CTL_SLOTTABLE_UDP, +	CTL_SLOTTABLE_TCP, +	CTL_MIN_RESVPORT, +	CTL_MAX_RESVPORT, +}; + +#endif /* _UAPI_LINUX_SUNRPC_DEBUG_H_ */ diff --git a/include/uapi/linux/suspend_ioctls.h b/include/uapi/linux/suspend_ioctls.h new file mode 100644 index 00000000000..0b30382984f --- /dev/null +++ b/include/uapi/linux/suspend_ioctls.h @@ -0,0 +1,33 @@ +#ifndef _LINUX_SUSPEND_IOCTLS_H +#define _LINUX_SUSPEND_IOCTLS_H + +#include <linux/types.h> +/* + * This structure is used to pass the values needed for the identification + * of the resume swap area from a user space to the kernel via the + * SNAPSHOT_SET_SWAP_AREA ioctl + */ +struct resume_swap_area { +	__kernel_loff_t offset; +	__u32 dev; +} __attribute__((packed)); + +#define SNAPSHOT_IOC_MAGIC	'3' +#define SNAPSHOT_FREEZE			_IO(SNAPSHOT_IOC_MAGIC, 1) +#define SNAPSHOT_UNFREEZE		_IO(SNAPSHOT_IOC_MAGIC, 2) +#define SNAPSHOT_ATOMIC_RESTORE		_IO(SNAPSHOT_IOC_MAGIC, 4) +#define SNAPSHOT_FREE			_IO(SNAPSHOT_IOC_MAGIC, 5) +#define SNAPSHOT_FREE_SWAP_PAGES	_IO(SNAPSHOT_IOC_MAGIC, 9) +#define SNAPSHOT_S2RAM			_IO(SNAPSHOT_IOC_MAGIC, 11) +#define SNAPSHOT_SET_SWAP_AREA		_IOW(SNAPSHOT_IOC_MAGIC, 13, \ +							struct resume_swap_area) +#define SNAPSHOT_GET_IMAGE_SIZE		_IOR(SNAPSHOT_IOC_MAGIC, 14, __kernel_loff_t) +#define SNAPSHOT_PLATFORM_SUPPORT	_IO(SNAPSHOT_IOC_MAGIC, 15) +#define SNAPSHOT_POWER_OFF		_IO(SNAPSHOT_IOC_MAGIC, 16) +#define SNAPSHOT_CREATE_IMAGE		_IOW(SNAPSHOT_IOC_MAGIC, 17, int) +#define SNAPSHOT_PREF_IMAGE_SIZE	_IO(SNAPSHOT_IOC_MAGIC, 18) +#define SNAPSHOT_AVAIL_SWAP_SIZE	_IOR(SNAPSHOT_IOC_MAGIC, 19, __kernel_loff_t) +#define SNAPSHOT_ALLOC_SWAP_PAGE	_IOR(SNAPSHOT_IOC_MAGIC, 20, __kernel_loff_t) +#define SNAPSHOT_IOC_MAXNR	20 + +#endif /* _LINUX_SUSPEND_IOCTLS_H */ diff --git a/include/uapi/linux/swab.h b/include/uapi/linux/swab.h new file mode 100644 index 00000000000..e811474724c --- /dev/null +++ b/include/uapi/linux/swab.h @@ -0,0 +1,282 @@ +#ifndef _UAPI_LINUX_SWAB_H +#define _UAPI_LINUX_SWAB_H + +#include <linux/types.h> +#include <linux/compiler.h> +#include <asm/swab.h> + +/* + * casts are necessary for constants, because we never know how for sure + * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way. + */ +#define ___constant_swab16(x) ((__u16)(				\ +	(((__u16)(x) & (__u16)0x00ffU) << 8) |			\ +	(((__u16)(x) & (__u16)0xff00U) >> 8))) + +#define ___constant_swab32(x) ((__u32)(				\ +	(((__u32)(x) & (__u32)0x000000ffUL) << 24) |		\ +	(((__u32)(x) & (__u32)0x0000ff00UL) <<  8) |		\ +	(((__u32)(x) & (__u32)0x00ff0000UL) >>  8) |		\ +	(((__u32)(x) & (__u32)0xff000000UL) >> 24))) + +#define ___constant_swab64(x) ((__u64)(				\ +	(((__u64)(x) & (__u64)0x00000000000000ffULL) << 56) |	\ +	(((__u64)(x) & (__u64)0x000000000000ff00ULL) << 40) |	\ +	(((__u64)(x) & (__u64)0x0000000000ff0000ULL) << 24) |	\ +	(((__u64)(x) & (__u64)0x00000000ff000000ULL) <<  8) |	\ +	(((__u64)(x) & (__u64)0x000000ff00000000ULL) >>  8) |	\ +	(((__u64)(x) & (__u64)0x0000ff0000000000ULL) >> 24) |	\ +	(((__u64)(x) & (__u64)0x00ff000000000000ULL) >> 40) |	\ +	(((__u64)(x) & (__u64)0xff00000000000000ULL) >> 56))) + +#define ___constant_swahw32(x) ((__u32)(			\ +	(((__u32)(x) & (__u32)0x0000ffffUL) << 16) |		\ +	(((__u32)(x) & (__u32)0xffff0000UL) >> 16))) + +#define ___constant_swahb32(x) ((__u32)(			\ +	(((__u32)(x) & (__u32)0x00ff00ffUL) << 8) |		\ +	(((__u32)(x) & (__u32)0xff00ff00UL) >> 8))) + +/* + * Implement the following as inlines, but define the interface using + * macros to allow constant folding when possible: + * ___swab16, ___swab32, ___swab64, ___swahw32, ___swahb32 + */ + +static inline __attribute_const__ __u16 __fswab16(__u16 val) +{ +#ifdef __arch_swab16 +	return __arch_swab16(val); +#else +	return ___constant_swab16(val); +#endif +} + +static inline __attribute_const__ __u32 __fswab32(__u32 val) +{ +#ifdef __arch_swab32 +	return __arch_swab32(val); +#else +	return ___constant_swab32(val); +#endif +} + +static inline __attribute_const__ __u64 __fswab64(__u64 val) +{ +#ifdef __arch_swab64 +	return __arch_swab64(val); +#elif defined(__SWAB_64_THRU_32__) +	__u32 h = val >> 32; +	__u32 l = val & ((1ULL << 32) - 1); +	return (((__u64)__fswab32(l)) << 32) | ((__u64)(__fswab32(h))); +#else +	return ___constant_swab64(val); +#endif +} + +static inline __attribute_const__ __u32 __fswahw32(__u32 val) +{ +#ifdef __arch_swahw32 +	return __arch_swahw32(val); +#else +	return ___constant_swahw32(val); +#endif +} + +static inline __attribute_const__ __u32 __fswahb32(__u32 val) +{ +#ifdef __arch_swahb32 +	return __arch_swahb32(val); +#else +	return ___constant_swahb32(val); +#endif +} + +/** + * __swab16 - return a byteswapped 16-bit value + * @x: value to byteswap + */ +#define __swab16(x)				\ +	(__builtin_constant_p((__u16)(x)) ?	\ +	___constant_swab16(x) :			\ +	__fswab16(x)) + +/** + * __swab32 - return a byteswapped 32-bit value + * @x: value to byteswap + */ +#define __swab32(x)				\ +	(__builtin_constant_p((__u32)(x)) ?	\ +	___constant_swab32(x) :			\ +	__fswab32(x)) + +/** + * __swab64 - return a byteswapped 64-bit value + * @x: value to byteswap + */ +#define __swab64(x)				\ +	(__builtin_constant_p((__u64)(x)) ?	\ +	___constant_swab64(x) :			\ +	__fswab64(x)) + +/** + * __swahw32 - return a word-swapped 32-bit value + * @x: value to wordswap + * + * __swahw32(0x12340000) is 0x00001234 + */ +#define __swahw32(x)				\ +	(__builtin_constant_p((__u32)(x)) ?	\ +	___constant_swahw32(x) :		\ +	__fswahw32(x)) + +/** + * __swahb32 - return a high and low byte-swapped 32-bit value + * @x: value to byteswap + * + * __swahb32(0x12345678) is 0x34127856 + */ +#define __swahb32(x)				\ +	(__builtin_constant_p((__u32)(x)) ?	\ +	___constant_swahb32(x) :		\ +	__fswahb32(x)) + +/** + * __swab16p - return a byteswapped 16-bit value from a pointer + * @p: pointer to a naturally-aligned 16-bit value + */ +static inline __u16 __swab16p(const __u16 *p) +{ +#ifdef __arch_swab16p +	return __arch_swab16p(p); +#else +	return __swab16(*p); +#endif +} + +/** + * __swab32p - return a byteswapped 32-bit value from a pointer + * @p: pointer to a naturally-aligned 32-bit value + */ +static inline __u32 __swab32p(const __u32 *p) +{ +#ifdef __arch_swab32p +	return __arch_swab32p(p); +#else +	return __swab32(*p); +#endif +} + +/** + * __swab64p - return a byteswapped 64-bit value from a pointer + * @p: pointer to a naturally-aligned 64-bit value + */ +static inline __u64 __swab64p(const __u64 *p) +{ +#ifdef __arch_swab64p +	return __arch_swab64p(p); +#else +	return __swab64(*p); +#endif +} + +/** + * __swahw32p - return a wordswapped 32-bit value from a pointer + * @p: pointer to a naturally-aligned 32-bit value + * + * See __swahw32() for details of wordswapping. + */ +static inline __u32 __swahw32p(const __u32 *p) +{ +#ifdef __arch_swahw32p +	return __arch_swahw32p(p); +#else +	return __swahw32(*p); +#endif +} + +/** + * __swahb32p - return a high and low byteswapped 32-bit value from a pointer + * @p: pointer to a naturally-aligned 32-bit value + * + * See __swahb32() for details of high/low byteswapping. + */ +static inline __u32 __swahb32p(const __u32 *p) +{ +#ifdef __arch_swahb32p +	return __arch_swahb32p(p); +#else +	return __swahb32(*p); +#endif +} + +/** + * __swab16s - byteswap a 16-bit value in-place + * @p: pointer to a naturally-aligned 16-bit value + */ +static inline void __swab16s(__u16 *p) +{ +#ifdef __arch_swab16s +	__arch_swab16s(p); +#else +	*p = __swab16p(p); +#endif +} +/** + * __swab32s - byteswap a 32-bit value in-place + * @p: pointer to a naturally-aligned 32-bit value + */ +static inline void __swab32s(__u32 *p) +{ +#ifdef __arch_swab32s +	__arch_swab32s(p); +#else +	*p = __swab32p(p); +#endif +} + +/** + * __swab64s - byteswap a 64-bit value in-place + * @p: pointer to a naturally-aligned 64-bit value + */ +static inline void __swab64s(__u64 *p) +{ +#ifdef __arch_swab64s +	__arch_swab64s(p); +#else +	*p = __swab64p(p); +#endif +} + +/** + * __swahw32s - wordswap a 32-bit value in-place + * @p: pointer to a naturally-aligned 32-bit value + * + * See __swahw32() for details of wordswapping + */ +static inline void __swahw32s(__u32 *p) +{ +#ifdef __arch_swahw32s +	__arch_swahw32s(p); +#else +	*p = __swahw32p(p); +#endif +} + +/** + * __swahb32s - high and low byteswap a 32-bit value in-place + * @p: pointer to a naturally-aligned 32-bit value + * + * See __swahb32() for details of high and low byte swapping + */ +static inline void __swahb32s(__u32 *p) +{ +#ifdef __arch_swahb32s +	__arch_swahb32s(p); +#else +	*p = __swahb32p(p); +#endif +} + + +#endif /* _UAPI_LINUX_SWAB_H */ diff --git a/include/uapi/linux/synclink.h b/include/uapi/linux/synclink.h new file mode 100644 index 00000000000..7dcb065a5f7 --- /dev/null +++ b/include/uapi/linux/synclink.h @@ -0,0 +1,300 @@ +/* + * SyncLink Multiprotocol Serial Adapter Driver + * + * $Id: synclink.h,v 3.14 2006/07/17 20:15:43 paulkf Exp $ + * + * Copyright (C) 1998-2000 by Microgate Corporation + * + * Redistribution of this file is permitted under + * the terms of the GNU Public License (GPL) + */ + +#ifndef _UAPI_SYNCLINK_H_ +#define _UAPI_SYNCLINK_H_ +#define SYNCLINK_H_VERSION 3.6 + +#include <linux/types.h> + +#define BIT0	0x0001 +#define BIT1	0x0002 +#define BIT2	0x0004 +#define BIT3	0x0008 +#define BIT4	0x0010 +#define BIT5	0x0020 +#define BIT6	0x0040 +#define BIT7	0x0080 +#define BIT8	0x0100 +#define BIT9	0x0200 +#define BIT10	0x0400 +#define BIT11	0x0800 +#define BIT12	0x1000 +#define BIT13	0x2000 +#define BIT14	0x4000 +#define BIT15	0x8000 +#define BIT16	0x00010000 +#define BIT17	0x00020000 +#define BIT18	0x00040000 +#define BIT19	0x00080000 +#define BIT20	0x00100000 +#define BIT21	0x00200000 +#define BIT22	0x00400000 +#define BIT23	0x00800000 +#define BIT24	0x01000000 +#define BIT25	0x02000000 +#define BIT26	0x04000000 +#define BIT27	0x08000000 +#define BIT28	0x10000000 +#define BIT29	0x20000000 +#define BIT30	0x40000000 +#define BIT31	0x80000000 + + +#define HDLC_MAX_FRAME_SIZE	65535 +#define MAX_ASYNC_TRANSMIT	4096 +#define MAX_ASYNC_BUFFER_SIZE	4096 + +#define ASYNC_PARITY_NONE		0 +#define ASYNC_PARITY_EVEN		1 +#define ASYNC_PARITY_ODD		2 +#define ASYNC_PARITY_SPACE		3 + +#define HDLC_FLAG_UNDERRUN_ABORT7	0x0000 +#define HDLC_FLAG_UNDERRUN_ABORT15	0x0001 +#define HDLC_FLAG_UNDERRUN_FLAG		0x0002 +#define HDLC_FLAG_UNDERRUN_CRC		0x0004 +#define HDLC_FLAG_SHARE_ZERO		0x0010 +#define HDLC_FLAG_AUTO_CTS		0x0020 +#define HDLC_FLAG_AUTO_DCD		0x0040 +#define HDLC_FLAG_AUTO_RTS		0x0080 +#define HDLC_FLAG_RXC_DPLL		0x0100 +#define HDLC_FLAG_RXC_BRG		0x0200 +#define HDLC_FLAG_RXC_TXCPIN		0x8000 +#define HDLC_FLAG_RXC_RXCPIN		0x0000 +#define HDLC_FLAG_TXC_DPLL		0x0400 +#define HDLC_FLAG_TXC_BRG		0x0800 +#define HDLC_FLAG_TXC_TXCPIN		0x0000 +#define HDLC_FLAG_TXC_RXCPIN		0x0008 +#define HDLC_FLAG_DPLL_DIV8		0x1000 +#define HDLC_FLAG_DPLL_DIV16		0x2000 +#define HDLC_FLAG_DPLL_DIV32		0x0000 +#define HDLC_FLAG_HDLC_LOOPMODE		0x4000 + +#define HDLC_CRC_NONE			0 +#define HDLC_CRC_16_CCITT		1 +#define HDLC_CRC_32_CCITT		2 +#define HDLC_CRC_MASK			0x00ff +#define HDLC_CRC_RETURN_EX		0x8000 + +#define RX_OK				0 +#define RX_CRC_ERROR			1 + +#define HDLC_TXIDLE_FLAGS		0 +#define HDLC_TXIDLE_ALT_ZEROS_ONES	1 +#define HDLC_TXIDLE_ZEROS		2 +#define HDLC_TXIDLE_ONES		3 +#define HDLC_TXIDLE_ALT_MARK_SPACE	4 +#define HDLC_TXIDLE_SPACE		5 +#define HDLC_TXIDLE_MARK		6 +#define HDLC_TXIDLE_CUSTOM_8            0x10000000 +#define HDLC_TXIDLE_CUSTOM_16           0x20000000 + +#define HDLC_ENCODING_NRZ			0 +#define HDLC_ENCODING_NRZB			1 +#define HDLC_ENCODING_NRZI_MARK			2 +#define HDLC_ENCODING_NRZI_SPACE		3 +#define HDLC_ENCODING_NRZI			HDLC_ENCODING_NRZI_SPACE +#define HDLC_ENCODING_BIPHASE_MARK		4 +#define HDLC_ENCODING_BIPHASE_SPACE		5 +#define HDLC_ENCODING_BIPHASE_LEVEL		6 +#define HDLC_ENCODING_DIFF_BIPHASE_LEVEL	7 + +#define HDLC_PREAMBLE_LENGTH_8BITS	0 +#define HDLC_PREAMBLE_LENGTH_16BITS	1 +#define HDLC_PREAMBLE_LENGTH_32BITS	2 +#define HDLC_PREAMBLE_LENGTH_64BITS	3 + +#define HDLC_PREAMBLE_PATTERN_NONE	0 +#define HDLC_PREAMBLE_PATTERN_ZEROS	1 +#define HDLC_PREAMBLE_PATTERN_FLAGS	2 +#define HDLC_PREAMBLE_PATTERN_10	3 +#define HDLC_PREAMBLE_PATTERN_01	4 +#define HDLC_PREAMBLE_PATTERN_ONES	5 + +#define MGSL_MODE_ASYNC		1 +#define MGSL_MODE_HDLC		2 +#define MGSL_MODE_MONOSYNC	3 +#define MGSL_MODE_BISYNC	4 +#define MGSL_MODE_RAW		6 +#define MGSL_MODE_BASE_CLOCK    7 +#define MGSL_MODE_XSYNC         8 + +#define MGSL_BUS_TYPE_ISA	1 +#define MGSL_BUS_TYPE_EISA	2 +#define MGSL_BUS_TYPE_PCI	5 + +#define MGSL_INTERFACE_MASK     0xf +#define MGSL_INTERFACE_DISABLE  0 +#define MGSL_INTERFACE_RS232    1 +#define MGSL_INTERFACE_V35      2 +#define MGSL_INTERFACE_RS422    3 +#define MGSL_INTERFACE_RTS_EN   0x10 +#define MGSL_INTERFACE_LL       0x20 +#define MGSL_INTERFACE_RL       0x40 +#define MGSL_INTERFACE_MSB_FIRST 0x80 + +typedef struct _MGSL_PARAMS +{ +	/* Common */ + +	unsigned long	mode;		/* Asynchronous or HDLC */ +	unsigned char	loopback;	/* internal loopback mode */ + +	/* HDLC Only */ + +	unsigned short	flags; +	unsigned char	encoding;	/* NRZ, NRZI, etc. */ +	unsigned long	clock_speed;	/* external clock speed in bits per second */ +	unsigned char	addr_filter;	/* receive HDLC address filter, 0xFF = disable */ +	unsigned short	crc_type;	/* None, CRC16-CCITT, or CRC32-CCITT */ +	unsigned char	preamble_length; +	unsigned char	preamble; + +	/* Async Only */ + +	unsigned long	data_rate;	/* bits per second */ +	unsigned char	data_bits;	/* 7 or 8 data bits */ +	unsigned char	stop_bits;	/* 1 or 2 stop bits */ +	unsigned char	parity;		/* none, even, or odd */ + +} MGSL_PARAMS, *PMGSL_PARAMS; + +#define MICROGATE_VENDOR_ID 0x13c0 +#define SYNCLINK_DEVICE_ID 0x0010 +#define MGSCC_DEVICE_ID 0x0020 +#define SYNCLINK_SCA_DEVICE_ID 0x0030 +#define SYNCLINK_GT_DEVICE_ID 0x0070 +#define SYNCLINK_GT4_DEVICE_ID 0x0080 +#define SYNCLINK_AC_DEVICE_ID  0x0090 +#define SYNCLINK_GT2_DEVICE_ID 0x00A0 +#define MGSL_MAX_SERIAL_NUMBER 30 + +/* +** device diagnostics status +*/ + +#define DiagStatus_OK				0 +#define DiagStatus_AddressFailure		1 +#define DiagStatus_AddressConflict		2 +#define DiagStatus_IrqFailure			3 +#define DiagStatus_IrqConflict			4 +#define DiagStatus_DmaFailure			5 +#define DiagStatus_DmaConflict			6 +#define DiagStatus_PciAdapterNotFound		7 +#define DiagStatus_CantAssignPciResources	8 +#define DiagStatus_CantAssignPciMemAddr		9 +#define DiagStatus_CantAssignPciIoAddr		10 +#define DiagStatus_CantAssignPciIrq		11 +#define DiagStatus_MemoryError			12 + +#define SerialSignal_DCD            0x01     /* Data Carrier Detect */ +#define SerialSignal_TXD            0x02     /* Transmit Data */ +#define SerialSignal_RI             0x04     /* Ring Indicator */ +#define SerialSignal_RXD            0x08     /* Receive Data */ +#define SerialSignal_CTS            0x10     /* Clear to Send */ +#define SerialSignal_RTS            0x20     /* Request to Send */ +#define SerialSignal_DSR            0x40     /* Data Set Ready */ +#define SerialSignal_DTR            0x80     /* Data Terminal Ready */ + + +/* + * Counters of the input lines (CTS, DSR, RI, CD) interrupts + */ +struct mgsl_icount { +	__u32	cts, dsr, rng, dcd, tx, rx; +	__u32	frame, parity, overrun, brk; +	__u32	buf_overrun; +	__u32	txok; +	__u32	txunder; +	__u32	txabort; +	__u32	txtimeout; +	__u32	rxshort; +	__u32	rxlong; +	__u32	rxabort; +	__u32	rxover; +	__u32	rxcrc; +	__u32	rxok; +	__u32	exithunt; +	__u32	rxidle; +}; + +struct gpio_desc { +	__u32 state; +	__u32 smask; +	__u32 dir; +	__u32 dmask; +}; + +#define DEBUG_LEVEL_DATA	1 +#define DEBUG_LEVEL_ERROR 	2 +#define DEBUG_LEVEL_INFO  	3 +#define DEBUG_LEVEL_BH    	4 +#define DEBUG_LEVEL_ISR		5 + +/* +** Event bit flags for use with MgslWaitEvent +*/ + +#define MgslEvent_DsrActive	0x0001 +#define MgslEvent_DsrInactive	0x0002 +#define MgslEvent_Dsr		0x0003 +#define MgslEvent_CtsActive	0x0004 +#define MgslEvent_CtsInactive	0x0008 +#define MgslEvent_Cts		0x000c +#define MgslEvent_DcdActive	0x0010 +#define MgslEvent_DcdInactive	0x0020 +#define MgslEvent_Dcd		0x0030 +#define MgslEvent_RiActive	0x0040 +#define MgslEvent_RiInactive	0x0080 +#define MgslEvent_Ri		0x00c0 +#define MgslEvent_ExitHuntMode	0x0100 +#define MgslEvent_IdleReceived	0x0200 + +/* Private IOCTL codes: + * + * MGSL_IOCSPARAMS	set MGSL_PARAMS structure values + * MGSL_IOCGPARAMS	get current MGSL_PARAMS structure values + * MGSL_IOCSTXIDLE	set current transmit idle mode + * MGSL_IOCGTXIDLE	get current transmit idle mode + * MGSL_IOCTXENABLE	enable or disable transmitter + * MGSL_IOCRXENABLE	enable or disable receiver + * MGSL_IOCTXABORT	abort transmitting frame (HDLC) + * MGSL_IOCGSTATS	return current statistics + * MGSL_IOCWAITEVENT	wait for specified event to occur + * MGSL_LOOPTXDONE	transmit in HDLC LoopMode done + * MGSL_IOCSIF          set the serial interface type + * MGSL_IOCGIF          get the serial interface type + */ +#define MGSL_MAGIC_IOC	'm' +#define MGSL_IOCSPARAMS		_IOW(MGSL_MAGIC_IOC,0,struct _MGSL_PARAMS) +#define MGSL_IOCGPARAMS		_IOR(MGSL_MAGIC_IOC,1,struct _MGSL_PARAMS) +#define MGSL_IOCSTXIDLE		_IO(MGSL_MAGIC_IOC,2) +#define MGSL_IOCGTXIDLE		_IO(MGSL_MAGIC_IOC,3) +#define MGSL_IOCTXENABLE	_IO(MGSL_MAGIC_IOC,4) +#define MGSL_IOCRXENABLE	_IO(MGSL_MAGIC_IOC,5) +#define MGSL_IOCTXABORT		_IO(MGSL_MAGIC_IOC,6) +#define MGSL_IOCGSTATS		_IO(MGSL_MAGIC_IOC,7) +#define MGSL_IOCWAITEVENT	_IOWR(MGSL_MAGIC_IOC,8,int) +#define MGSL_IOCCLRMODCOUNT	_IO(MGSL_MAGIC_IOC,15) +#define MGSL_IOCLOOPTXDONE	_IO(MGSL_MAGIC_IOC,9) +#define MGSL_IOCSIF		_IO(MGSL_MAGIC_IOC,10) +#define MGSL_IOCGIF		_IO(MGSL_MAGIC_IOC,11) +#define MGSL_IOCSGPIO		_IOW(MGSL_MAGIC_IOC,16,struct gpio_desc) +#define MGSL_IOCGGPIO		_IOR(MGSL_MAGIC_IOC,17,struct gpio_desc) +#define MGSL_IOCWAITGPIO	_IOWR(MGSL_MAGIC_IOC,18,struct gpio_desc) +#define MGSL_IOCSXSYNC		_IO(MGSL_MAGIC_IOC, 19) +#define MGSL_IOCGXSYNC		_IO(MGSL_MAGIC_IOC, 20) +#define MGSL_IOCSXCTRL		_IO(MGSL_MAGIC_IOC, 21) +#define MGSL_IOCGXCTRL		_IO(MGSL_MAGIC_IOC, 22) + + +#endif /* _UAPI_SYNCLINK_H_ */ diff --git a/include/uapi/linux/sysctl.h b/include/uapi/linux/sysctl.h new file mode 100644 index 00000000000..6d6721341f4 --- /dev/null +++ b/include/uapi/linux/sysctl.h @@ -0,0 +1,932 @@ +/* + * sysctl.h: General linux system control interface + * + * Begun 24 March 1995, Stephen Tweedie + * + **************************************************************** + **************************************************************** + ** + **  WARNING: + **  The values in this file are exported to user space via  + **  the sysctl() binary interface.  Do *NOT* change the + **  numbering of any existing values here, and do not change + **  any numbers within any one set of values.  If you have to + **  redefine an existing interface, use a new number for it. + **  The kernel will then return -ENOTDIR to any application using + **  the old binary interface. + ** + **************************************************************** + **************************************************************** + */ + +#ifndef _UAPI_LINUX_SYSCTL_H +#define _UAPI_LINUX_SYSCTL_H + +#include <linux/kernel.h> +#include <linux/types.h> +#include <linux/compiler.h> + +struct completion; + +#define CTL_MAXNAME 10		/* how many path components do we allow in a +				   call to sysctl?   In other words, what is +				   the largest acceptable value for the nlen +				   member of a struct __sysctl_args to have? */ + +struct __sysctl_args { +	int __user *name; +	int nlen; +	void __user *oldval; +	size_t __user *oldlenp; +	void __user *newval; +	size_t newlen; +	unsigned long __unused[4]; +}; + +/* Define sysctl names first */ + +/* Top-level names: */ + +enum +{ +	CTL_KERN=1,		/* General kernel info and control */ +	CTL_VM=2,		/* VM management */ +	CTL_NET=3,		/* Networking */ +	CTL_PROC=4,		/* removal breaks strace(1) compilation */ +	CTL_FS=5,		/* Filesystems */ +	CTL_DEBUG=6,		/* Debugging */ +	CTL_DEV=7,		/* Devices */ +	CTL_BUS=8,		/* Busses */ +	CTL_ABI=9,		/* Binary emulation */ +	CTL_CPU=10,		/* CPU stuff (speed scaling, etc) */ +	CTL_ARLAN=254,		/* arlan wireless driver */ +	CTL_S390DBF=5677,	/* s390 debug */ +	CTL_SUNRPC=7249,	/* sunrpc debug */ +	CTL_PM=9899,		/* frv power management */ +	CTL_FRV=9898,		/* frv specific sysctls */ +}; + +/* CTL_BUS names: */ +enum +{ +	CTL_BUS_ISA=1		/* ISA */ +}; + +/* /proc/sys/fs/inotify/ */ +enum +{ +	INOTIFY_MAX_USER_INSTANCES=1,	/* max instances per user */ +	INOTIFY_MAX_USER_WATCHES=2,	/* max watches per user */ +	INOTIFY_MAX_QUEUED_EVENTS=3	/* max queued events per instance */ +}; + +/* CTL_KERN names: */ +enum +{ +	KERN_OSTYPE=1,		/* string: system version */ +	KERN_OSRELEASE=2,	/* string: system release */ +	KERN_OSREV=3,		/* int: system revision */ +	KERN_VERSION=4,		/* string: compile time info */ +	KERN_SECUREMASK=5,	/* struct: maximum rights mask */ +	KERN_PROF=6,		/* table: profiling information */ +	KERN_NODENAME=7,	/* string: hostname */ +	KERN_DOMAINNAME=8,	/* string: domainname */ + +	KERN_PANIC=15,		/* int: panic timeout */ +	KERN_REALROOTDEV=16,	/* real root device to mount after initrd */ + +	KERN_SPARC_REBOOT=21,	/* reboot command on Sparc */ +	KERN_CTLALTDEL=22,	/* int: allow ctl-alt-del to reboot */ +	KERN_PRINTK=23,		/* struct: control printk logging parameters */ +	KERN_NAMETRANS=24,	/* Name translation */ +	KERN_PPC_HTABRECLAIM=25, /* turn htab reclaimation on/off on PPC */ +	KERN_PPC_ZEROPAGED=26,	/* turn idle page zeroing on/off on PPC */ +	KERN_PPC_POWERSAVE_NAP=27, /* use nap mode for power saving */ +	KERN_MODPROBE=28,	/* string: modprobe path */ +	KERN_SG_BIG_BUFF=29,	/* int: sg driver reserved buffer size */ +	KERN_ACCT=30,		/* BSD process accounting parameters */ +	KERN_PPC_L2CR=31,	/* l2cr register on PPC */ + +	KERN_RTSIGNR=32,	/* Number of rt sigs queued */ +	KERN_RTSIGMAX=33,	/* Max queuable */ +	 +	KERN_SHMMAX=34,         /* long: Maximum shared memory segment */ +	KERN_MSGMAX=35,         /* int: Maximum size of a messege */ +	KERN_MSGMNB=36,         /* int: Maximum message queue size */ +	KERN_MSGPOOL=37,        /* int: Maximum system message pool size */ +	KERN_SYSRQ=38,		/* int: Sysreq enable */ +	KERN_MAX_THREADS=39,	/* int: Maximum nr of threads in the system */ + 	KERN_RANDOM=40,		/* Random driver */ + 	KERN_SHMALL=41,		/* int: Maximum size of shared memory */ + 	KERN_MSGMNI=42,		/* int: msg queue identifiers */ + 	KERN_SEM=43,		/* struct: sysv semaphore limits */ + 	KERN_SPARC_STOP_A=44,	/* int: Sparc Stop-A enable */ + 	KERN_SHMMNI=45,		/* int: shm array identifiers */ +	KERN_OVERFLOWUID=46,	/* int: overflow UID */ +	KERN_OVERFLOWGID=47,	/* int: overflow GID */ +	KERN_SHMPATH=48,	/* string: path to shm fs */ +	KERN_HOTPLUG=49,	/* string: path to uevent helper (deprecated) */ +	KERN_IEEE_EMULATION_WARNINGS=50, /* int: unimplemented ieee instructions */ +	KERN_S390_USER_DEBUG_LOGGING=51,  /* int: dumps of user faults */ +	KERN_CORE_USES_PID=52,		/* int: use core or core.%pid */ +	KERN_TAINTED=53,	/* int: various kernel tainted flags */ +	KERN_CADPID=54,		/* int: PID of the process to notify on CAD */ +	KERN_PIDMAX=55,		/* int: PID # limit */ +  	KERN_CORE_PATTERN=56,	/* string: pattern for core-file names */ +	KERN_PANIC_ON_OOPS=57,  /* int: whether we will panic on an oops */ +	KERN_HPPA_PWRSW=58,	/* int: hppa soft-power enable */ +	KERN_HPPA_UNALIGNED=59,	/* int: hppa unaligned-trap enable */ +	KERN_PRINTK_RATELIMIT=60, /* int: tune printk ratelimiting */ +	KERN_PRINTK_RATELIMIT_BURST=61,	/* int: tune printk ratelimiting */ +	KERN_PTY=62,		/* dir: pty driver */ +	KERN_NGROUPS_MAX=63,	/* int: NGROUPS_MAX */ +	KERN_SPARC_SCONS_PWROFF=64, /* int: serial console power-off halt */ +	KERN_HZ_TIMER=65,	/* int: hz timer on or off */ +	KERN_UNKNOWN_NMI_PANIC=66, /* int: unknown nmi panic flag */ +	KERN_BOOTLOADER_TYPE=67, /* int: boot loader type */ +	KERN_RANDOMIZE=68, /* int: randomize virtual address space */ +	KERN_SETUID_DUMPABLE=69, /* int: behaviour of dumps for setuid core */ +	KERN_SPIN_RETRY=70,	/* int: number of spinlock retries */ +	KERN_ACPI_VIDEO_FLAGS=71, /* int: flags for setting up video after ACPI sleep */ +	KERN_IA64_UNALIGNED=72, /* int: ia64 unaligned userland trap enable */ +	KERN_COMPAT_LOG=73,	/* int: print compat layer  messages */ +	KERN_MAX_LOCK_DEPTH=74, /* int: rtmutex's maximum lock depth */ +	KERN_NMI_WATCHDOG=75, /* int: enable/disable nmi watchdog */ +	KERN_PANIC_ON_NMI=76, /* int: whether we will panic on an unrecovered */ +}; + + + +/* CTL_VM names: */ +enum +{ +	VM_UNUSED1=1,		/* was: struct: Set vm swapping control */ +	VM_UNUSED2=2,		/* was; int: Linear or sqrt() swapout for hogs */ +	VM_UNUSED3=3,		/* was: struct: Set free page thresholds */ +	VM_UNUSED4=4,		/* Spare */ +	VM_OVERCOMMIT_MEMORY=5,	/* Turn off the virtual memory safety limit */ +	VM_UNUSED5=6,		/* was: struct: Set buffer memory thresholds */ +	VM_UNUSED7=7,		/* was: struct: Set cache memory thresholds */ +	VM_UNUSED8=8,		/* was: struct: Control kswapd behaviour */ +	VM_UNUSED9=9,		/* was: struct: Set page table cache parameters */ +	VM_PAGE_CLUSTER=10,	/* int: set number of pages to swap together */ +	VM_DIRTY_BACKGROUND=11,	/* dirty_background_ratio */ +	VM_DIRTY_RATIO=12,	/* dirty_ratio */ +	VM_DIRTY_WB_CS=13,	/* dirty_writeback_centisecs */ +	VM_DIRTY_EXPIRE_CS=14,	/* dirty_expire_centisecs */ +	VM_NR_PDFLUSH_THREADS=15, /* nr_pdflush_threads */ +	VM_OVERCOMMIT_RATIO=16, /* percent of RAM to allow overcommit in */ +	VM_PAGEBUF=17,		/* struct: Control pagebuf parameters */ +	VM_HUGETLB_PAGES=18,	/* int: Number of available Huge Pages */ +	VM_SWAPPINESS=19,	/* Tendency to steal mapped memory */ +	VM_LOWMEM_RESERVE_RATIO=20,/* reservation ratio for lower memory zones */ +	VM_MIN_FREE_KBYTES=21,	/* Minimum free kilobytes to maintain */ +	VM_MAX_MAP_COUNT=22,	/* int: Maximum number of mmaps/address-space */ +	VM_LAPTOP_MODE=23,	/* vm laptop mode */ +	VM_BLOCK_DUMP=24,	/* block dump mode */ +	VM_HUGETLB_GROUP=25,	/* permitted hugetlb group */ +	VM_VFS_CACHE_PRESSURE=26, /* dcache/icache reclaim pressure */ +	VM_LEGACY_VA_LAYOUT=27, /* legacy/compatibility virtual address space layout */ +	VM_SWAP_TOKEN_TIMEOUT=28, /* default time for token time out */ +	VM_DROP_PAGECACHE=29,	/* int: nuke lots of pagecache */ +	VM_PERCPU_PAGELIST_FRACTION=30,/* int: fraction of pages in each percpu_pagelist */ +	VM_ZONE_RECLAIM_MODE=31, /* reclaim local zone memory before going off node */ +	VM_MIN_UNMAPPED=32,	/* Set min percent of unmapped pages */ +	VM_PANIC_ON_OOM=33,	/* panic at out-of-memory */ +	VM_VDSO_ENABLED=34,	/* map VDSO into new processes? */ +	VM_MIN_SLAB=35,		 /* Percent pages ignored by zone reclaim */ +}; + + +/* CTL_NET names: */ +enum +{ +	NET_CORE=1, +	NET_ETHER=2, +	NET_802=3, +	NET_UNIX=4, +	NET_IPV4=5, +	NET_IPX=6, +	NET_ATALK=7, +	NET_NETROM=8, +	NET_AX25=9, +	NET_BRIDGE=10, +	NET_ROSE=11, +	NET_IPV6=12, +	NET_X25=13, +	NET_TR=14, +	NET_DECNET=15, +	NET_ECONET=16, +	NET_SCTP=17, +	NET_LLC=18, +	NET_NETFILTER=19, +	NET_DCCP=20, +	NET_IRDA=412, +}; + +/* /proc/sys/kernel/random */ +enum +{ +	RANDOM_POOLSIZE=1, +	RANDOM_ENTROPY_COUNT=2, +	RANDOM_READ_THRESH=3, +	RANDOM_WRITE_THRESH=4, +	RANDOM_BOOT_ID=5, +	RANDOM_UUID=6 +}; + +/* /proc/sys/kernel/pty */ +enum +{ +	PTY_MAX=1, +	PTY_NR=2 +}; + +/* /proc/sys/bus/isa */ +enum +{ +	BUS_ISA_MEM_BASE=1, +	BUS_ISA_PORT_BASE=2, +	BUS_ISA_PORT_SHIFT=3 +}; + +/* /proc/sys/net/core */ +enum +{ +	NET_CORE_WMEM_MAX=1, +	NET_CORE_RMEM_MAX=2, +	NET_CORE_WMEM_DEFAULT=3, +	NET_CORE_RMEM_DEFAULT=4, +/* was	NET_CORE_DESTROY_DELAY */ +	NET_CORE_MAX_BACKLOG=6, +	NET_CORE_FASTROUTE=7, +	NET_CORE_MSG_COST=8, +	NET_CORE_MSG_BURST=9, +	NET_CORE_OPTMEM_MAX=10, +	NET_CORE_HOT_LIST_LENGTH=11, +	NET_CORE_DIVERT_VERSION=12, +	NET_CORE_NO_CONG_THRESH=13, +	NET_CORE_NO_CONG=14, +	NET_CORE_LO_CONG=15, +	NET_CORE_MOD_CONG=16, +	NET_CORE_DEV_WEIGHT=17, +	NET_CORE_SOMAXCONN=18, +	NET_CORE_BUDGET=19, +	NET_CORE_AEVENT_ETIME=20, +	NET_CORE_AEVENT_RSEQTH=21, +	NET_CORE_WARNINGS=22, +}; + +/* /proc/sys/net/ethernet */ + +/* /proc/sys/net/802 */ + +/* /proc/sys/net/unix */ + +enum +{ +	NET_UNIX_DESTROY_DELAY=1, +	NET_UNIX_DELETE_DELAY=2, +	NET_UNIX_MAX_DGRAM_QLEN=3, +}; + +/* /proc/sys/net/netfilter */ +enum +{ +	NET_NF_CONNTRACK_MAX=1, +	NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT=2, +	NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV=3, +	NET_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED=4, +	NET_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT=5, +	NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT=6, +	NET_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK=7, +	NET_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT=8, +	NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE=9, +	NET_NF_CONNTRACK_UDP_TIMEOUT=10, +	NET_NF_CONNTRACK_UDP_TIMEOUT_STREAM=11, +	NET_NF_CONNTRACK_ICMP_TIMEOUT=12, +	NET_NF_CONNTRACK_GENERIC_TIMEOUT=13, +	NET_NF_CONNTRACK_BUCKETS=14, +	NET_NF_CONNTRACK_LOG_INVALID=15, +	NET_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS=16, +	NET_NF_CONNTRACK_TCP_LOOSE=17, +	NET_NF_CONNTRACK_TCP_BE_LIBERAL=18, +	NET_NF_CONNTRACK_TCP_MAX_RETRANS=19, +	NET_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED=20, +	NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT=21, +	NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED=22, +	NET_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED=23, +	NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT=24, +	NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD=25, +	NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT=26, +	NET_NF_CONNTRACK_COUNT=27, +	NET_NF_CONNTRACK_ICMPV6_TIMEOUT=28, +	NET_NF_CONNTRACK_FRAG6_TIMEOUT=29, +	NET_NF_CONNTRACK_FRAG6_LOW_THRESH=30, +	NET_NF_CONNTRACK_FRAG6_HIGH_THRESH=31, +	NET_NF_CONNTRACK_CHECKSUM=32, +}; + +/* /proc/sys/net/ipv4 */ +enum +{ +	/* v2.0 compatibile variables */ +	NET_IPV4_FORWARD=8, +	NET_IPV4_DYNADDR=9, + +	NET_IPV4_CONF=16, +	NET_IPV4_NEIGH=17, +	NET_IPV4_ROUTE=18, +	NET_IPV4_FIB_HASH=19, +	NET_IPV4_NETFILTER=20, + +	NET_IPV4_TCP_TIMESTAMPS=33, +	NET_IPV4_TCP_WINDOW_SCALING=34, +	NET_IPV4_TCP_SACK=35, +	NET_IPV4_TCP_RETRANS_COLLAPSE=36, +	NET_IPV4_DEFAULT_TTL=37, +	NET_IPV4_AUTOCONFIG=38, +	NET_IPV4_NO_PMTU_DISC=39, +	NET_IPV4_TCP_SYN_RETRIES=40, +	NET_IPV4_IPFRAG_HIGH_THRESH=41, +	NET_IPV4_IPFRAG_LOW_THRESH=42, +	NET_IPV4_IPFRAG_TIME=43, +	NET_IPV4_TCP_MAX_KA_PROBES=44, +	NET_IPV4_TCP_KEEPALIVE_TIME=45, +	NET_IPV4_TCP_KEEPALIVE_PROBES=46, +	NET_IPV4_TCP_RETRIES1=47, +	NET_IPV4_TCP_RETRIES2=48, +	NET_IPV4_TCP_FIN_TIMEOUT=49, +	NET_IPV4_IP_MASQ_DEBUG=50, +	NET_TCP_SYNCOOKIES=51, +	NET_TCP_STDURG=52, +	NET_TCP_RFC1337=53, +	NET_TCP_SYN_TAILDROP=54, +	NET_TCP_MAX_SYN_BACKLOG=55, +	NET_IPV4_LOCAL_PORT_RANGE=56, +	NET_IPV4_ICMP_ECHO_IGNORE_ALL=57, +	NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS=58, +	NET_IPV4_ICMP_SOURCEQUENCH_RATE=59, +	NET_IPV4_ICMP_DESTUNREACH_RATE=60, +	NET_IPV4_ICMP_TIMEEXCEED_RATE=61, +	NET_IPV4_ICMP_PARAMPROB_RATE=62, +	NET_IPV4_ICMP_ECHOREPLY_RATE=63, +	NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES=64, +	NET_IPV4_IGMP_MAX_MEMBERSHIPS=65, +	NET_TCP_TW_RECYCLE=66, +	NET_IPV4_ALWAYS_DEFRAG=67, +	NET_IPV4_TCP_KEEPALIVE_INTVL=68, +	NET_IPV4_INET_PEER_THRESHOLD=69, +	NET_IPV4_INET_PEER_MINTTL=70, +	NET_IPV4_INET_PEER_MAXTTL=71, +	NET_IPV4_INET_PEER_GC_MINTIME=72, +	NET_IPV4_INET_PEER_GC_MAXTIME=73, +	NET_TCP_ORPHAN_RETRIES=74, +	NET_TCP_ABORT_ON_OVERFLOW=75, +	NET_TCP_SYNACK_RETRIES=76, +	NET_TCP_MAX_ORPHANS=77, +	NET_TCP_MAX_TW_BUCKETS=78, +	NET_TCP_FACK=79, +	NET_TCP_REORDERING=80, +	NET_TCP_ECN=81, +	NET_TCP_DSACK=82, +	NET_TCP_MEM=83, +	NET_TCP_WMEM=84, +	NET_TCP_RMEM=85, +	NET_TCP_APP_WIN=86, +	NET_TCP_ADV_WIN_SCALE=87, +	NET_IPV4_NONLOCAL_BIND=88, +	NET_IPV4_ICMP_RATELIMIT=89, +	NET_IPV4_ICMP_RATEMASK=90, +	NET_TCP_TW_REUSE=91, +	NET_TCP_FRTO=92, +	NET_TCP_LOW_LATENCY=93, +	NET_IPV4_IPFRAG_SECRET_INTERVAL=94, +	NET_IPV4_IGMP_MAX_MSF=96, +	NET_TCP_NO_METRICS_SAVE=97, +	NET_TCP_DEFAULT_WIN_SCALE=105, +	NET_TCP_MODERATE_RCVBUF=106, +	NET_TCP_TSO_WIN_DIVISOR=107, +	NET_TCP_BIC_BETA=108, +	NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR=109, +	NET_TCP_CONG_CONTROL=110, +	NET_TCP_ABC=111, +	NET_IPV4_IPFRAG_MAX_DIST=112, + 	NET_TCP_MTU_PROBING=113, +	NET_TCP_BASE_MSS=114, +	NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS=115, +	NET_TCP_DMA_COPYBREAK=116, +	NET_TCP_SLOW_START_AFTER_IDLE=117, +	NET_CIPSOV4_CACHE_ENABLE=118, +	NET_CIPSOV4_CACHE_BUCKET_SIZE=119, +	NET_CIPSOV4_RBM_OPTFMT=120, +	NET_CIPSOV4_RBM_STRICTVALID=121, +	NET_TCP_AVAIL_CONG_CONTROL=122, +	NET_TCP_ALLOWED_CONG_CONTROL=123, +	NET_TCP_MAX_SSTHRESH=124, +	NET_TCP_FRTO_RESPONSE=125, +}; + +enum { +	NET_IPV4_ROUTE_FLUSH=1, +	NET_IPV4_ROUTE_MIN_DELAY=2, /* obsolete since 2.6.25 */ +	NET_IPV4_ROUTE_MAX_DELAY=3, /* obsolete since 2.6.25 */ +	NET_IPV4_ROUTE_GC_THRESH=4, +	NET_IPV4_ROUTE_MAX_SIZE=5, +	NET_IPV4_ROUTE_GC_MIN_INTERVAL=6, +	NET_IPV4_ROUTE_GC_TIMEOUT=7, +	NET_IPV4_ROUTE_GC_INTERVAL=8, /* obsolete since 2.6.38 */ +	NET_IPV4_ROUTE_REDIRECT_LOAD=9, +	NET_IPV4_ROUTE_REDIRECT_NUMBER=10, +	NET_IPV4_ROUTE_REDIRECT_SILENCE=11, +	NET_IPV4_ROUTE_ERROR_COST=12, +	NET_IPV4_ROUTE_ERROR_BURST=13, +	NET_IPV4_ROUTE_GC_ELASTICITY=14, +	NET_IPV4_ROUTE_MTU_EXPIRES=15, +	NET_IPV4_ROUTE_MIN_PMTU=16, +	NET_IPV4_ROUTE_MIN_ADVMSS=17, +	NET_IPV4_ROUTE_SECRET_INTERVAL=18, +	NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS=19, +}; + +enum +{ +	NET_PROTO_CONF_ALL=-2, +	NET_PROTO_CONF_DEFAULT=-3 + +	/* And device ifindices ... */ +}; + +enum +{ +	NET_IPV4_CONF_FORWARDING=1, +	NET_IPV4_CONF_MC_FORWARDING=2, +	NET_IPV4_CONF_PROXY_ARP=3, +	NET_IPV4_CONF_ACCEPT_REDIRECTS=4, +	NET_IPV4_CONF_SECURE_REDIRECTS=5, +	NET_IPV4_CONF_SEND_REDIRECTS=6, +	NET_IPV4_CONF_SHARED_MEDIA=7, +	NET_IPV4_CONF_RP_FILTER=8, +	NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE=9, +	NET_IPV4_CONF_BOOTP_RELAY=10, +	NET_IPV4_CONF_LOG_MARTIANS=11, +	NET_IPV4_CONF_TAG=12, +	NET_IPV4_CONF_ARPFILTER=13, +	NET_IPV4_CONF_MEDIUM_ID=14, +	NET_IPV4_CONF_NOXFRM=15, +	NET_IPV4_CONF_NOPOLICY=16, +	NET_IPV4_CONF_FORCE_IGMP_VERSION=17, +	NET_IPV4_CONF_ARP_ANNOUNCE=18, +	NET_IPV4_CONF_ARP_IGNORE=19, +	NET_IPV4_CONF_PROMOTE_SECONDARIES=20, +	NET_IPV4_CONF_ARP_ACCEPT=21, +	NET_IPV4_CONF_ARP_NOTIFY=22, +}; + +/* /proc/sys/net/ipv4/netfilter */ +enum +{ +	NET_IPV4_NF_CONNTRACK_MAX=1, +	NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT=2, +	NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV=3, +	NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED=4, +	NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT=5, +	NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT=6, +	NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK=7, +	NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT=8, +	NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE=9, +	NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT=10, +	NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT_STREAM=11, +	NET_IPV4_NF_CONNTRACK_ICMP_TIMEOUT=12, +	NET_IPV4_NF_CONNTRACK_GENERIC_TIMEOUT=13, +	NET_IPV4_NF_CONNTRACK_BUCKETS=14, +	NET_IPV4_NF_CONNTRACK_LOG_INVALID=15, +	NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS=16, +	NET_IPV4_NF_CONNTRACK_TCP_LOOSE=17, +	NET_IPV4_NF_CONNTRACK_TCP_BE_LIBERAL=18, +	NET_IPV4_NF_CONNTRACK_TCP_MAX_RETRANS=19, + 	NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED=20, + 	NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT=21, + 	NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED=22, + 	NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED=23, + 	NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT=24, + 	NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD=25, + 	NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT=26, +	NET_IPV4_NF_CONNTRACK_COUNT=27, +	NET_IPV4_NF_CONNTRACK_CHECKSUM=28, +}; +  +/* /proc/sys/net/ipv6 */ +enum { +	NET_IPV6_CONF=16, +	NET_IPV6_NEIGH=17, +	NET_IPV6_ROUTE=18, +	NET_IPV6_ICMP=19, +	NET_IPV6_BINDV6ONLY=20, +	NET_IPV6_IP6FRAG_HIGH_THRESH=21, +	NET_IPV6_IP6FRAG_LOW_THRESH=22, +	NET_IPV6_IP6FRAG_TIME=23, +	NET_IPV6_IP6FRAG_SECRET_INTERVAL=24, +	NET_IPV6_MLD_MAX_MSF=25, +}; + +enum { +	NET_IPV6_ROUTE_FLUSH=1, +	NET_IPV6_ROUTE_GC_THRESH=2, +	NET_IPV6_ROUTE_MAX_SIZE=3, +	NET_IPV6_ROUTE_GC_MIN_INTERVAL=4, +	NET_IPV6_ROUTE_GC_TIMEOUT=5, +	NET_IPV6_ROUTE_GC_INTERVAL=6, +	NET_IPV6_ROUTE_GC_ELASTICITY=7, +	NET_IPV6_ROUTE_MTU_EXPIRES=8, +	NET_IPV6_ROUTE_MIN_ADVMSS=9, +	NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS=10 +}; + +enum { +	NET_IPV6_FORWARDING=1, +	NET_IPV6_HOP_LIMIT=2, +	NET_IPV6_MTU=3, +	NET_IPV6_ACCEPT_RA=4, +	NET_IPV6_ACCEPT_REDIRECTS=5, +	NET_IPV6_AUTOCONF=6, +	NET_IPV6_DAD_TRANSMITS=7, +	NET_IPV6_RTR_SOLICITS=8, +	NET_IPV6_RTR_SOLICIT_INTERVAL=9, +	NET_IPV6_RTR_SOLICIT_DELAY=10, +	NET_IPV6_USE_TEMPADDR=11, +	NET_IPV6_TEMP_VALID_LFT=12, +	NET_IPV6_TEMP_PREFERED_LFT=13, +	NET_IPV6_REGEN_MAX_RETRY=14, +	NET_IPV6_MAX_DESYNC_FACTOR=15, +	NET_IPV6_MAX_ADDRESSES=16, +	NET_IPV6_FORCE_MLD_VERSION=17, +	NET_IPV6_ACCEPT_RA_DEFRTR=18, +	NET_IPV6_ACCEPT_RA_PINFO=19, +	NET_IPV6_ACCEPT_RA_RTR_PREF=20, +	NET_IPV6_RTR_PROBE_INTERVAL=21, +	NET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN=22, +	NET_IPV6_PROXY_NDP=23, +	NET_IPV6_ACCEPT_SOURCE_ROUTE=25, +	__NET_IPV6_MAX +}; + +/* /proc/sys/net/ipv6/icmp */ +enum { +	NET_IPV6_ICMP_RATELIMIT=1 +}; + +/* /proc/sys/net/<protocol>/neigh/<dev> */ +enum { +	NET_NEIGH_MCAST_SOLICIT=1, +	NET_NEIGH_UCAST_SOLICIT=2, +	NET_NEIGH_APP_SOLICIT=3, +	NET_NEIGH_RETRANS_TIME=4, +	NET_NEIGH_REACHABLE_TIME=5, +	NET_NEIGH_DELAY_PROBE_TIME=6, +	NET_NEIGH_GC_STALE_TIME=7, +	NET_NEIGH_UNRES_QLEN=8, +	NET_NEIGH_PROXY_QLEN=9, +	NET_NEIGH_ANYCAST_DELAY=10, +	NET_NEIGH_PROXY_DELAY=11, +	NET_NEIGH_LOCKTIME=12, +	NET_NEIGH_GC_INTERVAL=13, +	NET_NEIGH_GC_THRESH1=14, +	NET_NEIGH_GC_THRESH2=15, +	NET_NEIGH_GC_THRESH3=16, +	NET_NEIGH_RETRANS_TIME_MS=17, +	NET_NEIGH_REACHABLE_TIME_MS=18, +}; + +/* /proc/sys/net/dccp */ +enum { +	NET_DCCP_DEFAULT=1, +}; + +/* /proc/sys/net/ipx */ +enum { +	NET_IPX_PPROP_BROADCASTING=1, +	NET_IPX_FORWARDING=2 +}; + +/* /proc/sys/net/llc */ +enum { +	NET_LLC2=1, +	NET_LLC_STATION=2, +}; + +/* /proc/sys/net/llc/llc2 */ +enum { +	NET_LLC2_TIMEOUT=1, +}; + +/* /proc/sys/net/llc/station */ +enum { +	NET_LLC_STATION_ACK_TIMEOUT=1, +}; + +/* /proc/sys/net/llc/llc2/timeout */ +enum { +	NET_LLC2_ACK_TIMEOUT=1, +	NET_LLC2_P_TIMEOUT=2, +	NET_LLC2_REJ_TIMEOUT=3, +	NET_LLC2_BUSY_TIMEOUT=4, +}; + +/* /proc/sys/net/appletalk */ +enum { +	NET_ATALK_AARP_EXPIRY_TIME=1, +	NET_ATALK_AARP_TICK_TIME=2, +	NET_ATALK_AARP_RETRANSMIT_LIMIT=3, +	NET_ATALK_AARP_RESOLVE_TIME=4 +}; + + +/* /proc/sys/net/netrom */ +enum { +	NET_NETROM_DEFAULT_PATH_QUALITY=1, +	NET_NETROM_OBSOLESCENCE_COUNT_INITIALISER=2, +	NET_NETROM_NETWORK_TTL_INITIALISER=3, +	NET_NETROM_TRANSPORT_TIMEOUT=4, +	NET_NETROM_TRANSPORT_MAXIMUM_TRIES=5, +	NET_NETROM_TRANSPORT_ACKNOWLEDGE_DELAY=6, +	NET_NETROM_TRANSPORT_BUSY_DELAY=7, +	NET_NETROM_TRANSPORT_REQUESTED_WINDOW_SIZE=8, +	NET_NETROM_TRANSPORT_NO_ACTIVITY_TIMEOUT=9, +	NET_NETROM_ROUTING_CONTROL=10, +	NET_NETROM_LINK_FAILS_COUNT=11, +	NET_NETROM_RESET=12 +}; + +/* /proc/sys/net/ax25 */ +enum { +	NET_AX25_IP_DEFAULT_MODE=1, +	NET_AX25_DEFAULT_MODE=2, +	NET_AX25_BACKOFF_TYPE=3, +	NET_AX25_CONNECT_MODE=4, +	NET_AX25_STANDARD_WINDOW=5, +	NET_AX25_EXTENDED_WINDOW=6, +	NET_AX25_T1_TIMEOUT=7, +	NET_AX25_T2_TIMEOUT=8, +	NET_AX25_T3_TIMEOUT=9, +	NET_AX25_IDLE_TIMEOUT=10, +	NET_AX25_N2=11, +	NET_AX25_PACLEN=12, +	NET_AX25_PROTOCOL=13, +	NET_AX25_DAMA_SLAVE_TIMEOUT=14 +}; + +/* /proc/sys/net/rose */ +enum { +	NET_ROSE_RESTART_REQUEST_TIMEOUT=1, +	NET_ROSE_CALL_REQUEST_TIMEOUT=2, +	NET_ROSE_RESET_REQUEST_TIMEOUT=3, +	NET_ROSE_CLEAR_REQUEST_TIMEOUT=4, +	NET_ROSE_ACK_HOLD_BACK_TIMEOUT=5, +	NET_ROSE_ROUTING_CONTROL=6, +	NET_ROSE_LINK_FAIL_TIMEOUT=7, +	NET_ROSE_MAX_VCS=8, +	NET_ROSE_WINDOW_SIZE=9, +	NET_ROSE_NO_ACTIVITY_TIMEOUT=10 +}; + +/* /proc/sys/net/x25 */ +enum { +	NET_X25_RESTART_REQUEST_TIMEOUT=1, +	NET_X25_CALL_REQUEST_TIMEOUT=2, +	NET_X25_RESET_REQUEST_TIMEOUT=3, +	NET_X25_CLEAR_REQUEST_TIMEOUT=4, +	NET_X25_ACK_HOLD_BACK_TIMEOUT=5, +	NET_X25_FORWARD=6 +}; + +/* /proc/sys/net/token-ring */ +enum +{ +	NET_TR_RIF_TIMEOUT=1 +}; + +/* /proc/sys/net/decnet/ */ +enum { +	NET_DECNET_NODE_TYPE = 1, +	NET_DECNET_NODE_ADDRESS = 2, +	NET_DECNET_NODE_NAME = 3, +	NET_DECNET_DEFAULT_DEVICE = 4, +	NET_DECNET_TIME_WAIT = 5, +	NET_DECNET_DN_COUNT = 6, +	NET_DECNET_DI_COUNT = 7, +	NET_DECNET_DR_COUNT = 8, +	NET_DECNET_DST_GC_INTERVAL = 9, +	NET_DECNET_CONF = 10, +	NET_DECNET_NO_FC_MAX_CWND = 11, +	NET_DECNET_MEM = 12, +	NET_DECNET_RMEM = 13, +	NET_DECNET_WMEM = 14, +	NET_DECNET_DEBUG_LEVEL = 255 +}; + +/* /proc/sys/net/decnet/conf/<dev> */ +enum { +	NET_DECNET_CONF_LOOPBACK = -2, +	NET_DECNET_CONF_DDCMP = -3, +	NET_DECNET_CONF_PPP = -4, +	NET_DECNET_CONF_X25 = -5, +	NET_DECNET_CONF_GRE = -6, +	NET_DECNET_CONF_ETHER = -7 + +	/* ... and ifindex of devices */ +}; + +/* /proc/sys/net/decnet/conf/<dev>/ */ +enum { +	NET_DECNET_CONF_DEV_PRIORITY = 1, +	NET_DECNET_CONF_DEV_T1 = 2, +	NET_DECNET_CONF_DEV_T2 = 3, +	NET_DECNET_CONF_DEV_T3 = 4, +	NET_DECNET_CONF_DEV_FORWARDING = 5, +	NET_DECNET_CONF_DEV_BLKSIZE = 6, +	NET_DECNET_CONF_DEV_STATE = 7 +}; + +/* /proc/sys/net/sctp */ +enum { +	NET_SCTP_RTO_INITIAL = 1, +	NET_SCTP_RTO_MIN     = 2, +	NET_SCTP_RTO_MAX     = 3, +	NET_SCTP_RTO_ALPHA   = 4, +	NET_SCTP_RTO_BETA    = 5, +	NET_SCTP_VALID_COOKIE_LIFE       =  6, +	NET_SCTP_ASSOCIATION_MAX_RETRANS =  7, +	NET_SCTP_PATH_MAX_RETRANS        =  8, +	NET_SCTP_MAX_INIT_RETRANSMITS    =  9, +	NET_SCTP_HB_INTERVAL             = 10, +	NET_SCTP_PRESERVE_ENABLE         = 11, +	NET_SCTP_MAX_BURST               = 12, +	NET_SCTP_ADDIP_ENABLE		 = 13, +	NET_SCTP_PRSCTP_ENABLE		 = 14, +	NET_SCTP_SNDBUF_POLICY		 = 15, +	NET_SCTP_SACK_TIMEOUT		 = 16, +	NET_SCTP_RCVBUF_POLICY		 = 17, +}; + +/* /proc/sys/net/bridge */ +enum { +	NET_BRIDGE_NF_CALL_ARPTABLES = 1, +	NET_BRIDGE_NF_CALL_IPTABLES = 2, +	NET_BRIDGE_NF_CALL_IP6TABLES = 3, +	NET_BRIDGE_NF_FILTER_VLAN_TAGGED = 4, +	NET_BRIDGE_NF_FILTER_PPPOE_TAGGED = 5, +}; + +/* proc/sys/net/irda */ +enum { +	NET_IRDA_DISCOVERY=1, +	NET_IRDA_DEVNAME=2, +	NET_IRDA_DEBUG=3, +	NET_IRDA_FAST_POLL=4, +	NET_IRDA_DISCOVERY_SLOTS=5, +	NET_IRDA_DISCOVERY_TIMEOUT=6, +	NET_IRDA_SLOT_TIMEOUT=7, +	NET_IRDA_MAX_BAUD_RATE=8, +	NET_IRDA_MIN_TX_TURN_TIME=9, +	NET_IRDA_MAX_TX_DATA_SIZE=10, +	NET_IRDA_MAX_TX_WINDOW=11, +	NET_IRDA_MAX_NOREPLY_TIME=12, +	NET_IRDA_WARN_NOREPLY_TIME=13, +	NET_IRDA_LAP_KEEPALIVE_TIME=14, +}; + + +/* CTL_FS names: */ +enum +{ +	FS_NRINODE=1,	/* int:current number of allocated inodes */ +	FS_STATINODE=2, +	FS_MAXINODE=3,	/* int:maximum number of inodes that can be allocated */ +	FS_NRDQUOT=4,	/* int:current number of allocated dquots */ +	FS_MAXDQUOT=5,	/* int:maximum number of dquots that can be allocated */ +	FS_NRFILE=6,	/* int:current number of allocated filedescriptors */ +	FS_MAXFILE=7,	/* int:maximum number of filedescriptors that can be allocated */ +	FS_DENTRY=8, +	FS_NRSUPER=9,	/* int:current number of allocated super_blocks */ +	FS_MAXSUPER=10,	/* int:maximum number of super_blocks that can be allocated */ +	FS_OVERFLOWUID=11,	/* int: overflow UID */ +	FS_OVERFLOWGID=12,	/* int: overflow GID */ +	FS_LEASES=13,	/* int: leases enabled */ +	FS_DIR_NOTIFY=14,	/* int: directory notification enabled */ +	FS_LEASE_TIME=15,	/* int: maximum time to wait for a lease break */ +	FS_DQSTATS=16,	/* disc quota usage statistics and control */ +	FS_XFS=17,	/* struct: control xfs parameters */ +	FS_AIO_NR=18,	/* current system-wide number of aio requests */ +	FS_AIO_MAX_NR=19,	/* system-wide maximum number of aio requests */ +	FS_INOTIFY=20,	/* inotify submenu */ +	FS_OCFS2=988,	/* ocfs2 */ +}; + +/* /proc/sys/fs/quota/ */ +enum { +	FS_DQ_LOOKUPS = 1, +	FS_DQ_DROPS = 2, +	FS_DQ_READS = 3, +	FS_DQ_WRITES = 4, +	FS_DQ_CACHE_HITS = 5, +	FS_DQ_ALLOCATED = 6, +	FS_DQ_FREE = 7, +	FS_DQ_SYNCS = 8, +	FS_DQ_WARNINGS = 9, +}; + +/* CTL_DEBUG names: */ + +/* CTL_DEV names: */ +enum { +	DEV_CDROM=1, +	DEV_HWMON=2, +	DEV_PARPORT=3, +	DEV_RAID=4, +	DEV_MAC_HID=5, +	DEV_SCSI=6, +	DEV_IPMI=7, +}; + +/* /proc/sys/dev/cdrom */ +enum { +	DEV_CDROM_INFO=1, +	DEV_CDROM_AUTOCLOSE=2, +	DEV_CDROM_AUTOEJECT=3, +	DEV_CDROM_DEBUG=4, +	DEV_CDROM_LOCK=5, +	DEV_CDROM_CHECK_MEDIA=6 +}; + +/* /proc/sys/dev/parport */ +enum { +	DEV_PARPORT_DEFAULT=-3 +}; + +/* /proc/sys/dev/raid */ +enum { +	DEV_RAID_SPEED_LIMIT_MIN=1, +	DEV_RAID_SPEED_LIMIT_MAX=2 +}; + +/* /proc/sys/dev/parport/default */ +enum { +	DEV_PARPORT_DEFAULT_TIMESLICE=1, +	DEV_PARPORT_DEFAULT_SPINTIME=2 +}; + +/* /proc/sys/dev/parport/parport n */ +enum { +	DEV_PARPORT_SPINTIME=1, +	DEV_PARPORT_BASE_ADDR=2, +	DEV_PARPORT_IRQ=3, +	DEV_PARPORT_DMA=4, +	DEV_PARPORT_MODES=5, +	DEV_PARPORT_DEVICES=6, +	DEV_PARPORT_AUTOPROBE=16 +}; + +/* /proc/sys/dev/parport/parport n/devices/ */ +enum { +	DEV_PARPORT_DEVICES_ACTIVE=-3, +}; + +/* /proc/sys/dev/parport/parport n/devices/device n */ +enum { +	DEV_PARPORT_DEVICE_TIMESLICE=1, +}; + +/* /proc/sys/dev/mac_hid */ +enum { +	DEV_MAC_HID_KEYBOARD_SENDS_LINUX_KEYCODES=1, +	DEV_MAC_HID_KEYBOARD_LOCK_KEYCODES=2, +	DEV_MAC_HID_MOUSE_BUTTON_EMULATION=3, +	DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE=4, +	DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE=5, +	DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES=6 +}; + +/* /proc/sys/dev/scsi */ +enum { +	DEV_SCSI_LOGGING_LEVEL=1, +}; + +/* /proc/sys/dev/ipmi */ +enum { +	DEV_IPMI_POWEROFF_POWERCYCLE=1, +}; + +/* /proc/sys/abi */ +enum +{ +	ABI_DEFHANDLER_COFF=1,	/* default handler for coff binaries */ +	ABI_DEFHANDLER_ELF=2, 	/* default handler for ELF binaries */ +	ABI_DEFHANDLER_LCALL7=3,/* default handler for procs using lcall7 */ +	ABI_DEFHANDLER_LIBCSO=4,/* default handler for an libc.so ELF interp */ +	ABI_TRACE=5,		/* tracing flags */ +	ABI_FAKE_UTSNAME=6,	/* fake target utsname information */ +}; + + +#endif /* _UAPI_LINUX_SYSCTL_H */ diff --git a/include/uapi/linux/sysinfo.h b/include/uapi/linux/sysinfo.h new file mode 100644 index 00000000000..934335a2252 --- /dev/null +++ b/include/uapi/linux/sysinfo.h @@ -0,0 +1,24 @@ +#ifndef _LINUX_SYSINFO_H +#define _LINUX_SYSINFO_H + +#include <linux/types.h> + +#define SI_LOAD_SHIFT	16 +struct sysinfo { +	__kernel_long_t uptime;		/* Seconds since boot */ +	__kernel_ulong_t loads[3];	/* 1, 5, and 15 minute load averages */ +	__kernel_ulong_t totalram;	/* Total usable main memory size */ +	__kernel_ulong_t freeram;	/* Available memory size */ +	__kernel_ulong_t sharedram;	/* Amount of shared memory */ +	__kernel_ulong_t bufferram;	/* Memory used by buffers */ +	__kernel_ulong_t totalswap;	/* Total swap space size */ +	__kernel_ulong_t freeswap;	/* swap space still available */ +	__u16 procs;		   	/* Number of current processes */ +	__u16 pad;		   	/* Explicit padding for m68k */ +	__kernel_ulong_t totalhigh;	/* Total high memory size */ +	__kernel_ulong_t freehigh;	/* Available high memory size */ +	__u32 mem_unit;			/* Memory unit size in bytes */ +	char _f[20-2*sizeof(__kernel_ulong_t)-sizeof(__u32)];	/* Padding: libc5 uses this.. */ +}; + +#endif /* _LINUX_SYSINFO_H */ diff --git a/include/uapi/linux/taskstats.h b/include/uapi/linux/taskstats.h new file mode 100644 index 00000000000..2466e550a41 --- /dev/null +++ b/include/uapi/linux/taskstats.h @@ -0,0 +1,213 @@ +/* taskstats.h - exporting per-task statistics + * + * Copyright (C) Shailabh Nagar, IBM Corp. 2006 + *           (C) Balbir Singh,   IBM Corp. 2006 + *           (C) Jay Lan,        SGI, 2006 + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2.1 of the GNU Lesser General Public License + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + +#ifndef _LINUX_TASKSTATS_H +#define _LINUX_TASKSTATS_H + +#include <linux/types.h> + +/* Format for per-task data returned to userland when + *	- a task exits + *	- listener requests stats for a task + * + * The struct is versioned. Newer versions should only add fields to + * the bottom of the struct to maintain backward compatibility. + * + * + * To add new fields + *	a) bump up TASKSTATS_VERSION + *	b) add comment indicating new version number at end of struct + *	c) add new fields after version comment; maintain 64-bit alignment + */ + + +#define TASKSTATS_VERSION	8 +#define TS_COMM_LEN		32	/* should be >= TASK_COMM_LEN +					 * in linux/sched.h */ + +struct taskstats { + +	/* The version number of this struct. This field is always set to +	 * TAKSTATS_VERSION, which is defined in <linux/taskstats.h>. +	 * Each time the struct is changed, the value should be incremented. +	 */ +	__u16	version; +	__u32	ac_exitcode;		/* Exit status */ + +	/* The accounting flags of a task as defined in <linux/acct.h> +	 * Defined values are AFORK, ASU, ACOMPAT, ACORE, and AXSIG. +	 */ +	__u8	ac_flag;		/* Record flags */ +	__u8	ac_nice;		/* task_nice */ + +	/* Delay accounting fields start +	 * +	 * All values, until comment "Delay accounting fields end" are +	 * available only if delay accounting is enabled, even though the last +	 * few fields are not delays +	 * +	 * xxx_count is the number of delay values recorded +	 * xxx_delay_total is the corresponding cumulative delay in nanoseconds +	 * +	 * xxx_delay_total wraps around to zero on overflow +	 * xxx_count incremented regardless of overflow +	 */ + +	/* Delay waiting for cpu, while runnable +	 * count, delay_total NOT updated atomically +	 */ +	__u64	cpu_count __attribute__((aligned(8))); +	__u64	cpu_delay_total; + +	/* Following four fields atomically updated using task->delays->lock */ + +	/* Delay waiting for synchronous block I/O to complete +	 * does not account for delays in I/O submission +	 */ +	__u64	blkio_count; +	__u64	blkio_delay_total; + +	/* Delay waiting for page fault I/O (swap in only) */ +	__u64	swapin_count; +	__u64	swapin_delay_total; + +	/* cpu "wall-clock" running time +	 * On some architectures, value will adjust for cpu time stolen +	 * from the kernel in involuntary waits due to virtualization. +	 * Value is cumulative, in nanoseconds, without a corresponding count +	 * and wraps around to zero silently on overflow +	 */ +	__u64	cpu_run_real_total; + +	/* cpu "virtual" running time +	 * Uses time intervals seen by the kernel i.e. no adjustment +	 * for kernel's involuntary waits due to virtualization. +	 * Value is cumulative, in nanoseconds, without a corresponding count +	 * and wraps around to zero silently on overflow +	 */ +	__u64	cpu_run_virtual_total; +	/* Delay accounting fields end */ +	/* version 1 ends here */ + +	/* Basic Accounting Fields start */ +	char	ac_comm[TS_COMM_LEN];	/* Command name */ +	__u8	ac_sched __attribute__((aligned(8))); +					/* Scheduling discipline */ +	__u8	ac_pad[3]; +	__u32	ac_uid __attribute__((aligned(8))); +					/* User ID */ +	__u32	ac_gid;			/* Group ID */ +	__u32	ac_pid;			/* Process ID */ +	__u32	ac_ppid;		/* Parent process ID */ +	__u32	ac_btime;		/* Begin time [sec since 1970] */ +	__u64	ac_etime __attribute__((aligned(8))); +					/* Elapsed time [usec] */ +	__u64	ac_utime;		/* User CPU time [usec] */ +	__u64	ac_stime;		/* SYstem CPU time [usec] */ +	__u64	ac_minflt;		/* Minor Page Fault Count */ +	__u64	ac_majflt;		/* Major Page Fault Count */ +	/* Basic Accounting Fields end */ + +	/* Extended accounting fields start */ +	/* Accumulated RSS usage in duration of a task, in MBytes-usecs. +	 * The current rss usage is added to this counter every time +	 * a tick is charged to a task's system time. So, at the end we +	 * will have memory usage multiplied by system time. Thus an +	 * average usage per system time unit can be calculated. +	 */ +	__u64	coremem;		/* accumulated RSS usage in MB-usec */ +	/* Accumulated virtual memory usage in duration of a task. +	 * Same as acct_rss_mem1 above except that we keep track of VM usage. +	 */ +	__u64	virtmem;		/* accumulated VM  usage in MB-usec */ + +	/* High watermark of RSS and virtual memory usage in duration of +	 * a task, in KBytes. +	 */ +	__u64	hiwater_rss;		/* High-watermark of RSS usage, in KB */ +	__u64	hiwater_vm;		/* High-water VM usage, in KB */ + +	/* The following four fields are I/O statistics of a task. */ +	__u64	read_char;		/* bytes read */ +	__u64	write_char;		/* bytes written */ +	__u64	read_syscalls;		/* read syscalls */ +	__u64	write_syscalls;		/* write syscalls */ +	/* Extended accounting fields end */ + +#define TASKSTATS_HAS_IO_ACCOUNTING +	/* Per-task storage I/O accounting starts */ +	__u64	read_bytes;		/* bytes of read I/O */ +	__u64	write_bytes;		/* bytes of write I/O */ +	__u64	cancelled_write_bytes;	/* bytes of cancelled write I/O */ + +	__u64  nvcsw;			/* voluntary_ctxt_switches */ +	__u64  nivcsw;			/* nonvoluntary_ctxt_switches */ + +	/* time accounting for SMT machines */ +	__u64	ac_utimescaled;		/* utime scaled on frequency etc */ +	__u64	ac_stimescaled;		/* stime scaled on frequency etc */ +	__u64	cpu_scaled_run_real_total; /* scaled cpu_run_real_total */ + +	/* Delay waiting for memory reclaim */ +	__u64	freepages_count; +	__u64	freepages_delay_total; +}; + + +/* + * Commands sent from userspace + * Not versioned. New commands should only be inserted at the enum's end + * prior to __TASKSTATS_CMD_MAX + */ + +enum { +	TASKSTATS_CMD_UNSPEC = 0,	/* Reserved */ +	TASKSTATS_CMD_GET,		/* user->kernel request/get-response */ +	TASKSTATS_CMD_NEW,		/* kernel->user event */ +	__TASKSTATS_CMD_MAX, +}; + +#define TASKSTATS_CMD_MAX (__TASKSTATS_CMD_MAX - 1) + +enum { +	TASKSTATS_TYPE_UNSPEC = 0,	/* Reserved */ +	TASKSTATS_TYPE_PID,		/* Process id */ +	TASKSTATS_TYPE_TGID,		/* Thread group id */ +	TASKSTATS_TYPE_STATS,		/* taskstats structure */ +	TASKSTATS_TYPE_AGGR_PID,	/* contains pid + stats */ +	TASKSTATS_TYPE_AGGR_TGID,	/* contains tgid + stats */ +	TASKSTATS_TYPE_NULL,		/* contains nothing */ +	__TASKSTATS_TYPE_MAX, +}; + +#define TASKSTATS_TYPE_MAX (__TASKSTATS_TYPE_MAX - 1) + +enum { +	TASKSTATS_CMD_ATTR_UNSPEC = 0, +	TASKSTATS_CMD_ATTR_PID, +	TASKSTATS_CMD_ATTR_TGID, +	TASKSTATS_CMD_ATTR_REGISTER_CPUMASK, +	TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK, +	__TASKSTATS_CMD_ATTR_MAX, +}; + +#define TASKSTATS_CMD_ATTR_MAX (__TASKSTATS_CMD_ATTR_MAX - 1) + +/* NETLINK_GENERIC related info */ + +#define TASKSTATS_GENL_NAME	"TASKSTATS" +#define TASKSTATS_GENL_VERSION	0x1 + +#endif /* _LINUX_TASKSTATS_H */ diff --git a/include/uapi/linux/tcp.h b/include/uapi/linux/tcp.h new file mode 100644 index 00000000000..c4b89a5cb7d --- /dev/null +++ b/include/uapi/linux/tcp.h @@ -0,0 +1,225 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the  BSD Socket + *		interface as the means of communication with the user level. + * + *		Definitions for the TCP protocol. + * + * Version:	@(#)tcp.h	1.0.2	04/28/93 + * + * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + * + *		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. + */ +#ifndef _UAPI_LINUX_TCP_H +#define _UAPI_LINUX_TCP_H + +#include <linux/types.h> +#include <asm/byteorder.h> +#include <linux/socket.h> + +struct tcphdr { +	__be16	source; +	__be16	dest; +	__be32	seq; +	__be32	ack_seq; +#if defined(__LITTLE_ENDIAN_BITFIELD) +	__u16	res1:4, +		doff:4, +		fin:1, +		syn:1, +		rst:1, +		psh:1, +		ack:1, +		urg:1, +		ece:1, +		cwr:1; +#elif defined(__BIG_ENDIAN_BITFIELD) +	__u16	doff:4, +		res1:4, +		cwr:1, +		ece:1, +		urg:1, +		ack:1, +		psh:1, +		rst:1, +		syn:1, +		fin:1; +#else +#error	"Adjust your <asm/byteorder.h> defines" +#endif	 +	__be16	window; +	__sum16	check; +	__be16	urg_ptr; +}; + +/* + *	The union cast uses a gcc extension to avoid aliasing problems + *  (union is compatible to any of its members) + *  This means this part of the code is -fstrict-aliasing safe now. + */ +union tcp_word_hdr {  +	struct tcphdr hdr; +	__be32 		  words[5]; +};  + +#define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3])  + +enum {  +	TCP_FLAG_CWR = __constant_cpu_to_be32(0x00800000), +	TCP_FLAG_ECE = __constant_cpu_to_be32(0x00400000), +	TCP_FLAG_URG = __constant_cpu_to_be32(0x00200000), +	TCP_FLAG_ACK = __constant_cpu_to_be32(0x00100000), +	TCP_FLAG_PSH = __constant_cpu_to_be32(0x00080000), +	TCP_FLAG_RST = __constant_cpu_to_be32(0x00040000), +	TCP_FLAG_SYN = __constant_cpu_to_be32(0x00020000), +	TCP_FLAG_FIN = __constant_cpu_to_be32(0x00010000), +	TCP_RESERVED_BITS = __constant_cpu_to_be32(0x0F000000), +	TCP_DATA_OFFSET = __constant_cpu_to_be32(0xF0000000) +};  + +/* + * TCP general constants + */ +#define TCP_MSS_DEFAULT		 536U	/* IPv4 (RFC1122, RFC2581) */ +#define TCP_MSS_DESIRED		1220U	/* IPv6 (tunneled), EDNS0 (RFC3226) */ + +/* TCP socket options */ +#define TCP_NODELAY		1	/* Turn off Nagle's algorithm. */ +#define TCP_MAXSEG		2	/* Limit MSS */ +#define TCP_CORK		3	/* Never send partially complete segments */ +#define TCP_KEEPIDLE		4	/* Start keeplives after this period */ +#define TCP_KEEPINTVL		5	/* Interval between keepalives */ +#define TCP_KEEPCNT		6	/* Number of keepalives before death */ +#define TCP_SYNCNT		7	/* Number of SYN retransmits */ +#define TCP_LINGER2		8	/* Life time of orphaned FIN-WAIT-2 state */ +#define TCP_DEFER_ACCEPT	9	/* Wake up listener only when data arrive */ +#define TCP_WINDOW_CLAMP	10	/* Bound advertised window */ +#define TCP_INFO		11	/* Information about this connection. */ +#define TCP_QUICKACK		12	/* Block/reenable quick acks */ +#define TCP_CONGESTION		13	/* Congestion control algorithm */ +#define TCP_MD5SIG		14	/* TCP MD5 Signature (RFC2385) */ +#define TCP_COOKIE_TRANSACTIONS	15	/* TCP Cookie Transactions */ +#define TCP_THIN_LINEAR_TIMEOUTS 16      /* Use linear timeouts for thin streams*/ +#define TCP_THIN_DUPACK         17      /* Fast retrans. after 1 dupack */ +#define TCP_USER_TIMEOUT	18	/* How long for loss retry before timeout */ +#define TCP_REPAIR		19	/* TCP sock is under repair right now */ +#define TCP_REPAIR_QUEUE	20 +#define TCP_QUEUE_SEQ		21 +#define TCP_REPAIR_OPTIONS	22 +#define TCP_FASTOPEN		23	/* Enable FastOpen on listeners */ + +struct tcp_repair_opt { +	__u32	opt_code; +	__u32	opt_val; +}; + +enum { +	TCP_NO_QUEUE, +	TCP_RECV_QUEUE, +	TCP_SEND_QUEUE, +	TCP_QUEUES_NR, +}; + +/* for TCP_INFO socket option */ +#define TCPI_OPT_TIMESTAMPS	1 +#define TCPI_OPT_SACK		2 +#define TCPI_OPT_WSCALE		4 +#define TCPI_OPT_ECN		8 /* ECN was negociated at TCP session init */ +#define TCPI_OPT_ECN_SEEN	16 /* we received at least one packet with ECT */ + +enum tcp_ca_state { +	TCP_CA_Open = 0, +#define TCPF_CA_Open	(1<<TCP_CA_Open) +	TCP_CA_Disorder = 1, +#define TCPF_CA_Disorder (1<<TCP_CA_Disorder) +	TCP_CA_CWR = 2, +#define TCPF_CA_CWR	(1<<TCP_CA_CWR) +	TCP_CA_Recovery = 3, +#define TCPF_CA_Recovery (1<<TCP_CA_Recovery) +	TCP_CA_Loss = 4 +#define TCPF_CA_Loss	(1<<TCP_CA_Loss) +}; + +struct tcp_info { +	__u8	tcpi_state; +	__u8	tcpi_ca_state; +	__u8	tcpi_retransmits; +	__u8	tcpi_probes; +	__u8	tcpi_backoff; +	__u8	tcpi_options; +	__u8	tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4; + +	__u32	tcpi_rto; +	__u32	tcpi_ato; +	__u32	tcpi_snd_mss; +	__u32	tcpi_rcv_mss; + +	__u32	tcpi_unacked; +	__u32	tcpi_sacked; +	__u32	tcpi_lost; +	__u32	tcpi_retrans; +	__u32	tcpi_fackets; + +	/* Times. */ +	__u32	tcpi_last_data_sent; +	__u32	tcpi_last_ack_sent;     /* Not remembered, sorry. */ +	__u32	tcpi_last_data_recv; +	__u32	tcpi_last_ack_recv; + +	/* Metrics. */ +	__u32	tcpi_pmtu; +	__u32	tcpi_rcv_ssthresh; +	__u32	tcpi_rtt; +	__u32	tcpi_rttvar; +	__u32	tcpi_snd_ssthresh; +	__u32	tcpi_snd_cwnd; +	__u32	tcpi_advmss; +	__u32	tcpi_reordering; + +	__u32	tcpi_rcv_rtt; +	__u32	tcpi_rcv_space; + +	__u32	tcpi_total_retrans; +}; + +/* for TCP_MD5SIG socket option */ +#define TCP_MD5SIG_MAXKEYLEN	80 + +struct tcp_md5sig { +	struct __kernel_sockaddr_storage tcpm_addr;	/* address associated */ +	__u16	__tcpm_pad1;				/* zero */ +	__u16	tcpm_keylen;				/* key length */ +	__u32	__tcpm_pad2;				/* zero */ +	__u8	tcpm_key[TCP_MD5SIG_MAXKEYLEN];		/* key (binary) */ +}; + +/* for TCP_COOKIE_TRANSACTIONS (TCPCT) socket option */ +#define TCP_COOKIE_MIN		 8		/*  64-bits */ +#define TCP_COOKIE_MAX		16		/* 128-bits */ +#define TCP_COOKIE_PAIR_SIZE	(2*TCP_COOKIE_MAX) + +/* Flags for both getsockopt and setsockopt */ +#define TCP_COOKIE_IN_ALWAYS	(1 << 0)	/* Discard SYN without cookie */ +#define TCP_COOKIE_OUT_NEVER	(1 << 1)	/* Prohibit outgoing cookies, +						 * supercedes everything. */ + +/* Flags for getsockopt */ +#define TCP_S_DATA_IN		(1 << 2)	/* Was data received? */ +#define TCP_S_DATA_OUT		(1 << 3)	/* Was data sent? */ + +/* TCP_COOKIE_TRANSACTIONS data */ +struct tcp_cookie_transactions { +	__u16	tcpct_flags;			/* see above */ +	__u8	__tcpct_pad1;			/* zero */ +	__u8	tcpct_cookie_desired;		/* bytes */ +	__u16	tcpct_s_data_desired;		/* bytes of variable data */ +	__u16	tcpct_used;			/* bytes in value */ +	__u8	tcpct_value[TCP_MSS_DEFAULT]; +}; + + +#endif /* _UAPI_LINUX_TCP_H */ diff --git a/include/uapi/linux/tcp_metrics.h b/include/uapi/linux/tcp_metrics.h new file mode 100644 index 00000000000..cb5157b55f3 --- /dev/null +++ b/include/uapi/linux/tcp_metrics.h @@ -0,0 +1,54 @@ +/* tcp_metrics.h - TCP Metrics Interface */ + +#ifndef _LINUX_TCP_METRICS_H +#define _LINUX_TCP_METRICS_H + +#include <linux/types.h> + +/* NETLINK_GENERIC related info + */ +#define TCP_METRICS_GENL_NAME		"tcp_metrics" +#define TCP_METRICS_GENL_VERSION	0x1 + +enum tcp_metric_index { +	TCP_METRIC_RTT, +	TCP_METRIC_RTTVAR, +	TCP_METRIC_SSTHRESH, +	TCP_METRIC_CWND, +	TCP_METRIC_REORDERING, + +	/* Always last.  */ +	__TCP_METRIC_MAX, +}; + +#define TCP_METRIC_MAX	(__TCP_METRIC_MAX - 1) + +enum { +	TCP_METRICS_ATTR_UNSPEC, +	TCP_METRICS_ATTR_ADDR_IPV4,		/* u32 */ +	TCP_METRICS_ATTR_ADDR_IPV6,		/* binary */ +	TCP_METRICS_ATTR_AGE,			/* msecs */ +	TCP_METRICS_ATTR_TW_TSVAL,		/* u32, raw, rcv tsval */ +	TCP_METRICS_ATTR_TW_TS_STAMP,		/* s32, sec age */ +	TCP_METRICS_ATTR_VALS,			/* nested +1, u32 */ +	TCP_METRICS_ATTR_FOPEN_MSS,		/* u16 */ +	TCP_METRICS_ATTR_FOPEN_SYN_DROPS,	/* u16, count of drops */ +	TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS,	/* msecs age */ +	TCP_METRICS_ATTR_FOPEN_COOKIE,		/* binary */ + +	__TCP_METRICS_ATTR_MAX, +}; + +#define TCP_METRICS_ATTR_MAX	(__TCP_METRICS_ATTR_MAX - 1) + +enum { +	TCP_METRICS_CMD_UNSPEC, +	TCP_METRICS_CMD_GET, +	TCP_METRICS_CMD_DEL, + +	__TCP_METRICS_CMD_MAX, +}; + +#define TCP_METRICS_CMD_MAX	(__TCP_METRICS_CMD_MAX - 1) + +#endif /* _LINUX_TCP_METRICS_H */ diff --git a/include/uapi/linux/telephony.h b/include/uapi/linux/telephony.h new file mode 100644 index 00000000000..f63afe330ad --- /dev/null +++ b/include/uapi/linux/telephony.h @@ -0,0 +1,262 @@ +/****************************************************************************** + * + *		telephony.h + * + *		Basic Linux Telephony Interface + * + *		(c) Copyright 1999-2001 Quicknet Technologies, Inc. + * + *		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. + * + *    Authors:       Ed Okerson, <eokerson@quicknet.net> + *                   Greg Herlein, <gherlein@quicknet.net> + * + *    Contributors:  Alan Cox, <alan@lxorguk.ukuu.org.uk> + *                   David W. Erhart, <derhart@quicknet.net> + * + * IN NO EVENT SHALL QUICKNET TECHNOLOGIES, INC. BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF QUICKNET + * TECHNOLOGIES, INC. HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * QUICKNET TECHNOLOGIES, INC. SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND QUICKNET TECHNOLOGIES, INC. HAS NO OBLIGATION + * TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + *****************************************************************************/ + +#ifndef TELEPHONY_H +#define TELEPHONY_H + +#define TELEPHONY_VERSION 3013 + +#define PHONE_VENDOR_IXJ          1 +#define PHONE_VENDOR_QUICKNET	  PHONE_VENDOR_IXJ +#define PHONE_VENDOR_VOICETRONIX  2 +#define PHONE_VENDOR_ACULAB       3 +#define PHONE_VENDOR_DIGI         4 +#define PHONE_VENDOR_FRANKLIN     5 + +/****************************************************************************** + *  Vendor Summary Information Area + * + *  Quicknet Technologies, Inc. - makes low density analog telephony cards + *    with audio compression, POTS and PSTN interfaces (www.quicknet.net) + * + *  (other vendors following this API shuld add a short description of + *  the telephony products they support under Linux) + * + *****************************************************************************/ +#define QTI_PHONEJACK		100 +#define QTI_LINEJACK		300 +#define QTI_PHONEJACK_LITE	400 +#define QTI_PHONEJACK_PCI	500 +#define QTI_PHONECARD		600 + +/****************************************************************************** +* +* The capabilities ioctls can inform you of the capabilities of each phone +* device installed in your system.  The PHONECTL_CAPABILITIES ioctl +* returns an integer value indicating the number of capabilities the    +* device has.  The PHONECTL_CAPABILITIES_LIST will fill an array of  +* capability structs with all of its capabilities.  The +* PHONECTL_CAPABILITIES_CHECK takes a single capability struct and returns +* a TRUE if the device has that capability, otherwise it returns false. +*  +******************************************************************************/ +typedef enum { +	vendor = 0, +	device, +	port, +	codec, +	dsp +} phone_cap; + +struct phone_capability { +	char desc[80]; +	phone_cap captype; +	int cap; +	int handle; +}; + +typedef enum { +	pots = 0, +	pstn, +	handset, +	speaker +} phone_ports; + +#define PHONE_CAPABILITIES              _IO  ('q', 0x80) +#define PHONE_CAPABILITIES_LIST         _IOR ('q', 0x81, struct phone_capability *) +#define PHONE_CAPABILITIES_CHECK        _IOW ('q', 0x82, struct phone_capability *) + +typedef struct { +        char month[3]; +        char day[3]; +        char hour[3]; +        char min[3]; +        int numlen; +        char number[11]; +        int namelen; +        char name[80]; +} PHONE_CID; +  +#define PHONE_RING			_IO  ('q', 0x83) +#define PHONE_HOOKSTATE			_IO  ('q', 0x84) +#define PHONE_MAXRINGS			_IOW ('q', 0x85, char) +#define PHONE_RING_CADENCE		_IOW ('q', 0x86, short) +#define OLD_PHONE_RING_START            _IO  ('q', 0x87) +#define PHONE_RING_START		_IOW ('q', 0x87, PHONE_CID *) +#define PHONE_RING_STOP			_IO  ('q', 0x88) + +#define USA_RING_CADENCE	 0xC0C0 + +#define PHONE_REC_CODEC			_IOW ('q', 0x89, int) +#define PHONE_REC_START			_IO  ('q', 0x8A) +#define PHONE_REC_STOP			_IO  ('q', 0x8B) +#define PHONE_REC_DEPTH			_IOW ('q', 0x8C, int) +#define PHONE_FRAME			_IOW ('q', 0x8D, int) +#define PHONE_REC_VOLUME		_IOW ('q', 0x8E, int) +#define PHONE_REC_VOLUME_LINEAR		_IOW ('q', 0xDB, int) +#define PHONE_REC_LEVEL			_IO  ('q', 0x8F) + +#define PHONE_PLAY_CODEC		_IOW ('q', 0x90, int) +#define PHONE_PLAY_START		_IO  ('q', 0x91) +#define PHONE_PLAY_STOP			_IO  ('q', 0x92) +#define PHONE_PLAY_DEPTH		_IOW ('q', 0x93, int) +#define PHONE_PLAY_VOLUME		_IOW ('q', 0x94, int) +#define PHONE_PLAY_VOLUME_LINEAR	_IOW ('q', 0xDC, int) +#define PHONE_PLAY_LEVEL		_IO  ('q', 0x95) +#define PHONE_DTMF_READY		_IOR ('q', 0x96, int) +#define PHONE_GET_DTMF			_IOR ('q', 0x97, int) +#define PHONE_GET_DTMF_ASCII		_IOR ('q', 0x98, int) +#define PHONE_DTMF_OOB			_IOW ('q', 0x99, int) +#define PHONE_EXCEPTION			_IOR ('q', 0x9A, int) +#define PHONE_PLAY_TONE			_IOW ('q', 0x9B, char) +#define PHONE_SET_TONE_ON_TIME		_IOW ('q', 0x9C, int) +#define PHONE_SET_TONE_OFF_TIME		_IOW ('q', 0x9D, int) +#define PHONE_GET_TONE_ON_TIME		_IO  ('q', 0x9E) +#define PHONE_GET_TONE_OFF_TIME		_IO  ('q', 0x9F) +#define PHONE_GET_TONE_STATE		_IO  ('q', 0xA0) +#define PHONE_BUSY			_IO  ('q', 0xA1) +#define PHONE_RINGBACK			_IO  ('q', 0xA2) +#define PHONE_DIALTONE			_IO  ('q', 0xA3) +#define PHONE_CPT_STOP			_IO  ('q', 0xA4) + +#define PHONE_PSTN_SET_STATE		_IOW ('q', 0xA4, int) +#define PHONE_PSTN_GET_STATE		_IO  ('q', 0xA5) + +#define PSTN_ON_HOOK		0 +#define PSTN_RINGING		1 +#define PSTN_OFF_HOOK		2 +#define PSTN_PULSE_DIAL		3 + +/****************************************************************************** +*  +* The wink duration is tunable with this ioctl.  The default wink duration   +* is 320ms.  You do not need to use this ioctl if you do not require a +* different wink duration. +*  +******************************************************************************/ +#define PHONE_WINK_DURATION		_IOW ('q', 0xA6, int) +#define PHONE_WINK			_IOW ('q', 0xAA, int) + +/****************************************************************************** +*  +*  Codec Definitions +*  +******************************************************************************/ +typedef enum { +	G723_63 = 1, +	G723_53 = 2, +	TS85 = 3, +	TS48 = 4, +	TS41 = 5, +	G728 = 6, +	G729 = 7, +	ULAW = 8, +	ALAW = 9, +	LINEAR16 = 10, +	LINEAR8 = 11, +	WSS = 12, +	G729B = 13 +} phone_codec; + +struct phone_codec_data +{ +        phone_codec type; +        unsigned short buf_min, buf_opt, buf_max; +}; + +#define PHONE_QUERY_CODEC               _IOWR ('q', 0xA7, struct phone_codec_data *) +#define PHONE_PSTN_LINETEST             _IO ('q', 0xA8) + +/****************************************************************************** +*  +* This controls the VAD/CNG functionality of G.723.1.  The driver will +* always pass full size frames, any unused bytes will be padded with zeros, +* and frames passed to the driver should also be padded with zeros.  The +* frame type is encoded in the least significant two bits of the first +* WORD of the frame as follows: +* +* bits 1-0	Frame Type	Data Rate		Significant Words +* 00		0		G.723.1 6.3		12 +* 01		1		G.723.1 5.3		10 +* 10		2		VAD/CNG			 2 +* 11		3		Repeat last CNG		 2 bits +*  +******************************************************************************/ +#define PHONE_VAD			_IOW ('q', 0xA9, int) + + +/****************************************************************************** +* +* The exception structure allows us to multiplex multiple events onto the +* select() exception set.  If any of these flags are set select() will +* return with a positive indication on the exception set.  The dtmf_ready +* bit indicates if there is data waiting in the DTMF buffer.  The +* hookstate bit is set if there is a change in hookstate status, it does not +* indicate the current state of the hookswitch.  The pstn_ring bit +* indicates that the DAA on a LineJACK card has detected ring voltage on +* the PSTN port.  The caller_id bit indicates that caller_id data has been +* received and is available.  The pstn_wink bit indicates that the DAA on +* the LineJACK has received a wink from the telco switch.  The f0, f1, f2 +* and f3 bits indicate that the filter has been triggered by detecting the +* frequency programmed into that filter. +* +* The remaining bits should be set to zero. They will become defined over time +* for other interface cards and their needs. +* +******************************************************************************/ +struct phone_except +{ +	unsigned int dtmf_ready:1; +	unsigned int hookstate:1; +	unsigned int pstn_ring:1; +	unsigned int caller_id:1; +	unsigned int pstn_wink:1; +	unsigned int f0:1; +	unsigned int f1:1; +	unsigned int f2:1; +	unsigned int f3:1; +	unsigned int flash:1; +	unsigned int fc0:1; +	unsigned int fc1:1; +	unsigned int fc2:1; +	unsigned int fc3:1; +	unsigned int reserved:18; +}; + +union telephony_exception { +	struct phone_except bits; +	unsigned int bytes; +}; + + +#endif		/* TELEPHONY_H */ + diff --git a/include/uapi/linux/termios.h b/include/uapi/linux/termios.h new file mode 100644 index 00000000000..2acd0c1f8a2 --- /dev/null +++ b/include/uapi/linux/termios.h @@ -0,0 +1,22 @@ +#ifndef _LINUX_TERMIOS_H +#define _LINUX_TERMIOS_H + +#include <linux/types.h> +#include <asm/termios.h> + +#define NFF	5 + +struct termiox +{ +	__u16	x_hflag; +	__u16	x_cflag; +	__u16	x_rflag[NFF]; +	__u16	x_sflag; +}; + +#define	RTSXOFF		0x0001		/* RTS flow control on input */ +#define	CTSXON		0x0002		/* CTS flow control on output */ +#define	DTRXOFF		0x0004		/* DTR flow control on input */ +#define DSRXON		0x0008		/* DCD flow control on output */ + +#endif diff --git a/include/uapi/linux/time.h b/include/uapi/linux/time.h new file mode 100644 index 00000000000..0d3c0edc3ed --- /dev/null +++ b/include/uapi/linux/time.h @@ -0,0 +1,71 @@ +#ifndef _UAPI_LINUX_TIME_H +#define _UAPI_LINUX_TIME_H + +#include <linux/types.h> + + +#ifndef _STRUCT_TIMESPEC +#define _STRUCT_TIMESPEC +struct timespec { +	__kernel_time_t	tv_sec;			/* seconds */ +	long		tv_nsec;		/* nanoseconds */ +}; +#endif + +struct timeval { +	__kernel_time_t		tv_sec;		/* seconds */ +	__kernel_suseconds_t	tv_usec;	/* microseconds */ +}; + +struct timezone { +	int	tz_minuteswest;	/* minutes west of Greenwich */ +	int	tz_dsttime;	/* type of dst correction */ +}; + + +/* + * Names of the interval timers, and structure + * defining a timer setting: + */ +#define	ITIMER_REAL		0 +#define	ITIMER_VIRTUAL		1 +#define	ITIMER_PROF		2 + +struct itimerspec { +	struct timespec it_interval;	/* timer period */ +	struct timespec it_value;	/* timer expiration */ +}; + +struct itimerval { +	struct timeval it_interval;	/* timer interval */ +	struct timeval it_value;	/* current value */ +}; + +/* + * The IDs of the various system clocks (for POSIX.1b interval timers): + */ +#define CLOCK_REALTIME			0 +#define CLOCK_MONOTONIC			1 +#define CLOCK_PROCESS_CPUTIME_ID	2 +#define CLOCK_THREAD_CPUTIME_ID		3 +#define CLOCK_MONOTONIC_RAW		4 +#define CLOCK_REALTIME_COARSE		5 +#define CLOCK_MONOTONIC_COARSE		6 +#define CLOCK_BOOTTIME			7 +#define CLOCK_REALTIME_ALARM		8 +#define CLOCK_BOOTTIME_ALARM		9 + +/* + * The IDs of various hardware clocks: + */ +#define CLOCK_SGI_CYCLE			10 +#define MAX_CLOCKS			16 +#define CLOCKS_MASK			(CLOCK_REALTIME | CLOCK_MONOTONIC) +#define CLOCKS_MONO			CLOCK_MONOTONIC + +/* + * The various flags for setting POSIX.1b interval timers: + */ +#define TIMER_ABSTIME			0x01 + +#endif /* _UAPI_LINUX_TIME_H */ diff --git a/include/uapi/linux/times.h b/include/uapi/linux/times.h new file mode 100644 index 00000000000..87b62615ced --- /dev/null +++ b/include/uapi/linux/times.h @@ -0,0 +1,13 @@ +#ifndef _LINUX_TIMES_H +#define _LINUX_TIMES_H + +#include <linux/types.h> + +struct tms { +	__kernel_clock_t tms_utime; +	__kernel_clock_t tms_stime; +	__kernel_clock_t tms_cutime; +	__kernel_clock_t tms_cstime; +}; + +#endif diff --git a/include/uapi/linux/timex.h b/include/uapi/linux/timex.h new file mode 100644 index 00000000000..a7ea81f1371 --- /dev/null +++ b/include/uapi/linux/timex.h @@ -0,0 +1,166 @@ +/***************************************************************************** + *                                                                           * + * Copyright (c) David L. Mills 1993                                         * + *                                                                           * + * Permission to use, copy, modify, and distribute this software and its     * + * documentation for any purpose and without fee is hereby granted, provided * + * that the above copyright notice appears in all copies and that both the   * + * copyright notice and this permission notice appear in supporting          * + * documentation, and that the name University of Delaware not be used in    * + * advertising or publicity pertaining to distribution of the software       * + * without specific, written prior permission.  The University of Delaware   * + * makes no representations about the suitability this software for any      * + * purpose.  It is provided "as is" without express or implied warranty.     * + *                                                                           * + *****************************************************************************/ + +/* + * Modification history timex.h + * + * 29 Dec 97	Russell King + *	Moved CLOCK_TICK_RATE, CLOCK_TICK_FACTOR and FINETUNE to asm/timex.h + *	for ARM machines + * + *  9 Jan 97    Adrian Sun + *      Shifted LATCH define to allow access to alpha machines. + * + * 26 Sep 94	David L. Mills + *	Added defines for hybrid phase/frequency-lock loop. + * + * 19 Mar 94	David L. Mills + *	Moved defines from kernel routines to header file and added new + *	defines for PPS phase-lock loop. + * + * 20 Feb 94	David L. Mills + *	Revised status codes and structures for external clock and PPS + *	signal discipline. + * + * 28 Nov 93	David L. Mills + *	Adjusted parameters to improve stability and increase poll + *	interval. + * + * 17 Sep 93    David L. Mills + *      Created file $NTP/include/sys/timex.h + * 07 Oct 93    Torsten Duwe + *      Derived linux/timex.h + * 1995-08-13    Torsten Duwe + *      kernel PLL updated to 1994-12-13 specs (rfc-1589) + * 1997-08-30    Ulrich Windl + *      Added new constant NTP_PHASE_LIMIT + * 2004-08-12    Christoph Lameter + *      Reworked time interpolation logic + */ +#ifndef _UAPI_LINUX_TIMEX_H +#define _UAPI_LINUX_TIMEX_H + +#include <linux/time.h> + +#define NTP_API		4	/* NTP API version */ + +/* + * syscall interface - used (mainly by NTP daemon) + * to discipline kernel clock oscillator + */ +struct timex { +	unsigned int modes;	/* mode selector */ +	long offset;		/* time offset (usec) */ +	long freq;		/* frequency offset (scaled ppm) */ +	long maxerror;		/* maximum error (usec) */ +	long esterror;		/* estimated error (usec) */ +	int status;		/* clock command/status */ +	long constant;		/* pll time constant */ +	long precision;		/* clock precision (usec) (read only) */ +	long tolerance;		/* clock frequency tolerance (ppm) +				 * (read only) +				 */ +	struct timeval time;	/* (read only, except for ADJ_SETOFFSET) */ +	long tick;		/* (modified) usecs between clock ticks */ + +	long ppsfreq;           /* pps frequency (scaled ppm) (ro) */ +	long jitter;            /* pps jitter (us) (ro) */ +	int shift;              /* interval duration (s) (shift) (ro) */ +	long stabil;            /* pps stability (scaled ppm) (ro) */ +	long jitcnt;            /* jitter limit exceeded (ro) */ +	long calcnt;            /* calibration intervals (ro) */ +	long errcnt;            /* calibration errors (ro) */ +	long stbcnt;            /* stability limit exceeded (ro) */ + +	int tai;		/* TAI offset (ro) */ + +	int  :32; int  :32; int  :32; int  :32; +	int  :32; int  :32; int  :32; int  :32; +	int  :32; int  :32; int  :32; +}; + +/* + * Mode codes (timex.mode) + */ +#define ADJ_OFFSET		0x0001	/* time offset */ +#define ADJ_FREQUENCY		0x0002	/* frequency offset */ +#define ADJ_MAXERROR		0x0004	/* maximum time error */ +#define ADJ_ESTERROR		0x0008	/* estimated time error */ +#define ADJ_STATUS		0x0010	/* clock status */ +#define ADJ_TIMECONST		0x0020	/* pll time constant */ +#define ADJ_TAI			0x0080	/* set TAI offset */ +#define ADJ_SETOFFSET		0x0100  /* add 'time' to current time */ +#define ADJ_MICRO		0x1000	/* select microsecond resolution */ +#define ADJ_NANO		0x2000	/* select nanosecond resolution */ +#define ADJ_TICK		0x4000	/* tick value */ + +#ifndef __KERNEL__ +#define ADJ_OFFSET_SINGLESHOT	0x8001	/* old-fashioned adjtime */ +#define ADJ_OFFSET_SS_READ	0xa001	/* read-only adjtime */ +#endif + +/* NTP userland likes the MOD_ prefix better */ +#define MOD_OFFSET	ADJ_OFFSET +#define MOD_FREQUENCY	ADJ_FREQUENCY +#define MOD_MAXERROR	ADJ_MAXERROR +#define MOD_ESTERROR	ADJ_ESTERROR +#define MOD_STATUS	ADJ_STATUS +#define MOD_TIMECONST	ADJ_TIMECONST +#define MOD_TAI	ADJ_TAI +#define MOD_MICRO	ADJ_MICRO +#define MOD_NANO	ADJ_NANO + + +/* + * Status codes (timex.status) + */ +#define STA_PLL		0x0001	/* enable PLL updates (rw) */ +#define STA_PPSFREQ	0x0002	/* enable PPS freq discipline (rw) */ +#define STA_PPSTIME	0x0004	/* enable PPS time discipline (rw) */ +#define STA_FLL		0x0008	/* select frequency-lock mode (rw) */ + +#define STA_INS		0x0010	/* insert leap (rw) */ +#define STA_DEL		0x0020	/* delete leap (rw) */ +#define STA_UNSYNC	0x0040	/* clock unsynchronized (rw) */ +#define STA_FREQHOLD	0x0080	/* hold frequency (rw) */ + +#define STA_PPSSIGNAL	0x0100	/* PPS signal present (ro) */ +#define STA_PPSJITTER	0x0200	/* PPS signal jitter exceeded (ro) */ +#define STA_PPSWANDER	0x0400	/* PPS signal wander exceeded (ro) */ +#define STA_PPSERROR	0x0800	/* PPS signal calibration error (ro) */ + +#define STA_CLOCKERR	0x1000	/* clock hardware fault (ro) */ +#define STA_NANO	0x2000	/* resolution (0 = us, 1 = ns) (ro) */ +#define STA_MODE	0x4000	/* mode (0 = PLL, 1 = FLL) (ro) */ +#define STA_CLK		0x8000	/* clock source (0 = A, 1 = B) (ro) */ + +/* read-only bits */ +#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \ +	STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK) + +/* + * Clock states (time_state) + */ +#define TIME_OK		0	/* clock synchronized, no leap second */ +#define TIME_INS	1	/* insert leap second */ +#define TIME_DEL	2	/* delete leap second */ +#define TIME_OOP	3	/* leap second in progress */ +#define TIME_WAIT	4	/* leap second has occurred */ +#define TIME_ERROR	5	/* clock not synchronized */ +#define TIME_BAD	TIME_ERROR /* bw compat */ + + +#endif /* _UAPI_LINUX_TIMEX_H */ diff --git a/include/uapi/linux/tiocl.h b/include/uapi/linux/tiocl.h new file mode 100644 index 00000000000..4756862c4ed --- /dev/null +++ b/include/uapi/linux/tiocl.h @@ -0,0 +1,39 @@ +#ifndef _LINUX_TIOCL_H +#define _LINUX_TIOCL_H + +#define TIOCL_SETSEL	2	/* set a selection */ +#define 	TIOCL_SELCHAR	0	/* select characters */ +#define 	TIOCL_SELWORD	1	/* select whole words */ +#define 	TIOCL_SELLINE	2	/* select whole lines */ +#define 	TIOCL_SELPOINTER	3	/* show the pointer */ +#define 	TIOCL_SELCLEAR	4	/* clear visibility of selection */ +#define 	TIOCL_SELMOUSEREPORT	16	/* report beginning of selection */ +#define 	TIOCL_SELBUTTONMASK	15	/* button mask for report */ +/* selection extent */ +struct tiocl_selection { +	unsigned short xs;	/* X start */ +	unsigned short ys;	/* Y start */ +	unsigned short xe;	/* X end */ +	unsigned short ye;	/* Y end */ +	unsigned short sel_mode;	/* selection mode */ +}; + +#define TIOCL_PASTESEL	3	/* paste previous selection */ +#define TIOCL_UNBLANKSCREEN	4	/* unblank screen */ + +#define TIOCL_SELLOADLUT	5 +	/* set characters to be considered alphabetic when selecting */ +	/* u32[8] bit array, 4 bytes-aligned with type */ + +/* these two don't return a value: they write it back in the type */ +#define TIOCL_GETSHIFTSTATE	6	/* write shift state */ +#define TIOCL_GETMOUSEREPORTING	7	/* write whether mouse event are reported */ +#define TIOCL_SETVESABLANK	10	/* set vesa blanking mode */ +#define TIOCL_SETKMSGREDIRECT	11	/* restrict kernel messages to a vt */ +#define TIOCL_GETFGCONSOLE	12	/* get foreground vt */ +#define TIOCL_SCROLLCONSOLE	13	/* scroll console */ +#define TIOCL_BLANKSCREEN	14	/* keep screen blank even if a key is pressed */ +#define TIOCL_BLANKEDSCREEN	15	/* return which vt was blanked */ +#define TIOCL_GETKMSGREDIRECT	17	/* get the vt the kernel messages are restricted to */ + +#endif /* _LINUX_TIOCL_H */ diff --git a/include/uapi/linux/tipc.h b/include/uapi/linux/tipc.h new file mode 100644 index 00000000000..f2d90091cc2 --- /dev/null +++ b/include/uapi/linux/tipc.h @@ -0,0 +1,209 @@ +/* + * include/linux/tipc.h: Include file for TIPC socket interface + * + * Copyright (c) 2003-2006, Ericsson AB + * Copyright (c) 2005, 2010-2011, Wind River Systems + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the names of the copyright holders nor the names of its + *    contributors may be used to endorse or promote products derived from + *    this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _LINUX_TIPC_H_ +#define _LINUX_TIPC_H_ + +#include <linux/types.h> + +/* + * TIPC addressing primitives + */ + +struct tipc_portid { +	__u32 ref; +	__u32 node; +}; + +struct tipc_name { +	__u32 type; +	__u32 instance; +}; + +struct tipc_name_seq { +	__u32 type; +	__u32 lower; +	__u32 upper; +}; + +static inline __u32 tipc_addr(unsigned int zone, +			      unsigned int cluster, +			      unsigned int node) +{ +	return (zone << 24) | (cluster << 12) | node; +} + +static inline unsigned int tipc_zone(__u32 addr) +{ +	return addr >> 24; +} + +static inline unsigned int tipc_cluster(__u32 addr) +{ +	return (addr >> 12) & 0xfff; +} + +static inline unsigned int tipc_node(__u32 addr) +{ +	return addr & 0xfff; +} + +/* + * Application-accessible port name types + */ + +#define TIPC_CFG_SRV		0	/* configuration service name type */ +#define TIPC_TOP_SRV		1	/* topology service name type */ +#define TIPC_RESERVED_TYPES	64	/* lowest user-publishable name type */ + +/* + * Publication scopes when binding port names and port name sequences + */ + +#define TIPC_ZONE_SCOPE		1 +#define TIPC_CLUSTER_SCOPE	2 +#define TIPC_NODE_SCOPE		3 + +/* + * Limiting values for messages + */ + +#define TIPC_MAX_USER_MSG_SIZE	66000U + +/* + * Message importance levels + */ + +#define TIPC_LOW_IMPORTANCE		0 +#define TIPC_MEDIUM_IMPORTANCE		1 +#define TIPC_HIGH_IMPORTANCE		2 +#define TIPC_CRITICAL_IMPORTANCE	3 + +/* + * Msg rejection/connection shutdown reasons + */ + +#define TIPC_OK			0 +#define TIPC_ERR_NO_NAME	1 +#define TIPC_ERR_NO_PORT	2 +#define TIPC_ERR_NO_NODE	3 +#define TIPC_ERR_OVERLOAD	4 +#define TIPC_CONN_SHUTDOWN	5 + +/* + * TIPC topology subscription service definitions + */ + +#define TIPC_SUB_PORTS		0x01	/* filter for port availability */ +#define TIPC_SUB_SERVICE	0x02	/* filter for service availability */ +#define TIPC_SUB_CANCEL		0x04	/* cancel a subscription */ + +#define TIPC_WAIT_FOREVER	(~0)	/* timeout for permanent subscription */ + +struct tipc_subscr { +	struct tipc_name_seq seq;	/* name sequence of interest */ +	__u32 timeout;			/* subscription duration (in ms) */ +	__u32 filter;			/* bitmask of filter options */ +	char usr_handle[8];		/* available for subscriber use */ +}; + +#define TIPC_PUBLISHED		1	/* publication event */ +#define TIPC_WITHDRAWN		2	/* withdraw event */ +#define TIPC_SUBSCR_TIMEOUT	3	/* subscription timeout event */ + +struct tipc_event { +	__u32 event;			/* event type */ +	__u32 found_lower;		/* matching name seq instances */ +	__u32 found_upper;		/*    "      "    "     "      */ +	struct tipc_portid port;	/* associated port */ +	struct tipc_subscr s;		/* associated subscription */ +}; + +/* + * Socket API + */ + +#ifndef AF_TIPC +#define AF_TIPC		30 +#endif + +#ifndef PF_TIPC +#define PF_TIPC		AF_TIPC +#endif + +#ifndef SOL_TIPC +#define SOL_TIPC	271 +#endif + +#define TIPC_ADDR_NAMESEQ	1 +#define TIPC_ADDR_MCAST		1 +#define TIPC_ADDR_NAME		2 +#define TIPC_ADDR_ID		3 + +struct sockaddr_tipc { +	unsigned short family; +	unsigned char  addrtype; +	signed   char  scope; +	union { +		struct tipc_portid id; +		struct tipc_name_seq nameseq; +		struct { +			struct tipc_name name; +			__u32 domain; +		} name; +	} addr; +}; + +/* + * Ancillary data objects supported by recvmsg() + */ + +#define TIPC_ERRINFO	1	/* error info */ +#define TIPC_RETDATA	2	/* returned data */ +#define TIPC_DESTNAME	3	/* destination name */ + +/* + * TIPC-specific socket option values + */ + +#define TIPC_IMPORTANCE		127	/* Default: TIPC_LOW_IMPORTANCE */ +#define TIPC_SRC_DROPPABLE	128	/* Default: based on socket type */ +#define TIPC_DEST_DROPPABLE	129	/* Default: based on socket type */ +#define TIPC_CONN_TIMEOUT	130	/* Default: 8000 (ms)  */ +#define TIPC_NODE_RECVQ_DEPTH	131	/* Default: none (read only) */ +#define TIPC_SOCK_RECVQ_DEPTH	132	/* Default: none (read only) */ + +#endif diff --git a/include/uapi/linux/tipc_config.h b/include/uapi/linux/tipc_config.h new file mode 100644 index 00000000000..0b1e3f218a3 --- /dev/null +++ b/include/uapi/linux/tipc_config.h @@ -0,0 +1,395 @@ +/* + * include/linux/tipc_config.h: Include file for TIPC configuration interface + * + * Copyright (c) 2003-2006, Ericsson AB + * Copyright (c) 2005-2007, 2010-2011, Wind River Systems + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the names of the copyright holders nor the names of its + *    contributors may be used to endorse or promote products derived from + *    this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _LINUX_TIPC_CONFIG_H_ +#define _LINUX_TIPC_CONFIG_H_ + +#include <linux/types.h> +#include <linux/string.h> +#include <asm/byteorder.h> + +#ifndef __KERNEL__ +#include <arpa/inet.h> /* for ntohs etc. */ +#endif + +/* + * Configuration + * + * All configuration management messaging involves sending a request message + * to the TIPC configuration service on a node, which sends a reply message + * back.  (In the future multi-message replies may be supported.) + * + * Both request and reply messages consist of a transport header and payload. + * The transport header contains info about the desired operation; + * the payload consists of zero or more type/length/value (TLV) items + * which specify parameters or results for the operation. + * + * For many operations, the request and reply messages have a fixed number + * of TLVs (usually zero or one); however, some reply messages may return + * a variable number of TLVs.  A failed request is denoted by the presence + * of an "error string" TLV in the reply message instead of the TLV(s) the + * reply should contain if the request succeeds. + */ + +/* + * Public commands: + * May be issued by any process. + * Accepted by own node, or by remote node only if remote management enabled. + */ + +#define  TIPC_CMD_NOOP              0x0000    /* tx none, rx none */ +#define  TIPC_CMD_GET_NODES         0x0001    /* tx net_addr, rx node_info(s) */ +#define  TIPC_CMD_GET_MEDIA_NAMES   0x0002    /* tx none, rx media_name(s) */ +#define  TIPC_CMD_GET_BEARER_NAMES  0x0003    /* tx none, rx bearer_name(s) */ +#define  TIPC_CMD_GET_LINKS         0x0004    /* tx net_addr, rx link_info(s) */ +#define  TIPC_CMD_SHOW_NAME_TABLE   0x0005    /* tx name_tbl_query, rx ultra_string */ +#define  TIPC_CMD_SHOW_PORTS        0x0006    /* tx none, rx ultra_string */ +#define  TIPC_CMD_SHOW_LINK_STATS   0x000B    /* tx link_name, rx ultra_string */ +#define  TIPC_CMD_SHOW_STATS        0x000F    /* tx unsigned, rx ultra_string */ + +/* + * Protected commands: + * May only be issued by "network administration capable" process. + * Accepted by own node, or by remote node only if remote management enabled + * and this node is zone manager. + */ + +#define  TIPC_CMD_GET_REMOTE_MNG    0x4003    /* tx none, rx unsigned */ +#define  TIPC_CMD_GET_MAX_PORTS     0x4004    /* tx none, rx unsigned */ +#define  TIPC_CMD_GET_MAX_PUBL      0x4005    /* obsoleted */ +#define  TIPC_CMD_GET_MAX_SUBSCR    0x4006    /* obsoleted */ +#define  TIPC_CMD_GET_MAX_ZONES     0x4007    /* obsoleted */ +#define  TIPC_CMD_GET_MAX_CLUSTERS  0x4008    /* obsoleted */ +#define  TIPC_CMD_GET_MAX_NODES     0x4009    /* obsoleted */ +#define  TIPC_CMD_GET_MAX_SLAVES    0x400A    /* obsoleted */ +#define  TIPC_CMD_GET_NETID         0x400B    /* tx none, rx unsigned */ + +#define  TIPC_CMD_ENABLE_BEARER     0x4101    /* tx bearer_config, rx none */ +#define  TIPC_CMD_DISABLE_BEARER    0x4102    /* tx bearer_name, rx none */ +#define  TIPC_CMD_SET_LINK_TOL      0x4107    /* tx link_config, rx none */ +#define  TIPC_CMD_SET_LINK_PRI      0x4108    /* tx link_config, rx none */ +#define  TIPC_CMD_SET_LINK_WINDOW   0x4109    /* tx link_config, rx none */ +#define  TIPC_CMD_SET_LOG_SIZE      0x410A    /* obsoleted */ +#define  TIPC_CMD_DUMP_LOG          0x410B    /* obsoleted */ +#define  TIPC_CMD_RESET_LINK_STATS  0x410C    /* tx link_name, rx none */ + +/* + * Private commands: + * May only be issued by "network administration capable" process. + * Accepted by own node only; cannot be used on a remote node. + */ + +#define  TIPC_CMD_SET_NODE_ADDR     0x8001    /* tx net_addr, rx none */ +#define  TIPC_CMD_SET_REMOTE_MNG    0x8003    /* tx unsigned, rx none */ +#define  TIPC_CMD_SET_MAX_PORTS     0x8004    /* tx unsigned, rx none */ +#define  TIPC_CMD_SET_MAX_PUBL      0x8005    /* obsoleted */ +#define  TIPC_CMD_SET_MAX_SUBSCR    0x8006    /* obsoleted */ +#define  TIPC_CMD_SET_MAX_ZONES     0x8007    /* obsoleted */ +#define  TIPC_CMD_SET_MAX_CLUSTERS  0x8008    /* obsoleted */ +#define  TIPC_CMD_SET_MAX_NODES     0x8009    /* obsoleted */ +#define  TIPC_CMD_SET_MAX_SLAVES    0x800A    /* obsoleted */ +#define  TIPC_CMD_SET_NETID         0x800B    /* tx unsigned, rx none */ + +/* + * Reserved commands: + * May not be issued by any process. + * Used internally by TIPC. + */ + +#define  TIPC_CMD_NOT_NET_ADMIN     0xC001    /* tx none, rx none */ + +/* + * TLV types defined for TIPC + */ + +#define TIPC_TLV_NONE		0	/* no TLV present */ +#define TIPC_TLV_VOID		1	/* empty TLV (0 data bytes)*/ +#define TIPC_TLV_UNSIGNED	2	/* 32-bit integer */ +#define TIPC_TLV_STRING		3	/* char[128] (max) */ +#define TIPC_TLV_LARGE_STRING	4	/* char[2048] (max) */ +#define TIPC_TLV_ULTRA_STRING	5	/* char[32768] (max) */ + +#define TIPC_TLV_ERROR_STRING	16	/* char[128] containing "error code" */ +#define TIPC_TLV_NET_ADDR	17	/* 32-bit integer denoting <Z.C.N> */ +#define TIPC_TLV_MEDIA_NAME	18	/* char[TIPC_MAX_MEDIA_NAME] */ +#define TIPC_TLV_BEARER_NAME	19	/* char[TIPC_MAX_BEARER_NAME] */ +#define TIPC_TLV_LINK_NAME	20	/* char[TIPC_MAX_LINK_NAME] */ +#define TIPC_TLV_NODE_INFO	21	/* struct tipc_node_info */ +#define TIPC_TLV_LINK_INFO	22	/* struct tipc_link_info */ +#define TIPC_TLV_BEARER_CONFIG	23	/* struct tipc_bearer_config */ +#define TIPC_TLV_LINK_CONFIG	24	/* struct tipc_link_config */ +#define TIPC_TLV_NAME_TBL_QUERY	25	/* struct tipc_name_table_query */ +#define TIPC_TLV_PORT_REF	26	/* 32-bit port reference */ + +/* + * Maximum sizes of TIPC bearer-related names (including terminating NUL) + */ + +#define TIPC_MAX_MEDIA_NAME	16	/* format = media */ +#define TIPC_MAX_IF_NAME	16	/* format = interface */ +#define TIPC_MAX_BEARER_NAME	32	/* format = media:interface */ +#define TIPC_MAX_LINK_NAME	60	/* format = Z.C.N:interface-Z.C.N:interface */ + +/* + * Link priority limits (min, default, max, media default) + */ + +#define TIPC_MIN_LINK_PRI	0 +#define TIPC_DEF_LINK_PRI	10 +#define TIPC_MAX_LINK_PRI	31 +#define TIPC_MEDIA_LINK_PRI	(TIPC_MAX_LINK_PRI + 1) + +/* + * Link tolerance limits (min, default, max), in ms + */ + +#define TIPC_MIN_LINK_TOL 50 +#define TIPC_DEF_LINK_TOL 1500 +#define TIPC_MAX_LINK_TOL 30000 + +#if (TIPC_MIN_LINK_TOL < 16) +#error "TIPC_MIN_LINK_TOL is too small (abort limit may be NaN)" +#endif + +/* + * Link window limits (min, default, max), in packets + */ + +#define TIPC_MIN_LINK_WIN 16 +#define TIPC_DEF_LINK_WIN 50 +#define TIPC_MAX_LINK_WIN 150 + + +struct tipc_node_info { +	__be32 addr;			/* network address of node */ +	__be32 up;			/* 0=down, 1= up */ +}; + +struct tipc_link_info { +	__be32 dest;			/* network address of peer node */ +	__be32 up;			/* 0=down, 1=up */ +	char str[TIPC_MAX_LINK_NAME];	/* link name */ +}; + +struct tipc_bearer_config { +	__be32 priority;		/* Range [1,31]. Override per link  */ +	__be32 disc_domain;		/* <Z.C.N> describing desired nodes */ +	char name[TIPC_MAX_BEARER_NAME]; +}; + +struct tipc_link_config { +	__be32 value; +	char name[TIPC_MAX_LINK_NAME]; +}; + +#define TIPC_NTQ_ALLTYPES 0x80000000 + +struct tipc_name_table_query { +	__be32 depth;	/* 1:type, 2:+name info, 3:+port info, 4+:+debug info */ +	__be32 type;	/* {t,l,u} info ignored if high bit of "depth" is set */ +	__be32 lowbound; /* (i.e. displays all entries of name table) */ +	__be32 upbound; +}; + +/* + * The error string TLV is a null-terminated string describing the cause + * of the request failure.  To simplify error processing (and to save space) + * the first character of the string can be a special error code character + * (lying by the range 0x80 to 0xFF) which represents a pre-defined reason. + */ + +#define TIPC_CFG_TLV_ERROR      "\x80"  /* request contains incorrect TLV(s) */ +#define TIPC_CFG_NOT_NET_ADMIN  "\x81"	/* must be network administrator */ +#define TIPC_CFG_NOT_ZONE_MSTR	"\x82"	/* must be zone master */ +#define TIPC_CFG_NO_REMOTE	"\x83"	/* remote management not enabled */ +#define TIPC_CFG_NOT_SUPPORTED  "\x84"	/* request is not supported by TIPC */ +#define TIPC_CFG_INVALID_VALUE  "\x85"  /* request has invalid argument value */ + +/* + * A TLV consists of a descriptor, followed by the TLV value. + * TLV descriptor fields are stored in network byte order; + * TLV values must also be stored in network byte order (where applicable). + * TLV descriptors must be aligned to addresses which are multiple of 4, + * so up to 3 bytes of padding may exist at the end of the TLV value area. + * There must not be any padding between the TLV descriptor and its value. + */ + +struct tlv_desc { +	__be16 tlv_len;		/* TLV length (descriptor + value) */ +	__be16 tlv_type;		/* TLV identifier */ +}; + +#define TLV_ALIGNTO 4 + +#define TLV_ALIGN(datalen) (((datalen)+(TLV_ALIGNTO-1)) & ~(TLV_ALIGNTO-1)) +#define TLV_LENGTH(datalen) (sizeof(struct tlv_desc) + (datalen)) +#define TLV_SPACE(datalen) (TLV_ALIGN(TLV_LENGTH(datalen))) +#define TLV_DATA(tlv) ((void *)((char *)(tlv) + TLV_LENGTH(0))) + +static inline int TLV_OK(const void *tlv, __u16 space) +{ +	/* +	 * Would also like to check that "tlv" is a multiple of 4, +	 * but don't know how to do this in a portable way. +	 * - Tried doing (!(tlv & (TLV_ALIGNTO-1))), but GCC compiler +	 *   won't allow binary "&" with a pointer. +	 * - Tried casting "tlv" to integer type, but causes warning about size +	 *   mismatch when pointer is bigger than chosen type (int, long, ...). +	 */ + +	return (space >= TLV_SPACE(0)) && +		(ntohs(((struct tlv_desc *)tlv)->tlv_len) <= space); +} + +static inline int TLV_CHECK(const void *tlv, __u16 space, __u16 exp_type) +{ +	return TLV_OK(tlv, space) && +		(ntohs(((struct tlv_desc *)tlv)->tlv_type) == exp_type); +} + +static inline int TLV_SET(void *tlv, __u16 type, void *data, __u16 len) +{ +	struct tlv_desc *tlv_ptr; +	int tlv_len; + +	tlv_len = TLV_LENGTH(len); +	tlv_ptr = (struct tlv_desc *)tlv; +	tlv_ptr->tlv_type = htons(type); +	tlv_ptr->tlv_len  = htons(tlv_len); +	if (len && data) +		memcpy(TLV_DATA(tlv_ptr), data, tlv_len); +	return TLV_SPACE(len); +} + +/* + * A TLV list descriptor simplifies processing of messages + * containing multiple TLVs. + */ + +struct tlv_list_desc { +	struct tlv_desc *tlv_ptr;	/* ptr to current TLV */ +	__u32 tlv_space;		/* # bytes from curr TLV to list end */ +}; + +static inline void TLV_LIST_INIT(struct tlv_list_desc *list, +				 void *data, __u32 space) +{ +	list->tlv_ptr = (struct tlv_desc *)data; +	list->tlv_space = space; +} + +static inline int TLV_LIST_EMPTY(struct tlv_list_desc *list) +{ +	return (list->tlv_space == 0); +} + +static inline int TLV_LIST_CHECK(struct tlv_list_desc *list, __u16 exp_type) +{ +	return TLV_CHECK(list->tlv_ptr, list->tlv_space, exp_type); +} + +static inline void *TLV_LIST_DATA(struct tlv_list_desc *list) +{ +	return TLV_DATA(list->tlv_ptr); +} + +static inline void TLV_LIST_STEP(struct tlv_list_desc *list) +{ +	__u16 tlv_space = TLV_ALIGN(ntohs(list->tlv_ptr->tlv_len)); + +	list->tlv_ptr = (struct tlv_desc *)((char *)list->tlv_ptr + tlv_space); +	list->tlv_space -= tlv_space; +} + +/* + * Configuration messages exchanged via NETLINK_GENERIC use the following + * family id, name, version and command. + */ +#define TIPC_GENL_NAME		"TIPC" +#define TIPC_GENL_VERSION	0x1 +#define TIPC_GENL_CMD		0x1 + +/* + * TIPC specific header used in NETLINK_GENERIC requests. + */ +struct tipc_genlmsghdr { +	__u32 dest;		/* Destination address */ +	__u16 cmd;		/* Command */ +	__u16 reserved;		/* Unused */ +}; + +#define TIPC_GENL_HDRLEN	NLMSG_ALIGN(sizeof(struct tipc_genlmsghdr)) + +/* + * Configuration messages exchanged via TIPC sockets use the TIPC configuration + * message header, which is defined below.  This structure is analogous + * to the Netlink message header, but fields are stored in network byte order + * and no padding is permitted between the header and the message data + * that follows. + */ + +struct tipc_cfg_msg_hdr { +	__be32 tcm_len;		/* Message length (including header) */ +	__be16 tcm_type;	/* Command type */ +	__be16 tcm_flags;	/* Additional flags */ +	char  tcm_reserved[8];	/* Unused */ +}; + +#define TCM_F_REQUEST	0x1	/* Flag: Request message */ +#define TCM_F_MORE	0x2	/* Flag: Message to be continued */ + +#define TCM_ALIGN(datalen)  (((datalen)+3) & ~3) +#define TCM_LENGTH(datalen) (sizeof(struct tipc_cfg_msg_hdr) + datalen) +#define TCM_SPACE(datalen)  (TCM_ALIGN(TCM_LENGTH(datalen))) +#define TCM_DATA(tcm_hdr)   ((void *)((char *)(tcm_hdr) + TCM_LENGTH(0))) + +static inline int TCM_SET(void *msg, __u16 cmd, __u16 flags, +			  void *data, __u16 data_len) +{ +	struct tipc_cfg_msg_hdr *tcm_hdr; +	int msg_len; + +	msg_len = TCM_LENGTH(data_len); +	tcm_hdr = (struct tipc_cfg_msg_hdr *)msg; +	tcm_hdr->tcm_len   = htonl(msg_len); +	tcm_hdr->tcm_type  = htons(cmd); +	tcm_hdr->tcm_flags = htons(flags); +	if (data_len && data) +		memcpy(TCM_DATA(msg), data, data_len); +	return TCM_SPACE(data_len); +} + +#endif diff --git a/include/uapi/linux/toshiba.h b/include/uapi/linux/toshiba.h new file mode 100644 index 00000000000..e9bef5b2f91 --- /dev/null +++ b/include/uapi/linux/toshiba.h @@ -0,0 +1,37 @@ +/* toshiba.h -- Linux driver for accessing the SMM on Toshiba laptops  + * + * Copyright (c) 1996-2000  Jonathan A. Buzzard (jonathan@buzzard.org.uk) + * + * Thanks to Juergen Heinzl <juergen@monocerus.demon.co.uk> for the pointers + * on making sure the structure is aligned and packed. + * + * 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, 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. + * + */ + +#ifndef _UAPI_LINUX_TOSHIBA_H +#define _UAPI_LINUX_TOSHIBA_H + +#define TOSH_PROC "/proc/toshiba" +#define TOSH_DEVICE "/dev/toshiba" +#define TOSH_SMM _IOWR('t', 0x90, int)	/* broken: meant 24 bytes */ + +typedef struct { +	unsigned int eax; +	unsigned int ebx __attribute__ ((packed)); +	unsigned int ecx __attribute__ ((packed)); +	unsigned int edx __attribute__ ((packed)); +	unsigned int esi __attribute__ ((packed)); +	unsigned int edi __attribute__ ((packed)); +} SMMRegisters; + + +#endif /* _UAPI_LINUX_TOSHIBA_H */ diff --git a/include/uapi/linux/tty.h b/include/uapi/linux/tty.h new file mode 100644 index 00000000000..dac199a2dba --- /dev/null +++ b/include/uapi/linux/tty.h @@ -0,0 +1,38 @@ +#ifndef _UAPI_LINUX_TTY_H +#define _UAPI_LINUX_TTY_H + +/* + * 'tty.h' defines some structures used by tty_io.c and some defines. + */ + +#define NR_LDISCS		30 + +/* line disciplines */ +#define N_TTY		0 +#define N_SLIP		1 +#define N_MOUSE		2 +#define N_PPP		3 +#define N_STRIP		4 +#define N_AX25		5 +#define N_X25		6	/* X.25 async */ +#define N_6PACK		7 +#define N_MASC		8	/* Reserved for Mobitex module <kaz@cafe.net> */ +#define N_R3964		9	/* Reserved for Simatic R3964 module */ +#define N_PROFIBUS_FDL	10	/* Reserved for Profibus */ +#define N_IRDA		11	/* Linux IrDa - http://irda.sourceforge.net/ */ +#define N_SMSBLOCK	12	/* SMS block mode - for talking to GSM data */ +				/* cards about SMS messages */ +#define N_HDLC		13	/* synchronous HDLC */ +#define N_SYNC_PPP	14	/* synchronous PPP */ +#define N_HCI		15	/* Bluetooth HCI UART */ +#define N_GIGASET_M101	16	/* Siemens Gigaset M101 serial DECT adapter */ +#define N_SLCAN		17	/* Serial / USB serial CAN Adaptors */ +#define N_PPS		18	/* Pulse per Second */ +#define N_V253		19	/* Codec control over voice modem */ +#define N_CAIF		20      /* CAIF protocol for talking to modems */ +#define N_GSM0710	21	/* GSM 0710 Mux */ +#define N_TI_WL		22	/* for TI's WL BT, FM, GPS combo chips */ +#define N_TRACESINK	23	/* Trace data routing for MIPI P1149.7 */ +#define N_TRACEROUTER	24	/* Trace data routing for MIPI P1149.7 */ + +#endif /* _UAPI_LINUX_TTY_H */ diff --git a/include/uapi/linux/tty_flags.h b/include/uapi/linux/tty_flags.h new file mode 100644 index 00000000000..eefcb483a2c --- /dev/null +++ b/include/uapi/linux/tty_flags.h @@ -0,0 +1,78 @@ +#ifndef _LINUX_TTY_FLAGS_H +#define _LINUX_TTY_FLAGS_H + +/* + * Definitions for async_struct (and serial_struct) flags field also + * shared by the tty_port flags structures. + * + * Define ASYNCB_* for convenient use with {test,set,clear}_bit. + */ +#define ASYNCB_HUP_NOTIFY	 0 /* Notify getty on hangups and closes +				    * on the callout port */ +#define ASYNCB_FOURPORT		 1 /* Set OU1, OUT2 per AST Fourport settings */ +#define ASYNCB_SAK		 2 /* Secure Attention Key (Orange book) */ +#define ASYNCB_SPLIT_TERMIOS	 3 /* Separate termios for dialin/callout */ +#define ASYNCB_SPD_HI		 4 /* Use 56000 instead of 38400 bps */ +#define ASYNCB_SPD_VHI		 5 /* Use 115200 instead of 38400 bps */ +#define ASYNCB_SKIP_TEST	 6 /* Skip UART test during autoconfiguration */ +#define ASYNCB_AUTO_IRQ		 7 /* Do automatic IRQ during +				    * autoconfiguration */ +#define ASYNCB_SESSION_LOCKOUT	 8 /* Lock out cua opens based on session */ +#define ASYNCB_PGRP_LOCKOUT	 9 /* Lock out cua opens based on pgrp */ +#define ASYNCB_CALLOUT_NOHUP	10 /* Don't do hangups for cua device */ +#define ASYNCB_HARDPPS_CD	11 /* Call hardpps when CD goes high  */ +#define ASYNCB_SPD_SHI		12 /* Use 230400 instead of 38400 bps */ +#define ASYNCB_LOW_LATENCY	13 /* Request low latency behaviour */ +#define ASYNCB_BUGGY_UART	14 /* This is a buggy UART, skip some safety +				    * checks.  Note: can be dangerous! */ +#define ASYNCB_AUTOPROBE	15 /* Port was autoprobed by PCI or PNP code */ +#define ASYNCB_LAST_USER	15 + +/* Internal flags used only by kernel */ +#define ASYNCB_INITIALIZED	31 /* Serial port was initialized */ +#define ASYNCB_SUSPENDED	30 /* Serial port is suspended */ +#define ASYNCB_NORMAL_ACTIVE	29 /* Normal device is active */ +#define ASYNCB_BOOT_AUTOCONF	28 /* Autoconfigure port on bootup */ +#define ASYNCB_CLOSING		27 /* Serial port is closing */ +#define ASYNCB_CTS_FLOW		26 /* Do CTS flow control */ +#define ASYNCB_CHECK_CD		25 /* i.e., CLOCAL */ +#define ASYNCB_SHARE_IRQ	24 /* for multifunction cards, no longer used */ +#define ASYNCB_CONS_FLOW	23 /* flow control for console  */ +#define ASYNCB_FIRST_KERNEL	22 + +#define ASYNC_HUP_NOTIFY	(1U << ASYNCB_HUP_NOTIFY) +#define ASYNC_SUSPENDED		(1U << ASYNCB_SUSPENDED) +#define ASYNC_FOURPORT		(1U << ASYNCB_FOURPORT) +#define ASYNC_SAK		(1U << ASYNCB_SAK) +#define ASYNC_SPLIT_TERMIOS	(1U << ASYNCB_SPLIT_TERMIOS) +#define ASYNC_SPD_HI		(1U << ASYNCB_SPD_HI) +#define ASYNC_SPD_VHI		(1U << ASYNCB_SPD_VHI) +#define ASYNC_SKIP_TEST		(1U << ASYNCB_SKIP_TEST) +#define ASYNC_AUTO_IRQ		(1U << ASYNCB_AUTO_IRQ) +#define ASYNC_SESSION_LOCKOUT	(1U << ASYNCB_SESSION_LOCKOUT) +#define ASYNC_PGRP_LOCKOUT	(1U << ASYNCB_PGRP_LOCKOUT) +#define ASYNC_CALLOUT_NOHUP	(1U << ASYNCB_CALLOUT_NOHUP) +#define ASYNC_HARDPPS_CD	(1U << ASYNCB_HARDPPS_CD) +#define ASYNC_SPD_SHI		(1U << ASYNCB_SPD_SHI) +#define ASYNC_LOW_LATENCY	(1U << ASYNCB_LOW_LATENCY) +#define ASYNC_BUGGY_UART	(1U << ASYNCB_BUGGY_UART) +#define ASYNC_AUTOPROBE		(1U << ASYNCB_AUTOPROBE) + +#define ASYNC_FLAGS		((1U << (ASYNCB_LAST_USER + 1)) - 1) +#define ASYNC_USR_MASK		(ASYNC_SPD_MASK|ASYNC_CALLOUT_NOHUP| \ +		ASYNC_LOW_LATENCY) +#define ASYNC_SPD_CUST		(ASYNC_SPD_HI|ASYNC_SPD_VHI) +#define ASYNC_SPD_WARP		(ASYNC_SPD_HI|ASYNC_SPD_SHI) +#define ASYNC_SPD_MASK		(ASYNC_SPD_HI|ASYNC_SPD_VHI|ASYNC_SPD_SHI) + +#define ASYNC_INITIALIZED	(1U << ASYNCB_INITIALIZED) +#define ASYNC_NORMAL_ACTIVE	(1U << ASYNCB_NORMAL_ACTIVE) +#define ASYNC_BOOT_AUTOCONF	(1U << ASYNCB_BOOT_AUTOCONF) +#define ASYNC_CLOSING		(1U << ASYNCB_CLOSING) +#define ASYNC_CTS_FLOW		(1U << ASYNCB_CTS_FLOW) +#define ASYNC_CHECK_CD		(1U << ASYNCB_CHECK_CD) +#define ASYNC_SHARE_IRQ		(1U << ASYNCB_SHARE_IRQ) +#define ASYNC_CONS_FLOW		(1U << ASYNCB_CONS_FLOW) +#define ASYNC_INTERNAL_FLAGS	(~((1U << ASYNCB_FIRST_KERNEL) - 1)) + +#endif diff --git a/include/uapi/linux/types.h b/include/uapi/linux/types.h new file mode 100644 index 00000000000..acf0979b790 --- /dev/null +++ b/include/uapi/linux/types.h @@ -0,0 +1,56 @@ +#ifndef _UAPI_LINUX_TYPES_H +#define _UAPI_LINUX_TYPES_H + +#include <asm/types.h> + +#ifndef __ASSEMBLY__ +#ifndef	__KERNEL__ +#ifndef __EXPORTED_HEADERS__ +#warning "Attempt to use kernel headers from user space, see http://kernelnewbies.org/KernelHeaders" +#endif /* __EXPORTED_HEADERS__ */ +#endif + +#include <linux/posix_types.h> + + +/* + * Below are truly Linux-specific types that should never collide with + * any application/library that wants linux/types.h. + */ + +#ifdef __CHECKER__ +#define __bitwise__ __attribute__((bitwise)) +#else +#define __bitwise__ +#endif +#ifdef __CHECK_ENDIAN__ +#define __bitwise __bitwise__ +#else +#define __bitwise +#endif + +typedef __u16 __bitwise __le16; +typedef __u16 __bitwise __be16; +typedef __u32 __bitwise __le32; +typedef __u32 __bitwise __be32; +typedef __u64 __bitwise __le64; +typedef __u64 __bitwise __be64; + +typedef __u16 __bitwise __sum16; +typedef __u32 __bitwise __wsum; + +/* + * aligned_u64 should be used in defining kernel<->userspace ABIs to avoid + * common 32/64-bit compat problems. + * 64-bit values align to 4-byte boundaries on x86_32 (and possibly other + * architectures) and to 8-byte boundaries on 64-bit architectures.  The new + * aligned_64 type enforces 8-byte alignment so that structs containing + * aligned_64 values have the same alignment on 32-bit and 64-bit architectures. + * No conversions are necessary between 32-bit user-space and a 64-bit kernel. + */ +#define __aligned_u64 __u64 __attribute__((aligned(8))) +#define __aligned_be64 __be64 __attribute__((aligned(8))) +#define __aligned_le64 __le64 __attribute__((aligned(8))) + +#endif /*  __ASSEMBLY__ */ +#endif /* _UAPI_LINUX_TYPES_H */ diff --git a/include/uapi/linux/udf_fs_i.h b/include/uapi/linux/udf_fs_i.h new file mode 100644 index 00000000000..3536965913b --- /dev/null +++ b/include/uapi/linux/udf_fs_i.h @@ -0,0 +1,21 @@ +/* + * udf_fs_i.h + * + * This file is intended for the Linux kernel/module.  + * + * COPYRIGHT + *	This file is distributed under the terms of the GNU General Public + *	License (GPL). Copies of the GPL can be obtained from: + *		ftp://prep.ai.mit.edu/pub/gnu/GPL + *	Each contributing author retains all rights to their own work. + */ +#ifndef _UDF_FS_I_H +#define _UDF_FS_I_H 1 + +/* exported IOCTLs, we have 'l', 0x40-0x7f */ +#define UDF_GETEASIZE   _IOR('l', 0x40, int) +#define UDF_GETEABLOCK  _IOR('l', 0x41, void *) +#define UDF_GETVOLIDENT _IOR('l', 0x42, void *) +#define UDF_RELOCATE_BLOCKS _IOWR('l', 0x43, long) + +#endif /* _UDF_FS_I_H */ diff --git a/include/uapi/linux/udp.h b/include/uapi/linux/udp.h new file mode 100644 index 00000000000..e2bcfd75a30 --- /dev/null +++ b/include/uapi/linux/udp.h @@ -0,0 +1,39 @@ +/* + * INET		An implementation of the TCP/IP protocol suite for the LINUX + *		operating system.  INET is implemented using the  BSD Socket + *		interface as the means of communication with the user level. + * + *		Definitions for the UDP protocol. + * + * Version:	@(#)udp.h	1.0.2	04/28/93 + * + * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> + * + *		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. + */ +#ifndef _UAPI_LINUX_UDP_H +#define _UAPI_LINUX_UDP_H + +#include <linux/types.h> + +struct udphdr { +	__be16	source; +	__be16	dest; +	__be16	len; +	__sum16	check; +}; + +/* UDP socket options */ +#define UDP_CORK	1	/* Never send partially complete segments */ +#define UDP_ENCAP	100	/* Set the socket to accept encapsulated packets */ + +/* UDP encapsulation types */ +#define UDP_ENCAP_ESPINUDP_NON_IKE	1 /* draft-ietf-ipsec-nat-t-ike-00/01 */ +#define UDP_ENCAP_ESPINUDP	2 /* draft-ietf-ipsec-udp-encaps-06 */ +#define UDP_ENCAP_L2TPINUDP	3 /* rfc2661 */ + + +#endif /* _UAPI_LINUX_UDP_H */ diff --git a/include/uapi/linux/uhid.h b/include/uapi/linux/uhid.h new file mode 100644 index 00000000000..9c6974f1696 --- /dev/null +++ b/include/uapi/linux/uhid.h @@ -0,0 +1,104 @@ +#ifndef __UHID_H_ +#define __UHID_H_ + +/* + * User-space I/O driver support for HID subsystem + * Copyright (c) 2012 David Herrmann + */ + +/* + * 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. + */ + +/* + * Public header for user-space communication. We try to keep every structure + * aligned but to be safe we also use __attribute__((__packed__)). Therefore, + * the communication should be ABI compatible even between architectures. + */ + +#include <linux/input.h> +#include <linux/types.h> + +enum uhid_event_type { +	UHID_CREATE, +	UHID_DESTROY, +	UHID_START, +	UHID_STOP, +	UHID_OPEN, +	UHID_CLOSE, +	UHID_OUTPUT, +	UHID_OUTPUT_EV, +	UHID_INPUT, +	UHID_FEATURE, +	UHID_FEATURE_ANSWER, +}; + +struct uhid_create_req { +	__u8 name[128]; +	__u8 phys[64]; +	__u8 uniq[64]; +	__u8 __user *rd_data; +	__u16 rd_size; + +	__u16 bus; +	__u32 vendor; +	__u32 product; +	__u32 version; +	__u32 country; +} __attribute__((__packed__)); + +#define UHID_DATA_MAX 4096 + +enum uhid_report_type { +	UHID_FEATURE_REPORT, +	UHID_OUTPUT_REPORT, +	UHID_INPUT_REPORT, +}; + +struct uhid_input_req { +	__u8 data[UHID_DATA_MAX]; +	__u16 size; +} __attribute__((__packed__)); + +struct uhid_output_req { +	__u8 data[UHID_DATA_MAX]; +	__u16 size; +	__u8 rtype; +} __attribute__((__packed__)); + +struct uhid_output_ev_req { +	__u16 type; +	__u16 code; +	__s32 value; +} __attribute__((__packed__)); + +struct uhid_feature_req { +	__u32 id; +	__u8 rnum; +	__u8 rtype; +} __attribute__((__packed__)); + +struct uhid_feature_answer_req { +	__u32 id; +	__u16 err; +	__u16 size; +	__u8 data[UHID_DATA_MAX]; +}; + +struct uhid_event { +	__u32 type; + +	union { +		struct uhid_create_req create; +		struct uhid_input_req input; +		struct uhid_output_req output; +		struct uhid_output_ev_req output_ev; +		struct uhid_feature_req feature; +		struct uhid_feature_answer_req feature_answer; +	} u; +} __attribute__((__packed__)); + +#endif /* __UHID_H_ */ diff --git a/include/uapi/linux/uinput.h b/include/uapi/linux/uinput.h new file mode 100644 index 00000000000..fe46431593f --- /dev/null +++ b/include/uapi/linux/uinput.h @@ -0,0 +1,137 @@ +/* + *  User level driver support for input subsystem + * + * Heavily based on evdev.c by Vojtech Pavlik + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org> + * + * Changes/Revisions: + *	0.3	24/05/2006 (Anssi Hannula <anssi.hannulagmail.com>) + *		- update ff support for the changes in kernel interface + *		- add UINPUT_VERSION + *	0.2	16/10/2004 (Micah Dowty <micah@navi.cx>) + *		- added force feedback support + *             - added UI_SET_PHYS + *	0.1	20/06/2002 + *		- first public version + */ +#ifndef _UAPI__UINPUT_H_ +#define _UAPI__UINPUT_H_ + +#include <linux/types.h> +#include <linux/input.h> + +#define UINPUT_VERSION		3 + + +struct uinput_ff_upload { +	__u32			request_id; +	__s32			retval; +	struct ff_effect	effect; +	struct ff_effect	old; +}; + +struct uinput_ff_erase { +	__u32			request_id; +	__s32			retval; +	__u32			effect_id; +}; + +/* ioctl */ +#define UINPUT_IOCTL_BASE	'U' +#define UI_DEV_CREATE		_IO(UINPUT_IOCTL_BASE, 1) +#define UI_DEV_DESTROY		_IO(UINPUT_IOCTL_BASE, 2) + +#define UI_SET_EVBIT		_IOW(UINPUT_IOCTL_BASE, 100, int) +#define UI_SET_KEYBIT		_IOW(UINPUT_IOCTL_BASE, 101, int) +#define UI_SET_RELBIT		_IOW(UINPUT_IOCTL_BASE, 102, int) +#define UI_SET_ABSBIT		_IOW(UINPUT_IOCTL_BASE, 103, int) +#define UI_SET_MSCBIT		_IOW(UINPUT_IOCTL_BASE, 104, int) +#define UI_SET_LEDBIT		_IOW(UINPUT_IOCTL_BASE, 105, int) +#define UI_SET_SNDBIT		_IOW(UINPUT_IOCTL_BASE, 106, int) +#define UI_SET_FFBIT		_IOW(UINPUT_IOCTL_BASE, 107, int) +#define UI_SET_PHYS		_IOW(UINPUT_IOCTL_BASE, 108, char*) +#define UI_SET_SWBIT		_IOW(UINPUT_IOCTL_BASE, 109, int) +#define UI_SET_PROPBIT		_IOW(UINPUT_IOCTL_BASE, 110, int) + +#define UI_BEGIN_FF_UPLOAD	_IOWR(UINPUT_IOCTL_BASE, 200, struct uinput_ff_upload) +#define UI_END_FF_UPLOAD	_IOW(UINPUT_IOCTL_BASE, 201, struct uinput_ff_upload) +#define UI_BEGIN_FF_ERASE	_IOWR(UINPUT_IOCTL_BASE, 202, struct uinput_ff_erase) +#define UI_END_FF_ERASE		_IOW(UINPUT_IOCTL_BASE, 203, struct uinput_ff_erase) + +/* + * To write a force-feedback-capable driver, the upload_effect + * and erase_effect callbacks in input_dev must be implemented. + * The uinput driver will generate a fake input event when one of + * these callbacks are invoked. The userspace code then uses + * ioctls to retrieve additional parameters and send the return code. + * The callback blocks until this return code is sent. + * + * The described callback mechanism is only used if ff_effects_max + * is set. + * + * To implement upload_effect(): + *   1. Wait for an event with type == EV_UINPUT and code == UI_FF_UPLOAD. + *      A request ID will be given in 'value'. + *   2. Allocate a uinput_ff_upload struct, fill in request_id with + *      the 'value' from the EV_UINPUT event. + *   3. Issue a UI_BEGIN_FF_UPLOAD ioctl, giving it the + *      uinput_ff_upload struct. It will be filled in with the + *      ff_effects passed to upload_effect(). + *   4. Perform the effect upload, and place a return code back into +        the uinput_ff_upload struct. + *   5. Issue a UI_END_FF_UPLOAD ioctl, also giving it the + *      uinput_ff_upload_effect struct. This will complete execution + *      of our upload_effect() handler. + * + * To implement erase_effect(): + *   1. Wait for an event with type == EV_UINPUT and code == UI_FF_ERASE. + *      A request ID will be given in 'value'. + *   2. Allocate a uinput_ff_erase struct, fill in request_id with + *      the 'value' from the EV_UINPUT event. + *   3. Issue a UI_BEGIN_FF_ERASE ioctl, giving it the + *      uinput_ff_erase struct. It will be filled in with the + *      effect ID passed to erase_effect(). + *   4. Perform the effect erasure, and place a return code back + *      into the uinput_ff_erase struct. + *   5. Issue a UI_END_FF_ERASE ioctl, also giving it the + *      uinput_ff_erase_effect struct. This will complete execution + *      of our erase_effect() handler. + */ + +/* + * This is the new event type, used only by uinput. + * 'code' is UI_FF_UPLOAD or UI_FF_ERASE, and 'value' + * is the unique request ID. This number was picked + * arbitrarily, above EV_MAX (since the input system + * never sees it) but in the range of a 16-bit int. + */ +#define EV_UINPUT		0x0101 +#define UI_FF_UPLOAD		1 +#define UI_FF_ERASE		2 + +#define UINPUT_MAX_NAME_SIZE	80 +struct uinput_user_dev { +	char name[UINPUT_MAX_NAME_SIZE]; +	struct input_id id; +	__u32 ff_effects_max; +	__s32 absmax[ABS_CNT]; +	__s32 absmin[ABS_CNT]; +	__s32 absfuzz[ABS_CNT]; +	__s32 absflat[ABS_CNT]; +}; +#endif /* _UAPI__UINPUT_H_ */ diff --git a/include/uapi/linux/uio.h b/include/uapi/linux/uio.h new file mode 100644 index 00000000000..2731d56a548 --- /dev/null +++ b/include/uapi/linux/uio.h @@ -0,0 +1,30 @@ +/* + *	Berkeley style UIO structures	-	Alan Cox 1994. + * + *		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. + */ +#ifndef _UAPI__LINUX_UIO_H +#define _UAPI__LINUX_UIO_H + +#include <linux/compiler.h> +#include <linux/types.h> + + +struct iovec +{ +	void __user *iov_base;	/* BSD uses caddr_t (1003.1g requires void *) */ +	__kernel_size_t iov_len; /* Must be size_t (1003.1g) */ +}; + +/* + *	UIO_MAXIOV shall be at least 16 1003.1g (5.4.1.1) + */ +  +#define UIO_FASTIOV	8 +#define UIO_MAXIOV	1024 + + +#endif /* _UAPI__LINUX_UIO_H */ diff --git a/include/uapi/linux/ultrasound.h b/include/uapi/linux/ultrasound.h new file mode 100644 index 00000000000..71339dc531c --- /dev/null +++ b/include/uapi/linux/ultrasound.h @@ -0,0 +1,103 @@ +#ifndef _ULTRASOUND_H_ +#define _ULTRASOUND_H_ +/* + *	ultrasound.h - Macros for programming the Gravis Ultrasound + *			These macros are extremely device dependent + *			and not portable. + */ +/* + * Copyright (C) by Hannu Savolainen 1993-1997 + * + * OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL) + * Version 2 (June 1991). See the "COPYING" file distributed with this software + * for more info. + */ + + +/* + *	Private events for Gravis Ultrasound (GUS) + * + *	Format: + *		byte 0 		- SEQ_PRIVATE (0xfe) + *		byte 1 		- Synthesizer device number (0-N) + *		byte 2 		- Command (see below) + *		byte 3 		- Voice number (0-31) + *		bytes 4 and 5	- parameter P1 (unsigned short) + *		bytes 6 and 7	- parameter P2 (unsigned short) + * + *	Commands: + *		Each command affects one voice defined in byte 3. + *		Unused parameters (P1 and/or P2 *MUST* be initialized to zero). + *		_GUS_NUMVOICES	- Sets max. number of concurrent voices (P1=14-31, default 16) + *		_GUS_VOICESAMPLE- ************ OBSOLETE ************* + *		_GUS_VOICEON	- Starts voice (P1=voice mode) + *		_GUS_VOICEOFF	- Stops voice (no parameters) + *		_GUS_VOICEFADE	- Stops the voice smoothly. + *		_GUS_VOICEMODE	- Alters the voice mode, don't start or stop voice (P1=voice mode) + *		_GUS_VOICEBALA	- Sets voice balance (P1, 0=left, 7=middle and 15=right, default 7) + *		_GUS_VOICEFREQ	- Sets voice (sample) playback frequency (P1=Hz) + *		_GUS_VOICEVOL	- Sets voice volume (P1=volume, 0xfff=max, 0xeff=half, 0x000=off) + *		_GUS_VOICEVOL2	- Sets voice volume (P1=volume, 0xfff=max, 0xeff=half, 0x000=off) + *				  (Like GUS_VOICEVOL but doesn't change the hw + *				  volume. It just updates volume in the voice table). + * + *		_GUS_RAMPRANGE	- Sets limits for volume ramping (P1=low volume, P2=high volume) + *		_GUS_RAMPRATE	- Sets the speed for volume ramping (P1=scale, P2=rate) + *		_GUS_RAMPMODE	- Sets the volume ramping mode (P1=ramping mode) + *		_GUS_RAMPON	- Starts volume ramping (no parameters) + *		_GUS_RAMPOFF	- Stops volume ramping (no parameters) + *		_GUS_VOLUME_SCALE - Changes the volume calculation constants + *				  for all voices. + */ + +#define _GUS_NUMVOICES		0x00 +#define _GUS_VOICESAMPLE	0x01	/* OBSOLETE */ +#define _GUS_VOICEON		0x02 +#define _GUS_VOICEOFF		0x03 +#define _GUS_VOICEMODE		0x04 +#define _GUS_VOICEBALA		0x05 +#define _GUS_VOICEFREQ		0x06 +#define _GUS_VOICEVOL		0x07 +#define _GUS_RAMPRANGE		0x08 +#define _GUS_RAMPRATE		0x09 +#define _GUS_RAMPMODE		0x0a +#define _GUS_RAMPON		0x0b +#define _GUS_RAMPOFF		0x0c +#define _GUS_VOICEFADE		0x0d +#define _GUS_VOLUME_SCALE	0x0e +#define _GUS_VOICEVOL2		0x0f +#define _GUS_VOICE_POS		0x10 + +/* + *	GUS API macros + */ + +#define _GUS_CMD(chn, voice, cmd, p1, p2) \ +					{_SEQ_NEEDBUF(8); _seqbuf[_seqbufptr] = SEQ_PRIVATE;\ +					_seqbuf[_seqbufptr+1] = (chn); _seqbuf[_seqbufptr+2] = cmd;\ +					_seqbuf[_seqbufptr+3] = voice;\ +					*(unsigned short*)&_seqbuf[_seqbufptr+4] = p1;\ +					*(unsigned short*)&_seqbuf[_seqbufptr+6] = p2;\ +					_SEQ_ADVBUF(8);} + +#define GUS_NUMVOICES(chn, p1)			_GUS_CMD(chn, 0, _GUS_NUMVOICES, (p1), 0) +#define GUS_VOICESAMPLE(chn, voice, p1)		_GUS_CMD(chn, voice, _GUS_VOICESAMPLE, (p1), 0)	/* OBSOLETE */ +#define GUS_VOICEON(chn, voice, p1)		_GUS_CMD(chn, voice, _GUS_VOICEON, (p1), 0) +#define GUS_VOICEOFF(chn, voice)		_GUS_CMD(chn, voice, _GUS_VOICEOFF, 0, 0) +#define GUS_VOICEFADE(chn, voice)		_GUS_CMD(chn, voice, _GUS_VOICEFADE, 0, 0) +#define GUS_VOICEMODE(chn, voice, p1)		_GUS_CMD(chn, voice, _GUS_VOICEMODE, (p1), 0) +#define GUS_VOICEBALA(chn, voice, p1)		_GUS_CMD(chn, voice, _GUS_VOICEBALA, (p1), 0) +#define GUS_VOICEFREQ(chn, voice, p)		_GUS_CMD(chn, voice, _GUS_VOICEFREQ, \ +							(p) & 0xffff, ((p) >> 16) & 0xffff) +#define GUS_VOICEVOL(chn, voice, p1)		_GUS_CMD(chn, voice, _GUS_VOICEVOL, (p1), 0) +#define GUS_VOICEVOL2(chn, voice, p1)		_GUS_CMD(chn, voice, _GUS_VOICEVOL2, (p1), 0) +#define GUS_RAMPRANGE(chn, voice, low, high)	_GUS_CMD(chn, voice, _GUS_RAMPRANGE, (low), (high)) +#define GUS_RAMPRATE(chn, voice, p1, p2)	_GUS_CMD(chn, voice, _GUS_RAMPRATE, (p1), (p2)) +#define GUS_RAMPMODE(chn, voice, p1)		_GUS_CMD(chn, voice, _GUS_RAMPMODE, (p1), 0) +#define GUS_RAMPON(chn, voice, p1)		_GUS_CMD(chn, voice, _GUS_RAMPON, (p1), 0) +#define GUS_RAMPOFF(chn, voice)			_GUS_CMD(chn, voice, _GUS_RAMPOFF, 0, 0) +#define GUS_VOLUME_SCALE(chn, voice, p1, p2)	_GUS_CMD(chn, voice, _GUS_VOLUME_SCALE, (p1), (p2)) +#define GUS_VOICE_POS(chn, voice, p)		_GUS_CMD(chn, voice, _GUS_VOICE_POS, \ +							(p) & 0xffff, ((p) >> 16) & 0xffff) + +#endif diff --git a/include/uapi/linux/un.h b/include/uapi/linux/un.h new file mode 100644 index 00000000000..3ed3e46c1b1 --- /dev/null +++ b/include/uapi/linux/un.h @@ -0,0 +1,13 @@ +#ifndef _LINUX_UN_H +#define _LINUX_UN_H + +#include <linux/socket.h> + +#define UNIX_PATH_MAX	108 + +struct sockaddr_un { +	__kernel_sa_family_t sun_family; /* AF_UNIX */ +	char sun_path[UNIX_PATH_MAX];	/* pathname */ +}; + +#endif /* _LINUX_UN_H */ diff --git a/include/uapi/linux/unistd.h b/include/uapi/linux/unistd.h new file mode 100644 index 00000000000..aa8d5b5e2e3 --- /dev/null +++ b/include/uapi/linux/unistd.h @@ -0,0 +1,9 @@ +#ifndef _LINUX_UNISTD_H_ +#define _LINUX_UNISTD_H_ + +/* + * Include machine specific syscall numbers + */ +#include <asm/unistd.h> + +#endif /* _LINUX_UNISTD_H_ */ diff --git a/include/uapi/linux/unix_diag.h b/include/uapi/linux/unix_diag.h new file mode 100644 index 00000000000..b1d2bf16b33 --- /dev/null +++ b/include/uapi/linux/unix_diag.h @@ -0,0 +1,54 @@ +#ifndef __UNIX_DIAG_H__ +#define __UNIX_DIAG_H__ + +#include <linux/types.h> + +struct unix_diag_req { +	__u8	sdiag_family; +	__u8	sdiag_protocol; +	__u16	pad; +	__u32	udiag_states; +	__u32	udiag_ino; +	__u32	udiag_show; +	__u32	udiag_cookie[2]; +}; + +#define UDIAG_SHOW_NAME		0x00000001	/* show name (not path) */ +#define UDIAG_SHOW_VFS		0x00000002	/* show VFS inode info */ +#define UDIAG_SHOW_PEER		0x00000004	/* show peer socket info */ +#define UDIAG_SHOW_ICONS	0x00000008	/* show pending connections */ +#define UDIAG_SHOW_RQLEN	0x00000010	/* show skb receive queue len */ +#define UDIAG_SHOW_MEMINFO	0x00000020	/* show memory info of a socket */ + +struct unix_diag_msg { +	__u8	udiag_family; +	__u8	udiag_type; +	__u8	udiag_state; +	__u8	pad; + +	__u32	udiag_ino; +	__u32	udiag_cookie[2]; +}; + +enum { +	UNIX_DIAG_NAME, +	UNIX_DIAG_VFS, +	UNIX_DIAG_PEER, +	UNIX_DIAG_ICONS, +	UNIX_DIAG_RQLEN, +	UNIX_DIAG_MEMINFO, + +	UNIX_DIAG_MAX, +}; + +struct unix_diag_vfs { +	__u32	udiag_vfs_ino; +	__u32	udiag_vfs_dev; +}; + +struct unix_diag_rqlen { +	__u32	udiag_rqueue; +	__u32	udiag_wqueue; +}; + +#endif diff --git a/include/uapi/linux/usbdevice_fs.h b/include/uapi/linux/usbdevice_fs.h new file mode 100644 index 00000000000..0c65e4b1261 --- /dev/null +++ b/include/uapi/linux/usbdevice_fs.h @@ -0,0 +1,180 @@ +/*****************************************************************************/ + +/* + *	usbdevice_fs.h  --  USB device file system. + * + *	Copyright (C) 2000 + *          Thomas Sailer (sailer@ife.ee.ethz.ch) + * + *	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. + * + *  History: + *   0.1  04.01.2000  Created + */ + +/*****************************************************************************/ + +#ifndef _UAPI_LINUX_USBDEVICE_FS_H +#define _UAPI_LINUX_USBDEVICE_FS_H + +#include <linux/types.h> +#include <linux/magic.h> + +/* --------------------------------------------------------------------- */ + +/* usbdevfs ioctl codes */ + +struct usbdevfs_ctrltransfer { +	__u8 bRequestType; +	__u8 bRequest; +	__u16 wValue; +	__u16 wIndex; +	__u16 wLength; +	__u32 timeout;  /* in milliseconds */ + 	void __user *data; +}; + +struct usbdevfs_bulktransfer { +	unsigned int ep; +	unsigned int len; +	unsigned int timeout; /* in milliseconds */ +	void __user *data; +}; + +struct usbdevfs_setinterface { +	unsigned int interface; +	unsigned int altsetting; +}; + +struct usbdevfs_disconnectsignal { +	unsigned int signr; +	void __user *context; +}; + +#define USBDEVFS_MAXDRIVERNAME 255 + +struct usbdevfs_getdriver { +	unsigned int interface; +	char driver[USBDEVFS_MAXDRIVERNAME + 1]; +}; + +struct usbdevfs_connectinfo { +	unsigned int devnum; +	unsigned char slow; +}; + +#define USBDEVFS_URB_SHORT_NOT_OK	0x01 +#define USBDEVFS_URB_ISO_ASAP		0x02 +#define USBDEVFS_URB_BULK_CONTINUATION	0x04 +#define USBDEVFS_URB_NO_FSBR		0x20 +#define USBDEVFS_URB_ZERO_PACKET	0x40 +#define USBDEVFS_URB_NO_INTERRUPT	0x80 + +#define USBDEVFS_URB_TYPE_ISO		   0 +#define USBDEVFS_URB_TYPE_INTERRUPT	   1 +#define USBDEVFS_URB_TYPE_CONTROL	   2 +#define USBDEVFS_URB_TYPE_BULK		   3 + +struct usbdevfs_iso_packet_desc { +	unsigned int length; +	unsigned int actual_length; +	unsigned int status; +}; + +struct usbdevfs_urb { +	unsigned char type; +	unsigned char endpoint; +	int status; +	unsigned int flags; +	void __user *buffer; +	int buffer_length; +	int actual_length; +	int start_frame; +	int number_of_packets; +	int error_count; +	unsigned int signr;	/* signal to be sent on completion, +				  or 0 if none should be sent. */ +	void __user *usercontext; +	struct usbdevfs_iso_packet_desc iso_frame_desc[0]; +}; + +/* ioctls for talking directly to drivers */ +struct usbdevfs_ioctl { +	int	ifno;		/* interface 0..N ; negative numbers reserved */ +	int	ioctl_code;	/* MUST encode size + direction of data so the +				 * macros in <asm/ioctl.h> give correct values */ +	void __user *data;	/* param buffer (in, or out) */ +}; + +/* You can do most things with hubs just through control messages, + * except find out what device connects to what port. */ +struct usbdevfs_hub_portinfo { +	char nports;		/* number of downstream ports in this hub */ +	char port [127];	/* e.g. port 3 connects to device 27 */ +}; + +/* Device capability flags */ +#define USBDEVFS_CAP_ZERO_PACKET		0x01 +#define USBDEVFS_CAP_BULK_CONTINUATION		0x02 +#define USBDEVFS_CAP_NO_PACKET_SIZE_LIM		0x04 +#define USBDEVFS_CAP_BULK_SCATTER_GATHER	0x08 + +/* USBDEVFS_DISCONNECT_CLAIM flags & struct */ + +/* disconnect-and-claim if the driver matches the driver field */ +#define USBDEVFS_DISCONNECT_CLAIM_IF_DRIVER	0x01 +/* disconnect-and-claim except when the driver matches the driver field */ +#define USBDEVFS_DISCONNECT_CLAIM_EXCEPT_DRIVER	0x02 + +struct usbdevfs_disconnect_claim { +	unsigned int interface; +	unsigned int flags; +	char driver[USBDEVFS_MAXDRIVERNAME + 1]; +}; + + +#define USBDEVFS_CONTROL           _IOWR('U', 0, struct usbdevfs_ctrltransfer) +#define USBDEVFS_CONTROL32           _IOWR('U', 0, struct usbdevfs_ctrltransfer32) +#define USBDEVFS_BULK              _IOWR('U', 2, struct usbdevfs_bulktransfer) +#define USBDEVFS_BULK32              _IOWR('U', 2, struct usbdevfs_bulktransfer32) +#define USBDEVFS_RESETEP           _IOR('U', 3, unsigned int) +#define USBDEVFS_SETINTERFACE      _IOR('U', 4, struct usbdevfs_setinterface) +#define USBDEVFS_SETCONFIGURATION  _IOR('U', 5, unsigned int) +#define USBDEVFS_GETDRIVER         _IOW('U', 8, struct usbdevfs_getdriver) +#define USBDEVFS_SUBMITURB         _IOR('U', 10, struct usbdevfs_urb) +#define USBDEVFS_SUBMITURB32       _IOR('U', 10, struct usbdevfs_urb32) +#define USBDEVFS_DISCARDURB        _IO('U', 11) +#define USBDEVFS_REAPURB           _IOW('U', 12, void *) +#define USBDEVFS_REAPURB32         _IOW('U', 12, __u32) +#define USBDEVFS_REAPURBNDELAY     _IOW('U', 13, void *) +#define USBDEVFS_REAPURBNDELAY32   _IOW('U', 13, __u32) +#define USBDEVFS_DISCSIGNAL        _IOR('U', 14, struct usbdevfs_disconnectsignal) +#define USBDEVFS_DISCSIGNAL32      _IOR('U', 14, struct usbdevfs_disconnectsignal32) +#define USBDEVFS_CLAIMINTERFACE    _IOR('U', 15, unsigned int) +#define USBDEVFS_RELEASEINTERFACE  _IOR('U', 16, unsigned int) +#define USBDEVFS_CONNECTINFO       _IOW('U', 17, struct usbdevfs_connectinfo) +#define USBDEVFS_IOCTL             _IOWR('U', 18, struct usbdevfs_ioctl) +#define USBDEVFS_IOCTL32           _IOWR('U', 18, struct usbdevfs_ioctl32) +#define USBDEVFS_HUB_PORTINFO      _IOR('U', 19, struct usbdevfs_hub_portinfo) +#define USBDEVFS_RESET             _IO('U', 20) +#define USBDEVFS_CLEAR_HALT        _IOR('U', 21, unsigned int) +#define USBDEVFS_DISCONNECT        _IO('U', 22) +#define USBDEVFS_CONNECT           _IO('U', 23) +#define USBDEVFS_CLAIM_PORT        _IOR('U', 24, unsigned int) +#define USBDEVFS_RELEASE_PORT      _IOR('U', 25, unsigned int) +#define USBDEVFS_GET_CAPABILITIES  _IOR('U', 26, __u32) +#define USBDEVFS_DISCONNECT_CLAIM  _IOR('U', 27, struct usbdevfs_disconnect_claim) + +#endif /* _UAPI_LINUX_USBDEVICE_FS_H */ diff --git a/include/uapi/linux/utime.h b/include/uapi/linux/utime.h new file mode 100644 index 00000000000..5cdf673afbd --- /dev/null +++ b/include/uapi/linux/utime.h @@ -0,0 +1,11 @@ +#ifndef _LINUX_UTIME_H +#define _LINUX_UTIME_H + +#include <linux/types.h> + +struct utimbuf { +	__kernel_time_t actime; +	__kernel_time_t modtime; +}; + +#endif diff --git a/include/uapi/linux/utsname.h b/include/uapi/linux/utsname.h new file mode 100644 index 00000000000..872c2df10de --- /dev/null +++ b/include/uapi/linux/utsname.h @@ -0,0 +1,34 @@ +#ifndef _UAPI_LINUX_UTSNAME_H +#define _UAPI_LINUX_UTSNAME_H + +#define __OLD_UTS_LEN 8 + +struct oldold_utsname { +	char sysname[9]; +	char nodename[9]; +	char release[9]; +	char version[9]; +	char machine[9]; +}; + +#define __NEW_UTS_LEN 64 + +struct old_utsname { +	char sysname[65]; +	char nodename[65]; +	char release[65]; +	char version[65]; +	char machine[65]; +}; + +struct new_utsname { +	char sysname[__NEW_UTS_LEN + 1]; +	char nodename[__NEW_UTS_LEN + 1]; +	char release[__NEW_UTS_LEN + 1]; +	char version[__NEW_UTS_LEN + 1]; +	char machine[__NEW_UTS_LEN + 1]; +	char domainname[__NEW_UTS_LEN + 1]; +}; + + +#endif /* _UAPI_LINUX_UTSNAME_H */ diff --git a/include/uapi/linux/uuid.h b/include/uapi/linux/uuid.h new file mode 100644 index 00000000000..786f0773cc3 --- /dev/null +++ b/include/uapi/linux/uuid.h @@ -0,0 +1,58 @@ +/* + * UUID/GUID definition + * + * Copyright (C) 2010, Intel Corp. + *	Huang Ying <ying.huang@intel.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License version + * 2 as published by the Free Software Foundation; + * + * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + */ + +#ifndef _UAPI_LINUX_UUID_H_ +#define _UAPI_LINUX_UUID_H_ + +#include <linux/types.h> +#include <linux/string.h> + +typedef struct { +	__u8 b[16]; +} uuid_le; + +typedef struct { +	__u8 b[16]; +} uuid_be; + +#define UUID_LE(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7)		\ +((uuid_le)								\ +{{ (a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, ((a) >> 24) & 0xff, \ +   (b) & 0xff, ((b) >> 8) & 0xff,					\ +   (c) & 0xff, ((c) >> 8) & 0xff,					\ +   (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }}) + +#define UUID_BE(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7)		\ +((uuid_be)								\ +{{ ((a) >> 24) & 0xff, ((a) >> 16) & 0xff, ((a) >> 8) & 0xff, (a) & 0xff, \ +   ((b) >> 8) & 0xff, (b) & 0xff,					\ +   ((c) >> 8) & 0xff, (c) & 0xff,					\ +   (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }}) + +#define NULL_UUID_LE							\ +	UUID_LE(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00,	\ +		0x00, 0x00, 0x00, 0x00) + +#define NULL_UUID_BE							\ +	UUID_BE(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00,	\ +		0x00, 0x00, 0x00, 0x00) + + +#endif /* _UAPI_LINUX_UUID_H_ */ diff --git a/include/uapi/linux/uvcvideo.h b/include/uapi/linux/uvcvideo.h new file mode 100644 index 00000000000..3b081862b9e --- /dev/null +++ b/include/uapi/linux/uvcvideo.h @@ -0,0 +1,70 @@ +#ifndef __LINUX_UVCVIDEO_H_ +#define __LINUX_UVCVIDEO_H_ + +#include <linux/ioctl.h> +#include <linux/types.h> + +/* + * Dynamic controls + */ + +/* Data types for UVC control data */ +#define UVC_CTRL_DATA_TYPE_RAW		0 +#define UVC_CTRL_DATA_TYPE_SIGNED	1 +#define UVC_CTRL_DATA_TYPE_UNSIGNED	2 +#define UVC_CTRL_DATA_TYPE_BOOLEAN	3 +#define UVC_CTRL_DATA_TYPE_ENUM		4 +#define UVC_CTRL_DATA_TYPE_BITMASK	5 + +/* Control flags */ +#define UVC_CTRL_FLAG_SET_CUR		(1 << 0) +#define UVC_CTRL_FLAG_GET_CUR		(1 << 1) +#define UVC_CTRL_FLAG_GET_MIN		(1 << 2) +#define UVC_CTRL_FLAG_GET_MAX		(1 << 3) +#define UVC_CTRL_FLAG_GET_RES		(1 << 4) +#define UVC_CTRL_FLAG_GET_DEF		(1 << 5) +/* Control should be saved at suspend and restored at resume. */ +#define UVC_CTRL_FLAG_RESTORE		(1 << 6) +/* Control can be updated by the camera. */ +#define UVC_CTRL_FLAG_AUTO_UPDATE	(1 << 7) + +#define UVC_CTRL_FLAG_GET_RANGE \ +	(UVC_CTRL_FLAG_GET_CUR | UVC_CTRL_FLAG_GET_MIN | \ +	 UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES | \ +	 UVC_CTRL_FLAG_GET_DEF) + +struct uvc_menu_info { +	__u32 value; +	__u8 name[32]; +}; + +struct uvc_xu_control_mapping { +	__u32 id; +	__u8 name[32]; +	__u8 entity[16]; +	__u8 selector; + +	__u8 size; +	__u8 offset; +	__u32 v4l2_type; +	__u32 data_type; + +	struct uvc_menu_info __user *menu_info; +	__u32 menu_count; + +	__u32 reserved[4]; +}; + +struct uvc_xu_control_query { +	__u8 unit; +	__u8 selector; +	__u8 query;		/* Video Class-Specific Request Code, */ +				/* defined in linux/usb/video.h A.8.  */ +	__u16 size; +	__u8 __user *data; +}; + +#define UVCIOC_CTRL_MAP		_IOWR('u', 0x20, struct uvc_xu_control_mapping) +#define UVCIOC_CTRL_QUERY	_IOWR('u', 0x21, struct uvc_xu_control_query) + +#endif diff --git a/include/uapi/linux/v4l2-common.h b/include/uapi/linux/v4l2-common.h new file mode 100644 index 00000000000..4f0667e010d --- /dev/null +++ b/include/uapi/linux/v4l2-common.h @@ -0,0 +1,71 @@ +/* + * include/linux/v4l2-common.h + * + * Common V4L2 and V4L2 subdev definitions. + * + * Users are advised to #include this file either through videodev2.h + * (V4L2) or through v4l2-subdev.h (V4L2 subdev) rather than to refer + * to this file directly. + * + * Copyright (C) 2012 Nokia Corporation + * Contact: Sakari Ailus <sakari.ailus@iki.fi> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#ifndef __V4L2_COMMON__ +#define __V4L2_COMMON__ + +/* + * + * Selection interface definitions + * + */ + +/* Current cropping area */ +#define V4L2_SEL_TGT_CROP		0x0000 +/* Default cropping area */ +#define V4L2_SEL_TGT_CROP_DEFAULT	0x0001 +/* Cropping bounds */ +#define V4L2_SEL_TGT_CROP_BOUNDS	0x0002 +/* Current composing area */ +#define V4L2_SEL_TGT_COMPOSE		0x0100 +/* Default composing area */ +#define V4L2_SEL_TGT_COMPOSE_DEFAULT	0x0101 +/* Composing bounds */ +#define V4L2_SEL_TGT_COMPOSE_BOUNDS	0x0102 +/* Current composing area plus all padding pixels */ +#define V4L2_SEL_TGT_COMPOSE_PADDED	0x0103 + +/* Backward compatibility target definitions --- to be removed. */ +#define V4L2_SEL_TGT_CROP_ACTIVE	V4L2_SEL_TGT_CROP +#define V4L2_SEL_TGT_COMPOSE_ACTIVE	V4L2_SEL_TGT_COMPOSE +#define V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL	V4L2_SEL_TGT_CROP +#define V4L2_SUBDEV_SEL_TGT_COMPOSE_ACTUAL V4L2_SEL_TGT_COMPOSE +#define V4L2_SUBDEV_SEL_TGT_CROP_BOUNDS	V4L2_SEL_TGT_CROP_BOUNDS +#define V4L2_SUBDEV_SEL_TGT_COMPOSE_BOUNDS V4L2_SEL_TGT_COMPOSE_BOUNDS + +/* Selection flags */ +#define V4L2_SEL_FLAG_GE		(1 << 0) +#define V4L2_SEL_FLAG_LE		(1 << 1) +#define V4L2_SEL_FLAG_KEEP_CONFIG	(1 << 2) + +/* Backward compatibility flag definitions --- to be removed. */ +#define V4L2_SUBDEV_SEL_FLAG_SIZE_GE	V4L2_SEL_FLAG_GE +#define V4L2_SUBDEV_SEL_FLAG_SIZE_LE	V4L2_SEL_FLAG_LE +#define V4L2_SUBDEV_SEL_FLAG_KEEP_CONFIG V4L2_SEL_FLAG_KEEP_CONFIG + +#endif /* __V4L2_COMMON__ */ diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h new file mode 100644 index 00000000000..f56c945cecd --- /dev/null +++ b/include/uapi/linux/v4l2-controls.h @@ -0,0 +1,803 @@ +/* + *  Video for Linux Two controls header file + * + *  Copyright (C) 1999-2012 the contributors + * + *  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. + * + *  Alternatively you can redistribute this file under the terms of the + *  BSD license as stated below: + * + *  Redistribution and use in source and binary forms, with or without + *  modification, are permitted provided that the following conditions + *  are met: + *  1. Redistributions of source code must retain the above copyright + *     notice, this list of conditions and the following disclaimer. + *  2. Redistributions in binary form must reproduce the above copyright + *     notice, this list of conditions and the following disclaimer in + *     the documentation and/or other materials provided with the + *     distribution. + *  3. The names of its contributors may not be used to endorse or promote + *     products derived from this software without specific prior written + *     permission. + * + *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + *  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *  The contents of this header was split off from videodev2.h. All control + *  definitions should be added to this header, which is included by + *  videodev2.h. + */ + +#ifndef __LINUX_V4L2_CONTROLS_H +#define __LINUX_V4L2_CONTROLS_H + +/* Control classes */ +#define V4L2_CTRL_CLASS_USER		0x00980000	/* Old-style 'user' controls */ +#define V4L2_CTRL_CLASS_MPEG		0x00990000	/* MPEG-compression controls */ +#define V4L2_CTRL_CLASS_CAMERA		0x009a0000	/* Camera class controls */ +#define V4L2_CTRL_CLASS_FM_TX		0x009b0000	/* FM Modulator control class */ +#define V4L2_CTRL_CLASS_FLASH		0x009c0000	/* Camera flash controls */ +#define V4L2_CTRL_CLASS_JPEG		0x009d0000	/* JPEG-compression controls */ +#define V4L2_CTRL_CLASS_IMAGE_SOURCE	0x009e0000	/* Image source controls */ +#define V4L2_CTRL_CLASS_IMAGE_PROC	0x009f0000	/* Image processing controls */ +#define V4L2_CTRL_CLASS_DV		0x00a00000	/* Digital Video controls */ + +/* User-class control IDs */ + +#define V4L2_CID_BASE			(V4L2_CTRL_CLASS_USER | 0x900) +#define V4L2_CID_USER_BASE 		V4L2_CID_BASE +#define V4L2_CID_USER_CLASS 		(V4L2_CTRL_CLASS_USER | 1) +#define V4L2_CID_BRIGHTNESS		(V4L2_CID_BASE+0) +#define V4L2_CID_CONTRAST		(V4L2_CID_BASE+1) +#define V4L2_CID_SATURATION		(V4L2_CID_BASE+2) +#define V4L2_CID_HUE			(V4L2_CID_BASE+3) +#define V4L2_CID_AUDIO_VOLUME		(V4L2_CID_BASE+5) +#define V4L2_CID_AUDIO_BALANCE		(V4L2_CID_BASE+6) +#define V4L2_CID_AUDIO_BASS		(V4L2_CID_BASE+7) +#define V4L2_CID_AUDIO_TREBLE		(V4L2_CID_BASE+8) +#define V4L2_CID_AUDIO_MUTE		(V4L2_CID_BASE+9) +#define V4L2_CID_AUDIO_LOUDNESS		(V4L2_CID_BASE+10) +#define V4L2_CID_BLACK_LEVEL		(V4L2_CID_BASE+11) /* Deprecated */ +#define V4L2_CID_AUTO_WHITE_BALANCE	(V4L2_CID_BASE+12) +#define V4L2_CID_DO_WHITE_BALANCE	(V4L2_CID_BASE+13) +#define V4L2_CID_RED_BALANCE		(V4L2_CID_BASE+14) +#define V4L2_CID_BLUE_BALANCE		(V4L2_CID_BASE+15) +#define V4L2_CID_GAMMA			(V4L2_CID_BASE+16) +#define V4L2_CID_WHITENESS		(V4L2_CID_GAMMA) /* Deprecated */ +#define V4L2_CID_EXPOSURE		(V4L2_CID_BASE+17) +#define V4L2_CID_AUTOGAIN		(V4L2_CID_BASE+18) +#define V4L2_CID_GAIN			(V4L2_CID_BASE+19) +#define V4L2_CID_HFLIP			(V4L2_CID_BASE+20) +#define V4L2_CID_VFLIP			(V4L2_CID_BASE+21) + +/* Deprecated; use V4L2_CID_PAN_RESET and V4L2_CID_TILT_RESET */ +#define V4L2_CID_HCENTER		(V4L2_CID_BASE+22) +#define V4L2_CID_VCENTER		(V4L2_CID_BASE+23) + +#define V4L2_CID_POWER_LINE_FREQUENCY	(V4L2_CID_BASE+24) +enum v4l2_power_line_frequency { +	V4L2_CID_POWER_LINE_FREQUENCY_DISABLED	= 0, +	V4L2_CID_POWER_LINE_FREQUENCY_50HZ	= 1, +	V4L2_CID_POWER_LINE_FREQUENCY_60HZ	= 2, +	V4L2_CID_POWER_LINE_FREQUENCY_AUTO	= 3, +}; +#define V4L2_CID_HUE_AUTO			(V4L2_CID_BASE+25) +#define V4L2_CID_WHITE_BALANCE_TEMPERATURE	(V4L2_CID_BASE+26) +#define V4L2_CID_SHARPNESS			(V4L2_CID_BASE+27) +#define V4L2_CID_BACKLIGHT_COMPENSATION 	(V4L2_CID_BASE+28) +#define V4L2_CID_CHROMA_AGC                     (V4L2_CID_BASE+29) +#define V4L2_CID_COLOR_KILLER                   (V4L2_CID_BASE+30) +#define V4L2_CID_COLORFX			(V4L2_CID_BASE+31) +enum v4l2_colorfx { +	V4L2_COLORFX_NONE			= 0, +	V4L2_COLORFX_BW				= 1, +	V4L2_COLORFX_SEPIA			= 2, +	V4L2_COLORFX_NEGATIVE			= 3, +	V4L2_COLORFX_EMBOSS			= 4, +	V4L2_COLORFX_SKETCH			= 5, +	V4L2_COLORFX_SKY_BLUE			= 6, +	V4L2_COLORFX_GRASS_GREEN		= 7, +	V4L2_COLORFX_SKIN_WHITEN		= 8, +	V4L2_COLORFX_VIVID			= 9, +	V4L2_COLORFX_AQUA			= 10, +	V4L2_COLORFX_ART_FREEZE			= 11, +	V4L2_COLORFX_SILHOUETTE			= 12, +	V4L2_COLORFX_SOLARIZATION		= 13, +	V4L2_COLORFX_ANTIQUE			= 14, +	V4L2_COLORFX_SET_CBCR			= 15, +}; +#define V4L2_CID_AUTOBRIGHTNESS			(V4L2_CID_BASE+32) +#define V4L2_CID_BAND_STOP_FILTER		(V4L2_CID_BASE+33) + +#define V4L2_CID_ROTATE				(V4L2_CID_BASE+34) +#define V4L2_CID_BG_COLOR			(V4L2_CID_BASE+35) + +#define V4L2_CID_CHROMA_GAIN                    (V4L2_CID_BASE+36) + +#define V4L2_CID_ILLUMINATORS_1			(V4L2_CID_BASE+37) +#define V4L2_CID_ILLUMINATORS_2			(V4L2_CID_BASE+38) + +#define V4L2_CID_MIN_BUFFERS_FOR_CAPTURE	(V4L2_CID_BASE+39) +#define V4L2_CID_MIN_BUFFERS_FOR_OUTPUT		(V4L2_CID_BASE+40) + +#define V4L2_CID_ALPHA_COMPONENT		(V4L2_CID_BASE+41) +#define V4L2_CID_COLORFX_CBCR			(V4L2_CID_BASE+42) + +/* last CID + 1 */ +#define V4L2_CID_LASTP1                         (V4L2_CID_BASE+43) + + +/* MPEG-class control IDs */ + +#define V4L2_CID_MPEG_BASE 			(V4L2_CTRL_CLASS_MPEG | 0x900) +#define V4L2_CID_MPEG_CLASS 			(V4L2_CTRL_CLASS_MPEG | 1) + +/*  MPEG streams, specific to multiplexed streams */ +#define V4L2_CID_MPEG_STREAM_TYPE 		(V4L2_CID_MPEG_BASE+0) +enum v4l2_mpeg_stream_type { +	V4L2_MPEG_STREAM_TYPE_MPEG2_PS   = 0, /* MPEG-2 program stream */ +	V4L2_MPEG_STREAM_TYPE_MPEG2_TS   = 1, /* MPEG-2 transport stream */ +	V4L2_MPEG_STREAM_TYPE_MPEG1_SS   = 2, /* MPEG-1 system stream */ +	V4L2_MPEG_STREAM_TYPE_MPEG2_DVD  = 3, /* MPEG-2 DVD-compatible stream */ +	V4L2_MPEG_STREAM_TYPE_MPEG1_VCD  = 4, /* MPEG-1 VCD-compatible stream */ +	V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD = 5, /* MPEG-2 SVCD-compatible stream */ +}; +#define V4L2_CID_MPEG_STREAM_PID_PMT 		(V4L2_CID_MPEG_BASE+1) +#define V4L2_CID_MPEG_STREAM_PID_AUDIO 		(V4L2_CID_MPEG_BASE+2) +#define V4L2_CID_MPEG_STREAM_PID_VIDEO 		(V4L2_CID_MPEG_BASE+3) +#define V4L2_CID_MPEG_STREAM_PID_PCR 		(V4L2_CID_MPEG_BASE+4) +#define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO 	(V4L2_CID_MPEG_BASE+5) +#define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO 	(V4L2_CID_MPEG_BASE+6) +#define V4L2_CID_MPEG_STREAM_VBI_FMT 		(V4L2_CID_MPEG_BASE+7) +enum v4l2_mpeg_stream_vbi_fmt { +	V4L2_MPEG_STREAM_VBI_FMT_NONE = 0,  /* No VBI in the MPEG stream */ +	V4L2_MPEG_STREAM_VBI_FMT_IVTV = 1,  /* VBI in private packets, IVTV format */ +}; + +/*  MPEG audio controls specific to multiplexed streams  */ +#define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ 	(V4L2_CID_MPEG_BASE+100) +enum v4l2_mpeg_audio_sampling_freq { +	V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100 = 0, +	V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 = 1, +	V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000 = 2, +}; +#define V4L2_CID_MPEG_AUDIO_ENCODING 		(V4L2_CID_MPEG_BASE+101) +enum v4l2_mpeg_audio_encoding { +	V4L2_MPEG_AUDIO_ENCODING_LAYER_1 = 0, +	V4L2_MPEG_AUDIO_ENCODING_LAYER_2 = 1, +	V4L2_MPEG_AUDIO_ENCODING_LAYER_3 = 2, +	V4L2_MPEG_AUDIO_ENCODING_AAC     = 3, +	V4L2_MPEG_AUDIO_ENCODING_AC3     = 4, +}; +#define V4L2_CID_MPEG_AUDIO_L1_BITRATE 		(V4L2_CID_MPEG_BASE+102) +enum v4l2_mpeg_audio_l1_bitrate { +	V4L2_MPEG_AUDIO_L1_BITRATE_32K  = 0, +	V4L2_MPEG_AUDIO_L1_BITRATE_64K  = 1, +	V4L2_MPEG_AUDIO_L1_BITRATE_96K  = 2, +	V4L2_MPEG_AUDIO_L1_BITRATE_128K = 3, +	V4L2_MPEG_AUDIO_L1_BITRATE_160K = 4, +	V4L2_MPEG_AUDIO_L1_BITRATE_192K = 5, +	V4L2_MPEG_AUDIO_L1_BITRATE_224K = 6, +	V4L2_MPEG_AUDIO_L1_BITRATE_256K = 7, +	V4L2_MPEG_AUDIO_L1_BITRATE_288K = 8, +	V4L2_MPEG_AUDIO_L1_BITRATE_320K = 9, +	V4L2_MPEG_AUDIO_L1_BITRATE_352K = 10, +	V4L2_MPEG_AUDIO_L1_BITRATE_384K = 11, +	V4L2_MPEG_AUDIO_L1_BITRATE_416K = 12, +	V4L2_MPEG_AUDIO_L1_BITRATE_448K = 13, +}; +#define V4L2_CID_MPEG_AUDIO_L2_BITRATE 		(V4L2_CID_MPEG_BASE+103) +enum v4l2_mpeg_audio_l2_bitrate { +	V4L2_MPEG_AUDIO_L2_BITRATE_32K  = 0, +	V4L2_MPEG_AUDIO_L2_BITRATE_48K  = 1, +	V4L2_MPEG_AUDIO_L2_BITRATE_56K  = 2, +	V4L2_MPEG_AUDIO_L2_BITRATE_64K  = 3, +	V4L2_MPEG_AUDIO_L2_BITRATE_80K  = 4, +	V4L2_MPEG_AUDIO_L2_BITRATE_96K  = 5, +	V4L2_MPEG_AUDIO_L2_BITRATE_112K = 6, +	V4L2_MPEG_AUDIO_L2_BITRATE_128K = 7, +	V4L2_MPEG_AUDIO_L2_BITRATE_160K = 8, +	V4L2_MPEG_AUDIO_L2_BITRATE_192K = 9, +	V4L2_MPEG_AUDIO_L2_BITRATE_224K = 10, +	V4L2_MPEG_AUDIO_L2_BITRATE_256K = 11, +	V4L2_MPEG_AUDIO_L2_BITRATE_320K = 12, +	V4L2_MPEG_AUDIO_L2_BITRATE_384K = 13, +}; +#define V4L2_CID_MPEG_AUDIO_L3_BITRATE 		(V4L2_CID_MPEG_BASE+104) +enum v4l2_mpeg_audio_l3_bitrate { +	V4L2_MPEG_AUDIO_L3_BITRATE_32K  = 0, +	V4L2_MPEG_AUDIO_L3_BITRATE_40K  = 1, +	V4L2_MPEG_AUDIO_L3_BITRATE_48K  = 2, +	V4L2_MPEG_AUDIO_L3_BITRATE_56K  = 3, +	V4L2_MPEG_AUDIO_L3_BITRATE_64K  = 4, +	V4L2_MPEG_AUDIO_L3_BITRATE_80K  = 5, +	V4L2_MPEG_AUDIO_L3_BITRATE_96K  = 6, +	V4L2_MPEG_AUDIO_L3_BITRATE_112K = 7, +	V4L2_MPEG_AUDIO_L3_BITRATE_128K = 8, +	V4L2_MPEG_AUDIO_L3_BITRATE_160K = 9, +	V4L2_MPEG_AUDIO_L3_BITRATE_192K = 10, +	V4L2_MPEG_AUDIO_L3_BITRATE_224K = 11, +	V4L2_MPEG_AUDIO_L3_BITRATE_256K = 12, +	V4L2_MPEG_AUDIO_L3_BITRATE_320K = 13, +}; +#define V4L2_CID_MPEG_AUDIO_MODE 		(V4L2_CID_MPEG_BASE+105) +enum v4l2_mpeg_audio_mode { +	V4L2_MPEG_AUDIO_MODE_STEREO       = 0, +	V4L2_MPEG_AUDIO_MODE_JOINT_STEREO = 1, +	V4L2_MPEG_AUDIO_MODE_DUAL         = 2, +	V4L2_MPEG_AUDIO_MODE_MONO         = 3, +}; +#define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION 	(V4L2_CID_MPEG_BASE+106) +enum v4l2_mpeg_audio_mode_extension { +	V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4  = 0, +	V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8  = 1, +	V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12 = 2, +	V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16 = 3, +}; +#define V4L2_CID_MPEG_AUDIO_EMPHASIS 		(V4L2_CID_MPEG_BASE+107) +enum v4l2_mpeg_audio_emphasis { +	V4L2_MPEG_AUDIO_EMPHASIS_NONE         = 0, +	V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS = 1, +	V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17    = 2, +}; +#define V4L2_CID_MPEG_AUDIO_CRC 		(V4L2_CID_MPEG_BASE+108) +enum v4l2_mpeg_audio_crc { +	V4L2_MPEG_AUDIO_CRC_NONE  = 0, +	V4L2_MPEG_AUDIO_CRC_CRC16 = 1, +}; +#define V4L2_CID_MPEG_AUDIO_MUTE 		(V4L2_CID_MPEG_BASE+109) +#define V4L2_CID_MPEG_AUDIO_AAC_BITRATE		(V4L2_CID_MPEG_BASE+110) +#define V4L2_CID_MPEG_AUDIO_AC3_BITRATE		(V4L2_CID_MPEG_BASE+111) +enum v4l2_mpeg_audio_ac3_bitrate { +	V4L2_MPEG_AUDIO_AC3_BITRATE_32K  = 0, +	V4L2_MPEG_AUDIO_AC3_BITRATE_40K  = 1, +	V4L2_MPEG_AUDIO_AC3_BITRATE_48K  = 2, +	V4L2_MPEG_AUDIO_AC3_BITRATE_56K  = 3, +	V4L2_MPEG_AUDIO_AC3_BITRATE_64K  = 4, +	V4L2_MPEG_AUDIO_AC3_BITRATE_80K  = 5, +	V4L2_MPEG_AUDIO_AC3_BITRATE_96K  = 6, +	V4L2_MPEG_AUDIO_AC3_BITRATE_112K = 7, +	V4L2_MPEG_AUDIO_AC3_BITRATE_128K = 8, +	V4L2_MPEG_AUDIO_AC3_BITRATE_160K = 9, +	V4L2_MPEG_AUDIO_AC3_BITRATE_192K = 10, +	V4L2_MPEG_AUDIO_AC3_BITRATE_224K = 11, +	V4L2_MPEG_AUDIO_AC3_BITRATE_256K = 12, +	V4L2_MPEG_AUDIO_AC3_BITRATE_320K = 13, +	V4L2_MPEG_AUDIO_AC3_BITRATE_384K = 14, +	V4L2_MPEG_AUDIO_AC3_BITRATE_448K = 15, +	V4L2_MPEG_AUDIO_AC3_BITRATE_512K = 16, +	V4L2_MPEG_AUDIO_AC3_BITRATE_576K = 17, +	V4L2_MPEG_AUDIO_AC3_BITRATE_640K = 18, +}; +#define V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK	(V4L2_CID_MPEG_BASE+112) +enum v4l2_mpeg_audio_dec_playback { +	V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO	    = 0, +	V4L2_MPEG_AUDIO_DEC_PLAYBACK_STEREO	    = 1, +	V4L2_MPEG_AUDIO_DEC_PLAYBACK_LEFT	    = 2, +	V4L2_MPEG_AUDIO_DEC_PLAYBACK_RIGHT	    = 3, +	V4L2_MPEG_AUDIO_DEC_PLAYBACK_MONO	    = 4, +	V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO = 5, +}; +#define V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK (V4L2_CID_MPEG_BASE+113) + +/*  MPEG video controls specific to multiplexed streams */ +#define V4L2_CID_MPEG_VIDEO_ENCODING 		(V4L2_CID_MPEG_BASE+200) +enum v4l2_mpeg_video_encoding { +	V4L2_MPEG_VIDEO_ENCODING_MPEG_1     = 0, +	V4L2_MPEG_VIDEO_ENCODING_MPEG_2     = 1, +	V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC = 2, +}; +#define V4L2_CID_MPEG_VIDEO_ASPECT 		(V4L2_CID_MPEG_BASE+201) +enum v4l2_mpeg_video_aspect { +	V4L2_MPEG_VIDEO_ASPECT_1x1     = 0, +	V4L2_MPEG_VIDEO_ASPECT_4x3     = 1, +	V4L2_MPEG_VIDEO_ASPECT_16x9    = 2, +	V4L2_MPEG_VIDEO_ASPECT_221x100 = 3, +}; +#define V4L2_CID_MPEG_VIDEO_B_FRAMES 		(V4L2_CID_MPEG_BASE+202) +#define V4L2_CID_MPEG_VIDEO_GOP_SIZE 		(V4L2_CID_MPEG_BASE+203) +#define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE 	(V4L2_CID_MPEG_BASE+204) +#define V4L2_CID_MPEG_VIDEO_PULLDOWN 		(V4L2_CID_MPEG_BASE+205) +#define V4L2_CID_MPEG_VIDEO_BITRATE_MODE 	(V4L2_CID_MPEG_BASE+206) +enum v4l2_mpeg_video_bitrate_mode { +	V4L2_MPEG_VIDEO_BITRATE_MODE_VBR = 0, +	V4L2_MPEG_VIDEO_BITRATE_MODE_CBR = 1, +}; +#define V4L2_CID_MPEG_VIDEO_BITRATE 		(V4L2_CID_MPEG_BASE+207) +#define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK 	(V4L2_CID_MPEG_BASE+208) +#define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_MPEG_BASE+209) +#define V4L2_CID_MPEG_VIDEO_MUTE 		(V4L2_CID_MPEG_BASE+210) +#define V4L2_CID_MPEG_VIDEO_MUTE_YUV 		(V4L2_CID_MPEG_BASE+211) +#define V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE		(V4L2_CID_MPEG_BASE+212) +#define V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER	(V4L2_CID_MPEG_BASE+213) +#define V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB		(V4L2_CID_MPEG_BASE+214) +#define V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE			(V4L2_CID_MPEG_BASE+215) +#define V4L2_CID_MPEG_VIDEO_HEADER_MODE				(V4L2_CID_MPEG_BASE+216) +enum v4l2_mpeg_video_header_mode { +	V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE			= 0, +	V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME	= 1, + +}; +#define V4L2_CID_MPEG_VIDEO_MAX_REF_PIC			(V4L2_CID_MPEG_BASE+217) +#define V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE		(V4L2_CID_MPEG_BASE+218) +#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES	(V4L2_CID_MPEG_BASE+219) +#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB		(V4L2_CID_MPEG_BASE+220) +#define V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE		(V4L2_CID_MPEG_BASE+221) +enum v4l2_mpeg_video_multi_slice_mode { +	V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE		= 0, +	V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB		= 1, +	V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES	= 2, +}; +#define V4L2_CID_MPEG_VIDEO_VBV_SIZE			(V4L2_CID_MPEG_BASE+222) +#define V4L2_CID_MPEG_VIDEO_DEC_PTS			(V4L2_CID_MPEG_BASE+223) +#define V4L2_CID_MPEG_VIDEO_DEC_FRAME			(V4L2_CID_MPEG_BASE+224) +#define V4L2_CID_MPEG_VIDEO_VBV_DELAY			(V4L2_CID_MPEG_BASE+225) + +#define V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP		(V4L2_CID_MPEG_BASE+300) +#define V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP		(V4L2_CID_MPEG_BASE+301) +#define V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP		(V4L2_CID_MPEG_BASE+302) +#define V4L2_CID_MPEG_VIDEO_H263_MIN_QP			(V4L2_CID_MPEG_BASE+303) +#define V4L2_CID_MPEG_VIDEO_H263_MAX_QP			(V4L2_CID_MPEG_BASE+304) +#define V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP		(V4L2_CID_MPEG_BASE+350) +#define V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP		(V4L2_CID_MPEG_BASE+351) +#define V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP		(V4L2_CID_MPEG_BASE+352) +#define V4L2_CID_MPEG_VIDEO_H264_MIN_QP			(V4L2_CID_MPEG_BASE+353) +#define V4L2_CID_MPEG_VIDEO_H264_MAX_QP			(V4L2_CID_MPEG_BASE+354) +#define V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM		(V4L2_CID_MPEG_BASE+355) +#define V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE		(V4L2_CID_MPEG_BASE+356) +#define V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE		(V4L2_CID_MPEG_BASE+357) +enum v4l2_mpeg_video_h264_entropy_mode { +	V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC	= 0, +	V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC	= 1, +}; +#define V4L2_CID_MPEG_VIDEO_H264_I_PERIOD		(V4L2_CID_MPEG_BASE+358) +#define V4L2_CID_MPEG_VIDEO_H264_LEVEL			(V4L2_CID_MPEG_BASE+359) +enum v4l2_mpeg_video_h264_level { +	V4L2_MPEG_VIDEO_H264_LEVEL_1_0	= 0, +	V4L2_MPEG_VIDEO_H264_LEVEL_1B	= 1, +	V4L2_MPEG_VIDEO_H264_LEVEL_1_1	= 2, +	V4L2_MPEG_VIDEO_H264_LEVEL_1_2	= 3, +	V4L2_MPEG_VIDEO_H264_LEVEL_1_3	= 4, +	V4L2_MPEG_VIDEO_H264_LEVEL_2_0	= 5, +	V4L2_MPEG_VIDEO_H264_LEVEL_2_1	= 6, +	V4L2_MPEG_VIDEO_H264_LEVEL_2_2	= 7, +	V4L2_MPEG_VIDEO_H264_LEVEL_3_0	= 8, +	V4L2_MPEG_VIDEO_H264_LEVEL_3_1	= 9, +	V4L2_MPEG_VIDEO_H264_LEVEL_3_2	= 10, +	V4L2_MPEG_VIDEO_H264_LEVEL_4_0	= 11, +	V4L2_MPEG_VIDEO_H264_LEVEL_4_1	= 12, +	V4L2_MPEG_VIDEO_H264_LEVEL_4_2	= 13, +	V4L2_MPEG_VIDEO_H264_LEVEL_5_0	= 14, +	V4L2_MPEG_VIDEO_H264_LEVEL_5_1	= 15, +}; +#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA	(V4L2_CID_MPEG_BASE+360) +#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA	(V4L2_CID_MPEG_BASE+361) +#define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE	(V4L2_CID_MPEG_BASE+362) +enum v4l2_mpeg_video_h264_loop_filter_mode { +	V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED				= 0, +	V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED				= 1, +	V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY	= 2, +}; +#define V4L2_CID_MPEG_VIDEO_H264_PROFILE		(V4L2_CID_MPEG_BASE+363) +enum v4l2_mpeg_video_h264_profile { +	V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE			= 0, +	V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE	= 1, +	V4L2_MPEG_VIDEO_H264_PROFILE_MAIN			= 2, +	V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED			= 3, +	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH			= 4, +	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10			= 5, +	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422			= 6, +	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_PREDICTIVE	= 7, +	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10_INTRA		= 8, +	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422_INTRA		= 9, +	V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_INTRA		= 10, +	V4L2_MPEG_VIDEO_H264_PROFILE_CAVLC_444_INTRA		= 11, +	V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_BASELINE		= 12, +	V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH		= 13, +	V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA	= 14, +	V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH		= 15, +	V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH		= 16, +}; +#define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT	(V4L2_CID_MPEG_BASE+364) +#define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH	(V4L2_CID_MPEG_BASE+365) +#define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE		(V4L2_CID_MPEG_BASE+366) +#define V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC		(V4L2_CID_MPEG_BASE+367) +enum v4l2_mpeg_video_h264_vui_sar_idc { +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_UNSPECIFIED	= 0, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_1x1		= 1, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_12x11		= 2, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_10x11		= 3, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_16x11		= 4, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_40x33		= 5, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_24x11		= 6, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_20x11		= 7, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_32x11		= 8, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_80x33		= 9, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_18x11		= 10, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_15x11		= 11, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_64x33		= 12, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_160x99		= 13, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_4x3		= 14, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_3x2		= 15, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_2x1		= 16, +	V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_EXTENDED	= 17, +}; +#define V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING		(V4L2_CID_MPEG_BASE+368) +#define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0		(V4L2_CID_MPEG_BASE+369) +#define V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE	(V4L2_CID_MPEG_BASE+370) +enum v4l2_mpeg_video_h264_sei_fp_arrangement_type { +	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_CHECKERBOARD	= 0, +	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_COLUMN		= 1, +	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_ROW		= 2, +	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_SIDE_BY_SIDE	= 3, +	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TOP_BOTTOM		= 4, +	V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TEMPORAL		= 5, +}; +#define V4L2_CID_MPEG_VIDEO_H264_FMO			(V4L2_CID_MPEG_BASE+371) +#define V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE		(V4L2_CID_MPEG_BASE+372) +enum v4l2_mpeg_video_h264_fmo_map_type { +	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_INTERLEAVED_SLICES		= 0, +	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_SCATTERED_SLICES		= 1, +	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_FOREGROUND_WITH_LEFT_OVER	= 2, +	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_BOX_OUT			= 3, +	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_RASTER_SCAN			= 4, +	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_WIPE_SCAN			= 5, +	V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_EXPLICIT			= 6, +}; +#define V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP	(V4L2_CID_MPEG_BASE+373) +#define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION	(V4L2_CID_MPEG_BASE+374) +enum v4l2_mpeg_video_h264_fmo_change_dir { +	V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_RIGHT	= 0, +	V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_LEFT	= 1, +}; +#define V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE	(V4L2_CID_MPEG_BASE+375) +#define V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH		(V4L2_CID_MPEG_BASE+376) +#define V4L2_CID_MPEG_VIDEO_H264_ASO			(V4L2_CID_MPEG_BASE+377) +#define V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER	(V4L2_CID_MPEG_BASE+378) +#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING		(V4L2_CID_MPEG_BASE+379) +#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE	(V4L2_CID_MPEG_BASE+380) +enum v4l2_mpeg_video_h264_hierarchical_coding_type { +	V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B	= 0, +	V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P	= 1, +}; +#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER	(V4L2_CID_MPEG_BASE+381) +#define V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP	(V4L2_CID_MPEG_BASE+382) +#define V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP	(V4L2_CID_MPEG_BASE+400) +#define V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP	(V4L2_CID_MPEG_BASE+401) +#define V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP	(V4L2_CID_MPEG_BASE+402) +#define V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP	(V4L2_CID_MPEG_BASE+403) +#define V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP	(V4L2_CID_MPEG_BASE+404) +#define V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL		(V4L2_CID_MPEG_BASE+405) +enum v4l2_mpeg_video_mpeg4_level { +	V4L2_MPEG_VIDEO_MPEG4_LEVEL_0	= 0, +	V4L2_MPEG_VIDEO_MPEG4_LEVEL_0B	= 1, +	V4L2_MPEG_VIDEO_MPEG4_LEVEL_1	= 2, +	V4L2_MPEG_VIDEO_MPEG4_LEVEL_2	= 3, +	V4L2_MPEG_VIDEO_MPEG4_LEVEL_3	= 4, +	V4L2_MPEG_VIDEO_MPEG4_LEVEL_3B	= 5, +	V4L2_MPEG_VIDEO_MPEG4_LEVEL_4	= 6, +	V4L2_MPEG_VIDEO_MPEG4_LEVEL_5	= 7, +}; +#define V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE	(V4L2_CID_MPEG_BASE+406) +enum v4l2_mpeg_video_mpeg4_profile { +	V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE				= 0, +	V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE			= 1, +	V4L2_MPEG_VIDEO_MPEG4_PROFILE_CORE				= 2, +	V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE_SCALABLE			= 3, +	V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_CODING_EFFICIENCY	= 4, +}; +#define V4L2_CID_MPEG_VIDEO_MPEG4_QPEL		(V4L2_CID_MPEG_BASE+407) + +/*  MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */ +#define V4L2_CID_MPEG_CX2341X_BASE 				(V4L2_CTRL_CLASS_MPEG | 0x1000) +#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE 	(V4L2_CID_MPEG_CX2341X_BASE+0) +enum v4l2_mpeg_cx2341x_video_spatial_filter_mode { +	V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL = 0, +	V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO   = 1, +}; +#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER 		(V4L2_CID_MPEG_CX2341X_BASE+1) +#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE 	(V4L2_CID_MPEG_CX2341X_BASE+2) +enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type { +	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF                  = 0, +	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR               = 1, +	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT              = 2, +	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE      = 3, +	V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE = 4, +}; +#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE 	(V4L2_CID_MPEG_CX2341X_BASE+3) +enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type { +	V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF    = 0, +	V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR = 1, +}; +#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE 	(V4L2_CID_MPEG_CX2341X_BASE+4) +enum v4l2_mpeg_cx2341x_video_temporal_filter_mode { +	V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL = 0, +	V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO   = 1, +}; +#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER 		(V4L2_CID_MPEG_CX2341X_BASE+5) +#define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE 		(V4L2_CID_MPEG_CX2341X_BASE+6) +enum v4l2_mpeg_cx2341x_video_median_filter_type { +	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF      = 0, +	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR      = 1, +	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT     = 2, +	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT = 3, +	V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG     = 4, +}; +#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM 	(V4L2_CID_MPEG_CX2341X_BASE+7) +#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP 	(V4L2_CID_MPEG_CX2341X_BASE+8) +#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM	(V4L2_CID_MPEG_CX2341X_BASE+9) +#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP 	(V4L2_CID_MPEG_CX2341X_BASE+10) +#define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS 	(V4L2_CID_MPEG_CX2341X_BASE+11) + +/*  MPEG-class control IDs specific to the Samsung MFC 5.1 driver as defined by V4L2 */ +#define V4L2_CID_MPEG_MFC51_BASE				(V4L2_CTRL_CLASS_MPEG | 0x1100) + +#define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY		(V4L2_CID_MPEG_MFC51_BASE+0) +#define V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE	(V4L2_CID_MPEG_MFC51_BASE+1) +#define V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE			(V4L2_CID_MPEG_MFC51_BASE+2) +enum v4l2_mpeg_mfc51_video_frame_skip_mode { +	V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_DISABLED		= 0, +	V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT	= 1, +	V4L2_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT		= 2, +}; +#define V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE			(V4L2_CID_MPEG_MFC51_BASE+3) +enum v4l2_mpeg_mfc51_video_force_frame_type { +	V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_DISABLED		= 0, +	V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_I_FRAME		= 1, +	V4L2_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE_NOT_CODED	= 2, +}; +#define V4L2_CID_MPEG_MFC51_VIDEO_PADDING				(V4L2_CID_MPEG_MFC51_BASE+4) +#define V4L2_CID_MPEG_MFC51_VIDEO_PADDING_YUV				(V4L2_CID_MPEG_MFC51_BASE+5) +#define V4L2_CID_MPEG_MFC51_VIDEO_RC_FIXED_TARGET_BIT			(V4L2_CID_MPEG_MFC51_BASE+6) +#define V4L2_CID_MPEG_MFC51_VIDEO_RC_REACTION_COEFF			(V4L2_CID_MPEG_MFC51_BASE+7) +#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_ACTIVITY		(V4L2_CID_MPEG_MFC51_BASE+50) +#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_DARK			(V4L2_CID_MPEG_MFC51_BASE+51) +#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_SMOOTH		(V4L2_CID_MPEG_MFC51_BASE+52) +#define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC		(V4L2_CID_MPEG_MFC51_BASE+53) +#define V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P		(V4L2_CID_MPEG_MFC51_BASE+54) + + +/*  Camera class control IDs */ + +#define V4L2_CID_CAMERA_CLASS_BASE 	(V4L2_CTRL_CLASS_CAMERA | 0x900) +#define V4L2_CID_CAMERA_CLASS 		(V4L2_CTRL_CLASS_CAMERA | 1) + +#define V4L2_CID_EXPOSURE_AUTO			(V4L2_CID_CAMERA_CLASS_BASE+1) +enum  v4l2_exposure_auto_type { +	V4L2_EXPOSURE_AUTO = 0, +	V4L2_EXPOSURE_MANUAL = 1, +	V4L2_EXPOSURE_SHUTTER_PRIORITY = 2, +	V4L2_EXPOSURE_APERTURE_PRIORITY = 3 +}; +#define V4L2_CID_EXPOSURE_ABSOLUTE		(V4L2_CID_CAMERA_CLASS_BASE+2) +#define V4L2_CID_EXPOSURE_AUTO_PRIORITY		(V4L2_CID_CAMERA_CLASS_BASE+3) + +#define V4L2_CID_PAN_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+4) +#define V4L2_CID_TILT_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+5) +#define V4L2_CID_PAN_RESET			(V4L2_CID_CAMERA_CLASS_BASE+6) +#define V4L2_CID_TILT_RESET			(V4L2_CID_CAMERA_CLASS_BASE+7) + +#define V4L2_CID_PAN_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+8) +#define V4L2_CID_TILT_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+9) + +#define V4L2_CID_FOCUS_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+10) +#define V4L2_CID_FOCUS_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+11) +#define V4L2_CID_FOCUS_AUTO			(V4L2_CID_CAMERA_CLASS_BASE+12) + +#define V4L2_CID_ZOOM_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+13) +#define V4L2_CID_ZOOM_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+14) +#define V4L2_CID_ZOOM_CONTINUOUS		(V4L2_CID_CAMERA_CLASS_BASE+15) + +#define V4L2_CID_PRIVACY			(V4L2_CID_CAMERA_CLASS_BASE+16) + +#define V4L2_CID_IRIS_ABSOLUTE			(V4L2_CID_CAMERA_CLASS_BASE+17) +#define V4L2_CID_IRIS_RELATIVE			(V4L2_CID_CAMERA_CLASS_BASE+18) + +#define V4L2_CID_AUTO_EXPOSURE_BIAS		(V4L2_CID_CAMERA_CLASS_BASE+19) + +#define V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE	(V4L2_CID_CAMERA_CLASS_BASE+20) +enum v4l2_auto_n_preset_white_balance { +	V4L2_WHITE_BALANCE_MANUAL		= 0, +	V4L2_WHITE_BALANCE_AUTO			= 1, +	V4L2_WHITE_BALANCE_INCANDESCENT		= 2, +	V4L2_WHITE_BALANCE_FLUORESCENT		= 3, +	V4L2_WHITE_BALANCE_FLUORESCENT_H	= 4, +	V4L2_WHITE_BALANCE_HORIZON		= 5, +	V4L2_WHITE_BALANCE_DAYLIGHT		= 6, +	V4L2_WHITE_BALANCE_FLASH		= 7, +	V4L2_WHITE_BALANCE_CLOUDY		= 8, +	V4L2_WHITE_BALANCE_SHADE		= 9, +}; + +#define V4L2_CID_WIDE_DYNAMIC_RANGE		(V4L2_CID_CAMERA_CLASS_BASE+21) +#define V4L2_CID_IMAGE_STABILIZATION		(V4L2_CID_CAMERA_CLASS_BASE+22) + +#define V4L2_CID_ISO_SENSITIVITY		(V4L2_CID_CAMERA_CLASS_BASE+23) +#define V4L2_CID_ISO_SENSITIVITY_AUTO		(V4L2_CID_CAMERA_CLASS_BASE+24) +enum v4l2_iso_sensitivity_auto_type { +	V4L2_ISO_SENSITIVITY_MANUAL		= 0, +	V4L2_ISO_SENSITIVITY_AUTO		= 1, +}; + +#define V4L2_CID_EXPOSURE_METERING		(V4L2_CID_CAMERA_CLASS_BASE+25) +enum v4l2_exposure_metering { +	V4L2_EXPOSURE_METERING_AVERAGE		= 0, +	V4L2_EXPOSURE_METERING_CENTER_WEIGHTED	= 1, +	V4L2_EXPOSURE_METERING_SPOT		= 2, +}; + +#define V4L2_CID_SCENE_MODE			(V4L2_CID_CAMERA_CLASS_BASE+26) +enum v4l2_scene_mode { +	V4L2_SCENE_MODE_NONE			= 0, +	V4L2_SCENE_MODE_BACKLIGHT		= 1, +	V4L2_SCENE_MODE_BEACH_SNOW		= 2, +	V4L2_SCENE_MODE_CANDLE_LIGHT		= 3, +	V4L2_SCENE_MODE_DAWN_DUSK		= 4, +	V4L2_SCENE_MODE_FALL_COLORS		= 5, +	V4L2_SCENE_MODE_FIREWORKS		= 6, +	V4L2_SCENE_MODE_LANDSCAPE		= 7, +	V4L2_SCENE_MODE_NIGHT			= 8, +	V4L2_SCENE_MODE_PARTY_INDOOR		= 9, +	V4L2_SCENE_MODE_PORTRAIT		= 10, +	V4L2_SCENE_MODE_SPORTS			= 11, +	V4L2_SCENE_MODE_SUNSET			= 12, +	V4L2_SCENE_MODE_TEXT			= 13, +}; + +#define V4L2_CID_3A_LOCK			(V4L2_CID_CAMERA_CLASS_BASE+27) +#define V4L2_LOCK_EXPOSURE			(1 << 0) +#define V4L2_LOCK_WHITE_BALANCE			(1 << 1) +#define V4L2_LOCK_FOCUS				(1 << 2) + +#define V4L2_CID_AUTO_FOCUS_START		(V4L2_CID_CAMERA_CLASS_BASE+28) +#define V4L2_CID_AUTO_FOCUS_STOP		(V4L2_CID_CAMERA_CLASS_BASE+29) +#define V4L2_CID_AUTO_FOCUS_STATUS		(V4L2_CID_CAMERA_CLASS_BASE+30) +#define V4L2_AUTO_FOCUS_STATUS_IDLE		(0 << 0) +#define V4L2_AUTO_FOCUS_STATUS_BUSY		(1 << 0) +#define V4L2_AUTO_FOCUS_STATUS_REACHED		(1 << 1) +#define V4L2_AUTO_FOCUS_STATUS_FAILED		(1 << 2) + +#define V4L2_CID_AUTO_FOCUS_RANGE		(V4L2_CID_CAMERA_CLASS_BASE+31) +enum v4l2_auto_focus_range { +	V4L2_AUTO_FOCUS_RANGE_AUTO		= 0, +	V4L2_AUTO_FOCUS_RANGE_NORMAL		= 1, +	V4L2_AUTO_FOCUS_RANGE_MACRO		= 2, +	V4L2_AUTO_FOCUS_RANGE_INFINITY		= 3, +}; + + +/* FM Modulator class control IDs */ + +#define V4L2_CID_FM_TX_CLASS_BASE		(V4L2_CTRL_CLASS_FM_TX | 0x900) +#define V4L2_CID_FM_TX_CLASS			(V4L2_CTRL_CLASS_FM_TX | 1) + +#define V4L2_CID_RDS_TX_DEVIATION		(V4L2_CID_FM_TX_CLASS_BASE + 1) +#define V4L2_CID_RDS_TX_PI			(V4L2_CID_FM_TX_CLASS_BASE + 2) +#define V4L2_CID_RDS_TX_PTY			(V4L2_CID_FM_TX_CLASS_BASE + 3) +#define V4L2_CID_RDS_TX_PS_NAME			(V4L2_CID_FM_TX_CLASS_BASE + 5) +#define V4L2_CID_RDS_TX_RADIO_TEXT		(V4L2_CID_FM_TX_CLASS_BASE + 6) + +#define V4L2_CID_AUDIO_LIMITER_ENABLED		(V4L2_CID_FM_TX_CLASS_BASE + 64) +#define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME	(V4L2_CID_FM_TX_CLASS_BASE + 65) +#define V4L2_CID_AUDIO_LIMITER_DEVIATION	(V4L2_CID_FM_TX_CLASS_BASE + 66) + +#define V4L2_CID_AUDIO_COMPRESSION_ENABLED	(V4L2_CID_FM_TX_CLASS_BASE + 80) +#define V4L2_CID_AUDIO_COMPRESSION_GAIN		(V4L2_CID_FM_TX_CLASS_BASE + 81) +#define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD	(V4L2_CID_FM_TX_CLASS_BASE + 82) +#define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME	(V4L2_CID_FM_TX_CLASS_BASE + 83) +#define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME	(V4L2_CID_FM_TX_CLASS_BASE + 84) + +#define V4L2_CID_PILOT_TONE_ENABLED		(V4L2_CID_FM_TX_CLASS_BASE + 96) +#define V4L2_CID_PILOT_TONE_DEVIATION		(V4L2_CID_FM_TX_CLASS_BASE + 97) +#define V4L2_CID_PILOT_TONE_FREQUENCY		(V4L2_CID_FM_TX_CLASS_BASE + 98) + +#define V4L2_CID_TUNE_PREEMPHASIS		(V4L2_CID_FM_TX_CLASS_BASE + 112) +enum v4l2_preemphasis { +	V4L2_PREEMPHASIS_DISABLED	= 0, +	V4L2_PREEMPHASIS_50_uS		= 1, +	V4L2_PREEMPHASIS_75_uS		= 2, +}; +#define V4L2_CID_TUNE_POWER_LEVEL		(V4L2_CID_FM_TX_CLASS_BASE + 113) +#define V4L2_CID_TUNE_ANTENNA_CAPACITOR		(V4L2_CID_FM_TX_CLASS_BASE + 114) + + +/* Flash and privacy (indicator) light controls */ + +#define V4L2_CID_FLASH_CLASS_BASE		(V4L2_CTRL_CLASS_FLASH | 0x900) +#define V4L2_CID_FLASH_CLASS			(V4L2_CTRL_CLASS_FLASH | 1) + +#define V4L2_CID_FLASH_LED_MODE			(V4L2_CID_FLASH_CLASS_BASE + 1) +enum v4l2_flash_led_mode { +	V4L2_FLASH_LED_MODE_NONE, +	V4L2_FLASH_LED_MODE_FLASH, +	V4L2_FLASH_LED_MODE_TORCH, +}; + +#define V4L2_CID_FLASH_STROBE_SOURCE		(V4L2_CID_FLASH_CLASS_BASE + 2) +enum v4l2_flash_strobe_source { +	V4L2_FLASH_STROBE_SOURCE_SOFTWARE, +	V4L2_FLASH_STROBE_SOURCE_EXTERNAL, +}; + +#define V4L2_CID_FLASH_STROBE			(V4L2_CID_FLASH_CLASS_BASE + 3) +#define V4L2_CID_FLASH_STROBE_STOP		(V4L2_CID_FLASH_CLASS_BASE + 4) +#define V4L2_CID_FLASH_STROBE_STATUS		(V4L2_CID_FLASH_CLASS_BASE + 5) + +#define V4L2_CID_FLASH_TIMEOUT			(V4L2_CID_FLASH_CLASS_BASE + 6) +#define V4L2_CID_FLASH_INTENSITY		(V4L2_CID_FLASH_CLASS_BASE + 7) +#define V4L2_CID_FLASH_TORCH_INTENSITY		(V4L2_CID_FLASH_CLASS_BASE + 8) +#define V4L2_CID_FLASH_INDICATOR_INTENSITY	(V4L2_CID_FLASH_CLASS_BASE + 9) + +#define V4L2_CID_FLASH_FAULT			(V4L2_CID_FLASH_CLASS_BASE + 10) +#define V4L2_FLASH_FAULT_OVER_VOLTAGE		(1 << 0) +#define V4L2_FLASH_FAULT_TIMEOUT		(1 << 1) +#define V4L2_FLASH_FAULT_OVER_TEMPERATURE	(1 << 2) +#define V4L2_FLASH_FAULT_SHORT_CIRCUIT		(1 << 3) +#define V4L2_FLASH_FAULT_OVER_CURRENT		(1 << 4) +#define V4L2_FLASH_FAULT_INDICATOR		(1 << 5) + +#define V4L2_CID_FLASH_CHARGE			(V4L2_CID_FLASH_CLASS_BASE + 11) +#define V4L2_CID_FLASH_READY			(V4L2_CID_FLASH_CLASS_BASE + 12) + + +/* JPEG-class control IDs */ + +#define V4L2_CID_JPEG_CLASS_BASE		(V4L2_CTRL_CLASS_JPEG | 0x900) +#define V4L2_CID_JPEG_CLASS			(V4L2_CTRL_CLASS_JPEG | 1) + +#define	V4L2_CID_JPEG_CHROMA_SUBSAMPLING	(V4L2_CID_JPEG_CLASS_BASE + 1) +enum v4l2_jpeg_chroma_subsampling { +	V4L2_JPEG_CHROMA_SUBSAMPLING_444	= 0, +	V4L2_JPEG_CHROMA_SUBSAMPLING_422	= 1, +	V4L2_JPEG_CHROMA_SUBSAMPLING_420	= 2, +	V4L2_JPEG_CHROMA_SUBSAMPLING_411	= 3, +	V4L2_JPEG_CHROMA_SUBSAMPLING_410	= 4, +	V4L2_JPEG_CHROMA_SUBSAMPLING_GRAY	= 5, +}; +#define	V4L2_CID_JPEG_RESTART_INTERVAL		(V4L2_CID_JPEG_CLASS_BASE + 2) +#define	V4L2_CID_JPEG_COMPRESSION_QUALITY	(V4L2_CID_JPEG_CLASS_BASE + 3) + +#define	V4L2_CID_JPEG_ACTIVE_MARKER		(V4L2_CID_JPEG_CLASS_BASE + 4) +#define	V4L2_JPEG_ACTIVE_MARKER_APP0		(1 << 0) +#define	V4L2_JPEG_ACTIVE_MARKER_APP1		(1 << 1) +#define	V4L2_JPEG_ACTIVE_MARKER_COM		(1 << 16) +#define	V4L2_JPEG_ACTIVE_MARKER_DQT		(1 << 17) +#define	V4L2_JPEG_ACTIVE_MARKER_DHT		(1 << 18) + +/* Image source controls */ +#define V4L2_CID_IMAGE_SOURCE_CLASS_BASE	(V4L2_CTRL_CLASS_IMAGE_SOURCE | 0x900) +#define V4L2_CID_IMAGE_SOURCE_CLASS		(V4L2_CTRL_CLASS_IMAGE_SOURCE | 1) + +#define V4L2_CID_VBLANK				(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 1) +#define V4L2_CID_HBLANK				(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2) +#define V4L2_CID_ANALOGUE_GAIN			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3) + + +/* Image processing controls */ + +#define V4L2_CID_IMAGE_PROC_CLASS_BASE		(V4L2_CTRL_CLASS_IMAGE_PROC | 0x900) +#define V4L2_CID_IMAGE_PROC_CLASS		(V4L2_CTRL_CLASS_IMAGE_PROC | 1) + +#define V4L2_CID_LINK_FREQ			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 1) +#define V4L2_CID_PIXEL_RATE			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 2) +#define V4L2_CID_TEST_PATTERN			(V4L2_CID_IMAGE_PROC_CLASS_BASE + 3) + +#endif diff --git a/include/uapi/linux/v4l2-dv-timings.h b/include/uapi/linux/v4l2-dv-timings.h new file mode 100644 index 00000000000..9ef8172e5ed --- /dev/null +++ b/include/uapi/linux/v4l2-dv-timings.h @@ -0,0 +1,816 @@ +/* + * V4L2 DV timings header. + * + * Copyright (C) 2012  Hans Verkuil <hans.verkuil@cisco.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * version 2 as published by the Free Software Foundation. + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + */ + +#ifndef _V4L2_DV_TIMINGS_H +#define _V4L2_DV_TIMINGS_H + +#if __GNUC__ < 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ < 6)) +/* Sadly gcc versions older than 4.6 have a bug in how they initialize +   anonymous unions where they require additional curly brackets. +   This violates the C1x standard. This workaround adds the curly brackets +   if needed. */ +#define V4L2_INIT_BT_TIMINGS(_width, args...) \ +	{ .bt = { _width , ## args } } +#else +#define V4L2_INIT_BT_TIMINGS(_width, args...) \ +	.bt = { _width , ## args } +#endif + +/* CEA-861-E timings (i.e. standard HDTV timings) */ + +#define V4L2_DV_BT_CEA_640X480P59_94 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \ +		25175000, 16, 96, 48, 10, 2, 33, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CEA861, 0) \ +} + +#define V4L2_DV_BT_CEA_720X480P59_94 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(720, 480, 0, 0, \ +		27000000, 16, 62, 60, 9, 6, 30, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, 0) \ +} + +#define V4L2_DV_BT_CEA_720X576P50 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(720, 576, 0, 0, \ +		27000000, 12, 64, 68, 5, 5, 39, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, 0) \ +} + +#define V4L2_DV_BT_CEA_1280X720P24 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 720, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		59400000, 1760, 40, 220, 5, 5, 20, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CEA861, \ +		V4L2_DV_FL_CAN_REDUCE_FPS) \ +} + +#define V4L2_DV_BT_CEA_1280X720P25 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 720, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		74250000, 2420, 40, 220, 5, 5, 20, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, 0) \ +} + +#define V4L2_DV_BT_CEA_1280X720P30 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 720, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		74250000, 1760, 40, 220, 5, 5, 20, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ +} + +#define V4L2_DV_BT_CEA_1280X720P50 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 720, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		74250000, 440, 40, 220, 5, 5, 20, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, 0) \ +} + +#define V4L2_DV_BT_CEA_1280X720P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 720, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		74250000, 110, 40, 220, 5, 5, 20, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ +} + +#define V4L2_DV_BT_CEA_1920X1080P24 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		74250000, 638, 44, 148, 4, 5, 36, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ +} + +#define V4L2_DV_BT_CEA_1920X1080P25 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		74250000, 528, 44, 148, 4, 5, 36, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, 0) \ +} + +#define V4L2_DV_BT_CEA_1920X1080P30 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		74250000, 88, 44, 148, 4, 5, 36, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \ +} + +#define V4L2_DV_BT_CEA_1920X1080I50 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1080, 1, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		74250000, 528, 44, 148, 2, 5, 15, 2, 5, 16, \ +		V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_HALF_LINE) \ +} + +#define V4L2_DV_BT_CEA_1920X1080P50 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		148500000, 528, 44, 148, 4, 5, 36, 0, 0, 0, \ +		V4L2_DV_BT_STD_CEA861, 0) \ +} + +#define V4L2_DV_BT_CEA_1920X1080I60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1080, 1, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		74250000, 88, 44, 148, 2, 5, 15, 2, 5, 16, \ +		V4L2_DV_BT_STD_CEA861, \ +		V4L2_DV_FL_CAN_REDUCE_FPS | V4L2_DV_FL_HALF_LINE) \ +} + +#define V4L2_DV_BT_CEA_1920X1080P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1080, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		148500000, 88, 44, 148, 4, 5, 36, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CEA861, \ +		V4L2_DV_FL_CAN_REDUCE_FPS) \ +} + + +/* VESA Discrete Monitor Timings as per version 1.0, revision 12 */ + +#define V4L2_DV_BT_DMT_640X350P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(640, 350, 0, V4L2_DV_HSYNC_POS_POL, \ +		31500000, 32, 64, 96, 32, 3, 60, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_640X400P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(640, 400, 0, V4L2_DV_VSYNC_POS_POL, \ +		31500000, 32, 64, 96, 1, 3, 41, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_720X400P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(720, 400, 0, V4L2_DV_VSYNC_POS_POL, \ +		35500000, 36, 72, 108, 1, 3, 42, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +/* VGA resolutions */ +#define V4L2_DV_BT_DMT_640X480P60 V4L2_DV_BT_CEA_640X480P59_94 + +#define V4L2_DV_BT_DMT_640X480P72 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \ +		31500000, 24, 40, 128, 9, 3, 28, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_640X480P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \ +		31500000, 16, 64, 120, 1, 3, 16, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_640X480P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(640, 480, 0, 0, \ +		36000000, 56, 56, 80, 1, 3, 25, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +/* SVGA resolutions */ +#define V4L2_DV_BT_DMT_800X600P56 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(800, 600, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		36000000, 24, 72, 128, 1, 2, 22, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_800X600P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(800, 600, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		40000000, 40, 128, 88, 1, 4, 23, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_800X600P72 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(800, 600, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		50000000, 56, 120, 64, 37, 6, 23, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_800X600P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(800, 600, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		49500000, 16, 80, 160, 1, 3, 21, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_800X600P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(800, 600, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		56250000, 32, 64, 152, 1, 3, 27, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_800X600P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(800, 600, 0, V4L2_DV_HSYNC_POS_POL, \ +		73250000, 48, 32, 80, 3, 4, 29, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_848X480P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(848, 480, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		33750000, 16, 112, 112, 6, 8, 23, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1024X768I43 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1024, 768, 1, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		44900000, 8, 176, 56, 0, 4, 20, 0, 4, 21, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +/* XGA resolutions */ +#define V4L2_DV_BT_DMT_1024X768P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1024, 768, 0, 0, \ +		65000000, 24, 136, 160, 3, 6, 29, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1024X768P70 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1024, 768, 0, 0, \ +		75000000, 24, 136, 144, 3, 6, 29, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1024X768P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1024, 768, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		78750000, 16, 96, 176, 1, 3, 28, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1024X768P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1024, 768, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		94500000, 48, 96, 208, 1, 3, 36, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1024X768P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1024, 768, 0, V4L2_DV_HSYNC_POS_POL, \ +		115500000, 48, 32, 80, 3, 4, 38, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +/* XGA+ resolution */ +#define V4L2_DV_BT_DMT_1152X864P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1152, 864, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		108000000, 64, 128, 256, 1, 3, 32, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1280X720P60 V4L2_DV_BT_CEA_1280X720P60 + +/* WXGA resolutions */ +#define V4L2_DV_BT_DMT_1280X768P60_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_HSYNC_POS_POL, \ +		68250000, 48, 32, 80, 3, 7, 12, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1280X768P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_VSYNC_POS_POL, \ +		79500000, 64, 128, 192, 3, 7, 20, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1280X768P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_VSYNC_POS_POL, \ +		102250000, 80, 128, 208, 3, 7, 27, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1280X768P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_VSYNC_POS_POL, \ +		117500000, 80, 136, 216, 3, 7, 31, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1280X768P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 768, 0, V4L2_DV_HSYNC_POS_POL, \ +		140250000, 48, 32, 80, 3, 7, 35, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1280X800P60_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_HSYNC_POS_POL, \ +		71000000, 48, 32, 80, 3, 6, 14, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1280X800P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_VSYNC_POS_POL, \ +		83500000, 72, 128, 200, 3, 6, 22, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1280X800P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_VSYNC_POS_POL, \ +		106500000, 80, 128, 208, 3, 6, 29, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1280X800P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_VSYNC_POS_POL, \ +		122500000, 80, 136, 216, 3, 6, 34, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1280X800P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 800, 0, V4L2_DV_HSYNC_POS_POL, \ +		146250000, 48, 32, 80, 3, 6, 38, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1280X960P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 960, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		108000000, 96, 112, 312, 1, 3, 36, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1280X960P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 960, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		148500000, 64, 160, 224, 1, 3, 47, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1280X960P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 960, 0, V4L2_DV_HSYNC_POS_POL, \ +		175500000, 48, 32, 80, 3, 4, 50, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +/* SXGA resolutions */ +#define V4L2_DV_BT_DMT_1280X1024P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 1024, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		108000000, 48, 112, 248, 1, 3, 38, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1280X1024P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 1024, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		135000000, 16, 144, 248, 1, 3, 38, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1280X1024P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 1024, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		157500000, 64, 160, 224, 1, 3, 44, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1280X1024P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1280, 1024, 0, V4L2_DV_HSYNC_POS_POL, \ +		187250000, 48, 32, 80, 3, 7, 50, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1360X768P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1360, 768, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		85500000, 64, 112, 256, 3, 6, 18, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1360X768P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1360, 768, 0, V4L2_DV_HSYNC_POS_POL, \ +		148250000, 48, 32, 80, 3, 5, 37, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1366X768P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1366, 768, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		85500000, 70, 143, 213, 3, 3, 24, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1366X768P60_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1366, 768, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		72000000, 14, 56, 64, 1, 3, 28, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, V4L2_DV_FL_REDUCED_BLANKING) \ +} + +/* SXGA+ resolutions */ +#define V4L2_DV_BT_DMT_1400X1050P60_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_HSYNC_POS_POL, \ +		101000000, 48, 32, 80, 3, 4, 23, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1400X1050P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_VSYNC_POS_POL, \ +		121750000, 88, 144, 232, 3, 4, 32, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1400X1050P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_VSYNC_POS_POL, \ +		156000000, 104, 144, 248, 3, 4, 42, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1400X1050P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_VSYNC_POS_POL, \ +		179500000, 104, 152, 256, 3, 4, 48, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1400X1050P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1400, 1050, 0, V4L2_DV_HSYNC_POS_POL, \ +		208000000, 48, 32, 80, 3, 4, 55, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +/* WXGA+ resolutions */ +#define V4L2_DV_BT_DMT_1440X900P60_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_HSYNC_POS_POL, \ +		88750000, 48, 32, 80, 3, 6, 17, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1440X900P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_VSYNC_POS_POL, \ +		106500000, 80, 152, 232, 3, 6, 25, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1440X900P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_VSYNC_POS_POL, \ +		136750000, 96, 152, 248, 3, 6, 33, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1440X900P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_VSYNC_POS_POL, \ +		157000000, 104, 152, 256, 3, 6, 39, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1440X900P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1440, 900, 0, V4L2_DV_HSYNC_POS_POL, \ +		182750000, 48, 32, 80, 3, 6, 44, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1600X900P60_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1600, 900, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		108000000, 24, 80, 96, 1, 3, 96, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, V4L2_DV_FL_REDUCED_BLANKING) \ +} + +/* UXGA resolutions */ +#define V4L2_DV_BT_DMT_1600X1200P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		162000000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1600X1200P65 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		175500000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1600X1200P70 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		189000000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1600X1200P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		202500000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1600X1200P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1600, 1200, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		229500000, 64, 192, 304, 1, 3, 46, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1600X1200P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1600, 1200, 0, V4L2_DV_HSYNC_POS_POL, \ +		268250000, 48, 32, 80, 3, 4, 64, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +/* WSXGA+ resolutions */ +#define V4L2_DV_BT_DMT_1680X1050P60_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_HSYNC_POS_POL, \ +		119000000, 48, 32, 80, 3, 6, 21, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1680X1050P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_VSYNC_POS_POL, \ +		146250000, 104, 176, 280, 3, 6, 30, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1680X1050P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_VSYNC_POS_POL, \ +		187000000, 120, 176, 296, 3, 6, 40, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1680X1050P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_VSYNC_POS_POL, \ +		214750000, 128, 176, 304, 3, 6, 46, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1680X1050P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1680, 1050, 0, V4L2_DV_HSYNC_POS_POL, \ +		245500000, 48, 32, 80, 3, 6, 53, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1792X1344P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1792, 1344, 0, V4L2_DV_VSYNC_POS_POL, \ +		204750000, 128, 200, 328, 1, 3, 46, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1792X1344P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1792, 1344, 0, V4L2_DV_VSYNC_POS_POL, \ +		261000000, 96, 216, 352, 1, 3, 69, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1792X1344P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1792, 1344, 0, V4L2_DV_HSYNC_POS_POL, \ +		333250000, 48, 32, 80, 3, 4, 72, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1856X1392P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1856, 1392, 0, V4L2_DV_VSYNC_POS_POL, \ +		218250000, 96, 224, 352, 1, 3, 43, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1856X1392P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1856, 1392, 0, V4L2_DV_VSYNC_POS_POL, \ +		288000000, 128, 224, 352, 1, 3, 104, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1856X1392P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1856, 1392, 0, V4L2_DV_HSYNC_POS_POL, \ +		356500000, 48, 32, 80, 3, 4, 75, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1920X1080P60 V4L2_DV_BT_CEA_1920X1080P60 + +/* WUXGA resolutions */ +#define V4L2_DV_BT_DMT_1920X1200P60_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_HSYNC_POS_POL, \ +		154000000, 48, 32, 80, 3, 6, 26, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1920X1200P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_VSYNC_POS_POL, \ +		193250000, 136, 200, 336, 3, 6, 36, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1920X1200P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_VSYNC_POS_POL, \ +		245250000, 136, 208, 344, 3, 6, 46, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1920X1200P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_VSYNC_POS_POL, \ +		281250000, 144, 208, 352, 3, 6, 53, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_1920X1200P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1200, 0, V4L2_DV_HSYNC_POS_POL, \ +		317000000, 48, 32, 80, 3, 6, 62, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1920X1440P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1440, 0, V4L2_DV_VSYNC_POS_POL, \ +		234000000, 128, 208, 344, 1, 3, 56, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1920X1440P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1440, 0, V4L2_DV_VSYNC_POS_POL, \ +		297000000, 144, 224, 352, 1, 3, 56, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#define V4L2_DV_BT_DMT_1920X1440P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1920, 1440, 0, V4L2_DV_HSYNC_POS_POL, \ +		380500000, 48, 32, 80, 3, 4, 78, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_2048X1152P60_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(2048, 1152, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		162000000, 26, 80, 96, 1, 3, 44, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, V4L2_DV_FL_REDUCED_BLANKING) \ +} + +/* WQXGA resolutions */ +#define V4L2_DV_BT_DMT_2560X1600P60_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_HSYNC_POS_POL, \ +		268500000, 48, 32, 80, 3, 6, 37, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_2560X1600P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_VSYNC_POS_POL, \ +		348500000, 192, 280, 472, 3, 6, 49, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_2560X1600P75 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_VSYNC_POS_POL, \ +		443250000, 208, 280, 488, 3, 6, 63, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_2560X1600P85 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_VSYNC_POS_POL, \ +		505250000, 208, 280, 488, 3, 6, 73, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, 0) \ +} + +#define V4L2_DV_BT_DMT_2560X1600P120_RB { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(2560, 1600, 0, V4L2_DV_HSYNC_POS_POL, \ +		552750000, 48, 32, 80, 3, 6, 85, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT | V4L2_DV_BT_STD_CVT, \ +		V4L2_DV_FL_REDUCED_BLANKING) \ +} + +#define V4L2_DV_BT_DMT_1366X768P60 { \ +	.type = V4L2_DV_BT_656_1120, \ +	V4L2_INIT_BT_TIMINGS(1366, 768, 0, \ +		V4L2_DV_HSYNC_POS_POL | V4L2_DV_VSYNC_POS_POL, \ +		85500000, 70, 143, 213, 3, 3, 24, 0, 0, 0, \ +		V4L2_DV_BT_STD_DMT, 0) \ +} + +#endif diff --git a/include/uapi/linux/v4l2-mediabus.h b/include/uapi/linux/v4l2-mediabus.h new file mode 100644 index 00000000000..7d64e0e1a18 --- /dev/null +++ b/include/uapi/linux/v4l2-mediabus.h @@ -0,0 +1,119 @@ +/* + * Media Bus API header + * + * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef __LINUX_V4L2_MEDIABUS_H +#define __LINUX_V4L2_MEDIABUS_H + +#include <linux/types.h> +#include <linux/videodev2.h> + +/* + * These pixel codes uniquely identify data formats on the media bus. Mostly + * they correspond to similarly named V4L2_PIX_FMT_* formats, format 0 is + * reserved, V4L2_MBUS_FMT_FIXED shall be used by host-client pairs, where the + * data format is fixed. Additionally, "2X8" means that one pixel is transferred + * in two 8-bit samples, "BE" or "LE" specify in which order those samples are + * transferred over the bus: "LE" means that the least significant bits are + * transferred first, "BE" means that the most significant bits are transferred + * first, and "PADHI" and "PADLO" define which bits - low or high, in the + * incomplete high byte, are filled with padding bits. + * + * The pixel codes are grouped by type, bus_width, bits per component, samples + * per pixel and order of subsamples. Numerical values are sorted using generic + * numerical sort order (8 thus comes before 10). + * + * As their value can't change when a new pixel code is inserted in the + * enumeration, the pixel codes are explicitly given a numerical value. The next + * free values for each category are listed below, update them when inserting + * new pixel codes. + */ +enum v4l2_mbus_pixelcode { +	V4L2_MBUS_FMT_FIXED = 0x0001, + +	/* RGB - next is 0x1009 */ +	V4L2_MBUS_FMT_RGB444_2X8_PADHI_BE = 0x1001, +	V4L2_MBUS_FMT_RGB444_2X8_PADHI_LE = 0x1002, +	V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE = 0x1003, +	V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE = 0x1004, +	V4L2_MBUS_FMT_BGR565_2X8_BE = 0x1005, +	V4L2_MBUS_FMT_BGR565_2X8_LE = 0x1006, +	V4L2_MBUS_FMT_RGB565_2X8_BE = 0x1007, +	V4L2_MBUS_FMT_RGB565_2X8_LE = 0x1008, + +	/* YUV (including grey) - next is 0x2014 */ +	V4L2_MBUS_FMT_Y8_1X8 = 0x2001, +	V4L2_MBUS_FMT_UYVY8_1_5X8 = 0x2002, +	V4L2_MBUS_FMT_VYUY8_1_5X8 = 0x2003, +	V4L2_MBUS_FMT_YUYV8_1_5X8 = 0x2004, +	V4L2_MBUS_FMT_YVYU8_1_5X8 = 0x2005, +	V4L2_MBUS_FMT_UYVY8_2X8 = 0x2006, +	V4L2_MBUS_FMT_VYUY8_2X8 = 0x2007, +	V4L2_MBUS_FMT_YUYV8_2X8 = 0x2008, +	V4L2_MBUS_FMT_YVYU8_2X8 = 0x2009, +	V4L2_MBUS_FMT_Y10_1X10 = 0x200a, +	V4L2_MBUS_FMT_YUYV10_2X10 = 0x200b, +	V4L2_MBUS_FMT_YVYU10_2X10 = 0x200c, +	V4L2_MBUS_FMT_Y12_1X12 = 0x2013, +	V4L2_MBUS_FMT_UYVY8_1X16 = 0x200f, +	V4L2_MBUS_FMT_VYUY8_1X16 = 0x2010, +	V4L2_MBUS_FMT_YUYV8_1X16 = 0x2011, +	V4L2_MBUS_FMT_YVYU8_1X16 = 0x2012, +	V4L2_MBUS_FMT_YUYV10_1X20 = 0x200d, +	V4L2_MBUS_FMT_YVYU10_1X20 = 0x200e, + +	/* Bayer - next is 0x3015 */ +	V4L2_MBUS_FMT_SBGGR8_1X8 = 0x3001, +	V4L2_MBUS_FMT_SGBRG8_1X8 = 0x3013, +	V4L2_MBUS_FMT_SGRBG8_1X8 = 0x3002, +	V4L2_MBUS_FMT_SRGGB8_1X8 = 0x3014, +	V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8 = 0x300b, +	V4L2_MBUS_FMT_SGBRG10_DPCM8_1X8 = 0x300c, +	V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8 = 0x3009, +	V4L2_MBUS_FMT_SRGGB10_DPCM8_1X8 = 0x300d, +	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE = 0x3003, +	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_LE = 0x3004, +	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE = 0x3005, +	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE = 0x3006, +	V4L2_MBUS_FMT_SBGGR10_1X10 = 0x3007, +	V4L2_MBUS_FMT_SGBRG10_1X10 = 0x300e, +	V4L2_MBUS_FMT_SGRBG10_1X10 = 0x300a, +	V4L2_MBUS_FMT_SRGGB10_1X10 = 0x300f, +	V4L2_MBUS_FMT_SBGGR12_1X12 = 0x3008, +	V4L2_MBUS_FMT_SGBRG12_1X12 = 0x3010, +	V4L2_MBUS_FMT_SGRBG12_1X12 = 0x3011, +	V4L2_MBUS_FMT_SRGGB12_1X12 = 0x3012, + +	/* JPEG compressed formats - next is 0x4002 */ +	V4L2_MBUS_FMT_JPEG_1X8 = 0x4001, + +	/* Vendor specific formats - next is 0x5002 */ + +	/* S5C73M3 sensor specific interleaved UYVY and JPEG */ +	V4L2_MBUS_FMT_S5C_UYVY_JPEG_1X8 = 0x5001, +}; + +/** + * struct v4l2_mbus_framefmt - frame format on the media bus + * @width:	frame width + * @height:	frame height + * @code:	data format code (from enum v4l2_mbus_pixelcode) + * @field:	used interlacing type (from enum v4l2_field) + * @colorspace:	colorspace of the data (from enum v4l2_colorspace) + */ +struct v4l2_mbus_framefmt { +	__u32			width; +	__u32			height; +	__u32			code; +	__u32			field; +	__u32			colorspace; +	__u32			reserved[7]; +}; + +#endif diff --git a/include/uapi/linux/v4l2-subdev.h b/include/uapi/linux/v4l2-subdev.h new file mode 100644 index 00000000000..a33c4daadce --- /dev/null +++ b/include/uapi/linux/v4l2-subdev.h @@ -0,0 +1,180 @@ +/* + * V4L2 subdev userspace API + * + * Copyright (C) 2010 Nokia Corporation + * + * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com> + *	     Sakari Ailus <sakari.ailus@iki.fi> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + */ + +#ifndef __LINUX_V4L2_SUBDEV_H +#define __LINUX_V4L2_SUBDEV_H + +#include <linux/ioctl.h> +#include <linux/types.h> +#include <linux/v4l2-common.h> +#include <linux/v4l2-mediabus.h> + +/** + * enum v4l2_subdev_format_whence - Media bus format type + * @V4L2_SUBDEV_FORMAT_TRY: try format, for negotiation only + * @V4L2_SUBDEV_FORMAT_ACTIVE: active format, applied to the device + */ +enum v4l2_subdev_format_whence { +	V4L2_SUBDEV_FORMAT_TRY = 0, +	V4L2_SUBDEV_FORMAT_ACTIVE = 1, +}; + +/** + * struct v4l2_subdev_format - Pad-level media bus format + * @which: format type (from enum v4l2_subdev_format_whence) + * @pad: pad number, as reported by the media API + * @format: media bus format (format code and frame size) + */ +struct v4l2_subdev_format { +	__u32 which; +	__u32 pad; +	struct v4l2_mbus_framefmt format; +	__u32 reserved[8]; +}; + +/** + * struct v4l2_subdev_crop - Pad-level crop settings + * @which: format type (from enum v4l2_subdev_format_whence) + * @pad: pad number, as reported by the media API + * @rect: pad crop rectangle boundaries + */ +struct v4l2_subdev_crop { +	__u32 which; +	__u32 pad; +	struct v4l2_rect rect; +	__u32 reserved[8]; +}; + +/** + * struct v4l2_subdev_mbus_code_enum - Media bus format enumeration + * @pad: pad number, as reported by the media API + * @index: format index during enumeration + * @code: format code (from enum v4l2_mbus_pixelcode) + */ +struct v4l2_subdev_mbus_code_enum { +	__u32 pad; +	__u32 index; +	__u32 code; +	__u32 reserved[9]; +}; + +/** + * struct v4l2_subdev_frame_size_enum - Media bus format enumeration + * @pad: pad number, as reported by the media API + * @index: format index during enumeration + * @code: format code (from enum v4l2_mbus_pixelcode) + */ +struct v4l2_subdev_frame_size_enum { +	__u32 index; +	__u32 pad; +	__u32 code; +	__u32 min_width; +	__u32 max_width; +	__u32 min_height; +	__u32 max_height; +	__u32 reserved[9]; +}; + +/** + * struct v4l2_subdev_frame_interval - Pad-level frame rate + * @pad: pad number, as reported by the media API + * @interval: frame interval in seconds + */ +struct v4l2_subdev_frame_interval { +	__u32 pad; +	struct v4l2_fract interval; +	__u32 reserved[9]; +}; + +/** + * struct v4l2_subdev_frame_interval_enum - Frame interval enumeration + * @pad: pad number, as reported by the media API + * @index: frame interval index during enumeration + * @code: format code (from enum v4l2_mbus_pixelcode) + * @width: frame width in pixels + * @height: frame height in pixels + * @interval: frame interval in seconds + */ +struct v4l2_subdev_frame_interval_enum { +	__u32 index; +	__u32 pad; +	__u32 code; +	__u32 width; +	__u32 height; +	struct v4l2_fract interval; +	__u32 reserved[9]; +}; + +/** + * struct v4l2_subdev_selection - selection info + * + * @which: either V4L2_SUBDEV_FORMAT_ACTIVE or V4L2_SUBDEV_FORMAT_TRY + * @pad: pad number, as reported by the media API + * @target: Selection target, used to choose one of possible rectangles, + *	    defined in v4l2-common.h; V4L2_SEL_TGT_* . + * @flags: constraint flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*. + * @r: coordinates of the selection window + * @reserved: for future use, set to zero for now + * + * Hardware may use multiple helper windows to process a video stream. + * The structure is used to exchange this selection areas between + * an application and a driver. + */ +struct v4l2_subdev_selection { +	__u32 which; +	__u32 pad; +	__u32 target; +	__u32 flags; +	struct v4l2_rect r; +	__u32 reserved[8]; +}; + +struct v4l2_subdev_edid { +	__u32 pad; +	__u32 start_block; +	__u32 blocks; +	__u32 reserved[5]; +	__u8 __user *edid; +}; + +#define VIDIOC_SUBDEV_G_FMT	_IOWR('V',  4, struct v4l2_subdev_format) +#define VIDIOC_SUBDEV_S_FMT	_IOWR('V',  5, struct v4l2_subdev_format) +#define VIDIOC_SUBDEV_G_FRAME_INTERVAL \ +			_IOWR('V', 21, struct v4l2_subdev_frame_interval) +#define VIDIOC_SUBDEV_S_FRAME_INTERVAL \ +			_IOWR('V', 22, struct v4l2_subdev_frame_interval) +#define VIDIOC_SUBDEV_ENUM_MBUS_CODE \ +			_IOWR('V',  2, struct v4l2_subdev_mbus_code_enum) +#define VIDIOC_SUBDEV_ENUM_FRAME_SIZE \ +			_IOWR('V', 74, struct v4l2_subdev_frame_size_enum) +#define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \ +			_IOWR('V', 75, struct v4l2_subdev_frame_interval_enum) +#define VIDIOC_SUBDEV_G_CROP	_IOWR('V', 59, struct v4l2_subdev_crop) +#define VIDIOC_SUBDEV_S_CROP	_IOWR('V', 60, struct v4l2_subdev_crop) +#define VIDIOC_SUBDEV_G_SELECTION \ +	_IOWR('V', 61, struct v4l2_subdev_selection) +#define VIDIOC_SUBDEV_S_SELECTION \ +	_IOWR('V', 62, struct v4l2_subdev_selection) +#define VIDIOC_SUBDEV_G_EDID	_IOWR('V', 40, struct v4l2_subdev_edid) +#define VIDIOC_SUBDEV_S_EDID	_IOWR('V', 41, struct v4l2_subdev_edid) + +#endif diff --git a/include/uapi/linux/veth.h b/include/uapi/linux/veth.h new file mode 100644 index 00000000000..3354c1eb424 --- /dev/null +++ b/include/uapi/linux/veth.h @@ -0,0 +1,12 @@ +#ifndef __NET_VETH_H_ +#define __NET_VETH_H_ + +enum { +	VETH_INFO_UNSPEC, +	VETH_INFO_PEER, + +	__VETH_INFO_MAX +#define VETH_INFO_MAX	(__VETH_INFO_MAX - 1) +}; + +#endif diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h new file mode 100644 index 00000000000..4758d1bfcf4 --- /dev/null +++ b/include/uapi/linux/vfio.h @@ -0,0 +1,368 @@ +/* + * VFIO API definition + * + * Copyright (C) 2012 Red Hat, Inc.  All rights reserved. + *     Author: Alex Williamson <alex.williamson@redhat.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#ifndef _UAPIVFIO_H +#define _UAPIVFIO_H + +#include <linux/types.h> +#include <linux/ioctl.h> + +#define VFIO_API_VERSION	0 + + +/* Kernel & User level defines for VFIO IOCTLs. */ + +/* Extensions */ + +#define VFIO_TYPE1_IOMMU		1 + +/* + * The IOCTL interface is designed for extensibility by embedding the + * structure length (argsz) and flags into structures passed between + * kernel and userspace.  We therefore use the _IO() macro for these + * defines to avoid implicitly embedding a size into the ioctl request. + * As structure fields are added, argsz will increase to match and flag + * bits will be defined to indicate additional fields with valid data. + * It's *always* the caller's responsibility to indicate the size of + * the structure passed by setting argsz appropriately. + */ + +#define VFIO_TYPE	(';') +#define VFIO_BASE	100 + +/* -------- IOCTLs for VFIO file descriptor (/dev/vfio/vfio) -------- */ + +/** + * VFIO_GET_API_VERSION - _IO(VFIO_TYPE, VFIO_BASE + 0) + * + * Report the version of the VFIO API.  This allows us to bump the entire + * API version should we later need to add or change features in incompatible + * ways. + * Return: VFIO_API_VERSION + * Availability: Always + */ +#define VFIO_GET_API_VERSION		_IO(VFIO_TYPE, VFIO_BASE + 0) + +/** + * VFIO_CHECK_EXTENSION - _IOW(VFIO_TYPE, VFIO_BASE + 1, __u32) + * + * Check whether an extension is supported. + * Return: 0 if not supported, 1 (or some other positive integer) if supported. + * Availability: Always + */ +#define VFIO_CHECK_EXTENSION		_IO(VFIO_TYPE, VFIO_BASE + 1) + +/** + * VFIO_SET_IOMMU - _IOW(VFIO_TYPE, VFIO_BASE + 2, __s32) + * + * Set the iommu to the given type.  The type must be supported by an + * iommu driver as verified by calling CHECK_EXTENSION using the same + * type.  A group must be set to this file descriptor before this + * ioctl is available.  The IOMMU interfaces enabled by this call are + * specific to the value set. + * Return: 0 on success, -errno on failure + * Availability: When VFIO group attached + */ +#define VFIO_SET_IOMMU			_IO(VFIO_TYPE, VFIO_BASE + 2) + +/* -------- IOCTLs for GROUP file descriptors (/dev/vfio/$GROUP) -------- */ + +/** + * VFIO_GROUP_GET_STATUS - _IOR(VFIO_TYPE, VFIO_BASE + 3, + *						struct vfio_group_status) + * + * Retrieve information about the group.  Fills in provided + * struct vfio_group_info.  Caller sets argsz. + * Return: 0 on succes, -errno on failure. + * Availability: Always + */ +struct vfio_group_status { +	__u32	argsz; +	__u32	flags; +#define VFIO_GROUP_FLAGS_VIABLE		(1 << 0) +#define VFIO_GROUP_FLAGS_CONTAINER_SET	(1 << 1) +}; +#define VFIO_GROUP_GET_STATUS		_IO(VFIO_TYPE, VFIO_BASE + 3) + +/** + * VFIO_GROUP_SET_CONTAINER - _IOW(VFIO_TYPE, VFIO_BASE + 4, __s32) + * + * Set the container for the VFIO group to the open VFIO file + * descriptor provided.  Groups may only belong to a single + * container.  Containers may, at their discretion, support multiple + * groups.  Only when a container is set are all of the interfaces + * of the VFIO file descriptor and the VFIO group file descriptor + * available to the user. + * Return: 0 on success, -errno on failure. + * Availability: Always + */ +#define VFIO_GROUP_SET_CONTAINER	_IO(VFIO_TYPE, VFIO_BASE + 4) + +/** + * VFIO_GROUP_UNSET_CONTAINER - _IO(VFIO_TYPE, VFIO_BASE + 5) + * + * Remove the group from the attached container.  This is the + * opposite of the SET_CONTAINER call and returns the group to + * an initial state.  All device file descriptors must be released + * prior to calling this interface.  When removing the last group + * from a container, the IOMMU will be disabled and all state lost, + * effectively also returning the VFIO file descriptor to an initial + * state. + * Return: 0 on success, -errno on failure. + * Availability: When attached to container + */ +#define VFIO_GROUP_UNSET_CONTAINER	_IO(VFIO_TYPE, VFIO_BASE + 5) + +/** + * VFIO_GROUP_GET_DEVICE_FD - _IOW(VFIO_TYPE, VFIO_BASE + 6, char) + * + * Return a new file descriptor for the device object described by + * the provided string.  The string should match a device listed in + * the devices subdirectory of the IOMMU group sysfs entry.  The + * group containing the device must already be added to this context. + * Return: new file descriptor on success, -errno on failure. + * Availability: When attached to container + */ +#define VFIO_GROUP_GET_DEVICE_FD	_IO(VFIO_TYPE, VFIO_BASE + 6) + +/* --------------- IOCTLs for DEVICE file descriptors --------------- */ + +/** + * VFIO_DEVICE_GET_INFO - _IOR(VFIO_TYPE, VFIO_BASE + 7, + *						struct vfio_device_info) + * + * Retrieve information about the device.  Fills in provided + * struct vfio_device_info.  Caller sets argsz. + * Return: 0 on success, -errno on failure. + */ +struct vfio_device_info { +	__u32	argsz; +	__u32	flags; +#define VFIO_DEVICE_FLAGS_RESET	(1 << 0)	/* Device supports reset */ +#define VFIO_DEVICE_FLAGS_PCI	(1 << 1)	/* vfio-pci device */ +	__u32	num_regions;	/* Max region index + 1 */ +	__u32	num_irqs;	/* Max IRQ index + 1 */ +}; +#define VFIO_DEVICE_GET_INFO		_IO(VFIO_TYPE, VFIO_BASE + 7) + +/** + * VFIO_DEVICE_GET_REGION_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 8, + *				       struct vfio_region_info) + * + * Retrieve information about a device region.  Caller provides + * struct vfio_region_info with index value set.  Caller sets argsz. + * Implementation of region mapping is bus driver specific.  This is + * intended to describe MMIO, I/O port, as well as bus specific + * regions (ex. PCI config space).  Zero sized regions may be used + * to describe unimplemented regions (ex. unimplemented PCI BARs). + * Return: 0 on success, -errno on failure. + */ +struct vfio_region_info { +	__u32	argsz; +	__u32	flags; +#define VFIO_REGION_INFO_FLAG_READ	(1 << 0) /* Region supports read */ +#define VFIO_REGION_INFO_FLAG_WRITE	(1 << 1) /* Region supports write */ +#define VFIO_REGION_INFO_FLAG_MMAP	(1 << 2) /* Region supports mmap */ +	__u32	index;		/* Region index */ +	__u32	resv;		/* Reserved for alignment */ +	__u64	size;		/* Region size (bytes) */ +	__u64	offset;		/* Region offset from start of device fd */ +}; +#define VFIO_DEVICE_GET_REGION_INFO	_IO(VFIO_TYPE, VFIO_BASE + 8) + +/** + * VFIO_DEVICE_GET_IRQ_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 9, + *				    struct vfio_irq_info) + * + * Retrieve information about a device IRQ.  Caller provides + * struct vfio_irq_info with index value set.  Caller sets argsz. + * Implementation of IRQ mapping is bus driver specific.  Indexes + * using multiple IRQs are primarily intended to support MSI-like + * interrupt blocks.  Zero count irq blocks may be used to describe + * unimplemented interrupt types. + * + * The EVENTFD flag indicates the interrupt index supports eventfd based + * signaling. + * + * The MASKABLE flags indicates the index supports MASK and UNMASK + * actions described below. + * + * AUTOMASKED indicates that after signaling, the interrupt line is + * automatically masked by VFIO and the user needs to unmask the line + * to receive new interrupts.  This is primarily intended to distinguish + * level triggered interrupts. + * + * The NORESIZE flag indicates that the interrupt lines within the index + * are setup as a set and new subindexes cannot be enabled without first + * disabling the entire index.  This is used for interrupts like PCI MSI + * and MSI-X where the driver may only use a subset of the available + * indexes, but VFIO needs to enable a specific number of vectors + * upfront.  In the case of MSI-X, where the user can enable MSI-X and + * then add and unmask vectors, it's up to userspace to make the decision + * whether to allocate the maximum supported number of vectors or tear + * down setup and incrementally increase the vectors as each is enabled. + */ +struct vfio_irq_info { +	__u32	argsz; +	__u32	flags; +#define VFIO_IRQ_INFO_EVENTFD		(1 << 0) +#define VFIO_IRQ_INFO_MASKABLE		(1 << 1) +#define VFIO_IRQ_INFO_AUTOMASKED	(1 << 2) +#define VFIO_IRQ_INFO_NORESIZE		(1 << 3) +	__u32	index;		/* IRQ index */ +	__u32	count;		/* Number of IRQs within this index */ +}; +#define VFIO_DEVICE_GET_IRQ_INFO	_IO(VFIO_TYPE, VFIO_BASE + 9) + +/** + * VFIO_DEVICE_SET_IRQS - _IOW(VFIO_TYPE, VFIO_BASE + 10, struct vfio_irq_set) + * + * Set signaling, masking, and unmasking of interrupts.  Caller provides + * struct vfio_irq_set with all fields set.  'start' and 'count' indicate + * the range of subindexes being specified. + * + * The DATA flags specify the type of data provided.  If DATA_NONE, the + * operation performs the specified action immediately on the specified + * interrupt(s).  For example, to unmask AUTOMASKED interrupt [0,0]: + * flags = (DATA_NONE|ACTION_UNMASK), index = 0, start = 0, count = 1. + * + * DATA_BOOL allows sparse support for the same on arrays of interrupts. + * For example, to mask interrupts [0,1] and [0,3] (but not [0,2]): + * flags = (DATA_BOOL|ACTION_MASK), index = 0, start = 1, count = 3, + * data = {1,0,1} + * + * DATA_EVENTFD binds the specified ACTION to the provided __s32 eventfd. + * A value of -1 can be used to either de-assign interrupts if already + * assigned or skip un-assigned interrupts.  For example, to set an eventfd + * to be trigger for interrupts [0,0] and [0,2]: + * flags = (DATA_EVENTFD|ACTION_TRIGGER), index = 0, start = 0, count = 3, + * data = {fd1, -1, fd2} + * If index [0,1] is previously set, two count = 1 ioctls calls would be + * required to set [0,0] and [0,2] without changing [0,1]. + * + * Once a signaling mechanism is set, DATA_BOOL or DATA_NONE can be used + * with ACTION_TRIGGER to perform kernel level interrupt loopback testing + * from userspace (ie. simulate hardware triggering). + * + * Setting of an event triggering mechanism to userspace for ACTION_TRIGGER + * enables the interrupt index for the device.  Individual subindex interrupts + * can be disabled using the -1 value for DATA_EVENTFD or the index can be + * disabled as a whole with: flags = (DATA_NONE|ACTION_TRIGGER), count = 0. + * + * Note that ACTION_[UN]MASK specify user->kernel signaling (irqfds) while + * ACTION_TRIGGER specifies kernel->user signaling. + */ +struct vfio_irq_set { +	__u32	argsz; +	__u32	flags; +#define VFIO_IRQ_SET_DATA_NONE		(1 << 0) /* Data not present */ +#define VFIO_IRQ_SET_DATA_BOOL		(1 << 1) /* Data is bool (u8) */ +#define VFIO_IRQ_SET_DATA_EVENTFD	(1 << 2) /* Data is eventfd (s32) */ +#define VFIO_IRQ_SET_ACTION_MASK	(1 << 3) /* Mask interrupt */ +#define VFIO_IRQ_SET_ACTION_UNMASK	(1 << 4) /* Unmask interrupt */ +#define VFIO_IRQ_SET_ACTION_TRIGGER	(1 << 5) /* Trigger interrupt */ +	__u32	index; +	__u32	start; +	__u32	count; +	__u8	data[]; +}; +#define VFIO_DEVICE_SET_IRQS		_IO(VFIO_TYPE, VFIO_BASE + 10) + +#define VFIO_IRQ_SET_DATA_TYPE_MASK	(VFIO_IRQ_SET_DATA_NONE | \ +					 VFIO_IRQ_SET_DATA_BOOL | \ +					 VFIO_IRQ_SET_DATA_EVENTFD) +#define VFIO_IRQ_SET_ACTION_TYPE_MASK	(VFIO_IRQ_SET_ACTION_MASK | \ +					 VFIO_IRQ_SET_ACTION_UNMASK | \ +					 VFIO_IRQ_SET_ACTION_TRIGGER) +/** + * VFIO_DEVICE_RESET - _IO(VFIO_TYPE, VFIO_BASE + 11) + * + * Reset a device. + */ +#define VFIO_DEVICE_RESET		_IO(VFIO_TYPE, VFIO_BASE + 11) + +/* + * The VFIO-PCI bus driver makes use of the following fixed region and + * IRQ index mapping.  Unimplemented regions return a size of zero. + * Unimplemented IRQ types return a count of zero. + */ + +enum { +	VFIO_PCI_BAR0_REGION_INDEX, +	VFIO_PCI_BAR1_REGION_INDEX, +	VFIO_PCI_BAR2_REGION_INDEX, +	VFIO_PCI_BAR3_REGION_INDEX, +	VFIO_PCI_BAR4_REGION_INDEX, +	VFIO_PCI_BAR5_REGION_INDEX, +	VFIO_PCI_ROM_REGION_INDEX, +	VFIO_PCI_CONFIG_REGION_INDEX, +	VFIO_PCI_NUM_REGIONS +}; + +enum { +	VFIO_PCI_INTX_IRQ_INDEX, +	VFIO_PCI_MSI_IRQ_INDEX, +	VFIO_PCI_MSIX_IRQ_INDEX, +	VFIO_PCI_NUM_IRQS +}; + +/* -------- API for Type1 VFIO IOMMU -------- */ + +/** + * VFIO_IOMMU_GET_INFO - _IOR(VFIO_TYPE, VFIO_BASE + 12, struct vfio_iommu_info) + * + * Retrieve information about the IOMMU object. Fills in provided + * struct vfio_iommu_info. Caller sets argsz. + * + * XXX Should we do these by CHECK_EXTENSION too? + */ +struct vfio_iommu_type1_info { +	__u32	argsz; +	__u32	flags; +#define VFIO_IOMMU_INFO_PGSIZES (1 << 0)	/* supported page sizes info */ +	__u64	iova_pgsizes;		/* Bitmap of supported page sizes */ +}; + +#define VFIO_IOMMU_GET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12) + +/** + * VFIO_IOMMU_MAP_DMA - _IOW(VFIO_TYPE, VFIO_BASE + 13, struct vfio_dma_map) + * + * Map process virtual addresses to IO virtual addresses using the + * provided struct vfio_dma_map. Caller sets argsz. READ &/ WRITE required. + */ +struct vfio_iommu_type1_dma_map { +	__u32	argsz; +	__u32	flags; +#define VFIO_DMA_MAP_FLAG_READ (1 << 0)		/* readable from device */ +#define VFIO_DMA_MAP_FLAG_WRITE (1 << 1)	/* writable from device */ +	__u64	vaddr;				/* Process virtual address */ +	__u64	iova;				/* IO virtual address */ +	__u64	size;				/* Size of mapping (bytes) */ +}; + +#define VFIO_IOMMU_MAP_DMA _IO(VFIO_TYPE, VFIO_BASE + 13) + +/** + * VFIO_IOMMU_UNMAP_DMA - _IOW(VFIO_TYPE, VFIO_BASE + 14, struct vfio_dma_unmap) + * + * Unmap IO virtual addresses using the provided struct vfio_dma_unmap. + * Caller sets argsz. + */ +struct vfio_iommu_type1_dma_unmap { +	__u32	argsz; +	__u32	flags; +	__u64	iova;				/* IO virtual address */ +	__u64	size;				/* Size of mapping (bytes) */ +}; + +#define VFIO_IOMMU_UNMAP_DMA _IO(VFIO_TYPE, VFIO_BASE + 14) + +#endif /* _UAPIVFIO_H */ diff --git a/include/uapi/linux/vhost.h b/include/uapi/linux/vhost.h new file mode 100644 index 00000000000..e847f1e3075 --- /dev/null +++ b/include/uapi/linux/vhost.h @@ -0,0 +1,130 @@ +#ifndef _LINUX_VHOST_H +#define _LINUX_VHOST_H +/* Userspace interface for in-kernel virtio accelerators. */ + +/* vhost is used to reduce the number of system calls involved in virtio. + * + * Existing virtio net code is used in the guest without modification. + * + * This header includes interface used by userspace hypervisor for + * device configuration. + */ + +#include <linux/types.h> +#include <linux/compiler.h> +#include <linux/ioctl.h> +#include <linux/virtio_config.h> +#include <linux/virtio_ring.h> + +struct vhost_vring_state { +	unsigned int index; +	unsigned int num; +}; + +struct vhost_vring_file { +	unsigned int index; +	int fd; /* Pass -1 to unbind from file. */ + +}; + +struct vhost_vring_addr { +	unsigned int index; +	/* Option flags. */ +	unsigned int flags; +	/* Flag values: */ +	/* Whether log address is valid. If set enables logging. */ +#define VHOST_VRING_F_LOG 0 + +	/* Start of array of descriptors (virtually contiguous) */ +	__u64 desc_user_addr; +	/* Used structure address. Must be 32 bit aligned */ +	__u64 used_user_addr; +	/* Available structure address. Must be 16 bit aligned */ +	__u64 avail_user_addr; +	/* Logging support. */ +	/* Log writes to used structure, at offset calculated from specified +	 * address. Address must be 32 bit aligned. */ +	__u64 log_guest_addr; +}; + +struct vhost_memory_region { +	__u64 guest_phys_addr; +	__u64 memory_size; /* bytes */ +	__u64 userspace_addr; +	__u64 flags_padding; /* No flags are currently specified. */ +}; + +/* All region addresses and sizes must be 4K aligned. */ +#define VHOST_PAGE_SIZE 0x1000 + +struct vhost_memory { +	__u32 nregions; +	__u32 padding; +	struct vhost_memory_region regions[0]; +}; + +/* ioctls */ + +#define VHOST_VIRTIO 0xAF + +/* Features bitmask for forward compatibility.  Transport bits are used for + * vhost specific features. */ +#define VHOST_GET_FEATURES	_IOR(VHOST_VIRTIO, 0x00, __u64) +#define VHOST_SET_FEATURES	_IOW(VHOST_VIRTIO, 0x00, __u64) + +/* Set current process as the (exclusive) owner of this file descriptor.  This + * must be called before any other vhost command.  Further calls to + * VHOST_OWNER_SET fail until VHOST_OWNER_RESET is called. */ +#define VHOST_SET_OWNER _IO(VHOST_VIRTIO, 0x01) +/* Give up ownership, and reset the device to default values. + * Allows subsequent call to VHOST_OWNER_SET to succeed. */ +#define VHOST_RESET_OWNER _IO(VHOST_VIRTIO, 0x02) + +/* Set up/modify memory layout */ +#define VHOST_SET_MEM_TABLE	_IOW(VHOST_VIRTIO, 0x03, struct vhost_memory) + +/* Write logging setup. */ +/* Memory writes can optionally be logged by setting bit at an offset + * (calculated from the physical address) from specified log base. + * The bit is set using an atomic 32 bit operation. */ +/* Set base address for logging. */ +#define VHOST_SET_LOG_BASE _IOW(VHOST_VIRTIO, 0x04, __u64) +/* Specify an eventfd file descriptor to signal on log write. */ +#define VHOST_SET_LOG_FD _IOW(VHOST_VIRTIO, 0x07, int) + +/* Ring setup. */ +/* Set number of descriptors in ring. This parameter can not + * be modified while ring is running (bound to a device). */ +#define VHOST_SET_VRING_NUM _IOW(VHOST_VIRTIO, 0x10, struct vhost_vring_state) +/* Set addresses for the ring. */ +#define VHOST_SET_VRING_ADDR _IOW(VHOST_VIRTIO, 0x11, struct vhost_vring_addr) +/* Base value where queue looks for available descriptors */ +#define VHOST_SET_VRING_BASE _IOW(VHOST_VIRTIO, 0x12, struct vhost_vring_state) +/* Get accessor: reads index, writes value in num */ +#define VHOST_GET_VRING_BASE _IOWR(VHOST_VIRTIO, 0x12, struct vhost_vring_state) + +/* The following ioctls use eventfd file descriptors to signal and poll + * for events. */ + +/* Set eventfd to poll for added buffers */ +#define VHOST_SET_VRING_KICK _IOW(VHOST_VIRTIO, 0x20, struct vhost_vring_file) +/* Set eventfd to signal when buffers have beed used */ +#define VHOST_SET_VRING_CALL _IOW(VHOST_VIRTIO, 0x21, struct vhost_vring_file) +/* Set eventfd to signal an error */ +#define VHOST_SET_VRING_ERR _IOW(VHOST_VIRTIO, 0x22, struct vhost_vring_file) + +/* VHOST_NET specific defines */ + +/* Attach virtio net ring to a raw socket, or tap device. + * The socket must be already bound to an ethernet device, this device will be + * used for transmit.  Pass fd -1 to unbind from the socket and the transmit + * device.  This can be used to stop the ring (e.g. for migration). */ +#define VHOST_NET_SET_BACKEND _IOW(VHOST_VIRTIO, 0x30, struct vhost_vring_file) + +/* Feature bits */ +/* Log all write descriptors. Can be changed while device is active. */ +#define VHOST_F_LOG_ALL 26 +/* vhost-net should add virtio_net_hdr for RX, and strip for TX packets. */ +#define VHOST_NET_F_VIRTIO_NET_HDR 27 + +#endif diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h new file mode 100644 index 00000000000..57bfa59cda7 --- /dev/null +++ b/include/uapi/linux/videodev2.h @@ -0,0 +1,1998 @@ +/* + *  Video for Linux Two header file + * + *  Copyright (C) 1999-2012 the contributors + * + *  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. + * + *  Alternatively you can redistribute this file under the terms of the + *  BSD license as stated below: + * + *  Redistribution and use in source and binary forms, with or without + *  modification, are permitted provided that the following conditions + *  are met: + *  1. Redistributions of source code must retain the above copyright + *     notice, this list of conditions and the following disclaimer. + *  2. Redistributions in binary form must reproduce the above copyright + *     notice, this list of conditions and the following disclaimer in + *     the documentation and/or other materials provided with the + *     distribution. + *  3. The names of its contributors may not be used to endorse or promote + *     products derived from this software without specific prior written + *     permission. + * + *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + *  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *	Header file for v4l or V4L2 drivers and applications + * with public API. + * All kernel-specific stuff were moved to media/v4l2-dev.h, so + * no #if __KERNEL tests are allowed here + * + *	See http://linuxtv.org for more info + * + *	Author: Bill Dirks <bill@thedirks.org> + *		Justin Schoeman + *              Hans Verkuil <hverkuil@xs4all.nl> + *		et al. + */ +#ifndef _UAPI__LINUX_VIDEODEV2_H +#define _UAPI__LINUX_VIDEODEV2_H + +#ifndef __KERNEL__ +#include <sys/time.h> +#endif +#include <linux/compiler.h> +#include <linux/ioctl.h> +#include <linux/types.h> +#include <linux/v4l2-common.h> +#include <linux/v4l2-controls.h> + +/* + * Common stuff for both V4L1 and V4L2 + * Moved from videodev.h + */ +#define VIDEO_MAX_FRAME               32 +#define VIDEO_MAX_PLANES               8 + +#ifndef __KERNEL__ + +/* These defines are V4L1 specific and should not be used with the V4L2 API! +   They will be removed from this header in the future. */ + +#define VID_TYPE_CAPTURE	1	/* Can capture */ +#define VID_TYPE_TUNER		2	/* Can tune */ +#define VID_TYPE_TELETEXT	4	/* Does teletext */ +#define VID_TYPE_OVERLAY	8	/* Overlay onto frame buffer */ +#define VID_TYPE_CHROMAKEY	16	/* Overlay by chromakey */ +#define VID_TYPE_CLIPPING	32	/* Can clip */ +#define VID_TYPE_FRAMERAM	64	/* Uses the frame buffer memory */ +#define VID_TYPE_SCALES		128	/* Scalable */ +#define VID_TYPE_MONOCHROME	256	/* Monochrome only */ +#define VID_TYPE_SUBCAPTURE	512	/* Can capture subareas of the image */ +#define VID_TYPE_MPEG_DECODER	1024	/* Can decode MPEG streams */ +#define VID_TYPE_MPEG_ENCODER	2048	/* Can encode MPEG streams */ +#define VID_TYPE_MJPEG_DECODER	4096	/* Can decode MJPEG streams */ +#define VID_TYPE_MJPEG_ENCODER	8192	/* Can encode MJPEG streams */ +#endif + +/* + *	M I S C E L L A N E O U S + */ + +/*  Four-character-code (FOURCC) */ +#define v4l2_fourcc(a, b, c, d)\ +	((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24)) + +/* + *	E N U M S + */ +enum v4l2_field { +	V4L2_FIELD_ANY           = 0, /* driver can choose from none, +					 top, bottom, interlaced +					 depending on whatever it thinks +					 is approximate ... */ +	V4L2_FIELD_NONE          = 1, /* this device has no fields ... */ +	V4L2_FIELD_TOP           = 2, /* top field only */ +	V4L2_FIELD_BOTTOM        = 3, /* bottom field only */ +	V4L2_FIELD_INTERLACED    = 4, /* both fields interlaced */ +	V4L2_FIELD_SEQ_TB        = 5, /* both fields sequential into one +					 buffer, top-bottom order */ +	V4L2_FIELD_SEQ_BT        = 6, /* same as above + bottom-top order */ +	V4L2_FIELD_ALTERNATE     = 7, /* both fields alternating into +					 separate buffers */ +	V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field +					 first and the top field is +					 transmitted first */ +	V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field +					 first and the bottom field is +					 transmitted first */ +}; +#define V4L2_FIELD_HAS_TOP(field)	\ +	((field) == V4L2_FIELD_TOP 	||\ +	 (field) == V4L2_FIELD_INTERLACED ||\ +	 (field) == V4L2_FIELD_INTERLACED_TB ||\ +	 (field) == V4L2_FIELD_INTERLACED_BT ||\ +	 (field) == V4L2_FIELD_SEQ_TB	||\ +	 (field) == V4L2_FIELD_SEQ_BT) +#define V4L2_FIELD_HAS_BOTTOM(field)	\ +	((field) == V4L2_FIELD_BOTTOM 	||\ +	 (field) == V4L2_FIELD_INTERLACED ||\ +	 (field) == V4L2_FIELD_INTERLACED_TB ||\ +	 (field) == V4L2_FIELD_INTERLACED_BT ||\ +	 (field) == V4L2_FIELD_SEQ_TB	||\ +	 (field) == V4L2_FIELD_SEQ_BT) +#define V4L2_FIELD_HAS_BOTH(field)	\ +	((field) == V4L2_FIELD_INTERLACED ||\ +	 (field) == V4L2_FIELD_INTERLACED_TB ||\ +	 (field) == V4L2_FIELD_INTERLACED_BT ||\ +	 (field) == V4L2_FIELD_SEQ_TB ||\ +	 (field) == V4L2_FIELD_SEQ_BT) + +enum v4l2_buf_type { +	V4L2_BUF_TYPE_VIDEO_CAPTURE        = 1, +	V4L2_BUF_TYPE_VIDEO_OUTPUT         = 2, +	V4L2_BUF_TYPE_VIDEO_OVERLAY        = 3, +	V4L2_BUF_TYPE_VBI_CAPTURE          = 4, +	V4L2_BUF_TYPE_VBI_OUTPUT           = 5, +	V4L2_BUF_TYPE_SLICED_VBI_CAPTURE   = 6, +	V4L2_BUF_TYPE_SLICED_VBI_OUTPUT    = 7, +#if 1 +	/* Experimental */ +	V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8, +#endif +	V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9, +	V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE  = 10, +	/* Deprecated, do not use */ +	V4L2_BUF_TYPE_PRIVATE              = 0x80, +}; + +#define V4L2_TYPE_IS_MULTIPLANAR(type)			\ +	((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE	\ +	 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) + +#define V4L2_TYPE_IS_OUTPUT(type)				\ +	((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT			\ +	 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE		\ +	 || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY		\ +	 || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY	\ +	 || (type) == V4L2_BUF_TYPE_VBI_OUTPUT			\ +	 || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT) + +enum v4l2_tuner_type { +	V4L2_TUNER_RADIO	     = 1, +	V4L2_TUNER_ANALOG_TV	     = 2, +	V4L2_TUNER_DIGITAL_TV	     = 3, +}; + +enum v4l2_memory { +	V4L2_MEMORY_MMAP             = 1, +	V4L2_MEMORY_USERPTR          = 2, +	V4L2_MEMORY_OVERLAY          = 3, +}; + +/* see also http://vektor.theorem.ca/graphics/ycbcr/ */ +enum v4l2_colorspace { +	/* ITU-R 601 -- broadcast NTSC/PAL */ +	V4L2_COLORSPACE_SMPTE170M     = 1, + +	/* 1125-Line (US) HDTV */ +	V4L2_COLORSPACE_SMPTE240M     = 2, + +	/* HD and modern captures. */ +	V4L2_COLORSPACE_REC709        = 3, + +	/* broken BT878 extents (601, luma range 16-253 instead of 16-235) */ +	V4L2_COLORSPACE_BT878         = 4, + +	/* These should be useful.  Assume 601 extents. */ +	V4L2_COLORSPACE_470_SYSTEM_M  = 5, +	V4L2_COLORSPACE_470_SYSTEM_BG = 6, + +	/* I know there will be cameras that send this.  So, this is +	 * unspecified chromaticities and full 0-255 on each of the +	 * Y'CbCr components +	 */ +	V4L2_COLORSPACE_JPEG          = 7, + +	/* For RGB colourspaces, this is probably a good start. */ +	V4L2_COLORSPACE_SRGB          = 8, +}; + +enum v4l2_priority { +	V4L2_PRIORITY_UNSET       = 0,  /* not initialized */ +	V4L2_PRIORITY_BACKGROUND  = 1, +	V4L2_PRIORITY_INTERACTIVE = 2, +	V4L2_PRIORITY_RECORD      = 3, +	V4L2_PRIORITY_DEFAULT     = V4L2_PRIORITY_INTERACTIVE, +}; + +struct v4l2_rect { +	__s32   left; +	__s32   top; +	__s32   width; +	__s32   height; +}; + +struct v4l2_fract { +	__u32   numerator; +	__u32   denominator; +}; + +/** +  * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP +  * +  * @driver:	   name of the driver module (e.g. "bttv") +  * @card:	   name of the card (e.g. "Hauppauge WinTV") +  * @bus_info:	   name of the bus (e.g. "PCI:" + pci_name(pci_dev) ) +  * @version:	   KERNEL_VERSION +  * @capabilities: capabilities of the physical device as a whole +  * @device_caps:  capabilities accessed via this particular device (node) +  * @reserved:	   reserved fields for future extensions +  */ +struct v4l2_capability { +	__u8	driver[16]; +	__u8	card[32]; +	__u8	bus_info[32]; +	__u32   version; +	__u32	capabilities; +	__u32	device_caps; +	__u32	reserved[3]; +}; + +/* Values for 'capabilities' field */ +#define V4L2_CAP_VIDEO_CAPTURE		0x00000001  /* Is a video capture device */ +#define V4L2_CAP_VIDEO_OUTPUT		0x00000002  /* Is a video output device */ +#define V4L2_CAP_VIDEO_OVERLAY		0x00000004  /* Can do video overlay */ +#define V4L2_CAP_VBI_CAPTURE		0x00000010  /* Is a raw VBI capture device */ +#define V4L2_CAP_VBI_OUTPUT		0x00000020  /* Is a raw VBI output device */ +#define V4L2_CAP_SLICED_VBI_CAPTURE	0x00000040  /* Is a sliced VBI capture device */ +#define V4L2_CAP_SLICED_VBI_OUTPUT	0x00000080  /* Is a sliced VBI output device */ +#define V4L2_CAP_RDS_CAPTURE		0x00000100  /* RDS data capture */ +#define V4L2_CAP_VIDEO_OUTPUT_OVERLAY	0x00000200  /* Can do video output overlay */ +#define V4L2_CAP_HW_FREQ_SEEK		0x00000400  /* Can do hardware frequency seek  */ +#define V4L2_CAP_RDS_OUTPUT		0x00000800  /* Is an RDS encoder */ + +/* Is a video capture device that supports multiplanar formats */ +#define V4L2_CAP_VIDEO_CAPTURE_MPLANE	0x00001000 +/* Is a video output device that supports multiplanar formats */ +#define V4L2_CAP_VIDEO_OUTPUT_MPLANE	0x00002000 +/* Is a video mem-to-mem device that supports multiplanar formats */ +#define V4L2_CAP_VIDEO_M2M_MPLANE	0x00004000 +/* Is a video mem-to-mem device */ +#define V4L2_CAP_VIDEO_M2M		0x00008000 + +#define V4L2_CAP_TUNER			0x00010000  /* has a tuner */ +#define V4L2_CAP_AUDIO			0x00020000  /* has audio support */ +#define V4L2_CAP_RADIO			0x00040000  /* is a radio device */ +#define V4L2_CAP_MODULATOR		0x00080000  /* has a modulator */ + +#define V4L2_CAP_READWRITE              0x01000000  /* read/write systemcalls */ +#define V4L2_CAP_ASYNCIO                0x02000000  /* async I/O */ +#define V4L2_CAP_STREAMING              0x04000000  /* streaming I/O ioctls */ + +#define V4L2_CAP_DEVICE_CAPS            0x80000000  /* sets device capabilities field */ + +/* + *	V I D E O   I M A G E   F O R M A T + */ +struct v4l2_pix_format { +	__u32         		width; +	__u32			height; +	__u32			pixelformat; +	__u32			field;		/* enum v4l2_field */ +	__u32            	bytesperline;	/* for padding, zero if unused */ +	__u32          		sizeimage; +	__u32			colorspace;	/* enum v4l2_colorspace */ +	__u32			priv;		/* private data, depends on pixelformat */ +}; + +/*      Pixel format         FOURCC                          depth  Description  */ + +/* RGB formats */ +#define V4L2_PIX_FMT_RGB332  v4l2_fourcc('R', 'G', 'B', '1') /*  8  RGB-3-3-2     */ +#define V4L2_PIX_FMT_RGB444  v4l2_fourcc('R', '4', '4', '4') /* 16  xxxxrrrr ggggbbbb */ +#define V4L2_PIX_FMT_RGB555  v4l2_fourcc('R', 'G', 'B', 'O') /* 16  RGB-5-5-5     */ +#define V4L2_PIX_FMT_RGB565  v4l2_fourcc('R', 'G', 'B', 'P') /* 16  RGB-5-6-5     */ +#define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16  RGB-5-5-5 BE  */ +#define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16  RGB-5-6-5 BE  */ +#define V4L2_PIX_FMT_BGR666  v4l2_fourcc('B', 'G', 'R', 'H') /* 18  BGR-6-6-6	  */ +#define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B', 'G', 'R', '3') /* 24  BGR-8-8-8     */ +#define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R', 'G', 'B', '3') /* 24  RGB-8-8-8     */ +#define V4L2_PIX_FMT_BGR32   v4l2_fourcc('B', 'G', 'R', '4') /* 32  BGR-8-8-8-8   */ +#define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R', 'G', 'B', '4') /* 32  RGB-8-8-8-8   */ + +/* Grey formats */ +#define V4L2_PIX_FMT_GREY    v4l2_fourcc('G', 'R', 'E', 'Y') /*  8  Greyscale     */ +#define V4L2_PIX_FMT_Y4      v4l2_fourcc('Y', '0', '4', ' ') /*  4  Greyscale     */ +#define V4L2_PIX_FMT_Y6      v4l2_fourcc('Y', '0', '6', ' ') /*  6  Greyscale     */ +#define V4L2_PIX_FMT_Y10     v4l2_fourcc('Y', '1', '0', ' ') /* 10  Greyscale     */ +#define V4L2_PIX_FMT_Y12     v4l2_fourcc('Y', '1', '2', ' ') /* 12  Greyscale     */ +#define V4L2_PIX_FMT_Y16     v4l2_fourcc('Y', '1', '6', ' ') /* 16  Greyscale     */ + +/* Grey bit-packed formats */ +#define V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */ + +/* Palette formats */ +#define V4L2_PIX_FMT_PAL8    v4l2_fourcc('P', 'A', 'L', '8') /*  8  8-bit palette */ + +/* Luminance+Chrominance formats */ +#define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y', 'V', 'U', '9') /*  9  YVU 4:1:0     */ +#define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y', 'V', '1', '2') /* 12  YVU 4:2:0     */ +#define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16  YUV 4:2:2     */ +#define V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16  YUV 4:2:2     */ +#define V4L2_PIX_FMT_YVYU    v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */ +#define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16  YUV 4:2:2     */ +#define V4L2_PIX_FMT_VYUY    v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16  YUV 4:2:2     */ +#define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16  YVU422 planar */ +#define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 16  YVU411 planar */ +#define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y', '4', '1', 'P') /* 12  YUV 4:1:1     */ +#define V4L2_PIX_FMT_YUV444  v4l2_fourcc('Y', '4', '4', '4') /* 16  xxxxyyyy uuuuvvvv */ +#define V4L2_PIX_FMT_YUV555  v4l2_fourcc('Y', 'U', 'V', 'O') /* 16  YUV-5-5-5     */ +#define V4L2_PIX_FMT_YUV565  v4l2_fourcc('Y', 'U', 'V', 'P') /* 16  YUV-5-6-5     */ +#define V4L2_PIX_FMT_YUV32   v4l2_fourcc('Y', 'U', 'V', '4') /* 32  YUV-8-8-8-8   */ +#define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y', 'U', 'V', '9') /*  9  YUV 4:1:0     */ +#define V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y', 'U', '1', '2') /* 12  YUV 4:2:0     */ +#define V4L2_PIX_FMT_HI240   v4l2_fourcc('H', 'I', '2', '4') /*  8  8-bit color   */ +#define V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */ +#define V4L2_PIX_FMT_M420    v4l2_fourcc('M', '4', '2', '0') /* 12  YUV 4:2:0 2 lines y, 1 line uv interleaved */ + +/* two planes -- one Y, one Cr + Cb interleaved  */ +#define V4L2_PIX_FMT_NV12    v4l2_fourcc('N', 'V', '1', '2') /* 12  Y/CbCr 4:2:0  */ +#define V4L2_PIX_FMT_NV21    v4l2_fourcc('N', 'V', '2', '1') /* 12  Y/CrCb 4:2:0  */ +#define V4L2_PIX_FMT_NV16    v4l2_fourcc('N', 'V', '1', '6') /* 16  Y/CbCr 4:2:2  */ +#define V4L2_PIX_FMT_NV61    v4l2_fourcc('N', 'V', '6', '1') /* 16  Y/CrCb 4:2:2  */ +#define V4L2_PIX_FMT_NV24    v4l2_fourcc('N', 'V', '2', '4') /* 24  Y/CbCr 4:4:4  */ +#define V4L2_PIX_FMT_NV42    v4l2_fourcc('N', 'V', '4', '2') /* 24  Y/CrCb 4:4:4  */ + +/* two non contiguous planes - one Y, one Cr + Cb interleaved  */ +#define V4L2_PIX_FMT_NV12M   v4l2_fourcc('N', 'M', '1', '2') /* 12  Y/CbCr 4:2:0  */ +#define V4L2_PIX_FMT_NV21M   v4l2_fourcc('N', 'M', '2', '1') /* 21  Y/CrCb 4:2:0  */ +#define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */ +#define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 macroblocks */ + +/* three non contiguous planes - Y, Cb, Cr */ +#define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12  YUV420 planar */ +#define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1') /* 12  YVU420 planar */ + +/* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */ +#define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B', 'A', '8', '1') /*  8  BGBG.. GRGR.. */ +#define V4L2_PIX_FMT_SGBRG8  v4l2_fourcc('G', 'B', 'R', 'G') /*  8  GBGB.. RGRG.. */ +#define V4L2_PIX_FMT_SGRBG8  v4l2_fourcc('G', 'R', 'B', 'G') /*  8  GRGR.. BGBG.. */ +#define V4L2_PIX_FMT_SRGGB8  v4l2_fourcc('R', 'G', 'G', 'B') /*  8  RGRG.. GBGB.. */ +#define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10  BGBG.. GRGR.. */ +#define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10  GBGB.. RGRG.. */ +#define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10  GRGR.. BGBG.. */ +#define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10  RGRG.. GBGB.. */ +#define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12  BGBG.. GRGR.. */ +#define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12  GBGB.. RGRG.. */ +#define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12  GRGR.. BGBG.. */ +#define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12  RGRG.. GBGB.. */ +	/* 10bit raw bayer DPCM compressed to 8 bits */ +#define V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8') +#define V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8') +#define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0') +#define V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8') +	/* +	 * 10bit raw bayer, expanded to 16 bits +	 * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb... +	 */ +#define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16  BGBG.. GRGR.. */ + +/* compressed formats */ +#define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG   */ +#define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG     */ +#define V4L2_PIX_FMT_DV       v4l2_fourcc('d', 'v', 's', 'd') /* 1394          */ +#define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 Multiplexed */ +#define V4L2_PIX_FMT_H264     v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */ +#define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */ +#define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */ +#define V4L2_PIX_FMT_H263     v4l2_fourcc('H', '2', '6', '3') /* H263          */ +#define V4L2_PIX_FMT_MPEG1    v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES     */ +#define V4L2_PIX_FMT_MPEG2    v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES     */ +#define V4L2_PIX_FMT_MPEG4    v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 ES     */ +#define V4L2_PIX_FMT_XVID     v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid           */ +#define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */ +#define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */ +#define V4L2_PIX_FMT_VP8      v4l2_fourcc('V', 'P', '8', '0') /* VP8 */ + +/*  Vendor-specific formats   */ +#define V4L2_PIX_FMT_CPIA1    v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */ +#define V4L2_PIX_FMT_WNVA     v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */ +#define V4L2_PIX_FMT_SN9C10X  v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */ +#define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */ +#define V4L2_PIX_FMT_PWC1     v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */ +#define V4L2_PIX_FMT_PWC2     v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */ +#define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */ +#define V4L2_PIX_FMT_SPCA501  v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */ +#define V4L2_PIX_FMT_SPCA505  v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */ +#define V4L2_PIX_FMT_SPCA508  v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */ +#define V4L2_PIX_FMT_SPCA561  v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */ +#define V4L2_PIX_FMT_PAC207   v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */ +#define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */ +#define V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '0') /* compressed RGGB bayer */ +#define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */ +#define V4L2_PIX_FMT_SQ905C   v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */ +#define V4L2_PIX_FMT_PJPG     v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ +#define V4L2_PIX_FMT_OV511    v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ +#define V4L2_PIX_FMT_OV518    v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ +#define V4L2_PIX_FMT_STV0680  v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */ +#define V4L2_PIX_FMT_TM6000   v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */ +#define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */ +#define V4L2_PIX_FMT_KONICA420  v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */ +#define V4L2_PIX_FMT_JPGL	v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */ +#define V4L2_PIX_FMT_SE401      v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */ +#define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */ + +/* + *	F O R M A T   E N U M E R A T I O N + */ +struct v4l2_fmtdesc { +	__u32		    index;             /* Format number      */ +	__u32		    type;              /* enum v4l2_buf_type */ +	__u32               flags; +	__u8		    description[32];   /* Description string */ +	__u32		    pixelformat;       /* Format fourcc      */ +	__u32		    reserved[4]; +}; + +#define V4L2_FMT_FLAG_COMPRESSED 0x0001 +#define V4L2_FMT_FLAG_EMULATED   0x0002 + +#if 1 +	/* Experimental Frame Size and frame rate enumeration */ +/* + *	F R A M E   S I Z E   E N U M E R A T I O N + */ +enum v4l2_frmsizetypes { +	V4L2_FRMSIZE_TYPE_DISCRETE	= 1, +	V4L2_FRMSIZE_TYPE_CONTINUOUS	= 2, +	V4L2_FRMSIZE_TYPE_STEPWISE	= 3, +}; + +struct v4l2_frmsize_discrete { +	__u32			width;		/* Frame width [pixel] */ +	__u32			height;		/* Frame height [pixel] */ +}; + +struct v4l2_frmsize_stepwise { +	__u32			min_width;	/* Minimum frame width [pixel] */ +	__u32			max_width;	/* Maximum frame width [pixel] */ +	__u32			step_width;	/* Frame width step size [pixel] */ +	__u32			min_height;	/* Minimum frame height [pixel] */ +	__u32			max_height;	/* Maximum frame height [pixel] */ +	__u32			step_height;	/* Frame height step size [pixel] */ +}; + +struct v4l2_frmsizeenum { +	__u32			index;		/* Frame size number */ +	__u32			pixel_format;	/* Pixel format */ +	__u32			type;		/* Frame size type the device supports. */ + +	union {					/* Frame size */ +		struct v4l2_frmsize_discrete	discrete; +		struct v4l2_frmsize_stepwise	stepwise; +	}; + +	__u32   reserved[2];			/* Reserved space for future use */ +}; + +/* + *	F R A M E   R A T E   E N U M E R A T I O N + */ +enum v4l2_frmivaltypes { +	V4L2_FRMIVAL_TYPE_DISCRETE	= 1, +	V4L2_FRMIVAL_TYPE_CONTINUOUS	= 2, +	V4L2_FRMIVAL_TYPE_STEPWISE	= 3, +}; + +struct v4l2_frmival_stepwise { +	struct v4l2_fract	min;		/* Minimum frame interval [s] */ +	struct v4l2_fract	max;		/* Maximum frame interval [s] */ +	struct v4l2_fract	step;		/* Frame interval step size [s] */ +}; + +struct v4l2_frmivalenum { +	__u32			index;		/* Frame format index */ +	__u32			pixel_format;	/* Pixel format */ +	__u32			width;		/* Frame width */ +	__u32			height;		/* Frame height */ +	__u32			type;		/* Frame interval type the device supports. */ + +	union {					/* Frame interval */ +		struct v4l2_fract		discrete; +		struct v4l2_frmival_stepwise	stepwise; +	}; + +	__u32	reserved[2];			/* Reserved space for future use */ +}; +#endif + +/* + *	T I M E C O D E + */ +struct v4l2_timecode { +	__u32	type; +	__u32	flags; +	__u8	frames; +	__u8	seconds; +	__u8	minutes; +	__u8	hours; +	__u8	userbits[4]; +}; + +/*  Type  */ +#define V4L2_TC_TYPE_24FPS		1 +#define V4L2_TC_TYPE_25FPS		2 +#define V4L2_TC_TYPE_30FPS		3 +#define V4L2_TC_TYPE_50FPS		4 +#define V4L2_TC_TYPE_60FPS		5 + +/*  Flags  */ +#define V4L2_TC_FLAG_DROPFRAME		0x0001 /* "drop-frame" mode */ +#define V4L2_TC_FLAG_COLORFRAME		0x0002 +#define V4L2_TC_USERBITS_field		0x000C +#define V4L2_TC_USERBITS_USERDEFINED	0x0000 +#define V4L2_TC_USERBITS_8BITCHARS	0x0008 +/* The above is based on SMPTE timecodes */ + +struct v4l2_jpegcompression { +	int quality; + +	int  APPn;              /* Number of APP segment to be written, +				 * must be 0..15 */ +	int  APP_len;           /* Length of data in JPEG APPn segment */ +	char APP_data[60];      /* Data in the JPEG APPn segment. */ + +	int  COM_len;           /* Length of data in JPEG COM segment */ +	char COM_data[60];      /* Data in JPEG COM segment */ + +	__u32 jpeg_markers;     /* Which markers should go into the JPEG +				 * output. Unless you exactly know what +				 * you do, leave them untouched. +				 * Inluding less markers will make the +				 * resulting code smaller, but there will +				 * be fewer applications which can read it. +				 * The presence of the APP and COM marker +				 * is influenced by APP_len and COM_len +				 * ONLY, not by this property! */ + +#define V4L2_JPEG_MARKER_DHT (1<<3)    /* Define Huffman Tables */ +#define V4L2_JPEG_MARKER_DQT (1<<4)    /* Define Quantization Tables */ +#define V4L2_JPEG_MARKER_DRI (1<<5)    /* Define Restart Interval */ +#define V4L2_JPEG_MARKER_COM (1<<6)    /* Comment segment */ +#define V4L2_JPEG_MARKER_APP (1<<7)    /* App segment, driver will +					* allways use APP0 */ +}; + +/* + *	M E M O R Y - M A P P I N G   B U F F E R S + */ +struct v4l2_requestbuffers { +	__u32			count; +	__u32			type;		/* enum v4l2_buf_type */ +	__u32			memory;		/* enum v4l2_memory */ +	__u32			reserved[2]; +}; + +/** + * struct v4l2_plane - plane info for multi-planar buffers + * @bytesused:		number of bytes occupied by data in the plane (payload) + * @length:		size of this plane (NOT the payload) in bytes + * @mem_offset:		when memory in the associated struct v4l2_buffer is + *			V4L2_MEMORY_MMAP, equals the offset from the start of + *			the device memory for this plane (or is a "cookie" that + *			should be passed to mmap() called on the video node) + * @userptr:		when memory is V4L2_MEMORY_USERPTR, a userspace pointer + *			pointing to this plane + * @data_offset:	offset in the plane to the start of data; usually 0, + *			unless there is a header in front of the data + * + * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer + * with two planes can have one plane for Y, and another for interleaved CbCr + * components. Each plane can reside in a separate memory buffer, or even in + * a completely separate memory node (e.g. in embedded devices). + */ +struct v4l2_plane { +	__u32			bytesused; +	__u32			length; +	union { +		__u32		mem_offset; +		unsigned long	userptr; +	} m; +	__u32			data_offset; +	__u32			reserved[11]; +}; + +/** + * struct v4l2_buffer - video buffer info + * @index:	id number of the buffer + * @type:	enum v4l2_buf_type; buffer type (type == *_MPLANE for + *		multiplanar buffers); + * @bytesused:	number of bytes occupied by data in the buffer (payload); + *		unused (set to 0) for multiplanar buffers + * @flags:	buffer informational flags + * @field:	enum v4l2_field; field order of the image in the buffer + * @timestamp:	frame timestamp + * @timecode:	frame timecode + * @sequence:	sequence count of this frame + * @memory:	enum v4l2_memory; the method, in which the actual video data is + *		passed + * @offset:	for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP; + *		offset from the start of the device memory for this plane, + *		(or a "cookie" that should be passed to mmap() as offset) + * @userptr:	for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR; + *		a userspace pointer pointing to this buffer + * @planes:	for multiplanar buffers; userspace pointer to the array of plane + *		info structs for this buffer + * @length:	size in bytes of the buffer (NOT its payload) for single-plane + *		buffers (when type != *_MPLANE); number of elements in the + *		planes array for multi-plane buffers + * @input:	input number from which the video data has has been captured + * + * Contains data exchanged by application and driver using one of the Streaming + * I/O methods. + */ +struct v4l2_buffer { +	__u32			index; +	__u32			type; +	__u32			bytesused; +	__u32			flags; +	__u32			field; +	struct timeval		timestamp; +	struct v4l2_timecode	timecode; +	__u32			sequence; + +	/* memory location */ +	__u32			memory; +	union { +		__u32           offset; +		unsigned long   userptr; +		struct v4l2_plane *planes; +	} m; +	__u32			length; +	__u32			reserved2; +	__u32			reserved; +}; + +/*  Flags for 'flags' field */ +#define V4L2_BUF_FLAG_MAPPED	0x0001  /* Buffer is mapped (flag) */ +#define V4L2_BUF_FLAG_QUEUED	0x0002	/* Buffer is queued for processing */ +#define V4L2_BUF_FLAG_DONE	0x0004	/* Buffer is ready */ +#define V4L2_BUF_FLAG_KEYFRAME	0x0008	/* Image is a keyframe (I-frame) */ +#define V4L2_BUF_FLAG_PFRAME	0x0010	/* Image is a P-frame */ +#define V4L2_BUF_FLAG_BFRAME	0x0020	/* Image is a B-frame */ +/* Buffer is ready, but the data contained within is corrupted. */ +#define V4L2_BUF_FLAG_ERROR	0x0040 +#define V4L2_BUF_FLAG_TIMECODE	0x0100	/* timecode field is valid */ +#define V4L2_BUF_FLAG_PREPARED	0x0400	/* Buffer is prepared for queuing */ +/* Cache handling flags */ +#define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE	0x0800 +#define V4L2_BUF_FLAG_NO_CACHE_CLEAN		0x1000 + +/* + *	O V E R L A Y   P R E V I E W + */ +struct v4l2_framebuffer { +	__u32			capability; +	__u32			flags; +/* FIXME: in theory we should pass something like PCI device + memory + * region + offset instead of some physical address */ +	void                    *base; +	struct v4l2_pix_format	fmt; +}; +/*  Flags for the 'capability' field. Read only */ +#define V4L2_FBUF_CAP_EXTERNOVERLAY	0x0001 +#define V4L2_FBUF_CAP_CHROMAKEY		0x0002 +#define V4L2_FBUF_CAP_LIST_CLIPPING     0x0004 +#define V4L2_FBUF_CAP_BITMAP_CLIPPING	0x0008 +#define V4L2_FBUF_CAP_LOCAL_ALPHA	0x0010 +#define V4L2_FBUF_CAP_GLOBAL_ALPHA	0x0020 +#define V4L2_FBUF_CAP_LOCAL_INV_ALPHA	0x0040 +#define V4L2_FBUF_CAP_SRC_CHROMAKEY	0x0080 +/*  Flags for the 'flags' field. */ +#define V4L2_FBUF_FLAG_PRIMARY		0x0001 +#define V4L2_FBUF_FLAG_OVERLAY		0x0002 +#define V4L2_FBUF_FLAG_CHROMAKEY	0x0004 +#define V4L2_FBUF_FLAG_LOCAL_ALPHA	0x0008 +#define V4L2_FBUF_FLAG_GLOBAL_ALPHA	0x0010 +#define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA	0x0020 +#define V4L2_FBUF_FLAG_SRC_CHROMAKEY	0x0040 + +struct v4l2_clip { +	struct v4l2_rect        c; +	struct v4l2_clip	__user *next; +}; + +struct v4l2_window { +	struct v4l2_rect        w; +	__u32			field;	 /* enum v4l2_field */ +	__u32			chromakey; +	struct v4l2_clip	__user *clips; +	__u32			clipcount; +	void			__user *bitmap; +	__u8                    global_alpha; +}; + +/* + *	C A P T U R E   P A R A M E T E R S + */ +struct v4l2_captureparm { +	__u32		   capability;	  /*  Supported modes */ +	__u32		   capturemode;	  /*  Current mode */ +	struct v4l2_fract  timeperframe;  /*  Time per frame in .1us units */ +	__u32		   extendedmode;  /*  Driver-specific extensions */ +	__u32              readbuffers;   /*  # of buffers for read */ +	__u32		   reserved[4]; +}; + +/*  Flags for 'capability' and 'capturemode' fields */ +#define V4L2_MODE_HIGHQUALITY	0x0001	/*  High quality imaging mode */ +#define V4L2_CAP_TIMEPERFRAME	0x1000	/*  timeperframe field is supported */ + +struct v4l2_outputparm { +	__u32		   capability;	 /*  Supported modes */ +	__u32		   outputmode;	 /*  Current mode */ +	struct v4l2_fract  timeperframe; /*  Time per frame in seconds */ +	__u32		   extendedmode; /*  Driver-specific extensions */ +	__u32              writebuffers; /*  # of buffers for write */ +	__u32		   reserved[4]; +}; + +/* + *	I N P U T   I M A G E   C R O P P I N G + */ +struct v4l2_cropcap { +	__u32			type;	/* enum v4l2_buf_type */ +	struct v4l2_rect        bounds; +	struct v4l2_rect        defrect; +	struct v4l2_fract       pixelaspect; +}; + +struct v4l2_crop { +	__u32			type;	/* enum v4l2_buf_type */ +	struct v4l2_rect        c; +}; + +/** + * struct v4l2_selection - selection info + * @type:	buffer type (do not use *_MPLANE types) + * @target:	Selection target, used to choose one of possible rectangles; + *		defined in v4l2-common.h; V4L2_SEL_TGT_* . + * @flags:	constraints flags, defined in v4l2-common.h; V4L2_SEL_FLAG_*. + * @r:		coordinates of selection window + * @reserved:	for future use, rounds structure size to 64 bytes, set to zero + * + * Hardware may use multiple helper windows to process a video stream. + * The structure is used to exchange this selection areas between + * an application and a driver. + */ +struct v4l2_selection { +	__u32			type; +	__u32			target; +	__u32                   flags; +	struct v4l2_rect        r; +	__u32                   reserved[9]; +}; + + +/* + *      A N A L O G   V I D E O   S T A N D A R D + */ + +typedef __u64 v4l2_std_id; + +/* one bit for each */ +#define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001) +#define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002) +#define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004) +#define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008) +#define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010) +#define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020) +#define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040) +#define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080) + +#define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100) +#define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200) +#define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400) +#define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800) + +#define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000)	/* BTSC */ +#define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000)	/* EIA-J */ +#define V4L2_STD_NTSC_443       ((v4l2_std_id)0x00004000) +#define V4L2_STD_NTSC_M_KR      ((v4l2_std_id)0x00008000)	/* FM A2 */ + +#define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000) +#define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000) +#define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000) +#define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000) +#define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000) +#define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000) +#define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000) +#define V4L2_STD_SECAM_LC       ((v4l2_std_id)0x00800000) + +/* ATSC/HDTV */ +#define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000) +#define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000) + +/* FIXME: +   Although std_id is 64 bits, there is an issue on PPC32 architecture that +   makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding +   this value to 32 bits. +   As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide), +   it should work fine. However, if needed to add more than two standards, +   v4l2-common.c should be fixed. + */ + +/* + * Some macros to merge video standards in order to make live easier for the + * drivers and V4L2 applications + */ + +/* + * "Common" NTSC/M - It should be noticed that V4L2_STD_NTSC_443 is + * Missing here. + */ +#define V4L2_STD_NTSC           (V4L2_STD_NTSC_M	|\ +				 V4L2_STD_NTSC_M_JP     |\ +				 V4L2_STD_NTSC_M_KR) +/* Secam macros */ +#define V4L2_STD_SECAM_DK      	(V4L2_STD_SECAM_D	|\ +				 V4L2_STD_SECAM_K	|\ +				 V4L2_STD_SECAM_K1) +/* All Secam Standards */ +#define V4L2_STD_SECAM		(V4L2_STD_SECAM_B	|\ +				 V4L2_STD_SECAM_G	|\ +				 V4L2_STD_SECAM_H	|\ +				 V4L2_STD_SECAM_DK	|\ +				 V4L2_STD_SECAM_L       |\ +				 V4L2_STD_SECAM_LC) +/* PAL macros */ +#define V4L2_STD_PAL_BG		(V4L2_STD_PAL_B		|\ +				 V4L2_STD_PAL_B1	|\ +				 V4L2_STD_PAL_G) +#define V4L2_STD_PAL_DK		(V4L2_STD_PAL_D		|\ +				 V4L2_STD_PAL_D1	|\ +				 V4L2_STD_PAL_K) +/* + * "Common" PAL - This macro is there to be compatible with the old + * V4L1 concept of "PAL": /BGDKHI. + * Several PAL standards are mising here: /M, /N and /Nc + */ +#define V4L2_STD_PAL		(V4L2_STD_PAL_BG	|\ +				 V4L2_STD_PAL_DK	|\ +				 V4L2_STD_PAL_H		|\ +				 V4L2_STD_PAL_I) +/* Chroma "agnostic" standards */ +#define V4L2_STD_B		(V4L2_STD_PAL_B		|\ +				 V4L2_STD_PAL_B1	|\ +				 V4L2_STD_SECAM_B) +#define V4L2_STD_G		(V4L2_STD_PAL_G		|\ +				 V4L2_STD_SECAM_G) +#define V4L2_STD_H		(V4L2_STD_PAL_H		|\ +				 V4L2_STD_SECAM_H) +#define V4L2_STD_L		(V4L2_STD_SECAM_L	|\ +				 V4L2_STD_SECAM_LC) +#define V4L2_STD_GH		(V4L2_STD_G		|\ +				 V4L2_STD_H) +#define V4L2_STD_DK		(V4L2_STD_PAL_DK	|\ +				 V4L2_STD_SECAM_DK) +#define V4L2_STD_BG		(V4L2_STD_B		|\ +				 V4L2_STD_G) +#define V4L2_STD_MN		(V4L2_STD_PAL_M		|\ +				 V4L2_STD_PAL_N		|\ +				 V4L2_STD_PAL_Nc	|\ +				 V4L2_STD_NTSC) + +/* Standards where MTS/BTSC stereo could be found */ +#define V4L2_STD_MTS		(V4L2_STD_NTSC_M	|\ +				 V4L2_STD_PAL_M		|\ +				 V4L2_STD_PAL_N		|\ +				 V4L2_STD_PAL_Nc) + +/* Standards for Countries with 60Hz Line frequency */ +#define V4L2_STD_525_60		(V4L2_STD_PAL_M		|\ +				 V4L2_STD_PAL_60	|\ +				 V4L2_STD_NTSC		|\ +				 V4L2_STD_NTSC_443) +/* Standards for Countries with 50Hz Line frequency */ +#define V4L2_STD_625_50		(V4L2_STD_PAL		|\ +				 V4L2_STD_PAL_N		|\ +				 V4L2_STD_PAL_Nc	|\ +				 V4L2_STD_SECAM) + +#define V4L2_STD_ATSC           (V4L2_STD_ATSC_8_VSB    |\ +				 V4L2_STD_ATSC_16_VSB) +/* Macros with none and all analog standards */ +#define V4L2_STD_UNKNOWN        0 +#define V4L2_STD_ALL            (V4L2_STD_525_60	|\ +				 V4L2_STD_625_50) + +struct v4l2_standard { +	__u32		     index; +	v4l2_std_id          id; +	__u8		     name[24]; +	struct v4l2_fract    frameperiod; /* Frames, not fields */ +	__u32		     framelines; +	__u32		     reserved[4]; +}; + +/* The DV Preset API is deprecated in favor of the DV Timings API. +   New drivers shouldn't use this anymore! */ + +/* + *	V I D E O	T I M I N G S	D V	P R E S E T + */ +struct v4l2_dv_preset { +	__u32	preset; +	__u32	reserved[4]; +}; + +/* + *	D V	P R E S E T S	E N U M E R A T I O N + */ +struct v4l2_dv_enum_preset { +	__u32	index; +	__u32	preset; +	__u8	name[32]; /* Name of the preset timing */ +	__u32	width; +	__u32	height; +	__u32	reserved[4]; +}; + +/* + * 	D V	P R E S E T	V A L U E S + */ +#define		V4L2_DV_INVALID		0 +#define		V4L2_DV_480P59_94	1 /* BT.1362 */ +#define		V4L2_DV_576P50		2 /* BT.1362 */ +#define		V4L2_DV_720P24		3 /* SMPTE 296M */ +#define		V4L2_DV_720P25		4 /* SMPTE 296M */ +#define		V4L2_DV_720P30		5 /* SMPTE 296M */ +#define		V4L2_DV_720P50		6 /* SMPTE 296M */ +#define		V4L2_DV_720P59_94	7 /* SMPTE 274M */ +#define		V4L2_DV_720P60		8 /* SMPTE 274M/296M */ +#define		V4L2_DV_1080I29_97	9 /* BT.1120/ SMPTE 274M */ +#define		V4L2_DV_1080I30		10 /* BT.1120/ SMPTE 274M */ +#define		V4L2_DV_1080I25		11 /* BT.1120 */ +#define		V4L2_DV_1080I50		12 /* SMPTE 296M */ +#define		V4L2_DV_1080I60		13 /* SMPTE 296M */ +#define		V4L2_DV_1080P24		14 /* SMPTE 296M */ +#define		V4L2_DV_1080P25		15 /* SMPTE 296M */ +#define		V4L2_DV_1080P30		16 /* SMPTE 296M */ +#define		V4L2_DV_1080P50		17 /* BT.1120 */ +#define		V4L2_DV_1080P60		18 /* BT.1120 */ + +/* + *	D V 	B T	T I M I N G S + */ + +/** struct v4l2_bt_timings - BT.656/BT.1120 timing data + * @width:	total width of the active video in pixels + * @height:	total height of the active video in lines + * @interlaced:	Interlaced or progressive + * @polarities:	Positive or negative polarities + * @pixelclock:	Pixel clock in HZ. Ex. 74.25MHz->74250000 + * @hfrontporch:Horizontal front porch in pixels + * @hsync:	Horizontal Sync length in pixels + * @hbackporch:	Horizontal back porch in pixels + * @vfrontporch:Vertical front porch in lines + * @vsync:	Vertical Sync length in lines + * @vbackporch:	Vertical back porch in lines + * @il_vfrontporch:Vertical front porch for the even field + *		(aka field 2) of interlaced field formats + * @il_vsync:	Vertical Sync length for the even field + *		(aka field 2) of interlaced field formats + * @il_vbackporch:Vertical back porch for the even field + *		(aka field 2) of interlaced field formats + * @standards:	Standards the timing belongs to + * @flags:	Flags + * @reserved:	Reserved fields, must be zeroed. + * + * A note regarding vertical interlaced timings: height refers to the total + * height of the active video frame (= two fields). The blanking timings refer + * to the blanking of each field. So the height of the total frame is + * calculated as follows: + * + * tot_height = height + vfrontporch + vsync + vbackporch + + *                       il_vfrontporch + il_vsync + il_vbackporch + * + * The active height of each field is height / 2. + */ +struct v4l2_bt_timings { +	__u32	width; +	__u32	height; +	__u32	interlaced; +	__u32	polarities; +	__u64	pixelclock; +	__u32	hfrontporch; +	__u32	hsync; +	__u32	hbackporch; +	__u32	vfrontporch; +	__u32	vsync; +	__u32	vbackporch; +	__u32	il_vfrontporch; +	__u32	il_vsync; +	__u32	il_vbackporch; +	__u32	standards; +	__u32	flags; +	__u32	reserved[14]; +} __attribute__ ((packed)); + +/* Interlaced or progressive format */ +#define	V4L2_DV_PROGRESSIVE	0 +#define	V4L2_DV_INTERLACED	1 + +/* Polarities. If bit is not set, it is assumed to be negative polarity */ +#define V4L2_DV_VSYNC_POS_POL	0x00000001 +#define V4L2_DV_HSYNC_POS_POL	0x00000002 + +/* Timings standards */ +#define V4L2_DV_BT_STD_CEA861	(1 << 0)  /* CEA-861 Digital TV Profile */ +#define V4L2_DV_BT_STD_DMT	(1 << 1)  /* VESA Discrete Monitor Timings */ +#define V4L2_DV_BT_STD_CVT	(1 << 2)  /* VESA Coordinated Video Timings */ +#define V4L2_DV_BT_STD_GTF	(1 << 3)  /* VESA Generalized Timings Formula */ + +/* Flags */ + +/* CVT/GTF specific: timing uses reduced blanking (CVT) or the 'Secondary +   GTF' curve (GTF). In both cases the horizontal and/or vertical blanking +   intervals are reduced, allowing a higher resolution over the same +   bandwidth. This is a read-only flag. */ +#define V4L2_DV_FL_REDUCED_BLANKING		(1 << 0) +/* CEA-861 specific: set for CEA-861 formats with a framerate of a multiple +   of six. These formats can be optionally played at 1 / 1.001 speed. +   This is a read-only flag. */ +#define V4L2_DV_FL_CAN_REDUCE_FPS		(1 << 1) +/* CEA-861 specific: only valid for video transmitters, the flag is cleared +   by receivers. +   If the framerate of the format is a multiple of six, then the pixelclock +   used to set up the transmitter is divided by 1.001 to make it compatible +   with 60 Hz based standards such as NTSC and PAL-M that use a framerate of +   29.97 Hz. Otherwise this flag is cleared. If the transmitter can't generate +   such frequencies, then the flag will also be cleared. */ +#define V4L2_DV_FL_REDUCED_FPS			(1 << 2) +/* Specific to interlaced formats: if set, then field 1 is really one half-line +   longer and field 2 is really one half-line shorter, so each field has +   exactly the same number of half-lines. Whether half-lines can be detected +   or used depends on the hardware. */ +#define V4L2_DV_FL_HALF_LINE			(1 << 0) + + +/** struct v4l2_dv_timings - DV timings + * @type:	the type of the timings + * @bt:	BT656/1120 timings + */ +struct v4l2_dv_timings { +	__u32 type; +	union { +		struct v4l2_bt_timings	bt; +		__u32	reserved[32]; +	}; +} __attribute__ ((packed)); + +/* Values for the type field */ +#define V4L2_DV_BT_656_1120	0	/* BT.656/1120 timing type */ + + +/** struct v4l2_enum_dv_timings - DV timings enumeration + * @index:	enumeration index + * @reserved:	must be zeroed + * @timings:	the timings for the given index + */ +struct v4l2_enum_dv_timings { +	__u32 index; +	__u32 reserved[3]; +	struct v4l2_dv_timings timings; +}; + +/** struct v4l2_bt_timings_cap - BT.656/BT.1120 timing capabilities + * @min_width:		width in pixels + * @max_width:		width in pixels + * @min_height:		height in lines + * @max_height:		height in lines + * @min_pixelclock:	Pixel clock in HZ. Ex. 74.25MHz->74250000 + * @max_pixelclock:	Pixel clock in HZ. Ex. 74.25MHz->74250000 + * @standards:		Supported standards + * @capabilities:	Supported capabilities + * @reserved:		Must be zeroed + */ +struct v4l2_bt_timings_cap { +	__u32	min_width; +	__u32	max_width; +	__u32	min_height; +	__u32	max_height; +	__u64	min_pixelclock; +	__u64	max_pixelclock; +	__u32	standards; +	__u32	capabilities; +	__u32	reserved[16]; +} __attribute__ ((packed)); + +/* Supports interlaced formats */ +#define V4L2_DV_BT_CAP_INTERLACED	(1 << 0) +/* Supports progressive formats */ +#define V4L2_DV_BT_CAP_PROGRESSIVE	(1 << 1) +/* Supports CVT/GTF reduced blanking */ +#define V4L2_DV_BT_CAP_REDUCED_BLANKING	(1 << 2) +/* Supports custom formats */ +#define V4L2_DV_BT_CAP_CUSTOM		(1 << 3) + +/** struct v4l2_dv_timings_cap - DV timings capabilities + * @type:	the type of the timings (same as in struct v4l2_dv_timings) + * @bt:		the BT656/1120 timings capabilities + */ +struct v4l2_dv_timings_cap { +	__u32 type; +	__u32 reserved[3]; +	union { +		struct v4l2_bt_timings_cap bt; +		__u32 raw_data[32]; +	}; +}; + + +/* + *	V I D E O   I N P U T S + */ +struct v4l2_input { +	__u32	     index;		/*  Which input */ +	__u8	     name[32];		/*  Label */ +	__u32	     type;		/*  Type of input */ +	__u32	     audioset;		/*  Associated audios (bitfield) */ +	__u32        tuner;             /*  enum v4l2_tuner_type */ +	v4l2_std_id  std; +	__u32	     status; +	__u32	     capabilities; +	__u32	     reserved[3]; +}; + +/*  Values for the 'type' field */ +#define V4L2_INPUT_TYPE_TUNER		1 +#define V4L2_INPUT_TYPE_CAMERA		2 + +/* field 'status' - general */ +#define V4L2_IN_ST_NO_POWER    0x00000001  /* Attached device is off */ +#define V4L2_IN_ST_NO_SIGNAL   0x00000002 +#define V4L2_IN_ST_NO_COLOR    0x00000004 + +/* field 'status' - sensor orientation */ +/* If sensor is mounted upside down set both bits */ +#define V4L2_IN_ST_HFLIP       0x00000010 /* Frames are flipped horizontally */ +#define V4L2_IN_ST_VFLIP       0x00000020 /* Frames are flipped vertically */ + +/* field 'status' - analog */ +#define V4L2_IN_ST_NO_H_LOCK   0x00000100  /* No horizontal sync lock */ +#define V4L2_IN_ST_COLOR_KILL  0x00000200  /* Color killer is active */ + +/* field 'status' - digital */ +#define V4L2_IN_ST_NO_SYNC     0x00010000  /* No synchronization lock */ +#define V4L2_IN_ST_NO_EQU      0x00020000  /* No equalizer lock */ +#define V4L2_IN_ST_NO_CARRIER  0x00040000  /* Carrier recovery failed */ + +/* field 'status' - VCR and set-top box */ +#define V4L2_IN_ST_MACROVISION 0x01000000  /* Macrovision detected */ +#define V4L2_IN_ST_NO_ACCESS   0x02000000  /* Conditional access denied */ +#define V4L2_IN_ST_VTR         0x04000000  /* VTR time constant */ + +/* capabilities flags */ +#define V4L2_IN_CAP_PRESETS		0x00000001 /* Supports S_DV_PRESET */ +#define V4L2_IN_CAP_DV_TIMINGS		0x00000002 /* Supports S_DV_TIMINGS */ +#define V4L2_IN_CAP_CUSTOM_TIMINGS	V4L2_IN_CAP_DV_TIMINGS /* For compatibility */ +#define V4L2_IN_CAP_STD			0x00000004 /* Supports S_STD */ + +/* + *	V I D E O   O U T P U T S + */ +struct v4l2_output { +	__u32	     index;		/*  Which output */ +	__u8	     name[32];		/*  Label */ +	__u32	     type;		/*  Type of output */ +	__u32	     audioset;		/*  Associated audios (bitfield) */ +	__u32	     modulator;         /*  Associated modulator */ +	v4l2_std_id  std; +	__u32	     capabilities; +	__u32	     reserved[3]; +}; +/*  Values for the 'type' field */ +#define V4L2_OUTPUT_TYPE_MODULATOR		1 +#define V4L2_OUTPUT_TYPE_ANALOG			2 +#define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY	3 + +/* capabilities flags */ +#define V4L2_OUT_CAP_PRESETS		0x00000001 /* Supports S_DV_PRESET */ +#define V4L2_OUT_CAP_DV_TIMINGS		0x00000002 /* Supports S_DV_TIMINGS */ +#define V4L2_OUT_CAP_CUSTOM_TIMINGS	V4L2_OUT_CAP_DV_TIMINGS /* For compatibility */ +#define V4L2_OUT_CAP_STD		0x00000004 /* Supports S_STD */ + +/* + *	C O N T R O L S + */ +struct v4l2_control { +	__u32		     id; +	__s32		     value; +}; + +struct v4l2_ext_control { +	__u32 id; +	__u32 size; +	__u32 reserved2[1]; +	union { +		__s32 value; +		__s64 value64; +		char *string; +	}; +} __attribute__ ((packed)); + +struct v4l2_ext_controls { +	__u32 ctrl_class; +	__u32 count; +	__u32 error_idx; +	__u32 reserved[2]; +	struct v4l2_ext_control *controls; +}; + +#define V4L2_CTRL_ID_MASK      	  (0x0fffffff) +#define V4L2_CTRL_ID2CLASS(id)    ((id) & 0x0fff0000UL) +#define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000) + +enum v4l2_ctrl_type { +	V4L2_CTRL_TYPE_INTEGER	     = 1, +	V4L2_CTRL_TYPE_BOOLEAN	     = 2, +	V4L2_CTRL_TYPE_MENU	     = 3, +	V4L2_CTRL_TYPE_BUTTON	     = 4, +	V4L2_CTRL_TYPE_INTEGER64     = 5, +	V4L2_CTRL_TYPE_CTRL_CLASS    = 6, +	V4L2_CTRL_TYPE_STRING        = 7, +	V4L2_CTRL_TYPE_BITMASK       = 8, +	V4L2_CTRL_TYPE_INTEGER_MENU = 9, +}; + +/*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ +struct v4l2_queryctrl { +	__u32		     id; +	__u32		     type;	/* enum v4l2_ctrl_type */ +	__u8		     name[32];	/* Whatever */ +	__s32		     minimum;	/* Note signedness */ +	__s32		     maximum; +	__s32		     step; +	__s32		     default_value; +	__u32                flags; +	__u32		     reserved[2]; +}; + +/*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */ +struct v4l2_querymenu { +	__u32		id; +	__u32		index; +	union { +		__u8	name[32];	/* Whatever */ +		__s64	value; +	}; +	__u32		reserved; +} __attribute__ ((packed)); + +/*  Control flags  */ +#define V4L2_CTRL_FLAG_DISABLED		0x0001 +#define V4L2_CTRL_FLAG_GRABBED		0x0002 +#define V4L2_CTRL_FLAG_READ_ONLY 	0x0004 +#define V4L2_CTRL_FLAG_UPDATE 		0x0008 +#define V4L2_CTRL_FLAG_INACTIVE 	0x0010 +#define V4L2_CTRL_FLAG_SLIDER 		0x0020 +#define V4L2_CTRL_FLAG_WRITE_ONLY 	0x0040 +#define V4L2_CTRL_FLAG_VOLATILE		0x0080 + +/*  Query flag, to be ORed with the control ID */ +#define V4L2_CTRL_FLAG_NEXT_CTRL	0x80000000 + +/*  User-class control IDs defined by V4L2 */ +#define V4L2_CID_MAX_CTRLS		1024 +/*  IDs reserved for driver specific controls */ +#define V4L2_CID_PRIVATE_BASE		0x08000000 + + +/*  DV-class control IDs defined by V4L2 */ +#define V4L2_CID_DV_CLASS_BASE			(V4L2_CTRL_CLASS_DV | 0x900) +#define V4L2_CID_DV_CLASS			(V4L2_CTRL_CLASS_DV | 1) + +#define	V4L2_CID_DV_TX_HOTPLUG			(V4L2_CID_DV_CLASS_BASE + 1) +#define	V4L2_CID_DV_TX_RXSENSE			(V4L2_CID_DV_CLASS_BASE + 2) +#define	V4L2_CID_DV_TX_EDID_PRESENT		(V4L2_CID_DV_CLASS_BASE + 3) +#define	V4L2_CID_DV_TX_MODE			(V4L2_CID_DV_CLASS_BASE + 4) +enum v4l2_dv_tx_mode { +	V4L2_DV_TX_MODE_DVI_D	= 0, +	V4L2_DV_TX_MODE_HDMI	= 1, +}; +#define V4L2_CID_DV_TX_RGB_RANGE		(V4L2_CID_DV_CLASS_BASE + 5) +enum v4l2_dv_rgb_range { +	V4L2_DV_RGB_RANGE_AUTO	  = 0, +	V4L2_DV_RGB_RANGE_LIMITED = 1, +	V4L2_DV_RGB_RANGE_FULL	  = 2, +}; + +#define	V4L2_CID_DV_RX_POWER_PRESENT		(V4L2_CID_DV_CLASS_BASE + 100) +#define V4L2_CID_DV_RX_RGB_RANGE		(V4L2_CID_DV_CLASS_BASE + 101) + +/* + *	T U N I N G + */ +struct v4l2_tuner { +	__u32                   index; +	__u8			name[32]; +	__u32			type;	/* enum v4l2_tuner_type */ +	__u32			capability; +	__u32			rangelow; +	__u32			rangehigh; +	__u32			rxsubchans; +	__u32			audmode; +	__s32			signal; +	__s32			afc; +	__u32			reserved[4]; +}; + +struct v4l2_modulator { +	__u32			index; +	__u8			name[32]; +	__u32			capability; +	__u32			rangelow; +	__u32			rangehigh; +	__u32			txsubchans; +	__u32			reserved[4]; +}; + +/*  Flags for the 'capability' field */ +#define V4L2_TUNER_CAP_LOW		0x0001 +#define V4L2_TUNER_CAP_NORM		0x0002 +#define V4L2_TUNER_CAP_HWSEEK_BOUNDED	0x0004 +#define V4L2_TUNER_CAP_HWSEEK_WRAP	0x0008 +#define V4L2_TUNER_CAP_STEREO		0x0010 +#define V4L2_TUNER_CAP_LANG2		0x0020 +#define V4L2_TUNER_CAP_SAP		0x0020 +#define V4L2_TUNER_CAP_LANG1		0x0040 +#define V4L2_TUNER_CAP_RDS		0x0080 +#define V4L2_TUNER_CAP_RDS_BLOCK_IO	0x0100 +#define V4L2_TUNER_CAP_RDS_CONTROLS	0x0200 +#define V4L2_TUNER_CAP_FREQ_BANDS	0x0400 +#define V4L2_TUNER_CAP_HWSEEK_PROG_LIM	0x0800 + +/*  Flags for the 'rxsubchans' field */ +#define V4L2_TUNER_SUB_MONO		0x0001 +#define V4L2_TUNER_SUB_STEREO		0x0002 +#define V4L2_TUNER_SUB_LANG2		0x0004 +#define V4L2_TUNER_SUB_SAP		0x0004 +#define V4L2_TUNER_SUB_LANG1		0x0008 +#define V4L2_TUNER_SUB_RDS		0x0010 + +/*  Values for the 'audmode' field */ +#define V4L2_TUNER_MODE_MONO		0x0000 +#define V4L2_TUNER_MODE_STEREO		0x0001 +#define V4L2_TUNER_MODE_LANG2		0x0002 +#define V4L2_TUNER_MODE_SAP		0x0002 +#define V4L2_TUNER_MODE_LANG1		0x0003 +#define V4L2_TUNER_MODE_LANG1_LANG2	0x0004 + +struct v4l2_frequency { +	__u32	tuner; +	__u32	type;	/* enum v4l2_tuner_type */ +	__u32	frequency; +	__u32	reserved[8]; +}; + +#define V4L2_BAND_MODULATION_VSB	(1 << 1) +#define V4L2_BAND_MODULATION_FM		(1 << 2) +#define V4L2_BAND_MODULATION_AM		(1 << 3) + +struct v4l2_frequency_band { +	__u32	tuner; +	__u32	type;	/* enum v4l2_tuner_type */ +	__u32	index; +	__u32	capability; +	__u32	rangelow; +	__u32	rangehigh; +	__u32	modulation; +	__u32	reserved[9]; +}; + +struct v4l2_hw_freq_seek { +	__u32	tuner; +	__u32	type;	/* enum v4l2_tuner_type */ +	__u32	seek_upward; +	__u32	wrap_around; +	__u32	spacing; +	__u32	rangelow; +	__u32	rangehigh; +	__u32	reserved[5]; +}; + +/* + *	R D S + */ + +struct v4l2_rds_data { +	__u8 	lsb; +	__u8 	msb; +	__u8 	block; +} __attribute__ ((packed)); + +#define V4L2_RDS_BLOCK_MSK 	 0x7 +#define V4L2_RDS_BLOCK_A 	 0 +#define V4L2_RDS_BLOCK_B 	 1 +#define V4L2_RDS_BLOCK_C 	 2 +#define V4L2_RDS_BLOCK_D 	 3 +#define V4L2_RDS_BLOCK_C_ALT 	 4 +#define V4L2_RDS_BLOCK_INVALID 	 7 + +#define V4L2_RDS_BLOCK_CORRECTED 0x40 +#define V4L2_RDS_BLOCK_ERROR 	 0x80 + +/* + *	A U D I O + */ +struct v4l2_audio { +	__u32	index; +	__u8	name[32]; +	__u32	capability; +	__u32	mode; +	__u32	reserved[2]; +}; + +/*  Flags for the 'capability' field */ +#define V4L2_AUDCAP_STEREO		0x00001 +#define V4L2_AUDCAP_AVL			0x00002 + +/*  Flags for the 'mode' field */ +#define V4L2_AUDMODE_AVL		0x00001 + +struct v4l2_audioout { +	__u32	index; +	__u8	name[32]; +	__u32	capability; +	__u32	mode; +	__u32	reserved[2]; +}; + +/* + *	M P E G   S E R V I C E S + * + *	NOTE: EXPERIMENTAL API + */ +#if 1 +#define V4L2_ENC_IDX_FRAME_I    (0) +#define V4L2_ENC_IDX_FRAME_P    (1) +#define V4L2_ENC_IDX_FRAME_B    (2) +#define V4L2_ENC_IDX_FRAME_MASK (0xf) + +struct v4l2_enc_idx_entry { +	__u64 offset; +	__u64 pts; +	__u32 length; +	__u32 flags; +	__u32 reserved[2]; +}; + +#define V4L2_ENC_IDX_ENTRIES (64) +struct v4l2_enc_idx { +	__u32 entries; +	__u32 entries_cap; +	__u32 reserved[4]; +	struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES]; +}; + + +#define V4L2_ENC_CMD_START      (0) +#define V4L2_ENC_CMD_STOP       (1) +#define V4L2_ENC_CMD_PAUSE      (2) +#define V4L2_ENC_CMD_RESUME     (3) + +/* Flags for V4L2_ENC_CMD_STOP */ +#define V4L2_ENC_CMD_STOP_AT_GOP_END    (1 << 0) + +struct v4l2_encoder_cmd { +	__u32 cmd; +	__u32 flags; +	union { +		struct { +			__u32 data[8]; +		} raw; +	}; +}; + +/* Decoder commands */ +#define V4L2_DEC_CMD_START       (0) +#define V4L2_DEC_CMD_STOP        (1) +#define V4L2_DEC_CMD_PAUSE       (2) +#define V4L2_DEC_CMD_RESUME      (3) + +/* Flags for V4L2_DEC_CMD_START */ +#define V4L2_DEC_CMD_START_MUTE_AUDIO	(1 << 0) + +/* Flags for V4L2_DEC_CMD_PAUSE */ +#define V4L2_DEC_CMD_PAUSE_TO_BLACK	(1 << 0) + +/* Flags for V4L2_DEC_CMD_STOP */ +#define V4L2_DEC_CMD_STOP_TO_BLACK	(1 << 0) +#define V4L2_DEC_CMD_STOP_IMMEDIATELY	(1 << 1) + +/* Play format requirements (returned by the driver): */ + +/* The decoder has no special format requirements */ +#define V4L2_DEC_START_FMT_NONE		(0) +/* The decoder requires full GOPs */ +#define V4L2_DEC_START_FMT_GOP		(1) + +/* The structure must be zeroed before use by the application +   This ensures it can be extended safely in the future. */ +struct v4l2_decoder_cmd { +	__u32 cmd; +	__u32 flags; +	union { +		struct { +			__u64 pts; +		} stop; + +		struct { +			/* 0 or 1000 specifies normal speed, +			   1 specifies forward single stepping, +			   -1 specifies backward single stepping, +			   >1: playback at speed/1000 of the normal speed, +			   <-1: reverse playback at (-speed/1000) of the normal speed. */ +			__s32 speed; +			__u32 format; +		} start; + +		struct { +			__u32 data[16]; +		} raw; +	}; +}; +#endif + + +/* + *	D A T A   S E R V I C E S   ( V B I ) + * + *	Data services API by Michael Schimek + */ + +/* Raw VBI */ +struct v4l2_vbi_format { +	__u32	sampling_rate;		/* in 1 Hz */ +	__u32	offset; +	__u32	samples_per_line; +	__u32	sample_format;		/* V4L2_PIX_FMT_* */ +	__s32	start[2]; +	__u32	count[2]; +	__u32	flags;			/* V4L2_VBI_* */ +	__u32	reserved[2];		/* must be zero */ +}; + +/*  VBI flags  */ +#define V4L2_VBI_UNSYNC		(1 << 0) +#define V4L2_VBI_INTERLACED	(1 << 1) + +/* Sliced VBI + * + *    This implements is a proposal V4L2 API to allow SLICED VBI + * required for some hardware encoders. It should change without + * notice in the definitive implementation. + */ + +struct v4l2_sliced_vbi_format { +	__u16   service_set; +	/* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field +	   service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field +				 (equals frame lines 313-336 for 625 line video +				  standards, 263-286 for 525 line standards) */ +	__u16   service_lines[2][24]; +	__u32   io_size; +	__u32   reserved[2];            /* must be zero */ +}; + +/* Teletext World System Teletext +   (WST), defined on ITU-R BT.653-2 */ +#define V4L2_SLICED_TELETEXT_B          (0x0001) +/* Video Program System, defined on ETS 300 231*/ +#define V4L2_SLICED_VPS                 (0x0400) +/* Closed Caption, defined on EIA-608 */ +#define V4L2_SLICED_CAPTION_525         (0x1000) +/* Wide Screen System, defined on ITU-R BT1119.1 */ +#define V4L2_SLICED_WSS_625             (0x4000) + +#define V4L2_SLICED_VBI_525             (V4L2_SLICED_CAPTION_525) +#define V4L2_SLICED_VBI_625             (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625) + +struct v4l2_sliced_vbi_cap { +	__u16   service_set; +	/* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field +	   service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field +				 (equals frame lines 313-336 for 625 line video +				  standards, 263-286 for 525 line standards) */ +	__u16   service_lines[2][24]; +	__u32	type;		/* enum v4l2_buf_type */ +	__u32   reserved[3];    /* must be 0 */ +}; + +struct v4l2_sliced_vbi_data { +	__u32   id; +	__u32   field;          /* 0: first field, 1: second field */ +	__u32   line;           /* 1-23 */ +	__u32   reserved;       /* must be 0 */ +	__u8    data[48]; +}; + +/* + * Sliced VBI data inserted into MPEG Streams + */ + +/* + * V4L2_MPEG_STREAM_VBI_FMT_IVTV: + * + * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an + * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI + * data + * + * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header + * definitions are not included here.  See the MPEG-2 specifications for details + * on these headers. + */ + +/* Line type IDs */ +#define V4L2_MPEG_VBI_IVTV_TELETEXT_B     (1) +#define V4L2_MPEG_VBI_IVTV_CAPTION_525    (4) +#define V4L2_MPEG_VBI_IVTV_WSS_625        (5) +#define V4L2_MPEG_VBI_IVTV_VPS            (7) + +struct v4l2_mpeg_vbi_itv0_line { +	__u8 id;	/* One of V4L2_MPEG_VBI_IVTV_* above */ +	__u8 data[42];	/* Sliced VBI data for the line */ +} __attribute__ ((packed)); + +struct v4l2_mpeg_vbi_itv0 { +	__le32 linemask[2]; /* Bitmasks of VBI service lines present */ +	struct v4l2_mpeg_vbi_itv0_line line[35]; +} __attribute__ ((packed)); + +struct v4l2_mpeg_vbi_ITV0 { +	struct v4l2_mpeg_vbi_itv0_line line[36]; +} __attribute__ ((packed)); + +#define V4L2_MPEG_VBI_IVTV_MAGIC0	"itv0" +#define V4L2_MPEG_VBI_IVTV_MAGIC1	"ITV0" + +struct v4l2_mpeg_vbi_fmt_ivtv { +	__u8 magic[4]; +	union { +		struct v4l2_mpeg_vbi_itv0 itv0; +		struct v4l2_mpeg_vbi_ITV0 ITV0; +	}; +} __attribute__ ((packed)); + +/* + *	A G G R E G A T E   S T R U C T U R E S + */ + +/** + * struct v4l2_plane_pix_format - additional, per-plane format definition + * @sizeimage:		maximum size in bytes required for data, for which + *			this plane will be used + * @bytesperline:	distance in bytes between the leftmost pixels in two + *			adjacent lines + */ +struct v4l2_plane_pix_format { +	__u32		sizeimage; +	__u16		bytesperline; +	__u16		reserved[7]; +} __attribute__ ((packed)); + +/** + * struct v4l2_pix_format_mplane - multiplanar format definition + * @width:		image width in pixels + * @height:		image height in pixels + * @pixelformat:	little endian four character code (fourcc) + * @field:		enum v4l2_field; field order (for interlaced video) + * @colorspace:		enum v4l2_colorspace; supplemental to pixelformat + * @plane_fmt:		per-plane information + * @num_planes:		number of planes for this format + */ +struct v4l2_pix_format_mplane { +	__u32				width; +	__u32				height; +	__u32				pixelformat; +	__u32				field; +	__u32				colorspace; + +	struct v4l2_plane_pix_format	plane_fmt[VIDEO_MAX_PLANES]; +	__u8				num_planes; +	__u8				reserved[11]; +} __attribute__ ((packed)); + +/** + * struct v4l2_format - stream data format + * @type:	enum v4l2_buf_type; type of the data stream + * @pix:	definition of an image format + * @pix_mp:	definition of a multiplanar image format + * @win:	definition of an overlaid image + * @vbi:	raw VBI capture or output parameters + * @sliced:	sliced VBI capture or output parameters + * @raw_data:	placeholder for future extensions and custom formats + */ +struct v4l2_format { +	__u32	 type; +	union { +		struct v4l2_pix_format		pix;     /* V4L2_BUF_TYPE_VIDEO_CAPTURE */ +		struct v4l2_pix_format_mplane	pix_mp;  /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */ +		struct v4l2_window		win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */ +		struct v4l2_vbi_format		vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */ +		struct v4l2_sliced_vbi_format	sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */ +		__u8	raw_data[200];                   /* user-defined */ +	} fmt; +}; + +/*	Stream type-dependent parameters + */ +struct v4l2_streamparm { +	__u32	 type;			/* enum v4l2_buf_type */ +	union { +		struct v4l2_captureparm	capture; +		struct v4l2_outputparm	output; +		__u8	raw_data[200];  /* user-defined */ +	} parm; +}; + +/* + *	E V E N T S + */ + +#define V4L2_EVENT_ALL				0 +#define V4L2_EVENT_VSYNC			1 +#define V4L2_EVENT_EOS				2 +#define V4L2_EVENT_CTRL				3 +#define V4L2_EVENT_FRAME_SYNC			4 +#define V4L2_EVENT_PRIVATE_START		0x08000000 + +/* Payload for V4L2_EVENT_VSYNC */ +struct v4l2_event_vsync { +	/* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */ +	__u8 field; +} __attribute__ ((packed)); + +/* Payload for V4L2_EVENT_CTRL */ +#define V4L2_EVENT_CTRL_CH_VALUE		(1 << 0) +#define V4L2_EVENT_CTRL_CH_FLAGS		(1 << 1) + +struct v4l2_event_ctrl { +	__u32 changes; +	__u32 type; +	union { +		__s32 value; +		__s64 value64; +	}; +	__u32 flags; +	__s32 minimum; +	__s32 maximum; +	__s32 step; +	__s32 default_value; +}; + +struct v4l2_event_frame_sync { +	__u32 frame_sequence; +}; + +struct v4l2_event { +	__u32				type; +	union { +		struct v4l2_event_vsync		vsync; +		struct v4l2_event_ctrl		ctrl; +		struct v4l2_event_frame_sync	frame_sync; +		__u8				data[64]; +	} u; +	__u32				pending; +	__u32				sequence; +	struct timespec			timestamp; +	__u32				id; +	__u32				reserved[8]; +}; + +#define V4L2_EVENT_SUB_FL_SEND_INITIAL		(1 << 0) +#define V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK	(1 << 1) + +struct v4l2_event_subscription { +	__u32				type; +	__u32				id; +	__u32				flags; +	__u32				reserved[5]; +}; + +/* + *	A D V A N C E D   D E B U G G I N G + * + *	NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS! + *	FOR DEBUGGING, TESTING AND INTERNAL USE ONLY! + */ + +/* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */ + +#define V4L2_CHIP_MATCH_HOST       0  /* Match against chip ID on host (0 for the host) */ +#define V4L2_CHIP_MATCH_I2C_DRIVER 1  /* Match against I2C driver name */ +#define V4L2_CHIP_MATCH_I2C_ADDR   2  /* Match against I2C 7-bit address */ +#define V4L2_CHIP_MATCH_AC97       3  /* Match against anciliary AC97 chip */ + +struct v4l2_dbg_match { +	__u32 type; /* Match type */ +	union {     /* Match this chip, meaning determined by type */ +		__u32 addr; +		char name[32]; +	}; +} __attribute__ ((packed)); + +struct v4l2_dbg_register { +	struct v4l2_dbg_match match; +	__u32 size;	/* register size in bytes */ +	__u64 reg; +	__u64 val; +} __attribute__ ((packed)); + +/* VIDIOC_DBG_G_CHIP_IDENT */ +struct v4l2_dbg_chip_ident { +	struct v4l2_dbg_match match; +	__u32 ident;       /* chip identifier as specified in <media/v4l2-chip-ident.h> */ +	__u32 revision;    /* chip revision, chip specific */ +} __attribute__ ((packed)); + +/** + * struct v4l2_create_buffers - VIDIOC_CREATE_BUFS argument + * @index:	on return, index of the first created buffer + * @count:	entry: number of requested buffers, + *		return: number of created buffers + * @memory:	enum v4l2_memory; buffer memory type + * @format:	frame format, for which buffers are requested + * @reserved:	future extensions + */ +struct v4l2_create_buffers { +	__u32			index; +	__u32			count; +	__u32			memory; +	struct v4l2_format	format; +	__u32			reserved[8]; +}; + +/* + *	I O C T L   C O D E S   F O R   V I D E O   D E V I C E S + * + */ +#define VIDIOC_QUERYCAP		 _IOR('V',  0, struct v4l2_capability) +#define VIDIOC_RESERVED		  _IO('V',  1) +#define VIDIOC_ENUM_FMT         _IOWR('V',  2, struct v4l2_fmtdesc) +#define VIDIOC_G_FMT		_IOWR('V',  4, struct v4l2_format) +#define VIDIOC_S_FMT		_IOWR('V',  5, struct v4l2_format) +#define VIDIOC_REQBUFS		_IOWR('V',  8, struct v4l2_requestbuffers) +#define VIDIOC_QUERYBUF		_IOWR('V',  9, struct v4l2_buffer) +#define VIDIOC_G_FBUF		 _IOR('V', 10, struct v4l2_framebuffer) +#define VIDIOC_S_FBUF		 _IOW('V', 11, struct v4l2_framebuffer) +#define VIDIOC_OVERLAY		 _IOW('V', 14, int) +#define VIDIOC_QBUF		_IOWR('V', 15, struct v4l2_buffer) +#define VIDIOC_DQBUF		_IOWR('V', 17, struct v4l2_buffer) +#define VIDIOC_STREAMON		 _IOW('V', 18, int) +#define VIDIOC_STREAMOFF	 _IOW('V', 19, int) +#define VIDIOC_G_PARM		_IOWR('V', 21, struct v4l2_streamparm) +#define VIDIOC_S_PARM		_IOWR('V', 22, struct v4l2_streamparm) +#define VIDIOC_G_STD		 _IOR('V', 23, v4l2_std_id) +#define VIDIOC_S_STD		 _IOW('V', 24, v4l2_std_id) +#define VIDIOC_ENUMSTD		_IOWR('V', 25, struct v4l2_standard) +#define VIDIOC_ENUMINPUT	_IOWR('V', 26, struct v4l2_input) +#define VIDIOC_G_CTRL		_IOWR('V', 27, struct v4l2_control) +#define VIDIOC_S_CTRL		_IOWR('V', 28, struct v4l2_control) +#define VIDIOC_G_TUNER		_IOWR('V', 29, struct v4l2_tuner) +#define VIDIOC_S_TUNER		 _IOW('V', 30, struct v4l2_tuner) +#define VIDIOC_G_AUDIO		 _IOR('V', 33, struct v4l2_audio) +#define VIDIOC_S_AUDIO		 _IOW('V', 34, struct v4l2_audio) +#define VIDIOC_QUERYCTRL	_IOWR('V', 36, struct v4l2_queryctrl) +#define VIDIOC_QUERYMENU	_IOWR('V', 37, struct v4l2_querymenu) +#define VIDIOC_G_INPUT		 _IOR('V', 38, int) +#define VIDIOC_S_INPUT		_IOWR('V', 39, int) +#define VIDIOC_G_OUTPUT		 _IOR('V', 46, int) +#define VIDIOC_S_OUTPUT		_IOWR('V', 47, int) +#define VIDIOC_ENUMOUTPUT	_IOWR('V', 48, struct v4l2_output) +#define VIDIOC_G_AUDOUT		 _IOR('V', 49, struct v4l2_audioout) +#define VIDIOC_S_AUDOUT		 _IOW('V', 50, struct v4l2_audioout) +#define VIDIOC_G_MODULATOR	_IOWR('V', 54, struct v4l2_modulator) +#define VIDIOC_S_MODULATOR	 _IOW('V', 55, struct v4l2_modulator) +#define VIDIOC_G_FREQUENCY	_IOWR('V', 56, struct v4l2_frequency) +#define VIDIOC_S_FREQUENCY	 _IOW('V', 57, struct v4l2_frequency) +#define VIDIOC_CROPCAP		_IOWR('V', 58, struct v4l2_cropcap) +#define VIDIOC_G_CROP		_IOWR('V', 59, struct v4l2_crop) +#define VIDIOC_S_CROP		 _IOW('V', 60, struct v4l2_crop) +#define VIDIOC_G_JPEGCOMP	 _IOR('V', 61, struct v4l2_jpegcompression) +#define VIDIOC_S_JPEGCOMP	 _IOW('V', 62, struct v4l2_jpegcompression) +#define VIDIOC_QUERYSTD      	 _IOR('V', 63, v4l2_std_id) +#define VIDIOC_TRY_FMT      	_IOWR('V', 64, struct v4l2_format) +#define VIDIOC_ENUMAUDIO	_IOWR('V', 65, struct v4l2_audio) +#define VIDIOC_ENUMAUDOUT	_IOWR('V', 66, struct v4l2_audioout) +#define VIDIOC_G_PRIORITY	 _IOR('V', 67, __u32) /* enum v4l2_priority */ +#define VIDIOC_S_PRIORITY	 _IOW('V', 68, __u32) /* enum v4l2_priority */ +#define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap) +#define VIDIOC_LOG_STATUS         _IO('V', 70) +#define VIDIOC_G_EXT_CTRLS	_IOWR('V', 71, struct v4l2_ext_controls) +#define VIDIOC_S_EXT_CTRLS	_IOWR('V', 72, struct v4l2_ext_controls) +#define VIDIOC_TRY_EXT_CTRLS	_IOWR('V', 73, struct v4l2_ext_controls) +#if 1 +#define VIDIOC_ENUM_FRAMESIZES	_IOWR('V', 74, struct v4l2_frmsizeenum) +#define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum) +#define VIDIOC_G_ENC_INDEX       _IOR('V', 76, struct v4l2_enc_idx) +#define VIDIOC_ENCODER_CMD      _IOWR('V', 77, struct v4l2_encoder_cmd) +#define VIDIOC_TRY_ENCODER_CMD  _IOWR('V', 78, struct v4l2_encoder_cmd) +#endif + +#if 1 +/* Experimental, meant for debugging, testing and internal use. +   Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined. +   You must be root to use these ioctls. Never use these in applications! */ +#define	VIDIOC_DBG_S_REGISTER 	 _IOW('V', 79, struct v4l2_dbg_register) +#define	VIDIOC_DBG_G_REGISTER 	_IOWR('V', 80, struct v4l2_dbg_register) + +/* Experimental, meant for debugging, testing and internal use. +   Never use this ioctl in applications! */ +#define VIDIOC_DBG_G_CHIP_IDENT _IOWR('V', 81, struct v4l2_dbg_chip_ident) +#endif + +#define VIDIOC_S_HW_FREQ_SEEK	 _IOW('V', 82, struct v4l2_hw_freq_seek) + +/* These four DV Preset ioctls are deprecated in favor of the DV Timings +   ioctls. */ +#define	VIDIOC_ENUM_DV_PRESETS	_IOWR('V', 83, struct v4l2_dv_enum_preset) +#define	VIDIOC_S_DV_PRESET	_IOWR('V', 84, struct v4l2_dv_preset) +#define	VIDIOC_G_DV_PRESET	_IOWR('V', 85, struct v4l2_dv_preset) +#define	VIDIOC_QUERY_DV_PRESET	_IOR('V',  86, struct v4l2_dv_preset) +#define	VIDIOC_S_DV_TIMINGS	_IOWR('V', 87, struct v4l2_dv_timings) +#define	VIDIOC_G_DV_TIMINGS	_IOWR('V', 88, struct v4l2_dv_timings) +#define	VIDIOC_DQEVENT		 _IOR('V', 89, struct v4l2_event) +#define	VIDIOC_SUBSCRIBE_EVENT	 _IOW('V', 90, struct v4l2_event_subscription) +#define	VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription) + +/* Experimental, the below two ioctls may change over the next couple of kernel +   versions */ +#define VIDIOC_CREATE_BUFS	_IOWR('V', 92, struct v4l2_create_buffers) +#define VIDIOC_PREPARE_BUF	_IOWR('V', 93, struct v4l2_buffer) + +/* Experimental selection API */ +#define VIDIOC_G_SELECTION	_IOWR('V', 94, struct v4l2_selection) +#define VIDIOC_S_SELECTION	_IOWR('V', 95, struct v4l2_selection) + +/* Experimental, these two ioctls may change over the next couple of kernel +   versions. */ +#define VIDIOC_DECODER_CMD	_IOWR('V', 96, struct v4l2_decoder_cmd) +#define VIDIOC_TRY_DECODER_CMD	_IOWR('V', 97, struct v4l2_decoder_cmd) + +/* Experimental, these three ioctls may change over the next couple of kernel +   versions. */ +#define VIDIOC_ENUM_DV_TIMINGS  _IOWR('V', 98, struct v4l2_enum_dv_timings) +#define VIDIOC_QUERY_DV_TIMINGS  _IOR('V', 99, struct v4l2_dv_timings) +#define VIDIOC_DV_TIMINGS_CAP   _IOWR('V', 100, struct v4l2_dv_timings_cap) + +/* Experimental, this ioctl may change over the next couple of kernel +   versions. */ +#define VIDIOC_ENUM_FREQ_BANDS	_IOWR('V', 101, struct v4l2_frequency_band) + +/* Reminder: when adding new ioctls please add support for them to +   drivers/media/video/v4l2-compat-ioctl32.c as well! */ + +#define BASE_VIDIOC_PRIVATE	192		/* 192-255 are private */ + +#endif /* _UAPI__LINUX_VIDEODEV2_H */ diff --git a/include/uapi/linux/virtio_9p.h b/include/uapi/linux/virtio_9p.h new file mode 100644 index 00000000000..277c4ad44e8 --- /dev/null +++ b/include/uapi/linux/virtio_9p.h @@ -0,0 +1,44 @@ +#ifndef _LINUX_VIRTIO_9P_H +#define _LINUX_VIRTIO_9P_H +/* This header is BSD licensed so anyone can use the definitions to implement + * compatible drivers/servers. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the name of IBM nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. */ +#include <linux/types.h> +#include <linux/virtio_ids.h> +#include <linux/virtio_config.h> + +/* The feature bitmap for virtio 9P */ + +/* The mount point is specified in a config variable */ +#define VIRTIO_9P_MOUNT_TAG 0 + +struct virtio_9p_config { +	/* length of the tag name */ +	__u16 tag_len; +	/* non-NULL terminated tag name */ +	__u8 tag[0]; +} __attribute__((packed)); + +#endif /* _LINUX_VIRTIO_9P_H */ diff --git a/include/uapi/linux/virtio_balloon.h b/include/uapi/linux/virtio_balloon.h new file mode 100644 index 00000000000..652dc8bea92 --- /dev/null +++ b/include/uapi/linux/virtio_balloon.h @@ -0,0 +1,59 @@ +#ifndef _LINUX_VIRTIO_BALLOON_H +#define _LINUX_VIRTIO_BALLOON_H +/* This header is BSD licensed so anyone can use the definitions to implement + * compatible drivers/servers. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the name of IBM nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. */ +#include <linux/virtio_ids.h> +#include <linux/virtio_config.h> + +/* The feature bitmap for virtio balloon */ +#define VIRTIO_BALLOON_F_MUST_TELL_HOST	0 /* Tell before reclaiming pages */ +#define VIRTIO_BALLOON_F_STATS_VQ	1 /* Memory Stats virtqueue */ + +/* Size of a PFN in the balloon interface. */ +#define VIRTIO_BALLOON_PFN_SHIFT 12 + +struct virtio_balloon_config +{ +	/* Number of pages host wants Guest to give up. */ +	__le32 num_pages; +	/* Number of pages we've actually got in balloon. */ +	__le32 actual; +}; + +#define VIRTIO_BALLOON_S_SWAP_IN  0   /* Amount of memory swapped in */ +#define VIRTIO_BALLOON_S_SWAP_OUT 1   /* Amount of memory swapped out */ +#define VIRTIO_BALLOON_S_MAJFLT   2   /* Number of major faults */ +#define VIRTIO_BALLOON_S_MINFLT   3   /* Number of minor faults */ +#define VIRTIO_BALLOON_S_MEMFREE  4   /* Total amount of free memory */ +#define VIRTIO_BALLOON_S_MEMTOT   5   /* Total amount of memory */ +#define VIRTIO_BALLOON_S_NR       6 + +struct virtio_balloon_stat { +	u16 tag; +	u64 val; +} __attribute__((packed)); + +#endif /* _LINUX_VIRTIO_BALLOON_H */ diff --git a/include/uapi/linux/virtio_blk.h b/include/uapi/linux/virtio_blk.h new file mode 100644 index 00000000000..6d8e61c4856 --- /dev/null +++ b/include/uapi/linux/virtio_blk.h @@ -0,0 +1,130 @@ +#ifndef _LINUX_VIRTIO_BLK_H +#define _LINUX_VIRTIO_BLK_H +/* This header is BSD licensed so anyone can use the definitions to implement + * compatible drivers/servers. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the name of IBM nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. */ +#include <linux/types.h> +#include <linux/virtio_ids.h> +#include <linux/virtio_config.h> + +/* Feature bits */ +#define VIRTIO_BLK_F_BARRIER	0	/* Does host support barriers? */ +#define VIRTIO_BLK_F_SIZE_MAX	1	/* Indicates maximum segment size */ +#define VIRTIO_BLK_F_SEG_MAX	2	/* Indicates maximum # of segments */ +#define VIRTIO_BLK_F_GEOMETRY	4	/* Legacy geometry available  */ +#define VIRTIO_BLK_F_RO		5	/* Disk is read-only */ +#define VIRTIO_BLK_F_BLK_SIZE	6	/* Block size of disk is available*/ +#define VIRTIO_BLK_F_SCSI	7	/* Supports scsi command passthru */ +#define VIRTIO_BLK_F_WCE	9	/* Writeback mode enabled after reset */ +#define VIRTIO_BLK_F_TOPOLOGY	10	/* Topology information is available */ +#define VIRTIO_BLK_F_CONFIG_WCE	11	/* Writeback mode available in config */ + +#ifndef __KERNEL__ +/* Old (deprecated) name for VIRTIO_BLK_F_WCE. */ +#define VIRTIO_BLK_F_FLUSH VIRTIO_BLK_F_WCE +#endif + +#define VIRTIO_BLK_ID_BYTES	20	/* ID string length */ + +struct virtio_blk_config { +	/* The capacity (in 512-byte sectors). */ +	__u64 capacity; +	/* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */ +	__u32 size_max; +	/* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */ +	__u32 seg_max; +	/* geometry the device (if VIRTIO_BLK_F_GEOMETRY) */ +	struct virtio_blk_geometry { +		__u16 cylinders; +		__u8 heads; +		__u8 sectors; +	} geometry; + +	/* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */ +	__u32 blk_size; + +	/* the next 4 entries are guarded by VIRTIO_BLK_F_TOPOLOGY  */ +	/* exponent for physical block per logical block. */ +	__u8 physical_block_exp; +	/* alignment offset in logical blocks. */ +	__u8 alignment_offset; +	/* minimum I/O size without performance penalty in logical blocks. */ +	__u16 min_io_size; +	/* optimal sustained I/O size in logical blocks. */ +	__u32 opt_io_size; + +	/* writeback mode (if VIRTIO_BLK_F_CONFIG_WCE) */ +	__u8 wce; +} __attribute__((packed)); + +/* + * Command types + * + * Usage is a bit tricky as some bits are used as flags and some are not. + * + * Rules: + *   VIRTIO_BLK_T_OUT may be combined with VIRTIO_BLK_T_SCSI_CMD or + *   VIRTIO_BLK_T_BARRIER.  VIRTIO_BLK_T_FLUSH is a command of its own + *   and may not be combined with any of the other flags. + */ + +/* These two define direction. */ +#define VIRTIO_BLK_T_IN		0 +#define VIRTIO_BLK_T_OUT	1 + +/* This bit says it's a scsi command, not an actual read or write. */ +#define VIRTIO_BLK_T_SCSI_CMD	2 + +/* Cache flush command */ +#define VIRTIO_BLK_T_FLUSH	4 + +/* Get device ID command */ +#define VIRTIO_BLK_T_GET_ID    8 + +/* Barrier before this op. */ +#define VIRTIO_BLK_T_BARRIER	0x80000000 + +/* This is the first element of the read scatter-gather list. */ +struct virtio_blk_outhdr { +	/* VIRTIO_BLK_T* */ +	__u32 type; +	/* io priority. */ +	__u32 ioprio; +	/* Sector (ie. 512 byte offset) */ +	__u64 sector; +}; + +struct virtio_scsi_inhdr { +	__u32 errors; +	__u32 data_len; +	__u32 sense_len; +	__u32 residual; +}; + +/* And this is the final byte of the write scatter-gather list. */ +#define VIRTIO_BLK_S_OK		0 +#define VIRTIO_BLK_S_IOERR	1 +#define VIRTIO_BLK_S_UNSUPP	2 +#endif /* _LINUX_VIRTIO_BLK_H */ diff --git a/include/uapi/linux/virtio_config.h b/include/uapi/linux/virtio_config.h new file mode 100644 index 00000000000..b7cda390fd0 --- /dev/null +++ b/include/uapi/linux/virtio_config.h @@ -0,0 +1,54 @@ +#ifndef _UAPI_LINUX_VIRTIO_CONFIG_H +#define _UAPI_LINUX_VIRTIO_CONFIG_H +/* This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so + * anyone can use the definitions to implement compatible drivers/servers. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the name of IBM nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. */ + +/* Virtio devices use a standardized configuration space to define their + * features and pass configuration information, but each implementation can + * store and access that space differently. */ +#include <linux/types.h> + +/* Status byte for guest to report progress, and synchronize features. */ +/* We have seen device and processed generic fields (VIRTIO_CONFIG_F_VIRTIO) */ +#define VIRTIO_CONFIG_S_ACKNOWLEDGE	1 +/* We have found a driver for the device. */ +#define VIRTIO_CONFIG_S_DRIVER		2 +/* Driver has used its parts of the config, and is happy */ +#define VIRTIO_CONFIG_S_DRIVER_OK	4 +/* We've given up on this device. */ +#define VIRTIO_CONFIG_S_FAILED		0x80 + +/* Some virtio feature bits (currently bits 28 through 31) are reserved for the + * transport being used (eg. virtio_ring), the rest are per-device feature + * bits. */ +#define VIRTIO_TRANSPORT_F_START	28 +#define VIRTIO_TRANSPORT_F_END		32 + +/* Do we get callbacks when the ring is completely used, even if we've + * suppressed them? */ +#define VIRTIO_F_NOTIFY_ON_EMPTY	24 + +#endif /* _UAPI_LINUX_VIRTIO_CONFIG_H */ diff --git a/include/uapi/linux/virtio_console.h b/include/uapi/linux/virtio_console.h new file mode 100644 index 00000000000..ee13ab6c361 --- /dev/null +++ b/include/uapi/linux/virtio_console.h @@ -0,0 +1,74 @@ +/* + * This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so + * anyone can use the definitions to implement compatible drivers/servers: + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the name of IBM nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Copyright (C) Red Hat, Inc., 2009, 2010, 2011 + * Copyright (C) Amit Shah <amit.shah@redhat.com>, 2009, 2010, 2011 + */ +#ifndef _UAPI_LINUX_VIRTIO_CONSOLE_H +#define _UAPI_LINUX_VIRTIO_CONSOLE_H +#include <linux/types.h> +#include <linux/virtio_ids.h> +#include <linux/virtio_config.h> + +/* Feature bits */ +#define VIRTIO_CONSOLE_F_SIZE	0	/* Does host provide console size? */ +#define VIRTIO_CONSOLE_F_MULTIPORT 1	/* Does host provide multiple ports? */ + +#define VIRTIO_CONSOLE_BAD_ID		(~(u32)0) + +struct virtio_console_config { +	/* colums of the screens */ +	__u16 cols; +	/* rows of the screens */ +	__u16 rows; +	/* max. number of ports this device can hold */ +	__u32 max_nr_ports; +} __attribute__((packed)); + +/* + * A message that's passed between the Host and the Guest for a + * particular port. + */ +struct virtio_console_control { +	__u32 id;		/* Port number */ +	__u16 event;		/* The kind of control event (see below) */ +	__u16 value;		/* Extra information for the key */ +}; + +/* Some events for control messages */ +#define VIRTIO_CONSOLE_DEVICE_READY	0 +#define VIRTIO_CONSOLE_PORT_ADD		1 +#define VIRTIO_CONSOLE_PORT_REMOVE	2 +#define VIRTIO_CONSOLE_PORT_READY	3 +#define VIRTIO_CONSOLE_CONSOLE_PORT	4 +#define VIRTIO_CONSOLE_RESIZE		5 +#define VIRTIO_CONSOLE_PORT_OPEN	6 +#define VIRTIO_CONSOLE_PORT_NAME	7 + + +#endif /* _UAPI_LINUX_VIRTIO_CONSOLE_H */ diff --git a/include/uapi/linux/virtio_ids.h b/include/uapi/linux/virtio_ids.h new file mode 100644 index 00000000000..270fb22c581 --- /dev/null +++ b/include/uapi/linux/virtio_ids.h @@ -0,0 +1,41 @@ +#ifndef _LINUX_VIRTIO_IDS_H +#define _LINUX_VIRTIO_IDS_H +/* + * Virtio IDs + * + * This header is BSD licensed so anyone can use the definitions to implement + * compatible drivers/servers. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the name of IBM nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. */ + +#define VIRTIO_ID_NET		1 /* virtio net */ +#define VIRTIO_ID_BLOCK		2 /* virtio block */ +#define VIRTIO_ID_CONSOLE	3 /* virtio console */ +#define VIRTIO_ID_RNG		4 /* virtio rng */ +#define VIRTIO_ID_BALLOON	5 /* virtio balloon */ +#define VIRTIO_ID_RPMSG		7 /* virtio remote processor messaging */ +#define VIRTIO_ID_SCSI		8 /* virtio scsi */ +#define VIRTIO_ID_9P		9 /* 9p virtio console */ + +#endif /* _LINUX_VIRTIO_IDS_H */ diff --git a/include/uapi/linux/virtio_net.h b/include/uapi/linux/virtio_net.h new file mode 100644 index 00000000000..2470f541af5 --- /dev/null +++ b/include/uapi/linux/virtio_net.h @@ -0,0 +1,169 @@ +#ifndef _LINUX_VIRTIO_NET_H +#define _LINUX_VIRTIO_NET_H +/* This header is BSD licensed so anyone can use the definitions to implement + * compatible drivers/servers. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the name of IBM nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. */ +#include <linux/types.h> +#include <linux/virtio_ids.h> +#include <linux/virtio_config.h> +#include <linux/if_ether.h> + +/* The feature bitmap for virtio net */ +#define VIRTIO_NET_F_CSUM	0	/* Host handles pkts w/ partial csum */ +#define VIRTIO_NET_F_GUEST_CSUM	1	/* Guest handles pkts w/ partial csum */ +#define VIRTIO_NET_F_MAC	5	/* Host has given MAC address. */ +#define VIRTIO_NET_F_GSO	6	/* Host handles pkts w/ any GSO type */ +#define VIRTIO_NET_F_GUEST_TSO4	7	/* Guest can handle TSOv4 in. */ +#define VIRTIO_NET_F_GUEST_TSO6	8	/* Guest can handle TSOv6 in. */ +#define VIRTIO_NET_F_GUEST_ECN	9	/* Guest can handle TSO[6] w/ ECN in. */ +#define VIRTIO_NET_F_GUEST_UFO	10	/* Guest can handle UFO in. */ +#define VIRTIO_NET_F_HOST_TSO4	11	/* Host can handle TSOv4 in. */ +#define VIRTIO_NET_F_HOST_TSO6	12	/* Host can handle TSOv6 in. */ +#define VIRTIO_NET_F_HOST_ECN	13	/* Host can handle TSO[6] w/ ECN in. */ +#define VIRTIO_NET_F_HOST_UFO	14	/* Host can handle UFO in. */ +#define VIRTIO_NET_F_MRG_RXBUF	15	/* Host can merge receive buffers. */ +#define VIRTIO_NET_F_STATUS	16	/* virtio_net_config.status available */ +#define VIRTIO_NET_F_CTRL_VQ	17	/* Control channel available */ +#define VIRTIO_NET_F_CTRL_RX	18	/* Control channel RX mode support */ +#define VIRTIO_NET_F_CTRL_VLAN	19	/* Control channel VLAN filtering */ +#define VIRTIO_NET_F_CTRL_RX_EXTRA 20	/* Extra RX mode control support */ +#define VIRTIO_NET_F_GUEST_ANNOUNCE 21	/* Guest can announce device on the +					 * network */ + +#define VIRTIO_NET_S_LINK_UP	1	/* Link is up */ +#define VIRTIO_NET_S_ANNOUNCE	2	/* Announcement is needed */ + +struct virtio_net_config { +	/* The config defining mac address (if VIRTIO_NET_F_MAC) */ +	__u8 mac[6]; +	/* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */ +	__u16 status; +} __attribute__((packed)); + +/* This is the first element of the scatter-gather list.  If you don't + * specify GSO or CSUM features, you can simply ignore the header. */ +struct virtio_net_hdr { +#define VIRTIO_NET_HDR_F_NEEDS_CSUM	1	// Use csum_start, csum_offset +#define VIRTIO_NET_HDR_F_DATA_VALID	2	// Csum is valid +	__u8 flags; +#define VIRTIO_NET_HDR_GSO_NONE		0	// Not a GSO frame +#define VIRTIO_NET_HDR_GSO_TCPV4	1	// GSO frame, IPv4 TCP (TSO) +#define VIRTIO_NET_HDR_GSO_UDP		3	// GSO frame, IPv4 UDP (UFO) +#define VIRTIO_NET_HDR_GSO_TCPV6	4	// GSO frame, IPv6 TCP +#define VIRTIO_NET_HDR_GSO_ECN		0x80	// TCP has ECN set +	__u8 gso_type; +	__u16 hdr_len;		/* Ethernet + IP + tcp/udp hdrs */ +	__u16 gso_size;		/* Bytes to append to hdr_len per frame */ +	__u16 csum_start;	/* Position to start checksumming from */ +	__u16 csum_offset;	/* Offset after that to place checksum */ +}; + +/* This is the version of the header to use when the MRG_RXBUF + * feature has been negotiated. */ +struct virtio_net_hdr_mrg_rxbuf { +	struct virtio_net_hdr hdr; +	__u16 num_buffers;	/* Number of merged rx buffers */ +}; + +/* + * Control virtqueue data structures + * + * The control virtqueue expects a header in the first sg entry + * and an ack/status response in the last entry.  Data for the + * command goes in between. + */ +struct virtio_net_ctrl_hdr { +	__u8 class; +	__u8 cmd; +} __attribute__((packed)); + +typedef __u8 virtio_net_ctrl_ack; + +#define VIRTIO_NET_OK     0 +#define VIRTIO_NET_ERR    1 + +/* + * Control the RX mode, ie. promisucous, allmulti, etc... + * All commands require an "out" sg entry containing a 1 byte + * state value, zero = disable, non-zero = enable.  Commands + * 0 and 1 are supported with the VIRTIO_NET_F_CTRL_RX feature. + * Commands 2-5 are added with VIRTIO_NET_F_CTRL_RX_EXTRA. + */ +#define VIRTIO_NET_CTRL_RX    0 + #define VIRTIO_NET_CTRL_RX_PROMISC      0 + #define VIRTIO_NET_CTRL_RX_ALLMULTI     1 + #define VIRTIO_NET_CTRL_RX_ALLUNI       2 + #define VIRTIO_NET_CTRL_RX_NOMULTI      3 + #define VIRTIO_NET_CTRL_RX_NOUNI        4 + #define VIRTIO_NET_CTRL_RX_NOBCAST      5 + +/* + * Control the MAC filter table. + * + * The MAC filter table is managed by the hypervisor, the guest should + * assume the size is infinite.  Filtering should be considered + * non-perfect, ie. based on hypervisor resources, the guest may + * received packets from sources not specified in the filter list. + * + * In addition to the class/cmd header, the TABLE_SET command requires + * two out scatterlists.  Each contains a 4 byte count of entries followed + * by a concatenated byte stream of the ETH_ALEN MAC addresses.  The + * first sg list contains unicast addresses, the second is for multicast. + * This functionality is present if the VIRTIO_NET_F_CTRL_RX feature + * is available. + */ +struct virtio_net_ctrl_mac { +	__u32 entries; +	__u8 macs[][ETH_ALEN]; +} __attribute__((packed)); + +#define VIRTIO_NET_CTRL_MAC    1 + #define VIRTIO_NET_CTRL_MAC_TABLE_SET        0 + +/* + * Control VLAN filtering + * + * The VLAN filter table is controlled via a simple ADD/DEL interface. + * VLAN IDs not added may be filterd by the hypervisor.  Del is the + * opposite of add.  Both commands expect an out entry containing a 2 + * byte VLAN ID.  VLAN filterting is available with the + * VIRTIO_NET_F_CTRL_VLAN feature bit. + */ +#define VIRTIO_NET_CTRL_VLAN       2 + #define VIRTIO_NET_CTRL_VLAN_ADD             0 + #define VIRTIO_NET_CTRL_VLAN_DEL             1 + +/* + * Control link announce acknowledgement + * + * The command VIRTIO_NET_CTRL_ANNOUNCE_ACK is used to indicate that + * driver has recevied the notification; device would clear the + * VIRTIO_NET_S_ANNOUNCE bit in the status field after it receives + * this command. + */ +#define VIRTIO_NET_CTRL_ANNOUNCE       3 + #define VIRTIO_NET_CTRL_ANNOUNCE_ACK         0 + +#endif /* _LINUX_VIRTIO_NET_H */ diff --git a/include/uapi/linux/virtio_pci.h b/include/uapi/linux/virtio_pci.h new file mode 100644 index 00000000000..ea66f3f60d6 --- /dev/null +++ b/include/uapi/linux/virtio_pci.h @@ -0,0 +1,95 @@ +/* + * Virtio PCI driver + * + * This module allows virtio devices to be used over a virtual PCI device. + * This can be used with QEMU based VMMs like KVM or Xen. + * + * Copyright IBM Corp. 2007 + * + * Authors: + *  Anthony Liguori  <aliguori@us.ibm.com> + * + * This header is BSD licensed so anyone can use the definitions to implement + * compatible drivers/servers. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the name of IBM nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef _LINUX_VIRTIO_PCI_H +#define _LINUX_VIRTIO_PCI_H + +#include <linux/virtio_config.h> + +/* A 32-bit r/o bitmask of the features supported by the host */ +#define VIRTIO_PCI_HOST_FEATURES	0 + +/* A 32-bit r/w bitmask of features activated by the guest */ +#define VIRTIO_PCI_GUEST_FEATURES	4 + +/* A 32-bit r/w PFN for the currently selected queue */ +#define VIRTIO_PCI_QUEUE_PFN		8 + +/* A 16-bit r/o queue size for the currently selected queue */ +#define VIRTIO_PCI_QUEUE_NUM		12 + +/* A 16-bit r/w queue selector */ +#define VIRTIO_PCI_QUEUE_SEL		14 + +/* A 16-bit r/w queue notifier */ +#define VIRTIO_PCI_QUEUE_NOTIFY		16 + +/* An 8-bit device status register.  */ +#define VIRTIO_PCI_STATUS		18 + +/* An 8-bit r/o interrupt status register.  Reading the value will return the + * current contents of the ISR and will also clear it.  This is effectively + * a read-and-acknowledge. */ +#define VIRTIO_PCI_ISR			19 + +/* The bit of the ISR which indicates a device configuration change. */ +#define VIRTIO_PCI_ISR_CONFIG		0x2 + +/* MSI-X registers: only enabled if MSI-X is enabled. */ +/* A 16-bit vector for configuration changes. */ +#define VIRTIO_MSI_CONFIG_VECTOR        20 +/* A 16-bit vector for selected queue notifications. */ +#define VIRTIO_MSI_QUEUE_VECTOR         22 +/* Vector value used to disable MSI for queue */ +#define VIRTIO_MSI_NO_VECTOR            0xffff + +/* The remaining space is defined by each driver as the per-driver + * configuration space */ +#define VIRTIO_PCI_CONFIG(dev)		((dev)->msix_enabled ? 24 : 20) + +/* Virtio ABI version, this must match exactly */ +#define VIRTIO_PCI_ABI_VERSION		0 + +/* How many bits to shift physical queue address written to QUEUE_PFN. + * 12 is historical, and due to x86 page size. */ +#define VIRTIO_PCI_QUEUE_ADDR_SHIFT	12 + +/* The alignment to use between consumer and producer parts of vring. + * x86 pagesize again. */ +#define VIRTIO_PCI_VRING_ALIGN		4096 +#endif diff --git a/include/uapi/linux/virtio_ring.h b/include/uapi/linux/virtio_ring.h new file mode 100644 index 00000000000..a99f9b7caa6 --- /dev/null +++ b/include/uapi/linux/virtio_ring.h @@ -0,0 +1,163 @@ +#ifndef _UAPI_LINUX_VIRTIO_RING_H +#define _UAPI_LINUX_VIRTIO_RING_H +/* An interface for efficient virtio implementation, currently for use by KVM + * and lguest, but hopefully others soon.  Do NOT change this since it will + * break existing servers and clients. + * + * This header is BSD licensed so anyone can use the definitions to implement + * compatible drivers/servers. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the name of IBM nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Copyright Rusty Russell IBM Corporation 2007. */ +#include <linux/types.h> + +/* This marks a buffer as continuing via the next field. */ +#define VRING_DESC_F_NEXT	1 +/* This marks a buffer as write-only (otherwise read-only). */ +#define VRING_DESC_F_WRITE	2 +/* This means the buffer contains a list of buffer descriptors. */ +#define VRING_DESC_F_INDIRECT	4 + +/* The Host uses this in used->flags to advise the Guest: don't kick me when + * you add a buffer.  It's unreliable, so it's simply an optimization.  Guest + * will still kick if it's out of buffers. */ +#define VRING_USED_F_NO_NOTIFY	1 +/* The Guest uses this in avail->flags to advise the Host: don't interrupt me + * when you consume a buffer.  It's unreliable, so it's simply an + * optimization.  */ +#define VRING_AVAIL_F_NO_INTERRUPT	1 + +/* We support indirect buffer descriptors */ +#define VIRTIO_RING_F_INDIRECT_DESC	28 + +/* The Guest publishes the used index for which it expects an interrupt + * at the end of the avail ring. Host should ignore the avail->flags field. */ +/* The Host publishes the avail index for which it expects a kick + * at the end of the used ring. Guest should ignore the used->flags field. */ +#define VIRTIO_RING_F_EVENT_IDX		29 + +/* Virtio ring descriptors: 16 bytes.  These can chain together via "next". */ +struct vring_desc { +	/* Address (guest-physical). */ +	__u64 addr; +	/* Length. */ +	__u32 len; +	/* The flags as indicated above. */ +	__u16 flags; +	/* We chain unused descriptors via this, too */ +	__u16 next; +}; + +struct vring_avail { +	__u16 flags; +	__u16 idx; +	__u16 ring[]; +}; + +/* u32 is used here for ids for padding reasons. */ +struct vring_used_elem { +	/* Index of start of used descriptor chain. */ +	__u32 id; +	/* Total length of the descriptor chain which was used (written to) */ +	__u32 len; +}; + +struct vring_used { +	__u16 flags; +	__u16 idx; +	struct vring_used_elem ring[]; +}; + +struct vring { +	unsigned int num; + +	struct vring_desc *desc; + +	struct vring_avail *avail; + +	struct vring_used *used; +}; + +/* The standard layout for the ring is a continuous chunk of memory which looks + * like this.  We assume num is a power of 2. + * + * struct vring + * { + *	// The actual descriptors (16 bytes each) + *	struct vring_desc desc[num]; + * + *	// A ring of available descriptor heads with free-running index. + *	__u16 avail_flags; + *	__u16 avail_idx; + *	__u16 available[num]; + *	__u16 used_event_idx; + * + *	// Padding to the next align boundary. + *	char pad[]; + * + *	// A ring of used descriptor heads with free-running index. + *	__u16 used_flags; + *	__u16 used_idx; + *	struct vring_used_elem used[num]; + *	__u16 avail_event_idx; + * }; + */ +/* We publish the used event index at the end of the available ring, and vice + * versa. They are at the end for backwards compatibility. */ +#define vring_used_event(vr) ((vr)->avail->ring[(vr)->num]) +#define vring_avail_event(vr) (*(__u16 *)&(vr)->used->ring[(vr)->num]) + +static inline void vring_init(struct vring *vr, unsigned int num, void *p, +			      unsigned long align) +{ +	vr->num = num; +	vr->desc = p; +	vr->avail = p + num*sizeof(struct vring_desc); +	vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + sizeof(__u16) +		+ align-1) & ~(align - 1)); +} + +static inline unsigned vring_size(unsigned int num, unsigned long align) +{ +	return ((sizeof(struct vring_desc) * num + sizeof(__u16) * (3 + num) +		 + align - 1) & ~(align - 1)) +		+ sizeof(__u16) * 3 + sizeof(struct vring_used_elem) * num; +} + +/* The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX */ +/* Assuming a given event_idx value from the other size, if + * we have just incremented index from old to new_idx, + * should we trigger an event? */ +static inline int vring_need_event(__u16 event_idx, __u16 new_idx, __u16 old) +{ +	/* Note: Xen has similar logic for notification hold-off +	 * in include/xen/interface/io/ring.h with req_event and req_prod +	 * corresponding to event_idx + 1 and new_idx respectively. +	 * Note also that req_event and req_prod in Xen start at 1, +	 * event indexes in virtio start at 0. */ +	return (__u16)(new_idx - event_idx - 1) < (__u16)(new_idx - old); +} + +#endif /* _UAPI_LINUX_VIRTIO_RING_H */ diff --git a/include/uapi/linux/virtio_rng.h b/include/uapi/linux/virtio_rng.h new file mode 100644 index 00000000000..c4d5de896f0 --- /dev/null +++ b/include/uapi/linux/virtio_rng.h @@ -0,0 +1,8 @@ +#ifndef _LINUX_VIRTIO_RNG_H +#define _LINUX_VIRTIO_RNG_H +/* This header is BSD licensed so anyone can use the definitions to implement + * compatible drivers/servers. */ +#include <linux/virtio_ids.h> +#include <linux/virtio_config.h> + +#endif /* _LINUX_VIRTIO_RNG_H */ diff --git a/include/uapi/linux/vt.h b/include/uapi/linux/vt.h new file mode 100644 index 00000000000..4b59a26799a --- /dev/null +++ b/include/uapi/linux/vt.h @@ -0,0 +1,90 @@ +#ifndef _UAPI_LINUX_VT_H +#define _UAPI_LINUX_VT_H + + +/* + * These constants are also useful for user-level apps (e.g., VC + * resizing). + */ +#define MIN_NR_CONSOLES 1       /* must be at least 1 */ +#define MAX_NR_CONSOLES	63	/* serial lines start at 64 */ +#define MAX_NR_USER_CONSOLES 63	/* must be root to allocate above this */ +		/* Note: the ioctl VT_GETSTATE does not work for +		   consoles 16 and higher (since it returns a short) */ + +/* 0x56 is 'V', to avoid collision with termios and kd */ + +#define VT_OPENQRY	0x5600	/* find available vt */ + +struct vt_mode { +	char mode;		/* vt mode */ +	char waitv;		/* if set, hang on writes if not active */ +	short relsig;		/* signal to raise on release req */ +	short acqsig;		/* signal to raise on acquisition */ +	short frsig;		/* unused (set to 0) */ +}; +#define VT_GETMODE	0x5601	/* get mode of active vt */ +#define VT_SETMODE	0x5602	/* set mode of active vt */ +#define		VT_AUTO		0x00	/* auto vt switching */ +#define		VT_PROCESS	0x01	/* process controls switching */ +#define		VT_ACKACQ	0x02	/* acknowledge switch */ + +struct vt_stat { +	unsigned short v_active;	/* active vt */ +	unsigned short v_signal;	/* signal to send */ +	unsigned short v_state;		/* vt bitmask */ +}; +#define VT_GETSTATE	0x5603	/* get global vt state info */ +#define VT_SENDSIG	0x5604	/* signal to send to bitmask of vts */ + +#define VT_RELDISP	0x5605	/* release display */ + +#define VT_ACTIVATE	0x5606	/* make vt active */ +#define VT_WAITACTIVE	0x5607	/* wait for vt active */ +#define VT_DISALLOCATE	0x5608  /* free memory associated to vt */ + +struct vt_sizes { +	unsigned short v_rows;		/* number of rows */ +	unsigned short v_cols;		/* number of columns */ +	unsigned short v_scrollsize;	/* number of lines of scrollback */ +}; +#define VT_RESIZE	0x5609	/* set kernel's idea of screensize */ + +struct vt_consize { +	unsigned short v_rows;	/* number of rows */ +	unsigned short v_cols;	/* number of columns */ +	unsigned short v_vlin;	/* number of pixel rows on screen */ +	unsigned short v_clin;	/* number of pixel rows per character */ +	unsigned short v_vcol;	/* number of pixel columns on screen */ +	unsigned short v_ccol;	/* number of pixel columns per character */ +}; +#define VT_RESIZEX      0x560A  /* set kernel's idea of screensize + more */ +#define VT_LOCKSWITCH   0x560B  /* disallow vt switching */ +#define VT_UNLOCKSWITCH 0x560C  /* allow vt switching */ +#define VT_GETHIFONTMASK 0x560D  /* return hi font mask */ + +struct vt_event { +	unsigned int event; +#define VT_EVENT_SWITCH		0x0001	/* Console switch */ +#define VT_EVENT_BLANK		0x0002	/* Screen blank */ +#define VT_EVENT_UNBLANK	0x0004	/* Screen unblank */ +#define VT_EVENT_RESIZE		0x0008	/* Resize display */ +#define VT_MAX_EVENT		0x000F +	unsigned int oldev;		/* Old console */ +	unsigned int newev;		/* New console (if changing) */ +	unsigned int pad[4];		/* Padding for expansion */ +}; + +#define VT_WAITEVENT	0x560E	/* Wait for an event */ + +struct vt_setactivate { +	unsigned int console; +	struct vt_mode mode; +}; + +#define VT_SETACTIVATE	0x560F	/* Activate and set the mode of a console */ + + +#define vt_get_kmsg_redirect() vt_kmsg_redirect(-1) + +#endif /* _UAPI_LINUX_VT_H */ diff --git a/include/uapi/linux/wait.h b/include/uapi/linux/wait.h new file mode 100644 index 00000000000..9393eead23e --- /dev/null +++ b/include/uapi/linux/wait.h @@ -0,0 +1,21 @@ +#ifndef _UAPI_LINUX_WAIT_H +#define _UAPI_LINUX_WAIT_H + +#define WNOHANG		0x00000001 +#define WUNTRACED	0x00000002 +#define WSTOPPED	WUNTRACED +#define WEXITED		0x00000004 +#define WCONTINUED	0x00000008 +#define WNOWAIT		0x01000000	/* Don't reap, just poll status.  */ + +#define __WNOTHREAD	0x20000000	/* Don't wait on children of other threads in this group */ +#define __WALL		0x40000000	/* Wait on all children, regardless of type */ +#define __WCLONE	0x80000000	/* Wait only on non-SIGCHLD children */ + +/* First argument to waitid: */ +#define P_ALL		0 +#define P_PID		1 +#define P_PGID		2 + + +#endif /* _UAPI_LINUX_WAIT_H */ diff --git a/include/uapi/linux/wanrouter.h b/include/uapi/linux/wanrouter.h new file mode 100644 index 00000000000..7617df2833d --- /dev/null +++ b/include/uapi/linux/wanrouter.h @@ -0,0 +1,452 @@ +/***************************************************************************** +* wanrouter.h	Definitions for the WAN Multiprotocol Router Module. +*		This module provides API and common services for WAN Link +*		Drivers and is completely hardware-independent. +* +* Author: 	Nenad Corbic <ncorbic@sangoma.com> +*		Gideon Hack 	 +* Additions:	Arnaldo Melo +* +* Copyright:	(c) 1995-2000 Sangoma Technologies Inc. +* +*		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. +* ============================================================================ +* Jul 21, 2000  Nenad Corbic	Added WAN_FT1_READY State +* Feb 24, 2000  Nenad Corbic    Added support for socket based x25api +* Jan 28, 2000  Nenad Corbic    Added support for the ASYNC protocol. +* Oct 04, 1999  Nenad Corbic 	Updated for 2.1.0 release +* Jun 02, 1999  Gideon Hack	Added support for the S514 adapter. +* May 23, 1999	Arnaldo Melo	Added local_addr to wanif_conf_t +*				WAN_DISCONNECTING state added +* Jul 20, 1998	David Fong	Added Inverse ARP options to 'wanif_conf_t' +* Jun 12, 1998	David Fong	Added Cisco HDLC support. +* Dec 16, 1997	Jaspreet Singh	Moved 'enable_IPX' and 'network_number' to +*				'wanif_conf_t' +* Dec 05, 1997	Jaspreet Singh	Added 'pap', 'chap' to 'wanif_conf_t' +*				Added 'authenticator' to 'wan_ppp_conf_t' +* Nov 06, 1997	Jaspreet Singh	Changed Router Driver version to 1.1 from 1.0 +* Oct 20, 1997	Jaspreet Singh	Added 'cir','bc','be' and 'mc' to 'wanif_conf_t' +*				Added 'enable_IPX' and 'network_number' to  +*				'wan_device_t'.  Also added defines for +*				UDP PACKET TYPE, Interrupt test, critical values +*				for RACE conditions. +* Oct 05, 1997	Jaspreet Singh	Added 'dlci_num' and 'dlci[100]' to  +*				'wan_fr_conf_t' to configure a list of dlci(s) +*				for a NODE  +* Jul 07, 1997	Jaspreet Singh	Added 'ttl' to 'wandev_conf_t' & 'wan_device_t' +* May 29, 1997 	Jaspreet Singh	Added 'tx_int_enabled' to 'wan_device_t' +* May 21, 1997	Jaspreet Singh	Added 'udp_port' to 'wan_device_t' +* Apr 25, 1997  Farhan Thawar   Added 'udp_port' to 'wandev_conf_t' +* Jan 16, 1997	Gene Kozin	router_devlist made public +* Jan 02, 1997	Gene Kozin	Initial version (based on wanpipe.h). +*****************************************************************************/ + +#ifndef _UAPI_ROUTER_H +#define _UAPI_ROUTER_H + +#define	ROUTER_NAME	"wanrouter"	/* in case we ever change it */ +#define	ROUTER_VERSION	1		/* version number */ +#define	ROUTER_RELEASE	1		/* release (minor version) number */ +#define	ROUTER_IOCTL	'W'		/* for IOCTL calls */ +#define	ROUTER_MAGIC	0x524D4157L	/* signature: 'WANR' reversed */ + +/* IOCTL codes for /proc/router/<device> entries (up to 255) */ +enum router_ioctls +{ +	ROUTER_SETUP	= ROUTER_IOCTL<<8,	/* configure device */ +	ROUTER_DOWN,				/* shut down device */ +	ROUTER_STAT,				/* get device status */ +	ROUTER_IFNEW,				/* add interface */ +	ROUTER_IFDEL,				/* delete interface */ +	ROUTER_IFSTAT,				/* get interface status */ +	ROUTER_USER	= (ROUTER_IOCTL<<8)+16,	/* driver-specific calls */ +	ROUTER_USER_MAX	= (ROUTER_IOCTL<<8)+31 +}; + +/* identifiers for displaying proc file data for dual port adapters */ +#define PROC_DATA_PORT_0 0x8000	/* the data is for port 0 */ +#define PROC_DATA_PORT_1 0x8001	/* the data is for port 1 */ + +/* NLPID for packet encapsulation (ISO/IEC TR 9577) */ +#define	NLPID_IP	0xCC	/* Internet Protocol Datagram */ +#define	NLPID_SNAP	0x80	/* IEEE Subnetwork Access Protocol */ +#define	NLPID_CLNP	0x81	/* ISO/IEC 8473 */ +#define	NLPID_ESIS	0x82	/* ISO/IEC 9542 */ +#define	NLPID_ISIS	0x83	/* ISO/IEC ISIS */ +#define	NLPID_Q933	0x08	/* CCITT Q.933 */ + +/* Miscellaneous */ +#define	WAN_IFNAME_SZ	15	/* max length of the interface name */ +#define	WAN_DRVNAME_SZ	15	/* max length of the link driver name */ +#define	WAN_ADDRESS_SZ	31	/* max length of the WAN media address */ +#define USED_BY_FIELD	8	/* max length of the used by field */ + +/* Defines for UDP PACKET TYPE */ +#define UDP_PTPIPE_TYPE 	0x01 +#define UDP_FPIPE_TYPE		0x02 +#define UDP_CPIPE_TYPE		0x03 +#define UDP_DRVSTATS_TYPE 	0x04 +#define UDP_INVALID_TYPE  	0x05 + +/* Command return code */ +#define CMD_OK		0		/* normal firmware return code */ +#define CMD_TIMEOUT	0xFF		/* firmware command timed out */ + +/* UDP Packet Management */ +#define UDP_PKT_FRM_STACK	0x00 +#define UDP_PKT_FRM_NETWORK	0x01 + +/* Maximum interrupt test counter */ +#define MAX_INTR_TEST_COUNTER	100 + +/* Critical Values for RACE conditions*/ +#define CRITICAL_IN_ISR		0xA1 +#define CRITICAL_INTR_HANDLED	0xB1 + +/****** Data Types **********************************************************/ + +/*---------------------------------------------------------------------------- + * X.25-specific link-level configuration. + */ +typedef struct wan_x25_conf +{ +	unsigned lo_pvc;	/* lowest permanent circuit number */ +	unsigned hi_pvc;	/* highest permanent circuit number */ +	unsigned lo_svc;	/* lowest switched circuit number */ +	unsigned hi_svc;	/* highest switched circuit number */ +	unsigned hdlc_window;	/* HDLC window size (1..7) */ +	unsigned pkt_window;	/* X.25 packet window size (1..7) */ +	unsigned t1;		/* HDLC timer T1, sec (1..30) */ +	unsigned t2;		/* HDLC timer T2, sec (0..29) */ +	unsigned t4;		/* HDLC supervisory frame timer = T4 * T1 */ +	unsigned n2;		/* HDLC retransmission limit (1..30) */ +	unsigned t10_t20;	/* X.25 RESTART timeout, sec (1..255) */ +	unsigned t11_t21;	/* X.25 CALL timeout, sec (1..255) */ +	unsigned t12_t22;	/* X.25 RESET timeout, sec (1..255) */ +	unsigned t13_t23;	/* X.25 CLEAR timeout, sec (1..255) */ +	unsigned t16_t26;	/* X.25 INTERRUPT timeout, sec (1..255) */ +	unsigned t28;		/* X.25 REGISTRATION timeout, sec (1..255) */ +	unsigned r10_r20;	/* RESTART retransmission limit (0..250) */ +	unsigned r12_r22;	/* RESET retransmission limit (0..250) */ +	unsigned r13_r23;	/* CLEAR retransmission limit (0..250) */ +	unsigned ccitt_compat;	/* compatibility mode: 1988/1984/1980 */ +	unsigned x25_conf_opt;   /* User defined x25 config optoins */ +	unsigned char LAPB_hdlc_only; /* Run in HDLC only mode */ +	unsigned char logging;   /* Control connection logging */   +	unsigned char oob_on_modem; /* Whether to send modem status to the user app */ +} wan_x25_conf_t; + +/*---------------------------------------------------------------------------- + * Frame relay specific link-level configuration. + */ +typedef struct wan_fr_conf +{ +	unsigned signalling;	/* local in-channel signalling type */ +	unsigned t391;		/* link integrity verification timer */ +	unsigned t392;		/* polling verification timer */ +	unsigned n391;		/* full status polling cycle counter */ +	unsigned n392;		/* error threshold counter */ +	unsigned n393;		/* monitored events counter */ +	unsigned dlci_num;	/* number of DLCs (access node) */ +	unsigned  dlci[100];    /* List of all DLCIs */ +} wan_fr_conf_t; + +/*---------------------------------------------------------------------------- + * PPP-specific link-level configuration. + */ +typedef struct wan_ppp_conf +{ +	unsigned restart_tmr;	/* restart timer */ +	unsigned auth_rsrt_tmr;	/* authentication timer */ +	unsigned auth_wait_tmr;	/* authentication timer */ +	unsigned mdm_fail_tmr;	/* modem failure timer */ +	unsigned dtr_drop_tmr;	/* DTR drop timer */ +	unsigned connect_tmout;	/* connection timeout */ +	unsigned conf_retry;	/* max. retry */ +	unsigned term_retry;	/* max. retry */ +	unsigned fail_retry;	/* max. retry */ +	unsigned auth_retry;	/* max. retry */ +	unsigned auth_options;	/* authentication opt. */ +	unsigned ip_options;	/* IP options */ +	char	authenticator;	/* AUTHENTICATOR or not */ +	char	ip_mode;	/* Static/Host/Peer */ +} wan_ppp_conf_t; + +/*---------------------------------------------------------------------------- + * CHDLC-specific link-level configuration. + */ +typedef struct wan_chdlc_conf +{ +	unsigned char ignore_dcd;	/* Protocol options:		*/ +	unsigned char ignore_cts;	/*  Ignore these to determine	*/ +	unsigned char ignore_keepalive;	/*  link status (Yes or No)	*/ +	unsigned char hdlc_streaming;	/*  hdlc_streaming mode (Y/N) */ +	unsigned char receive_only;	/*  no transmit buffering (Y/N) */ +	unsigned keepalive_tx_tmr;	/* transmit keepalive timer */ +	unsigned keepalive_rx_tmr;	/* receive  keepalive timer */ +	unsigned keepalive_err_margin;	/* keepalive_error_tolerance */ +	unsigned slarp_timer;		/* SLARP request timer */ +} wan_chdlc_conf_t; + + +/*---------------------------------------------------------------------------- + * WAN device configuration. Passed to ROUTER_SETUP IOCTL. + */ +typedef struct wandev_conf +{ +	unsigned magic;		/* magic number (for verification) */ +	unsigned config_id;	/* configuration structure identifier */ +				/****** hardware configuration ******/ +	unsigned ioport;	/* adapter I/O port base */ +	unsigned long maddr;	/* dual-port memory address */ +	unsigned msize;		/* dual-port memory size */ +	int irq;		/* interrupt request level */ +	int dma;		/* DMA request level */ +        char S514_CPU_no[1];	/* S514 PCI adapter CPU number ('A' or 'B') */ +        unsigned PCI_slot_no;	/* S514 PCI adapter slot number */ +	char auto_pci_cfg;	/* S515 PCI automatic slot detection */ +	char comm_port;		/* Communication Port (PRI=0, SEC=1) */  +	unsigned bps;		/* data transfer rate */ +	unsigned mtu;		/* maximum transmit unit size */ +        unsigned udp_port;      /* UDP port for management */ +	unsigned char ttl;	/* Time To Live for UDP security */ +	unsigned char ft1;	/* FT1 Configurator Option */ +        char interface;		/* RS-232/V.35, etc. */ +	char clocking;		/* external/internal */ +	char line_coding;	/* NRZ/NRZI/FM0/FM1, etc. */ +	char station;		/* DTE/DCE, primary/secondary, etc. */ +	char connection;	/* permanent/switched/on-demand */ +	char read_mode;		/* read mode: Polling or interrupt */ +	char receive_only;	/* disable tx buffers */ +	char tty;		/* Create a fake tty device */ +	unsigned tty_major;	/* Major number for wanpipe tty device */ +	unsigned tty_minor; 	/* Minor number for wanpipe tty device */ +	unsigned tty_mode;	/* TTY operation mode SYNC or ASYNC */ +	char backup;		/* Backup Mode */ +	unsigned hw_opt[4];	/* other hardware options */ +	unsigned reserved[4]; +				/****** arbitrary data ***************/ +	unsigned data_size;	/* data buffer size */ +	void* data;		/* data buffer, e.g. firmware */ +	union			/****** protocol-specific ************/ +	{ +		wan_x25_conf_t x25;	/* X.25 configuration */ +		wan_ppp_conf_t ppp;	/* PPP configuration */ +		wan_fr_conf_t fr;	/* frame relay configuration */ +		wan_chdlc_conf_t chdlc;	/* Cisco HDLC configuration */ +	} u; +} wandev_conf_t; + +/* 'config_id' definitions */ +#define	WANCONFIG_X25	101	/* X.25 link */ +#define	WANCONFIG_FR	102	/* frame relay link */ +#define	WANCONFIG_PPP	103	/* synchronous PPP link */ +#define WANCONFIG_CHDLC	104	/* Cisco HDLC Link */ +#define WANCONFIG_BSC	105	/* BiSync Streaming */ +#define WANCONFIG_HDLC	106	/* HDLC Support */ +#define WANCONFIG_MPPP  107	/* Multi Port PPP over RAW CHDLC */ + +/* + * Configuration options defines. + */ +/* general options */ +#define	WANOPT_OFF	0 +#define	WANOPT_ON	1 +#define	WANOPT_NO	0 +#define	WANOPT_YES	1 + +/* intercace options */ +#define	WANOPT_RS232	0 +#define	WANOPT_V35	1 + +/* data encoding options */ +#define	WANOPT_NRZ	0 +#define	WANOPT_NRZI	1 +#define	WANOPT_FM0	2 +#define	WANOPT_FM1	3 + +/* link type options */ +#define	WANOPT_POINTTOPOINT	0	/* RTS always active */ +#define	WANOPT_MULTIDROP	1	/* RTS is active when transmitting */ + +/* clocking options */ +#define	WANOPT_EXTERNAL	0 +#define	WANOPT_INTERNAL	1 + +/* station options */ +#define	WANOPT_DTE		0 +#define	WANOPT_DCE		1 +#define	WANOPT_CPE		0 +#define	WANOPT_NODE		1 +#define	WANOPT_SECONDARY	0 +#define	WANOPT_PRIMARY		1 + +/* connection options */ +#define	WANOPT_PERMANENT	0	/* DTR always active */ +#define	WANOPT_SWITCHED		1	/* use DTR to setup link (dial-up) */ +#define	WANOPT_ONDEMAND		2	/* activate DTR only before sending */ + +/* frame relay in-channel signalling */ +#define	WANOPT_FR_ANSI		1	/* ANSI T1.617 Annex D */ +#define	WANOPT_FR_Q933		2	/* ITU Q.933A */ +#define	WANOPT_FR_LMI		3	/* LMI */ + +/* PPP IP Mode Options */ +#define	WANOPT_PPP_STATIC	0 +#define	WANOPT_PPP_HOST		1 +#define	WANOPT_PPP_PEER		2 + +/* ASY Mode Options */ +#define WANOPT_ONE 		1 +#define WANOPT_TWO		2 +#define WANOPT_ONE_AND_HALF	3 + +#define WANOPT_NONE	0 +#define WANOPT_ODD      1 +#define WANOPT_EVEN	2 + +/* CHDLC Protocol Options */ +/* DF Commented out for now. + +#define WANOPT_CHDLC_NO_DCD		IGNORE_DCD_FOR_LINK_STAT +#define WANOPT_CHDLC_NO_CTS		IGNORE_CTS_FOR_LINK_STAT +#define WANOPT_CHDLC_NO_KEEPALIVE	IGNORE_KPALV_FOR_LINK_STAT +*/ + +/* Port options */ +#define WANOPT_PRI 0 +#define WANOPT_SEC 1 +/* read mode */ +#define	WANOPT_INTR	0 +#define WANOPT_POLL	1 + + +#define WANOPT_TTY_SYNC  0 +#define WANOPT_TTY_ASYNC 1 +/*---------------------------------------------------------------------------- + * WAN Link Status Info (for ROUTER_STAT IOCTL). + */ +typedef struct wandev_stat +{ +	unsigned state;		/* link state */ +	unsigned ndev;		/* number of configured interfaces */ + +	/* link/interface configuration */ +	unsigned connection;	/* permanent/switched/on-demand */ +	unsigned media_type;	/* Frame relay/PPP/X.25/SDLC, etc. */ +	unsigned mtu;		/* max. transmit unit for this device */ + +	/* physical level statistics */ +	unsigned modem_status;	/* modem status */ +	unsigned rx_frames;	/* received frames count */ +	unsigned rx_overruns;	/* receiver overrun error count */ +	unsigned rx_crc_err;	/* receive CRC error count */ +	unsigned rx_aborts;	/* received aborted frames count */ +	unsigned rx_bad_length;	/* unexpetedly long/short frames count */ +	unsigned rx_dropped;	/* frames discarded at device level */ +	unsigned tx_frames;	/* transmitted frames count */ +	unsigned tx_underruns;	/* aborted transmissions (underruns) count */ +	unsigned tx_timeouts;	/* transmission timeouts */ +	unsigned tx_rejects;	/* other transmit errors */ + +	/* media level statistics */ +	unsigned rx_bad_format;	/* frames with invalid format */ +	unsigned rx_bad_addr;	/* frames with invalid media address */ +	unsigned tx_retries;	/* frames re-transmitted */ +	unsigned reserved[16];	/* reserved for future use */ +} wandev_stat_t; + +/* 'state' defines */ +enum wan_states +{ +	WAN_UNCONFIGURED,	/* link/channel is not configured */ +	WAN_DISCONNECTED,	/* link/channel is disconnected */ +	WAN_CONNECTING,		/* connection is in progress */ +	WAN_CONNECTED,		/* link/channel is operational */ +	WAN_LIMIT,		/* for verification only */ +	WAN_DUALPORT,		/* for Dual Port cards */ +	WAN_DISCONNECTING, +	WAN_FT1_READY		/* FT1 Configurator Ready */ +}; + +enum { +	WAN_LOCAL_IP, +	WAN_POINTOPOINT_IP, +	WAN_NETMASK_IP, +	WAN_BROADCAST_IP +}; + +/* 'modem_status' masks */ +#define	WAN_MODEM_CTS	0x0001	/* CTS line active */ +#define	WAN_MODEM_DCD	0x0002	/* DCD line active */ +#define	WAN_MODEM_DTR	0x0010	/* DTR line active */ +#define	WAN_MODEM_RTS	0x0020	/* RTS line active */ + +/*---------------------------------------------------------------------------- + * WAN interface (logical channel) configuration (for ROUTER_IFNEW IOCTL). + */ +typedef struct wanif_conf +{ +	unsigned magic;			/* magic number */ +	unsigned config_id;		/* configuration identifier */ +	char name[WAN_IFNAME_SZ+1];	/* interface name, ASCIIZ */ +	char addr[WAN_ADDRESS_SZ+1];	/* media address, ASCIIZ */ +	char usedby[USED_BY_FIELD];	/* used by API or WANPIPE */ +	unsigned idle_timeout;		/* sec, before disconnecting */ +	unsigned hold_timeout;		/* sec, before re-connecting */ +	unsigned cir;			/* Committed Information Rate fwd,bwd*/ +	unsigned bc;			/* Committed Burst Size fwd, bwd */ +	unsigned be;			/* Excess Burst Size fwd, bwd */  +	unsigned char enable_IPX;	/* Enable or Disable IPX */ +	unsigned char inarp;		/* Send Inverse ARP requests Y/N */ +	unsigned inarp_interval;	/* sec, between InARP requests */ +	unsigned long network_number;	/* Network Number for IPX */ +	char mc;			/* Multicast on or off */ +	char local_addr[WAN_ADDRESS_SZ+1];/* local media address, ASCIIZ */ +	unsigned char port;		/* board port */ +	unsigned char protocol;		/* prococol used in this channel (TCPOX25 or X25) */ +	char pap;			/* PAP enabled or disabled */ +	char chap;			/* CHAP enabled or disabled */ +	unsigned char userid[511];	/* List of User Id */ +	unsigned char passwd[511];	/* List of passwords */ +	unsigned char sysname[31];	/* Name of the system */ +	unsigned char ignore_dcd;	/* Protocol options: */ +	unsigned char ignore_cts;	/*  Ignore these to determine */ +	unsigned char ignore_keepalive;	/*  link status (Yes or No) */ +	unsigned char hdlc_streaming;	/*  Hdlc streaming mode (Y/N) */ +	unsigned keepalive_tx_tmr;	/* transmit keepalive timer */ +	unsigned keepalive_rx_tmr;	/* receive  keepalive timer */ +	unsigned keepalive_err_margin;	/* keepalive_error_tolerance */ +	unsigned slarp_timer;		/* SLARP request timer */ +	unsigned char ttl;		/* Time To Live for UDP security */ +	char interface;			/* RS-232/V.35, etc. */ +	char clocking;			/* external/internal */ +	unsigned bps;			/* data transfer rate */ +	unsigned mtu;			/* maximum transmit unit size */ +	unsigned char if_down;		/* brind down interface when disconnected */ +	unsigned char gateway;		/* Is this interface a gateway */ +	unsigned char true_if_encoding;	/* Set the dev->type to true board protocol */ + +	unsigned char asy_data_trans;     /* async API options */ +        unsigned char rts_hs_for_receive; /* async Protocol options */ +        unsigned char xon_xoff_hs_for_receive; +	unsigned char xon_xoff_hs_for_transmit; +	unsigned char dcd_hs_for_transmit; +	unsigned char cts_hs_for_transmit; +	unsigned char async_mode; +	unsigned tx_bits_per_char; +	unsigned rx_bits_per_char; +	unsigned stop_bits;   +	unsigned char parity; + 	unsigned break_timer; +        unsigned inter_char_timer; +	unsigned rx_complete_length; +	unsigned xon_char; +	unsigned xoff_char; +	unsigned char receive_only;	/*  no transmit buffering (Y/N) */ +} wanif_conf_t; + +#endif /* _UAPI_ROUTER_H */ diff --git a/include/uapi/linux/watchdog.h b/include/uapi/linux/watchdog.h new file mode 100644 index 00000000000..2babe72870b --- /dev/null +++ b/include/uapi/linux/watchdog.h @@ -0,0 +1,57 @@ +/* + *	Generic watchdog defines. Derived from.. + * + * Berkshire PC Watchdog Defines + * by Ken Hollis <khollis@bitgate.com> + * + */ + +#ifndef _UAPI_LINUX_WATCHDOG_H +#define _UAPI_LINUX_WATCHDOG_H + +#include <linux/ioctl.h> +#include <linux/types.h> + +#define	WATCHDOG_IOCTL_BASE	'W' + +struct watchdog_info { +	__u32 options;		/* Options the card/driver supports */ +	__u32 firmware_version;	/* Firmware version of the card */ +	__u8  identity[32];	/* Identity of the board */ +}; + +#define	WDIOC_GETSUPPORT	_IOR(WATCHDOG_IOCTL_BASE, 0, struct watchdog_info) +#define	WDIOC_GETSTATUS		_IOR(WATCHDOG_IOCTL_BASE, 1, int) +#define	WDIOC_GETBOOTSTATUS	_IOR(WATCHDOG_IOCTL_BASE, 2, int) +#define	WDIOC_GETTEMP		_IOR(WATCHDOG_IOCTL_BASE, 3, int) +#define	WDIOC_SETOPTIONS	_IOR(WATCHDOG_IOCTL_BASE, 4, int) +#define	WDIOC_KEEPALIVE		_IOR(WATCHDOG_IOCTL_BASE, 5, int) +#define	WDIOC_SETTIMEOUT        _IOWR(WATCHDOG_IOCTL_BASE, 6, int) +#define	WDIOC_GETTIMEOUT        _IOR(WATCHDOG_IOCTL_BASE, 7, int) +#define	WDIOC_SETPRETIMEOUT	_IOWR(WATCHDOG_IOCTL_BASE, 8, int) +#define	WDIOC_GETPRETIMEOUT	_IOR(WATCHDOG_IOCTL_BASE, 9, int) +#define	WDIOC_GETTIMELEFT	_IOR(WATCHDOG_IOCTL_BASE, 10, int) + +#define	WDIOF_UNKNOWN		-1	/* Unknown flag error */ +#define	WDIOS_UNKNOWN		-1	/* Unknown status error */ + +#define	WDIOF_OVERHEAT		0x0001	/* Reset due to CPU overheat */ +#define	WDIOF_FANFAULT		0x0002	/* Fan failed */ +#define	WDIOF_EXTERN1		0x0004	/* External relay 1 */ +#define	WDIOF_EXTERN2		0x0008	/* External relay 2 */ +#define	WDIOF_POWERUNDER	0x0010	/* Power bad/power fault */ +#define	WDIOF_CARDRESET		0x0020	/* Card previously reset the CPU */ +#define	WDIOF_POWEROVER		0x0040	/* Power over voltage */ +#define	WDIOF_SETTIMEOUT	0x0080  /* Set timeout (in seconds) */ +#define	WDIOF_MAGICCLOSE	0x0100	/* Supports magic close char */ +#define	WDIOF_PRETIMEOUT	0x0200  /* Pretimeout (in seconds), get/set */ +#define	WDIOF_ALARMONLY		0x0400	/* Watchdog triggers a management or +					   other external alarm not a reboot */ +#define	WDIOF_KEEPALIVEPING	0x8000	/* Keep alive ping reply */ + +#define	WDIOS_DISABLECARD	0x0001	/* Turn off the watchdog timer */ +#define	WDIOS_ENABLECARD	0x0002	/* Turn on the watchdog timer */ +#define	WDIOS_TEMPPANIC		0x0004	/* Kernel panic on temperature trip */ + + +#endif /* _UAPI_LINUX_WATCHDOG_H */ diff --git a/include/uapi/linux/wimax.h b/include/uapi/linux/wimax.h new file mode 100644 index 00000000000..9f6b77af2f6 --- /dev/null +++ b/include/uapi/linux/wimax.h @@ -0,0 +1,239 @@ +/* + * Linux WiMax + * API for user space + * + * + * Copyright (C) 2007-2008 Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + *   * Redistributions of source code must retain the above copyright + *     notice, this list of conditions and the following disclaimer. + *   * Redistributions in binary form must reproduce the above copyright + *     notice, this list of conditions and the following disclaimer in + *     the documentation and/or other materials provided with the + *     distribution. + *   * Neither the name of Intel Corporation nor the names of its + *     contributors may be used to endorse or promote products derived + *     from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + * Intel Corporation <linux-wimax@intel.com> + * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> + *  - Initial implementation + * + * + * This file declares the user/kernel protocol that is spoken over + * Generic Netlink, as well as any type declaration that is to be used + * by kernel and user space. + * + * It is intended for user space to clone it verbatim to use it as a + * primary reference for definitions. + * + * Stuff intended for kernel usage as well as full protocol and stack + * documentation is rooted in include/net/wimax.h. + */ + +#ifndef __LINUX__WIMAX_H__ +#define __LINUX__WIMAX_H__ + +#include <linux/types.h> + +enum { +	/** +	 * Version of the interface (unsigned decimal, MMm, max 25.5) +	 * M - Major: change if removing or modifying an existing call. +	 * m - minor: change when adding a new call +	 */ +	WIMAX_GNL_VERSION = 01, +	/* Generic NetLink attributes */ +	WIMAX_GNL_ATTR_INVALID = 0x00, +	WIMAX_GNL_ATTR_MAX = 10, +}; + + +/* + * Generic NetLink operations + * + * Most of these map to an API call; _OP_ stands for operation, _RP_ + * for reply and _RE_ for report (aka: signal). + */ +enum { +	WIMAX_GNL_OP_MSG_FROM_USER,	/* User to kernel message */ +	WIMAX_GNL_OP_MSG_TO_USER,	/* Kernel to user message */ +	WIMAX_GNL_OP_RFKILL,	/* Run wimax_rfkill() */ +	WIMAX_GNL_OP_RESET,	/* Run wimax_rfkill() */ +	WIMAX_GNL_RE_STATE_CHANGE,	/* Report: status change */ +	WIMAX_GNL_OP_STATE_GET,		/* Request for current state */ +}; + + +/* Message from user / to user */ +enum { +	WIMAX_GNL_MSG_IFIDX = 1, +	WIMAX_GNL_MSG_PIPE_NAME, +	WIMAX_GNL_MSG_DATA, +}; + + +/* + * wimax_rfkill() + * + * The state of the radio (ON/OFF) is mapped to the rfkill subsystem's + * switch state (DISABLED/ENABLED). + */ +enum wimax_rf_state { +	WIMAX_RF_OFF = 0,	/* Radio is off, rfkill on/enabled */ +	WIMAX_RF_ON = 1,	/* Radio is on, rfkill off/disabled */ +	WIMAX_RF_QUERY = 2, +}; + +/* Attributes */ +enum { +	WIMAX_GNL_RFKILL_IFIDX = 1, +	WIMAX_GNL_RFKILL_STATE, +}; + + +/* Attributes for wimax_reset() */ +enum { +	WIMAX_GNL_RESET_IFIDX = 1, +}; + +/* Attributes for wimax_state_get() */ +enum { +	WIMAX_GNL_STGET_IFIDX = 1, +}; + +/* + * Attributes for the Report State Change + * + * For now we just have the old and new states; new attributes might + * be added later on. + */ +enum { +	WIMAX_GNL_STCH_IFIDX = 1, +	WIMAX_GNL_STCH_STATE_OLD, +	WIMAX_GNL_STCH_STATE_NEW, +}; + + +/** + * enum wimax_st - The different states of a WiMAX device + * @__WIMAX_ST_NULL: The device structure has been allocated and zeroed, + *     but still wimax_dev_add() hasn't been called. There is no state. + * + * @WIMAX_ST_DOWN: The device has been registered with the WiMAX and + *     networking stacks, but it is not initialized (normally that is + *     done with 'ifconfig DEV up' [or equivalent], which can upload + *     firmware and enable communications with the device). + *     In this state, the device is powered down and using as less + *     power as possible. + *     This state is the default after a call to wimax_dev_add(). It + *     is ok to have drivers move directly to %WIMAX_ST_UNINITIALIZED + *     or %WIMAX_ST_RADIO_OFF in _probe() after the call to + *     wimax_dev_add(). + *     It is recommended that the driver leaves this state when + *     calling 'ifconfig DEV up' and enters it back on 'ifconfig DEV + *     down'. + * + * @__WIMAX_ST_QUIESCING: The device is being torn down, so no API + *     operations are allowed to proceed except the ones needed to + *     complete the device clean up process. + * + * @WIMAX_ST_UNINITIALIZED: [optional] Communication with the device + *     is setup, but the device still requires some configuration + *     before being operational. + *     Some WiMAX API calls might work. + * + * @WIMAX_ST_RADIO_OFF: The device is fully up; radio is off (wether + *     by hardware or software switches). + *     It is recommended to always leave the device in this state + *     after initialization. + * + * @WIMAX_ST_READY: The device is fully up and radio is on. + * + * @WIMAX_ST_SCANNING: [optional] The device has been instructed to + *     scan. In this state, the device cannot be actively connected to + *     a network. + * + * @WIMAX_ST_CONNECTING: The device is connecting to a network. This + *     state exists because in some devices, the connect process can + *     include a number of negotiations between user space, kernel + *     space and the device. User space needs to know what the device + *     is doing. If the connect sequence in a device is atomic and + *     fast, the device can transition directly to CONNECTED + * + * @WIMAX_ST_CONNECTED: The device is connected to a network. + * + * @__WIMAX_ST_INVALID: This is an invalid state used to mark the + *     maximum numeric value of states. + * + * Description: + * + * Transitions from one state to another one are atomic and can only + * be caused in kernel space with wimax_state_change(). To read the + * state, use wimax_state_get(). + * + * States starting with __ are internal and shall not be used or + * referred to by drivers or userspace. They look ugly, but that's the + * point -- if any use is made non-internal to the stack, it is easier + * to catch on review. + * + * All API operations [with well defined exceptions] will take the + * device mutex before starting and then check the state. If the state + * is %__WIMAX_ST_NULL, %WIMAX_ST_DOWN, %WIMAX_ST_UNINITIALIZED or + * %__WIMAX_ST_QUIESCING, it will drop the lock and quit with + * -%EINVAL, -%ENOMEDIUM, -%ENOTCONN or -%ESHUTDOWN. + * + * The order of the definitions is important, so we can do numerical + * comparisons (eg: < %WIMAX_ST_RADIO_OFF means the device is not ready + * to operate). + */ +/* + * The allowed state transitions are described in the table below + * (states in rows can go to states in columns where there is an X): + * + *                                  UNINI   RADIO READY SCAN CONNEC CONNEC + *             NULL DOWN QUIESCING TIALIZED  OFF        NING  TING   TED + * NULL         -    x + * DOWN              -      x        x       x + * QUIESCING         x      - + * UNINITIALIZED            x        -       x + * RADIO_OFF                x                -     x + * READY                    x                x     -     x     x      x + * SCANNING                 x                x     x     -     x      x + * CONNECTING               x                x     x     x     -      x + * CONNECTED                x                x     x                  - + * + * This table not available in kernel-doc because the formatting messes it up. + */ + enum wimax_st { +	__WIMAX_ST_NULL = 0, +	WIMAX_ST_DOWN, +	__WIMAX_ST_QUIESCING, +	WIMAX_ST_UNINITIALIZED, +	WIMAX_ST_RADIO_OFF, +	WIMAX_ST_READY, +	WIMAX_ST_SCANNING, +	WIMAX_ST_CONNECTING, +	WIMAX_ST_CONNECTED, +	__WIMAX_ST_INVALID			/* Always keep last */ +}; + + +#endif /* #ifndef __LINUX__WIMAX_H__ */ diff --git a/include/uapi/linux/wimax/Kbuild b/include/uapi/linux/wimax/Kbuild index aafaa5aa54d..1c97be49971 100644 --- a/include/uapi/linux/wimax/Kbuild +++ b/include/uapi/linux/wimax/Kbuild @@ -1 +1,2 @@  # UAPI Header export list +header-y += i2400m.h diff --git a/include/uapi/linux/wimax/i2400m.h b/include/uapi/linux/wimax/i2400m.h new file mode 100644 index 00000000000..62d35615356 --- /dev/null +++ b/include/uapi/linux/wimax/i2400m.h @@ -0,0 +1,572 @@ +/* + * Intel Wireless WiMax Connection 2400m + * Host-Device protocol interface definitions + * + * + * Copyright (C) 2007-2008 Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + *   * Redistributions of source code must retain the above copyright + *     notice, this list of conditions and the following disclaimer. + *   * Redistributions in binary form must reproduce the above copyright + *     notice, this list of conditions and the following disclaimer in + *     the documentation and/or other materials provided with the + *     distribution. + *   * Neither the name of Intel Corporation nor the names of its + *     contributors may be used to endorse or promote products derived + *     from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + * Intel Corporation <linux-wimax@intel.com> + * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> + *  - Initial implementation + * + * + * This header defines the data structures and constants used to + * communicate with the device. + * + * BOOTMODE/BOOTROM/FIRMWARE UPLOAD PROTOCOL + * + * The firmware upload protocol is quite simple and only requires a + * handful of commands. See drivers/net/wimax/i2400m/fw.c for more + * details. + * + * The BCF data structure is for the firmware file header. + * + * + * THE DATA / CONTROL PROTOCOL + * + * This is the normal protocol spoken with the device once the + * firmware is uploaded. It transports data payloads and control + * messages back and forth. + * + * It consists 'messages' that pack one or more payloads each. The + * format is described in detail in drivers/net/wimax/i2400m/rx.c and + * tx.c. + * + * + * THE L3L4 PROTOCOL + * + * The term L3L4 refers to Layer 3 (the device), Layer 4 (the + * driver/host software). + * + * This is the control protocol used by the host to control the i2400m + * device (scan, connect, disconnect...). This is sent to / received + * as control frames. These frames consist of a header and zero or + * more TLVs with information. We call each control frame a "message". + * + * Each message is composed of: + * + * HEADER + * [TLV0 + PAYLOAD0] + * [TLV1 + PAYLOAD1] + * [...] + * [TLVN + PAYLOADN] + * + * The HEADER is defined by 'struct i2400m_l3l4_hdr'. The payloads are + * defined by a TLV structure (Type Length Value) which is a 'header' + * (struct i2400m_tlv_hdr) and then the payload. + * + * All integers are represented as Little Endian. + * + * - REQUESTS AND EVENTS + * + * The requests can be clasified as follows: + * + *   COMMAND:  implies a request from the host to the device requesting + *             an action being performed. The device will reply with a + *             message (with the same type as the command), status and + *             no (TLV) payload. Execution of a command might cause + *             events (of different type) to be sent later on as + *             device's state changes. + * + *   GET/SET:  similar to COMMAND, but will not cause other + *             EVENTs. The reply, in the case of GET, will contain + *             TLVs with the requested information. + * + *   EVENT:    asynchronous messages sent from the device, maybe as a + *             consequence of previous COMMANDs but disassociated from + *             them. + * + * Only one request might be pending at the same time (ie: don't + * parallelize nor post another GET request before the previous + * COMMAND has been acknowledged with it's corresponding reply by the + * device). + * + * The different requests and their formats are described below: + * + *  I2400M_MT_*   Message types + *  I2400M_MS_*   Message status (for replies, events) + *  i2400m_tlv_*  TLVs + * + * data types are named 'struct i2400m_msg_OPNAME', OPNAME matching the + * operation. + */ + +#ifndef __LINUX__WIMAX__I2400M_H__ +#define __LINUX__WIMAX__I2400M_H__ + +#include <linux/types.h> + + +/* + * Host Device Interface (HDI) common to all busses + */ + +/* Boot-mode (firmware upload mode) commands */ + +/* Header for the firmware file */ +struct i2400m_bcf_hdr { +	__le32 module_type; +	__le32 header_len; +	__le32 header_version; +	__le32 module_id; +	__le32 module_vendor; +	__le32 date;		/* BCD YYYMMDD */ +	__le32 size;            /* in dwords */ +	__le32 key_size;	/* in dwords */ +	__le32 modulus_size;	/* in dwords */ +	__le32 exponent_size;	/* in dwords */ +	__u8 reserved[88]; +} __attribute__ ((packed)); + +/* Boot mode opcodes */ +enum i2400m_brh_opcode { +	I2400M_BRH_READ = 1, +	I2400M_BRH_WRITE = 2, +	I2400M_BRH_JUMP = 3, +	I2400M_BRH_SIGNED_JUMP = 8, +	I2400M_BRH_HASH_PAYLOAD_ONLY = 9, +}; + +/* Boot mode command masks and stuff */ +enum i2400m_brh { +	I2400M_BRH_SIGNATURE = 0xcbbc0000, +	I2400M_BRH_SIGNATURE_MASK = 0xffff0000, +	I2400M_BRH_SIGNATURE_SHIFT = 16, +	I2400M_BRH_OPCODE_MASK = 0x0000000f, +	I2400M_BRH_RESPONSE_MASK = 0x000000f0, +	I2400M_BRH_RESPONSE_SHIFT = 4, +	I2400M_BRH_DIRECT_ACCESS = 0x00000400, +	I2400M_BRH_RESPONSE_REQUIRED = 0x00000200, +	I2400M_BRH_USE_CHECKSUM = 0x00000100, +}; + + +/** + * i2400m_bootrom_header - Header for a boot-mode command + * + * @cmd: the above command descriptor + * @target_addr: where on the device memory should the action be performed. + * @data_size: for read/write, amount of data to be read/written + * @block_checksum: checksum value (if applicable) + * @payload: the beginning of data attached to this header + */ +struct i2400m_bootrom_header { +	__le32 command;		/* Compose with enum i2400_brh */ +	__le32 target_addr; +	__le32 data_size; +	__le32 block_checksum; +	char payload[0]; +} __attribute__ ((packed)); + + +/* + * Data / control protocol + */ + +/* Packet types for the host-device interface */ +enum i2400m_pt { +	I2400M_PT_DATA = 0, +	I2400M_PT_CTRL, +	I2400M_PT_TRACE,	/* For device debug */ +	I2400M_PT_RESET_WARM,	/* device reset */ +	I2400M_PT_RESET_COLD,	/* USB[transport] reset, like reconnect */ +	I2400M_PT_EDATA,	/* Extended RX data */ +	I2400M_PT_ILLEGAL +}; + + +/* + * Payload for a data packet + * + * This is prefixed to each and every outgoing DATA type. + */ +struct i2400m_pl_data_hdr { +	__le32 reserved; +} __attribute__((packed)); + + +/* + * Payload for an extended data packet + * + * New in fw v1.4 + * + * @reorder: if this payload has to be reorder or not (and how) + * @cs: the type of data in the packet, as defined per (802.16e + *     T11.13.19.1). Currently only 2 (IPv4 packet) supported. + * + * This is prefixed to each and every INCOMING DATA packet. + */ +struct i2400m_pl_edata_hdr { +	__le32 reorder;		/* bits defined in i2400m_ro */ +	__u8 cs; +	__u8 reserved[11]; +} __attribute__((packed)); + +enum i2400m_cs { +	I2400M_CS_IPV4_0 = 0, +	I2400M_CS_IPV4 = 2, +}; + +enum i2400m_ro { +	I2400M_RO_NEEDED     = 0x01, +	I2400M_RO_TYPE       = 0x03, +	I2400M_RO_TYPE_SHIFT = 1, +	I2400M_RO_CIN        = 0x0f, +	I2400M_RO_CIN_SHIFT  = 4, +	I2400M_RO_FBN        = 0x07ff, +	I2400M_RO_FBN_SHIFT  = 8, +	I2400M_RO_SN         = 0x07ff, +	I2400M_RO_SN_SHIFT   = 21, +}; + +enum i2400m_ro_type { +	I2400M_RO_TYPE_RESET = 0, +	I2400M_RO_TYPE_PACKET, +	I2400M_RO_TYPE_WS, +	I2400M_RO_TYPE_PACKET_WS, +}; + + +/* Misc constants */ +enum { +	I2400M_PL_ALIGN = 16,	/* Payload data size alignment */ +	I2400M_PL_SIZE_MAX = 0x3EFF, +	I2400M_MAX_PLS_IN_MSG = 60, +	/* protocol barkers: sync sequences; for notifications they +	 * are sent in groups of four. */ +	I2400M_H2D_PREVIEW_BARKER = 0xcafe900d, +	I2400M_COLD_RESET_BARKER = 0xc01dc01d, +	I2400M_WARM_RESET_BARKER = 0x50f750f7, +	I2400M_NBOOT_BARKER = 0xdeadbeef, +	I2400M_SBOOT_BARKER = 0x0ff1c1a1, +	I2400M_SBOOT_BARKER_6050 = 0x80000001, +	I2400M_ACK_BARKER = 0xfeedbabe, +	I2400M_D2H_MSG_BARKER = 0xbeefbabe, +}; + + +/* + * Hardware payload descriptor + * + * Bitfields encoded in a struct to enforce typing semantics. + * + * Look in rx.c and tx.c for a full description of the format. + */ +struct i2400m_pld { +	__le32 val; +} __attribute__ ((packed)); + +#define I2400M_PLD_SIZE_MASK 0x00003fff +#define I2400M_PLD_TYPE_SHIFT 16 +#define I2400M_PLD_TYPE_MASK 0x000f0000 + +/* + * Header for a TX message or RX message + * + * @barker: preamble + * @size: used for management of the FIFO queue buffer; before + *     sending, this is converted to be a real preamble. This + *     indicates the real size of the TX message that starts at this + *     point. If the highest bit is set, then this message is to be + *     skipped. + * @sequence: sequence number of this message + * @offset: offset where the message itself starts -- see the comments + *     in the file header about message header and payload descriptor + *     alignment. + * @num_pls: number of payloads in this message + * @padding: amount of padding bytes at the end of the message to make + *           it be of block-size aligned + * + * Look in rx.c and tx.c for a full description of the format. + */ +struct i2400m_msg_hdr { +	union { +		__le32 barker; +		__u32 size;	/* same size type as barker!! */ +	}; +	union { +		__le32 sequence; +		__u32 offset;	/* same size type as barker!! */ +	}; +	__le16 num_pls; +	__le16 rsv1; +	__le16 padding; +	__le16 rsv2; +	struct i2400m_pld pld[0]; +} __attribute__ ((packed)); + + + +/* + * L3/L4 control protocol + */ + +enum { +	/* Interface version */ +	I2400M_L3L4_VERSION             = 0x0100, +}; + +/* Message types */ +enum i2400m_mt { +	I2400M_MT_RESERVED              = 0x0000, +	I2400M_MT_INVALID               = 0xffff, +	I2400M_MT_REPORT_MASK		= 0x8000, + +	I2400M_MT_GET_SCAN_RESULT  	= 0x4202, +	I2400M_MT_SET_SCAN_PARAM   	= 0x4402, +	I2400M_MT_CMD_RF_CONTROL   	= 0x4602, +	I2400M_MT_CMD_SCAN         	= 0x4603, +	I2400M_MT_CMD_CONNECT      	= 0x4604, +	I2400M_MT_CMD_DISCONNECT   	= 0x4605, +	I2400M_MT_CMD_EXIT_IDLE   	= 0x4606, +	I2400M_MT_GET_LM_VERSION   	= 0x5201, +	I2400M_MT_GET_DEVICE_INFO  	= 0x5202, +	I2400M_MT_GET_LINK_STATUS  	= 0x5203, +	I2400M_MT_GET_STATISTICS   	= 0x5204, +	I2400M_MT_GET_STATE        	= 0x5205, +	I2400M_MT_GET_MEDIA_STATUS	= 0x5206, +	I2400M_MT_SET_INIT_CONFIG	= 0x5404, +	I2400M_MT_CMD_INIT	        = 0x5601, +	I2400M_MT_CMD_TERMINATE		= 0x5602, +	I2400M_MT_CMD_MODE_OF_OP	= 0x5603, +	I2400M_MT_CMD_RESET_DEVICE	= 0x5604, +	I2400M_MT_CMD_MONITOR_CONTROL   = 0x5605, +	I2400M_MT_CMD_ENTER_POWERSAVE   = 0x5606, +	I2400M_MT_GET_TLS_OPERATION_RESULT = 0x6201, +	I2400M_MT_SET_EAP_SUCCESS       = 0x6402, +	I2400M_MT_SET_EAP_FAIL          = 0x6403, +	I2400M_MT_SET_EAP_KEY          	= 0x6404, +	I2400M_MT_CMD_SEND_EAP_RESPONSE = 0x6602, +	I2400M_MT_REPORT_SCAN_RESULT    = 0xc002, +	I2400M_MT_REPORT_STATE		= 0xd002, +	I2400M_MT_REPORT_POWERSAVE_READY = 0xd005, +	I2400M_MT_REPORT_EAP_REQUEST    = 0xe002, +	I2400M_MT_REPORT_EAP_RESTART    = 0xe003, +	I2400M_MT_REPORT_ALT_ACCEPT    	= 0xe004, +	I2400M_MT_REPORT_KEY_REQUEST 	= 0xe005, +}; + + +/* + * Message Ack Status codes + * + * When a message is replied-to, this status is reported. + */ +enum i2400m_ms { +	I2400M_MS_DONE_OK                  = 0, +	I2400M_MS_DONE_IN_PROGRESS         = 1, +	I2400M_MS_INVALID_OP               = 2, +	I2400M_MS_BAD_STATE                = 3, +	I2400M_MS_ILLEGAL_VALUE            = 4, +	I2400M_MS_MISSING_PARAMS           = 5, +	I2400M_MS_VERSION_ERROR            = 6, +	I2400M_MS_ACCESSIBILITY_ERROR      = 7, +	I2400M_MS_BUSY                     = 8, +	I2400M_MS_CORRUPTED_TLV            = 9, +	I2400M_MS_UNINITIALIZED            = 10, +	I2400M_MS_UNKNOWN_ERROR            = 11, +	I2400M_MS_PRODUCTION_ERROR         = 12, +	I2400M_MS_NO_RF                    = 13, +	I2400M_MS_NOT_READY_FOR_POWERSAVE  = 14, +	I2400M_MS_THERMAL_CRITICAL         = 15, +	I2400M_MS_MAX +}; + + +/** + * i2400m_tlv - enumeration of the different types of TLVs + * + * TLVs stand for type-length-value and are the header for a payload + * composed of almost anything. Each payload has a type assigned + * and a length. + */ +enum i2400m_tlv { +	I2400M_TLV_L4_MESSAGE_VERSIONS = 129, +	I2400M_TLV_SYSTEM_STATE = 141, +	I2400M_TLV_MEDIA_STATUS = 161, +	I2400M_TLV_RF_OPERATION = 162, +	I2400M_TLV_RF_STATUS = 163, +	I2400M_TLV_DEVICE_RESET_TYPE = 132, +	I2400M_TLV_CONFIG_IDLE_PARAMETERS = 601, +	I2400M_TLV_CONFIG_IDLE_TIMEOUT = 611, +	I2400M_TLV_CONFIG_D2H_DATA_FORMAT = 614, +	I2400M_TLV_CONFIG_DL_HOST_REORDER = 615, +}; + + +struct i2400m_tlv_hdr { +	__le16 type; +	__le16 length;		/* payload's */ +	__u8   pl[0]; +} __attribute__((packed)); + + +struct i2400m_l3l4_hdr { +	__le16 type; +	__le16 length;		/* payload's */ +	__le16 version; +	__le16 resv1; +	__le16 status; +	__le16 resv2; +	struct i2400m_tlv_hdr pl[0]; +} __attribute__((packed)); + + +/** + * i2400m_system_state - different states of the device + */ +enum i2400m_system_state { +	I2400M_SS_UNINITIALIZED = 1, +	I2400M_SS_INIT, +	I2400M_SS_READY, +	I2400M_SS_SCAN, +	I2400M_SS_STANDBY, +	I2400M_SS_CONNECTING, +	I2400M_SS_WIMAX_CONNECTED, +	I2400M_SS_DATA_PATH_CONNECTED, +	I2400M_SS_IDLE, +	I2400M_SS_DISCONNECTING, +	I2400M_SS_OUT_OF_ZONE, +	I2400M_SS_SLEEPACTIVE, +	I2400M_SS_PRODUCTION, +	I2400M_SS_CONFIG, +	I2400M_SS_RF_OFF, +	I2400M_SS_RF_SHUTDOWN, +	I2400M_SS_DEVICE_DISCONNECT, +	I2400M_SS_MAX, +}; + + +/** + * i2400m_tlv_system_state - report on the state of the system + * + * @state: see enum i2400m_system_state + */ +struct i2400m_tlv_system_state { +	struct i2400m_tlv_hdr hdr; +	__le32 state; +} __attribute__((packed)); + + +struct i2400m_tlv_l4_message_versions { +	struct i2400m_tlv_hdr hdr; +	__le16 major; +	__le16 minor; +	__le16 branch; +	__le16 reserved; +} __attribute__((packed)); + + +struct i2400m_tlv_detailed_device_info { +	struct i2400m_tlv_hdr hdr; +	__u8 reserved1[400]; +	__u8 mac_address[6]; +	__u8 reserved2[2]; +} __attribute__((packed)); + + +enum i2400m_rf_switch_status { +	I2400M_RF_SWITCH_ON = 1, +	I2400M_RF_SWITCH_OFF = 2, +}; + +struct i2400m_tlv_rf_switches_status { +	struct i2400m_tlv_hdr hdr; +	__u8 sw_rf_switch;	/* 1 ON, 2 OFF */ +	__u8 hw_rf_switch;	/* 1 ON, 2 OFF */ +	__u8 reserved[2]; +} __attribute__((packed)); + + +enum { +	i2400m_rf_operation_on = 1, +	i2400m_rf_operation_off = 2 +}; + +struct i2400m_tlv_rf_operation { +	struct i2400m_tlv_hdr hdr; +	__le32 status;	/* 1 ON, 2 OFF */ +} __attribute__((packed)); + + +enum i2400m_tlv_reset_type { +	I2400M_RESET_TYPE_COLD = 1, +	I2400M_RESET_TYPE_WARM +}; + +struct i2400m_tlv_device_reset_type { +	struct i2400m_tlv_hdr hdr; +	__le32 reset_type; +} __attribute__((packed)); + + +struct i2400m_tlv_config_idle_parameters { +	struct i2400m_tlv_hdr hdr; +	__le32 idle_timeout;	/* 100 to 300000 ms [5min], 100 increments +				 * 0 disabled */ +	__le32 idle_paging_interval;	/* frames */ +} __attribute__((packed)); + + +enum i2400m_media_status { +	I2400M_MEDIA_STATUS_LINK_UP = 1, +	I2400M_MEDIA_STATUS_LINK_DOWN, +	I2400M_MEDIA_STATUS_LINK_RENEW, +}; + +struct i2400m_tlv_media_status { +	struct i2400m_tlv_hdr hdr; +	__le32 media_status; +} __attribute__((packed)); + + +/* New in v1.4 */ +struct i2400m_tlv_config_idle_timeout { +	struct i2400m_tlv_hdr hdr; +	__le32 timeout;	/* 100 to 300000 ms [5min], 100 increments +			 * 0 disabled */ +} __attribute__((packed)); + +/* New in v1.4 -- for backward compat, will be removed */ +struct i2400m_tlv_config_d2h_data_format { +	struct i2400m_tlv_hdr hdr; +	__u8 format; 		/* 0 old format, 1 enhanced */ +	__u8 reserved[3]; +} __attribute__((packed)); + +/* New in v1.4 */ +struct i2400m_tlv_config_dl_host_reorder { +	struct i2400m_tlv_hdr hdr; +	__u8 reorder; 		/* 0 disabled, 1 enabled */ +	__u8 reserved[3]; +} __attribute__((packed)); + + +#endif /* #ifndef __LINUX__WIMAX__I2400M_H__ */ diff --git a/include/uapi/linux/wireless.h b/include/uapi/linux/wireless.h new file mode 100644 index 00000000000..c1592e3e403 --- /dev/null +++ b/include/uapi/linux/wireless.h @@ -0,0 +1,1128 @@ +/* + * This file define a set of standard wireless extensions + * + * Version :	22	16.3.07 + * + * Authors :	Jean Tourrilhes - HPL - <jt@hpl.hp.com> + * Copyright (c) 1997-2007 Jean Tourrilhes, All Rights Reserved. + */ + +#ifndef _UAPI_LINUX_WIRELESS_H +#define _UAPI_LINUX_WIRELESS_H + +/************************** DOCUMENTATION **************************/ +/* + * Initial APIs (1996 -> onward) : + * ----------------------------- + * Basically, the wireless extensions are for now a set of standard ioctl + * call + /proc/net/wireless + * + * The entry /proc/net/wireless give statistics and information on the + * driver. + * This is better than having each driver having its entry because + * its centralised and we may remove the driver module safely. + * + * Ioctl are used to configure the driver and issue commands.  This is + * better than command line options of insmod because we may want to + * change dynamically (while the driver is running) some parameters. + * + * The ioctl mechanimsm are copied from standard devices ioctl. + * We have the list of command plus a structure descibing the + * data exchanged... + * Note that to add these ioctl, I was obliged to modify : + *	# net/core/dev.c (two place + add include) + *	# net/ipv4/af_inet.c (one place + add include) + * + * /proc/net/wireless is a copy of /proc/net/dev. + * We have a structure for data passed from the driver to /proc/net/wireless + * Too add this, I've modified : + *	# net/core/dev.c (two other places) + *	# include/linux/netdevice.h (one place) + *	# include/linux/proc_fs.h (one place) + * + * New driver API (2002 -> onward) : + * ------------------------------- + * This file is only concerned with the user space API and common definitions. + * The new driver API is defined and documented in : + *	# include/net/iw_handler.h + * + * Note as well that /proc/net/wireless implementation has now moved in : + *	# net/core/wireless.c + * + * Wireless Events (2002 -> onward) : + * -------------------------------- + * Events are defined at the end of this file, and implemented in : + *	# net/core/wireless.c + * + * Other comments : + * -------------- + * Do not add here things that are redundant with other mechanisms + * (drivers init, ifconfig, /proc/net/dev, ...) and with are not + * wireless specific. + * + * These wireless extensions are not magic : each driver has to provide + * support for them... + * + * IMPORTANT NOTE : As everything in the kernel, this is very much a + * work in progress. Contact me if you have ideas of improvements... + */ + +/***************************** INCLUDES *****************************/ + +#include <linux/types.h>		/* for __u* and __s* typedefs */ +#include <linux/socket.h>		/* for "struct sockaddr" et al	*/ +#include <linux/if.h>			/* for IFNAMSIZ and co... */ + +/***************************** VERSION *****************************/ +/* + * This constant is used to know the availability of the wireless + * extensions and to know which version of wireless extensions it is + * (there is some stuff that will be added in the future...) + * I just plan to increment with each new version. + */ +#define WIRELESS_EXT	22 + +/* + * Changes : + * + * V2 to V3 + * -------- + *	Alan Cox start some incompatibles changes. I've integrated a bit more. + *	- Encryption renamed to Encode to avoid US regulation problems + *	- Frequency changed from float to struct to avoid problems on old 386 + * + * V3 to V4 + * -------- + *	- Add sensitivity + * + * V4 to V5 + * -------- + *	- Missing encoding definitions in range + *	- Access points stuff + * + * V5 to V6 + * -------- + *	- 802.11 support (ESSID ioctls) + * + * V6 to V7 + * -------- + *	- define IW_ESSID_MAX_SIZE and IW_MAX_AP + * + * V7 to V8 + * -------- + *	- Changed my e-mail address + *	- More 802.11 support (nickname, rate, rts, frag) + *	- List index in frequencies + * + * V8 to V9 + * -------- + *	- Support for 'mode of operation' (ad-hoc, managed...) + *	- Support for unicast and multicast power saving + *	- Change encoding to support larger tokens (>64 bits) + *	- Updated iw_params (disable, flags) and use it for NWID + *	- Extracted iw_point from iwreq for clarity + * + * V9 to V10 + * --------- + *	- Add PM capability to range structure + *	- Add PM modifier : MAX/MIN/RELATIVE + *	- Add encoding option : IW_ENCODE_NOKEY + *	- Add TxPower ioctls (work like TxRate) + * + * V10 to V11 + * ---------- + *	- Add WE version in range (help backward/forward compatibility) + *	- Add retry ioctls (work like PM) + * + * V11 to V12 + * ---------- + *	- Add SIOCSIWSTATS to get /proc/net/wireless programatically + *	- Add DEV PRIVATE IOCTL to avoid collisions in SIOCDEVPRIVATE space + *	- Add new statistics (frag, retry, beacon) + *	- Add average quality (for user space calibration) + * + * V12 to V13 + * ---------- + *	- Document creation of new driver API. + *	- Extract union iwreq_data from struct iwreq (for new driver API). + *	- Rename SIOCSIWNAME as SIOCSIWCOMMIT + * + * V13 to V14 + * ---------- + *	- Wireless Events support : define struct iw_event + *	- Define additional specific event numbers + *	- Add "addr" and "param" fields in union iwreq_data + *	- AP scanning stuff (SIOCSIWSCAN and friends) + * + * V14 to V15 + * ---------- + *	- Add IW_PRIV_TYPE_ADDR for struct sockaddr private arg + *	- Make struct iw_freq signed (both m & e), add explicit padding + *	- Add IWEVCUSTOM for driver specific event/scanning token + *	- Add IW_MAX_GET_SPY for driver returning a lot of addresses + *	- Add IW_TXPOW_RANGE for range of Tx Powers + *	- Add IWEVREGISTERED & IWEVEXPIRED events for Access Points + *	- Add IW_MODE_MONITOR for passive monitor + * + * V15 to V16 + * ---------- + *	- Increase the number of bitrates in iw_range to 32 (for 802.11g) + *	- Increase the number of frequencies in iw_range to 32 (for 802.11b+a) + *	- Reshuffle struct iw_range for increases, add filler + *	- Increase IW_MAX_AP to 64 for driver returning a lot of addresses + *	- Remove IW_MAX_GET_SPY because conflict with enhanced spy support + *	- Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy" + *	- Add IW_ENCODE_TEMP and iw_range->encoding_login_index + * + * V16 to V17 + * ---------- + *	- Add flags to frequency -> auto/fixed + *	- Document (struct iw_quality *)->updated, add new flags (INVALID) + *	- Wireless Event capability in struct iw_range + *	- Add support for relative TxPower (yick !) + * + * V17 to V18 (From Jouni Malinen <j@w1.fi>) + * ---------- + *	- Add support for WPA/WPA2 + *	- Add extended encoding configuration (SIOCSIWENCODEEXT and + *	  SIOCGIWENCODEEXT) + *	- Add SIOCSIWGENIE/SIOCGIWGENIE + *	- Add SIOCSIWMLME + *	- Add SIOCSIWPMKSA + *	- Add struct iw_range bit field for supported encoding capabilities + *	- Add optional scan request parameters for SIOCSIWSCAN + *	- Add SIOCSIWAUTH/SIOCGIWAUTH for setting authentication and WPA + *	  related parameters (extensible up to 4096 parameter values) + *	- Add wireless events: IWEVGENIE, IWEVMICHAELMICFAILURE, + *	  IWEVASSOCREQIE, IWEVASSOCRESPIE, IWEVPMKIDCAND + * + * V18 to V19 + * ---------- + *	- Remove (struct iw_point *)->pointer from events and streams + *	- Remove header includes to help user space + *	- Increase IW_ENCODING_TOKEN_MAX from 32 to 64 + *	- Add IW_QUAL_ALL_UPDATED and IW_QUAL_ALL_INVALID macros + *	- Add explicit flag to tell stats are in dBm : IW_QUAL_DBM + *	- Add IW_IOCTL_IDX() and IW_EVENT_IDX() macros + * + * V19 to V20 + * ---------- + *	- RtNetlink requests support (SET/GET) + * + * V20 to V21 + * ---------- + *	- Remove (struct net_device *)->get_wireless_stats() + *	- Change length in ESSID and NICK to strlen() instead of strlen()+1 + *	- Add IW_RETRY_SHORT/IW_RETRY_LONG retry modifiers + *	- Power/Retry relative values no longer * 100000 + *	- Add explicit flag to tell stats are in 802.11k RCPI : IW_QUAL_RCPI + * + * V21 to V22 + * ---------- + *	- Prevent leaking of kernel space in stream on 64 bits. + */ + +/**************************** CONSTANTS ****************************/ + +/* -------------------------- IOCTL LIST -------------------------- */ + +/* Wireless Identification */ +#define SIOCSIWCOMMIT	0x8B00		/* Commit pending changes to driver */ +#define SIOCGIWNAME	0x8B01		/* get name == wireless protocol */ +/* SIOCGIWNAME is used to verify the presence of Wireless Extensions. + * Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"... + * Don't put the name of your driver there, it's useless. */ + +/* Basic operations */ +#define SIOCSIWNWID	0x8B02		/* set network id (pre-802.11) */ +#define SIOCGIWNWID	0x8B03		/* get network id (the cell) */ +#define SIOCSIWFREQ	0x8B04		/* set channel/frequency (Hz) */ +#define SIOCGIWFREQ	0x8B05		/* get channel/frequency (Hz) */ +#define SIOCSIWMODE	0x8B06		/* set operation mode */ +#define SIOCGIWMODE	0x8B07		/* get operation mode */ +#define SIOCSIWSENS	0x8B08		/* set sensitivity (dBm) */ +#define SIOCGIWSENS	0x8B09		/* get sensitivity (dBm) */ + +/* Informative stuff */ +#define SIOCSIWRANGE	0x8B0A		/* Unused */ +#define SIOCGIWRANGE	0x8B0B		/* Get range of parameters */ +#define SIOCSIWPRIV	0x8B0C		/* Unused */ +#define SIOCGIWPRIV	0x8B0D		/* get private ioctl interface info */ +#define SIOCSIWSTATS	0x8B0E		/* Unused */ +#define SIOCGIWSTATS	0x8B0F		/* Get /proc/net/wireless stats */ +/* SIOCGIWSTATS is strictly used between user space and the kernel, and + * is never passed to the driver (i.e. the driver will never see it). */ + +/* Spy support (statistics per MAC address - used for Mobile IP support) */ +#define SIOCSIWSPY	0x8B10		/* set spy addresses */ +#define SIOCGIWSPY	0x8B11		/* get spy info (quality of link) */ +#define SIOCSIWTHRSPY	0x8B12		/* set spy threshold (spy event) */ +#define SIOCGIWTHRSPY	0x8B13		/* get spy threshold */ + +/* Access Point manipulation */ +#define SIOCSIWAP	0x8B14		/* set access point MAC addresses */ +#define SIOCGIWAP	0x8B15		/* get access point MAC addresses */ +#define SIOCGIWAPLIST	0x8B17		/* Deprecated in favor of scanning */ +#define SIOCSIWSCAN	0x8B18		/* trigger scanning (list cells) */ +#define SIOCGIWSCAN	0x8B19		/* get scanning results */ + +/* 802.11 specific support */ +#define SIOCSIWESSID	0x8B1A		/* set ESSID (network name) */ +#define SIOCGIWESSID	0x8B1B		/* get ESSID */ +#define SIOCSIWNICKN	0x8B1C		/* set node name/nickname */ +#define SIOCGIWNICKN	0x8B1D		/* get node name/nickname */ +/* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit + * within the 'iwreq' structure, so we need to use the 'data' member to + * point to a string in user space, like it is done for RANGE... */ + +/* Other parameters useful in 802.11 and some other devices */ +#define SIOCSIWRATE	0x8B20		/* set default bit rate (bps) */ +#define SIOCGIWRATE	0x8B21		/* get default bit rate (bps) */ +#define SIOCSIWRTS	0x8B22		/* set RTS/CTS threshold (bytes) */ +#define SIOCGIWRTS	0x8B23		/* get RTS/CTS threshold (bytes) */ +#define SIOCSIWFRAG	0x8B24		/* set fragmentation thr (bytes) */ +#define SIOCGIWFRAG	0x8B25		/* get fragmentation thr (bytes) */ +#define SIOCSIWTXPOW	0x8B26		/* set transmit power (dBm) */ +#define SIOCGIWTXPOW	0x8B27		/* get transmit power (dBm) */ +#define SIOCSIWRETRY	0x8B28		/* set retry limits and lifetime */ +#define SIOCGIWRETRY	0x8B29		/* get retry limits and lifetime */ + +/* Encoding stuff (scrambling, hardware security, WEP...) */ +#define SIOCSIWENCODE	0x8B2A		/* set encoding token & mode */ +#define SIOCGIWENCODE	0x8B2B		/* get encoding token & mode */ +/* Power saving stuff (power management, unicast and multicast) */ +#define SIOCSIWPOWER	0x8B2C		/* set Power Management settings */ +#define SIOCGIWPOWER	0x8B2D		/* get Power Management settings */ + +/* WPA : Generic IEEE 802.11 informatiom element (e.g., for WPA/RSN/WMM). + * This ioctl uses struct iw_point and data buffer that includes IE id and len + * fields. More than one IE may be included in the request. Setting the generic + * IE to empty buffer (len=0) removes the generic IE from the driver. Drivers + * are allowed to generate their own WPA/RSN IEs, but in these cases, drivers + * are required to report the used IE as a wireless event, e.g., when + * associating with an AP. */ +#define SIOCSIWGENIE	0x8B30		/* set generic IE */ +#define SIOCGIWGENIE	0x8B31		/* get generic IE */ + +/* WPA : IEEE 802.11 MLME requests */ +#define SIOCSIWMLME	0x8B16		/* request MLME operation; uses +					 * struct iw_mlme */ +/* WPA : Authentication mode parameters */ +#define SIOCSIWAUTH	0x8B32		/* set authentication mode params */ +#define SIOCGIWAUTH	0x8B33		/* get authentication mode params */ + +/* WPA : Extended version of encoding configuration */ +#define SIOCSIWENCODEEXT 0x8B34		/* set encoding token & mode */ +#define SIOCGIWENCODEEXT 0x8B35		/* get encoding token & mode */ + +/* WPA2 : PMKSA cache management */ +#define SIOCSIWPMKSA	0x8B36		/* PMKSA cache operation */ + +/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */ + +/* These 32 ioctl are wireless device private, for 16 commands. + * Each driver is free to use them for whatever purpose it chooses, + * however the driver *must* export the description of those ioctls + * with SIOCGIWPRIV and *must* use arguments as defined below. + * If you don't follow those rules, DaveM is going to hate you (reason : + * it make mixed 32/64bit operation impossible). + */ +#define SIOCIWFIRSTPRIV	0x8BE0 +#define SIOCIWLASTPRIV	0x8BFF +/* Previously, we were using SIOCDEVPRIVATE, but we now have our + * separate range because of collisions with other tools such as + * 'mii-tool'. + * We now have 32 commands, so a bit more space ;-). + * Also, all 'even' commands are only usable by root and don't return the + * content of ifr/iwr to user (but you are not obliged to use the set/get + * convention, just use every other two command). More details in iwpriv.c. + * And I repeat : you are not forced to use them with iwpriv, but you + * must be compliant with it. + */ + +/* ------------------------- IOCTL STUFF ------------------------- */ + +/* The first and the last (range) */ +#define SIOCIWFIRST	0x8B00 +#define SIOCIWLAST	SIOCIWLASTPRIV		/* 0x8BFF */ +#define IW_IOCTL_IDX(cmd)	((cmd) - SIOCIWFIRST) +#define IW_HANDLER(id, func)			\ +	[IW_IOCTL_IDX(id)] = func + +/* Odd : get (world access), even : set (root access) */ +#define IW_IS_SET(cmd)	(!((cmd) & 0x1)) +#define IW_IS_GET(cmd)	((cmd) & 0x1) + +/* ----------------------- WIRELESS EVENTS ----------------------- */ +/* Those are *NOT* ioctls, do not issue request on them !!! */ +/* Most events use the same identifier as ioctl requests */ + +#define IWEVTXDROP	0x8C00		/* Packet dropped to excessive retry */ +#define IWEVQUAL	0x8C01		/* Quality part of statistics (scan) */ +#define IWEVCUSTOM	0x8C02		/* Driver specific ascii string */ +#define IWEVREGISTERED	0x8C03		/* Discovered a new node (AP mode) */ +#define IWEVEXPIRED	0x8C04		/* Expired a node (AP mode) */ +#define IWEVGENIE	0x8C05		/* Generic IE (WPA, RSN, WMM, ..) +					 * (scan results); This includes id and +					 * length fields. One IWEVGENIE may +					 * contain more than one IE. Scan +					 * results may contain one or more +					 * IWEVGENIE events. */ +#define IWEVMICHAELMICFAILURE 0x8C06	/* Michael MIC failure +					 * (struct iw_michaelmicfailure) +					 */ +#define IWEVASSOCREQIE	0x8C07		/* IEs used in (Re)Association Request. +					 * The data includes id and length +					 * fields and may contain more than one +					 * IE. This event is required in +					 * Managed mode if the driver +					 * generates its own WPA/RSN IE. This +					 * should be sent just before +					 * IWEVREGISTERED event for the +					 * association. */ +#define IWEVASSOCRESPIE	0x8C08		/* IEs used in (Re)Association +					 * Response. The data includes id and +					 * length fields and may contain more +					 * than one IE. This may be sent +					 * between IWEVASSOCREQIE and +					 * IWEVREGISTERED events for the +					 * association. */ +#define IWEVPMKIDCAND	0x8C09		/* PMKID candidate for RSN +					 * pre-authentication +					 * (struct iw_pmkid_cand) */ + +#define IWEVFIRST	0x8C00 +#define IW_EVENT_IDX(cmd)	((cmd) - IWEVFIRST) + +/* ------------------------- PRIVATE INFO ------------------------- */ +/* + * The following is used with SIOCGIWPRIV. It allow a driver to define + * the interface (name, type of data) for its private ioctl. + * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV + */ + +#define IW_PRIV_TYPE_MASK	0x7000	/* Type of arguments */ +#define IW_PRIV_TYPE_NONE	0x0000 +#define IW_PRIV_TYPE_BYTE	0x1000	/* Char as number */ +#define IW_PRIV_TYPE_CHAR	0x2000	/* Char as character */ +#define IW_PRIV_TYPE_INT	0x4000	/* 32 bits int */ +#define IW_PRIV_TYPE_FLOAT	0x5000	/* struct iw_freq */ +#define IW_PRIV_TYPE_ADDR	0x6000	/* struct sockaddr */ + +#define IW_PRIV_SIZE_FIXED	0x0800	/* Variable or fixed number of args */ + +#define IW_PRIV_SIZE_MASK	0x07FF	/* Max number of those args */ + +/* + * Note : if the number of args is fixed and the size < 16 octets, + * instead of passing a pointer we will put args in the iwreq struct... + */ + +/* ----------------------- OTHER CONSTANTS ----------------------- */ + +/* Maximum frequencies in the range struct */ +#define IW_MAX_FREQUENCIES	32 +/* Note : if you have something like 80 frequencies, + * don't increase this constant and don't fill the frequency list. + * The user will be able to set by channel anyway... */ + +/* Maximum bit rates in the range struct */ +#define IW_MAX_BITRATES		32 + +/* Maximum tx powers in the range struct */ +#define IW_MAX_TXPOWER		8 +/* Note : if you more than 8 TXPowers, just set the max and min or + * a few of them in the struct iw_range. */ + +/* Maximum of address that you may set with SPY */ +#define IW_MAX_SPY		8 + +/* Maximum of address that you may get in the +   list of access points in range */ +#define IW_MAX_AP		64 + +/* Maximum size of the ESSID and NICKN strings */ +#define IW_ESSID_MAX_SIZE	32 + +/* Modes of operation */ +#define IW_MODE_AUTO	0	/* Let the driver decides */ +#define IW_MODE_ADHOC	1	/* Single cell network */ +#define IW_MODE_INFRA	2	/* Multi cell network, roaming, ... */ +#define IW_MODE_MASTER	3	/* Synchronisation master or Access Point */ +#define IW_MODE_REPEAT	4	/* Wireless Repeater (forwarder) */ +#define IW_MODE_SECOND	5	/* Secondary master/repeater (backup) */ +#define IW_MODE_MONITOR	6	/* Passive monitor (listen only) */ +#define IW_MODE_MESH	7	/* Mesh (IEEE 802.11s) network */ + +/* Statistics flags (bitmask in updated) */ +#define IW_QUAL_QUAL_UPDATED	0x01	/* Value was updated since last read */ +#define IW_QUAL_LEVEL_UPDATED	0x02 +#define IW_QUAL_NOISE_UPDATED	0x04 +#define IW_QUAL_ALL_UPDATED	0x07 +#define IW_QUAL_DBM		0x08	/* Level + Noise are dBm */ +#define IW_QUAL_QUAL_INVALID	0x10	/* Driver doesn't provide value */ +#define IW_QUAL_LEVEL_INVALID	0x20 +#define IW_QUAL_NOISE_INVALID	0x40 +#define IW_QUAL_RCPI		0x80	/* Level + Noise are 802.11k RCPI */ +#define IW_QUAL_ALL_INVALID	0x70 + +/* Frequency flags */ +#define IW_FREQ_AUTO		0x00	/* Let the driver decides */ +#define IW_FREQ_FIXED		0x01	/* Force a specific value */ + +/* Maximum number of size of encoding token available + * they are listed in the range structure */ +#define IW_MAX_ENCODING_SIZES	8 + +/* Maximum size of the encoding token in bytes */ +#define IW_ENCODING_TOKEN_MAX	64	/* 512 bits (for now) */ + +/* Flags for encoding (along with the token) */ +#define IW_ENCODE_INDEX		0x00FF	/* Token index (if needed) */ +#define IW_ENCODE_FLAGS		0xFF00	/* Flags defined below */ +#define IW_ENCODE_MODE		0xF000	/* Modes defined below */ +#define IW_ENCODE_DISABLED	0x8000	/* Encoding disabled */ +#define IW_ENCODE_ENABLED	0x0000	/* Encoding enabled */ +#define IW_ENCODE_RESTRICTED	0x4000	/* Refuse non-encoded packets */ +#define IW_ENCODE_OPEN		0x2000	/* Accept non-encoded packets */ +#define IW_ENCODE_NOKEY		0x0800  /* Key is write only, so not present */ +#define IW_ENCODE_TEMP		0x0400  /* Temporary key */ + +/* Power management flags available (along with the value, if any) */ +#define IW_POWER_ON		0x0000	/* No details... */ +#define IW_POWER_TYPE		0xF000	/* Type of parameter */ +#define IW_POWER_PERIOD		0x1000	/* Value is a period/duration of  */ +#define IW_POWER_TIMEOUT	0x2000	/* Value is a timeout (to go asleep) */ +#define IW_POWER_MODE		0x0F00	/* Power Management mode */ +#define IW_POWER_UNICAST_R	0x0100	/* Receive only unicast messages */ +#define IW_POWER_MULTICAST_R	0x0200	/* Receive only multicast messages */ +#define IW_POWER_ALL_R		0x0300	/* Receive all messages though PM */ +#define IW_POWER_FORCE_S	0x0400	/* Force PM procedure for sending unicast */ +#define IW_POWER_REPEATER	0x0800	/* Repeat broadcast messages in PM period */ +#define IW_POWER_MODIFIER	0x000F	/* Modify a parameter */ +#define IW_POWER_MIN		0x0001	/* Value is a minimum  */ +#define IW_POWER_MAX		0x0002	/* Value is a maximum */ +#define IW_POWER_RELATIVE	0x0004	/* Value is not in seconds/ms/us */ + +/* Transmit Power flags available */ +#define IW_TXPOW_TYPE		0x00FF	/* Type of value */ +#define IW_TXPOW_DBM		0x0000	/* Value is in dBm */ +#define IW_TXPOW_MWATT		0x0001	/* Value is in mW */ +#define IW_TXPOW_RELATIVE	0x0002	/* Value is in arbitrary units */ +#define IW_TXPOW_RANGE		0x1000	/* Range of value between min/max */ + +/* Retry limits and lifetime flags available */ +#define IW_RETRY_ON		0x0000	/* No details... */ +#define IW_RETRY_TYPE		0xF000	/* Type of parameter */ +#define IW_RETRY_LIMIT		0x1000	/* Maximum number of retries*/ +#define IW_RETRY_LIFETIME	0x2000	/* Maximum duration of retries in us */ +#define IW_RETRY_MODIFIER	0x00FF	/* Modify a parameter */ +#define IW_RETRY_MIN		0x0001	/* Value is a minimum  */ +#define IW_RETRY_MAX		0x0002	/* Value is a maximum */ +#define IW_RETRY_RELATIVE	0x0004	/* Value is not in seconds/ms/us */ +#define IW_RETRY_SHORT		0x0010	/* Value is for short packets  */ +#define IW_RETRY_LONG		0x0020	/* Value is for long packets */ + +/* Scanning request flags */ +#define IW_SCAN_DEFAULT		0x0000	/* Default scan of the driver */ +#define IW_SCAN_ALL_ESSID	0x0001	/* Scan all ESSIDs */ +#define IW_SCAN_THIS_ESSID	0x0002	/* Scan only this ESSID */ +#define IW_SCAN_ALL_FREQ	0x0004	/* Scan all Frequencies */ +#define IW_SCAN_THIS_FREQ	0x0008	/* Scan only this Frequency */ +#define IW_SCAN_ALL_MODE	0x0010	/* Scan all Modes */ +#define IW_SCAN_THIS_MODE	0x0020	/* Scan only this Mode */ +#define IW_SCAN_ALL_RATE	0x0040	/* Scan all Bit-Rates */ +#define IW_SCAN_THIS_RATE	0x0080	/* Scan only this Bit-Rate */ +/* struct iw_scan_req scan_type */ +#define IW_SCAN_TYPE_ACTIVE 0 +#define IW_SCAN_TYPE_PASSIVE 1 +/* Maximum size of returned data */ +#define IW_SCAN_MAX_DATA	4096	/* In bytes */ + +/* Scan capability flags - in (struct iw_range *)->scan_capa */ +#define IW_SCAN_CAPA_NONE		0x00 +#define IW_SCAN_CAPA_ESSID		0x01 +#define IW_SCAN_CAPA_BSSID		0x02 +#define IW_SCAN_CAPA_CHANNEL	0x04 +#define IW_SCAN_CAPA_MODE		0x08 +#define IW_SCAN_CAPA_RATE		0x10 +#define IW_SCAN_CAPA_TYPE		0x20 +#define IW_SCAN_CAPA_TIME		0x40 + +/* Max number of char in custom event - use multiple of them if needed */ +#define IW_CUSTOM_MAX		256	/* In bytes */ + +/* Generic information element */ +#define IW_GENERIC_IE_MAX	1024 + +/* MLME requests (SIOCSIWMLME / struct iw_mlme) */ +#define IW_MLME_DEAUTH		0 +#define IW_MLME_DISASSOC	1 +#define IW_MLME_AUTH		2 +#define IW_MLME_ASSOC		3 + +/* SIOCSIWAUTH/SIOCGIWAUTH struct iw_param flags */ +#define IW_AUTH_INDEX		0x0FFF +#define IW_AUTH_FLAGS		0xF000 +/* SIOCSIWAUTH/SIOCGIWAUTH parameters (0 .. 4095) + * (IW_AUTH_INDEX mask in struct iw_param flags; this is the index of the + * parameter that is being set/get to; value will be read/written to + * struct iw_param value field) */ +#define IW_AUTH_WPA_VERSION		0 +#define IW_AUTH_CIPHER_PAIRWISE		1 +#define IW_AUTH_CIPHER_GROUP		2 +#define IW_AUTH_KEY_MGMT		3 +#define IW_AUTH_TKIP_COUNTERMEASURES	4 +#define IW_AUTH_DROP_UNENCRYPTED	5 +#define IW_AUTH_80211_AUTH_ALG		6 +#define IW_AUTH_WPA_ENABLED		7 +#define IW_AUTH_RX_UNENCRYPTED_EAPOL	8 +#define IW_AUTH_ROAMING_CONTROL		9 +#define IW_AUTH_PRIVACY_INVOKED		10 +#define IW_AUTH_CIPHER_GROUP_MGMT	11 +#define IW_AUTH_MFP			12 + +/* IW_AUTH_WPA_VERSION values (bit field) */ +#define IW_AUTH_WPA_VERSION_DISABLED	0x00000001 +#define IW_AUTH_WPA_VERSION_WPA		0x00000002 +#define IW_AUTH_WPA_VERSION_WPA2	0x00000004 + +/* IW_AUTH_PAIRWISE_CIPHER, IW_AUTH_GROUP_CIPHER, and IW_AUTH_CIPHER_GROUP_MGMT + * values (bit field) */ +#define IW_AUTH_CIPHER_NONE	0x00000001 +#define IW_AUTH_CIPHER_WEP40	0x00000002 +#define IW_AUTH_CIPHER_TKIP	0x00000004 +#define IW_AUTH_CIPHER_CCMP	0x00000008 +#define IW_AUTH_CIPHER_WEP104	0x00000010 +#define IW_AUTH_CIPHER_AES_CMAC	0x00000020 + +/* IW_AUTH_KEY_MGMT values (bit field) */ +#define IW_AUTH_KEY_MGMT_802_1X	1 +#define IW_AUTH_KEY_MGMT_PSK	2 + +/* IW_AUTH_80211_AUTH_ALG values (bit field) */ +#define IW_AUTH_ALG_OPEN_SYSTEM	0x00000001 +#define IW_AUTH_ALG_SHARED_KEY	0x00000002 +#define IW_AUTH_ALG_LEAP	0x00000004 + +/* IW_AUTH_ROAMING_CONTROL values */ +#define IW_AUTH_ROAMING_ENABLE	0	/* driver/firmware based roaming */ +#define IW_AUTH_ROAMING_DISABLE	1	/* user space program used for roaming +					 * control */ + +/* IW_AUTH_MFP (management frame protection) values */ +#define IW_AUTH_MFP_DISABLED	0	/* MFP disabled */ +#define IW_AUTH_MFP_OPTIONAL	1	/* MFP optional */ +#define IW_AUTH_MFP_REQUIRED	2	/* MFP required */ + +/* SIOCSIWENCODEEXT definitions */ +#define IW_ENCODE_SEQ_MAX_SIZE	8 +/* struct iw_encode_ext ->alg */ +#define IW_ENCODE_ALG_NONE	0 +#define IW_ENCODE_ALG_WEP	1 +#define IW_ENCODE_ALG_TKIP	2 +#define IW_ENCODE_ALG_CCMP	3 +#define IW_ENCODE_ALG_PMK	4 +#define IW_ENCODE_ALG_AES_CMAC	5 +/* struct iw_encode_ext ->ext_flags */ +#define IW_ENCODE_EXT_TX_SEQ_VALID	0x00000001 +#define IW_ENCODE_EXT_RX_SEQ_VALID	0x00000002 +#define IW_ENCODE_EXT_GROUP_KEY		0x00000004 +#define IW_ENCODE_EXT_SET_TX_KEY	0x00000008 + +/* IWEVMICHAELMICFAILURE : struct iw_michaelmicfailure ->flags */ +#define IW_MICFAILURE_KEY_ID	0x00000003 /* Key ID 0..3 */ +#define IW_MICFAILURE_GROUP	0x00000004 +#define IW_MICFAILURE_PAIRWISE	0x00000008 +#define IW_MICFAILURE_STAKEY	0x00000010 +#define IW_MICFAILURE_COUNT	0x00000060 /* 1 or 2 (0 = count not supported) +					    */ + +/* Bit field values for enc_capa in struct iw_range */ +#define IW_ENC_CAPA_WPA		0x00000001 +#define IW_ENC_CAPA_WPA2	0x00000002 +#define IW_ENC_CAPA_CIPHER_TKIP	0x00000004 +#define IW_ENC_CAPA_CIPHER_CCMP	0x00000008 +#define IW_ENC_CAPA_4WAY_HANDSHAKE	0x00000010 + +/* Event capability macros - in (struct iw_range *)->event_capa + * Because we have more than 32 possible events, we use an array of + * 32 bit bitmasks. Note : 32 bits = 0x20 = 2^5. */ +#define IW_EVENT_CAPA_BASE(cmd)		((cmd >= SIOCIWFIRSTPRIV) ? \ +					 (cmd - SIOCIWFIRSTPRIV + 0x60) : \ +					 (cmd - SIOCIWFIRST)) +#define IW_EVENT_CAPA_INDEX(cmd)	(IW_EVENT_CAPA_BASE(cmd) >> 5) +#define IW_EVENT_CAPA_MASK(cmd)		(1 << (IW_EVENT_CAPA_BASE(cmd) & 0x1F)) +/* Event capability constants - event autogenerated by the kernel + * This list is valid for most 802.11 devices, customise as needed... */ +#define IW_EVENT_CAPA_K_0	(IW_EVENT_CAPA_MASK(0x8B04) | \ +				 IW_EVENT_CAPA_MASK(0x8B06) | \ +				 IW_EVENT_CAPA_MASK(0x8B1A)) +#define IW_EVENT_CAPA_K_1	(IW_EVENT_CAPA_MASK(0x8B2A)) +/* "Easy" macro to set events in iw_range (less efficient) */ +#define IW_EVENT_CAPA_SET(event_capa, cmd) (event_capa[IW_EVENT_CAPA_INDEX(cmd)] |= IW_EVENT_CAPA_MASK(cmd)) +#define IW_EVENT_CAPA_SET_KERNEL(event_capa) {event_capa[0] |= IW_EVENT_CAPA_K_0; event_capa[1] |= IW_EVENT_CAPA_K_1; } + + +/****************************** TYPES ******************************/ + +/* --------------------------- SUBTYPES --------------------------- */ +/* + *	Generic format for most parameters that fit in an int + */ +struct	iw_param +{ +  __s32		value;		/* The value of the parameter itself */ +  __u8		fixed;		/* Hardware should not use auto select */ +  __u8		disabled;	/* Disable the feature */ +  __u16		flags;		/* Various specifc flags (if any) */ +}; + +/* + *	For all data larger than 16 octets, we need to use a + *	pointer to memory allocated in user space. + */ +struct	iw_point +{ +  void __user	*pointer;	/* Pointer to the data  (in user space) */ +  __u16		length;		/* number of fields or size in bytes */ +  __u16		flags;		/* Optional params */ +}; + + +/* + *	A frequency + *	For numbers lower than 10^9, we encode the number in 'm' and + *	set 'e' to 0 + *	For number greater than 10^9, we divide it by the lowest power + *	of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')... + *	The power of 10 is in 'e', the result of the division is in 'm'. + */ +struct	iw_freq +{ +	__s32		m;		/* Mantissa */ +	__s16		e;		/* Exponent */ +	__u8		i;		/* List index (when in range struct) */ +	__u8		flags;		/* Flags (fixed/auto) */ +}; + +/* + *	Quality of the link + */ +struct	iw_quality +{ +	__u8		qual;		/* link quality (%retries, SNR, +					   %missed beacons or better...) */ +	__u8		level;		/* signal level (dBm) */ +	__u8		noise;		/* noise level (dBm) */ +	__u8		updated;	/* Flags to know if updated */ +}; + +/* + *	Packet discarded in the wireless adapter due to + *	"wireless" specific problems... + *	Note : the list of counter and statistics in net_device_stats + *	is already pretty exhaustive, and you should use that first. + *	This is only additional stats... + */ +struct	iw_discarded +{ +	__u32		nwid;		/* Rx : Wrong nwid/essid */ +	__u32		code;		/* Rx : Unable to code/decode (WEP) */ +	__u32		fragment;	/* Rx : Can't perform MAC reassembly */ +	__u32		retries;	/* Tx : Max MAC retries num reached */ +	__u32		misc;		/* Others cases */ +}; + +/* + *	Packet/Time period missed in the wireless adapter due to + *	"wireless" specific problems... + */ +struct	iw_missed +{ +	__u32		beacon;		/* Missed beacons/superframe */ +}; + +/* + *	Quality range (for spy threshold) + */ +struct	iw_thrspy +{ +	struct sockaddr		addr;		/* Source address (hw/mac) */ +	struct iw_quality	qual;		/* Quality of the link */ +	struct iw_quality	low;		/* Low threshold */ +	struct iw_quality	high;		/* High threshold */ +}; + +/* + *	Optional data for scan request + * + *	Note: these optional parameters are controlling parameters for the + *	scanning behavior, these do not apply to getting scan results + *	(SIOCGIWSCAN). Drivers are expected to keep a local BSS table and + *	provide a merged results with all BSSes even if the previous scan + *	request limited scanning to a subset, e.g., by specifying an SSID. + *	Especially, scan results are required to include an entry for the + *	current BSS if the driver is in Managed mode and associated with an AP. + */ +struct	iw_scan_req +{ +	__u8		scan_type; /* IW_SCAN_TYPE_{ACTIVE,PASSIVE} */ +	__u8		essid_len; +	__u8		num_channels; /* num entries in channel_list; +				       * 0 = scan all allowed channels */ +	__u8		flags; /* reserved as padding; use zero, this may +				* be used in the future for adding flags +				* to request different scan behavior */ +	struct sockaddr	bssid; /* ff:ff:ff:ff:ff:ff for broadcast BSSID or +				* individual address of a specific BSS */ + +	/* +	 * Use this ESSID if IW_SCAN_THIS_ESSID flag is used instead of using +	 * the current ESSID. This allows scan requests for specific ESSID +	 * without having to change the current ESSID and potentially breaking +	 * the current association. +	 */ +	__u8		essid[IW_ESSID_MAX_SIZE]; + +	/* +	 * Optional parameters for changing the default scanning behavior. +	 * These are based on the MLME-SCAN.request from IEEE Std 802.11. +	 * TU is 1.024 ms. If these are set to 0, driver is expected to use +	 * reasonable default values. min_channel_time defines the time that +	 * will be used to wait for the first reply on each channel. If no +	 * replies are received, next channel will be scanned after this. If +	 * replies are received, total time waited on the channel is defined by +	 * max_channel_time. +	 */ +	__u32		min_channel_time; /* in TU */ +	__u32		max_channel_time; /* in TU */ + +	struct iw_freq	channel_list[IW_MAX_FREQUENCIES]; +}; + +/* ------------------------- WPA SUPPORT ------------------------- */ + +/* + *	Extended data structure for get/set encoding (this is used with + *	SIOCSIWENCODEEXT/SIOCGIWENCODEEXT. struct iw_point and IW_ENCODE_* + *	flags are used in the same way as with SIOCSIWENCODE/SIOCGIWENCODE and + *	only the data contents changes (key data -> this structure, including + *	key data). + * + *	If the new key is the first group key, it will be set as the default + *	TX key. Otherwise, default TX key index is only changed if + *	IW_ENCODE_EXT_SET_TX_KEY flag is set. + * + *	Key will be changed with SIOCSIWENCODEEXT in all cases except for + *	special "change TX key index" operation which is indicated by setting + *	key_len = 0 and ext_flags |= IW_ENCODE_EXT_SET_TX_KEY. + * + *	tx_seq/rx_seq are only used when respective + *	IW_ENCODE_EXT_{TX,RX}_SEQ_VALID flag is set in ext_flags. Normal + *	TKIP/CCMP operation is to set RX seq with SIOCSIWENCODEEXT and start + *	TX seq from zero whenever key is changed. SIOCGIWENCODEEXT is normally + *	used only by an Authenticator (AP or an IBSS station) to get the + *	current TX sequence number. Using TX_SEQ_VALID for SIOCSIWENCODEEXT and + *	RX_SEQ_VALID for SIOCGIWENCODEEXT are optional, but can be useful for + *	debugging/testing. + */ +struct	iw_encode_ext +{ +	__u32		ext_flags; /* IW_ENCODE_EXT_* */ +	__u8		tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ +	__u8		rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ +	struct sockaddr	addr; /* ff:ff:ff:ff:ff:ff for broadcast/multicast +			       * (group) keys or unicast address for +			       * individual keys */ +	__u16		alg; /* IW_ENCODE_ALG_* */ +	__u16		key_len; +	__u8		key[0]; +}; + +/* SIOCSIWMLME data */ +struct	iw_mlme +{ +	__u16		cmd; /* IW_MLME_* */ +	__u16		reason_code; +	struct sockaddr	addr; +}; + +/* SIOCSIWPMKSA data */ +#define IW_PMKSA_ADD		1 +#define IW_PMKSA_REMOVE		2 +#define IW_PMKSA_FLUSH		3 + +#define IW_PMKID_LEN	16 + +struct	iw_pmksa +{ +	__u32		cmd; /* IW_PMKSA_* */ +	struct sockaddr	bssid; +	__u8		pmkid[IW_PMKID_LEN]; +}; + +/* IWEVMICHAELMICFAILURE data */ +struct	iw_michaelmicfailure +{ +	__u32		flags; +	struct sockaddr	src_addr; +	__u8		tsc[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ +}; + +/* IWEVPMKIDCAND data */ +#define IW_PMKID_CAND_PREAUTH	0x00000001 /* RNS pre-authentication enabled */ +struct	iw_pmkid_cand +{ +	__u32		flags; /* IW_PMKID_CAND_* */ +	__u32		index; /* the smaller the index, the higher the +				* priority */ +	struct sockaddr	bssid; +}; + +/* ------------------------ WIRELESS STATS ------------------------ */ +/* + * Wireless statistics (used for /proc/net/wireless) + */ +struct	iw_statistics +{ +	__u16		status;		/* Status +					 * - device dependent for now */ + +	struct iw_quality	qual;		/* Quality of the link +						 * (instant/mean/max) */ +	struct iw_discarded	discard;	/* Packet discarded counts */ +	struct iw_missed	miss;		/* Packet missed counts */ +}; + +/* ------------------------ IOCTL REQUEST ------------------------ */ +/* + * This structure defines the payload of an ioctl, and is used  + * below. + * + * Note that this structure should fit on the memory footprint + * of iwreq (which is the same as ifreq), which mean a max size of + * 16 octets = 128 bits. Warning, pointers might be 64 bits wide... + * You should check this when increasing the structures defined + * above in this file... + */ +union	iwreq_data +{ +	/* Config - generic */ +	char		name[IFNAMSIZ]; +	/* Name : used to verify the presence of  wireless extensions. +	 * Name of the protocol/provider... */ + +	struct iw_point	essid;		/* Extended network name */ +	struct iw_param	nwid;		/* network id (or domain - the cell) */ +	struct iw_freq	freq;		/* frequency or channel : +					 * 0-1000 = channel +					 * > 1000 = frequency in Hz */ + +	struct iw_param	sens;		/* signal level threshold */ +	struct iw_param	bitrate;	/* default bit rate */ +	struct iw_param	txpower;	/* default transmit power */ +	struct iw_param	rts;		/* RTS threshold threshold */ +	struct iw_param	frag;		/* Fragmentation threshold */ +	__u32		mode;		/* Operation mode */ +	struct iw_param	retry;		/* Retry limits & lifetime */ + +	struct iw_point	encoding;	/* Encoding stuff : tokens */ +	struct iw_param	power;		/* PM duration/timeout */ +	struct iw_quality qual;		/* Quality part of statistics */ + +	struct sockaddr	ap_addr;	/* Access point address */ +	struct sockaddr	addr;		/* Destination address (hw/mac) */ + +	struct iw_param	param;		/* Other small parameters */ +	struct iw_point	data;		/* Other large parameters */ +}; + +/* + * The structure to exchange data for ioctl. + * This structure is the same as 'struct ifreq', but (re)defined for + * convenience... + * Do I need to remind you about structure size (32 octets) ? + */ +struct	iwreq  +{ +	union +	{ +		char	ifrn_name[IFNAMSIZ];	/* if name, e.g. "eth0" */ +	} ifr_ifrn; + +	/* Data part (defined just above) */ +	union	iwreq_data	u; +}; + +/* -------------------------- IOCTL DATA -------------------------- */ +/* + *	For those ioctl which want to exchange mode data that what could + *	fit in the above structure... + */ + +/* + *	Range of parameters + */ + +struct	iw_range +{ +	/* Informative stuff (to choose between different interface) */ +	__u32		throughput;	/* To give an idea... */ +	/* In theory this value should be the maximum benchmarked +	 * TCP/IP throughput, because with most of these devices the +	 * bit rate is meaningless (overhead an co) to estimate how +	 * fast the connection will go and pick the fastest one. +	 * I suggest people to play with Netperf or any benchmark... +	 */ + +	/* NWID (or domain id) */ +	__u32		min_nwid;	/* Minimal NWID we are able to set */ +	__u32		max_nwid;	/* Maximal NWID we are able to set */ + +	/* Old Frequency (backward compat - moved lower ) */ +	__u16		old_num_channels; +	__u8		old_num_frequency; + +	/* Scan capabilities */ +	__u8		scan_capa; 	/* IW_SCAN_CAPA_* bit field */ + +	/* Wireless event capability bitmasks */ +	__u32		event_capa[6]; + +	/* signal level threshold range */ +	__s32		sensitivity; + +	/* Quality of link & SNR stuff */ +	/* Quality range (link, level, noise) +	 * If the quality is absolute, it will be in the range [0 ; max_qual], +	 * if the quality is dBm, it will be in the range [max_qual ; 0]. +	 * Don't forget that we use 8 bit arithmetics... */ +	struct iw_quality	max_qual;	/* Quality of the link */ +	/* This should contain the average/typical values of the quality +	 * indicator. This should be the threshold between a "good" and +	 * a "bad" link (example : monitor going from green to orange). +	 * Currently, user space apps like quality monitors don't have any +	 * way to calibrate the measurement. With this, they can split +	 * the range between 0 and max_qual in different quality level +	 * (using a geometric subdivision centered on the average). +	 * I expect that people doing the user space apps will feedback +	 * us on which value we need to put in each driver... */ +	struct iw_quality	avg_qual;	/* Quality of the link */ + +	/* Rates */ +	__u8		num_bitrates;	/* Number of entries in the list */ +	__s32		bitrate[IW_MAX_BITRATES];	/* list, in bps */ + +	/* RTS threshold */ +	__s32		min_rts;	/* Minimal RTS threshold */ +	__s32		max_rts;	/* Maximal RTS threshold */ + +	/* Frag threshold */ +	__s32		min_frag;	/* Minimal frag threshold */ +	__s32		max_frag;	/* Maximal frag threshold */ + +	/* Power Management duration & timeout */ +	__s32		min_pmp;	/* Minimal PM period */ +	__s32		max_pmp;	/* Maximal PM period */ +	__s32		min_pmt;	/* Minimal PM timeout */ +	__s32		max_pmt;	/* Maximal PM timeout */ +	__u16		pmp_flags;	/* How to decode max/min PM period */ +	__u16		pmt_flags;	/* How to decode max/min PM timeout */ +	__u16		pm_capa;	/* What PM options are supported */ + +	/* Encoder stuff */ +	__u16	encoding_size[IW_MAX_ENCODING_SIZES];	/* Different token sizes */ +	__u8	num_encoding_sizes;	/* Number of entry in the list */ +	__u8	max_encoding_tokens;	/* Max number of tokens */ +	/* For drivers that need a "login/passwd" form */ +	__u8	encoding_login_index;	/* token index for login token */ + +	/* Transmit power */ +	__u16		txpower_capa;	/* What options are supported */ +	__u8		num_txpower;	/* Number of entries in the list */ +	__s32		txpower[IW_MAX_TXPOWER];	/* list, in bps */ + +	/* Wireless Extension version info */ +	__u8		we_version_compiled;	/* Must be WIRELESS_EXT */ +	__u8		we_version_source;	/* Last update of source */ + +	/* Retry limits and lifetime */ +	__u16		retry_capa;	/* What retry options are supported */ +	__u16		retry_flags;	/* How to decode max/min retry limit */ +	__u16		r_time_flags;	/* How to decode max/min retry life */ +	__s32		min_retry;	/* Minimal number of retries */ +	__s32		max_retry;	/* Maximal number of retries */ +	__s32		min_r_time;	/* Minimal retry lifetime */ +	__s32		max_r_time;	/* Maximal retry lifetime */ + +	/* Frequency */ +	__u16		num_channels;	/* Number of channels [0; num - 1] */ +	__u8		num_frequency;	/* Number of entry in the list */ +	struct iw_freq	freq[IW_MAX_FREQUENCIES];	/* list */ +	/* Note : this frequency list doesn't need to fit channel numbers, +	 * because each entry contain its channel index */ + +	__u32		enc_capa;	/* IW_ENC_CAPA_* bit field */ +}; + +/* + * Private ioctl interface information + */ +  +struct	iw_priv_args +{ +	__u32		cmd;		/* Number of the ioctl to issue */ +	__u16		set_args;	/* Type and number of args */ +	__u16		get_args;	/* Type and number of args */ +	char		name[IFNAMSIZ];	/* Name of the extension */ +}; + +/* ----------------------- WIRELESS EVENTS ----------------------- */ +/* + * Wireless events are carried through the rtnetlink socket to user + * space. They are encapsulated in the IFLA_WIRELESS field of + * a RTM_NEWLINK message. + */ + +/* + * A Wireless Event. Contains basically the same data as the ioctl... + */ +struct iw_event +{ +	__u16		len;			/* Real length of this stuff */ +	__u16		cmd;			/* Wireless IOCTL */ +	union iwreq_data	u;		/* IOCTL fixed payload */ +}; + +/* Size of the Event prefix (including padding and alignement junk) */ +#define IW_EV_LCP_LEN	(sizeof(struct iw_event) - sizeof(union iwreq_data)) +/* Size of the various events */ +#define IW_EV_CHAR_LEN	(IW_EV_LCP_LEN + IFNAMSIZ) +#define IW_EV_UINT_LEN	(IW_EV_LCP_LEN + sizeof(__u32)) +#define IW_EV_FREQ_LEN	(IW_EV_LCP_LEN + sizeof(struct iw_freq)) +#define IW_EV_PARAM_LEN	(IW_EV_LCP_LEN + sizeof(struct iw_param)) +#define IW_EV_ADDR_LEN	(IW_EV_LCP_LEN + sizeof(struct sockaddr)) +#define IW_EV_QUAL_LEN	(IW_EV_LCP_LEN + sizeof(struct iw_quality)) + +/* iw_point events are special. First, the payload (extra data) come at + * the end of the event, so they are bigger than IW_EV_POINT_LEN. Second, + * we omit the pointer, so start at an offset. */ +#define IW_EV_POINT_OFF (((char *) &(((struct iw_point *) NULL)->length)) - \ +			  (char *) NULL) +#define IW_EV_POINT_LEN	(IW_EV_LCP_LEN + sizeof(struct iw_point) - \ +			 IW_EV_POINT_OFF) + + +/* Size of the Event prefix when packed in stream */ +#define IW_EV_LCP_PK_LEN	(4) +/* Size of the various events when packed in stream */ +#define IW_EV_CHAR_PK_LEN	(IW_EV_LCP_PK_LEN + IFNAMSIZ) +#define IW_EV_UINT_PK_LEN	(IW_EV_LCP_PK_LEN + sizeof(__u32)) +#define IW_EV_FREQ_PK_LEN	(IW_EV_LCP_PK_LEN + sizeof(struct iw_freq)) +#define IW_EV_PARAM_PK_LEN	(IW_EV_LCP_PK_LEN + sizeof(struct iw_param)) +#define IW_EV_ADDR_PK_LEN	(IW_EV_LCP_PK_LEN + sizeof(struct sockaddr)) +#define IW_EV_QUAL_PK_LEN	(IW_EV_LCP_PK_LEN + sizeof(struct iw_quality)) +#define IW_EV_POINT_PK_LEN	(IW_EV_LCP_PK_LEN + 4) + +#endif /* _UAPI_LINUX_WIRELESS_H */ diff --git a/include/uapi/linux/x25.h b/include/uapi/linux/x25.h new file mode 100644 index 00000000000..810cce6737e --- /dev/null +++ b/include/uapi/linux/x25.h @@ -0,0 +1,152 @@ +/* + * These are the public elements of the Linux kernel X.25 implementation. + * + * 	History + *	mar/20/00	Daniela Squassoni Disabling/enabling of facilities  + *					  negotiation. + *	apr/02/05	Shaun Pereira Selective sub address matching with + *					call user data + */ + +#ifndef	X25_KERNEL_H +#define	X25_KERNEL_H + +#include <linux/types.h> +#include <linux/socket.h> + +#define	SIOCX25GSUBSCRIP	(SIOCPROTOPRIVATE + 0) +#define	SIOCX25SSUBSCRIP	(SIOCPROTOPRIVATE + 1) +#define	SIOCX25GFACILITIES	(SIOCPROTOPRIVATE + 2) +#define	SIOCX25SFACILITIES	(SIOCPROTOPRIVATE + 3) +#define	SIOCX25GCALLUSERDATA	(SIOCPROTOPRIVATE + 4) +#define	SIOCX25SCALLUSERDATA	(SIOCPROTOPRIVATE + 5) +#define	SIOCX25GCAUSEDIAG	(SIOCPROTOPRIVATE + 6) +#define SIOCX25SCUDMATCHLEN	(SIOCPROTOPRIVATE + 7) +#define SIOCX25CALLACCPTAPPRV   (SIOCPROTOPRIVATE + 8) +#define SIOCX25SENDCALLACCPT    (SIOCPROTOPRIVATE + 9) +#define SIOCX25GDTEFACILITIES (SIOCPROTOPRIVATE + 10) +#define SIOCX25SDTEFACILITIES (SIOCPROTOPRIVATE + 11) +#define SIOCX25SCAUSEDIAG	(SIOCPROTOPRIVATE + 12) + +/* + *	Values for {get,set}sockopt. + */ +#define	X25_QBITINCL		1 + +/* + *	X.25 Packet Size values. + */ +#define	X25_PS16		4 +#define	X25_PS32		5 +#define	X25_PS64		6 +#define	X25_PS128		7 +#define	X25_PS256		8 +#define	X25_PS512		9 +#define	X25_PS1024		10 +#define	X25_PS2048		11 +#define	X25_PS4096		12 + +/* + * An X.121 address, it is held as ASCII text, null terminated, up to 15 + * digits and a null terminator. + */ +struct x25_address { +	char x25_addr[16]; +}; + +/* + *	Linux X.25 Address structure, used for bind, and connect mostly. + */ +struct sockaddr_x25 { +	__kernel_sa_family_t sx25_family;	/* Must be AF_X25 */ +	struct x25_address sx25_addr;		/* X.121 Address */ +}; + +/* + *	DTE/DCE subscription options. + * + *      As this is missing lots of options, user should expect major + *	changes of this structure in 2.5.x which might break compatibilty. + *      The somewhat ugly dimension 200-sizeof() is needed to maintain + *	backward compatibility. + */ +struct x25_subscrip_struct { +	char device[200-sizeof(unsigned long)]; +	unsigned long	global_facil_mask;	/* 0 to disable negotiation */ +	unsigned int	extended; +}; + +/* values for above global_facil_mask */ + +#define	X25_MASK_REVERSE	0x01	 +#define	X25_MASK_THROUGHPUT	0x02 +#define	X25_MASK_PACKET_SIZE	0x04 +#define	X25_MASK_WINDOW_SIZE	0x08 + +#define X25_MASK_CALLING_AE 0x10 +#define X25_MASK_CALLED_AE 0x20 + + +/* + *	Routing table control structure. + */ +struct x25_route_struct { +	struct x25_address address; +	unsigned int	   sigdigits; +	char		   device[200]; +}; + +/* + *	Facilities structure. + */ +struct x25_facilities { +	unsigned int	winsize_in, winsize_out; +	unsigned int	pacsize_in, pacsize_out; +	unsigned int	throughput; +	unsigned int	reverse; +}; + +/* +* ITU DTE facilities +* Only the called and calling address +* extension are currently implemented. +* The rest are in place to avoid the struct +* changing size if someone needs them later +*/ + +struct x25_dte_facilities { +	__u16 delay_cumul; +	__u16 delay_target; +	__u16 delay_max; +	__u8 min_throughput; +	__u8 expedited; +	__u8 calling_len; +	__u8 called_len; +	__u8 calling_ae[20]; +	__u8 called_ae[20]; +}; + +/* + *	Call User Data structure. + */ +struct x25_calluserdata { +	unsigned int	cudlength; +	unsigned char	cuddata[128]; +}; + +/* + *	Call clearing Cause and Diagnostic structure. + */ +struct x25_causediag { +	unsigned char	cause; +	unsigned char	diagnostic; +}; + +/* + *	Further optional call user data match length selection + */ +struct x25_subaddr { +	unsigned int cudmatchlength; +}; + +#endif diff --git a/include/uapi/linux/xattr.h b/include/uapi/linux/xattr.h new file mode 100644 index 00000000000..26607bd965f --- /dev/null +++ b/include/uapi/linux/xattr.h @@ -0,0 +1,64 @@ +/* +  File: linux/xattr.h + +  Extended attributes handling. + +  Copyright (C) 2001 by Andreas Gruenbacher <a.gruenbacher@computer.org> +  Copyright (c) 2001-2002 Silicon Graphics, Inc.  All Rights Reserved. +  Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com> +*/ +#ifndef _UAPI_LINUX_XATTR_H +#define _UAPI_LINUX_XATTR_H + +#define XATTR_CREATE	0x1	/* set value, fail if attr already exists */ +#define XATTR_REPLACE	0x2	/* set value, fail if attr does not exist */ + +/* Namespaces */ +#define XATTR_OS2_PREFIX "os2." +#define XATTR_OS2_PREFIX_LEN (sizeof (XATTR_OS2_PREFIX) - 1) + +#define XATTR_SECURITY_PREFIX	"security." +#define XATTR_SECURITY_PREFIX_LEN (sizeof (XATTR_SECURITY_PREFIX) - 1) + +#define XATTR_SYSTEM_PREFIX "system." +#define XATTR_SYSTEM_PREFIX_LEN (sizeof (XATTR_SYSTEM_PREFIX) - 1) + +#define XATTR_TRUSTED_PREFIX "trusted." +#define XATTR_TRUSTED_PREFIX_LEN (sizeof (XATTR_TRUSTED_PREFIX) - 1) + +#define XATTR_USER_PREFIX "user." +#define XATTR_USER_PREFIX_LEN (sizeof (XATTR_USER_PREFIX) - 1) + +/* Security namespace */ +#define XATTR_EVM_SUFFIX "evm" +#define XATTR_NAME_EVM XATTR_SECURITY_PREFIX XATTR_EVM_SUFFIX + +#define XATTR_IMA_SUFFIX "ima" +#define XATTR_NAME_IMA XATTR_SECURITY_PREFIX XATTR_IMA_SUFFIX + +#define XATTR_SELINUX_SUFFIX "selinux" +#define XATTR_NAME_SELINUX XATTR_SECURITY_PREFIX XATTR_SELINUX_SUFFIX + +#define XATTR_SMACK_SUFFIX "SMACK64" +#define XATTR_SMACK_IPIN "SMACK64IPIN" +#define XATTR_SMACK_IPOUT "SMACK64IPOUT" +#define XATTR_SMACK_EXEC "SMACK64EXEC" +#define XATTR_SMACK_TRANSMUTE "SMACK64TRANSMUTE" +#define XATTR_SMACK_MMAP "SMACK64MMAP" +#define XATTR_NAME_SMACK XATTR_SECURITY_PREFIX XATTR_SMACK_SUFFIX +#define XATTR_NAME_SMACKIPIN	XATTR_SECURITY_PREFIX XATTR_SMACK_IPIN +#define XATTR_NAME_SMACKIPOUT	XATTR_SECURITY_PREFIX XATTR_SMACK_IPOUT +#define XATTR_NAME_SMACKEXEC	XATTR_SECURITY_PREFIX XATTR_SMACK_EXEC +#define XATTR_NAME_SMACKTRANSMUTE XATTR_SECURITY_PREFIX XATTR_SMACK_TRANSMUTE +#define XATTR_NAME_SMACKMMAP XATTR_SECURITY_PREFIX XATTR_SMACK_MMAP + +#define XATTR_CAPS_SUFFIX "capability" +#define XATTR_NAME_CAPS XATTR_SECURITY_PREFIX XATTR_CAPS_SUFFIX + +#define XATTR_POSIX_ACL_ACCESS  "posix_acl_access" +#define XATTR_NAME_POSIX_ACL_ACCESS XATTR_SYSTEM_PREFIX XATTR_POSIX_ACL_ACCESS +#define XATTR_POSIX_ACL_DEFAULT  "posix_acl_default" +#define XATTR_NAME_POSIX_ACL_DEFAULT XATTR_SYSTEM_PREFIX XATTR_POSIX_ACL_DEFAULT + + +#endif /* _UAPI_LINUX_XATTR_H */ diff --git a/include/uapi/linux/xfrm.h b/include/uapi/linux/xfrm.h new file mode 100644 index 00000000000..28e493b5b94 --- /dev/null +++ b/include/uapi/linux/xfrm.h @@ -0,0 +1,506 @@ +#ifndef _LINUX_XFRM_H +#define _LINUX_XFRM_H + +#include <linux/types.h> + +/* All of the structures in this file may not change size as they are + * passed into the kernel from userspace via netlink sockets. + */ + +/* Structure to encapsulate addresses. I do not want to use + * "standard" structure. My apologies. + */ +typedef union { +	__be32		a4; +	__be32		a6[4]; +} xfrm_address_t; + +/* Ident of a specific xfrm_state. It is used on input to lookup + * the state by (spi,daddr,ah/esp) or to store information about + * spi, protocol and tunnel address on output. + */ +struct xfrm_id { +	xfrm_address_t	daddr; +	__be32		spi; +	__u8		proto; +}; + +struct xfrm_sec_ctx { +	__u8	ctx_doi; +	__u8	ctx_alg; +	__u16	ctx_len; +	__u32	ctx_sid; +	char	ctx_str[0]; +}; + +/* Security Context Domains of Interpretation */ +#define XFRM_SC_DOI_RESERVED 0 +#define XFRM_SC_DOI_LSM 1 + +/* Security Context Algorithms */ +#define XFRM_SC_ALG_RESERVED 0 +#define XFRM_SC_ALG_SELINUX 1 + +/* Selector, used as selector both on policy rules (SPD) and SAs. */ + +struct xfrm_selector { +	xfrm_address_t	daddr; +	xfrm_address_t	saddr; +	__be16	dport; +	__be16	dport_mask; +	__be16	sport; +	__be16	sport_mask; +	__u16	family; +	__u8	prefixlen_d; +	__u8	prefixlen_s; +	__u8	proto; +	int	ifindex; +	__kernel_uid32_t	user; +}; + +#define XFRM_INF (~(__u64)0) + +struct xfrm_lifetime_cfg { +	__u64	soft_byte_limit; +	__u64	hard_byte_limit; +	__u64	soft_packet_limit; +	__u64	hard_packet_limit; +	__u64	soft_add_expires_seconds; +	__u64	hard_add_expires_seconds; +	__u64	soft_use_expires_seconds; +	__u64	hard_use_expires_seconds; +}; + +struct xfrm_lifetime_cur { +	__u64	bytes; +	__u64	packets; +	__u64	add_time; +	__u64	use_time; +}; + +struct xfrm_replay_state { +	__u32	oseq; +	__u32	seq; +	__u32	bitmap; +}; + +#define XFRMA_REPLAY_ESN_MAX	4096 + +struct xfrm_replay_state_esn { +	unsigned int	bmp_len; +	__u32		oseq; +	__u32		seq; +	__u32		oseq_hi; +	__u32		seq_hi; +	__u32		replay_window; +	__u32		bmp[0]; +}; + +struct xfrm_algo { +	char		alg_name[64]; +	unsigned int	alg_key_len;    /* in bits */ +	char		alg_key[0]; +}; + +struct xfrm_algo_auth { +	char		alg_name[64]; +	unsigned int	alg_key_len;    /* in bits */ +	unsigned int	alg_trunc_len;  /* in bits */ +	char		alg_key[0]; +}; + +struct xfrm_algo_aead { +	char		alg_name[64]; +	unsigned int	alg_key_len;	/* in bits */ +	unsigned int	alg_icv_len;	/* in bits */ +	char		alg_key[0]; +}; + +struct xfrm_stats { +	__u32	replay_window; +	__u32	replay; +	__u32	integrity_failed; +}; + +enum { +	XFRM_POLICY_TYPE_MAIN	= 0, +	XFRM_POLICY_TYPE_SUB	= 1, +	XFRM_POLICY_TYPE_MAX	= 2, +	XFRM_POLICY_TYPE_ANY	= 255 +}; + +enum { +	XFRM_POLICY_IN	= 0, +	XFRM_POLICY_OUT	= 1, +	XFRM_POLICY_FWD	= 2, +	XFRM_POLICY_MASK = 3, +	XFRM_POLICY_MAX	= 3 +}; + +enum { +	XFRM_SHARE_ANY,		/* No limitations */ +	XFRM_SHARE_SESSION,	/* For this session only */ +	XFRM_SHARE_USER,	/* For this user only */ +	XFRM_SHARE_UNIQUE	/* Use once */ +}; + +#define XFRM_MODE_TRANSPORT 0 +#define XFRM_MODE_TUNNEL 1 +#define XFRM_MODE_ROUTEOPTIMIZATION 2 +#define XFRM_MODE_IN_TRIGGER 3 +#define XFRM_MODE_BEET 4 +#define XFRM_MODE_MAX 5 + +/* Netlink configuration messages.  */ +enum { +	XFRM_MSG_BASE = 0x10, + +	XFRM_MSG_NEWSA = 0x10, +#define XFRM_MSG_NEWSA XFRM_MSG_NEWSA +	XFRM_MSG_DELSA, +#define XFRM_MSG_DELSA XFRM_MSG_DELSA +	XFRM_MSG_GETSA, +#define XFRM_MSG_GETSA XFRM_MSG_GETSA + +	XFRM_MSG_NEWPOLICY, +#define XFRM_MSG_NEWPOLICY XFRM_MSG_NEWPOLICY +	XFRM_MSG_DELPOLICY, +#define XFRM_MSG_DELPOLICY XFRM_MSG_DELPOLICY +	XFRM_MSG_GETPOLICY, +#define XFRM_MSG_GETPOLICY XFRM_MSG_GETPOLICY + +	XFRM_MSG_ALLOCSPI, +#define XFRM_MSG_ALLOCSPI XFRM_MSG_ALLOCSPI +	XFRM_MSG_ACQUIRE, +#define XFRM_MSG_ACQUIRE XFRM_MSG_ACQUIRE +	XFRM_MSG_EXPIRE, +#define XFRM_MSG_EXPIRE XFRM_MSG_EXPIRE + +	XFRM_MSG_UPDPOLICY, +#define XFRM_MSG_UPDPOLICY XFRM_MSG_UPDPOLICY +	XFRM_MSG_UPDSA, +#define XFRM_MSG_UPDSA XFRM_MSG_UPDSA + +	XFRM_MSG_POLEXPIRE, +#define XFRM_MSG_POLEXPIRE XFRM_MSG_POLEXPIRE + +	XFRM_MSG_FLUSHSA, +#define XFRM_MSG_FLUSHSA XFRM_MSG_FLUSHSA +	XFRM_MSG_FLUSHPOLICY, +#define XFRM_MSG_FLUSHPOLICY XFRM_MSG_FLUSHPOLICY + +	XFRM_MSG_NEWAE, +#define XFRM_MSG_NEWAE XFRM_MSG_NEWAE +	XFRM_MSG_GETAE, +#define XFRM_MSG_GETAE XFRM_MSG_GETAE + +	XFRM_MSG_REPORT, +#define XFRM_MSG_REPORT XFRM_MSG_REPORT + +	XFRM_MSG_MIGRATE, +#define XFRM_MSG_MIGRATE XFRM_MSG_MIGRATE + +	XFRM_MSG_NEWSADINFO, +#define XFRM_MSG_NEWSADINFO XFRM_MSG_NEWSADINFO +	XFRM_MSG_GETSADINFO, +#define XFRM_MSG_GETSADINFO XFRM_MSG_GETSADINFO + +	XFRM_MSG_NEWSPDINFO, +#define XFRM_MSG_NEWSPDINFO XFRM_MSG_NEWSPDINFO +	XFRM_MSG_GETSPDINFO, +#define XFRM_MSG_GETSPDINFO XFRM_MSG_GETSPDINFO + +	XFRM_MSG_MAPPING, +#define XFRM_MSG_MAPPING XFRM_MSG_MAPPING +	__XFRM_MSG_MAX +}; +#define XFRM_MSG_MAX (__XFRM_MSG_MAX - 1) + +#define XFRM_NR_MSGTYPES (XFRM_MSG_MAX + 1 - XFRM_MSG_BASE) + +/* + * Generic LSM security context for comunicating to user space + * NOTE: Same format as sadb_x_sec_ctx + */ +struct xfrm_user_sec_ctx { +	__u16			len; +	__u16			exttype; +	__u8			ctx_alg;  /* LSMs: e.g., selinux == 1 */ +	__u8			ctx_doi; +	__u16			ctx_len; +}; + +struct xfrm_user_tmpl { +	struct xfrm_id		id; +	__u16			family; +	xfrm_address_t		saddr; +	__u32			reqid; +	__u8			mode; +	__u8			share; +	__u8			optional; +	__u32			aalgos; +	__u32			ealgos; +	__u32			calgos; +}; + +struct xfrm_encap_tmpl { +	__u16		encap_type; +	__be16		encap_sport; +	__be16		encap_dport; +	xfrm_address_t	encap_oa; +}; + +/* AEVENT flags  */ +enum xfrm_ae_ftype_t { +	XFRM_AE_UNSPEC, +	XFRM_AE_RTHR=1,	/* replay threshold*/ +	XFRM_AE_RVAL=2, /* replay value */ +	XFRM_AE_LVAL=4, /* lifetime value */ +	XFRM_AE_ETHR=8, /* expiry timer threshold */ +	XFRM_AE_CR=16, /* Event cause is replay update */ +	XFRM_AE_CE=32, /* Event cause is timer expiry */ +	XFRM_AE_CU=64, /* Event cause is policy update */ +	__XFRM_AE_MAX + +#define XFRM_AE_MAX (__XFRM_AE_MAX - 1) +}; + +struct xfrm_userpolicy_type { +	__u8		type; +	__u16		reserved1; +	__u8		reserved2; +}; + +/* Netlink message attributes.  */ +enum xfrm_attr_type_t { +	XFRMA_UNSPEC, +	XFRMA_ALG_AUTH,		/* struct xfrm_algo */ +	XFRMA_ALG_CRYPT,	/* struct xfrm_algo */ +	XFRMA_ALG_COMP,		/* struct xfrm_algo */ +	XFRMA_ENCAP,		/* struct xfrm_algo + struct xfrm_encap_tmpl */ +	XFRMA_TMPL,		/* 1 or more struct xfrm_user_tmpl */ +	XFRMA_SA,		/* struct xfrm_usersa_info  */ +	XFRMA_POLICY,		/*struct xfrm_userpolicy_info */ +	XFRMA_SEC_CTX,		/* struct xfrm_sec_ctx */ +	XFRMA_LTIME_VAL, +	XFRMA_REPLAY_VAL, +	XFRMA_REPLAY_THRESH, +	XFRMA_ETIMER_THRESH, +	XFRMA_SRCADDR,		/* xfrm_address_t */ +	XFRMA_COADDR,		/* xfrm_address_t */ +	XFRMA_LASTUSED,		/* unsigned long  */ +	XFRMA_POLICY_TYPE,	/* struct xfrm_userpolicy_type */ +	XFRMA_MIGRATE, +	XFRMA_ALG_AEAD,		/* struct xfrm_algo_aead */ +	XFRMA_KMADDRESS,        /* struct xfrm_user_kmaddress */ +	XFRMA_ALG_AUTH_TRUNC,	/* struct xfrm_algo_auth */ +	XFRMA_MARK,		/* struct xfrm_mark */ +	XFRMA_TFCPAD,		/* __u32 */ +	XFRMA_REPLAY_ESN_VAL,	/* struct xfrm_replay_esn */ +	__XFRMA_MAX + +#define XFRMA_MAX (__XFRMA_MAX - 1) +}; + +struct xfrm_mark { +	__u32           v; /* value */ +	__u32           m; /* mask */ +}; + +enum xfrm_sadattr_type_t { +	XFRMA_SAD_UNSPEC, +	XFRMA_SAD_CNT, +	XFRMA_SAD_HINFO, +	__XFRMA_SAD_MAX + +#define XFRMA_SAD_MAX (__XFRMA_SAD_MAX - 1) +}; + +struct xfrmu_sadhinfo { +	__u32 sadhcnt; /* current hash bkts */ +	__u32 sadhmcnt; /* max allowed hash bkts */ +}; + +enum xfrm_spdattr_type_t { +	XFRMA_SPD_UNSPEC, +	XFRMA_SPD_INFO, +	XFRMA_SPD_HINFO, +	__XFRMA_SPD_MAX + +#define XFRMA_SPD_MAX (__XFRMA_SPD_MAX - 1) +}; + +struct xfrmu_spdinfo { +	__u32 incnt; +	__u32 outcnt; +	__u32 fwdcnt; +	__u32 inscnt; +	__u32 outscnt; +	__u32 fwdscnt; +}; + +struct xfrmu_spdhinfo { +	__u32 spdhcnt; +	__u32 spdhmcnt; +}; + +struct xfrm_usersa_info { +	struct xfrm_selector		sel; +	struct xfrm_id			id; +	xfrm_address_t			saddr; +	struct xfrm_lifetime_cfg	lft; +	struct xfrm_lifetime_cur	curlft; +	struct xfrm_stats		stats; +	__u32				seq; +	__u32				reqid; +	__u16				family; +	__u8				mode;		/* XFRM_MODE_xxx */ +	__u8				replay_window; +	__u8				flags; +#define XFRM_STATE_NOECN	1 +#define XFRM_STATE_DECAP_DSCP	2 +#define XFRM_STATE_NOPMTUDISC	4 +#define XFRM_STATE_WILDRECV	8 +#define XFRM_STATE_ICMP		16 +#define XFRM_STATE_AF_UNSPEC	32 +#define XFRM_STATE_ALIGN4	64 +#define XFRM_STATE_ESN		128 +}; + +struct xfrm_usersa_id { +	xfrm_address_t			daddr; +	__be32				spi; +	__u16				family; +	__u8				proto; +}; + +struct xfrm_aevent_id { +	struct xfrm_usersa_id		sa_id; +	xfrm_address_t			saddr; +	__u32				flags; +	__u32				reqid; +}; + +struct xfrm_userspi_info { +	struct xfrm_usersa_info		info; +	__u32				min; +	__u32				max; +}; + +struct xfrm_userpolicy_info { +	struct xfrm_selector		sel; +	struct xfrm_lifetime_cfg	lft; +	struct xfrm_lifetime_cur	curlft; +	__u32				priority; +	__u32				index; +	__u8				dir; +	__u8				action; +#define XFRM_POLICY_ALLOW	0 +#define XFRM_POLICY_BLOCK	1 +	__u8				flags; +#define XFRM_POLICY_LOCALOK	1	/* Allow user to override global policy */ +	/* Automatically expand selector to include matching ICMP payloads. */ +#define XFRM_POLICY_ICMP	2 +	__u8				share; +}; + +struct xfrm_userpolicy_id { +	struct xfrm_selector		sel; +	__u32				index; +	__u8				dir; +}; + +struct xfrm_user_acquire { +	struct xfrm_id			id; +	xfrm_address_t			saddr; +	struct xfrm_selector		sel; +	struct xfrm_userpolicy_info	policy; +	__u32				aalgos; +	__u32				ealgos; +	__u32				calgos; +	__u32				seq; +}; + +struct xfrm_user_expire { +	struct xfrm_usersa_info		state; +	__u8				hard; +}; + +struct xfrm_user_polexpire { +	struct xfrm_userpolicy_info	pol; +	__u8				hard; +}; + +struct xfrm_usersa_flush { +	__u8				proto; +}; + +struct xfrm_user_report { +	__u8				proto; +	struct xfrm_selector		sel; +}; + +/* Used by MIGRATE to pass addresses IKE should use to perform + * SA negotiation with the peer */ +struct xfrm_user_kmaddress { +	xfrm_address_t                  local; +	xfrm_address_t                  remote; +	__u32				reserved; +	__u16				family; +}; + +struct xfrm_user_migrate { +	xfrm_address_t			old_daddr; +	xfrm_address_t			old_saddr; +	xfrm_address_t			new_daddr; +	xfrm_address_t			new_saddr; +	__u8				proto; +	__u8				mode; +	__u16				reserved; +	__u32				reqid; +	__u16				old_family; +	__u16				new_family; +}; + +struct xfrm_user_mapping { +	struct xfrm_usersa_id		id; +	__u32				reqid; +	xfrm_address_t			old_saddr; +	xfrm_address_t			new_saddr; +	__be16				old_sport; +	__be16				new_sport; +}; + +#ifndef __KERNEL__ +/* backwards compatibility for userspace */ +#define XFRMGRP_ACQUIRE		1 +#define XFRMGRP_EXPIRE		2 +#define XFRMGRP_SA		4 +#define XFRMGRP_POLICY		8 +#define XFRMGRP_REPORT		0x20 +#endif + +enum xfrm_nlgroups { +	XFRMNLGRP_NONE, +#define XFRMNLGRP_NONE		XFRMNLGRP_NONE +	XFRMNLGRP_ACQUIRE, +#define XFRMNLGRP_ACQUIRE	XFRMNLGRP_ACQUIRE +	XFRMNLGRP_EXPIRE, +#define XFRMNLGRP_EXPIRE	XFRMNLGRP_EXPIRE +	XFRMNLGRP_SA, +#define XFRMNLGRP_SA		XFRMNLGRP_SA +	XFRMNLGRP_POLICY, +#define XFRMNLGRP_POLICY	XFRMNLGRP_POLICY +	XFRMNLGRP_AEVENTS, +#define XFRMNLGRP_AEVENTS	XFRMNLGRP_AEVENTS +	XFRMNLGRP_REPORT, +#define XFRMNLGRP_REPORT	XFRMNLGRP_REPORT +	XFRMNLGRP_MIGRATE, +#define XFRMNLGRP_MIGRATE	XFRMNLGRP_MIGRATE +	XFRMNLGRP_MAPPING, +#define XFRMNLGRP_MAPPING	XFRMNLGRP_MAPPING +	__XFRMNLGRP_MAX +}; +#define XFRMNLGRP_MAX	(__XFRMNLGRP_MAX - 1) + +#endif /* _LINUX_XFRM_H */  |