/shark/trunk/drivers/linuxc26/include/linux/kmod.h |
---|
0,0 → 1,39 |
#ifndef __LINUX_KMOD_H__ |
#define __LINUX_KMOD_H__ |
/* |
* include/linux/kmod.h |
* |
* 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. |
*/ |
#include <linux/config.h> |
#include <linux/errno.h> |
#include <linux/compiler.h> |
#ifdef CONFIG_KMOD |
extern int request_module(const char * name, ...) __attribute__ ((format (printf, 1, 2))); |
#else |
static inline int request_module(const char * name, ...) { return -ENOSYS; } |
#endif |
#define try_then_request_module(x, mod...) ((x) ?: (request_module(mod), (x))) |
extern int call_usermodehelper(char *path, char *argv[], char *envp[], int wait); |
#ifdef CONFIG_HOTPLUG |
extern char hotplug_path []; |
#endif |
#endif /* __LINUX_KMOD_H__ */ |
/shark/trunk/drivers/linuxc26/include/linux/futex.h |
---|
0,0 → 1,20 |
#ifndef _LINUX_FUTEX_H |
#define _LINUX_FUTEX_H |
/* Second argument to futex syscall */ |
#define FUTEX_WAIT (0) |
#define FUTEX_WAKE (1) |
#define FUTEX_FD (2) |
#define FUTEX_REQUEUE (3) |
asmlinkage long sys_futex(u32 __user *uaddr, int op, int val, |
struct timespec __user *utime, u32 __user *uaddr2); |
long do_futex(unsigned long uaddr, int op, int val, |
unsigned long timeout, unsigned long uaddr2, int val2); |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/if.h |
---|
0,0 → 1,190 |
/* |
* 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, <bir7@leland.Stanford.Edu> |
* 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 */ |
#define IFNAMSIZ 16 |
#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 /* resources allocated */ |
#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_VOLATILE (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_MASTER|IFF_SLAVE|IFF_RUNNING) |
#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*/ |
/* 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 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 */ |
/* 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 |
/* |
* 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 *raw_hdlc; |
cisco_proto *cisco; |
fr_proto *fr; |
fr_proto_pvc *fr_pvc; |
fr_proto_pvc_info *fr_pvc_info; |
/* interface settings */ |
sync_serial_settings *sync; |
te1_settings *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]; |
char * 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 * ifcu_buf; |
struct ifreq *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 */ |
/shark/trunk/drivers/linuxc26/include/linux/pkt_cls.h |
---|
0,0 → 1,161 |
#ifndef __LINUX_PKT_CLS_H |
#define __LINUX_PKT_CLS_H |
struct tc_police |
{ |
__u32 index; |
int action; |
#define TC_POLICE_UNSPEC (-1) |
#define TC_POLICE_OK 0 |
#define TC_POLICE_RECLASSIFY 1 |
#define TC_POLICE_SHOT 2 |
__u32 limit; |
__u32 burst; |
__u32 mtu; |
struct tc_ratespec rate; |
struct tc_ratespec peakrate; |
}; |
enum |
{ |
TCA_POLICE_UNSPEC, |
TCA_POLICE_TBF, |
TCA_POLICE_RATE, |
TCA_POLICE_PEAKRATE, |
TCA_POLICE_AVRATE, |
TCA_POLICE_RESULT |
#define TCA_POLICE_RESULT TCA_POLICE_RESULT |
}; |
#define TCA_POLICE_MAX TCA_POLICE_RESULT |
/* 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, |
}; |
#define TCA_U32_MAX TCA_U32_POLICE |
struct tc_u32_key |
{ |
__u32 mask; |
__u32 val; |
int off; |
int offmask; |
}; |
struct tc_u32_sel |
{ |
unsigned char flags; |
unsigned char offshift; |
unsigned char nkeys; |
__u16 offmask; |
__u16 off; |
short offoff; |
short hoff; |
__u32 hmask; |
struct tc_u32_key keys[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, |
}; |
#define TCA_RSVP_MAX TCA_RSVP_POLICE |
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; |
}; |
/* ROUTE filter */ |
enum |
{ |
TCA_ROUTE4_UNSPEC, |
TCA_ROUTE4_CLASSID, |
TCA_ROUTE4_TO, |
TCA_ROUTE4_FROM, |
TCA_ROUTE4_IIF, |
TCA_ROUTE4_POLICE, |
}; |
#define TCA_ROUTE4_MAX TCA_ROUTE4_POLICE |
/* FW filter */ |
enum |
{ |
TCA_FW_UNSPEC, |
TCA_FW_CLASSID, |
TCA_FW_POLICE, |
}; |
#define TCA_FW_MAX TCA_FW_POLICE |
/* 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, |
}; |
#define TCA_TCINDEX_MAX TCA_TCINDEX_POLICE |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/keyboard.h |
---|
0,0 → 1,433 |
#ifndef __LINUX_KEYBOARD_H |
#define __LINUX_KEYBOARD_H |
#include <linux/wait.h> |
#include <linux/input.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 (KEY_MAX+1) |
#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 */ |
#ifdef __KERNEL__ |
extern const int NR_TYPES; |
extern const int max_vals[]; |
extern unsigned short *key_maps[MAX_NR_KEYMAPS]; |
extern unsigned short plain_map[NR_KEYS]; |
extern unsigned char keyboard_type; |
#endif |
#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 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_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 NR_LOCK 8 |
#define MAX_DIACR 256 |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/msdos_fs_sb.h |
---|
0,0 → 1,65 |
#ifndef _MSDOS_FS_SB |
#define _MSDOS_FS_SB |
/* |
* MS-DOS file system in-core superblock data |
*/ |
struct fat_mount_options { |
uid_t fs_uid; |
gid_t fs_gid; |
unsigned short fs_fmask; |
unsigned short fs_dmask; |
unsigned short codepage; /* Codepage for shortname conversions */ |
char *iocharset; /* Charset used for filename input/display */ |
unsigned short shortname; /* flags for shortname display/create rule */ |
unsigned char name_check; /* r = relaxed, n = normal, s = strict */ |
unsigned quiet:1, /* set = fake successful chmods and chowns */ |
showexec:1, /* set = only set x bit for com/exe/bat */ |
sys_immutable:1, /* set = system files are immutable */ |
dotsOK:1, /* set = hidden and system files are named '.filename' */ |
isvfat:1, /* 0=no vfat long filename support, 1=vfat support */ |
utf8:1, /* Use of UTF8 character set (Default) */ |
unicode_xlate:1, /* create escape sequences for unhandled Unicode */ |
numtail:1, /* Does first alias have a numeric '~1' type tail? */ |
atari:1, /* Use Atari GEMDOS variation of MS-DOS fs */ |
nocase:1; /* Does this need case conversion? 0=need case conversion*/ |
}; |
#define FAT_CACHE_NR 8 /* number of FAT cache */ |
struct fat_cache { |
int start_cluster; /* first cluster of the chain. */ |
int file_cluster; /* cluster number in the file. */ |
int disk_cluster; /* cluster number on disk. */ |
struct fat_cache *next; /* next cache entry */ |
}; |
struct msdos_sb_info { |
unsigned short sec_per_clus; /* sectors/cluster */ |
unsigned short cluster_bits; /* log2(cluster_size) */ |
unsigned int cluster_size; /* cluster size */ |
unsigned char fats,fat_bits; /* number of FATs, FAT bits (12 or 16) */ |
unsigned short fat_start; |
unsigned long fat_length; /* FAT start & length (sec.) */ |
unsigned long dir_start; |
unsigned short dir_entries; /* root dir start & entries */ |
unsigned long data_start; /* first data sector */ |
unsigned long clusters; /* number of clusters */ |
unsigned long root_cluster; /* first cluster of the root directory */ |
unsigned long fsinfo_sector; /* FAT32 fsinfo offset from start of disk */ |
struct semaphore fat_lock; |
int prev_free; /* previously returned free cluster number */ |
int free_clusters; /* -1 if undefined */ |
struct fat_mount_options options; |
struct nls_table *nls_disk; /* Codepage used on disk */ |
struct nls_table *nls_io; /* Charset used for input and display */ |
void *dir_ops; /* Opaque; default directory operations */ |
int dir_per_block; /* dir entries per block */ |
int dir_per_block_bits; /* log2(dir_per_block) */ |
spinlock_t cache_lock; |
struct fat_cache cache_array[FAT_CACHE_NR], *cache; |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/usb_gadget.h |
---|
0,0 → 1,707 |
/* |
* <linux/usb_gadget.h> |
* |
* We call the USB code inside a Linux-based peripheral device a "gadget" |
* driver, except for the hardware-specific bus glue. One USB host can |
* master many USB gadgets, but the gadgets are only slaved to one host. |
* |
* |
* (c) Copyright 2002-2003 by David Brownell |
* All Rights Reserved. |
* |
* This software is licensed under the GNU GPL version 2. |
*/ |
#ifndef __LINUX_USB_GADGET_H |
#define __LINUX_USB_GADGET_H |
#ifdef __KERNEL__ |
struct usb_ep; |
/** |
* struct usb_request - describes one i/o request |
* @buf: Buffer used for data. Always provide this; some controllers |
* only use PIO, or don't use DMA for some endpoints. |
* @dma: DMA address corresponding to 'buf'. If you don't set this |
* field, and the usb controller needs one, it is responsible |
* for mapping and unmapping the buffer. |
* @length: Length of that data |
* @no_interrupt: If true, hints that no completion irq is needed. |
* Helpful sometimes with deep request queues. |
* @zero: If true, when writing data, makes the last packet be "short" |
* by adding a zero length packet as needed; |
* @short_not_ok: When reading data, makes short packets be |
* treated as errors (queue stops advancing till cleanup). |
* @complete: Function called when request completes |
* @context: For use by the completion callback |
* @list: For use by the gadget driver. |
* @status: Reports completion code, zero or a negative errno. |
* Normally, faults block the transfer queue from advancing until |
* the completion callback returns. |
* Code "-ESHUTDOWN" indicates completion caused by device disconnect, |
* or when the driver disabled the endpoint. |
* @actual: Reports actual bytes transferred. For reads (OUT |
* transfers) this may be less than the requested length. If the |
* short_not_ok flag is set, short reads are treated as errors |
* even when status otherwise indicates successful completion. |
* Note that for writes (IN transfers) the data bytes may still |
* reside in a device-side FIFO. |
* |
* These are allocated/freed through the endpoint they're used with. The |
* hardware's driver can add extra per-request data to the memory it returns, |
* which often avoids separate memory allocations (potential failures), |
* later when the request is queued. |
* |
* Request flags affect request handling, such as whether a zero length |
* packet is written (the "zero" flag), whether a short read should be |
* treated as an error (blocking request queue advance, the "short_not_ok" |
* flag), or hinting that an interrupt is not required (the "no_interrupt" |
* flag, for use with deep request queues). |
* |
* Bulk endpoints can use any size buffers, and can also be used for interrupt |
* transfers. interrupt-only endpoints can be much less functional. |
*/ |
// NOTE this is analagous to 'struct urb' on the host side, |
// except that it's thinner and promotes more pre-allocation. |
// |
// ISSUE should this be allocated through the device? |
struct usb_request { |
void *buf; |
unsigned length; |
dma_addr_t dma; |
unsigned no_interrupt:1; |
unsigned zero:1; |
unsigned short_not_ok:1; |
void (*complete)(struct usb_ep *ep, |
struct usb_request *req); |
void *context; |
struct list_head list; |
int status; |
unsigned actual; |
}; |
/*-------------------------------------------------------------------------*/ |
/* endpoint-specific parts of the api to the usb controller hardware. |
* unlike the urb model, (de)multiplexing layers are not required. |
* (so this api could slash overhead if used on the host side...) |
* |
* note that device side usb controllers commonly differ in how many |
* endpoints they support, as well as their capabilities. |
*/ |
struct usb_ep_ops { |
int (*enable) (struct usb_ep *ep, |
const struct usb_endpoint_descriptor *desc); |
int (*disable) (struct usb_ep *ep); |
struct usb_request *(*alloc_request) (struct usb_ep *ep, |
int gfp_flags); |
void (*free_request) (struct usb_ep *ep, struct usb_request *req); |
void *(*alloc_buffer) (struct usb_ep *ep, unsigned bytes, |
dma_addr_t *dma, int gfp_flags); |
void (*free_buffer) (struct usb_ep *ep, void *buf, dma_addr_t dma, |
unsigned bytes); |
// NOTE: on 2.5, drivers may also use dma_map() and |
// dma_sync_single() to manage dma overhead. |
int (*queue) (struct usb_ep *ep, struct usb_request *req, |
int gfp_flags); |
int (*dequeue) (struct usb_ep *ep, struct usb_request *req); |
int (*set_halt) (struct usb_ep *ep, int value); |
int (*fifo_status) (struct usb_ep *ep); |
void (*fifo_flush) (struct usb_ep *ep); |
}; |
/** |
* struct usb_ep - device side representation of USB endpoint |
* @name:identifier for the endpoint, such as "ep-a" or "ep9in-bulk" |
* @ops: Function pointers used to access hardware-specific operations. |
* @ep_list:the gadget's ep_list holds all of its endpoints |
* @maxpacket:The maximum packet size used on this endpoint. The initial |
* value can sometimes be reduced (hardware allowing), according to |
* the endpoint descriptor used to configure the endpoint. |
* @driver_data:for use by the gadget driver. all other fields are |
* read-only to gadget drivers. |
* |
* the bus controller driver lists all the general purpose endpoints in |
* gadget->ep_list. the control endpoint (gadget->ep0) is not in that list, |
* and is accessed only in response to a driver setup() callback. |
*/ |
struct usb_ep { |
void *driver_data; |
const char *name; |
const struct usb_ep_ops *ops; |
struct list_head ep_list; |
unsigned maxpacket:16; |
}; |
/*-------------------------------------------------------------------------*/ |
/** |
* usb_ep_enable - configure endpoint, making it usable |
* @ep:the endpoint being configured. may not be the endpoint named "ep0". |
* drivers discover endpoints through the ep_list of a usb_gadget. |
* @desc:descriptor for desired behavior. caller guarantees this pointer |
* remains valid until the endpoint is disabled; the data byte order |
* is little-endian (usb-standard). |
* |
* when configurations are set, or when interface settings change, the driver |
* will enable or disable the relevant endpoints. while it is enabled, an |
* endpoint may be used for i/o until the driver receives a disconnect() from |
* the host or until the endpoint is disabled. |
* |
* the ep0 implementation (which calls this routine) must ensure that the |
* hardware capabilities of each endpoint match the descriptor provided |
* for it. for example, an endpoint named "ep2in-bulk" would be usable |
* for interrupt transfers as well as bulk, but it likely couldn't be used |
* for iso transfers or for endpoint 14. some endpoints are fully |
* configurable, with more generic names like "ep-a". (remember that for |
* USB, "in" means "towards the USB master".) |
* |
* returns zero, or a negative error code. |
*/ |
static inline int |
usb_ep_enable (struct usb_ep *ep, const struct usb_endpoint_descriptor *desc) |
{ |
return ep->ops->enable (ep, desc); |
} |
/** |
* usb_ep_disable - endpoint is no longer usable |
* @ep:the endpoint being unconfigured. may not be the endpoint named "ep0". |
* |
* no other task may be using this endpoint when this is called. |
* any pending and uncompleted requests will complete with status |
* indicating disconnect (-ESHUTDOWN) before this call returns. |
* gadget drivers must call usb_ep_enable() again before queueing |
* requests to the endpoint. |
* |
* returns zero, or a negative error code. |
*/ |
static inline int |
usb_ep_disable (struct usb_ep *ep) |
{ |
return ep->ops->disable (ep); |
} |
/** |
* usb_ep_alloc_request - allocate a request object to use with this endpoint |
* @ep:the endpoint to be used with with the request |
* @gfp_flags:GFP_* flags to use |
* |
* Request objects must be allocated with this call, since they normally |
* need controller-specific setup and may even need endpoint-specific |
* resources such as allocation of DMA descriptors. |
* Requests may be submitted with usb_ep_queue(), and receive a single |
* completion callback. Free requests with usb_ep_free_request(), when |
* they are no longer needed. |
* |
* Returns the request, or null if one could not be allocated. |
*/ |
static inline struct usb_request * |
usb_ep_alloc_request (struct usb_ep *ep, int gfp_flags) |
{ |
return ep->ops->alloc_request (ep, gfp_flags); |
} |
/** |
* usb_ep_free_request - frees a request object |
* @ep:the endpoint associated with the request |
* @req:the request being freed |
* |
* Reverses the effect of usb_ep_alloc_request(). |
* Caller guarantees the request is not queued, and that it will |
* no longer be requeued (or otherwise used). |
*/ |
static inline void |
usb_ep_free_request (struct usb_ep *ep, struct usb_request *req) |
{ |
ep->ops->free_request (ep, req); |
} |
/** |
* usb_ep_alloc_buffer - allocate an I/O buffer |
* @ep:the endpoint associated with the buffer |
* @len:length of the desired buffer |
* @dma:pointer to the buffer's DMA address; must be valid |
* @gfp_flags:GFP_* flags to use |
* |
* Returns a new buffer, or null if one could not be allocated. |
* The buffer is suitably aligned for dma, if that endpoint uses DMA, |
* and the caller won't have to care about dma-inconsistency |
* or any hidden "bounce buffer" mechanism. No additional per-request |
* DMA mapping will be required for such buffers. |
* Free it later with usb_ep_free_buffer(). |
* |
* You don't need to use this call to allocate I/O buffers unless you |
* want to make sure drivers don't incur costs for such "bounce buffer" |
* copies or per-request DMA mappings. |
*/ |
static inline void * |
usb_ep_alloc_buffer (struct usb_ep *ep, unsigned len, dma_addr_t *dma, |
int gfp_flags) |
{ |
return ep->ops->alloc_buffer (ep, len, dma, gfp_flags); |
} |
/** |
* usb_ep_free_buffer - frees an i/o buffer |
* @ep:the endpoint associated with the buffer |
* @buf:CPU view address of the buffer |
* @dma:the buffer's DMA address |
* @len:length of the buffer |
* |
* reverses the effect of usb_ep_alloc_buffer(). |
* caller guarantees the buffer will no longer be accessed |
*/ |
static inline void |
usb_ep_free_buffer (struct usb_ep *ep, void *buf, dma_addr_t dma, unsigned len) |
{ |
ep->ops->free_buffer (ep, buf, dma, len); |
} |
/** |
* usb_ep_queue - queues (submits) an I/O request to an endpoint. |
* @ep:the endpoint associated with the request |
* @req:the request being submitted |
* @gfp_flags: GFP_* flags to use in case the lower level driver couldn't |
* pre-allocate all necessary memory with the request. |
* |
* This tells the device controller to perform the specified request through |
* that endpoint (reading or writing a buffer). When the request completes, |
* including being canceled by usb_ep_dequeue(), the request's completion |
* routine is called to return the request to the driver. Any endpoint |
* (except control endpoints like ep0) may have more than one transfer |
* request queued; they complete in FIFO order. Once a gadget driver |
* submits a request, that request may not be examined or modified until it |
* is given back to that driver through the completion callback. |
* |
* Each request is turned into one or more packets. The controller driver |
* never merges adjacent requests into the same packet. OUT transfers |
* will sometimes use data that's already buffered in the hardware. |
* |
* Bulk endpoints can queue any amount of data; the transfer is packetized |
* automatically. The last packet will be short if the request doesn't fill it |
* out completely. Zero length packets (ZLPs) should be avoided in portable |
* protocols since not all usb hardware can successfully handle zero length |
* packets. (ZLPs may be explicitly written, and may be implicitly written if |
* the request 'zero' flag is set.) Bulk endpoints may also be used |
* for interrupt transfers; but the reverse is not true, and some endpoints |
* won't support every interrupt transfer. (Such as 768 byte packets.) |
* |
* Interrupt-only endpoints are less functional than bulk endpoints, for |
* example by not supporting queueing or not handling buffers that are |
* larger than the endpoint's maxpacket size. They may also treat data |
* toggle differently. |
* |
* Control endpoints ... after getting a setup() callback, the driver queues |
* one response (even if it would be zero length). That enables the |
* status ack, after transfering data as specified in the response. Setup |
* functions may return negative error codes to generate protocol stalls. |
* (Note that some USB device controllers disallow protocol stall responses |
* in some cases.) When control responses are deferred (the response is |
* written after the setup callback returns), then usb_ep_set_halt() may be |
* used on ep0 to trigger protocol stalls. |
* |
* For periodic endpoints, like interrupt or isochronous ones, the usb host |
* arranges to poll once per interval, and the gadget driver usually will |
* have queued some data to transfer at that time. |
* |
* Returns zero, or a negative error code. Endpoints that are not enabled |
* report errors; errors will also be |
* reported when the usb peripheral is disconnected. |
*/ |
static inline int |
usb_ep_queue (struct usb_ep *ep, struct usb_request *req, int gfp_flags) |
{ |
return ep->ops->queue (ep, req, gfp_flags); |
} |
/** |
* usb_ep_dequeue - dequeues (cancels, unlinks) an I/O request from an endpoint |
* @ep:the endpoint associated with the request |
* @req:the request being canceled |
* |
* if the request is still active on the endpoint, it is dequeued and its |
* completion routine is called (with status -ECONNRESET); else a negative |
* error code is returned. |
* |
* note that some hardware can't clear out write fifos (to unlink the request |
* at the head of the queue) except as part of disconnecting from usb. such |
* restrictions prevent drivers from supporting configuration changes, |
* even to configuration zero (a "chapter 9" requirement). |
*/ |
static inline int usb_ep_dequeue (struct usb_ep *ep, struct usb_request *req) |
{ |
return ep->ops->dequeue (ep, req); |
} |
/** |
* usb_ep_set_halt - sets the endpoint halt feature. |
* @ep: the non-isochronous endpoint being stalled |
* |
* Use this to stall an endpoint, perhaps as an error report. |
* Except for control endpoints, |
* the endpoint stays halted (will not stream any data) until the host |
* clears this feature; drivers may need to empty the endpoint's request |
* queue first, to make sure no inappropriate transfers happen. |
* |
* Note that while an endpoint CLEAR_FEATURE will be invisible to the |
* gadget driver, a SET_INTERFACE will not be. To reset endpoints for the |
* current altsetting, see usb_ep_clear_halt(). When switching altsettings, |
* it's simplest to use usb_ep_enable() or usb_ep_disable() for the endpoints. |
* |
* Returns zero, or a negative error code. On success, this call sets |
* underlying hardware state that blocks data transfers. |
*/ |
static inline int |
usb_ep_set_halt (struct usb_ep *ep) |
{ |
return ep->ops->set_halt (ep, 1); |
} |
/** |
* usb_ep_clear_halt - clears endpoint halt, and resets toggle |
* @ep:the bulk or interrupt endpoint being reset |
* |
* Use this when responding to the standard usb "set interface" request, |
* for endpoints that aren't reconfigured, after clearing any other state |
* in the endpoint's i/o queue. |
* |
* Returns zero, or a negative error code. On success, this call clears |
* the underlying hardware state reflecting endpoint halt and data toggle. |
* Note that some hardware can't support this request (like pxa2xx_udc), |
* and accordingly can't correctly implement interface altsettings. |
*/ |
static inline int |
usb_ep_clear_halt (struct usb_ep *ep) |
{ |
return ep->ops->set_halt (ep, 0); |
} |
/** |
* usb_ep_fifo_status - returns number of bytes in fifo, or error |
* @ep: the endpoint whose fifo status is being checked. |
* |
* FIFO endpoints may have "unclaimed data" in them in certain cases, |
* such as after aborted transfers. Hosts may not have collected all |
* the IN data written by the gadget driver, as reported by a request |
* completion. The gadget driver may not have collected all the data |
* written OUT to it by the host. Drivers that need precise handling for |
* fault reporting or recovery may need to use this call. |
* |
* This returns the number of such bytes in the fifo, or a negative |
* errno if the endpoint doesn't use a FIFO or doesn't support such |
* precise handling. |
*/ |
static inline int |
usb_ep_fifo_status (struct usb_ep *ep) |
{ |
if (ep->ops->fifo_status) |
return ep->ops->fifo_status (ep); |
else |
return -EOPNOTSUPP; |
} |
/** |
* usb_ep_fifo_flush - flushes contents of a fifo |
* @ep: the endpoint whose fifo is being flushed. |
* |
* This call may be used to flush the "unclaimed data" that may exist in |
* an endpoint fifo after abnormal transaction terminations. The call |
* must never be used except when endpoint is not being used for any |
* protocol translation. |
*/ |
static inline void |
usb_ep_fifo_flush (struct usb_ep *ep) |
{ |
if (ep->ops->fifo_flush) |
ep->ops->fifo_flush (ep); |
} |
/*-------------------------------------------------------------------------*/ |
struct usb_gadget; |
/* the rest of the api to the controller hardware: device operations, |
* which don't involve endpoints (or i/o). |
*/ |
struct usb_gadget_ops { |
int (*get_frame)(struct usb_gadget *); |
int (*wakeup)(struct usb_gadget *); |
int (*set_selfpowered) (struct usb_gadget *, int value); |
int (*ioctl)(struct usb_gadget *, |
unsigned code, unsigned long param); |
}; |
/** |
* struct usb_gadget - represents a usb slave device |
* @ops: Function pointers used to access hardware-specific operations. |
* @ep0: Endpoint zero, used when reading or writing responses to |
* driver setup() requests |
* @ep_list: List of other endpoints supported by the device. |
* @speed: Speed of current connection to USB host. |
* @name: Identifies the controller hardware type. Used in diagnostics |
* and sometimes configuration. |
* @dev: Driver model state for this abstract device. |
* |
* Gadgets have a mostly-portable "gadget driver" implementing device |
* functions, handling all usb configurations and interfaces. Gadget |
* drivers talk to hardware-specific code indirectly, through ops vectors. |
* That insulates the gadget driver from hardware details, and packages |
* the hardware endpoints through generic i/o queues. The "usb_gadget" |
* and "usb_ep" interfaces provide that insulation from the hardware. |
* |
* Except for the driver data, all fields in this structure are |
* read-only to the gadget driver. That driver data is part of the |
* "driver model" infrastructure in 2.5 (and later) kernels, and for |
* earlier systems is grouped in a similar structure that's not known |
* to the rest of the kernel. |
*/ |
struct usb_gadget { |
/* readonly to gadget driver */ |
const struct usb_gadget_ops *ops; |
struct usb_ep *ep0; |
struct list_head ep_list; /* of usb_ep */ |
enum usb_device_speed speed; |
const char *name; |
struct device dev; |
}; |
static inline void set_gadget_data (struct usb_gadget *gadget, void *data) |
{ dev_set_drvdata (&gadget->dev, data); } |
static inline void *get_gadget_data (struct usb_gadget *gadget) |
{ return dev_get_drvdata (&gadget->dev); } |
/* iterates the non-control endpoints; 'tmp' is a struct usb_ep pointer */ |
#define gadget_for_each_ep(tmp,gadget) \ |
list_for_each_entry(tmp, &(gadget)->ep_list, ep_list) |
/** |
* usb_gadget_frame_number - returns the current frame number |
* @gadget: controller that reports the frame number |
* |
* Returns the usb frame number, normally eleven bits from a SOF packet, |
* or negative errno if this device doesn't support this capability. |
*/ |
static inline int usb_gadget_frame_number (struct usb_gadget *gadget) |
{ |
return gadget->ops->get_frame (gadget); |
} |
/** |
* usb_gadget_wakeup - tries to wake up the host connected to this gadget |
* @gadget: controller used to wake up the host |
* |
* Returns zero on success, else negative error code if the hardware |
* doesn't support such attempts, or its support has not been enabled |
* by the usb host. Drivers must return device descriptors that report |
* their ability to support this, or hosts won't enable it. |
*/ |
static inline int usb_gadget_wakeup (struct usb_gadget *gadget) |
{ |
if (!gadget->ops->wakeup) |
return -EOPNOTSUPP; |
return gadget->ops->wakeup (gadget); |
} |
/** |
* usb_gadget_set_selfpowered - sets the device selfpowered feature. |
* @gadget:the device being declared as self-powered |
* |
* this affects the device status reported by the hardware driver |
* to reflect that it now has a local power supply. |
* |
* returns zero on success, else negative errno. |
*/ |
static inline int |
usb_gadget_set_selfpowered (struct usb_gadget *gadget) |
{ |
if (!gadget->ops->set_selfpowered) |
return -EOPNOTSUPP; |
return gadget->ops->set_selfpowered (gadget, 1); |
} |
/** |
* usb_gadget_clear_selfpowered - clear the device selfpowered feature. |
* @gadget:the device being declared as bus-powered |
* |
* this affects the device status reported by the hardware driver. |
* some hardware may not support bus-powered operation, in which |
* case this feature's value can never change. |
* |
* returns zero on success, else negative errno. |
*/ |
static inline int |
usb_gadget_clear_selfpowered (struct usb_gadget *gadget) |
{ |
if (!gadget->ops->set_selfpowered) |
return -EOPNOTSUPP; |
return gadget->ops->set_selfpowered (gadget, 0); |
} |
/*-------------------------------------------------------------------------*/ |
/** |
* struct usb_gadget_driver - driver for usb 'slave' devices |
* @function: String describing the gadget's function |
* @speed: Highest speed the driver handles. |
* @bind: Invoked when the driver is bound to a gadget, usually |
* after registering the driver. |
* At that point, ep0 is fully initialized, and ep_list holds |
* the currently-available endpoints. |
* Called in a context that permits sleeping. |
* @setup: Invoked for ep0 control requests that aren't handled by |
* the hardware level driver. Most calls must be handled by |
* the gadget driver, including descriptor and configuration |
* management. The 16 bit members of the setup data are in |
* cpu order. Called in_interrupt; this may not sleep. Driver |
* queues a response to ep0, or returns negative to stall. |
* @disconnect: Invoked after all transfers have been stopped, |
* when the host is disconnected. May be called in_interrupt; this |
* may not sleep. Some devices can't detect disconnect, so this might |
* not be called except as part of controller shutdown. |
* @unbind: Invoked when the driver is unbound from a gadget, |
* usually from rmmod (after a disconnect is reported). |
* Called in a context that permits sleeping. |
* @suspend: Invoked on USB suspend. May be called in_interrupt. |
* @resume: Invoked on USB resume. May be called in_interrupt. |
* @driver: Driver model state for this driver. |
* |
* Devices are disabled till a gadget driver successfully bind()s, which |
* means the driver will handle setup() requests needed to enumerate (and |
* meet "chapter 9" requirements) then do some useful work. |
* |
* Drivers use hardware-specific knowledge to configure the usb hardware. |
* endpoint addressing is only one of several hardware characteristics that |
* are in descriptors the ep0 implementation returns from setup() calls. |
* |
* Except for ep0 implementation, most driver code shouldn't need change to |
* run on top of different usb controllers. It'll use endpoints set up by |
* that ep0 implementation. |
* |
* The usb controller driver handles a few standard usb requests. Those |
* include set_address, and feature flags for devices, interfaces, and |
* endpoints (the get_status, set_feature, and clear_feature requests). |
* |
* Accordingly, the driver's setup() callback must always implement all |
* get_descriptor requests, returning at least a device descriptor and |
* a configuration descriptor. Drivers must make sure the endpoint |
* descriptors match any hardware constraints. Some hardware also constrains |
* other descriptors. (The pxa250 allows only configurations 1, 2, or 3). |
* |
* The driver's setup() callback must also implement set_configuration, |
* and should also implement set_interface, get_configuration, and |
* get_interface. Setting a configuration (or interface) is where |
* endpoints should be activated or (config 0) shut down. |
* |
* (Note that only the default control endpoint is supported. Neither |
* hosts nor devices generally support control traffic except to ep0.) |
* |
* Most devices will ignore USB suspend/resume operations, and so will |
* not provide those callbacks. However, some may need to change modes |
* when the host is not longer directing those activities. For example, |
* local controls (buttons, dials, etc) may need to be re-enabled since |
* the (remote) host can't do that any longer; or an error state might |
* be cleared, to make the device behave identically whether or not |
* power is maintained. |
*/ |
struct usb_gadget_driver { |
char *function; |
enum usb_device_speed speed; |
int (*bind)(struct usb_gadget *); |
void (*unbind)(struct usb_gadget *); |
int (*setup)(struct usb_gadget *, |
const struct usb_ctrlrequest *); |
void (*disconnect)(struct usb_gadget *); |
void (*suspend)(struct usb_gadget *); |
void (*resume)(struct usb_gadget *); |
// FIXME support safe rmmod |
struct device_driver driver; |
}; |
/*-------------------------------------------------------------------------*/ |
/* driver modules register and unregister, as usual. |
* these calls must be made in a context that can sleep. |
* |
* these will usually be implemented directly by the hardware-dependent |
* usb bus interface driver, which will only support a single driver. |
*/ |
/** |
* usb_gadget_register_driver - register a gadget driver |
* @driver:the driver being registered |
* |
* Call this in your gadget driver's module initialization function, |
* to tell the underlying usb controller driver about your driver. |
* The driver's bind() function will be called to bind it to a |
* gadget. This function must be called in a context that can sleep. |
*/ |
int usb_gadget_register_driver (struct usb_gadget_driver *driver); |
/** |
* usb_gadget_unregister_driver - unregister a gadget driver |
* @driver:the driver being unregistered |
* |
* Call this in your gadget driver's module cleanup function, |
* to tell the underlying usb controller that your driver is |
* going away. If the controller is connected to a USB host, |
* it will first disconnect(). The driver is also requested |
* to unbind() and clean up any device state, before this procedure |
* finally returns. |
* This function must be called in a context that can sleep. |
*/ |
int usb_gadget_unregister_driver (struct usb_gadget_driver *driver); |
/*-------------------------------------------------------------------------*/ |
/* utility to simplify dealing with string descriptors */ |
/** |
* struct usb_string - wraps a C string and its USB id |
* @id:the (nonzero) ID for this string |
* @s:the string, in ISO-8859/1 characters |
* |
* If you're using usb_gadget_get_string(), use this to wrap a string |
* together with its ID. |
*/ |
struct usb_string { |
u8 id; |
const char *s; |
}; |
/** |
* struct usb_gadget_strings - a set of USB strings in a given language |
* @language:identifies the strings' language (0x0409 for en-us) |
* @strings:array of strings with their ids |
* |
* If you're using usb_gadget_get_string(), use this to wrap all the |
* strings for a given language. |
*/ |
struct usb_gadget_strings { |
u16 language; /* 0x0409 for en-us */ |
struct usb_string *strings; |
}; |
/* put descriptor for string with that id into buf (buflen >= 256) */ |
int usb_gadget_get_string (struct usb_gadget_strings *table, int id, u8 *buf); |
#endif /* __KERNEL__ */ |
#endif /* __LINUX_USB_GADGET_H */ |
/shark/trunk/drivers/linuxc26/include/linux/efs_fs.h |
---|
0,0 → 1,52 |
/* |
* efs_fs.h |
* |
* Copyright (c) 1999 Al Smith |
* |
* Portions derived from work (c) 1995,1996 Christian Vogelgsang. |
*/ |
#ifndef __EFS_FS_H__ |
#define __EFS_FS_H__ |
#define EFS_VERSION "1.0a" |
static const char cprt[] = "EFS: "EFS_VERSION" - (c) 1999 Al Smith <Al.Smith@aeschi.ch.eu.org>"; |
#include <asm/uaccess.h> |
/* 1 block is 512 bytes */ |
#define EFS_BLOCKSIZE_BITS 9 |
#define EFS_BLOCKSIZE (1 << EFS_BLOCKSIZE_BITS) |
#include <linux/fs.h> |
#include <linux/efs_fs_i.h> |
#include <linux/efs_fs_sb.h> |
#include <linux/efs_dir.h> |
static inline struct efs_inode_info *INODE_INFO(struct inode *inode) |
{ |
return container_of(inode, struct efs_inode_info, vfs_inode); |
} |
static inline struct efs_sb_info *SUPER_INFO(struct super_block *sb) |
{ |
return sb->s_fs_info; |
} |
struct statfs; |
extern struct inode_operations efs_dir_inode_operations; |
extern struct file_operations efs_dir_operations; |
extern struct address_space_operations efs_symlink_aops; |
extern int efs_fill_super(struct super_block *, void *, int); |
extern int efs_statfs(struct super_block *, struct kstatfs *); |
extern void efs_read_inode(struct inode *); |
extern efs_block_t efs_map_block(struct inode *, efs_block_t); |
extern struct dentry *efs_lookup(struct inode *, struct dentry *, struct nameidata *); |
extern int efs_bmap(struct inode *, int); |
#endif /* __EFS_FS_H__ */ |
/shark/trunk/drivers/linuxc26/include/linux/elf.h |
---|
0,0 → 1,433 |
#ifndef _LINUX_ELF_H |
#define _LINUX_ELF_H |
#include <linux/types.h> |
#include <asm/elf.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_LOOS 0x60000000 |
#define PT_HIOS 0x6fffffff |
#define PT_LOPROC 0x70000000 |
#define PT_HIPROC 0x7fffffff |
#define PT_GNU_EH_FRAME 0x6474e550 |
/* 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 |
/* 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) */ |
#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_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_H8_300H 47 /* Hitachi H8/300H */ |
#define EM_H8S 48 /* Hitachi H8S */ |
/* |
* 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 |
/* |
* This is the old interim value for S/390 architecture |
*/ |
#define EM_S390_OLD 0xA390 |
/* 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_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 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) |
/* 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 */ |
#define AT_SECURE 23 /* secure mode boolean */ |
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[16]; /* 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_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 */ |
#define NT_PRSTATUS 1 |
#define NT_PRFPREG 2 |
#define NT_PRPSINFO 3 |
#define NT_TASKSTRUCT 4 |
#define NT_AUXV 6 |
#define NT_PRXFPREG 0x46e62b7f /* copied from gdb5.1/include/elf/common.h */ |
/* 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; |
#if ELF_CLASS == ELFCLASS32 |
extern Elf32_Dyn _DYNAMIC []; |
#define elfhdr elf32_hdr |
#define elf_phdr elf32_phdr |
#define elf_note elf32_note |
#else |
extern Elf64_Dyn _DYNAMIC []; |
#define elfhdr elf64_hdr |
#define elf_phdr elf64_phdr |
#define elf_note elf64_note |
#endif |
#endif /* _LINUX_ELF_H */ |
/shark/trunk/drivers/linuxc26/include/linux/security.h |
---|
0,0 → 1,2670 |
/* |
* Linux Security plug |
* |
* Copyright (C) 2001 WireX Communications, Inc <chris@wirex.com> |
* Copyright (C) 2001 Greg Kroah-Hartman <greg@kroah.com> |
* Copyright (C) 2001 Networks Associates Technology, Inc <ssmalley@nai.com> |
* Copyright (C) 2001 James Morris <jmorris@intercode.com.au> |
* Copyright (C) 2001 Silicon Graphics, Inc. (Trust Technology Group) |
* |
* 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. |
* |
* Due to this file being licensed under the GPL there is controversy over |
* whether this permits you to write a module that #includes this file |
* without placing your module under the GPL. Please consult a lawyer for |
* advice before doing this. |
* |
*/ |
#ifndef __LINUX_SECURITY_H |
#define __LINUX_SECURITY_H |
#include <linux/fs.h> |
#include <linux/binfmts.h> |
#include <linux/signal.h> |
#include <linux/resource.h> |
#include <linux/sem.h> |
#include <linux/sysctl.h> |
#include <linux/shm.h> |
#include <linux/msg.h> |
#include <linux/sched.h> |
#include <linux/skbuff.h> |
#include <linux/netlink.h> |
/* |
* These functions are in security/capability.c and are used |
* as the default capabilities functions |
*/ |
extern int cap_capable (struct task_struct *tsk, int cap); |
extern int cap_ptrace (struct task_struct *parent, struct task_struct *child); |
extern int cap_capget (struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); |
extern int cap_capset_check (struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); |
extern void cap_capset_set (struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); |
extern int cap_bprm_set_security (struct linux_binprm *bprm); |
extern void cap_bprm_compute_creds (struct linux_binprm *bprm); |
extern int cap_bprm_secureexec(struct linux_binprm *bprm); |
extern int cap_task_post_setuid (uid_t old_ruid, uid_t old_euid, uid_t old_suid, int flags); |
extern void cap_task_reparent_to_init (struct task_struct *p); |
extern int cap_syslog (int type); |
extern int cap_vm_enough_memory (long pages); |
static inline int cap_netlink_send (struct sk_buff *skb) |
{ |
NETLINK_CB (skb).eff_cap = current->cap_effective; |
return 0; |
} |
static inline int cap_netlink_recv (struct sk_buff *skb) |
{ |
if (!cap_raised (NETLINK_CB (skb).eff_cap, CAP_NET_ADMIN)) |
return -EPERM; |
return 0; |
} |
/* |
* Values used in the task_security_ops calls |
*/ |
/* setuid or setgid, id0 == uid or gid */ |
#define LSM_SETID_ID 1 |
/* setreuid or setregid, id0 == real, id1 == eff */ |
#define LSM_SETID_RE 2 |
/* setresuid or setresgid, id0 == real, id1 == eff, uid2 == saved */ |
#define LSM_SETID_RES 4 |
/* setfsuid or setfsgid, id0 == fsuid or fsgid */ |
#define LSM_SETID_FS 8 |
/* forward declares to avoid warnings */ |
struct nfsctl_arg; |
struct sched_param; |
struct swap_info_struct; |
#ifdef CONFIG_SECURITY |
/** |
* struct security_operations - main security structure |
* |
* Security hooks for program execution operations. |
* |
* @bprm_alloc_security: |
* Allocate and attach a security structure to the @bprm->security field. |
* The security field is initialized to NULL when the bprm structure is |
* allocated. |
* @bprm contains the linux_binprm structure to be modified. |
* Return 0 if operation was successful. |
* @bprm_free_security: |
* @bprm contains the linux_binprm structure to be modified. |
* Deallocate and clear the @bprm->security field. |
* @bprm_compute_creds: |
* Compute and set the security attributes of a process being transformed |
* by an execve operation based on the old attributes (current->security) |
* and the information saved in @bprm->security by the set_security hook. |
* Since this hook function (and its caller) are void, this hook can not |
* return an error. However, it can leave the security attributes of the |
* process unchanged if an access failure occurs at this point. It can |
* also perform other state changes on the process (e.g. closing open |
* file descriptors to which access is no longer granted if the attributes |
* were changed). |
* @bprm contains the linux_binprm structure. |
* @bprm_set_security: |
* Save security information in the bprm->security field, typically based |
* on information about the bprm->file, for later use by the compute_creds |
* hook. This hook may also optionally check permissions (e.g. for |
* transitions between security domains). |
* This hook may be called multiple times during a single execve, e.g. for |
* interpreters. The hook can tell whether it has already been called by |
* checking to see if @bprm->security is non-NULL. If so, then the hook |
* may decide either to retain the security information saved earlier or |
* to replace it. |
* @bprm contains the linux_binprm structure. |
* Return 0 if the hook is successful and permission is granted. |
* @bprm_check_security: |
* This hook mediates the point when a search for a binary handler will |
* begin. It allows a check the @bprm->security value which is set in |
* the preceding set_security call. The primary difference from |
* set_security is that the argv list and envp list are reliably |
* available in @bprm. This hook may be called multiple times |
* during a single execve; and in each pass set_security is called |
* first. |
* @bprm contains the linux_binprm structure. |
* Return 0 if the hook is successful and permission is granted. |
* @bprm_secureexec: |
* Return a boolean value (0 or 1) indicating whether a "secure exec" |
* is required. The flag is passed in the auxiliary table |
* on the initial stack to the ELF interpreter to indicate whether libc |
* should enable secure mode. |
* @bprm contains the linux_binprm structure. |
* |
* Security hooks for filesystem operations. |
* |
* @sb_alloc_security: |
* Allocate and attach a security structure to the sb->s_security field. |
* The s_security field is initialized to NULL when the structure is |
* allocated. |
* @sb contains the super_block structure to be modified. |
* Return 0 if operation was successful. |
* @sb_free_security: |
* Deallocate and clear the sb->s_security field. |
* @sb contains the super_block structure to be modified. |
* @sb_statfs: |
* Check permission before obtaining filesystem statistics for the @sb |
* filesystem. |
* @sb contains the super_block structure for the filesystem. |
* Return 0 if permission is granted. |
* @sb_mount: |
* Check permission before an object specified by @dev_name is mounted on |
* the mount point named by @nd. For an ordinary mount, @dev_name |
* identifies a device if the file system type requires a device. For a |
* remount (@flags & MS_REMOUNT), @dev_name is irrelevant. For a |
* loopback/bind mount (@flags & MS_BIND), @dev_name identifies the |
* pathname of the object being mounted. |
* @dev_name contains the name for object being mounted. |
* @nd contains the nameidata structure for mount point object. |
* @type contains the filesystem type. |
* @flags contains the mount flags. |
* @data contains the filesystem-specific data. |
* Return 0 if permission is granted. |
* @sb_check_sb: |
* Check permission before the device with superblock @mnt->sb is mounted |
* on the mount point named by @nd. |
* @mnt contains the vfsmount for device being mounted. |
* @nd contains the nameidata object for the mount point. |
* Return 0 if permission is granted. |
* @sb_umount: |
* Check permission before the @mnt file system is unmounted. |
* @mnt contains the mounted file system. |
* @flags contains the unmount flags, e.g. MNT_FORCE. |
* Return 0 if permission is granted. |
* @sb_umount_close: |
* Close any files in the @mnt mounted filesystem that are held open by |
* the security module. This hook is called during an umount operation |
* prior to checking whether the filesystem is still busy. |
* @mnt contains the mounted filesystem. |
* @sb_umount_busy: |
* Handle a failed umount of the @mnt mounted filesystem, e.g. re-opening |
* any files that were closed by umount_close. This hook is called during |
* an umount operation if the umount fails after a call to the |
* umount_close hook. |
* @mnt contains the mounted filesystem. |
* @sb_post_remount: |
* Update the security module's state when a filesystem is remounted. |
* This hook is only called if the remount was successful. |
* @mnt contains the mounted file system. |
* @flags contains the new filesystem flags. |
* @data contains the filesystem-specific data. |
* @sb_post_mountroot: |
* Update the security module's state when the root filesystem is mounted. |
* This hook is only called if the mount was successful. |
* @sb_post_addmount: |
* Update the security module's state when a filesystem is mounted. |
* This hook is called any time a mount is successfully grafetd to |
* the tree. |
* @mnt contains the mounted filesystem. |
* @mountpoint_nd contains the nameidata structure for the mount point. |
* @sb_pivotroot: |
* Check permission before pivoting the root filesystem. |
* @old_nd contains the nameidata structure for the new location of the current root (put_old). |
* @new_nd contains the nameidata structure for the new root (new_root). |
* Return 0 if permission is granted. |
* @sb_post_pivotroot: |
* Update module state after a successful pivot. |
* @old_nd contains the nameidata structure for the old root. |
* @new_nd contains the nameidata structure for the new root. |
* |
* Security hooks for inode operations. |
* |
* @inode_alloc_security: |
* Allocate and attach a security structure to @inode->i_security. The |
* i_security field is initialized to NULL when the inode structure is |
* allocated. |
* @inode contains the inode structure. |
* Return 0 if operation was successful. |
* @inode_free_security: |
* @inode contains the inode structure. |
* Deallocate the inode security structure and set @inode->i_security to |
* NULL. |
* @inode_create: |
* Check permission to create a regular file. |
* @dir contains inode structure of the parent of the new file. |
* @dentry contains the dentry structure for the file to be created. |
* @mode contains the file mode of the file to be created. |
* Return 0 if permission is granted. |
* @inode_post_create: |
* Set the security attributes on a newly created regular file. This hook |
* is called after a file has been successfully created. |
* @dir contains the inode structure of the parent directory of the new file. |
* @dentry contains the the dentry structure for the newly created file. |
* @mode contains the file mode. |
* @inode_link: |
* Check permission before creating a new hard link to a file. |
* @old_dentry contains the dentry structure for an existing link to the file. |
* @dir contains the inode structure of the parent directory of the new link. |
* @new_dentry contains the dentry structure for the new link. |
* Return 0 if permission is granted. |
* @inode_post_link: |
* Set security attributes for a new hard link to a file. |
* @old_dentry contains the dentry structure for the existing link. |
* @dir contains the inode structure of the parent directory of the new file. |
* @new_dentry contains the dentry structure for the new file link. |
* @inode_unlink: |
* Check the permission to remove a hard link to a file. |
* @dir contains the inode structure of parent directory of the file. |
* @dentry contains the dentry structure for file to be unlinked. |
* Return 0 if permission is granted. |
* @inode_symlink: |
* Check the permission to create a symbolic link to a file. |
* @dir contains the inode structure of parent directory of the symbolic link. |
* @dentry contains the dentry structure of the symbolic link. |
* @old_name contains the pathname of file. |
* Return 0 if permission is granted. |
* @inode_post_symlink: |
* @dir contains the inode structure of the parent directory of the new link. |
* @dentry contains the dentry structure of new symbolic link. |
* @old_name contains the pathname of file. |
* Set security attributes for a newly created symbolic link. Note that |
* @dentry->d_inode may be NULL, since the filesystem might not |
* instantiate the dentry (e.g. NFS). |
* @inode_mkdir: |
* Check permissions to create a new directory in the existing directory |
* associated with inode strcture @dir. |
* @dir containst the inode structure of parent of the directory to be created. |
* @dentry contains the dentry structure of new directory. |
* @mode contains the mode of new directory. |
* Return 0 if permission is granted. |
* @inode_post_mkdir: |
* Set security attributes on a newly created directory. |
* @dir contains the inode structure of parent of the directory to be created. |
* @dentry contains the dentry structure of new directory. |
* @mode contains the mode of new directory. |
* @inode_rmdir: |
* Check the permission to remove a directory. |
* @dir contains the inode structure of parent of the directory to be removed. |
* @dentry contains the dentry structure of directory to be removed. |
* Return 0 if permission is granted. |
* @inode_mknod: |
* Check permissions when creating a special file (or a socket or a fifo |
* file created via the mknod system call). Note that if mknod operation |
* is being done for a regular file, then the create hook will be called |
* and not this hook. |
* @dir contains the inode structure of parent of the new file. |
* @dentry contains the dentry structure of the new file. |
* @mode contains the mode of the new file. |
* @dev contains the the device number. |
* Return 0 if permission is granted. |
* @inode_post_mknod: |
* Set security attributes on a newly created special file (or socket or |
* fifo file created via the mknod system call). |
* @dir contains the inode structure of parent of the new node. |
* @dentry contains the dentry structure of the new node. |
* @mode contains the mode of the new node. |
* @dev contains the the device number. |
* @inode_rename: |
* Check for permission to rename a file or directory. |
* @old_dir contains the inode structure for parent of the old link. |
* @old_dentry contains the dentry structure of the old link. |
* @new_dir contains the inode structure for parent of the new link. |
* @new_dentry contains the dentry structure of the new link. |
* Return 0 if permission is granted. |
* @inode_post_rename: |
* Set security attributes on a renamed file or directory. |
* @old_dir contains the inode structure for parent of the old link. |
* @old_dentry contains the dentry structure of the old link. |
* @new_dir contains the inode structure for parent of the new link. |
* @new_dentry contains the dentry structure of the new link. |
* @inode_readlink: |
* Check the permission to read the symbolic link. |
* @dentry contains the dentry structure for the file link. |
* Return 0 if permission is granted. |
* @inode_follow_link: |
* Check permission to follow a symbolic link when looking up a pathname. |
* @dentry contains the dentry structure for the link. |
* @nd contains the nameidata structure for the parent directory. |
* Return 0 if permission is granted. |
* @inode_permission: |
* Check permission before accessing an inode. This hook is called by the |
* existing Linux permission function, so a security module can use it to |
* provide additional checking for existing Linux permission checks. |
* Notice that this hook is called when a file is opened (as well as many |
* other operations), whereas the file_security_ops permission hook is |
* called when the actual read/write operations are performed. |
* @inode contains the inode structure to check. |
* @mask contains the permission mask. |
* @nd contains the nameidata (may be NULL). |
* Return 0 if permission is granted. |
* @inode_setattr: |
* Check permission before setting file attributes. Note that the kernel |
* call to notify_change is performed from several locations, whenever |
* file attributes change (such as when a file is truncated, chown/chmod |
* operations, transferring disk quotas, etc). |
* @dentry contains the dentry structure for the file. |
* @attr is the iattr structure containing the new file attributes. |
* Return 0 if permission is granted. |
* @inode_getattr: |
* Check permission before obtaining file attributes. |
* @mnt is the vfsmount where the dentry was looked up |
* @dentry contains the dentry structure for the file. |
* Return 0 if permission is granted. |
* @inode_delete: |
* @inode contains the inode structure for deleted inode. |
* This hook is called when a deleted inode is released (i.e. an inode |
* with no hard links has its use count drop to zero). A security module |
* can use this hook to release any persistent label associated with the |
* inode. |
* @inode_setxattr: |
* Check permission before setting the extended attributes |
* @value identified by @name for @dentry. |
* Return 0 if permission is granted. |
* @inode_post_setxattr: |
* Update inode security field after successful setxattr operation. |
* @value identified by @name for @dentry. |
* @inode_getxattr: |
* Check permission before obtaining the extended attributes |
* identified by @name for @dentry. |
* Return 0 if permission is granted. |
* @inode_listxattr: |
* Check permission before obtaining the list of extended attribute |
* names for @dentry. |
* Return 0 if permission is granted. |
* @inode_removexattr: |
* Check permission before removing the extended attribute |
* identified by @name for @dentry. |
* Return 0 if permission is granted. |
* @inode_getsecurity: |
* Copy the extended attribute representation of the security label |
* associated with @name for @dentry into @buffer. @buffer may be |
* NULL to request the size of the buffer required. @size indicates |
* the size of @buffer in bytes. Note that @name is the remainder |
* of the attribute name after the security. prefix has been removed. |
* Return number of bytes used/required on success. |
* @inode_setsecurity: |
* Set the security label associated with @name for @dentry from the |
* extended attribute value @value. @size indicates the size of the |
* @value in bytes. @flags may be XATTR_CREATE, XATTR_REPLACE, or 0. |
* Note that @name is the remainder of the attribute name after the |
* security. prefix has been removed. |
* Return 0 on success. |
* @inode_listsecurity: |
* Copy the extended attribute names for the security labels |
* associated with @dentry into @buffer. @buffer may be NULL to |
* request the size of the buffer required. |
* Returns number of bytes used/required on success. |
* |
* Security hooks for file operations |
* |
* @file_permission: |
* Check file permissions before accessing an open file. This hook is |
* called by various operations that read or write files. A security |
* module can use this hook to perform additional checking on these |
* operations, e.g. to revalidate permissions on use to support privilege |
* bracketing or policy changes. Notice that this hook is used when the |
* actual read/write operations are performed, whereas the |
* inode_security_ops hook is called when a file is opened (as well as |
* many other operations). |
* Caveat: Although this hook can be used to revalidate permissions for |
* various system call operations that read or write files, it does not |
* address the revalidation of permissions for memory-mapped files. |
* Security modules must handle this separately if they need such |
* revalidation. |
* @file contains the file structure being accessed. |
* @mask contains the requested permissions. |
* Return 0 if permission is granted. |
* @file_alloc_security: |
* Allocate and attach a security structure to the file->f_security field. |
* The security field is initialized to NULL when the structure is first |
* created. |
* @file contains the file structure to secure. |
* Return 0 if the hook is successful and permission is granted. |
* @file_free_security: |
* Deallocate and free any security structures stored in file->f_security. |
* @file contains the file structure being modified. |
* @file_ioctl: |
* @file contains the file structure. |
* @cmd contains the operation to perform. |
* @arg contains the operational arguments. |
* Check permission for an ioctl operation on @file. Note that @arg can |
* sometimes represents a user space pointer; in other cases, it may be a |
* simple integer value. When @arg represents a user space pointer, it |
* should never be used by the security module. |
* Return 0 if permission is granted. |
* @file_mmap : |
* Check permissions for a mmap operation. The @file may be NULL, e.g. |
* if mapping anonymous memory. |
* @file contains the file structure for file to map (may be NULL). |
* @prot contains the requested permissions. |
* @flags contains the operational flags. |
* Return 0 if permission is granted. |
* @file_mprotect: |
* Check permissions before changing memory access permissions. |
* @vma contains the memory region to modify. |
* @prot contains the requested permissions. |
* Return 0 if permission is granted. |
* @file_lock: |
* Check permission before performing file locking operations. |
* Note: this hook mediates both flock and fcntl style locks. |
* @file contains the file structure. |
* @cmd contains the posix-translated lock operation to perform |
* (e.g. F_RDLCK, F_WRLCK). |
* Return 0 if permission is granted. |
* @file_fcntl: |
* Check permission before allowing the file operation specified by @cmd |
* from being performed on the file @file. Note that @arg can sometimes |
* represents a user space pointer; in other cases, it may be a simple |
* integer value. When @arg represents a user space pointer, it should |
* never be used by the security module. |
* @file contains the file structure. |
* @cmd contains the operation to be performed. |
* @arg contains the operational arguments. |
* Return 0 if permission is granted. |
* @file_set_fowner: |
* Save owner security information (typically from current->security) in |
* file->f_security for later use by the send_sigiotask hook. |
* @file contains the file structure to update. |
* Return 0 on success. |
* @file_send_sigiotask: |
* Check permission for the file owner @fown to send SIGIO to the process |
* @tsk. Note that this hook is always called from interrupt. Note that |
* the fown_struct, @fown, is never outside the context of a struct file, |
* so the file structure (and associated security information) can always |
* be obtained: |
* (struct file *)((long)fown - offsetof(struct file,f_owner)); |
* @tsk contains the structure of task receiving signal. |
* @fown contains the file owner information. |
* @fd contains the file descriptor. |
* @reason contains the operational flags. |
* Return 0 if permission is granted. |
* @file_receive: |
* This hook allows security modules to control the ability of a process |
* to receive an open file descriptor via socket IPC. |
* @file contains the file structure being received. |
* Return 0 if permission is granted. |
* |
* Security hooks for task operations. |
* |
* @task_create: |
* Check permission before creating a child process. See the clone(2) |
* manual page for definitions of the @clone_flags. |
* @clone_flags contains the flags indicating what should be shared. |
* Return 0 if permission is granted. |
* @task_alloc_security: |
* @p contains the task_struct for child process. |
* Allocate and attach a security structure to the p->security field. The |
* security field is initialized to NULL when the task structure is |
* allocated. |
* Return 0 if operation was successful. |
* @task_free_security: |
* @p contains the task_struct for process. |
* Deallocate and clear the p->security field. |
* @task_setuid: |
* Check permission before setting one or more of the user identity |
* attributes of the current process. The @flags parameter indicates |
* which of the set*uid system calls invoked this hook and how to |
* interpret the @id0, @id1, and @id2 parameters. See the LSM_SETID |
* definitions at the beginning of this file for the @flags values and |
* their meanings. |
* @id0 contains a uid. |
* @id1 contains a uid. |
* @id2 contains a uid. |
* @flags contains one of the LSM_SETID_* values. |
* Return 0 if permission is granted. |
* @task_post_setuid: |
* Update the module's state after setting one or more of the user |
* identity attributes of the current process. The @flags parameter |
* indicates which of the set*uid system calls invoked this hook. If |
* @flags is LSM_SETID_FS, then @old_ruid is the old fs uid and the other |
* parameters are not used. |
* @old_ruid contains the old real uid (or fs uid if LSM_SETID_FS). |
* @old_euid contains the old effective uid (or -1 if LSM_SETID_FS). |
* @old_suid contains the old saved uid (or -1 if LSM_SETID_FS). |
* @flags contains one of the LSM_SETID_* values. |
* Return 0 on success. |
* @task_setgid: |
* Check permission before setting one or more of the group identity |
* attributes of the current process. The @flags parameter indicates |
* which of the set*gid system calls invoked this hook and how to |
* interpret the @id0, @id1, and @id2 parameters. See the LSM_SETID |
* definitions at the beginning of this file for the @flags values and |
* their meanings. |
* @id0 contains a gid. |
* @id1 contains a gid. |
* @id2 contains a gid. |
* @flags contains one of the LSM_SETID_* values. |
* Return 0 if permission is granted. |
* @task_setpgid: |
* Check permission before setting the process group identifier of the |
* process @p to @pgid. |
* @p contains the task_struct for process being modified. |
* @pgid contains the new pgid. |
* Return 0 if permission is granted. |
* @task_getpgid: |
* Check permission before getting the process group identifier of the |
* process @p. |
* @p contains the task_struct for the process. |
* Return 0 if permission is granted. |
* @task_getsid: |
* Check permission before getting the session identifier of the process |
* @p. |
* @p contains the task_struct for the process. |
* Return 0 if permission is granted. |
* @task_setgroups: |
* Check permission before setting the supplementary group set of the |
* current process to @grouplist. |
* @gidsetsize contains the number of elements in @grouplist. |
* @grouplist contains the array of gids. |
* Return 0 if permission is granted. |
* @task_setnice: |
* Check permission before setting the nice value of @p to @nice. |
* @p contains the task_struct of process. |
* @nice contains the new nice value. |
* Return 0 if permission is granted. |
* @task_setrlimit: |
* Check permission before setting the resource limits of the current |
* process for @resource to @new_rlim. The old resource limit values can |
* be examined by dereferencing (current->rlim + resource). |
* @resource contains the resource whose limit is being set. |
* @new_rlim contains the new limits for @resource. |
* Return 0 if permission is granted. |
* @task_setscheduler: |
* Check permission before setting scheduling policy and/or parameters of |
* process @p based on @policy and @lp. |
* @p contains the task_struct for process. |
* @policy contains the scheduling policy. |
* @lp contains the scheduling parameters. |
* Return 0 if permission is granted. |
* @task_getscheduler: |
* Check permission before obtaining scheduling information for process |
* @p. |
* @p contains the task_struct for process. |
* Return 0 if permission is granted. |
* @task_kill: |
* Check permission before sending signal @sig to @p. @info can be NULL, |
* the constant 1, or a pointer to a siginfo structure. If @info is 1 or |
* SI_FROMKERNEL(info) is true, then the signal should be viewed as coming |
* from the kernel and should typically be permitted. |
* SIGIO signals are handled separately by the send_sigiotask hook in |
* file_security_ops. |
* @p contains the task_struct for process. |
* @info contains the signal information. |
* @sig contains the signal value. |
* Return 0 if permission is granted. |
* @task_wait: |
* Check permission before allowing a process to reap a child process @p |
* and collect its status information. |
* @p contains the task_struct for process. |
* Return 0 if permission is granted. |
* @task_prctl: |
* Check permission before performing a process control operation on the |
* current process. |
* @option contains the operation. |
* @arg2 contains a argument. |
* @arg3 contains a argument. |
* @arg4 contains a argument. |
* @arg5 contains a argument. |
* Return 0 if permission is granted. |
* @task_reparent_to_init: |
* Set the security attributes in @p->security for a kernel thread that |
* is being reparented to the init task. |
* @p contains the task_struct for the kernel thread. |
* @task_to_inode: |
* Set the security attributes for an inode based on an associated task's |
* security attributes, e.g. for /proc/pid inodes. |
* @p contains the task_struct for the task. |
* @inode contains the inode structure for the inode. |
* |
* Security hooks for Netlink messaging. |
* |
* @netlink_send: |
* Save security information for a netlink message so that permission |
* checking can be performed when the message is processed. The security |
* information can be saved using the eff_cap field of the |
* netlink_skb_parms structure. |
* @skb contains the sk_buff structure for the netlink message. |
* Return 0 if the information was successfully saved. |
* @netlink_recv: |
* Check permission before processing the received netlink message in |
* @skb. |
* @skb contains the sk_buff structure for the netlink message. |
* Return 0 if permission is granted. |
* |
* Security hooks for Unix domain networking. |
* |
* @unix_stream_connect: |
* Check permissions before establishing a Unix domain stream connection |
* between @sock and @other. |
* @sock contains the socket structure. |
* @other contains the peer socket structure. |
* Return 0 if permission is granted. |
* @unix_may_send: |
* Check permissions before connecting or sending datagrams from @sock to |
* @other. |
* @sock contains the socket structure. |
* @sock contains the peer socket structure. |
* Return 0 if permission is granted. |
* |
* The @unix_stream_connect and @unix_may_send hooks were necessary because |
* Linux provides an alternative to the conventional file name space for Unix |
* domain sockets. Whereas binding and connecting to sockets in the file name |
* space is mediated by the typical file permissions (and caught by the mknod |
* and permission hooks in inode_security_ops), binding and connecting to |
* sockets in the abstract name space is completely unmediated. Sufficient |
* control of Unix domain sockets in the abstract name space isn't possible |
* using only the socket layer hooks, since we need to know the actual target |
* socket, which is not looked up until we are inside the af_unix code. |
* |
* Security hooks for socket operations. |
* |
* @socket_create: |
* Check permissions prior to creating a new socket. |
* @family contains the requested protocol family. |
* @type contains the requested communications type. |
* @protocol contains the requested protocol. |
* Return 0 if permission is granted. |
* @socket_post_create: |
* This hook allows a module to update or allocate a per-socket security |
* structure. Note that the security field was not added directly to the |
* socket structure, but rather, the socket security information is stored |
* in the associated inode. Typically, the inode alloc_security hook will |
* allocate and and attach security information to |
* sock->inode->i_security. This hook may be used to update the |
* sock->inode->i_security field with additional information that wasn't |
* available when the inode was allocated. |
* @sock contains the newly created socket structure. |
* @family contains the requested protocol family. |
* @type contains the requested communications type. |
* @protocol contains the requested protocol. |
* @socket_bind: |
* Check permission before socket protocol layer bind operation is |
* performed and the socket @sock is bound to the address specified in the |
* @address parameter. |
* @sock contains the socket structure. |
* @address contains the address to bind to. |
* @addrlen contains the length of address. |
* Return 0 if permission is granted. |
* @socket_connect: |
* Check permission before socket protocol layer connect operation |
* attempts to connect socket @sock to a remote address, @address. |
* @sock contains the socket structure. |
* @address contains the address of remote endpoint. |
* @addrlen contains the length of address. |
* Return 0 if permission is granted. |
* @socket_listen: |
* Check permission before socket protocol layer listen operation. |
* @sock contains the socket structure. |
* @backlog contains the maximum length for the pending connection queue. |
* Return 0 if permission is granted. |
* @socket_accept: |
* Check permission before accepting a new connection. Note that the new |
* socket, @newsock, has been created and some information copied to it, |
* but the accept operation has not actually been performed. |
* @sock contains the listening socket structure. |
* @newsock contains the newly created server socket for connection. |
* Return 0 if permission is granted. |
* @socket_post_accept: |
* This hook allows a security module to copy security |
* information into the newly created socket's inode. |
* @sock contains the listening socket structure. |
* @newsock contains the newly created server socket for connection. |
* @socket_sendmsg: |
* Check permission before transmitting a message to another socket. |
* @sock contains the socket structure. |
* @msg contains the message to be transmitted. |
* @size contains the size of message. |
* Return 0 if permission is granted. |
* @socket_recvmsg: |
* Check permission before receiving a message from a socket. |
* @sock contains the socket structure. |
* @msg contains the message structure. |
* @size contains the size of message structure. |
* @flags contains the operational flags. |
* Return 0 if permission is granted. |
* @socket_getsockname: |
* Check permission before the local address (name) of the socket object |
* @sock is retrieved. |
* @sock contains the socket structure. |
* Return 0 if permission is granted. |
* @socket_getpeername: |
* Check permission before the remote address (name) of a socket object |
* @sock is retrieved. |
* @sock contains the socket structure. |
* Return 0 if permission is granted. |
* @socket_getsockopt: |
* Check permissions before retrieving the options associated with socket |
* @sock. |
* @sock contains the socket structure. |
* @level contains the protocol level to retrieve option from. |
* @optname contains the name of option to retrieve. |
* Return 0 if permission is granted. |
* @socket_setsockopt: |
* Check permissions before setting the options associated with socket |
* @sock. |
* @sock contains the socket structure. |
* @level contains the protocol level to set options for. |
* @optname contains the name of the option to set. |
* Return 0 if permission is granted. |
* @socket_shutdown: |
* Checks permission before all or part of a connection on the socket |
* @sock is shut down. |
* @sock contains the socket structure. |
* @how contains the flag indicating how future sends and receives are handled. |
* Return 0 if permission is granted. |
* @socket_sock_rcv_skb: |
* Check permissions on incoming network packets. This hook is distinct |
* from Netfilter's IP input hooks since it is the first time that the |
* incoming sk_buff @skb has been associated with a particular socket, @sk. |
* @sk contains the sock (not socket) associated with the incoming sk_buff. |
* @skb contains the incoming network data. |
* |
* Security hooks affecting all System V IPC operations. |
* |
* @ipc_permission: |
* Check permissions for access to IPC |
* @ipcp contains the kernel IPC permission structure |
* @flag contains the desired (requested) permission set |
* Return 0 if permission is granted. |
* |
* Security hooks for individual messages held in System V IPC message queues |
* @msg_msg_alloc_security: |
* Allocate and attach a security structure to the msg->security field. |
* The security field is initialized to NULL when the structure is first |
* created. |
* @msg contains the message structure to be modified. |
* Return 0 if operation was successful and permission is granted. |
* @msg_msg_free_security: |
* Deallocate the security structure for this message. |
* @msg contains the message structure to be modified. |
* |
* Security hooks for System V IPC Message Queues |
* |
* @msg_queue_alloc_security: |
* Allocate and attach a security structure to the |
* msq->q_perm.security field. The security field is initialized to |
* NULL when the structure is first created. |
* @msq contains the message queue structure to be modified. |
* Return 0 if operation was successful and permission is granted. |
* @msg_queue_free_security: |
* Deallocate security structure for this message queue. |
* @msq contains the message queue structure to be modified. |
* @msg_queue_associate: |
* Check permission when a message queue is requested through the |
* msgget system call. This hook is only called when returning the |
* message queue identifier for an existing message queue, not when a |
* new message queue is created. |
* @msq contains the message queue to act upon. |
* @msqflg contains the operation control flags. |
* Return 0 if permission is granted. |
* @msg_queue_msgctl: |
* Check permission when a message control operation specified by @cmd |
* is to be performed on the message queue @msq. |
* The @msq may be NULL, e.g. for IPC_INFO or MSG_INFO. |
* @msq contains the message queue to act upon. May be NULL. |
* @cmd contains the operation to be performed. |
* Return 0 if permission is granted. |
* @msg_queue_msgsnd: |
* Check permission before a message, @msg, is enqueued on the message |
* queue, @msq. |
* @msq contains the message queue to send message to. |
* @msg contains the message to be enqueued. |
* @msqflg contains operational flags. |
* Return 0 if permission is granted. |
* @msg_queue_msgrcv: |
* Check permission before a message, @msg, is removed from the message |
* queue, @msq. The @target task structure contains a pointer to the |
* process that will be receiving the message (not equal to the current |
* process when inline receives are being performed). |
* @msq contains the message queue to retrieve message from. |
* @msg contains the message destination. |
* @target contains the task structure for recipient process. |
* @type contains the type of message requested. |
* @mode contains the operational flags. |
* Return 0 if permission is granted. |
* |
* Security hooks for System V Shared Memory Segments |
* |
* @shm_alloc_security: |
* Allocate and attach a security structure to the shp->shm_perm.security |
* field. The security field is initialized to NULL when the structure is |
* first created. |
* @shp contains the shared memory structure to be modified. |
* Return 0 if operation was successful and permission is granted. |
* @shm_free_security: |
* Deallocate the security struct for this memory segment. |
* @shp contains the shared memory structure to be modified. |
* @shm_associate: |
* Check permission when a shared memory region is requested through the |
* shmget system call. This hook is only called when returning the shared |
* memory region identifier for an existing region, not when a new shared |
* memory region is created. |
* @shp contains the shared memory structure to be modified. |
* @shmflg contains the operation control flags. |
* Return 0 if permission is granted. |
* @shm_shmctl: |
* Check permission when a shared memory control operation specified by |
* @cmd is to be performed on the shared memory region @shp. |
* The @shp may be NULL, e.g. for IPC_INFO or SHM_INFO. |
* @shp contains shared memory structure to be modified. |
* @cmd contains the operation to be performed. |
* Return 0 if permission is granted. |
* @shm_shmat: |
* Check permissions prior to allowing the shmat system call to attach the |
* shared memory segment @shp to the data segment of the calling process. |
* The attaching address is specified by @shmaddr. |
* @shp contains the shared memory structure to be modified. |
* @shmaddr contains the address to attach memory region to. |
* @shmflg contains the operational flags. |
* Return 0 if permission is granted. |
* |
* Security hooks for System V Semaphores |
* |
* @sem_alloc_security: |
* Allocate and attach a security structure to the sma->sem_perm.security |
* field. The security field is initialized to NULL when the structure is |
* first created. |
* @sma contains the semaphore structure |
* Return 0 if operation was successful and permission is granted. |
* @sem_free_security: |
* deallocate security struct for this semaphore |
* @sma contains the semaphore structure. |
* @sem_associate: |
* Check permission when a semaphore is requested through the semget |
* system call. This hook is only called when returning the semaphore |
* identifier for an existing semaphore, not when a new one must be |
* created. |
* @sma contains the semaphore structure. |
* @semflg contains the operation control flags. |
* Return 0 if permission is granted. |
* @sem_semctl: |
* Check permission when a semaphore operation specified by @cmd is to be |
* performed on the semaphore @sma. The @sma may be NULL, e.g. for |
* IPC_INFO or SEM_INFO. |
* @sma contains the semaphore structure. May be NULL. |
* @cmd contains the operation to be performed. |
* Return 0 if permission is granted. |
* @sem_semop |
* Check permissions before performing operations on members of the |
* semaphore set @sma. If the @alter flag is nonzero, the semaphore set |
* may be modified. |
* @sma contains the semaphore structure. |
* @sops contains the operations to perform. |
* @nsops contains the number of operations to perform. |
* @alter contains the flag indicating whether changes are to be made. |
* Return 0 if permission is granted. |
* |
* @ptrace: |
* Check permission before allowing the @parent process to trace the |
* @child process. |
* Security modules may also want to perform a process tracing check |
* during an execve in the set_security or compute_creds hooks of |
* binprm_security_ops if the process is being traced and its security |
* attributes would be changed by the execve. |
* @parent contains the task_struct structure for parent process. |
* @child contains the task_struct structure for child process. |
* Return 0 if permission is granted. |
* @capget: |
* Get the @effective, @inheritable, and @permitted capability sets for |
* the @target process. The hook may also perform permission checking to |
* determine if the current process is allowed to see the capability sets |
* of the @target process. |
* @target contains the task_struct structure for target process. |
* @effective contains the effective capability set. |
* @inheritable contains the inheritable capability set. |
* @permitted contains the permitted capability set. |
* Return 0 if the capability sets were successfully obtained. |
* @capset_check: |
* Check permission before setting the @effective, @inheritable, and |
* @permitted capability sets for the @target process. |
* Caveat: @target is also set to current if a set of processes is |
* specified (i.e. all processes other than current and init or a |
* particular process group). Hence, the capset_set hook may need to |
* revalidate permission to the actual target process. |
* @target contains the task_struct structure for target process. |
* @effective contains the effective capability set. |
* @inheritable contains the inheritable capability set. |
* @permitted contains the permitted capability set. |
* Return 0 if permission is granted. |
* @capset_set: |
* Set the @effective, @inheritable, and @permitted capability sets for |
* the @target process. Since capset_check cannot always check permission |
* to the real @target process, this hook may also perform permission |
* checking to determine if the current process is allowed to set the |
* capability sets of the @target process. However, this hook has no way |
* of returning an error due to the structure of the sys_capset code. |
* @target contains the task_struct structure for target process. |
* @effective contains the effective capability set. |
* @inheritable contains the inheritable capability set. |
* @permitted contains the permitted capability set. |
* @acct: |
* Check permission before enabling or disabling process accounting. If |
* accounting is being enabled, then @file refers to the open file used to |
* store accounting records. If accounting is being disabled, then @file |
* is NULL. |
* @file contains the file structure for the accounting file (may be NULL). |
* Return 0 if permission is granted. |
* @sysctl: |
* Check permission before accessing the @table sysctl variable in the |
* manner specified by @op. |
* @table contains the ctl_table structure for the sysctl variable. |
* @op contains the operation (001 = search, 002 = write, 004 = read). |
* Return 0 if permission is granted. |
* @capable: |
* Check whether the @tsk process has the @cap capability. |
* @tsk contains the task_struct for the process. |
* @cap contains the capability <include/linux/capability.h>. |
* Return 0 if the capability is granted for @tsk. |
* @syslog: |
* Check permission before accessing the kernel message ring or changing |
* logging to the console. |
* See the syslog(2) manual page for an explanation of the @type values. |
* @type contains the type of action. |
* Return 0 if permission is granted. |
* @vm_enough_memory: |
* Check permissions for allocating a new virtual mapping. |
* @pages contains the number of pages. |
* Return 0 if permission is granted. |
* |
* @register_security: |
* allow module stacking. |
* @name contains the name of the security module being stacked. |
* @ops contains a pointer to the struct security_operations of the module to stack. |
* @unregister_security: |
* remove a stacked module. |
* @name contains the name of the security module being unstacked. |
* @ops contains a pointer to the struct security_operations of the module to unstack. |
* |
* This is the main security structure. |
*/ |
struct security_operations { |
int (*ptrace) (struct task_struct * parent, struct task_struct * child); |
int (*capget) (struct task_struct * target, |
kernel_cap_t * effective, |
kernel_cap_t * inheritable, kernel_cap_t * permitted); |
int (*capset_check) (struct task_struct * target, |
kernel_cap_t * effective, |
kernel_cap_t * inheritable, |
kernel_cap_t * permitted); |
void (*capset_set) (struct task_struct * target, |
kernel_cap_t * effective, |
kernel_cap_t * inheritable, |
kernel_cap_t * permitted); |
int (*acct) (struct file * file); |
int (*sysctl) (ctl_table * table, int op); |
int (*capable) (struct task_struct * tsk, int cap); |
int (*quotactl) (int cmds, int type, int id, struct super_block * sb); |
int (*quota_on) (struct file * f); |
int (*syslog) (int type); |
int (*vm_enough_memory) (long pages); |
int (*bprm_alloc_security) (struct linux_binprm * bprm); |
void (*bprm_free_security) (struct linux_binprm * bprm); |
void (*bprm_compute_creds) (struct linux_binprm * bprm); |
int (*bprm_set_security) (struct linux_binprm * bprm); |
int (*bprm_check_security) (struct linux_binprm * bprm); |
int (*bprm_secureexec) (struct linux_binprm * bprm); |
int (*sb_alloc_security) (struct super_block * sb); |
void (*sb_free_security) (struct super_block * sb); |
int (*sb_kern_mount) (struct super_block *sb); |
int (*sb_statfs) (struct super_block * sb); |
int (*sb_mount) (char *dev_name, struct nameidata * nd, |
char *type, unsigned long flags, void *data); |
int (*sb_check_sb) (struct vfsmount * mnt, struct nameidata * nd); |
int (*sb_umount) (struct vfsmount * mnt, int flags); |
void (*sb_umount_close) (struct vfsmount * mnt); |
void (*sb_umount_busy) (struct vfsmount * mnt); |
void (*sb_post_remount) (struct vfsmount * mnt, |
unsigned long flags, void *data); |
void (*sb_post_mountroot) (void); |
void (*sb_post_addmount) (struct vfsmount * mnt, |
struct nameidata * mountpoint_nd); |
int (*sb_pivotroot) (struct nameidata * old_nd, |
struct nameidata * new_nd); |
void (*sb_post_pivotroot) (struct nameidata * old_nd, |
struct nameidata * new_nd); |
int (*inode_alloc_security) (struct inode *inode); |
void (*inode_free_security) (struct inode *inode); |
int (*inode_create) (struct inode *dir, |
struct dentry *dentry, int mode); |
void (*inode_post_create) (struct inode *dir, |
struct dentry *dentry, int mode); |
int (*inode_link) (struct dentry *old_dentry, |
struct inode *dir, struct dentry *new_dentry); |
void (*inode_post_link) (struct dentry *old_dentry, |
struct inode *dir, struct dentry *new_dentry); |
int (*inode_unlink) (struct inode *dir, struct dentry *dentry); |
int (*inode_symlink) (struct inode *dir, |
struct dentry *dentry, const char *old_name); |
void (*inode_post_symlink) (struct inode *dir, |
struct dentry *dentry, |
const char *old_name); |
int (*inode_mkdir) (struct inode *dir, struct dentry *dentry, int mode); |
void (*inode_post_mkdir) (struct inode *dir, struct dentry *dentry, |
int mode); |
int (*inode_rmdir) (struct inode *dir, struct dentry *dentry); |
int (*inode_mknod) (struct inode *dir, struct dentry *dentry, |
int mode, dev_t dev); |
void (*inode_post_mknod) (struct inode *dir, struct dentry *dentry, |
int mode, dev_t dev); |
int (*inode_rename) (struct inode *old_dir, struct dentry *old_dentry, |
struct inode *new_dir, struct dentry *new_dentry); |
void (*inode_post_rename) (struct inode *old_dir, |
struct dentry *old_dentry, |
struct inode *new_dir, |
struct dentry *new_dentry); |
int (*inode_readlink) (struct dentry *dentry); |
int (*inode_follow_link) (struct dentry *dentry, struct nameidata *nd); |
int (*inode_permission) (struct inode *inode, int mask, struct nameidata *nd); |
int (*inode_setattr) (struct dentry *dentry, struct iattr *attr); |
int (*inode_getattr) (struct vfsmount *mnt, struct dentry *dentry); |
void (*inode_delete) (struct inode *inode); |
int (*inode_setxattr) (struct dentry *dentry, char *name, void *value, |
size_t size, int flags); |
void (*inode_post_setxattr) (struct dentry *dentry, char *name, void *value, |
size_t size, int flags); |
int (*inode_getxattr) (struct dentry *dentry, char *name); |
int (*inode_listxattr) (struct dentry *dentry); |
int (*inode_removexattr) (struct dentry *dentry, char *name); |
int (*inode_getsecurity)(struct dentry *dentry, const char *name, void *buffer, size_t size); |
int (*inode_setsecurity)(struct dentry *dentry, const char *name, const void *value, size_t size, int flags); |
int (*inode_listsecurity)(struct dentry *dentry, char *buffer); |
int (*file_permission) (struct file * file, int mask); |
int (*file_alloc_security) (struct file * file); |
void (*file_free_security) (struct file * file); |
int (*file_ioctl) (struct file * file, unsigned int cmd, |
unsigned long arg); |
int (*file_mmap) (struct file * file, |
unsigned long prot, unsigned long flags); |
int (*file_mprotect) (struct vm_area_struct * vma, unsigned long prot); |
int (*file_lock) (struct file * file, unsigned int cmd); |
int (*file_fcntl) (struct file * file, unsigned int cmd, |
unsigned long arg); |
int (*file_set_fowner) (struct file * file); |
int (*file_send_sigiotask) (struct task_struct * tsk, |
struct fown_struct * fown, |
int fd, int reason); |
int (*file_receive) (struct file * file); |
int (*task_create) (unsigned long clone_flags); |
int (*task_alloc_security) (struct task_struct * p); |
void (*task_free_security) (struct task_struct * p); |
int (*task_setuid) (uid_t id0, uid_t id1, uid_t id2, int flags); |
int (*task_post_setuid) (uid_t old_ruid /* or fsuid */ , |
uid_t old_euid, uid_t old_suid, int flags); |
int (*task_setgid) (gid_t id0, gid_t id1, gid_t id2, int flags); |
int (*task_setpgid) (struct task_struct * p, pid_t pgid); |
int (*task_getpgid) (struct task_struct * p); |
int (*task_getsid) (struct task_struct * p); |
int (*task_setgroups) (int gidsetsize, gid_t * grouplist); |
int (*task_setnice) (struct task_struct * p, int nice); |
int (*task_setrlimit) (unsigned int resource, struct rlimit * new_rlim); |
int (*task_setscheduler) (struct task_struct * p, int policy, |
struct sched_param * lp); |
int (*task_getscheduler) (struct task_struct * p); |
int (*task_kill) (struct task_struct * p, |
struct siginfo * info, int sig); |
int (*task_wait) (struct task_struct * p); |
int (*task_prctl) (int option, unsigned long arg2, |
unsigned long arg3, unsigned long arg4, |
unsigned long arg5); |
void (*task_reparent_to_init) (struct task_struct * p); |
void (*task_to_inode)(struct task_struct *p, struct inode *inode); |
int (*ipc_permission) (struct kern_ipc_perm * ipcp, short flag); |
int (*msg_msg_alloc_security) (struct msg_msg * msg); |
void (*msg_msg_free_security) (struct msg_msg * msg); |
int (*msg_queue_alloc_security) (struct msg_queue * msq); |
void (*msg_queue_free_security) (struct msg_queue * msq); |
int (*msg_queue_associate) (struct msg_queue * msq, int msqflg); |
int (*msg_queue_msgctl) (struct msg_queue * msq, int cmd); |
int (*msg_queue_msgsnd) (struct msg_queue * msq, |
struct msg_msg * msg, int msqflg); |
int (*msg_queue_msgrcv) (struct msg_queue * msq, |
struct msg_msg * msg, |
struct task_struct * target, |
long type, int mode); |
int (*shm_alloc_security) (struct shmid_kernel * shp); |
void (*shm_free_security) (struct shmid_kernel * shp); |
int (*shm_associate) (struct shmid_kernel * shp, int shmflg); |
int (*shm_shmctl) (struct shmid_kernel * shp, int cmd); |
int (*shm_shmat) (struct shmid_kernel * shp, |
char *shmaddr, int shmflg); |
int (*sem_alloc_security) (struct sem_array * sma); |
void (*sem_free_security) (struct sem_array * sma); |
int (*sem_associate) (struct sem_array * sma, int semflg); |
int (*sem_semctl) (struct sem_array * sma, int cmd); |
int (*sem_semop) (struct sem_array * sma, |
struct sembuf * sops, unsigned nsops, int alter); |
int (*netlink_send) (struct sk_buff * skb); |
int (*netlink_recv) (struct sk_buff * skb); |
/* allow module stacking */ |
int (*register_security) (const char *name, |
struct security_operations *ops); |
int (*unregister_security) (const char *name, |
struct security_operations *ops); |
void (*d_instantiate) (struct dentry *dentry, struct inode *inode); |
int (*getprocattr)(struct task_struct *p, char *name, void *value, size_t size); |
int (*setprocattr)(struct task_struct *p, char *name, void *value, size_t size); |
#ifdef CONFIG_SECURITY_NETWORK |
int (*unix_stream_connect) (struct socket * sock, |
struct socket * other, struct sock * newsk); |
int (*unix_may_send) (struct socket * sock, struct socket * other); |
int (*socket_create) (int family, int type, int protocol); |
void (*socket_post_create) (struct socket * sock, int family, |
int type, int protocol); |
int (*socket_bind) (struct socket * sock, |
struct sockaddr * address, int addrlen); |
int (*socket_connect) (struct socket * sock, |
struct sockaddr * address, int addrlen); |
int (*socket_listen) (struct socket * sock, int backlog); |
int (*socket_accept) (struct socket * sock, struct socket * newsock); |
void (*socket_post_accept) (struct socket * sock, |
struct socket * newsock); |
int (*socket_sendmsg) (struct socket * sock, |
struct msghdr * msg, int size); |
int (*socket_recvmsg) (struct socket * sock, |
struct msghdr * msg, int size, int flags); |
int (*socket_getsockname) (struct socket * sock); |
int (*socket_getpeername) (struct socket * sock); |
int (*socket_getsockopt) (struct socket * sock, int level, int optname); |
int (*socket_setsockopt) (struct socket * sock, int level, int optname); |
int (*socket_shutdown) (struct socket * sock, int how); |
int (*socket_sock_rcv_skb) (struct sock * sk, struct sk_buff * skb); |
#endif /* CONFIG_SECURITY_NETWORK */ |
}; |
/* global variables */ |
extern struct security_operations *security_ops; |
/* inline stuff */ |
static inline int security_ptrace (struct task_struct * parent, struct task_struct * child) |
{ |
return security_ops->ptrace (parent, child); |
} |
static inline int security_capget (struct task_struct *target, |
kernel_cap_t *effective, |
kernel_cap_t *inheritable, |
kernel_cap_t *permitted) |
{ |
return security_ops->capget (target, effective, inheritable, permitted); |
} |
static inline int security_capset_check (struct task_struct *target, |
kernel_cap_t *effective, |
kernel_cap_t *inheritable, |
kernel_cap_t *permitted) |
{ |
return security_ops->capset_check (target, effective, inheritable, permitted); |
} |
static inline void security_capset_set (struct task_struct *target, |
kernel_cap_t *effective, |
kernel_cap_t *inheritable, |
kernel_cap_t *permitted) |
{ |
security_ops->capset_set (target, effective, inheritable, permitted); |
} |
static inline int security_acct (struct file *file) |
{ |
return security_ops->acct (file); |
} |
static inline int security_sysctl(ctl_table * table, int op) |
{ |
return security_ops->sysctl(table, op); |
} |
static inline int security_quotactl (int cmds, int type, int id, |
struct super_block *sb) |
{ |
return security_ops->quotactl (cmds, type, id, sb); |
} |
static inline int security_quota_on (struct file * file) |
{ |
return security_ops->quota_on (file); |
} |
static inline int security_syslog(int type) |
{ |
return security_ops->syslog(type); |
} |
static inline int security_vm_enough_memory(long pages) |
{ |
return security_ops->vm_enough_memory(pages); |
} |
static inline int security_bprm_alloc (struct linux_binprm *bprm) |
{ |
return security_ops->bprm_alloc_security (bprm); |
} |
static inline void security_bprm_free (struct linux_binprm *bprm) |
{ |
security_ops->bprm_free_security (bprm); |
} |
static inline void security_bprm_compute_creds (struct linux_binprm *bprm) |
{ |
security_ops->bprm_compute_creds (bprm); |
} |
static inline int security_bprm_set (struct linux_binprm *bprm) |
{ |
return security_ops->bprm_set_security (bprm); |
} |
static inline int security_bprm_check (struct linux_binprm *bprm) |
{ |
return security_ops->bprm_check_security (bprm); |
} |
static inline int security_bprm_secureexec (struct linux_binprm *bprm) |
{ |
return security_ops->bprm_secureexec (bprm); |
} |
static inline int security_sb_alloc (struct super_block *sb) |
{ |
return security_ops->sb_alloc_security (sb); |
} |
static inline void security_sb_free (struct super_block *sb) |
{ |
security_ops->sb_free_security (sb); |
} |
static inline int security_sb_kern_mount (struct super_block *sb) |
{ |
return security_ops->sb_kern_mount (sb); |
} |
static inline int security_sb_statfs (struct super_block *sb) |
{ |
return security_ops->sb_statfs (sb); |
} |
static inline int security_sb_mount (char *dev_name, struct nameidata *nd, |
char *type, unsigned long flags, |
void *data) |
{ |
return security_ops->sb_mount (dev_name, nd, type, flags, data); |
} |
static inline int security_sb_check_sb (struct vfsmount *mnt, |
struct nameidata *nd) |
{ |
return security_ops->sb_check_sb (mnt, nd); |
} |
static inline int security_sb_umount (struct vfsmount *mnt, int flags) |
{ |
return security_ops->sb_umount (mnt, flags); |
} |
static inline void security_sb_umount_close (struct vfsmount *mnt) |
{ |
security_ops->sb_umount_close (mnt); |
} |
static inline void security_sb_umount_busy (struct vfsmount *mnt) |
{ |
security_ops->sb_umount_busy (mnt); |
} |
static inline void security_sb_post_remount (struct vfsmount *mnt, |
unsigned long flags, void *data) |
{ |
security_ops->sb_post_remount (mnt, flags, data); |
} |
static inline void security_sb_post_mountroot (void) |
{ |
security_ops->sb_post_mountroot (); |
} |
static inline void security_sb_post_addmount (struct vfsmount *mnt, |
struct nameidata *mountpoint_nd) |
{ |
security_ops->sb_post_addmount (mnt, mountpoint_nd); |
} |
static inline int security_sb_pivotroot (struct nameidata *old_nd, |
struct nameidata *new_nd) |
{ |
return security_ops->sb_pivotroot (old_nd, new_nd); |
} |
static inline void security_sb_post_pivotroot (struct nameidata *old_nd, |
struct nameidata *new_nd) |
{ |
security_ops->sb_post_pivotroot (old_nd, new_nd); |
} |
static inline int security_inode_alloc (struct inode *inode) |
{ |
return security_ops->inode_alloc_security (inode); |
} |
static inline void security_inode_free (struct inode *inode) |
{ |
security_ops->inode_free_security (inode); |
} |
static inline int security_inode_create (struct inode *dir, |
struct dentry *dentry, |
int mode) |
{ |
return security_ops->inode_create (dir, dentry, mode); |
} |
static inline void security_inode_post_create (struct inode *dir, |
struct dentry *dentry, |
int mode) |
{ |
security_ops->inode_post_create (dir, dentry, mode); |
} |
static inline int security_inode_link (struct dentry *old_dentry, |
struct inode *dir, |
struct dentry *new_dentry) |
{ |
return security_ops->inode_link (old_dentry, dir, new_dentry); |
} |
static inline void security_inode_post_link (struct dentry *old_dentry, |
struct inode *dir, |
struct dentry *new_dentry) |
{ |
security_ops->inode_post_link (old_dentry, dir, new_dentry); |
} |
static inline int security_inode_unlink (struct inode *dir, |
struct dentry *dentry) |
{ |
return security_ops->inode_unlink (dir, dentry); |
} |
static inline int security_inode_symlink (struct inode *dir, |
struct dentry *dentry, |
const char *old_name) |
{ |
return security_ops->inode_symlink (dir, dentry, old_name); |
} |
static inline void security_inode_post_symlink (struct inode *dir, |
struct dentry *dentry, |
const char *old_name) |
{ |
security_ops->inode_post_symlink (dir, dentry, old_name); |
} |
static inline int security_inode_mkdir (struct inode *dir, |
struct dentry *dentry, |
int mode) |
{ |
return security_ops->inode_mkdir (dir, dentry, mode); |
} |
static inline void security_inode_post_mkdir (struct inode *dir, |
struct dentry *dentry, |
int mode) |
{ |
security_ops->inode_post_mkdir (dir, dentry, mode); |
} |
static inline int security_inode_rmdir (struct inode *dir, |
struct dentry *dentry) |
{ |
return security_ops->inode_rmdir (dir, dentry); |
} |
static inline int security_inode_mknod (struct inode *dir, |
struct dentry *dentry, |
int mode, dev_t dev) |
{ |
return security_ops->inode_mknod (dir, dentry, mode, dev); |
} |
static inline void security_inode_post_mknod (struct inode *dir, |
struct dentry *dentry, |
int mode, dev_t dev) |
{ |
security_ops->inode_post_mknod (dir, dentry, mode, dev); |
} |
static inline int security_inode_rename (struct inode *old_dir, |
struct dentry *old_dentry, |
struct inode *new_dir, |
struct dentry *new_dentry) |
{ |
return security_ops->inode_rename (old_dir, old_dentry, |
new_dir, new_dentry); |
} |
static inline void security_inode_post_rename (struct inode *old_dir, |
struct dentry *old_dentry, |
struct inode *new_dir, |
struct dentry *new_dentry) |
{ |
security_ops->inode_post_rename (old_dir, old_dentry, |
new_dir, new_dentry); |
} |
static inline int security_inode_readlink (struct dentry *dentry) |
{ |
return security_ops->inode_readlink (dentry); |
} |
static inline int security_inode_follow_link (struct dentry *dentry, |
struct nameidata *nd) |
{ |
return security_ops->inode_follow_link (dentry, nd); |
} |
static inline int security_inode_permission (struct inode *inode, int mask, |
struct nameidata *nd) |
{ |
return security_ops->inode_permission (inode, mask, nd); |
} |
static inline int security_inode_setattr (struct dentry *dentry, |
struct iattr *attr) |
{ |
return security_ops->inode_setattr (dentry, attr); |
} |
static inline int security_inode_getattr (struct vfsmount *mnt, |
struct dentry *dentry) |
{ |
return security_ops->inode_getattr (mnt, dentry); |
} |
static inline void security_inode_delete (struct inode *inode) |
{ |
security_ops->inode_delete (inode); |
} |
static inline int security_inode_setxattr (struct dentry *dentry, char *name, |
void *value, size_t size, int flags) |
{ |
return security_ops->inode_setxattr (dentry, name, value, size, flags); |
} |
static inline void security_inode_post_setxattr (struct dentry *dentry, char *name, |
void *value, size_t size, int flags) |
{ |
security_ops->inode_post_setxattr (dentry, name, value, size, flags); |
} |
static inline int security_inode_getxattr (struct dentry *dentry, char *name) |
{ |
return security_ops->inode_getxattr (dentry, name); |
} |
static inline int security_inode_listxattr (struct dentry *dentry) |
{ |
return security_ops->inode_listxattr (dentry); |
} |
static inline int security_inode_removexattr (struct dentry *dentry, char *name) |
{ |
return security_ops->inode_removexattr (dentry, name); |
} |
static inline int security_inode_getsecurity(struct dentry *dentry, const char *name, void *buffer, size_t size) |
{ |
return security_ops->inode_getsecurity(dentry, name, buffer, size); |
} |
static inline int security_inode_setsecurity(struct dentry *dentry, const char *name, const void *value, size_t size, int flags) |
{ |
return security_ops->inode_setsecurity(dentry, name, value, size, flags); |
} |
static inline int security_inode_listsecurity(struct dentry *dentry, char *buffer) |
{ |
return security_ops->inode_listsecurity(dentry, buffer); |
} |
static inline int security_file_permission (struct file *file, int mask) |
{ |
return security_ops->file_permission (file, mask); |
} |
static inline int security_file_alloc (struct file *file) |
{ |
return security_ops->file_alloc_security (file); |
} |
static inline void security_file_free (struct file *file) |
{ |
security_ops->file_free_security (file); |
} |
static inline int security_file_ioctl (struct file *file, unsigned int cmd, |
unsigned long arg) |
{ |
return security_ops->file_ioctl (file, cmd, arg); |
} |
static inline int security_file_mmap (struct file *file, unsigned long prot, |
unsigned long flags) |
{ |
return security_ops->file_mmap (file, prot, flags); |
} |
static inline int security_file_mprotect (struct vm_area_struct *vma, |
unsigned long prot) |
{ |
return security_ops->file_mprotect (vma, prot); |
} |
static inline int security_file_lock (struct file *file, unsigned int cmd) |
{ |
return security_ops->file_lock (file, cmd); |
} |
static inline int security_file_fcntl (struct file *file, unsigned int cmd, |
unsigned long arg) |
{ |
return security_ops->file_fcntl (file, cmd, arg); |
} |
static inline int security_file_set_fowner (struct file *file) |
{ |
return security_ops->file_set_fowner (file); |
} |
static inline int security_file_send_sigiotask (struct task_struct *tsk, |
struct fown_struct *fown, |
int fd, int reason) |
{ |
return security_ops->file_send_sigiotask (tsk, fown, fd, reason); |
} |
static inline int security_file_receive (struct file *file) |
{ |
return security_ops->file_receive (file); |
} |
static inline int security_task_create (unsigned long clone_flags) |
{ |
return security_ops->task_create (clone_flags); |
} |
static inline int security_task_alloc (struct task_struct *p) |
{ |
return security_ops->task_alloc_security (p); |
} |
static inline void security_task_free (struct task_struct *p) |
{ |
security_ops->task_free_security (p); |
} |
static inline int security_task_setuid (uid_t id0, uid_t id1, uid_t id2, |
int flags) |
{ |
return security_ops->task_setuid (id0, id1, id2, flags); |
} |
static inline int security_task_post_setuid (uid_t old_ruid, uid_t old_euid, |
uid_t old_suid, int flags) |
{ |
return security_ops->task_post_setuid (old_ruid, old_euid, old_suid, flags); |
} |
static inline int security_task_setgid (gid_t id0, gid_t id1, gid_t id2, |
int flags) |
{ |
return security_ops->task_setgid (id0, id1, id2, flags); |
} |
static inline int security_task_setpgid (struct task_struct *p, pid_t pgid) |
{ |
return security_ops->task_setpgid (p, pgid); |
} |
static inline int security_task_getpgid (struct task_struct *p) |
{ |
return security_ops->task_getpgid (p); |
} |
static inline int security_task_getsid (struct task_struct *p) |
{ |
return security_ops->task_getsid (p); |
} |
static inline int security_task_setgroups (int gidsetsize, gid_t *grouplist) |
{ |
return security_ops->task_setgroups (gidsetsize, grouplist); |
} |
static inline int security_task_setnice (struct task_struct *p, int nice) |
{ |
return security_ops->task_setnice (p, nice); |
} |
static inline int security_task_setrlimit (unsigned int resource, |
struct rlimit *new_rlim) |
{ |
return security_ops->task_setrlimit (resource, new_rlim); |
} |
static inline int security_task_setscheduler (struct task_struct *p, |
int policy, |
struct sched_param *lp) |
{ |
return security_ops->task_setscheduler (p, policy, lp); |
} |
static inline int security_task_getscheduler (struct task_struct *p) |
{ |
return security_ops->task_getscheduler (p); |
} |
static inline int security_task_kill (struct task_struct *p, |
struct siginfo *info, int sig) |
{ |
return security_ops->task_kill (p, info, sig); |
} |
static inline int security_task_wait (struct task_struct *p) |
{ |
return security_ops->task_wait (p); |
} |
static inline int security_task_prctl (int option, unsigned long arg2, |
unsigned long arg3, |
unsigned long arg4, |
unsigned long arg5) |
{ |
return security_ops->task_prctl (option, arg2, arg3, arg4, arg5); |
} |
static inline void security_task_reparent_to_init (struct task_struct *p) |
{ |
security_ops->task_reparent_to_init (p); |
} |
static inline void security_task_to_inode(struct task_struct *p, struct inode *inode) |
{ |
security_ops->task_to_inode(p, inode); |
} |
static inline int security_ipc_permission (struct kern_ipc_perm *ipcp, |
short flag) |
{ |
return security_ops->ipc_permission (ipcp, flag); |
} |
static inline int security_msg_msg_alloc (struct msg_msg * msg) |
{ |
return security_ops->msg_msg_alloc_security (msg); |
} |
static inline void security_msg_msg_free (struct msg_msg * msg) |
{ |
security_ops->msg_msg_free_security(msg); |
} |
static inline int security_msg_queue_alloc (struct msg_queue *msq) |
{ |
return security_ops->msg_queue_alloc_security (msq); |
} |
static inline void security_msg_queue_free (struct msg_queue *msq) |
{ |
security_ops->msg_queue_free_security (msq); |
} |
static inline int security_msg_queue_associate (struct msg_queue * msq, |
int msqflg) |
{ |
return security_ops->msg_queue_associate (msq, msqflg); |
} |
static inline int security_msg_queue_msgctl (struct msg_queue * msq, int cmd) |
{ |
return security_ops->msg_queue_msgctl (msq, cmd); |
} |
static inline int security_msg_queue_msgsnd (struct msg_queue * msq, |
struct msg_msg * msg, int msqflg) |
{ |
return security_ops->msg_queue_msgsnd (msq, msg, msqflg); |
} |
static inline int security_msg_queue_msgrcv (struct msg_queue * msq, |
struct msg_msg * msg, |
struct task_struct * target, |
long type, int mode) |
{ |
return security_ops->msg_queue_msgrcv (msq, msg, target, type, mode); |
} |
static inline int security_shm_alloc (struct shmid_kernel *shp) |
{ |
return security_ops->shm_alloc_security (shp); |
} |
static inline void security_shm_free (struct shmid_kernel *shp) |
{ |
security_ops->shm_free_security (shp); |
} |
static inline int security_shm_associate (struct shmid_kernel * shp, |
int shmflg) |
{ |
return security_ops->shm_associate(shp, shmflg); |
} |
static inline int security_shm_shmctl (struct shmid_kernel * shp, int cmd) |
{ |
return security_ops->shm_shmctl (shp, cmd); |
} |
static inline int security_shm_shmat (struct shmid_kernel * shp, |
char __user *shmaddr, int shmflg) |
{ |
return security_ops->shm_shmat(shp, shmaddr, shmflg); |
} |
static inline int security_sem_alloc (struct sem_array *sma) |
{ |
return security_ops->sem_alloc_security (sma); |
} |
static inline void security_sem_free (struct sem_array *sma) |
{ |
security_ops->sem_free_security (sma); |
} |
static inline int security_sem_associate (struct sem_array * sma, int semflg) |
{ |
return security_ops->sem_associate (sma, semflg); |
} |
static inline int security_sem_semctl (struct sem_array * sma, int cmd) |
{ |
return security_ops->sem_semctl(sma, cmd); |
} |
static inline int security_sem_semop (struct sem_array * sma, |
struct sembuf * sops, unsigned nsops, |
int alter) |
{ |
return security_ops->sem_semop(sma, sops, nsops, alter); |
} |
static inline void security_d_instantiate (struct dentry *dentry, struct inode *inode) |
{ |
security_ops->d_instantiate (dentry, inode); |
} |
static inline int security_getprocattr(struct task_struct *p, char *name, void *value, size_t size) |
{ |
return security_ops->getprocattr(p, name, value, size); |
} |
static inline int security_setprocattr(struct task_struct *p, char *name, void *value, size_t size) |
{ |
return security_ops->setprocattr(p, name, value, size); |
} |
static inline int security_netlink_send(struct sk_buff * skb) |
{ |
return security_ops->netlink_send(skb); |
} |
static inline int security_netlink_recv(struct sk_buff * skb) |
{ |
return security_ops->netlink_recv(skb); |
} |
/* prototypes */ |
extern int security_scaffolding_startup (void); |
extern int register_security (struct security_operations *ops); |
extern int unregister_security (struct security_operations *ops); |
extern int mod_reg_security (const char *name, struct security_operations *ops); |
extern int mod_unreg_security (const char *name, struct security_operations *ops); |
#else /* CONFIG_SECURITY */ |
/* |
* This is the default capabilities functionality. Most of these functions |
* are just stubbed out, but a few must call the proper capable code. |
*/ |
static inline int security_scaffolding_startup (void) |
{ |
return 0; |
} |
static inline int security_ptrace (struct task_struct *parent, struct task_struct * child) |
{ |
return cap_ptrace (parent, child); |
} |
static inline int security_capget (struct task_struct *target, |
kernel_cap_t *effective, |
kernel_cap_t *inheritable, |
kernel_cap_t *permitted) |
{ |
return cap_capget (target, effective, inheritable, permitted); |
} |
static inline int security_capset_check (struct task_struct *target, |
kernel_cap_t *effective, |
kernel_cap_t *inheritable, |
kernel_cap_t *permitted) |
{ |
return cap_capset_check (target, effective, inheritable, permitted); |
} |
static inline void security_capset_set (struct task_struct *target, |
kernel_cap_t *effective, |
kernel_cap_t *inheritable, |
kernel_cap_t *permitted) |
{ |
cap_capset_set (target, effective, inheritable, permitted); |
} |
static inline int security_acct (struct file *file) |
{ |
return 0; |
} |
static inline int security_sysctl(ctl_table * table, int op) |
{ |
return 0; |
} |
static inline int security_quotactl (int cmds, int type, int id, |
struct super_block * sb) |
{ |
return 0; |
} |
static inline int security_quota_on (struct file * file) |
{ |
return 0; |
} |
static inline int security_syslog(int type) |
{ |
return cap_syslog(type); |
} |
static inline int security_vm_enough_memory(long pages) |
{ |
return cap_vm_enough_memory(pages); |
} |
static inline int security_bprm_alloc (struct linux_binprm *bprm) |
{ |
return 0; |
} |
static inline void security_bprm_free (struct linux_binprm *bprm) |
{ } |
static inline void security_bprm_compute_creds (struct linux_binprm *bprm) |
{ |
cap_bprm_compute_creds (bprm); |
} |
static inline int security_bprm_set (struct linux_binprm *bprm) |
{ |
return cap_bprm_set_security (bprm); |
} |
static inline int security_bprm_check (struct linux_binprm *bprm) |
{ |
return 0; |
} |
static inline int security_bprm_secureexec (struct linux_binprm *bprm) |
{ |
return cap_bprm_secureexec(bprm); |
} |
static inline int security_sb_alloc (struct super_block *sb) |
{ |
return 0; |
} |
static inline void security_sb_free (struct super_block *sb) |
{ } |
static inline int security_sb_kern_mount (struct super_block *sb) |
{ |
return 0; |
} |
static inline int security_sb_statfs (struct super_block *sb) |
{ |
return 0; |
} |
static inline int security_sb_mount (char *dev_name, struct nameidata *nd, |
char *type, unsigned long flags, |
void *data) |
{ |
return 0; |
} |
static inline int security_sb_check_sb (struct vfsmount *mnt, |
struct nameidata *nd) |
{ |
return 0; |
} |
static inline int security_sb_umount (struct vfsmount *mnt, int flags) |
{ |
return 0; |
} |
static inline void security_sb_umount_close (struct vfsmount *mnt) |
{ } |
static inline void security_sb_umount_busy (struct vfsmount *mnt) |
{ } |
static inline void security_sb_post_remount (struct vfsmount *mnt, |
unsigned long flags, void *data) |
{ } |
static inline void security_sb_post_mountroot (void) |
{ } |
static inline void security_sb_post_addmount (struct vfsmount *mnt, |
struct nameidata *mountpoint_nd) |
{ } |
static inline int security_sb_pivotroot (struct nameidata *old_nd, |
struct nameidata *new_nd) |
{ |
return 0; |
} |
static inline void security_sb_post_pivotroot (struct nameidata *old_nd, |
struct nameidata *new_nd) |
{ } |
static inline int security_inode_alloc (struct inode *inode) |
{ |
return 0; |
} |
static inline void security_inode_free (struct inode *inode) |
{ } |
static inline int security_inode_create (struct inode *dir, |
struct dentry *dentry, |
int mode) |
{ |
return 0; |
} |
static inline void security_inode_post_create (struct inode *dir, |
struct dentry *dentry, |
int mode) |
{ } |
static inline int security_inode_link (struct dentry *old_dentry, |
struct inode *dir, |
struct dentry *new_dentry) |
{ |
return 0; |
} |
static inline void security_inode_post_link (struct dentry *old_dentry, |
struct inode *dir, |
struct dentry *new_dentry) |
{ } |
static inline int security_inode_unlink (struct inode *dir, |
struct dentry *dentry) |
{ |
return 0; |
} |
static inline int security_inode_symlink (struct inode *dir, |
struct dentry *dentry, |
const char *old_name) |
{ |
return 0; |
} |
static inline void security_inode_post_symlink (struct inode *dir, |
struct dentry *dentry, |
const char *old_name) |
{ } |
static inline int security_inode_mkdir (struct inode *dir, |
struct dentry *dentry, |
int mode) |
{ |
return 0; |
} |
static inline void security_inode_post_mkdir (struct inode *dir, |
struct dentry *dentry, |
int mode) |
{ } |
static inline int security_inode_rmdir (struct inode *dir, |
struct dentry *dentry) |
{ |
return 0; |
} |
static inline int security_inode_mknod (struct inode *dir, |
struct dentry *dentry, |
int mode, dev_t dev) |
{ |
return 0; |
} |
static inline void security_inode_post_mknod (struct inode *dir, |
struct dentry *dentry, |
int mode, dev_t dev) |
{ } |
static inline int security_inode_rename (struct inode *old_dir, |
struct dentry *old_dentry, |
struct inode *new_dir, |
struct dentry *new_dentry) |
{ |
return 0; |
} |
static inline void security_inode_post_rename (struct inode *old_dir, |
struct dentry *old_dentry, |
struct inode *new_dir, |
struct dentry *new_dentry) |
{ } |
static inline int security_inode_readlink (struct dentry *dentry) |
{ |
return 0; |
} |
static inline int security_inode_follow_link (struct dentry *dentry, |
struct nameidata *nd) |
{ |
return 0; |
} |
static inline int security_inode_permission (struct inode *inode, int mask, |
struct nameidata *nd) |
{ |
return 0; |
} |
static inline int security_inode_setattr (struct dentry *dentry, |
struct iattr *attr) |
{ |
return 0; |
} |
static inline int security_inode_getattr (struct vfsmount *mnt, |
struct dentry *dentry) |
{ |
return 0; |
} |
static inline void security_inode_delete (struct inode *inode) |
{ } |
static inline int security_inode_setxattr (struct dentry *dentry, char *name, |
void *value, size_t size, int flags) |
{ |
return 0; |
} |
static inline void security_inode_post_setxattr (struct dentry *dentry, char *name, |
void *value, size_t size, int flags) |
{ } |
static inline int security_inode_getxattr (struct dentry *dentry, char *name) |
{ |
return 0; |
} |
static inline int security_inode_listxattr (struct dentry *dentry) |
{ |
return 0; |
} |
static inline int security_inode_removexattr (struct dentry *dentry, char *name) |
{ |
return 0; |
} |
static inline int security_inode_getsecurity(struct dentry *dentry, const char *name, void *buffer, size_t size) |
{ |
return -EOPNOTSUPP; |
} |
static inline int security_inode_setsecurity(struct dentry *dentry, const char *name, const void *value, size_t size, int flags) |
{ |
return -EOPNOTSUPP; |
} |
static inline int security_inode_listsecurity(struct dentry *dentry, char *buffer) |
{ |
return 0; |
} |
static inline int security_file_permission (struct file *file, int mask) |
{ |
return 0; |
} |
static inline int security_file_alloc (struct file *file) |
{ |
return 0; |
} |
static inline void security_file_free (struct file *file) |
{ } |
static inline int security_file_ioctl (struct file *file, unsigned int cmd, |
unsigned long arg) |
{ |
return 0; |
} |
static inline int security_file_mmap (struct file *file, unsigned long prot, |
unsigned long flags) |
{ |
return 0; |
} |
static inline int security_file_mprotect (struct vm_area_struct *vma, |
unsigned long prot) |
{ |
return 0; |
} |
static inline int security_file_lock (struct file *file, unsigned int cmd) |
{ |
return 0; |
} |
static inline int security_file_fcntl (struct file *file, unsigned int cmd, |
unsigned long arg) |
{ |
return 0; |
} |
static inline int security_file_set_fowner (struct file *file) |
{ |
return 0; |
} |
static inline int security_file_send_sigiotask (struct task_struct *tsk, |
struct fown_struct *fown, |
int fd, int reason) |
{ |
return 0; |
} |
static inline int security_file_receive (struct file *file) |
{ |
return 0; |
} |
static inline int security_task_create (unsigned long clone_flags) |
{ |
return 0; |
} |
static inline int security_task_alloc (struct task_struct *p) |
{ |
return 0; |
} |
static inline void security_task_free (struct task_struct *p) |
{ } |
static inline int security_task_setuid (uid_t id0, uid_t id1, uid_t id2, |
int flags) |
{ |
return 0; |
} |
static inline int security_task_post_setuid (uid_t old_ruid, uid_t old_euid, |
uid_t old_suid, int flags) |
{ |
return cap_task_post_setuid (old_ruid, old_euid, old_suid, flags); |
} |
static inline int security_task_setgid (gid_t id0, gid_t id1, gid_t id2, |
int flags) |
{ |
return 0; |
} |
static inline int security_task_setpgid (struct task_struct *p, pid_t pgid) |
{ |
return 0; |
} |
static inline int security_task_getpgid (struct task_struct *p) |
{ |
return 0; |
} |
static inline int security_task_getsid (struct task_struct *p) |
{ |
return 0; |
} |
static inline int security_task_setgroups (int gidsetsize, gid_t *grouplist) |
{ |
return 0; |
} |
static inline int security_task_setnice (struct task_struct *p, int nice) |
{ |
return 0; |
} |
static inline int security_task_setrlimit (unsigned int resource, |
struct rlimit *new_rlim) |
{ |
return 0; |
} |
static inline int security_task_setscheduler (struct task_struct *p, |
int policy, |
struct sched_param *lp) |
{ |
return 0; |
} |
static inline int security_task_getscheduler (struct task_struct *p) |
{ |
return 0; |
} |
static inline int security_task_kill (struct task_struct *p, |
struct siginfo *info, int sig) |
{ |
return 0; |
} |
static inline int security_task_wait (struct task_struct *p) |
{ |
return 0; |
} |
static inline int security_task_prctl (int option, unsigned long arg2, |
unsigned long arg3, |
unsigned long arg4, |
unsigned long arg5) |
{ |
return 0; |
} |
static inline void security_task_reparent_to_init (struct task_struct *p) |
{ |
cap_task_reparent_to_init (p); |
} |
static inline void security_task_to_inode(struct task_struct *p, struct inode *inode) |
{ } |
static inline int security_ipc_permission (struct kern_ipc_perm *ipcp, |
short flag) |
{ |
return 0; |
} |
static inline int security_msg_msg_alloc (struct msg_msg * msg) |
{ |
return 0; |
} |
static inline void security_msg_msg_free (struct msg_msg * msg) |
{ } |
static inline int security_msg_queue_alloc (struct msg_queue *msq) |
{ |
return 0; |
} |
static inline void security_msg_queue_free (struct msg_queue *msq) |
{ } |
static inline int security_msg_queue_associate (struct msg_queue * msq, |
int msqflg) |
{ |
return 0; |
} |
static inline int security_msg_queue_msgctl (struct msg_queue * msq, int cmd) |
{ |
return 0; |
} |
static inline int security_msg_queue_msgsnd (struct msg_queue * msq, |
struct msg_msg * msg, int msqflg) |
{ |
return 0; |
} |
static inline int security_msg_queue_msgrcv (struct msg_queue * msq, |
struct msg_msg * msg, |
struct task_struct * target, |
long type, int mode) |
{ |
return 0; |
} |
static inline int security_shm_alloc (struct shmid_kernel *shp) |
{ |
return 0; |
} |
static inline void security_shm_free (struct shmid_kernel *shp) |
{ } |
static inline int security_shm_associate (struct shmid_kernel * shp, |
int shmflg) |
{ |
return 0; |
} |
static inline int security_shm_shmctl (struct shmid_kernel * shp, int cmd) |
{ |
return 0; |
} |
static inline int security_shm_shmat (struct shmid_kernel * shp, |
char __user *shmaddr, int shmflg) |
{ |
return 0; |
} |
static inline int security_sem_alloc (struct sem_array *sma) |
{ |
return 0; |
} |
static inline void security_sem_free (struct sem_array *sma) |
{ } |
static inline int security_sem_associate (struct sem_array * sma, int semflg) |
{ |
return 0; |
} |
static inline int security_sem_semctl (struct sem_array * sma, int cmd) |
{ |
return 0; |
} |
static inline int security_sem_semop (struct sem_array * sma, |
struct sembuf * sops, unsigned nsops, |
int alter) |
{ |
return 0; |
} |
static inline void security_d_instantiate (struct dentry *dentry, struct inode *inode) |
{ } |
static inline int security_getprocattr(struct task_struct *p, char *name, void *value, size_t size) |
{ |
return -EINVAL; |
} |
static inline int security_setprocattr(struct task_struct *p, char *name, void *value, size_t size) |
{ |
return -EINVAL; |
} |
/* |
* The netlink capability defaults need to be used inline by default |
* (rather than hooking into the capability module) to reduce overhead |
* in the networking code. |
*/ |
static inline int security_netlink_send (struct sk_buff *skb) |
{ |
return cap_netlink_send (skb); |
} |
static inline int security_netlink_recv (struct sk_buff *skb) |
{ |
return cap_netlink_recv (skb); |
} |
#endif /* CONFIG_SECURITY */ |
#ifdef CONFIG_SECURITY_NETWORK |
static inline int security_unix_stream_connect(struct socket * sock, |
struct socket * other, |
struct sock * newsk) |
{ |
return security_ops->unix_stream_connect(sock, other, newsk); |
} |
static inline int security_unix_may_send(struct socket * sock, |
struct socket * other) |
{ |
return security_ops->unix_may_send(sock, other); |
} |
static inline int security_socket_create (int family, int type, int protocol) |
{ |
return security_ops->socket_create(family, type, protocol); |
} |
static inline void security_socket_post_create(struct socket * sock, |
int family, |
int type, |
int protocol) |
{ |
security_ops->socket_post_create(sock, family, type, protocol); |
} |
static inline int security_socket_bind(struct socket * sock, |
struct sockaddr * address, |
int addrlen) |
{ |
return security_ops->socket_bind(sock, address, addrlen); |
} |
static inline int security_socket_connect(struct socket * sock, |
struct sockaddr * address, |
int addrlen) |
{ |
return security_ops->socket_connect(sock, address, addrlen); |
} |
static inline int security_socket_listen(struct socket * sock, int backlog) |
{ |
return security_ops->socket_listen(sock, backlog); |
} |
static inline int security_socket_accept(struct socket * sock, |
struct socket * newsock) |
{ |
return security_ops->socket_accept(sock, newsock); |
} |
static inline void security_socket_post_accept(struct socket * sock, |
struct socket * newsock) |
{ |
security_ops->socket_post_accept(sock, newsock); |
} |
static inline int security_socket_sendmsg(struct socket * sock, |
struct msghdr * msg, int size) |
{ |
return security_ops->socket_sendmsg(sock, msg, size); |
} |
static inline int security_socket_recvmsg(struct socket * sock, |
struct msghdr * msg, int size, |
int flags) |
{ |
return security_ops->socket_recvmsg(sock, msg, size, flags); |
} |
static inline int security_socket_getsockname(struct socket * sock) |
{ |
return security_ops->socket_getsockname(sock); |
} |
static inline int security_socket_getpeername(struct socket * sock) |
{ |
return security_ops->socket_getpeername(sock); |
} |
static inline int security_socket_getsockopt(struct socket * sock, |
int level, int optname) |
{ |
return security_ops->socket_getsockopt(sock, level, optname); |
} |
static inline int security_socket_setsockopt(struct socket * sock, |
int level, int optname) |
{ |
return security_ops->socket_setsockopt(sock, level, optname); |
} |
static inline int security_socket_shutdown(struct socket * sock, int how) |
{ |
return security_ops->socket_shutdown(sock, how); |
} |
static inline int security_sock_rcv_skb (struct sock * sk, |
struct sk_buff * skb) |
{ |
return security_ops->socket_sock_rcv_skb (sk, skb); |
} |
#else /* CONFIG_SECURITY_NETWORK */ |
static inline int security_unix_stream_connect(struct socket * sock, |
struct socket * other, |
struct sock * newsk) |
{ |
return 0; |
} |
static inline int security_unix_may_send(struct socket * sock, |
struct socket * other) |
{ |
return 0; |
} |
static inline int security_socket_create (int family, int type, int protocol) |
{ |
return 0; |
} |
static inline void security_socket_post_create(struct socket * sock, |
int family, |
int type, |
int protocol) |
{ |
} |
static inline int security_socket_bind(struct socket * sock, |
struct sockaddr * address, |
int addrlen) |
{ |
return 0; |
} |
static inline int security_socket_connect(struct socket * sock, |
struct sockaddr * address, |
int addrlen) |
{ |
return 0; |
} |
static inline int security_socket_listen(struct socket * sock, int backlog) |
{ |
return 0; |
} |
static inline int security_socket_accept(struct socket * sock, |
struct socket * newsock) |
{ |
return 0; |
} |
static inline void security_socket_post_accept(struct socket * sock, |
struct socket * newsock) |
{ |
} |
static inline int security_socket_sendmsg(struct socket * sock, |
struct msghdr * msg, int size) |
{ |
return 0; |
} |
static inline int security_socket_recvmsg(struct socket * sock, |
struct msghdr * msg, int size, |
int flags) |
{ |
return 0; |
} |
static inline int security_socket_getsockname(struct socket * sock) |
{ |
return 0; |
} |
static inline int security_socket_getpeername(struct socket * sock) |
{ |
return 0; |
} |
static inline int security_socket_getsockopt(struct socket * sock, |
int level, int optname) |
{ |
return 0; |
} |
static inline int security_socket_setsockopt(struct socket * sock, |
int level, int optname) |
{ |
return 0; |
} |
static inline int security_socket_shutdown(struct socket * sock, int how) |
{ |
return 0; |
} |
static inline int security_sock_rcv_skb (struct sock * sk, |
struct sk_buff * skb) |
{ |
return 0; |
} |
#endif /* CONFIG_SECURITY_NETWORK */ |
#endif /* ! __LINUX_SECURITY_H */ |
/shark/trunk/drivers/linuxc26/include/linux/pagevec.h |
---|
0,0 → 1,81 |
/* |
* include/linux/pagevec.h |
* |
* In many places it is efficient to batch an operation up against multiple |
* pages. A pagevec is a multipage container which is used for that. |
*/ |
#define PAGEVEC_SIZE 16 |
struct page; |
struct address_space; |
struct pagevec { |
unsigned nr; |
int cold; |
struct page *pages[PAGEVEC_SIZE]; |
}; |
void __pagevec_release(struct pagevec *pvec); |
void __pagevec_release_nonlru(struct pagevec *pvec); |
void __pagevec_free(struct pagevec *pvec); |
void __pagevec_lru_add(struct pagevec *pvec); |
void __pagevec_lru_add_active(struct pagevec *pvec); |
void pagevec_strip(struct pagevec *pvec); |
unsigned int pagevec_lookup(struct pagevec *pvec, struct address_space *mapping, |
pgoff_t start, unsigned int nr_pages); |
static inline void pagevec_init(struct pagevec *pvec, int cold) |
{ |
pvec->nr = 0; |
pvec->cold = cold; |
} |
static inline void pagevec_reinit(struct pagevec *pvec) |
{ |
pvec->nr = 0; |
} |
static inline unsigned pagevec_count(struct pagevec *pvec) |
{ |
return pvec->nr; |
} |
static inline unsigned pagevec_space(struct pagevec *pvec) |
{ |
return PAGEVEC_SIZE - pvec->nr; |
} |
/* |
* Add a page to a pagevec. Returns the number of slots still available. |
*/ |
static inline unsigned pagevec_add(struct pagevec *pvec, struct page *page) |
{ |
pvec->pages[pvec->nr++] = page; |
return pagevec_space(pvec); |
} |
static inline void pagevec_release(struct pagevec *pvec) |
{ |
if (pagevec_count(pvec)) |
__pagevec_release(pvec); |
} |
static inline void pagevec_release_nonlru(struct pagevec *pvec) |
{ |
if (pagevec_count(pvec)) |
__pagevec_release_nonlru(pvec); |
} |
static inline void pagevec_free(struct pagevec *pvec) |
{ |
if (pagevec_count(pvec)) |
__pagevec_free(pvec); |
} |
static inline void pagevec_lru_add(struct pagevec *pvec) |
{ |
if (pagevec_count(pvec)) |
__pagevec_lru_add(pvec); |
} |
/shark/trunk/drivers/linuxc26/include/linux/xfrm.h |
---|
0,0 → 1,233 |
#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 |
{ |
__u32 a4; |
__u32 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; |
__u32 spi; |
__u8 proto; |
}; |
/* Selector, used as selector both on policy rules (SPD) and SAs. */ |
struct xfrm_selector |
{ |
xfrm_address_t daddr; |
xfrm_address_t saddr; |
__u16 dport; |
__u16 dport_mask; |
__u16 sport; |
__u16 sport_mask; |
__u16 family; |
__u8 prefixlen_d; |
__u8 prefixlen_s; |
__u8 proto; |
int ifindex; |
uid_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; |
}; |
struct xfrm_algo { |
char alg_name[64]; |
int alg_key_len; /* in bits */ |
char alg_key[0]; |
}; |
struct xfrm_stats { |
__u32 replay_window; |
__u32 replay; |
__u32 integrity_failed; |
}; |
enum |
{ |
XFRM_POLICY_IN = 0, |
XFRM_POLICY_OUT = 1, |
XFRM_POLICY_FWD = 2, |
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 */ |
}; |
/* Netlink configuration messages. */ |
#define XFRM_MSG_BASE 0x10 |
#define XFRM_MSG_NEWSA (XFRM_MSG_BASE + 0) |
#define XFRM_MSG_DELSA (XFRM_MSG_BASE + 1) |
#define XFRM_MSG_GETSA (XFRM_MSG_BASE + 2) |
#define XFRM_MSG_NEWPOLICY (XFRM_MSG_BASE + 3) |
#define XFRM_MSG_DELPOLICY (XFRM_MSG_BASE + 4) |
#define XFRM_MSG_GETPOLICY (XFRM_MSG_BASE + 5) |
#define XFRM_MSG_ALLOCSPI (XFRM_MSG_BASE + 6) |
#define XFRM_MSG_ACQUIRE (XFRM_MSG_BASE + 7) |
#define XFRM_MSG_EXPIRE (XFRM_MSG_BASE + 8) |
#define XFRM_MSG_UPDPOLICY (XFRM_MSG_BASE + 9) |
#define XFRM_MSG_UPDSA (XFRM_MSG_BASE + 10) |
#define XFRM_MSG_POLEXPIRE (XFRM_MSG_BASE + 11) |
#define XFRM_MSG_MAX (XFRM_MSG_POLEXPIRE+1) |
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; |
__u16 encap_sport; |
__u16 encap_dport; |
xfrm_address_t encap_oa; |
}; |
/* 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 */ |
#define XFRMA_MAX XFRMA_TMPL |
}; |
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; /* 0=transport,1=tunnel */ |
__u8 replay_window; |
__u8 flags; |
#define XFRM_STATE_NOECN 1 |
}; |
struct xfrm_usersa_id { |
xfrm_address_t daddr; |
__u32 spi; |
__u16 family; |
__u8 proto; |
}; |
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 */ |
__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; |
}; |
#define XFRMGRP_ACQUIRE 1 |
#define XFRMGRP_EXPIRE 2 |
#endif /* _LINUX_XFRM_H */ |
/shark/trunk/drivers/linuxc26/include/linux/zconf.h |
---|
0,0 → 1,45 |
/* zconf.h -- configuration of the zlib compression library |
* Copyright (C) 1995-1998 Jean-loup Gailly. |
* For conditions of distribution and use, see copyright notice in zlib.h |
*/ |
/* @(#) $Id: zconf.h,v 1.1 2004-01-28 15:27:04 giacomo Exp $ */ |
#ifndef _ZCONF_H |
#define _ZCONF_H |
/* The memory requirements for deflate are (in bytes): |
(1 << (windowBits+2)) + (1 << (memLevel+9)) |
that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) |
plus a few kilobytes for small objects. For example, if you want to reduce |
the default memory requirements from 256K to 128K, compile with |
make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" |
Of course this will generally degrade compression (there's no free lunch). |
The memory requirements for inflate are (in bytes) 1 << windowBits |
that is, 32K for windowBits=15 (default value) plus a few kilobytes |
for small objects. |
*/ |
/* Maximum value for memLevel in deflateInit2 */ |
#ifndef MAX_MEM_LEVEL |
# define MAX_MEM_LEVEL 8 |
#endif |
/* Maximum value for windowBits in deflateInit2 and inflateInit2. |
* WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files |
* created by gzip. (Files created by minigzip can still be extracted by |
* gzip.) |
*/ |
#ifndef MAX_WBITS |
# define MAX_WBITS 15 /* 32K LZ77 window */ |
#endif |
/* Type declarations */ |
typedef unsigned char Byte; /* 8 bits */ |
typedef unsigned int uInt; /* 16 bits or more */ |
typedef unsigned long uLong; /* 32 bits or more */ |
typedef void *voidp; |
#endif /* _ZCONF_H */ |
/shark/trunk/drivers/linuxc26/include/linux/if_strip.h |
---|
0,0 → 1,25 |
/* |
* if_strip.h -- |
* |
* Definitions for the STRIP interface |
* |
* Copyright 1996 The Board of Trustees of The Leland Stanford |
* Junior University. All Rights Reserved. |
* |
* 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 appear in all copies. Stanford University |
* makes no representations about the suitability of this |
* software for any purpose. It is provided "as is" without |
* express or implied warranty. |
*/ |
#ifndef __LINUX_STRIP_H |
#define __LINUX_STRIP_H |
typedef struct { |
__u8 c[6]; |
} MetricomAddress; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/smb_fs_i.h |
---|
0,0 → 1,39 |
/* |
* smb_fs_i.h |
* |
* Copyright (C) 1995 by Paal-Kr. Engstad and Volker Lendecke |
* Copyright (C) 1997 by Volker Lendecke |
* |
*/ |
#ifndef _LINUX_SMB_FS_I |
#define _LINUX_SMB_FS_I |
#ifdef __KERNEL__ |
#include <linux/types.h> |
#include <linux/fs.h> |
/* |
* smb fs inode data (in memory only) |
*/ |
struct smb_inode_info { |
/* |
* file handles are local to a connection. A file is open if |
* (open == generation). |
*/ |
unsigned int open; /* open generation */ |
__u16 fileid; /* What id to handle a file with? */ |
__u16 attr; /* Attribute fields, DOS value */ |
__u16 access; /* Access mode */ |
__u16 flags; |
unsigned long oldmtime; /* last time refreshed */ |
unsigned long closed; /* timestamp when closed */ |
unsigned openers; /* number of fileid users */ |
struct inode vfs_inode; /* must be at the end */ |
}; |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/netfilter_ddp.h |
---|
0,0 → 1,14 |
#ifndef __LINUX_DDP_NETFILTER_H |
#define __LINUX_DDP_NETFILTER_H |
/* DDP-specific defines for netfilter. Complete me sometime. |
* (C)1998 Rusty Russell -- This code is GPL. |
*/ |
#include <linux/netfilter.h> |
/* Appletalk hooks */ |
#define NF_DDP_INPUT 0 |
#define NF_DDP_FORWARD 1 |
#define NF_DDP_OUTPUT 2 |
#endif /*__LINUX_DDP_NETFILTER_H*/ |
/shark/trunk/drivers/linuxc26/include/linux/aio_abi.h |
---|
0,0 → 1,92 |
/* linux/aio_abi.h |
* |
* Copyright 2000,2001,2002 Red Hat. |
* |
* Written by Benjamin LaHaise <bcrl@redhat.com> |
* |
* 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 <asm/byteorder.h> |
typedef unsigned long 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, |
}; |
/* 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 *) */ |
__u64 aio_reserved3; |
}; /* 64 bytes */ |
#undef IFBIG |
#undef IFLITTLE |
#endif /* __LINUX__AIO_ABI_H */ |
/shark/trunk/drivers/linuxc26/include/linux/atmarp.h |
---|
0,0 → 1,43 |
/* 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 |
#ifdef __KERNEL__ |
#include <linux/types.h> |
#endif |
#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) */ |
uint32_t ip; /* IP address (act_need only) */ |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/if_fddi.h |
---|
0,0 → 1,223 |
/* |
* 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.1 09/16/96 |
* |
* 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@redhat.com> |
* 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 _LINUX_IF_FDDI_H |
#define _LINUX_IF_FDDI_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 */ |
__u16 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)); |
/* Define FDDI statistics structure */ |
struct fddi_statistics |
{ |
__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 transmit_collision; /* always 0 for FDDI */ |
/* 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; |
/* Detailed FDDI statistics. Adopted from RFC 1512 */ |
__u8 smt_station_id[8]; |
__u32 smt_op_version_id; |
__u32 smt_hi_version_id; |
__u32 smt_lo_version_id; |
__u8 smt_user_data[32]; |
__u32 smt_mib_version_id; |
__u32 smt_mac_cts; |
__u32 smt_non_master_cts; |
__u32 smt_master_cts; |
__u32 smt_available_paths; |
__u32 smt_config_capabilities; |
__u32 smt_config_policy; |
__u32 smt_connection_policy; |
__u32 smt_t_notify; |
__u32 smt_stat_rpt_policy; |
__u32 smt_trace_max_expiration; |
__u32 smt_bypass_present; |
__u32 smt_ecm_state; |
__u32 smt_cf_state; |
__u32 smt_remote_disconnect_flag; |
__u32 smt_station_status; |
__u32 smt_peer_wrap_flag; |
__u32 smt_time_stamp; |
__u32 smt_transition_time_stamp; |
__u32 mac_frame_status_functions; |
__u32 mac_t_max_capability; |
__u32 mac_tvx_capability; |
__u32 mac_available_paths; |
__u32 mac_current_path; |
__u8 mac_upstream_nbr[FDDI_K_ALEN]; |
__u8 mac_downstream_nbr[FDDI_K_ALEN]; |
__u8 mac_old_upstream_nbr[FDDI_K_ALEN]; |
__u8 mac_old_downstream_nbr[FDDI_K_ALEN]; |
__u32 mac_dup_address_test; |
__u32 mac_requested_paths; |
__u32 mac_downstream_port_type; |
__u8 mac_smt_address[FDDI_K_ALEN]; |
__u32 mac_t_req; |
__u32 mac_t_neg; |
__u32 mac_t_max; |
__u32 mac_tvx_value; |
__u32 mac_frame_cts; |
__u32 mac_copied_cts; |
__u32 mac_transmit_cts; |
__u32 mac_error_cts; |
__u32 mac_lost_cts; |
__u32 mac_frame_error_threshold; |
__u32 mac_frame_error_ratio; |
__u32 mac_rmt_state; |
__u32 mac_da_flag; |
__u32 mac_una_da_flag; |
__u32 mac_frame_error_flag; |
__u32 mac_ma_unitdata_available; |
__u32 mac_hardware_present; |
__u32 mac_ma_unitdata_enable; |
__u32 path_tvx_lower_bound; |
__u32 path_t_max_lower_bound; |
__u32 path_max_t_req; |
__u32 path_configuration[8]; |
__u32 port_my_type[2]; |
__u32 port_neighbor_type[2]; |
__u32 port_connection_policies[2]; |
__u32 port_mac_indicated[2]; |
__u32 port_current_path[2]; |
__u8 port_requested_paths[3*2]; |
__u32 port_mac_placement[2]; |
__u32 port_available_paths[2]; |
__u32 port_pmd_class[2]; |
__u32 port_connection_capabilities[2]; |
__u32 port_bs_flag[2]; |
__u32 port_lct_fail_cts[2]; |
__u32 port_ler_estimate[2]; |
__u32 port_lem_reject_cts[2]; |
__u32 port_lem_cts[2]; |
__u32 port_ler_cutoff[2]; |
__u32 port_ler_alarm[2]; |
__u32 port_connect_state[2]; |
__u32 port_pcm_state[2]; |
__u32 port_pc_withhold[2]; |
__u32 port_ler_flag[2]; |
__u32 port_hardware_present[2]; |
}; |
#endif /* _LINUX_IF_FDDI_H */ |
/shark/trunk/drivers/linuxc26/include/linux/seq_file.h |
---|
0,0 → 1,72 |
#ifndef _LINUX_SEQ_FILE_H |
#define _LINUX_SEQ_FILE_H |
#ifdef __KERNEL__ |
#include <linux/types.h> |
#include <linux/string.h> |
#include <asm/semaphore.h> |
struct seq_operations; |
struct file; |
struct vfsmount; |
struct dentry; |
struct inode; |
struct seq_file { |
char *buf; |
size_t size; |
size_t from; |
size_t count; |
loff_t index; |
struct semaphore sem; |
struct seq_operations *op; |
void *private; |
}; |
struct seq_operations { |
void * (*start) (struct seq_file *m, loff_t *pos); |
void (*stop) (struct seq_file *m, void *v); |
void * (*next) (struct seq_file *m, void *v, loff_t *pos); |
int (*show) (struct seq_file *m, void *v); |
}; |
int seq_open(struct file *, struct seq_operations *); |
ssize_t seq_read(struct file *, char __user *, size_t, loff_t *); |
loff_t seq_lseek(struct file *, loff_t, int); |
int seq_release(struct inode *, struct file *); |
int seq_escape(struct seq_file *, const char *, const char *); |
static inline int seq_putc(struct seq_file *m, char c) |
{ |
if (m->count < m->size) { |
m->buf[m->count++] = c; |
return 0; |
} |
return -1; |
} |
static inline int seq_puts(struct seq_file *m, const char *s) |
{ |
int len = strlen(s); |
if (m->count + len < m->size) { |
memcpy(m->buf + m->count, s, len); |
m->count += len; |
return 0; |
} |
m->count = m->size; |
return -1; |
} |
int seq_printf(struct seq_file *, const char *, ...) |
__attribute__ ((format (printf,2,3))); |
int seq_path(struct seq_file *, struct vfsmount *, struct dentry *, char *); |
int single_open(struct file *, int (*)(struct seq_file *, void *), void *); |
int single_release(struct inode *, struct file *); |
int seq_release_private(struct inode *, struct file *); |
#define SEQ_START_TOKEN ((void *)1) |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/coda_proc.h |
---|
0,0 → 1,97 |
/* |
* coda_statis.h |
* |
* CODA operation statistics |
* |
* (c) March, 1998 |
* by Michihiro Kuramochi, Zhenyu Xia and Zhanyong Wan |
* zhanyong.wan@yale.edu |
* |
*/ |
#ifndef _CODA_PROC_H |
#define _CODA_PROC_H |
void coda_sysctl_init(void); |
void coda_sysctl_clean(void); |
#include <linux/sysctl.h> |
#include <linux/coda_fs_i.h> |
#include <linux/coda.h> |
/* these four files are presented to show the result of the statistics: |
* |
* /proc/fs/coda/vfs_stats |
* cache_inv_stats |
* |
* these four files are presented to reset the statistics to 0: |
* |
* /proc/sys/coda/vfs_stats |
* cache_inv_stats |
*/ |
/* VFS operation statistics */ |
struct coda_vfs_stats |
{ |
/* file operations */ |
int open; |
int flush; |
int release; |
int fsync; |
/* dir operations */ |
int readdir; |
/* inode operations */ |
int create; |
int lookup; |
int link; |
int unlink; |
int symlink; |
int mkdir; |
int rmdir; |
int rename; |
int permission; |
/* symlink operatoins*/ |
int follow_link; |
int readlink; |
}; |
/* cache invalidation statistics */ |
struct coda_cache_inv_stats |
{ |
int flush; |
int purge_user; |
int zap_dir; |
int zap_file; |
int zap_vnode; |
int purge_fid; |
int replace; |
}; |
/* these global variables hold the actual statistics data */ |
extern struct coda_vfs_stats coda_vfs_stat; |
extern struct coda_cache_inv_stats coda_cache_inv_stat; |
/* reset statistics to 0 */ |
void reset_coda_vfs_stats( void ); |
void reset_coda_cache_inv_stats( void ); |
/* like coda_dointvec, these functions are to be registered in the ctl_table |
* data structure for /proc/sys/... files |
*/ |
int do_reset_coda_vfs_stats( ctl_table * table, int write, struct file * filp, |
void * buffer, size_t * lenp ); |
int do_reset_coda_cache_inv_stats( ctl_table * table, int write, |
struct file * filp, void * buffer, |
size_t * lenp ); |
/* these functions are called to form the content of /proc/fs/coda/... files */ |
int coda_vfs_stats_get_info( char * buffer, char ** start, off_t offset, |
int length); |
int coda_cache_inv_stats_get_info( char * buffer, char ** start, off_t offset, |
int length); |
#endif /* _CODA_PROC_H */ |
/shark/trunk/drivers/linuxc26/include/linux/cd1400.h |
---|
0,0 → 1,292 |
/*****************************************************************************/ |
/* |
* cd1400.h -- cd1400 UART hardware info. |
* |
* Copyright (C) 1996-1998 Stallion Technologies (support@stallion.oz.au). |
* Copyright (C) 1994-1996 Greg Ungerer. |
* |
* 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 _CD1400_H |
#define _CD1400_H |
/*****************************************************************************/ |
/* |
* Define the number of async ports per cd1400 uart chip. |
*/ |
#define CD1400_PORTS 4 |
/* |
* Define the cd1400 uarts internal FIFO sizes. |
*/ |
#define CD1400_TXFIFOSIZE 12 |
#define CD1400_RXFIFOSIZE 12 |
/* |
* Local RX FIFO thresh hold level. Also define the RTS thresh hold |
* based on the RX thresh hold. |
*/ |
#define FIFO_RXTHRESHOLD 6 |
#define FIFO_RTSTHRESHOLD 7 |
/*****************************************************************************/ |
/* |
* Define the cd1400 register addresses. These are all the valid |
* registers with the cd1400. Some are global, some virtual, some |
* per port. |
*/ |
#define GFRCR 0x40 |
#define CAR 0x68 |
#define GCR 0x4b |
#define SVRR 0x67 |
#define RICR 0x44 |
#define TICR 0x45 |
#define MICR 0x46 |
#define RIR 0x6b |
#define TIR 0x6a |
#define MIR 0x69 |
#define PPR 0x7e |
#define RIVR 0x43 |
#define TIVR 0x42 |
#define MIVR 0x41 |
#define TDR 0x63 |
#define RDSR 0x62 |
#define MISR 0x4c |
#define EOSRR 0x60 |
#define LIVR 0x18 |
#define CCR 0x05 |
#define SRER 0x06 |
#define COR1 0x08 |
#define COR2 0x09 |
#define COR3 0x0a |
#define COR4 0x1e |
#define COR5 0x1f |
#define CCSR 0x0b |
#define RDCR 0x0e |
#define SCHR1 0x1a |
#define SCHR2 0x1b |
#define SCHR3 0x1c |
#define SCHR4 0x1d |
#define SCRL 0x22 |
#define SCRH 0x23 |
#define LNC 0x24 |
#define MCOR1 0x15 |
#define MCOR2 0x16 |
#define RTPR 0x21 |
#define MSVR1 0x6c |
#define MSVR2 0x6d |
#define PSVR 0x6f |
#define RBPR 0x78 |
#define RCOR 0x7c |
#define TBPR 0x72 |
#define TCOR 0x76 |
/*****************************************************************************/ |
/* |
* Define the set of baud rate clock divisors. |
*/ |
#define CD1400_CLK0 8 |
#define CD1400_CLK1 32 |
#define CD1400_CLK2 128 |
#define CD1400_CLK3 512 |
#define CD1400_CLK4 2048 |
#define CD1400_NUMCLKS 5 |
/*****************************************************************************/ |
/* |
* Define the clock pre-scalar value to be a 5 ms clock. This should be |
* OK for now. It would probably be better to make it 10 ms, but we |
* can't fit that divisor into 8 bits! |
*/ |
#define PPR_SCALAR 244 |
/*****************************************************************************/ |
/* |
* Define values used to set character size options. |
*/ |
#define COR1_CHL5 0x00 |
#define COR1_CHL6 0x01 |
#define COR1_CHL7 0x02 |
#define COR1_CHL8 0x03 |
/* |
* Define values used to set the number of stop bits. |
*/ |
#define COR1_STOP1 0x00 |
#define COR1_STOP15 0x04 |
#define COR1_STOP2 0x08 |
/* |
* Define values used to set the parity scheme in use. |
*/ |
#define COR1_PARNONE 0x00 |
#define COR1_PARFORCE 0x20 |
#define COR1_PARENB 0x40 |
#define COR1_PARIGNORE 0x10 |
#define COR1_PARODD 0x80 |
#define COR1_PAREVEN 0x00 |
#define COR2_IXM 0x80 |
#define COR2_TXIBE 0x40 |
#define COR2_ETC 0x20 |
#define COR2_LLM 0x10 |
#define COR2_RLM 0x08 |
#define COR2_RTSAO 0x04 |
#define COR2_CTSAE 0x02 |
#define COR3_SCDRNG 0x80 |
#define COR3_SCD34 0x40 |
#define COR3_FCT 0x20 |
#define COR3_SCD12 0x10 |
/* |
* Define values used by COR4. |
*/ |
#define COR4_BRKINT 0x08 |
#define COR4_IGNBRK 0x18 |
/*****************************************************************************/ |
/* |
* Define the modem control register values. |
* Note that the actual hardware is a little different to the conventional |
* pin names on the cd1400. |
*/ |
#define MSVR1_DTR 0x01 |
#define MSVR1_DSR 0x10 |
#define MSVR1_RI 0x20 |
#define MSVR1_CTS 0x40 |
#define MSVR1_DCD 0x80 |
#define MSVR2_RTS 0x02 |
#define MSVR2_DSR 0x10 |
#define MSVR2_RI 0x20 |
#define MSVR2_CTS 0x40 |
#define MSVR2_DCD 0x80 |
#define MCOR1_DCD 0x80 |
#define MCOR1_CTS 0x40 |
#define MCOR1_RI 0x20 |
#define MCOR1_DSR 0x10 |
#define MCOR2_DCD 0x80 |
#define MCOR2_CTS 0x40 |
#define MCOR2_RI 0x20 |
#define MCOR2_DSR 0x10 |
/*****************************************************************************/ |
/* |
* Define the bits used with the service (interrupt) enable register. |
*/ |
#define SRER_NNDT 0x01 |
#define SRER_TXEMPTY 0x02 |
#define SRER_TXDATA 0x04 |
#define SRER_RXDATA 0x10 |
#define SRER_MODEM 0x80 |
/*****************************************************************************/ |
/* |
* Define operational commands for the command register. |
*/ |
#define CCR_RESET 0x80 |
#define CCR_CORCHANGE 0x4e |
#define CCR_SENDCH 0x20 |
#define CCR_CHANCTRL 0x10 |
#define CCR_TXENABLE (CCR_CHANCTRL | 0x08) |
#define CCR_TXDISABLE (CCR_CHANCTRL | 0x04) |
#define CCR_RXENABLE (CCR_CHANCTRL | 0x02) |
#define CCR_RXDISABLE (CCR_CHANCTRL | 0x01) |
#define CCR_SENDSCHR1 (CCR_SENDCH | 0x01) |
#define CCR_SENDSCHR2 (CCR_SENDCH | 0x02) |
#define CCR_SENDSCHR3 (CCR_SENDCH | 0x03) |
#define CCR_SENDSCHR4 (CCR_SENDCH | 0x04) |
#define CCR_RESETCHAN (CCR_RESET | 0x00) |
#define CCR_RESETFULL (CCR_RESET | 0x01) |
#define CCR_TXFLUSHFIFO (CCR_RESET | 0x02) |
#define CCR_MAXWAIT 10000 |
/*****************************************************************************/ |
/* |
* Define the valid acknowledgement types (for hw ack cycle). |
*/ |
#define ACK_TYPMASK 0x07 |
#define ACK_TYPTX 0x02 |
#define ACK_TYPMDM 0x01 |
#define ACK_TYPRXGOOD 0x03 |
#define ACK_TYPRXBAD 0x07 |
#define SVRR_RX 0x01 |
#define SVRR_TX 0x02 |
#define SVRR_MDM 0x04 |
#define ST_OVERRUN 0x01 |
#define ST_FRAMING 0x02 |
#define ST_PARITY 0x04 |
#define ST_BREAK 0x08 |
#define ST_SCHAR1 0x10 |
#define ST_SCHAR2 0x20 |
#define ST_SCHAR3 0x30 |
#define ST_SCHAR4 0x40 |
#define ST_RANGE 0x70 |
#define ST_SCHARMASK 0x70 |
#define ST_TIMEOUT 0x80 |
#define MISR_DCD 0x80 |
#define MISR_CTS 0x40 |
#define MISR_RI 0x20 |
#define MISR_DSR 0x10 |
/*****************************************************************************/ |
/* |
* Defines for the CCSR status register. |
*/ |
#define CCSR_RXENABLED 0x80 |
#define CCSR_RXFLOWON 0x40 |
#define CCSR_RXFLOWOFF 0x20 |
#define CCSR_TXENABLED 0x08 |
#define CCSR_TXFLOWON 0x04 |
#define CCSR_TXFLOWOFF 0x02 |
/*****************************************************************************/ |
/* |
* Define the embedded commands. |
*/ |
#define ETC_CMD 0x00 |
#define ETC_STARTBREAK 0x81 |
#define ETC_DELAY 0x82 |
#define ETC_STOPBREAK 0x83 |
/*****************************************************************************/ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/mpp.h |
---|
0,0 → 1,18 |
#ifndef _LINUX_MPP_H |
#define _LINUX_MPP_H |
/* |
* Definitions related to Massively Parallel Processing support. |
*/ |
/* All mpp implementations must supply these functions */ |
extern void mpp_init(void); |
extern void mpp_hw_init(void); |
extern void mpp_procfs_init(void); |
extern int mpp_num_cells(void); |
extern int mpp_cid(void); |
extern int get_mppinfo(char *buffer); |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/isdn.h |
---|
0,0 → 1,407 |
/* Linux ISDN subsystem, main header |
* |
* 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) |
* 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 __ISDN_H__ |
#define __ISDN_H__ |
#include <linux/ioctl.h> |
#include <linux/isdn/fsm.h> |
#ifdef CONFIG_COBALT_MICRO_SERVER |
/* Save memory */ |
#define ISDN_MAX_DRIVERS 2 |
#define ISDN_MAX_CHANNELS 8 |
#else |
#define ISDN_MAX_DRIVERS 32 |
#define ISDN_MAX_CHANNELS 64 |
#endif |
/* 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_NR 8 |
/* 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) |
#ifdef __KERNEL__ |
#include <linux/config.h> |
#include <linux/errno.h> |
#include <linux/fs.h> |
#include <linux/major.h> |
#include <asm/io.h> |
#include <linux/kernel.h> |
#include <linux/signal.h> |
#include <linux/slab.h> |
#include <linux/timer.h> |
#include <linux/wait.h> |
#include <linux/tty.h> |
#include <linux/tty_flip.h> |
#include <linux/serial_reg.h> |
#include <linux/fcntl.h> |
#include <linux/types.h> |
#include <linux/interrupt.h> |
#include <linux/ip.h> |
#include <linux/in.h> |
#include <linux/netdevice.h> |
#include <linux/etherdevice.h> |
#include <linux/skbuff.h> |
#include <linux/tcp.h> |
#define ISDN_TTY_MAJOR 43 |
#define ISDN_TTYAUX_MAJOR 44 |
#define ISDN_MAJOR 45 |
/* The minor-devicenumbers for Channel 0 and 1 are used as arguments for |
* physical Channel-Mapping, so they MUST NOT be changed without changing |
* the correspondent code in isdn.c |
*/ |
#define ISDN_MINOR_CTRL 64 |
#define ISDN_MINOR_CTRLMAX (64 + (ISDN_MAX_CHANNELS-1)) |
#define ISDN_MINOR_PPP 128 |
#define ISDN_MINOR_PPPMAX (128 + (ISDN_MAX_CHANNELS-1)) |
#define ISDN_MINOR_STATUS 255 |
#ifdef CONFIG_ISDN_PPP |
#ifdef CONFIG_ISDN_PPP_VJ |
# include <net/slhc_vj.h> |
#endif |
#include <linux/ppp_defs.h> |
#include <linux/if_ppp.h> |
#include <linux/if_pppvar.h> |
#include <linux/isdn_ppp.h> |
#endif |
#ifdef CONFIG_ISDN_X25 |
# include <linux/concap.h> |
#endif |
#include <linux/isdnif.h> |
#define ISDN_DRVIOCTL_MASK 0x7f /* Mask for Device-ioctl */ |
/* Until now unused */ |
#define ISDN_SERVICE_VOICE 1 |
#define ISDN_SERVICE_AB 1<<1 |
#define ISDN_SERVICE_X21 1<<2 |
#define ISDN_SERVICE_G4 1<<3 |
#define ISDN_SERVICE_BTX 1<<4 |
#define ISDN_SERVICE_DFUE 1<<5 |
#define ISDN_SERVICE_X25 1<<6 |
#define ISDN_SERVICE_TTX 1<<7 |
#define ISDN_SERVICE_MIXED 1<<8 |
#define ISDN_SERVICE_FW 1<<9 |
#define ISDN_SERVICE_GTEL 1<<10 |
#define ISDN_SERVICE_BTXN 1<<11 |
#define ISDN_SERVICE_BTEL 1<<12 |
/* Macros checking plain usage */ |
#define USG_NONE(x) ((x & ISDN_USAGE_MASK)==ISDN_USAGE_NONE) |
#define USG_RAW(x) ((x & ISDN_USAGE_MASK)==ISDN_USAGE_RAW) |
#define USG_MODEM(x) ((x & ISDN_USAGE_MASK)==ISDN_USAGE_MODEM) |
#define USG_VOICE(x) ((x & ISDN_USAGE_MASK)==ISDN_USAGE_VOICE) |
#define USG_NET(x) ((x & ISDN_USAGE_MASK)==ISDN_USAGE_NET) |
#define USG_FAX(x) ((x & ISDN_USAGE_MASK)==ISDN_USAGE_FAX) |
#define USG_OUTGOING(x) ((x & ISDN_USAGE_OUTGOING)==ISDN_USAGE_OUTGOING) |
#define USG_MODEMORVOICE(x) (((x & ISDN_USAGE_MASK)==ISDN_USAGE_MODEM) || \ |
((x & ISDN_USAGE_MASK)==ISDN_USAGE_VOICE) ) |
/* GLOBAL_FLAGS */ |
#define ISDN_GLOBAL_STOPPED 1 |
/*======================= Start of ISDN-tty stuff ===========================*/ |
#define ISDN_ASYNC_MAGIC 0x49344C01 /* for paranoia-checking */ |
#define ISDN_ASYNC_INITIALIZED 0x80000000 /* port was initialized */ |
#define ISDN_ASYNC_CALLOUT_ACTIVE 0x40000000 /* Call out device active */ |
#define ISDN_ASYNC_NORMAL_ACTIVE 0x20000000 /* Normal device active */ |
#define ISDN_ASYNC_CLOSING 0x08000000 /* Serial port is closing */ |
#define ISDN_ASYNC_CTS_FLOW 0x04000000 /* Do CTS flow control */ |
#define ISDN_ASYNC_CHECK_CD 0x02000000 /* i.e., CLOCAL */ |
#define ISDN_ASYNC_HUP_NOTIFY 0x0001 /* Notify tty on hangups/closes */ |
#define ISDN_ASYNC_SESSION_LOCKOUT 0x0100 /* Lock cua opens on session */ |
#define ISDN_ASYNC_PGRP_LOCKOUT 0x0200 /* Lock cua opens on pgrp */ |
#define ISDN_ASYNC_CALLOUT_NOHUP 0x0400 /* No hangup for cui */ |
#define ISDN_ASYNC_SPLIT_TERMIOS 0x0008 /* Sep. termios for dialin/out */ |
#define ISDN_SERIAL_XMIT_SIZE 1024 /* Default bufsize for write */ |
#define ISDN_SERIAL_XMIT_MAX 4000 /* Maximum bufsize for write */ |
#ifdef CONFIG_ISDN_AUDIO |
/* For using sk_buffs with audio we need some private variables |
* within each sk_buff. For this purpose, we declare a struct here, |
* and put it always at skb->head. A few macros help accessing the |
* variables. Of course, we need to check skb_headroom prior to |
* any access. |
*/ |
typedef struct _isdnaudio_header { |
unsigned short dle_count; |
unsigned char lock; |
} isdnaudio_header; |
#define ISDN_AUDIO_SKB_DLECOUNT(skb) (((isdnaudio_header*)skb->head)->dle_count) |
#define ISDN_AUDIO_SKB_LOCK(skb) (((isdnaudio_header*)skb->head)->lock) |
#endif |
/* Private data of AT-command-interpreter */ |
typedef struct atemu { |
u_char profile[ISDN_MODEM_NUMREG]; /* Modem-Regs. Profile 0 */ |
u_char mdmreg[ISDN_MODEM_NUMREG]; /* Modem-Registers */ |
char pmsn[ISDN_MSNLEN]; /* EAZ/MSNs Profile 0 */ |
char msn[ISDN_MSNLEN]; /* EAZ/MSN */ |
char plmsn[ISDN_LMSNLEN]; /* Listening MSNs Profile 0 */ |
char lmsn[ISDN_LMSNLEN]; /* Listening MSNs */ |
char cpn[ISDN_MSNLEN]; /* CalledPartyNumber on incoming call */ |
char connmsg[ISDN_CMSGLEN]; /* CONNECT-Msg from HL-Driver */ |
#ifdef CONFIG_ISDN_AUDIO |
u_char vpar[10]; /* Voice-parameters */ |
int lastDLE; /* Flag for voice-coding: DLE seen */ |
#endif |
int mdmcmdl; /* Length of Modem-Commandbuffer */ |
int pluscount; /* Counter for +++ sequence */ |
unsigned long lastplus; /* Timestamp of last + */ |
char mdmcmd[255]; /* Modem-Commandbuffer */ |
unsigned int charge; /* Charge units of current connection */ |
} atemu; |
/* Private data (similar to async_struct in <linux/serial.h>) */ |
typedef struct modem_info { |
int magic; |
struct module *owner; |
int flags; /* defined in tty.h */ |
int x_char; /* xon/xoff character */ |
int mcr; /* Modem control register */ |
int msr; /* Modem status register */ |
int lsr; /* Line status register */ |
int line; |
int count; /* # of fd on device */ |
int blocked_open; /* # of blocked opens */ |
int online; /* 1 = B-Channel is up, drop data */ |
/* 2 = B-Channel is up, deliver d.*/ |
int dialing; /* Dial in progress or ATA */ |
int rcvsched; /* Receive needs schedule */ |
struct isdn_slot *isdn_slot; /* Ptr to isdn-driver/channel */ |
struct sk_buff_head rpqueue; /* Queue of recv'd packets */ |
int rcvcount; /* Byte-counters for B rx */ |
int ncarrier; /* Flag: schedule NO CARRIER */ |
unsigned char last_cause[8]; /* Last cause message */ |
unsigned char last_num[ISDN_MSNLEN]; |
/* Last phone-number */ |
unsigned char last_l2; /* Last layer-2 protocol */ |
unsigned char last_si; /* Last service */ |
unsigned char last_lhup; /* Last hangup local? */ |
unsigned char last_dir; /* Last direction (in or out) */ |
struct timer_list nc_timer; /* Timer for delayed NO CARRIER */ |
int send_outstanding;/* # of outstanding send-requests */ |
int xmit_size; /* max. # of chars in xmit_buf */ |
int xmit_count; /* # of chars in xmit_buf */ |
unsigned char *xmit_buf; /* transmit buffer */ |
struct sk_buff_head xmit_queue; /* transmit queue */ |
atomic_t xmit_lock; /* Semaphore for isdn_tty_write */ |
#ifdef CONFIG_ISDN_AUDIO |
unsigned long DLEflag; /* Insert DLE at next read */ |
int vonline; /* Voice-channel status */ |
/* Bit 0 = recording */ |
/* Bit 1 = playback */ |
/* Bit 2 = playback, DLE-ETX seen */ |
struct sk_buff_head dtmf_queue; /* queue for dtmf results */ |
void *adpcms; /* state for adpcm decompression */ |
void *adpcmr; /* state for adpcm compression */ |
void *dtmf_state; /* state for dtmf decoder */ |
void *silence_state; /* state for silence detection */ |
#endif |
#ifdef CONFIG_ISDN_TTY_FAX |
struct T30_s *fax; /* T30 Fax Group 3 data/interface */ |
int faxonline; /* Fax-channel status */ |
#endif |
struct tty_struct *tty; /* Pointer to corresponding tty */ |
atemu emu; /* AT-emulator data */ |
struct timer_list escape_timer; /* to recognize +++ escape */ |
struct timer_list ring_timer; /* for writing 'RING' responses */ |
struct timer_list connect_timer; /* waiting for CONNECT */ |
struct timer_list read_timer; /* read incoming data */ |
wait_queue_head_t open_wait, close_wait; |
struct semaphore write_sem; |
} modem_info; |
#define ISDN_MODEM_WINSIZE 8 |
/*======================= End of ISDN-tty stuff ============================*/ |
/*======================== Start of V.110 stuff ============================*/ |
#define V110_BUFSIZE 1024 |
typedef struct { |
int nbytes; /* 1 Matrixbyte -> nbytes in stream */ |
int nbits; /* Number of used bits in streambyte */ |
unsigned char key; /* Bitmask in stream eg. 11 (nbits=2) */ |
int decodelen; /* Amount of data in decodebuf */ |
int SyncInit; /* Number of sync frames to send */ |
unsigned char *OnlineFrame; /* Precalculated V110 idle frame */ |
unsigned char *OfflineFrame; /* Precalculated V110 sync Frame */ |
int framelen; /* Length of frames */ |
int skbuser; /* Number of unacked userdata skbs */ |
int skbidle; /* Number of unacked idle/sync skbs */ |
int introducer; /* Local vars for decoder */ |
int dbit; |
unsigned char b; |
int skbres; /* space to reserve in outgoing skb */ |
int maxsize; /* maxbufsize of lowlevel driver */ |
unsigned char *encodebuf; /* temporary buffer for encoding */ |
unsigned char decodebuf[V110_BUFSIZE]; /* incomplete V110 matrices */ |
} isdn_v110_stream; |
/*========================= End of V.110 stuff =============================*/ |
/*======================= Start of general stuff ===========================*/ |
typedef struct { |
char *next; |
char *private; |
} infostruct; |
/* Main driver-data */ |
typedef struct _isdn_dev_t { |
unsigned short flags; /* Bitmapped Flags: */ |
int channels; /* Current number of channels */ |
int net_verbose; /* Verbose-Flag */ |
int modempoll; /* Flag: tty-read active */ |
int tflags; /* Timer-Flags: */ |
/* see ISDN_TIMER_..defines */ |
int global_flags; |
infostruct *infochain; /* List of open info-devs. */ |
wait_queue_head_t info_waitq; /* Wait-Queue for isdninfo */ |
struct task_struct *profd; /* For iprofd */ |
struct semaphore sem; /* serialize list access*/ |
unsigned long global_features; |
} isdn_dev_t; |
extern isdn_dev_t *get_isdn_dev(void); |
#endif /* __KERNEL__ */ |
#endif /* __ISDN_H__ */ |
/shark/trunk/drivers/linuxc26/include/linux/bitops.h |
---|
0,0 → 1,132 |
#ifndef _LINUX_BITOPS_H |
#define _LINUX_BITOPS_H |
#include <asm/types.h> |
#include <asm/bitops.h> |
/* |
* ffs: find first bit set. This is defined the same way as |
* the libc and compiler builtin ffs routines, therefore |
* differs in spirit from the above ffz (man ffs). |
*/ |
static inline int generic_ffs(int x) |
{ |
int r = 1; |
if (!x) |
return 0; |
if (!(x & 0xffff)) { |
x >>= 16; |
r += 16; |
} |
if (!(x & 0xff)) { |
x >>= 8; |
r += 8; |
} |
if (!(x & 0xf)) { |
x >>= 4; |
r += 4; |
} |
if (!(x & 3)) { |
x >>= 2; |
r += 2; |
} |
if (!(x & 1)) { |
x >>= 1; |
r += 1; |
} |
return r; |
} |
/* |
* fls: find last bit set. |
*/ |
extern __inline__ int generic_fls(int x) |
{ |
int r = 32; |
if (!x) |
return 0; |
if (!(x & 0xffff0000u)) { |
x <<= 16; |
r -= 16; |
} |
if (!(x & 0xff000000u)) { |
x <<= 8; |
r -= 8; |
} |
if (!(x & 0xf0000000u)) { |
x <<= 4; |
r -= 4; |
} |
if (!(x & 0xc0000000u)) { |
x <<= 2; |
r -= 2; |
} |
if (!(x & 0x80000000u)) { |
x <<= 1; |
r -= 1; |
} |
return r; |
} |
extern __inline__ int get_bitmask_order(unsigned int count) |
{ |
int order; |
order = fls(count); |
return order; /* We could be slightly more clever with -1 here... */ |
} |
/* |
* hweightN: returns the hamming weight (i.e. the number |
* of bits set) of a N-bit word |
*/ |
static inline unsigned int generic_hweight32(unsigned int w) |
{ |
unsigned int res = (w & 0x55555555) + ((w >> 1) & 0x55555555); |
res = (res & 0x33333333) + ((res >> 2) & 0x33333333); |
res = (res & 0x0F0F0F0F) + ((res >> 4) & 0x0F0F0F0F); |
res = (res & 0x00FF00FF) + ((res >> 8) & 0x00FF00FF); |
return (res & 0x0000FFFF) + ((res >> 16) & 0x0000FFFF); |
} |
static inline unsigned int generic_hweight16(unsigned int w) |
{ |
unsigned int res = (w & 0x5555) + ((w >> 1) & 0x5555); |
res = (res & 0x3333) + ((res >> 2) & 0x3333); |
res = (res & 0x0F0F) + ((res >> 4) & 0x0F0F); |
return (res & 0x00FF) + ((res >> 8) & 0x00FF); |
} |
static inline unsigned int generic_hweight8(unsigned int w) |
{ |
unsigned int res = (w & 0x55) + ((w >> 1) & 0x55); |
res = (res & 0x33) + ((res >> 2) & 0x33); |
return (res & 0x0F) + ((res >> 4) & 0x0F); |
} |
static inline unsigned long generic_hweight64(__u64 w) |
{ |
#if BITS_PER_LONG < 64 |
return generic_hweight32((unsigned int)(w >> 32)) + |
generic_hweight32((unsigned int)w); |
#else |
u64 res; |
res = (w & 0x5555555555555555) + ((w >> 1) & 0x5555555555555555); |
res = (res & 0x3333333333333333) + ((res >> 2) & 0x3333333333333333); |
res = (res & 0x0F0F0F0F0F0F0F0F) + ((res >> 4) & 0x0F0F0F0F0F0F0F0F); |
res = (res & 0x00FF00FF00FF00FF) + ((res >> 8) & 0x00FF00FF00FF00FF); |
res = (res & 0x0000FFFF0000FFFF) + ((res >> 16) & 0x0000FFFF0000FFFF); |
return (res & 0x00000000FFFFFFFF) + ((res >> 32) & 0x00000000FFFFFFFF); |
#endif |
} |
static inline unsigned long hweight_long(unsigned long w) |
{ |
return sizeof(w) == 4 ? generic_hweight32(w) : generic_hweight64(w); |
} |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/ipx.h |
---|
0,0 → 1,74 |
#ifndef _IPX_H_ |
#define _IPX_H_ |
#include <linux/sockios.h> |
#include <linux/socket.h> |
#define IPX_NODE_LEN 6 |
#define IPX_MTU 576 |
struct sockaddr_ipx { |
sa_family_t sipx_family; |
__u16 sipx_port; |
__u32 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 { |
__u32 ipx_network; |
__u32 ipx_router_network; |
unsigned char ipx_router_node[IPX_NODE_LEN]; |
}; |
struct ipx_interface_definition { |
__u32 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 { |
__u32 ipx_network; |
__u32 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_ */ |
/shark/trunk/drivers/linuxc26/include/linux/dn.h |
---|
0,0 → 1,147 |
#ifndef _LINUX_DN_H |
#define _LINUX_DN_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 |
{ |
unsigned short a_len; |
unsigned char a_addr[DN_MAXADDL]; |
}; |
struct sockaddr_dn |
{ |
unsigned short sdn_family; |
unsigned char sdn_flags; |
unsigned char sdn_objnum; |
unsigned short sdn_objnamel; |
unsigned char 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 { |
unsigned short opt_status; /* Extended status return */ |
#define opt_sts opt_status |
unsigned short opt_optl; /* Length of user data */ |
unsigned char opt_data[16]; /* User data */ |
}; |
struct accessdata_dn |
{ |
unsigned char acc_accl; |
unsigned char acc_acc[DN_MAXACCL]; |
unsigned char acc_passl; |
unsigned char acc_pass[DN_MAXACCL]; |
unsigned char acc_userl; |
unsigned char acc_user[DN_MAXACCL]; |
}; |
/* |
* DECnet logical link information structure |
*/ |
struct linkinfo_dn { |
unsigned short idn_segsize; /* Segment size for link */ |
unsigned char idn_linkstate; /* Logical link state */ |
}; |
/* |
* Ethernet address format (for DECnet) |
*/ |
union etheraddress { |
unsigned char dne_addr[6]; /* Full ethernet address */ |
struct { |
unsigned char dne_hiord[4]; /* DECnet HIORD prefix */ |
unsigned char dne_nodeaddr[2]; /* DECnet node address */ |
} dne_remote; |
}; |
/* |
* DECnet physical socket address format |
*/ |
struct dn_addr { |
unsigned short 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 */ |
/shark/trunk/drivers/linuxc26/include/linux/binfmts.h |
---|
0,0 → 1,69 |
#ifndef _LINUX_BINFMTS_H |
#define _LINUX_BINFMTS_H |
#include <linux/capability.h> |
struct pt_regs; |
/* |
* MAX_ARG_PAGES defines the number of pages allocated for arguments |
* and envelope for the new program. 32 should suffice, this gives |
* a maximum env+arg of 128kB w/4KB pages! |
*/ |
#define MAX_ARG_PAGES 32 |
/* sizeof(linux_binprm->buf) */ |
#define BINPRM_BUF_SIZE 128 |
#ifdef __KERNEL__ |
/* |
* This structure is used to hold the arguments that are used when loading binaries. |
*/ |
struct linux_binprm{ |
char buf[BINPRM_BUF_SIZE]; |
struct page *page[MAX_ARG_PAGES]; |
struct mm_struct *mm; |
unsigned long p; /* current top of mem */ |
int sh_bang; |
struct file * file; |
int e_uid, e_gid; |
kernel_cap_t cap_inheritable, cap_permitted, cap_effective; |
void *security; |
int argc, envc; |
char * filename; /* Name of binary as seen by procps */ |
char * interp; /* Name of the binary really executed. Most |
of the time same as filename, but could be |
different for binfmt_{misc,script} */ |
unsigned long loader, exec; |
}; |
/* |
* This structure defines the functions that are used to load the binary formats that |
* linux accepts. |
*/ |
struct linux_binfmt { |
struct linux_binfmt * next; |
struct module *module; |
int (*load_binary)(struct linux_binprm *, struct pt_regs * regs); |
int (*load_shlib)(struct file *); |
int (*core_dump)(long signr, struct pt_regs * regs, struct file * file); |
unsigned long min_coredump; /* minimal dump size */ |
}; |
extern int register_binfmt(struct linux_binfmt *); |
extern int unregister_binfmt(struct linux_binfmt *); |
extern int prepare_binprm(struct linux_binprm *); |
extern void remove_arg_zero(struct linux_binprm *); |
extern int search_binary_handler(struct linux_binprm *,struct pt_regs *); |
extern int flush_old_exec(struct linux_binprm * bprm); |
extern int setup_arg_pages(struct linux_binprm * bprm); |
extern int copy_strings(int argc,char __user * __user * argv,struct linux_binprm *bprm); |
extern int copy_strings_kernel(int argc,char ** argv,struct linux_binprm *bprm); |
extern void compute_creds(struct linux_binprm *binprm); |
extern int do_coredump(long signr, int exit_code, struct pt_regs * regs); |
extern int set_binfmt(struct linux_binfmt *new); |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_BINFMTS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/nfs_xdr.h |
---|
0,0 → 1,697 |
#ifndef _LINUX_NFS_XDR_H |
#define _LINUX_NFS_XDR_H |
#include <linux/sunrpc/xprt.h> |
struct nfs_fattr { |
unsigned short valid; /* which fields are valid */ |
__u64 pre_size; /* pre_op_attr.size */ |
struct timespec pre_mtime; /* pre_op_attr.mtime */ |
struct timespec pre_ctime; /* pre_op_attr.ctime */ |
enum nfs_ftype type; /* always use NFSv2 types */ |
__u32 mode; |
__u32 nlink; |
__u32 uid; |
__u32 gid; |
__u64 size; |
union { |
struct { |
__u32 blocksize; |
__u32 blocks; |
} nfs2; |
struct { |
__u64 used; |
} nfs3; |
} du; |
dev_t rdev; |
union { |
__u64 nfs3; /* also nfs2 */ |
struct { |
__u64 major; |
__u64 minor; |
} nfs4; |
} fsid_u; |
__u64 fileid; |
struct timespec atime; |
struct timespec mtime; |
struct timespec ctime; |
__u32 bitmap[2]; /* NFSv4 returned attribute bitmap */ |
__u64 change_attr; /* NFSv4 change attribute */ |
__u64 pre_change_attr;/* pre-op NFSv4 change attribute */ |
unsigned long timestamp; |
}; |
#define NFS_ATTR_WCC 0x0001 /* pre-op WCC data */ |
#define NFS_ATTR_FATTR 0x0002 /* post-op attributes */ |
#define NFS_ATTR_FATTR_V3 0x0004 /* NFSv3 attributes */ |
#define NFS_ATTR_FATTR_V4 0x0008 |
#define NFS_ATTR_PRE_CHANGE 0x0010 |
/* |
* Info on the file system |
*/ |
struct nfs_fsinfo { |
struct nfs_fattr *fattr; /* Post-op attributes */ |
__u32 rtmax; /* max. read transfer size */ |
__u32 rtpref; /* pref. read transfer size */ |
__u32 rtmult; /* reads should be multiple of this */ |
__u32 wtmax; /* max. write transfer size */ |
__u32 wtpref; /* pref. write transfer size */ |
__u32 wtmult; /* writes should be multiple of this */ |
__u32 dtpref; /* pref. readdir transfer size */ |
__u64 maxfilesize; |
__u32 lease_time; /* in seconds */ |
}; |
struct nfs_fsstat { |
struct nfs_fattr *fattr; /* Post-op attributes */ |
__u64 tbytes; /* total size in bytes */ |
__u64 fbytes; /* # of free bytes */ |
__u64 abytes; /* # of bytes available to user */ |
__u64 tfiles; /* # of files */ |
__u64 ffiles; /* # of free files */ |
__u64 afiles; /* # of files available to user */ |
}; |
struct nfs2_fsstat { |
__u32 tsize; /* Server transfer size */ |
__u32 bsize; /* Filesystem block size */ |
__u32 blocks; /* No. of "bsize" blocks on filesystem */ |
__u32 bfree; /* No. of free "bsize" blocks */ |
__u32 bavail; /* No. of available "bsize" blocks */ |
}; |
struct nfs_pathconf { |
struct nfs_fattr *fattr; /* Post-op attributes */ |
__u32 max_link; /* max # of hard links */ |
__u32 max_namelen; /* max name length */ |
}; |
/* |
* Arguments to the open call. |
*/ |
struct nfs_openargs { |
struct nfs_fh * fh; |
__u32 seqid; |
__u32 share_access; |
__u64 clientid; |
__u32 id; |
__u32 opentype; |
__u32 createmode; |
union { |
struct iattr * attrs; /* UNCHECKED, GUARDED */ |
nfs4_verifier verifier; /* EXCLUSIVE */ |
} u; |
struct qstr * name; |
struct nfs4_getattr * f_getattr; |
struct nfs4_getattr * d_getattr; |
struct nfs_server * server; /* Needed for ID mapping */ |
}; |
struct nfs_openres { |
__u32 status; |
nfs4_stateid stateid; |
struct nfs_fh fh; |
struct nfs4_change_info * cinfo; |
__u32 rflags; |
struct nfs4_getattr * f_getattr; |
struct nfs4_getattr * d_getattr; |
struct nfs_server * server; |
}; |
/* |
* Arguments to the open_confirm call. |
*/ |
struct nfs_open_confirmargs { |
struct nfs_fh * fh; |
nfs4_stateid stateid; |
__u32 seqid; |
}; |
struct nfs_open_confirmres { |
__u32 status; |
nfs4_stateid stateid; |
}; |
/* |
* Arguments to the close call. |
*/ |
struct nfs_closeargs { |
struct nfs_fh * fh; |
nfs4_stateid stateid; |
__u32 seqid; |
}; |
struct nfs_closeres { |
__u32 status; |
nfs4_stateid stateid; |
}; |
/* |
* Arguments to the read call. |
*/ |
#define NFS_READ_MAXIOV (9U) |
#if (NFS_READ_MAXIOV > (MAX_IOVEC -2)) |
#error "NFS_READ_MAXIOV is too large" |
#endif |
struct nfs_readargs { |
struct nfs_fh * fh; |
nfs4_stateid stateid; |
__u64 offset; |
__u32 count; |
unsigned int pgbase; |
struct page ** pages; |
}; |
struct nfs_readres { |
struct nfs_fattr * fattr; |
__u32 count; |
int eof; |
}; |
/* |
* Arguments to the write call. |
*/ |
#define NFS_WRITE_MAXIOV (9U) |
#if (NFS_WRITE_MAXIOV > (MAX_IOVEC -2)) |
#error "NFS_WRITE_MAXIOV is too large" |
#endif |
struct nfs_writeargs { |
struct nfs_fh * fh; |
nfs4_stateid stateid; |
__u64 offset; |
__u32 count; |
enum nfs3_stable_how stable; |
unsigned int pgbase; |
struct page ** pages; |
}; |
struct nfs_writeverf { |
enum nfs3_stable_how committed; |
__u32 verifier[2]; |
}; |
struct nfs_writeres { |
struct nfs_fattr * fattr; |
struct nfs_writeverf * verf; |
__u32 count; |
}; |
/* |
* Argument struct for decode_entry function |
*/ |
struct nfs_entry { |
__u64 ino; |
__u64 cookie, |
prev_cookie; |
const char * name; |
unsigned int len; |
int eof; |
struct nfs_fh * fh; |
struct nfs_fattr * fattr; |
}; |
/* |
* The following types are for NFSv2 only. |
*/ |
struct nfs_sattrargs { |
struct nfs_fh * fh; |
struct iattr * sattr; |
}; |
struct nfs_diropargs { |
struct nfs_fh * fh; |
const char * name; |
unsigned int len; |
}; |
struct nfs_createargs { |
struct nfs_fh * fh; |
const char * name; |
unsigned int len; |
struct iattr * sattr; |
}; |
struct nfs_renameargs { |
struct nfs_fh * fromfh; |
const char * fromname; |
unsigned int fromlen; |
struct nfs_fh * tofh; |
const char * toname; |
unsigned int tolen; |
}; |
struct nfs_setattrargs { |
struct nfs_fh * fh; |
nfs4_stateid stateid; |
struct iattr * iap; |
struct nfs4_getattr * attr; |
struct nfs_server * server; /* Needed for name mapping */ |
}; |
struct nfs_setattrres { |
struct nfs4_getattr * attr; |
struct nfs_server * server; |
}; |
struct nfs_linkargs { |
struct nfs_fh * fromfh; |
struct nfs_fh * tofh; |
const char * toname; |
unsigned int tolen; |
}; |
struct nfs_symlinkargs { |
struct nfs_fh * fromfh; |
const char * fromname; |
unsigned int fromlen; |
const char * topath; |
unsigned int tolen; |
struct iattr * sattr; |
}; |
struct nfs_readdirargs { |
struct nfs_fh * fh; |
__u32 cookie; |
unsigned int count; |
struct page ** pages; |
}; |
struct nfs_diropok { |
struct nfs_fh * fh; |
struct nfs_fattr * fattr; |
}; |
struct nfs_readlinkargs { |
struct nfs_fh * fh; |
unsigned int count; |
struct page ** pages; |
}; |
struct nfs3_sattrargs { |
struct nfs_fh * fh; |
struct iattr * sattr; |
unsigned int guard; |
struct timespec guardtime; |
}; |
struct nfs3_diropargs { |
struct nfs_fh * fh; |
const char * name; |
unsigned int len; |
}; |
struct nfs3_accessargs { |
struct nfs_fh * fh; |
__u32 access; |
}; |
struct nfs3_createargs { |
struct nfs_fh * fh; |
const char * name; |
unsigned int len; |
struct iattr * sattr; |
enum nfs3_createmode createmode; |
__u32 verifier[2]; |
}; |
struct nfs3_mkdirargs { |
struct nfs_fh * fh; |
const char * name; |
unsigned int len; |
struct iattr * sattr; |
}; |
struct nfs3_symlinkargs { |
struct nfs_fh * fromfh; |
const char * fromname; |
unsigned int fromlen; |
const char * topath; |
unsigned int tolen; |
struct iattr * sattr; |
}; |
struct nfs3_mknodargs { |
struct nfs_fh * fh; |
const char * name; |
unsigned int len; |
enum nfs3_ftype type; |
struct iattr * sattr; |
dev_t rdev; |
}; |
struct nfs3_renameargs { |
struct nfs_fh * fromfh; |
const char * fromname; |
unsigned int fromlen; |
struct nfs_fh * tofh; |
const char * toname; |
unsigned int tolen; |
}; |
struct nfs3_linkargs { |
struct nfs_fh * fromfh; |
struct nfs_fh * tofh; |
const char * toname; |
unsigned int tolen; |
}; |
struct nfs3_readdirargs { |
struct nfs_fh * fh; |
__u64 cookie; |
__u32 verf[2]; |
int plus; |
unsigned int count; |
struct page ** pages; |
}; |
struct nfs3_diropres { |
struct nfs_fattr * dir_attr; |
struct nfs_fh * fh; |
struct nfs_fattr * fattr; |
}; |
struct nfs3_accessres { |
struct nfs_fattr * fattr; |
__u32 access; |
}; |
struct nfs3_readlinkargs { |
struct nfs_fh * fh; |
unsigned int count; |
struct page ** pages; |
}; |
struct nfs3_renameres { |
struct nfs_fattr * fromattr; |
struct nfs_fattr * toattr; |
}; |
struct nfs3_linkres { |
struct nfs_fattr * dir_attr; |
struct nfs_fattr * fattr; |
}; |
struct nfs3_readdirres { |
struct nfs_fattr * dir_attr; |
__u32 * verf; |
int plus; |
}; |
#ifdef CONFIG_NFS_V4 |
typedef u64 clientid4; |
struct nfs4_change_info { |
u32 atomic; |
u64 before; |
u64 after; |
}; |
struct nfs4_access { |
u32 ac_req_access; /* request */ |
u32 * ac_resp_supported; /* response */ |
u32 * ac_resp_access; /* response */ |
}; |
struct nfs4_close { |
char * cl_stateid; /* request */ |
u32 cl_seqid; /* request */ |
}; |
struct nfs4_create { |
u32 cr_ftype; /* request */ |
union { /* request */ |
struct { |
u32 textlen; |
const char * text; |
} symlink; /* NF4LNK */ |
struct { |
u32 specdata1; |
u32 specdata2; |
} device; /* NF4BLK, NF4CHR */ |
} u; |
u32 cr_namelen; /* request */ |
const char * cr_name; /* request */ |
struct iattr * cr_attrs; /* request */ |
struct nfs4_change_info * cr_cinfo; /* response */ |
}; |
#define cr_textlen u.symlink.textlen |
#define cr_text u.symlink.text |
#define cr_specdata1 u.device.specdata1 |
#define cr_specdata2 u.device.specdata2 |
struct nfs4_getattr { |
u32 * gt_bmval; /* request */ |
struct nfs_fattr * gt_attrs; /* response */ |
struct nfs_fsstat * gt_fsstat; /* response */ |
struct nfs_fsinfo * gt_fsinfo; /* response */ |
struct nfs_pathconf * gt_pathconf; /* response */ |
}; |
struct nfs4_getfh { |
struct nfs_fh * gf_fhandle; /* response */ |
}; |
struct nfs4_link { |
u32 ln_namelen; /* request */ |
const char * ln_name; /* request */ |
struct nfs4_change_info * ln_cinfo; /* response */ |
}; |
struct nfs4_lookup { |
struct qstr * lo_name; /* request */ |
}; |
struct nfs4_open { |
struct nfs4_client * op_client_state; /* request */ |
u32 op_share_access; /* request */ |
u32 op_opentype; /* request */ |
u32 op_createmode; /* request */ |
union { /* request */ |
struct iattr * attrs; /* UNCHECKED, GUARDED */ |
nfs4_verifier verifier; /* EXCLUSIVE */ |
} u; |
struct qstr * op_name; /* request */ |
char * op_stateid; /* response */ |
struct nfs4_change_info * op_cinfo; /* response */ |
u32 * op_rflags; /* response */ |
}; |
#define op_attrs u.attrs |
#define op_verifier u.verifier |
struct nfs4_open_confirm { |
char * oc_stateid; /* request */ |
}; |
struct nfs4_putfh { |
struct nfs_fh * pf_fhandle; /* request */ |
}; |
struct nfs4_readdir { |
u64 rd_cookie; /* request */ |
nfs4_verifier rd_req_verifier; /* request */ |
u32 rd_count; /* request */ |
u32 rd_bmval[2]; /* request */ |
nfs4_verifier rd_resp_verifier; /* response */ |
struct page ** rd_pages; /* zero-copy data */ |
unsigned int rd_pgbase; /* zero-copy data */ |
}; |
struct nfs4_readlink { |
u32 rl_count; /* zero-copy data */ |
struct page ** rl_pages; /* zero-copy data */ |
}; |
struct nfs4_remove { |
u32 rm_namelen; /* request */ |
const char * rm_name; /* request */ |
struct nfs4_change_info * rm_cinfo; /* response */ |
}; |
struct nfs4_rename { |
u32 rn_oldnamelen; /* request */ |
const char * rn_oldname; /* request */ |
u32 rn_newnamelen; /* request */ |
const char * rn_newname; /* request */ |
struct nfs4_change_info * rn_src_cinfo; /* response */ |
struct nfs4_change_info * rn_dst_cinfo; /* response */ |
}; |
struct nfs4_setattr { |
char * st_stateid; /* request */ |
struct iattr * st_iap; /* request */ |
}; |
struct nfs4_setclientid { |
nfs4_verifier sc_verifier; /* request */ |
char * sc_name; /* request */ |
u32 sc_prog; /* request */ |
char sc_netid[4]; /* request */ |
char sc_uaddr[24]; /* request */ |
u32 sc_cb_ident; /* request */ |
struct nfs4_client * sc_state; /* response */ |
}; |
struct nfs4_op { |
u32 opnum; |
union { |
struct nfs4_access access; |
struct nfs4_close close; |
struct nfs4_create create; |
struct nfs4_getattr getattr; |
struct nfs4_getfh getfh; |
struct nfs4_link link; |
struct nfs4_lookup lookup; |
struct nfs4_open open; |
struct nfs4_open_confirm open_confirm; |
struct nfs4_putfh putfh; |
struct nfs4_readdir readdir; |
struct nfs4_readlink readlink; |
struct nfs4_remove remove; |
struct nfs4_rename rename; |
struct nfs4_client * renew; |
struct nfs4_setattr setattr; |
struct nfs4_setclientid setclientid; |
struct nfs4_client * setclientid_confirm; |
} u; |
}; |
struct nfs4_compound { |
unsigned int flags; /* defined below */ |
struct nfs_server * server; |
/* RENEW information */ |
int renew_index; |
unsigned long timestamp; |
/* scratch variables for XDR encode/decode */ |
int nops; |
u32 * p; |
u32 * end; |
/* the individual COMPOUND operations */ |
struct nfs4_op *ops; |
/* request */ |
int req_nops; |
u32 taglen; |
char * tag; |
/* response */ |
int resp_nops; |
int toplevel_status; |
}; |
#endif /* CONFIG_NFS_V4 */ |
struct nfs_read_data { |
int flags; |
struct rpc_task task; |
struct inode *inode; |
struct rpc_cred *cred; |
struct nfs_fattr fattr; /* fattr storage */ |
struct list_head pages; /* Coalesced read requests */ |
struct page *pagevec[NFS_READ_MAXIOV]; |
struct nfs_readargs args; |
struct nfs_readres res; |
#ifdef CONFIG_NFS_V4 |
unsigned long timestamp; /* For lease renewal */ |
#endif |
}; |
struct nfs_write_data { |
int flags; |
struct rpc_task task; |
struct inode *inode; |
struct rpc_cred *cred; |
struct nfs_fattr fattr; |
struct nfs_writeverf verf; |
struct list_head pages; /* Coalesced requests we wish to flush */ |
struct page *pagevec[NFS_WRITE_MAXIOV]; |
struct nfs_writeargs args; /* argument struct */ |
struct nfs_writeres res; /* result struct */ |
#ifdef CONFIG_NFS_V4 |
unsigned long timestamp; /* For lease renewal */ |
#endif |
}; |
struct nfs_page; |
/* |
* RPC procedure vector for NFSv2/NFSv3 demuxing |
*/ |
struct nfs_rpc_ops { |
int version; /* Protocol version */ |
int (*getroot) (struct nfs_server *, struct nfs_fh *, |
struct nfs_fattr *); |
int (*getattr) (struct inode *, struct nfs_fattr *); |
int (*setattr) (struct dentry *, struct nfs_fattr *, |
struct iattr *); |
int (*lookup) (struct inode *, struct qstr *, |
struct nfs_fh *, struct nfs_fattr *); |
int (*access) (struct inode *, struct rpc_cred *, int); |
int (*readlink)(struct inode *, struct page *); |
int (*read) (struct nfs_read_data *, struct file *); |
int (*write) (struct nfs_write_data *, struct file *); |
int (*commit) (struct nfs_write_data *, struct file *); |
struct inode * (*create) (struct inode *, struct qstr *, |
struct iattr *, int); |
int (*remove) (struct inode *, struct qstr *); |
int (*unlink_setup) (struct rpc_message *, |
struct dentry *, struct qstr *); |
int (*unlink_done) (struct dentry *, struct rpc_task *); |
int (*rename) (struct inode *, struct qstr *, |
struct inode *, struct qstr *); |
int (*link) (struct inode *, struct inode *, struct qstr *); |
int (*symlink) (struct inode *, struct qstr *, struct qstr *, |
struct iattr *, struct nfs_fh *, |
struct nfs_fattr *); |
int (*mkdir) (struct inode *, struct qstr *, struct iattr *, |
struct nfs_fh *, struct nfs_fattr *); |
int (*rmdir) (struct inode *, struct qstr *); |
int (*readdir) (struct dentry *, struct rpc_cred *, |
u64, struct page *, unsigned int, int); |
int (*mknod) (struct inode *, struct qstr *, struct iattr *, |
dev_t, struct nfs_fh *, struct nfs_fattr *); |
int (*statfs) (struct nfs_server *, struct nfs_fh *, |
struct nfs_fsstat *); |
int (*fsinfo) (struct nfs_server *, struct nfs_fh *, |
struct nfs_fsinfo *); |
int (*pathconf) (struct nfs_server *, struct nfs_fh *, |
struct nfs_pathconf *); |
u32 * (*decode_dirent)(u32 *, struct nfs_entry *, int plus); |
void (*read_setup) (struct nfs_read_data *, unsigned int count); |
void (*write_setup) (struct nfs_write_data *, unsigned int count, int how); |
void (*commit_setup) (struct nfs_write_data *, u64 start, u32 len, int how); |
int (*file_open) (struct inode *, struct file *); |
int (*file_release) (struct inode *, struct file *); |
void (*request_init)(struct nfs_page *, struct file *); |
int (*request_compatible)(struct nfs_page *, struct file *, struct page *); |
}; |
/* |
* NFS_CALL(getattr, inode, (fattr)); |
* into |
* NFS_PROTO(inode)->getattr(fattr); |
*/ |
#define NFS_CALL(op, inode, args) NFS_PROTO(inode)->op args |
/* |
* Function vectors etc. for the NFS client |
*/ |
extern struct nfs_rpc_ops nfs_v2_clientops; |
extern struct nfs_rpc_ops nfs_v3_clientops; |
extern struct nfs_rpc_ops nfs_v4_clientops; |
extern struct rpc_version nfs_version2; |
extern struct rpc_version nfs_version3; |
extern struct rpc_version nfs_version4; |
extern struct rpc_program nfs_program; |
extern struct rpc_stat nfs_rpcstat; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/mod_devicetable.h |
---|
0,0 → 1,151 |
/* |
* Device tables which are exported to userspace via |
* scripts/table2alias.c. You must keep that file in sync with this |
* header. |
*/ |
#ifndef LINUX_MOD_DEVICETABLE_H |
#define LINUX_MOD_DEVICETABLE_H |
#ifdef __KERNEL__ |
#include <linux/types.h> |
typedef unsigned long kernel_ulong_t; |
#endif |
#define PCI_ANY_ID (~0) |
struct pci_device_id { |
__u32 vendor, device; /* Vendor and device ID or PCI_ANY_ID*/ |
__u32 subvendor, subdevice; /* Subsystem ID's or PCI_ANY_ID */ |
__u32 class, class_mask; /* (class,subclass,prog-if) triplet */ |
kernel_ulong_t driver_data; /* Data private to the driver */ |
}; |
#define IEEE1394_MATCH_VENDOR_ID 0x0001 |
#define IEEE1394_MATCH_MODEL_ID 0x0002 |
#define IEEE1394_MATCH_SPECIFIER_ID 0x0004 |
#define IEEE1394_MATCH_VERSION 0x0008 |
struct ieee1394_device_id { |
__u32 match_flags; |
__u32 vendor_id; |
__u32 model_id; |
__u32 specifier_id; |
__u32 version; |
kernel_ulong_t driver_data; |
}; |
/* |
* Device table entry for "new style" table-driven USB drivers. |
* User mode code can read these tables to choose which modules to load. |
* Declare the table as a MODULE_DEVICE_TABLE. |
* |
* A probe() parameter will point to a matching entry from this table. |
* Use the driver_info field for each match to hold information tied |
* to that match: device quirks, etc. |
* |
* Terminate the driver's table with an all-zeroes entry. |
* Use the flag values to control which fields are compared. |
*/ |
/** |
* struct usb_device_id - identifies USB devices for probing and hotplugging |
* @match_flags: Bit mask controlling of the other fields are used to match |
* against new devices. Any field except for driver_info may be used, |
* although some only make sense in conjunction with other fields. |
* This is usually set by a USB_DEVICE_*() macro, which sets all |
* other fields in this structure except for driver_info. |
* @idVendor: USB vendor ID for a device; numbers are assigned |
* by the USB forum to its members. |
* @idProduct: Vendor-assigned product ID. |
* @bcdDevice_lo: Low end of range of vendor-assigned product version numbers. |
* This is also used to identify individual product versions, for |
* a range consisting of a single device. |
* @bcdDevice_hi: High end of version number range. The range of product |
* versions is inclusive. |
* @bDeviceClass: Class of device; numbers are assigned |
* by the USB forum. Products may choose to implement classes, |
* or be vendor-specific. Device classes specify behavior of all |
* the interfaces on a devices. |
* @bDeviceSubClass: Subclass of device; associated with bDeviceClass. |
* @bDeviceProtocol: Protocol of device; associated with bDeviceClass. |
* @bInterfaceClass: Class of interface; numbers are assigned |
* by the USB forum. Products may choose to implement classes, |
* or be vendor-specific. Interface classes specify behavior only |
* of a given interface; other interfaces may support other classes. |
* @bInterfaceSubClass: Subclass of interface; associated with bInterfaceClass. |
* @bInterfaceProtocol: Protocol of interface; associated with bInterfaceClass. |
* @driver_info: Holds information used by the driver. Usually it holds |
* a pointer to a descriptor understood by the driver, or perhaps |
* device flags. |
* |
* In most cases, drivers will create a table of device IDs by using |
* USB_DEVICE(), or similar macros designed for that purpose. |
* They will then export it to userspace using MODULE_DEVICE_TABLE(), |
* and provide it to the USB core through their usb_driver structure. |
* |
* See the usb_match_id() function for information about how matches are |
* performed. Briefly, you will normally use one of several macros to help |
* construct these entries. Each entry you provide will either identify |
* one or more specific products, or will identify a class of products |
* which have agreed to behave the same. You should put the more specific |
* matches towards the beginning of your table, so that driver_info can |
* record quirks of specific products. |
*/ |
struct usb_device_id { |
/* which fields to match against? */ |
__u16 match_flags; |
/* Used for product specific matches; range is inclusive */ |
__u16 idVendor; |
__u16 idProduct; |
__u16 bcdDevice_lo; |
__u16 bcdDevice_hi; |
/* Used for device class matches */ |
__u8 bDeviceClass; |
__u8 bDeviceSubClass; |
__u8 bDeviceProtocol; |
/* Used for interface class matches */ |
__u8 bInterfaceClass; |
__u8 bInterfaceSubClass; |
__u8 bInterfaceProtocol; |
/* not matched against */ |
kernel_ulong_t driver_info; |
}; |
/* Some useful macros to use to create struct usb_device_id */ |
#define USB_DEVICE_ID_MATCH_VENDOR 0x0001 |
#define USB_DEVICE_ID_MATCH_PRODUCT 0x0002 |
#define USB_DEVICE_ID_MATCH_DEV_LO 0x0004 |
#define USB_DEVICE_ID_MATCH_DEV_HI 0x0008 |
#define USB_DEVICE_ID_MATCH_DEV_CLASS 0x0010 |
#define USB_DEVICE_ID_MATCH_DEV_SUBCLASS 0x0020 |
#define USB_DEVICE_ID_MATCH_DEV_PROTOCOL 0x0040 |
#define USB_DEVICE_ID_MATCH_INT_CLASS 0x0080 |
#define USB_DEVICE_ID_MATCH_INT_SUBCLASS 0x0100 |
#define USB_DEVICE_ID_MATCH_INT_PROTOCOL 0x0200 |
/* s390 CCW devices */ |
struct ccw_device_id { |
__u16 match_flags; /* which fields to match against */ |
__u16 cu_type; /* control unit type */ |
__u16 dev_type; /* device type */ |
__u8 cu_model; /* control unit model */ |
__u8 dev_model; /* device model */ |
kernel_ulong_t driver_info; |
}; |
#define CCW_DEVICE_ID_MATCH_CU_TYPE 0x01 |
#define CCW_DEVICE_ID_MATCH_CU_MODEL 0x02 |
#define CCW_DEVICE_ID_MATCH_DEVICE_TYPE 0x04 |
#define CCW_DEVICE_ID_MATCH_DEVICE_MODEL 0x08 |
#endif /* LINUX_MOD_DEVICETABLE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/smp_lock.h |
---|
0,0 → 1,67 |
#ifndef __LINUX_SMPLOCK_H |
#define __LINUX_SMPLOCK_H |
#include <linux/config.h> |
#include <linux/sched.h> |
#include <linux/spinlock.h> |
#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT) |
extern spinlock_t kernel_flag; |
#define kernel_locked() (current->lock_depth >= 0) |
#define get_kernel_lock() spin_lock(&kernel_flag) |
#define put_kernel_lock() spin_unlock(&kernel_flag) |
/* |
* Release global kernel lock. |
*/ |
static inline void release_kernel_lock(struct task_struct *task) |
{ |
if (unlikely(task->lock_depth >= 0)) |
put_kernel_lock(); |
} |
/* |
* Re-acquire the kernel lock |
*/ |
static inline void reacquire_kernel_lock(struct task_struct *task) |
{ |
if (unlikely(task->lock_depth >= 0)) |
get_kernel_lock(); |
} |
/* |
* Getting the big kernel lock. |
* |
* This cannot happen asynchronously, |
* so we only need to worry about other |
* CPU's. |
*/ |
static inline void lock_kernel(void) |
{ |
int depth = current->lock_depth+1; |
if (likely(!depth)) |
get_kernel_lock(); |
current->lock_depth = depth; |
} |
static inline void unlock_kernel(void) |
{ |
if (unlikely(current->lock_depth < 0)) |
BUG(); |
if (likely(--current->lock_depth < 0)) |
put_kernel_lock(); |
} |
#else |
#define lock_kernel() do { } while(0) |
#define unlock_kernel() do { } while(0) |
#define release_kernel_lock(task) do { } while(0) |
#define reacquire_kernel_lock(task) do { } while(0) |
#define kernel_locked() 1 |
#endif /* CONFIG_SMP || CONFIG_PREEMPT */ |
#endif /* __LINUX_SMPLOCK_H */ |
/shark/trunk/drivers/linuxc26/include/linux/hdlc.h |
---|
0,0 → 1,258 |
/* |
* Generic HDLC support routines for Linux |
* |
* Copyright (C) 1999-2003 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 __HDLC_H |
#define __HDLC_H |
#define GENERIC_HDLC_VERSION 4 /* For synchronization with sethdlc utility */ |
#define CLOCK_DEFAULT 0 /* Default setting */ |
#define CLOCK_EXT 1 /* External TX and RX clock - DTE */ |
#define CLOCK_INT 2 /* Internal TX and RX clock - DCE */ |
#define CLOCK_TXINT 3 /* Internal TX and external RX clock */ |
#define CLOCK_TXFROMRX 4 /* TX clock derived from external RX clock */ |
#define ENCODING_DEFAULT 0 /* Default setting */ |
#define ENCODING_NRZ 1 |
#define ENCODING_NRZI 2 |
#define ENCODING_FM_MARK 3 |
#define ENCODING_FM_SPACE 4 |
#define ENCODING_MANCHESTER 5 |
#define PARITY_DEFAULT 0 /* Default setting */ |
#define PARITY_NONE 1 /* No parity */ |
#define PARITY_CRC16_PR0 2 /* CRC16, initial value 0x0000 */ |
#define PARITY_CRC16_PR1 3 /* CRC16, initial value 0xFFFF */ |
#define PARITY_CRC16_PR0_CCITT 4 /* CRC16, initial 0x0000, ITU-T version */ |
#define PARITY_CRC16_PR1_CCITT 5 /* CRC16, initial 0xFFFF, ITU-T version */ |
#define PARITY_CRC32_PR0_CCITT 6 /* CRC32, initial value 0x00000000 */ |
#define PARITY_CRC32_PR1_CCITT 7 /* CRC32, initial value 0xFFFFFFFF */ |
#define LMI_DEFAULT 0 /* Default setting */ |
#define LMI_NONE 1 /* No LMI, all PVCs are static */ |
#define LMI_ANSI 2 /* ANSI Annex D */ |
#define LMI_CCITT 3 /* ITU-T Annex A */ |
#define HDLC_MAX_MTU 1500 /* Ethernet 1500 bytes */ |
#define HDLC_MAX_MRU (HDLC_MAX_MTU + 10 + 14 + 4) /* for ETH+VLAN over FR */ |
#ifdef __KERNEL__ |
#include <linux/skbuff.h> |
#include <linux/netdevice.h> |
#include <net/syncppp.h> |
#include <linux/hdlc/ioctl.h> |
typedef struct { /* Used in Cisco and PPP mode */ |
u8 address; |
u8 control; |
u16 protocol; |
}__attribute__ ((packed)) hdlc_header; |
typedef struct { |
u32 type; /* code */ |
u32 par1; |
u32 par2; |
u16 rel; /* reliability */ |
u32 time; |
}__attribute__ ((packed)) cisco_packet; |
#define CISCO_PACKET_LEN 18 |
#define CISCO_BIG_PACKET_LEN 20 |
typedef struct pvc_device_struct { |
struct hdlc_device_struct *master; |
struct net_device *main; |
struct net_device *ether; /* bridged Ethernet interface */ |
struct pvc_device_struct *next; /* Sorted in ascending DLCI order */ |
int dlci; |
int open_count; |
struct { |
unsigned int new: 1; |
unsigned int active: 1; |
unsigned int exist: 1; |
unsigned int deleted: 1; |
unsigned int fecn: 1; |
unsigned int becn: 1; |
}state; |
}pvc_device; |
typedef struct hdlc_device_struct { |
/* To be initialized by hardware driver */ |
struct net_device netdev; /* master net device - must be first */ |
struct net_device_stats stats; |
/* used by HDLC layer to take control over HDLC device from hw driver*/ |
int (*attach)(struct hdlc_device_struct *hdlc, |
unsigned short encoding, unsigned short parity); |
/* hardware driver must handle this instead of dev->hard_start_xmit */ |
int (*xmit)(struct sk_buff *skb, struct net_device *dev); |
/* Things below are for HDLC layer internal use only */ |
struct { |
int (*open)(struct hdlc_device_struct *hdlc); |
void (*close)(struct hdlc_device_struct *hdlc); |
/* if open & DCD */ |
void (*start)(struct hdlc_device_struct *hdlc); |
/* if open & !DCD */ |
void (*stop)(struct hdlc_device_struct *hdlc); |
void (*detach)(struct hdlc_device_struct *hdlc); |
int (*netif_rx)(struct sk_buff *skb); |
unsigned short (*type_trans)(struct sk_buff *skb, |
struct net_device *dev); |
int id; /* IF_PROTO_HDLC/CISCO/FR/etc. */ |
}proto; |
int carrier; |
int open; |
spinlock_t state_lock; |
union { |
struct { |
fr_proto settings; |
pvc_device *first_pvc; |
int dce_pvc_count; |
struct timer_list timer; |
int last_poll; |
int reliable; |
int dce_changed; |
int request; |
int fullrep_sent; |
u32 last_errors; /* last errors bit list */ |
u8 n391cnt; |
u8 txseq; /* TX sequence number */ |
u8 rxseq; /* RX sequence number */ |
}fr; |
struct { |
cisco_proto settings; |
struct timer_list timer; |
int last_poll; |
int up; |
u32 txseq; /* TX sequence number */ |
u32 rxseq; /* RX sequence number */ |
}cisco; |
struct { |
raw_hdlc_proto settings; |
}raw_hdlc; |
struct { |
struct ppp_device pppdev; |
struct ppp_device *syncppp_ptr; |
int (*old_change_mtu)(struct net_device *dev, |
int new_mtu); |
}ppp; |
}state; |
}hdlc_device; |
int hdlc_raw_ioctl(hdlc_device *hdlc, struct ifreq *ifr); |
int hdlc_raw_eth_ioctl(hdlc_device *hdlc, struct ifreq *ifr); |
int hdlc_cisco_ioctl(hdlc_device *hdlc, struct ifreq *ifr); |
int hdlc_ppp_ioctl(hdlc_device *hdlc, struct ifreq *ifr); |
int hdlc_fr_ioctl(hdlc_device *hdlc, struct ifreq *ifr); |
int hdlc_x25_ioctl(hdlc_device *hdlc, struct ifreq *ifr); |
/* Exported from hdlc.o */ |
/* Called by hardware driver when a user requests HDLC service */ |
int hdlc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd); |
/* Must be used by hardware driver on module startup/exit */ |
int register_hdlc_device(hdlc_device *hdlc); |
void unregister_hdlc_device(hdlc_device *hdlc); |
static __inline__ struct net_device* hdlc_to_dev(hdlc_device *hdlc) |
{ |
return &hdlc->netdev; |
} |
static __inline__ hdlc_device* dev_to_hdlc(struct net_device *dev) |
{ |
return (hdlc_device*)dev; |
} |
static __inline__ pvc_device* dev_to_pvc(struct net_device *dev) |
{ |
return (pvc_device*)dev->priv; |
} |
static __inline__ const char *hdlc_to_name(hdlc_device *hdlc) |
{ |
return hdlc_to_dev(hdlc)->name; |
} |
static __inline__ void debug_frame(const struct sk_buff *skb) |
{ |
int i; |
for (i=0; i < skb->len; i++) { |
if (i == 100) { |
printk("...\n"); |
return; |
} |
printk(" %02X", skb->data[i]); |
} |
printk("\n"); |
} |
/* Must be called by hardware driver when HDLC device is being opened */ |
int hdlc_open(hdlc_device *hdlc); |
/* Must be called by hardware driver when HDLC device is being closed */ |
void hdlc_close(hdlc_device *hdlc); |
/* Called by hardware driver when DCD line level changes */ |
void hdlc_set_carrier(int on, hdlc_device *hdlc); |
/* May be used by hardware driver to gain control over HDLC device */ |
static __inline__ void hdlc_proto_detach(hdlc_device *hdlc) |
{ |
if (hdlc->proto.detach) |
hdlc->proto.detach(hdlc); |
hdlc->proto.detach = NULL; |
} |
static __inline__ unsigned short hdlc_type_trans(struct sk_buff *skb, |
struct net_device *dev) |
{ |
hdlc_device *hdlc = dev_to_hdlc(skb->dev); |
if (hdlc->proto.type_trans) |
return hdlc->proto.type_trans(skb, dev); |
else |
return __constant_htons(ETH_P_HDLC); |
} |
#endif /* __KERNEL */ |
#endif /* __HDLC_H */ |
/shark/trunk/drivers/linuxc26/include/linux/acct.h |
---|
0,0 → 1,89 |
/* |
* 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 _LINUX_ACCT_H |
#define _LINUX_ACCT_H |
#include <linux/types.h> |
/* |
* comp_t is a 16-bit "floating" point number with a 3-bit base 8 |
* exponent and a 13-bit fraction. See linux/kernel/acct.c for the |
* specific encoding system used. |
*/ |
typedef __u16 comp_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; /* Accounting Flags */ |
/* |
* No binary format break with 2.0 - but when we hit 32bit uid we'll |
* have to bite one |
*/ |
__u16 ac_uid; /* Accounting Real User ID */ |
__u16 ac_gid; /* Accounting Real Group ID */ |
__u16 ac_tty; /* Accounting Control Terminal */ |
__u32 ac_btime; /* Accounting Process Creation Time */ |
comp_t ac_utime; /* Accounting User Time */ |
comp_t ac_stime; /* Accounting System Time */ |
comp_t ac_etime; /* Accounting Elapsed Time */ |
comp_t ac_mem; /* Accounting Average Memory Usage */ |
comp_t ac_io; /* Accounting Chars Transferred */ |
comp_t ac_rw; /* Accounting Blocks Read or Written */ |
comp_t ac_minflt; /* Accounting Minor Pagefaults */ |
comp_t ac_majflt; /* Accounting Major Pagefaults */ |
comp_t ac_swaps; /* Accounting Number of Swaps */ |
__u32 ac_exitcode; /* Accounting Exitcode */ |
char ac_comm[ACCT_COMM + 1]; /* Accounting Command Name */ |
char ac_pad[10]; /* Accounting Padding Bytes */ |
}; |
/* |
* 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 */ |
#define AHZ 100 |
#ifdef __KERNEL__ |
#include <linux/config.h> |
#ifdef CONFIG_BSD_PROCESS_ACCT |
struct super_block; |
extern void acct_auto_close(struct super_block *sb); |
extern void acct_process(long exitcode); |
#else |
#define acct_auto_close(x) do { } while (0) |
#define acct_process(x) do { } while (0) |
#endif |
#endif /* __KERNEL */ |
#endif /* _LINUX_ACCT_H */ |
/shark/trunk/drivers/linuxc26/include/linux/list.h |
---|
0,0 → 1,590 |
#ifndef _LINUX_LIST_H |
#define _LINUX_LIST_H |
#ifdef __KERNEL__ |
#include <linux/stddef.h> |
#include <linux/prefetch.h> |
#include <asm/system.h> |
/* |
* These are non-NULL pointers that will result in page faults |
* under normal circumstances, used to verify that nobody uses |
* non-initialized list entries. |
*/ |
#define LIST_POISON1 ((void *) 0x00100100) |
#define LIST_POISON2 ((void *) 0x00200200) |
/* |
* Simple doubly linked list implementation. |
* |
* Some of the internal functions ("__xxx") are useful when |
* manipulating whole lists rather than single entries, as |
* sometimes we already know the next/prev entries and we can |
* generate better code by using them directly rather than |
* using the generic single-entry routines. |
*/ |
struct list_head { |
struct list_head *next, *prev; |
}; |
#define LIST_HEAD_INIT(name) { &(name), &(name) } |
#define LIST_HEAD(name) \ |
struct list_head name = LIST_HEAD_INIT(name) |
#define INIT_LIST_HEAD(ptr) do { \ |
(ptr)->next = (ptr); (ptr)->prev = (ptr); \ |
} while (0) |
/* |
* Insert a new entry between two known consecutive entries. |
* |
* This is only for internal list manipulation where we know |
* the prev/next entries already! |
*/ |
static inline void __list_add(struct list_head *new, |
struct list_head *prev, |
struct list_head *next) |
{ |
next->prev = new; |
new->next = next; |
new->prev = prev; |
prev->next = new; |
} |
/** |
* list_add - add a new entry |
* @new: new entry to be added |
* @head: list head to add it after |
* |
* Insert a new entry after the specified head. |
* This is good for implementing stacks. |
*/ |
static inline void list_add(struct list_head *new, struct list_head *head) |
{ |
__list_add(new, head, head->next); |
} |
/** |
* list_add_tail - add a new entry |
* @new: new entry to be added |
* @head: list head to add it before |
* |
* Insert a new entry before the specified head. |
* This is useful for implementing queues. |
*/ |
static inline void list_add_tail(struct list_head *new, struct list_head *head) |
{ |
__list_add(new, head->prev, head); |
} |
/* |
* Insert a new entry between two known consecutive entries. |
* |
* This is only for internal list manipulation where we know |
* the prev/next entries already! |
*/ |
static __inline__ void __list_add_rcu(struct list_head * new, |
struct list_head * prev, |
struct list_head * next) |
{ |
new->next = next; |
new->prev = prev; |
smp_wmb(); |
next->prev = new; |
prev->next = new; |
} |
/** |
* list_add_rcu - add a new entry to rcu-protected list |
* @new: new entry to be added |
* @head: list head to add it after |
* |
* Insert a new entry after the specified head. |
* This is good for implementing stacks. |
*/ |
static __inline__ void list_add_rcu(struct list_head *new, struct list_head *head) |
{ |
__list_add_rcu(new, head, head->next); |
} |
/** |
* list_add_tail_rcu - add a new entry to rcu-protected list |
* @new: new entry to be added |
* @head: list head to add it before |
* |
* Insert a new entry before the specified head. |
* This is useful for implementing queues. |
*/ |
static __inline__ void list_add_tail_rcu(struct list_head *new, struct list_head *head) |
{ |
__list_add_rcu(new, head->prev, head); |
} |
/* |
* Delete a list entry by making the prev/next entries |
* point to each other. |
* |
* This is only for internal list manipulation where we know |
* the prev/next entries already! |
*/ |
static inline void __list_del(struct list_head * prev, struct list_head * next) |
{ |
next->prev = prev; |
prev->next = next; |
} |
/** |
* list_del - deletes entry from list. |
* @entry: the element to delete from the list. |
* Note: list_empty on entry does not return true after this, the entry is |
* in an undefined state. |
*/ |
static inline void list_del(struct list_head *entry) |
{ |
__list_del(entry->prev, entry->next); |
entry->next = LIST_POISON1; |
entry->prev = LIST_POISON2; |
} |
/** |
* list_del_rcu - deletes entry from list without re-initialization |
* @entry: the element to delete from the list. |
* |
* Note: list_empty on entry does not return true after this, |
* the entry is in an undefined state. It is useful for RCU based |
* lockfree traversal. |
* |
* In particular, it means that we can not poison the forward |
* pointers that may still be used for walking the list. |
*/ |
static inline void list_del_rcu(struct list_head *entry) |
{ |
__list_del(entry->prev, entry->next); |
entry->prev = LIST_POISON2; |
} |
/** |
* list_del_init - deletes entry from list and reinitialize it. |
* @entry: the element to delete from the list. |
*/ |
static inline void list_del_init(struct list_head *entry) |
{ |
__list_del(entry->prev, entry->next); |
INIT_LIST_HEAD(entry); |
} |
/** |
* list_move - delete from one list and add as another's head |
* @list: the entry to move |
* @head: the head that will precede our entry |
*/ |
static inline void list_move(struct list_head *list, struct list_head *head) |
{ |
__list_del(list->prev, list->next); |
list_add(list, head); |
} |
/** |
* list_move_tail - delete from one list and add as another's tail |
* @list: the entry to move |
* @head: the head that will follow our entry |
*/ |
static inline void list_move_tail(struct list_head *list, |
struct list_head *head) |
{ |
__list_del(list->prev, list->next); |
list_add_tail(list, head); |
} |
/** |
* list_empty - tests whether a list is empty |
* @head: the list to test. |
*/ |
static inline int list_empty(const struct list_head *head) |
{ |
return head->next == head; |
} |
/** |
* list_empty_careful - tests whether a list is |
* empty _and_ checks that no other CPU might be |
* in the process of still modifying either member |
* @head: the list to test. |
*/ |
static inline int list_empty_careful(const struct list_head *head) |
{ |
struct list_head *next = head->next; |
return (next == head) && (next == head->prev); |
} |
static inline void __list_splice(struct list_head *list, |
struct list_head *head) |
{ |
struct list_head *first = list->next; |
struct list_head *last = list->prev; |
struct list_head *at = head->next; |
first->prev = head; |
head->next = first; |
last->next = at; |
at->prev = last; |
} |
/** |
* list_splice - join two lists |
* @list: the new list to add. |
* @head: the place to add it in the first list. |
*/ |
static inline void list_splice(struct list_head *list, struct list_head *head) |
{ |
if (!list_empty(list)) |
__list_splice(list, head); |
} |
/** |
* list_splice_init - join two lists and reinitialise the emptied list. |
* @list: the new list to add. |
* @head: the place to add it in the first list. |
* |
* The list at @list is reinitialised |
*/ |
static inline void list_splice_init(struct list_head *list, |
struct list_head *head) |
{ |
if (!list_empty(list)) { |
__list_splice(list, head); |
INIT_LIST_HEAD(list); |
} |
} |
/** |
* list_entry - get the struct for this entry |
* @ptr: the &struct list_head pointer. |
* @type: the type of the struct this is embedded in. |
* @member: the name of the list_struct within the struct. |
*/ |
#define list_entry(ptr, type, member) \ |
container_of(ptr, type, member) |
/** |
* list_for_each - iterate over a list |
* @pos: the &struct list_head to use as a loop counter. |
* @head: the head for your list. |
*/ |
#define list_for_each(pos, head) \ |
for (pos = (head)->next, prefetch(pos->next); pos != (head); \ |
pos = pos->next, prefetch(pos->next)) |
/** |
* __list_for_each - iterate over a list |
* @pos: the &struct list_head to use as a loop counter. |
* @head: the head for your list. |
* |
* This variant differs from list_for_each() in that it's the |
* simplest possible list iteration code, no prefetching is done. |
* Use this for code that knows the list to be very short (empty |
* or 1 entry) most of the time. |
*/ |
#define __list_for_each(pos, head) \ |
for (pos = (head)->next; pos != (head); pos = pos->next) |
/** |
* list_for_each_prev - iterate over a list backwards |
* @pos: the &struct list_head to use as a loop counter. |
* @head: the head for your list. |
*/ |
#define list_for_each_prev(pos, head) \ |
for (pos = (head)->prev, prefetch(pos->prev); pos != (head); \ |
pos = pos->prev, prefetch(pos->prev)) |
/** |
* list_for_each_safe - iterate over a list safe against removal of list entry |
* @pos: the &struct list_head to use as a loop counter. |
* @n: another &struct list_head to use as temporary storage |
* @head: the head for your list. |
*/ |
#define list_for_each_safe(pos, n, head) \ |
for (pos = (head)->next, n = pos->next; pos != (head); \ |
pos = n, n = pos->next) |
/** |
* list_for_each_entry - iterate over list of given type |
* @pos: the type * to use as a loop counter. |
* @head: the head for your list. |
* @member: the name of the list_struct within the struct. |
*/ |
#define list_for_each_entry(pos, head, member) \ |
for (pos = list_entry((head)->next, typeof(*pos), member), \ |
prefetch(pos->member.next); \ |
&pos->member != (head); \ |
pos = list_entry(pos->member.next, typeof(*pos), member), \ |
prefetch(pos->member.next)) |
/** |
* list_for_each_entry_reverse - iterate backwards over list of given type. |
* @pos: the type * to use as a loop counter. |
* @head: the head for your list. |
* @member: the name of the list_struct within the struct. |
*/ |
#define list_for_each_entry_reverse(pos, head, member) \ |
for (pos = list_entry((head)->prev, typeof(*pos), member), \ |
prefetch(pos->member.prev); \ |
&pos->member != (head); \ |
pos = list_entry(pos->member.prev, typeof(*pos), member), \ |
prefetch(pos->member.prev)) |
/** |
* list_for_each_entry_continue - iterate over list of given type |
* continuing after existing point |
* @pos: the type * to use as a loop counter. |
* @head: the head for your list. |
* @member: the name of the list_struct within the struct. |
*/ |
#define list_for_each_entry_continue(pos, head, member) \ |
for (pos = list_entry(pos->member.next, typeof(*pos), member), \ |
prefetch(pos->member.next); \ |
&pos->member != (head); \ |
pos = list_entry(pos->member.next, typeof(*pos), member), \ |
prefetch(pos->member.next)) |
/** |
* list_for_each_entry_safe - iterate over list of given type safe against removal of list entry |
* @pos: the type * to use as a loop counter. |
* @n: another type * to use as temporary storage |
* @head: the head for your list. |
* @member: the name of the list_struct within the struct. |
*/ |
#define list_for_each_entry_safe(pos, n, head, member) \ |
for (pos = list_entry((head)->next, typeof(*pos), member), \ |
n = list_entry(pos->member.next, typeof(*pos), member); \ |
&pos->member != (head); \ |
pos = n, n = list_entry(n->member.next, typeof(*n), member)) |
/** |
* list_for_each_rcu - iterate over an rcu-protected list |
* @pos: the &struct list_head to use as a loop counter. |
* @head: the head for your list. |
*/ |
#define list_for_each_rcu(pos, head) \ |
for (pos = (head)->next, prefetch(pos->next); pos != (head); \ |
pos = pos->next, ({ smp_read_barrier_depends(); 0;}), prefetch(pos->next)) |
#define __list_for_each_rcu(pos, head) \ |
for (pos = (head)->next; pos != (head); \ |
pos = pos->next, ({ smp_read_barrier_depends(); 0;})) |
/** |
* list_for_each_safe_rcu - iterate over an rcu-protected list safe |
* against removal of list entry |
* @pos: the &struct list_head to use as a loop counter. |
* @n: another &struct list_head to use as temporary storage |
* @head: the head for your list. |
*/ |
#define list_for_each_safe_rcu(pos, n, head) \ |
for (pos = (head)->next, n = pos->next; pos != (head); \ |
pos = n, ({ smp_read_barrier_depends(); 0;}), n = pos->next) |
/** |
* list_for_each_entry_rcu - iterate over rcu list of given type |
* @pos: the type * to use as a loop counter. |
* @head: the head for your list. |
* @member: the name of the list_struct within the struct. |
*/ |
#define list_for_each_entry_rcu(pos, head, member) \ |
for (pos = list_entry((head)->next, typeof(*pos), member), \ |
prefetch(pos->member.next); \ |
&pos->member != (head); \ |
pos = list_entry(pos->member.next, typeof(*pos), member), \ |
({ smp_read_barrier_depends(); 0;}), \ |
prefetch(pos->member.next)) |
/** |
* list_for_each_continue_rcu - iterate over an rcu-protected list |
* continuing after existing point. |
* @pos: the &struct list_head to use as a loop counter. |
* @head: the head for your list. |
*/ |
#define list_for_each_continue_rcu(pos, head) \ |
for ((pos) = (pos)->next, prefetch((pos)->next); (pos) != (head); \ |
(pos) = (pos)->next, ({ smp_read_barrier_depends(); 0;}), prefetch((pos)->next)) |
/* |
* Double linked lists with a single pointer list head. |
* Mostly useful for hash tables where the two pointer list head is |
* too wasteful. |
* You lose the ability to access the tail in O(1). |
*/ |
struct hlist_head { |
struct hlist_node *first; |
}; |
struct hlist_node { |
struct hlist_node *next, **pprev; |
}; |
#define HLIST_HEAD_INIT { .first = NULL } |
#define HLIST_HEAD(name) struct hlist_head name = { .first = NULL } |
#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL) |
#define INIT_HLIST_NODE(ptr) ((ptr)->next = NULL, (ptr)->pprev = NULL) |
static __inline__ int hlist_unhashed(const struct hlist_node *h) |
{ |
return !h->pprev; |
} |
static __inline__ int hlist_empty(const struct hlist_head *h) |
{ |
return !h->first; |
} |
static __inline__ void __hlist_del(struct hlist_node *n) |
{ |
struct hlist_node *next = n->next; |
struct hlist_node **pprev = n->pprev; |
*pprev = next; |
if (next) |
next->pprev = pprev; |
} |
static __inline__ void hlist_del(struct hlist_node *n) |
{ |
__hlist_del(n); |
n->next = LIST_POISON1; |
n->pprev = LIST_POISON2; |
} |
/** |
* hlist_del_rcu - deletes entry from hash list without re-initialization |
* @n: the element to delete from the hash list. |
* |
* Note: list_unhashed() on entry does not return true after this, |
* the entry is in an undefined state. It is useful for RCU based |
* lockfree traversal. |
* |
* In particular, it means that we can not poison the forward |
* pointers that may still be used for walking the hash list. |
*/ |
static inline void hlist_del_rcu(struct hlist_node *n) |
{ |
__hlist_del(n); |
n->pprev = LIST_POISON2; |
} |
static __inline__ void hlist_del_init(struct hlist_node *n) |
{ |
if (n->pprev) { |
__hlist_del(n); |
INIT_HLIST_NODE(n); |
} |
} |
#define hlist_del_rcu_init hlist_del_init |
static __inline__ void hlist_add_head(struct hlist_node *n, struct hlist_head *h) |
{ |
struct hlist_node *first = h->first; |
n->next = first; |
if (first) |
first->pprev = &n->next; |
h->first = n; |
n->pprev = &h->first; |
} |
static __inline__ void hlist_add_head_rcu(struct hlist_node *n, struct hlist_head *h) |
{ |
struct hlist_node *first = h->first; |
n->next = first; |
n->pprev = &h->first; |
smp_wmb(); |
if (first) |
first->pprev = &n->next; |
h->first = n; |
} |
/* next must be != NULL */ |
static __inline__ void hlist_add_before(struct hlist_node *n, struct hlist_node *next) |
{ |
n->pprev = next->pprev; |
n->next = next; |
next->pprev = &n->next; |
*(n->pprev) = n; |
} |
static __inline__ void hlist_add_after(struct hlist_node *n, |
struct hlist_node *next) |
{ |
next->next = n->next; |
*(next->pprev) = n; |
n->next = next; |
} |
#define hlist_entry(ptr, type, member) container_of(ptr,type,member) |
/* Cannot easily do prefetch unfortunately */ |
#define hlist_for_each(pos, head) \ |
for (pos = (head)->first; pos && ({ prefetch(pos->next); 1; }); \ |
pos = pos->next) |
#define hlist_for_each_safe(pos, n, head) \ |
for (pos = (head)->first; n = pos ? pos->next : 0, pos; \ |
pos = n) |
/** |
* hlist_for_each_entry - iterate over list of given type |
* @tpos: the type * to use as a loop counter. |
* @pos: the &struct hlist_node to use as a loop counter. |
* @head: the head for your list. |
* @member: the name of the hlist_node within the struct. |
*/ |
#define hlist_for_each_entry(tpos, pos, head, member) \ |
for (pos = (head)->first; \ |
pos && ({ prefetch(pos->next); 1;}) && \ |
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ |
pos = pos->next) |
/** |
* hlist_for_each_entry_continue - iterate over a hlist continuing after existing point |
* @tpos: the type * to use as a loop counter. |
* @pos: the &struct hlist_node to use as a loop counter. |
* @member: the name of the hlist_node within the struct. |
*/ |
#define hlist_for_each_entry_continue(tpos, pos, member) \ |
for (pos = (pos)->next; \ |
pos && ({ prefetch(pos->next); 1;}) && \ |
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ |
pos = pos->next) |
/** |
* hlist_for_each_entry_from - iterate over a hlist continuing from existing point |
* @tpos: the type * to use as a loop counter. |
* @pos: the &struct hlist_node to use as a loop counter. |
* @member: the name of the hlist_node within the struct. |
*/ |
#define hlist_for_each_entry_from(tpos, pos, member) \ |
for (; pos && ({ prefetch(pos->next); 1;}) && \ |
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ |
pos = pos->next) |
/** |
* hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry |
* @tpos: the type * to use as a loop counter. |
* @pos: the &struct hlist_node to use as a loop counter. |
* @n: another &struct hlist_node to use as temporary storage |
* @head: the head for your list. |
* @member: the name of the hlist_node within the struct. |
*/ |
#define hlist_for_each_entry_safe(tpos, pos, n, head, member) \ |
for (pos = (head)->first; \ |
pos && ({ n = pos->next; 1; }) && \ |
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ |
pos = n) |
#else |
#warning "don't include kernel headers in userspace" |
#endif /* __KERNEL__ */ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/kdev_t.h |
---|
0,0 → 1,101 |
#ifndef _LINUX_KDEV_T_H |
#define _LINUX_KDEV_T_H |
#ifdef __KERNEL__ |
#define MINORBITS 20 |
#define MINORMASK ((1U << MINORBITS) - 1) |
#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS)) |
#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK)) |
#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi)) |
#define print_dev_t(buffer, dev) \ |
sprintf((buffer), "%u:%u\n", MAJOR(dev), MINOR(dev)) |
#define format_dev_t(buffer, dev) \ |
({ \ |
sprintf(buffer, "%u:%u", MAJOR(dev), MINOR(dev)); \ |
buffer; \ |
}) |
/* acceptable for old filesystems */ |
static inline int old_valid_dev(dev_t dev) |
{ |
return MAJOR(dev) < 256 && MINOR(dev) < 256; |
} |
static inline u16 old_encode_dev(dev_t dev) |
{ |
return (MAJOR(dev) << 8) | MINOR(dev); |
} |
static inline dev_t old_decode_dev(u16 val) |
{ |
return MKDEV((val >> 8) & 255, val & 255); |
} |
static inline int new_valid_dev(dev_t dev) |
{ |
return 1; |
} |
static inline u32 new_encode_dev(dev_t dev) |
{ |
unsigned major = MAJOR(dev); |
unsigned minor = MINOR(dev); |
return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12); |
} |
static inline dev_t new_decode_dev(u32 dev) |
{ |
unsigned major = (dev & 0xfff00) >> 8; |
unsigned minor = (dev & 0xff) | ((dev >> 12) & 0xfff00); |
return MKDEV(major, minor); |
} |
static inline int huge_valid_dev(dev_t dev) |
{ |
return 1; |
} |
static inline u64 huge_encode_dev(dev_t dev) |
{ |
return new_encode_dev(dev); |
} |
static inline dev_t huge_decode_dev(u64 dev) |
{ |
return new_decode_dev(dev); |
} |
static inline int sysv_valid_dev(dev_t dev) |
{ |
return MAJOR(dev) < (1<<14) && MINOR(dev) < (1<<18); |
} |
static inline u32 sysv_encode_dev(dev_t dev) |
{ |
return MINOR(dev) | (MAJOR(dev) << 18); |
} |
static inline unsigned sysv_major(u32 dev) |
{ |
return (dev >> 18) & 0x3fff; |
} |
static inline unsigned sysv_minor(u32 dev) |
{ |
return dev & 0x3ffff; |
} |
#else /* __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 |
/shark/trunk/drivers/linuxc26/include/linux/efs_fs_i.h |
---|
0,0 → 1,68 |
/* |
* efs_fs_i.h |
* |
* Copyright (c) 1999 Al Smith |
* |
* Portions derived from IRIX header files (c) 1988 Silicon Graphics |
*/ |
#ifndef __EFS_FS_I_H__ |
#define __EFS_FS_I_H__ |
typedef int32_t efs_block_t; |
typedef uint32_t efs_ino_t; |
#define EFS_DIRECTEXTENTS 12 |
/* |
* layout of an extent, in memory and on disk. 8 bytes exactly. |
*/ |
typedef union extent_u { |
unsigned char raw[8]; |
struct extent_s { |
unsigned int ex_magic:8; /* magic # (zero) */ |
unsigned int ex_bn:24; /* basic block */ |
unsigned int ex_length:8; /* numblocks in this extent */ |
unsigned int ex_offset:24; /* logical offset into file */ |
} cooked; |
} efs_extent; |
typedef struct edevs { |
short odev; |
unsigned int ndev; |
} efs_devs; |
/* |
* extent based filesystem inode as it appears on disk. The efs inode |
* is exactly 128 bytes long. |
*/ |
struct efs_dinode { |
u_short di_mode; /* mode and type of file */ |
short di_nlink; /* number of links to file */ |
u_short di_uid; /* owner's user id */ |
u_short di_gid; /* owner's group id */ |
int32_t di_size; /* number of bytes in file */ |
int32_t di_atime; /* time last accessed */ |
int32_t di_mtime; /* time last modified */ |
int32_t di_ctime; /* time created */ |
uint32_t di_gen; /* generation number */ |
short di_numextents; /* # of extents */ |
u_char di_version; /* version of inode */ |
u_char di_spare; /* spare - used by AFS */ |
union di_addr { |
efs_extent di_extents[EFS_DIRECTEXTENTS]; |
efs_devs di_dev; /* device for IFCHR/IFBLK */ |
} di_u; |
}; |
/* efs inode storage in memory */ |
struct efs_inode_info { |
int numextents; |
int lastextent; |
efs_extent extents[EFS_DIRECTEXTENTS]; |
struct inode vfs_inode; |
}; |
#endif /* __EFS_FS_I_H__ */ |
/shark/trunk/drivers/linuxc26/include/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 { |
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 |
/shark/trunk/drivers/linuxc26/include/linux/xattr_acl.h |
---|
0,0 → 1,50 |
/* |
File: linux/xattr_acl.h |
(extended attribute representation of access control lists) |
(C) 2000 Andreas Gruenbacher, <a.gruenbacher@computer.org> |
*/ |
#ifndef _LINUX_XATTR_ACL_H |
#define _LINUX_XATTR_ACL_H |
#include <linux/posix_acl.h> |
#define XATTR_NAME_ACL_ACCESS "system.posix_acl_access" |
#define XATTR_NAME_ACL_DEFAULT "system.posix_acl_default" |
#define XATTR_ACL_VERSION 0x0002 |
typedef struct { |
__u16 e_tag; |
__u16 e_perm; |
__u32 e_id; |
} xattr_acl_entry; |
typedef struct { |
__u32 a_version; |
xattr_acl_entry a_entries[0]; |
} xattr_acl_header; |
static inline size_t xattr_acl_size(int count) |
{ |
return sizeof(xattr_acl_header) + count * sizeof(xattr_acl_entry); |
} |
static inline int xattr_acl_count(size_t size) |
{ |
if (size < sizeof(xattr_acl_header)) |
return -1; |
size -= sizeof(xattr_acl_header); |
if (size % sizeof(xattr_acl_entry)) |
return -1; |
return size / sizeof(xattr_acl_entry); |
} |
struct posix_acl * posix_acl_from_xattr(const void *value, size_t size); |
int posix_acl_to_xattr(const struct posix_acl *acl, void *buffer, size_t size); |
#endif /* _LINUX_XATTR_ACL_H */ |
/shark/trunk/drivers/linuxc26/include/linux/sysctl.h |
---|
0,0 → 1,817 |
/* |
* sysctl.h: General linux system control interface |
* |
* Begun 24 March 1995, Stephen Tweedie |
* |
**************************************************************** |
**************************************************************** |
** |
** The values in this file are exported to user space via |
** the sysctl() binary interface. However this interface |
** is unstable and deprecated and will be removed in the future. |
** For a stable interface use /proc/sys. |
** |
**************************************************************** |
**************************************************************** |
*/ |
#ifndef _LINUX_SYSCTL_H |
#define _LINUX_SYSCTL_H |
#include <linux/kernel.h> |
#include <linux/types.h> |
#include <linux/list.h> |
#include <linux/compiler.h> |
struct file; |
#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: */ |
/* For internal pattern-matching use only: */ |
#ifdef __KERNEL__ |
#define CTL_ANY -1 /* Matches any name */ |
#define CTL_NONE 0 |
#endif |
enum |
{ |
CTL_KERN=1, /* General kernel info and control */ |
CTL_VM=2, /* VM management */ |
CTL_NET=3, /* Networking */ |
CTL_PROC=4, /* Process info */ |
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_BUS names: */ |
enum |
{ |
CTL_BUS_ISA=1 /* ISA */ |
}; |
/* 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, |
KERN_DOMAINNAME=8, |
KERN_CAP_BSET=14, /* int: capability bounding set */ |
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, |
KERN_SG_BIG_BUFF=29, |
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 hotplug policy agent */ |
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 */ |
}; |
/* 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_LOWER_ZONE_PROTECTION=20,/* Amount of protection of lower zones */ |
VM_MIN_FREE_KBYTES=21, /* Minimum free kilobytes to maintain */ |
}; |
/* 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, |
}; |
/* /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/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, |
}; |
/* /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/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, |
}; |
enum { |
NET_IPV4_ROUTE_FLUSH=1, |
NET_IPV4_ROUTE_MIN_DELAY=2, |
NET_IPV4_ROUTE_MAX_DELAY=3, |
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, |
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, |
}; |
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, |
}; |
/* /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, |
}; |
/* /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 |
}; |
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 |
}; |
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 |
}; |
/* /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 |
}; |
/* /proc/sys/net/ipx */ |
enum { |
NET_IPX_PPROP_BROADCASTING=1, |
NET_IPX_FORWARDING=2 |
}; |
/* /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 |
}; |
/* /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 |
}; |
/* /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_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, |
}; |
/* CTL_PROC names: */ |
/* 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 */ |
FS_XFS=17, /* struct: control xfs parameters */ |
}; |
/* /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, |
}; |
/* 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, |
}; |
/* /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/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 */ |
}; |
#ifdef __KERNEL__ |
extern asmlinkage long sys_sysctl(struct __sysctl_args __user *); |
extern void sysctl_init(void); |
typedef struct ctl_table ctl_table; |
typedef int ctl_handler (ctl_table *table, int __user *name, int nlen, |
void __user *oldval, size_t __user *oldlenp, |
void __user *newval, size_t newlen, |
void **context); |
typedef int proc_handler (ctl_table *ctl, int write, struct file * filp, |
void __user *buffer, size_t *lenp); |
extern int proc_dostring(ctl_table *, int, struct file *, |
void __user *, size_t *); |
extern int proc_dointvec(ctl_table *, int, struct file *, |
void __user *, size_t *); |
extern int proc_dointvec_bset(ctl_table *, int, struct file *, |
void __user *, size_t *); |
extern int proc_dointvec_minmax(ctl_table *, int, struct file *, |
void __user *, size_t *); |
extern int proc_dointvec_jiffies(ctl_table *, int, struct file *, |
void __user *, size_t *); |
extern int proc_doulongvec_minmax(ctl_table *, int, struct file *, |
void __user *, size_t *); |
extern int proc_doulongvec_ms_jiffies_minmax(ctl_table *table, int, |
struct file *, void __user *, size_t *); |
extern int do_sysctl (int __user *name, int nlen, |
void __user *oldval, size_t __user *oldlenp, |
void __user *newval, size_t newlen); |
extern int do_sysctl_strategy (ctl_table *table, |
int __user *name, int nlen, |
void __user *oldval, size_t __user *oldlenp, |
void __user *newval, size_t newlen, void ** context); |
extern ctl_handler sysctl_string; |
extern ctl_handler sysctl_intvec; |
extern ctl_handler sysctl_jiffies; |
/* |
* Register a set of sysctl names by calling register_sysctl_table |
* with an initialised array of ctl_table's. An entry with zero |
* ctl_name terminates the table. table->de will be set up by the |
* registration and need not be initialised in advance. |
* |
* sysctl names can be mirrored automatically under /proc/sys. The |
* procname supplied controls /proc naming. |
* |
* The table's mode will be honoured both for sys_sysctl(2) and |
* proc-fs access. |
* |
* Leaf nodes in the sysctl tree will be represented by a single file |
* under /proc; non-leaf nodes will be represented by directories. A |
* null procname disables /proc mirroring at this node. |
* |
* sysctl(2) can automatically manage read and write requests through |
* the sysctl table. The data and maxlen fields of the ctl_table |
* struct enable minimal validation of the values being written to be |
* performed, and the mode field allows minimal authentication. |
* |
* More sophisticated management can be enabled by the provision of a |
* strategy routine with the table entry. This will be called before |
* any automatic read or write of the data is performed. |
* |
* The strategy routine may return: |
* <0: Error occurred (error is passed to user process) |
* 0: OK - proceed with automatic read or write. |
* >0: OK - read or write has been done by the strategy routine, so |
* return immediately. |
* |
* There must be a proc_handler routine for any terminal nodes |
* mirrored under /proc/sys (non-terminals are handled by a built-in |
* directory handler). Several default handlers are available to |
* cover common cases. |
*/ |
/* A sysctl table is an array of struct ctl_table: */ |
struct ctl_table |
{ |
int ctl_name; /* Binary ID */ |
const char *procname; /* Text ID for /proc/sys, or zero */ |
void *data; |
int maxlen; |
mode_t mode; |
ctl_table *child; |
proc_handler *proc_handler; /* Callback for text formatting */ |
ctl_handler *strategy; /* Callback function for all r/w */ |
struct proc_dir_entry *de; /* /proc control block */ |
void *extra1; |
void *extra2; |
}; |
/* struct ctl_table_header is used to maintain dynamic lists of |
ctl_table trees. */ |
struct ctl_table_header |
{ |
ctl_table *ctl_table; |
struct list_head ctl_entry; |
}; |
struct ctl_table_header * register_sysctl_table(ctl_table * table, |
int insert_at_head); |
void unregister_sysctl_table(struct ctl_table_header * table); |
#else /* __KERNEL__ */ |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_SYSCTL_H */ |
/shark/trunk/drivers/linuxc26/include/linux/compat.h |
---|
0,0 → 1,101 |
#ifndef _LINUX_COMPAT_H |
#define _LINUX_COMPAT_H |
/* |
* These are the type definitions for the architecture specific |
* syscall compatibility layer. |
*/ |
#include <linux/config.h> |
#ifdef CONFIG_COMPAT |
#include <linux/stat.h> |
#include <linux/param.h> /* for HZ */ |
#include <asm/compat.h> |
#define compat_jiffies_to_clock_t(x) \ |
(((unsigned long)(x) * COMPAT_USER_HZ) / HZ) |
struct compat_itimerspec { |
struct compat_timespec it_interval; |
struct compat_timespec it_value; |
}; |
struct compat_utimbuf { |
compat_time_t actime; |
compat_time_t modtime; |
}; |
struct compat_itimerval { |
struct compat_timeval it_interval; |
struct compat_timeval it_value; |
}; |
struct compat_tms { |
compat_clock_t tms_utime; |
compat_clock_t tms_stime; |
compat_clock_t tms_cutime; |
compat_clock_t tms_cstime; |
}; |
#define _COMPAT_NSIG_WORDS (_COMPAT_NSIG / _COMPAT_NSIG_BPW) |
typedef struct { |
compat_sigset_word sig[_COMPAT_NSIG_WORDS]; |
} compat_sigset_t; |
extern int cp_compat_stat(struct kstat *, struct compat_stat *); |
extern int get_compat_timespec(struct timespec *, struct compat_timespec *); |
extern int put_compat_timespec(struct timespec *, struct compat_timespec *); |
struct compat_iovec { |
compat_uptr_t iov_base; |
compat_size_t iov_len; |
}; |
struct compat_rlimit { |
compat_ulong_t rlim_cur; |
compat_ulong_t rlim_max; |
}; |
struct compat_rusage { |
struct compat_timeval ru_utime; |
struct compat_timeval ru_stime; |
compat_long_t ru_maxrss; |
compat_long_t ru_ixrss; |
compat_long_t ru_idrss; |
compat_long_t ru_isrss; |
compat_long_t ru_minflt; |
compat_long_t ru_majflt; |
compat_long_t ru_nswap; |
compat_long_t ru_inblock; |
compat_long_t ru_oublock; |
compat_long_t ru_msgsnd; |
compat_long_t ru_msgrcv; |
compat_long_t ru_nsignals; |
compat_long_t ru_nvcsw; |
compat_long_t ru_nivcsw; |
}; |
struct compat_statfs64 { |
__u32 f_type; |
__u32 f_bsize; |
__u64 f_blocks; |
__u64 f_bfree; |
__u64 f_bavail; |
__u64 f_files; |
__u64 f_ffree; |
__kernel_fsid_t f_fsid; |
__u32 f_namelen; |
__u32 f_frsize; |
__u32 f_spare[5]; |
}; |
struct compat_dirent { |
u32 d_ino; |
compat_off_t d_off; |
u16 d_reclen; |
char d_name[256]; |
}; |
#endif /* CONFIG_COMPAT */ |
#endif /* _LINUX_COMPAT_H */ |
/shark/trunk/drivers/linuxc26/include/linux/selection.h |
---|
0,0 → 1,45 |
/* |
* selection.h |
* |
* Interface between console.c, tty_io.c, vt.c, vc_screen.c and selection.c |
*/ |
#ifndef _LINUX_SELECTION_H_ |
#define _LINUX_SELECTION_H_ |
#include <linux/tiocl.h> |
#include <linux/vt_buffer.h> |
extern int sel_cons; |
extern void clear_selection(void); |
extern int set_selection(const struct tiocl_selection *sel, struct tty_struct *tty, int user); |
extern int paste_selection(struct tty_struct *tty); |
extern int sel_loadlut(const unsigned long arg); |
extern int mouse_reporting(void); |
extern void mouse_report(struct tty_struct * tty, int butt, int mrx, int mry); |
#define video_num_columns (vc_cons[currcons].d->vc_cols) |
#define video_num_lines (vc_cons[currcons].d->vc_rows) |
#define video_size_row (vc_cons[currcons].d->vc_size_row) |
#define can_do_color (vc_cons[currcons].d->vc_can_do_color) |
extern int console_blanked; |
extern unsigned char color_table[]; |
extern int default_red[]; |
extern int default_grn[]; |
extern int default_blu[]; |
extern unsigned short *screen_pos(int currcons, int w_offset, int viewed); |
extern u16 screen_glyph(int currcons, int offset); |
extern void complement_pos(int currcons, int offset); |
extern void invert_screen(int currcons, int offset, int count, int shift); |
extern void getconsxy(int currcons, char *p); |
extern void putconsxy(int currcons, char *p); |
extern u16 vcs_scr_readw(int currcons, const u16 *org); |
extern void vcs_scr_writew(int currcons, u16 val, u16 *org); |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/cobalt-nvram.h |
---|
0,0 → 1,109 |
/* |
* $Id: cobalt-nvram.h,v 1.1 2004-01-28 15:24:59 giacomo Exp $ |
* cobalt-nvram.h : defines for the various fields in the cobalt NVRAM |
* |
* Copyright 2001,2002 Sun Microsystems, Inc. |
*/ |
#ifndef COBALT_NVRAM_H |
#define COBALT_NVRAM_H |
#include <linux/nvram.h> |
#define COBT_CMOS_INFO_MAX 0x7f /* top address allowed */ |
#define COBT_CMOS_BIOS_DRIVE_INFO 0x12 /* drive info would go here */ |
#define COBT_CMOS_CKS_START NVRAM_OFFSET(0x0e) |
#define COBT_CMOS_CKS_END NVRAM_OFFSET(0x7f) |
/* flag bytes - 16 flags for now, leave room for more */ |
#define COBT_CMOS_FLAG_BYTE_0 NVRAM_OFFSET(0x10) |
#define COBT_CMOS_FLAG_BYTE_1 NVRAM_OFFSET(0x11) |
/* flags in flag bytes - up to 16 */ |
#define COBT_CMOS_FLAG_MIN 0x0001 |
#define COBT_CMOS_CONSOLE_FLAG 0x0001 /* console on/off */ |
#define COBT_CMOS_DEBUG_FLAG 0x0002 /* ROM debug messages */ |
#define COBT_CMOS_AUTO_PROMPT_FLAG 0x0004 /* boot to ROM prompt? */ |
#define COBT_CMOS_CLEAN_BOOT_FLAG 0x0008 /* set by a clean shutdown */ |
#define COBT_CMOS_HW_NOPROBE_FLAG 0x0010 /* go easy on the probing */ |
#define COBT_CMOS_SYSFAULT_FLAG 0x0020 /* system fault detected */ |
#define COBT_CMOS_OOPSPANIC_FLAG 0x0040 /* panic on oops */ |
#define COBT_CMOS_DELAY_CACHE_FLAG 0x0080 /* delay cache initialization */ |
#define COBT_CMOS_NOLOGO_FLAG 0x0100 /* hide "C" logo @ boot */ |
#define COBT_CMOS_VERSION_FLAG 0x0200 /* the version field is valid */ |
#define COBT_CMOS_FLAG_MAX 0x0200 |
/* leave byte 0x12 blank - Linux looks for drive info here */ |
/* CMOS structure version, valid if COBT_CMOS_VERSION_FLAG is true */ |
#define COBT_CMOS_VERSION NVRAM_OFFSET(0x13) |
#define COBT_CMOS_VER_BTOCODE 1 /* min. version needed for btocode */ |
/* index of default boot method */ |
#define COBT_CMOS_BOOT_METHOD NVRAM_OFFSET(0x20) |
#define COBT_CMOS_BOOT_METHOD_DISK 0 |
#define COBT_CMOS_BOOT_METHOD_ROM 1 |
#define COBT_CMOS_BOOT_METHOD_NET 2 |
#define COBT_CMOS_BOOT_DEV_MIN NVRAM_OFFSET(0x21) |
/* major #, minor # of first through fourth boot device */ |
#define COBT_CMOS_BOOT_DEV0_MAJ NVRAM_OFFSET(0x21) |
#define COBT_CMOS_BOOT_DEV0_MIN NVRAM_OFFSET(0x22) |
#define COBT_CMOS_BOOT_DEV1_MAJ NVRAM_OFFSET(0x23) |
#define COBT_CMOS_BOOT_DEV1_MIN NVRAM_OFFSET(0x24) |
#define COBT_CMOS_BOOT_DEV2_MAJ NVRAM_OFFSET(0x25) |
#define COBT_CMOS_BOOT_DEV2_MIN NVRAM_OFFSET(0x26) |
#define COBT_CMOS_BOOT_DEV3_MAJ NVRAM_OFFSET(0x27) |
#define COBT_CMOS_BOOT_DEV3_MIN NVRAM_OFFSET(0x28) |
#define COBT_CMOS_BOOT_DEV_MAX NVRAM_OFFSET(0x28) |
/* checksum of bytes 0xe-0x7f */ |
#define COBT_CMOS_CHECKSUM NVRAM_OFFSET(0x2e) |
/* running uptime counter, units of 5 minutes (32 bits =~ 41000 years) */ |
#define COBT_CMOS_UPTIME_0 NVRAM_OFFSET(0x30) |
#define COBT_CMOS_UPTIME_1 NVRAM_OFFSET(0x31) |
#define COBT_CMOS_UPTIME_2 NVRAM_OFFSET(0x32) |
#define COBT_CMOS_UPTIME_3 NVRAM_OFFSET(0x33) |
/* count of successful boots (32 bits) */ |
#define COBT_CMOS_BOOTCOUNT_0 NVRAM_OFFSET(0x38) |
#define COBT_CMOS_BOOTCOUNT_1 NVRAM_OFFSET(0x39) |
#define COBT_CMOS_BOOTCOUNT_2 NVRAM_OFFSET(0x3a) |
#define COBT_CMOS_BOOTCOUNT_3 NVRAM_OFFSET(0x3b) |
/* 13 bytes: system serial number, same as on the back of the system */ |
#define COBT_CMOS_SYS_SERNUM_LEN 13 |
#define COBT_CMOS_SYS_SERNUM_0 NVRAM_OFFSET(0x40) |
#define COBT_CMOS_SYS_SERNUM_1 NVRAM_OFFSET(0x41) |
#define COBT_CMOS_SYS_SERNUM_2 NVRAM_OFFSET(0x42) |
#define COBT_CMOS_SYS_SERNUM_3 NVRAM_OFFSET(0x43) |
#define COBT_CMOS_SYS_SERNUM_4 NVRAM_OFFSET(0x44) |
#define COBT_CMOS_SYS_SERNUM_5 NVRAM_OFFSET(0x45) |
#define COBT_CMOS_SYS_SERNUM_6 NVRAM_OFFSET(0x46) |
#define COBT_CMOS_SYS_SERNUM_7 NVRAM_OFFSET(0x47) |
#define COBT_CMOS_SYS_SERNUM_8 NVRAM_OFFSET(0x48) |
#define COBT_CMOS_SYS_SERNUM_9 NVRAM_OFFSET(0x49) |
#define COBT_CMOS_SYS_SERNUM_10 NVRAM_OFFSET(0x4a) |
#define COBT_CMOS_SYS_SERNUM_11 NVRAM_OFFSET(0x4b) |
#define COBT_CMOS_SYS_SERNUM_12 NVRAM_OFFSET(0x4c) |
/* checksum for serial num - 1 byte */ |
#define COBT_CMOS_SYS_SERNUM_CSUM NVRAM_OFFSET(0x4f) |
#define COBT_CMOS_ROM_REV_MAJ NVRAM_OFFSET(0x50) |
#define COBT_CMOS_ROM_REV_MIN NVRAM_OFFSET(0x51) |
#define COBT_CMOS_ROM_REV_REV NVRAM_OFFSET(0x52) |
#define COBT_CMOS_BTO_CODE_0 NVRAM_OFFSET(0x53) |
#define COBT_CMOS_BTO_CODE_1 NVRAM_OFFSET(0x54) |
#define COBT_CMOS_BTO_CODE_2 NVRAM_OFFSET(0x55) |
#define COBT_CMOS_BTO_CODE_3 NVRAM_OFFSET(0x56) |
#define COBT_CMOS_BTO_IP_CSUM NVRAM_OFFSET(0x57) |
#define COBT_CMOS_BTO_IP_0 NVRAM_OFFSET(0x58) |
#define COBT_CMOS_BTO_IP_1 NVRAM_OFFSET(0x59) |
#define COBT_CMOS_BTO_IP_2 NVRAM_OFFSET(0x5a) |
#define COBT_CMOS_BTO_IP_3 NVRAM_OFFSET(0x5b) |
#endif /* COBALT_NVRAM_H */ |
/shark/trunk/drivers/linuxc26/include/linux/jffs.h |
---|
0,0 → 1,225 |
/* |
* JFFS -- Journalling Flash File System, Linux implementation. |
* |
* Copyright (C) 1999, 2000 Axis Communications AB. |
* |
* Created by Finn Hakansson <finn@axis.com>. |
* |
* This 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. |
* |
* $Id: jffs.h,v 1.1 2004-01-28 15:25:47 giacomo Exp $ |
* |
* Ported to Linux 2.3.x and MTD: |
* Copyright (C) 2000 Alexander Larsson (alex@cendio.se), Cendio Systems AB |
* |
*/ |
#ifndef __LINUX_JFFS_H__ |
#define __LINUX_JFFS_H__ |
#include <linux/types.h> |
#include <linux/completion.h> |
#define JFFS_VERSION_STRING "1.0" |
/* This is a magic number that is used as an identification number for |
this file system. It is written to the super_block structure. */ |
#define JFFS_MAGIC_SB_BITMASK 0x07c0 /* 1984 */ |
/* This is a magic number that every on-flash raw inode begins with. */ |
#define JFFS_MAGIC_BITMASK 0x34383931 /* "1984" */ |
/* These two bitmasks are the valid ones for the flash memories we have |
for the moment. */ |
#define JFFS_EMPTY_BITMASK 0xffffffff |
#define JFFS_DIRTY_BITMASK 0x00000000 |
/* This is the inode number of the root node. */ |
#define JFFS_MIN_INO 1 |
/* How many slots in the file hash table should we have? */ |
#define JFFS_HASH_SIZE 40 |
/* Don't use more than 254 bytes as the maximum allowed length of a file's |
name due to errors that could occur during the scanning of the flash |
memory. In fact, a name length of 255 or 0xff, could be the result of |
an uncompleted write. For instance, if a raw inode is written to the |
flash memory and there is a power lossage just before the length of |
the name is written, the length 255 would be interpreted as an illegal |
value. */ |
#define JFFS_MAX_NAME_LEN 254 |
/* Commands for ioctl(). */ |
#define JFFS_IOCTL_MAGIC 't' |
#define JFFS_PRINT_HASH _IO(JFFS_IOCTL_MAGIC, 90) |
#define JFFS_PRINT_TREE _IO(JFFS_IOCTL_MAGIC, 91) |
#define JFFS_GET_STATUS _IO(JFFS_IOCTL_MAGIC, 92) |
/* XXX: This is something that we should try to get rid of in the future. */ |
#define JFFS_MODIFY_INODE 0x01 |
#define JFFS_MODIFY_NAME 0x02 |
#define JFFS_MODIFY_DATA 0x04 |
#define JFFS_MODIFY_EXIST 0x08 |
struct jffs_control; |
/* The JFFS raw inode structure: Used for storage on physical media. */ |
/* Perhaps the uid, gid, atime, mtime and ctime members should have |
more space due to future changes in the Linux kernel. Anyhow, since |
a user of this filesystem probably have to fix a large number of |
other things, we have decided to not be forward compatible. */ |
struct jffs_raw_inode |
{ |
__u32 magic; /* A constant magic number. */ |
__u32 ino; /* Inode number. */ |
__u32 pino; /* Parent's inode number. */ |
__u32 version; /* Version number. */ |
__u32 mode; /* The file's type or mode. */ |
__u16 uid; /* The file's owner. */ |
__u16 gid; /* The file's group. */ |
__u32 atime; /* Last access time. */ |
__u32 mtime; /* Last modification time. */ |
__u32 ctime; /* Creation time. */ |
__u32 offset; /* Where to begin to write. */ |
__u32 dsize; /* Size of the node's data. */ |
__u32 rsize; /* How much are going to be replaced? */ |
__u8 nsize; /* Name length. */ |
__u8 nlink; /* Number of links. */ |
__u8 spare : 6; /* For future use. */ |
__u8 rename : 1; /* Rename to a name of an already existing file? */ |
__u8 deleted : 1; /* Has this file been deleted? */ |
__u8 accurate; /* The inode is obsolete if accurate == 0. */ |
__u32 dchksum; /* Checksum for the data. */ |
__u16 nchksum; /* Checksum for the name. */ |
__u16 chksum; /* Checksum for the raw inode. */ |
}; |
/* Define the offset of the accurate byte in struct jffs_raw_inode. */ |
#define JFFS_RAW_INODE_ACCURATE_OFFSET (sizeof(struct jffs_raw_inode) \ |
- 2 * sizeof(__u32) - sizeof(__u8)) |
/* Define the offset of the chksum member in struct jffs_raw_inode. */ |
#define JFFS_RAW_INODE_CHKSUM_OFFSET (sizeof(struct jffs_raw_inode) \ |
- sizeof(__u16)) |
/* Define the offset of the dchksum member in struct jffs_raw_inode. */ |
#define JFFS_RAW_INODE_DCHKSUM_OFFSET (sizeof(struct jffs_raw_inode) \ |
- sizeof(__u16) - sizeof(__u16) \ |
- sizeof(__u32)) |
/* The RAM representation of the node. The names of pointers to |
jffs_nodes are very often just called `n' in the source code. */ |
struct jffs_node |
{ |
__u32 ino; /* Inode number. */ |
__u32 version; /* Version number. */ |
__u32 data_offset; /* Logic location of the data to insert. */ |
__u32 data_size; /* The amount of data this node inserts. */ |
__u32 removed_size; /* The amount of data that this node removes. */ |
__u32 fm_offset; /* Physical location of the data in the actual |
flash memory data chunk. */ |
__u8 name_size; /* Size of the name. */ |
struct jffs_fm *fm; /* Physical memory information. */ |
struct jffs_node *version_prev; |
struct jffs_node *version_next; |
struct jffs_node *range_prev; |
struct jffs_node *range_next; |
}; |
/* The RAM representation of a file (plain files, directories, |
links, etc.). Pointers to jffs_files are normally named `f' |
in the JFFS source code. */ |
struct jffs_file |
{ |
__u32 ino; /* Inode number. */ |
__u32 pino; /* Parent's inode number. */ |
__u32 mode; /* file_type, mode */ |
__u16 uid; /* owner */ |
__u16 gid; /* group */ |
__u32 atime; /* Last access time. */ |
__u32 mtime; /* Last modification time. */ |
__u32 ctime; /* Creation time. */ |
__u8 nsize; /* Name length. */ |
__u8 nlink; /* Number of links. */ |
__u8 deleted; /* Has this file been deleted? */ |
char *name; /* The name of this file; NULL-terminated. */ |
__u32 size; /* The total size of the file's data. */ |
__u32 highest_version; /* The highest version number of this file. */ |
struct jffs_control *c; |
struct jffs_file *parent; /* Reference to the parent directory. */ |
struct jffs_file *children; /* Always NULL for plain files. */ |
struct jffs_file *sibling_prev; /* Siblings in the same directory. */ |
struct jffs_file *sibling_next; |
struct list_head hash; /* hash list. */ |
struct jffs_node *range_head; /* The final data. */ |
struct jffs_node *range_tail; /* The first data. */ |
struct jffs_node *version_head; /* The youngest node. */ |
struct jffs_node *version_tail; /* The oldest node. */ |
}; |
/* This is just a definition of a simple list used for keeping track of |
files deleted due to a rename. This list is only used during the |
mounting of the file system and only if there have been rename operations |
earlier. */ |
struct jffs_delete_list |
{ |
__u32 ino; |
struct jffs_delete_list *next; |
}; |
/* A struct for the overall file system control. Pointers to |
jffs_control structs are named `c' in the source code. */ |
struct jffs_control |
{ |
struct super_block *sb; /* Reference to the VFS super block. */ |
struct jffs_file *root; /* The root directory file. */ |
struct list_head *hash; /* Hash table for finding files by ino. */ |
struct jffs_fmcontrol *fmc; /* Flash memory control structure. */ |
__u32 hash_len; /* The size of the hash table. */ |
__u32 next_ino; /* Next inode number to use for new files. */ |
__u16 building_fs; /* Is the file system being built right now? */ |
struct jffs_delete_list *delete_list; /* Track deleted files. */ |
pid_t thread_pid; /* GC thread's PID */ |
struct task_struct *gc_task; /* GC task struct */ |
struct completion gc_thread_comp; /* GC thread exit mutex */ |
__u32 gc_minfree_threshold; /* GC trigger thresholds */ |
__u32 gc_maxdirty_threshold; |
}; |
/* Used to inform about flash status. */ |
struct jffs_flash_status |
{ |
__u32 size; |
__u32 used; |
__u32 dirty; |
__u32 begin; |
__u32 end; |
}; |
/* This stuff could be used for finding memory leaks. */ |
#define JFFS_MEMORY_DEBUG 0 |
extern long no_jffs_node; |
extern long no_jffs_file; |
#if defined(JFFS_MEMORY_DEBUG) && JFFS_MEMORY_DEBUG |
extern long no_jffs_control; |
extern long no_jffs_raw_inode; |
extern long no_jffs_node_ref; |
extern long no_jffs_fm; |
extern long no_jffs_fmcontrol; |
extern long no_hash; |
extern long no_name; |
#define DJM(x) x |
#else |
#define DJM(x) |
#endif |
#endif /* __LINUX_JFFS_H__ */ |
/shark/trunk/drivers/linuxc26/include/linux/netfilter_x25.h |
---|
0,0 → 1,15 |
#ifndef __LINUX_X25_NETFILTER_H |
#define __LINUX_X25_NETFILTER_H |
/* X25-specific defines for netfilter. Complete me sometime. |
* (C)1998 Rusty Russell -- This code is GPL. |
*/ |
#include <linux/netfilter.h> |
/* Hooks */ |
#define NF_X25_INPUT 0 |
#define NF_X25_FORWARD 1 |
#define NF_X25_OUTPUT 2 |
#endif /*__LINUX_X25_NETFILTER_H*/ |
/shark/trunk/drivers/linuxc26/include/linux/kd.h |
---|
0,0 → 1,168 |
#ifndef _LINUX_KD_H |
#define _LINUX_KD_H |
#include <linux/types.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 *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 *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 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 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 *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] */ |
#ifdef __KERNEL__ |
#define KD_FONT_FLAG_OLD 0x80000000 /* Invoked via old interface [compat] */ |
#endif |
/* 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 /* _LINUX_KD_H */ |
/shark/trunk/drivers/linuxc26/include/linux/consolemap.h |
---|
0,0 → 1,15 |
/* |
* consolemap.h |
* |
* Interface between console.c, selection.c and consolemap.c |
*/ |
#define LAT1_MAP 0 |
#define GRAF_MAP 1 |
#define IBMPC_MAP 2 |
#define USER_MAP 3 |
struct vc_data; |
extern unsigned char inverse_translate(struct vc_data *conp, int glyph); |
extern unsigned short *set_translate(int m,int currcons); |
extern int conv_uni_to_pc(struct vc_data *conp, long ucs); |
/shark/trunk/drivers/linuxc26/include/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 balence (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 |
/shark/trunk/drivers/linuxc26/include/linux/seqlock.h |
---|
0,0 → 1,175 |
#ifndef __LINUX_SEQLOCK_H |
#define __LINUX_SEQLOCK_H |
/* |
* Reader/writer consistent mechanism without starving writers. This type of |
* lock for data where the reader wants a consitent set of information |
* and is willing to retry if the information changes. Readers never |
* block but they may have to retry if a writer is in |
* progress. Writers do not wait for readers. |
* |
* This is not as cache friendly as brlock. Also, this will not work |
* for data that contains pointers, because any writer could |
* invalidate a pointer that a reader was following. |
* |
* Expected reader usage: |
* do { |
* seq = read_seqbegin(&foo); |
* ... |
* } while (read_seqretry(&foo, seq)); |
* |
* |
* On non-SMP the spin locks disappear but the writer still needs |
* to increment the sequence variables because an interrupt routine could |
* change the state of the data. |
* |
* Based on x86_64 vsyscall gettimeofday |
* by Keith Owens and Andrea Arcangeli |
*/ |
#include <linux/config.h> |
#include <linux/spinlock.h> |
#include <linux/preempt.h> |
typedef struct { |
unsigned sequence; |
spinlock_t lock; |
} seqlock_t; |
/* |
* These macros triggered gcc-3.x compile-time problems. We think these are |
* OK now. Be cautious. |
*/ |
#define SEQLOCK_UNLOCKED { 0, SPIN_LOCK_UNLOCKED } |
#define seqlock_init(x) do { *(x) = (seqlock_t) SEQLOCK_UNLOCKED; } while (0) |
/* Lock out other writers and update the count. |
* Acts like a normal spin_lock/unlock. |
* Don't need preempt_disable() because that is in the spin_lock already. |
*/ |
static inline void write_seqlock(seqlock_t *sl) |
{ |
spin_lock(&sl->lock); |
++sl->sequence; |
smp_wmb(); |
} |
static inline void write_sequnlock(seqlock_t *sl) |
{ |
smp_wmb(); |
sl->sequence++; |
spin_unlock(&sl->lock); |
} |
static inline int write_tryseqlock(seqlock_t *sl) |
{ |
int ret = spin_trylock(&sl->lock); |
if (ret) { |
++sl->sequence; |
smp_wmb(); |
} |
return ret; |
} |
/* Start of read calculation -- fetch last complete writer token */ |
static inline unsigned read_seqbegin(const seqlock_t *sl) |
{ |
unsigned ret = sl->sequence; |
smp_rmb(); |
return ret; |
} |
/* Test if reader processed invalid data. |
* If initial values is odd, |
* then writer had already started when section was entered |
* If sequence value changed |
* then writer changed data while in section |
* |
* Using xor saves one conditional branch. |
*/ |
static inline int read_seqretry(const seqlock_t *sl, unsigned iv) |
{ |
smp_rmb(); |
return (iv & 1) | (sl->sequence ^ iv); |
} |
/* |
* Version using sequence counter only. |
* This can be used when code has its own mutex protecting the |
* updating starting before the write_seqcountbeqin() and ending |
* after the write_seqcount_end(). |
*/ |
typedef struct seqcount { |
unsigned sequence; |
} seqcount_t; |
#define SEQCNT_ZERO { 0 } |
#define seqcount_init(x) do { *(x) = (seqcount_t) SEQCNT_ZERO; } while (0) |
/* Start of read using pointer to a sequence counter only. */ |
static inline unsigned read_seqcount_begin(const seqcount_t *s) |
{ |
unsigned ret = s->sequence; |
smp_rmb(); |
return ret; |
} |
/* Test if reader processed invalid data. |
* Equivalent to: iv is odd or sequence number has changed. |
* (iv & 1) || (*s != iv) |
* Using xor saves one conditional branch. |
*/ |
static inline int read_seqcount_retry(const seqcount_t *s, unsigned iv) |
{ |
smp_rmb(); |
return (iv & 1) | (s->sequence ^ iv); |
} |
/* |
* Sequence counter only version assumes that callers are using their |
* own mutexing. |
*/ |
static inline void write_seqcount_begin(seqcount_t *s) |
{ |
s->sequence++; |
smp_wmb(); |
} |
static inline void write_seqcount_end(seqcount_t *s) |
{ |
smp_wmb(); |
s->sequence++; |
} |
/* |
* Possible sw/hw IRQ protected versions of the interfaces. |
*/ |
#define write_seqlock_irqsave(lock, flags) \ |
do { local_irq_save(flags); write_seqlock(lock); } while (0) |
#define write_seqlock_irq(lock) \ |
do { local_irq_disable(); write_seqlock(lock); } while (0) |
#define write_seqlock_bh(lock) \ |
do { local_bh_disable(); write_seqlock(lock); } while (0) |
#define write_sequnlock_irqrestore(lock, flags) \ |
do { write_sequnlock(lock); local_irq_restore(flags); } while(0) |
#define write_sequnlock_irq(lock) \ |
do { write_sequnlock(lock); local_irq_enable(); } while(0) |
#define write_sequnlock_bh(lock) \ |
do { write_sequnlock(lock); local_bh_enable(); } while(0) |
#define read_seqbegin_irqsave(lock, flags) \ |
({ local_irq_save(flags); read_seqbegin(lock); }) |
#define read_seqretry_irqrestore(lock, iv, flags) \ |
({ \ |
int ret = read_seqretry(lock, iv); \ |
local_irq_restore(flags); \ |
ret; \ |
}) |
#endif /* __LINUX_SEQLOCK_H */ |
/shark/trunk/drivers/linuxc26/include/linux/nbd.h |
---|
0,0 → 1,85 |
/* |
* 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. |
*/ |
#ifndef LINUX_NBD_H |
#define LINUX_NBD_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 ) |
enum { |
NBD_CMD_READ = 0, |
NBD_CMD_WRITE = 1, |
NBD_CMD_DISC = 2 |
}; |
#define nbd_cmd(req) ((req)->cmd[0]) |
#define MAX_NBD 128 |
/* Define PARANOIA to include extra sanity checking code in here & driver */ |
#define PARANOIA |
struct nbd_device { |
int flags; |
int harderror; /* Code of hard error */ |
#define NBD_READ_ONLY 0x0001 |
#define NBD_WRITE_NOCHK 0x0002 |
struct socket * sock; |
struct file * file; /* If == NULL, device is not ready, yet */ |
#ifdef PARANOIA |
int magic; /* FIXME: not if debugging is off */ |
#endif |
spinlock_t queue_lock; |
struct list_head queue_head;/* Requests are added here... */ |
struct semaphore tx_lock; |
struct gendisk *disk; |
int blksize; |
u64 bytesize; |
}; |
/* This now IS in some kind of include file... */ |
/* These are send over network in request/reply magic field */ |
#define NBD_REQUEST_MAGIC 0x25609513 |
#define NBD_REPLY_MAGIC 0x67446698 |
/* Do *not* use magics: 0x12560953 0x96744668. */ |
/* |
* This is packet used for communication between client and |
* server. All data are in network byte order. |
*/ |
struct nbd_request { |
u32 magic; |
u32 type; /* == READ || == WRITE */ |
char handle[8]; |
u64 from; |
u32 len; |
} |
#ifdef __GNUC__ |
__attribute__ ((packed)) |
#endif |
; |
struct nbd_reply { |
u32 magic; |
u32 error; /* 0 = ok, else error */ |
char handle[8]; /* handle you got from request */ |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/qic117.h |
---|
0,0 → 1,290 |
#ifndef _QIC117_H |
#define _QIC117_H |
/* |
* Copyright (C) 1993-1996 Bas Laarhoven, |
* (C) 1997 Claus-Justus Heine. |
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. |
You should have received a copy of the GNU General Public License |
along with this program; see the file COPYING. If not, write to |
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. |
* |
* $Source: /home/fabio/w/shark/sharkcvs/CVSROOT/shark/drivers/linuxc26/include/linux/qic117.h,v $ |
* $Revision: 1.1 $ |
* $Date: 2004-01-28 15:26:24 $ |
* |
* This file contains QIC-117 spec. related definitions for the |
* QIC-40/80/3010/3020 floppy-tape driver "ftape" for Linux. |
* |
* These data were taken from the Quarter-Inch Cartridge |
* Drive Standards, Inc. document titled: |
* `Common Command Set Interface Specification for Flexible |
* Disk Controller Based Minicartridge Tape Drives' |
* document QIC-117 Revision J, 28 Aug 96. |
* For more information, contact: |
* Quarter-Inch Cartridge Drive Standards, Inc. |
* 311 East Carrillo Street |
* Santa Barbara, California 93101 |
* Telephone (805) 963-3853 |
* Fax (805) 962-1541 |
* WWW http://www.qic.org |
* |
* Current QIC standard revisions (of interest) are: |
* QIC-40-MC, Rev. M, 2 Sep 92. |
* QIC-80-MC, Rev. N, 20 Mar 96. |
* QIC-80-MC, Rev. K, 15 Dec 94. |
* QIC-113, Rev. G, 15 Jun 95. |
* QIC-117, Rev. J, 28 Aug 96. |
* QIC-122, Rev. B, 6 Mar 91. |
* QIC-130, Rev. C, 2 Sep 92. |
* QIC-3010-MC, Rev. F, 14 Jun 95. |
* QIC-3020-MC, Rev. G, 31 Aug 95. |
* QIC-CRF3, Rev. B, 15 Jun 95. |
* */ |
/* |
* QIC-117 common command set rev. J. |
* These commands are sent to the tape unit |
* as number of pulses over the step line. |
*/ |
typedef enum { |
QIC_NO_COMMAND = 0, |
QIC_RESET = 1, |
QIC_REPORT_NEXT_BIT = 2, |
QIC_PAUSE = 3, |
QIC_MICRO_STEP_PAUSE = 4, |
QIC_ALTERNATE_TIMEOUT = 5, |
QIC_REPORT_DRIVE_STATUS = 6, |
QIC_REPORT_ERROR_CODE = 7, |
QIC_REPORT_DRIVE_CONFIGURATION = 8, |
QIC_REPORT_ROM_VERSION = 9, |
QIC_LOGICAL_FORWARD = 10, |
QIC_PHYSICAL_REVERSE = 11, |
QIC_PHYSICAL_FORWARD = 12, |
QIC_SEEK_HEAD_TO_TRACK = 13, |
QIC_SEEK_LOAD_POINT = 14, |
QIC_ENTER_FORMAT_MODE = 15, |
QIC_WRITE_REFERENCE_BURST = 16, |
QIC_ENTER_VERIFY_MODE = 17, |
QIC_STOP_TAPE = 18, |
/* commands 19-20: reserved */ |
QIC_MICRO_STEP_HEAD_UP = 21, |
QIC_MICRO_STEP_HEAD_DOWN = 22, |
QIC_SOFT_SELECT = 23, |
QIC_SOFT_DESELECT = 24, |
QIC_SKIP_REVERSE = 25, |
QIC_SKIP_FORWARD = 26, |
QIC_SELECT_RATE = 27, |
/* command 27, in ccs2: Select Rate or Format */ |
QIC_ENTER_DIAGNOSTIC_1 = 28, |
QIC_ENTER_DIAGNOSTIC_2 = 29, |
QIC_ENTER_PRIMARY_MODE = 30, |
/* command 31: vendor unique */ |
QIC_REPORT_VENDOR_ID = 32, |
QIC_REPORT_TAPE_STATUS = 33, |
QIC_SKIP_EXTENDED_REVERSE = 34, |
QIC_SKIP_EXTENDED_FORWARD = 35, |
QIC_CALIBRATE_TAPE_LENGTH = 36, |
QIC_REPORT_FORMAT_SEGMENTS = 37, |
QIC_SET_FORMAT_SEGMENTS = 38, |
/* commands 39-45: reserved */ |
QIC_PHANTOM_SELECT = 46, |
QIC_PHANTOM_DESELECT = 47 |
} qic117_cmd_t; |
typedef enum { |
discretional = 0, required, ccs1, ccs2 |
} qic_compatibility; |
typedef enum { |
unused, mode, motion, report |
} command_types; |
struct qic117_command_table { |
char *name; |
__u8 mask; |
__u8 state; |
__u8 cmd_type; |
__u8 non_intr; |
__u8 level; |
}; |
#define QIC117_COMMANDS {\ |
/* command mask state cmd_type */\ |
/* | name | | | non_intr */\ |
/* | | | | | | level */\ |
/* 0*/ {NULL, 0x00, 0x00, mode, 0, discretional},\ |
/* 1*/ {"soft reset", 0x00, 0x00, motion, 1, required},\ |
/* 2*/ {"report next bit", 0x00, 0x00, report, 0, required},\ |
/* 3*/ {"pause", 0x36, 0x24, motion, 1, required},\ |
/* 4*/ {"micro step pause", 0x36, 0x24, motion, 1, required},\ |
/* 5*/ {"alternate command timeout", 0x00, 0x00, mode, 0, required},\ |
/* 6*/ {"report drive status", 0x00, 0x00, report, 0, required},\ |
/* 7*/ {"report error code", 0x01, 0x01, report, 0, required},\ |
/* 8*/ {"report drive configuration",0x00, 0x00, report, 0, required},\ |
/* 9*/ {"report rom version", 0x00, 0x00, report, 0, required},\ |
/*10*/ {"logical forward", 0x37, 0x25, motion, 0, required},\ |
/*11*/ {"physical reverse", 0x17, 0x05, motion, 0, required},\ |
/*12*/ {"physical forward", 0x17, 0x05, motion, 0, required},\ |
/*13*/ {"seek head to track", 0x37, 0x25, motion, 0, required},\ |
/*14*/ {"seek load point", 0x17, 0x05, motion, 1, required},\ |
/*15*/ {"enter format mode", 0x1f, 0x05, mode, 0, required},\ |
/*16*/ {"write reference burst", 0x1f, 0x05, motion, 1, required},\ |
/*17*/ {"enter verify mode", 0x37, 0x25, mode, 0, required},\ |
/*18*/ {"stop tape", 0x00, 0x00, motion, 1, required},\ |
/*19*/ {"reserved (19)", 0x00, 0x00, unused, 0, discretional},\ |
/*20*/ {"reserved (20)", 0x00, 0x00, unused, 0, discretional},\ |
/*21*/ {"micro step head up", 0x02, 0x00, motion, 0, required},\ |
/*22*/ {"micro step head down", 0x02, 0x00, motion, 0, required},\ |
/*23*/ {"soft select", 0x00, 0x00, mode, 0, discretional},\ |
/*24*/ {"soft deselect", 0x00, 0x00, mode, 0, discretional},\ |
/*25*/ {"skip segments reverse", 0x36, 0x24, motion, 1, required},\ |
/*26*/ {"skip segments forward", 0x36, 0x24, motion, 1, required},\ |
/*27*/ {"select rate or format", 0x03, 0x01, mode, 0, required /* [ccs2] */},\ |
/*28*/ {"enter diag mode 1", 0x00, 0x00, mode, 0, discretional},\ |
/*29*/ {"enter diag mode 2", 0x00, 0x00, mode, 0, discretional},\ |
/*30*/ {"enter primary mode", 0x00, 0x00, mode, 0, required},\ |
/*31*/ {"vendor unique (31)", 0x00, 0x00, unused, 0, discretional},\ |
/*32*/ {"report vendor id", 0x00, 0x00, report, 0, required},\ |
/*33*/ {"report tape status", 0x04, 0x04, report, 0, ccs1},\ |
/*34*/ {"skip extended reverse", 0x36, 0x24, motion, 1, ccs1},\ |
/*35*/ {"skip extended forward", 0x36, 0x24, motion, 1, ccs1},\ |
/*36*/ {"calibrate tape length", 0x17, 0x05, motion, 1, ccs2},\ |
/*37*/ {"report format segments", 0x17, 0x05, report, 0, ccs2},\ |
/*38*/ {"set format segments", 0x17, 0x05, mode, 0, ccs2},\ |
/*39*/ {"reserved (39)", 0x00, 0x00, unused, 0, discretional},\ |
/*40*/ {"vendor unique (40)", 0x00, 0x00, unused, 0, discretional},\ |
/*41*/ {"vendor unique (41)", 0x00, 0x00, unused, 0, discretional},\ |
/*42*/ {"vendor unique (42)", 0x00, 0x00, unused, 0, discretional},\ |
/*43*/ {"vendor unique (43)", 0x00, 0x00, unused, 0, discretional},\ |
/*44*/ {"vendor unique (44)", 0x00, 0x00, unused, 0, discretional},\ |
/*45*/ {"vendor unique (45)", 0x00, 0x00, unused, 0, discretional},\ |
/*46*/ {"phantom select", 0x00, 0x00, mode, 0, discretional},\ |
/*47*/ {"phantom deselect", 0x00, 0x00, mode, 0, discretional},\ |
} |
/* |
* Status bits returned by QIC_REPORT_DRIVE_STATUS |
*/ |
#define QIC_STATUS_READY 0x01 /* Drive is ready or idle. */ |
#define QIC_STATUS_ERROR 0x02 /* Error detected, must read |
error code to clear this */ |
#define QIC_STATUS_CARTRIDGE_PRESENT 0x04 /* Tape is present */ |
#define QIC_STATUS_WRITE_PROTECT 0x08 /* Tape is write protected */ |
#define QIC_STATUS_NEW_CARTRIDGE 0x10 /* New cartridge inserted, must |
read error status to clear. */ |
#define QIC_STATUS_REFERENCED 0x20 /* Cartridge appears to have been |
formatted. */ |
#define QIC_STATUS_AT_BOT 0x40 /* Cartridge is at physical |
beginning of tape. */ |
#define QIC_STATUS_AT_EOT 0x80 /* Cartridge is at physical end |
of tape. */ |
/* |
* Status bits returned by QIC_REPORT_DRIVE_CONFIGURATION |
*/ |
#define QIC_CONFIG_RATE_MASK 0x18 |
#define QIC_CONFIG_RATE_SHIFT 3 |
#define QIC_CONFIG_RATE_250 0 |
#define QIC_CONFIG_RATE_500 2 |
#define QIC_CONFIG_RATE_1000 3 |
#define QIC_CONFIG_RATE_2000 1 |
#define QIC_CONFIG_RATE_4000 0 /* since QIC-117 Rev. J */ |
#define QIC_CONFIG_LONG 0x40 /* Extra Length Tape Detected */ |
#define QIC_CONFIG_80 0x80 /* QIC-80 detected. */ |
/* |
* Status bits returned by QIC_REPORT_TAPE_STATUS |
*/ |
#define QIC_TAPE_STD_MASK 0x0f |
#define QIC_TAPE_QIC40 0x01 |
#define QIC_TAPE_QIC80 0x02 |
#define QIC_TAPE_QIC3020 0x03 |
#define QIC_TAPE_QIC3010 0x04 |
#define QIC_TAPE_LEN_MASK 0x70 |
#define QIC_TAPE_205FT 0x10 |
#define QIC_TAPE_307FT 0x20 |
#define QIC_TAPE_VARIABLE 0x30 |
#define QIC_TAPE_1100FT 0x40 |
#define QIC_TAPE_FLEX 0x60 |
#define QIC_TAPE_WIDE 0x80 |
/* Define a value (in feet) slightly higher than |
* the possible maximum tape length. |
*/ |
#define QIC_TOP_TAPE_LEN 1500 |
/* |
* Errors: List of error codes, and their severity. |
*/ |
typedef struct { |
char *message; /* Text describing the error. */ |
unsigned int fatal:1; /* Non-zero if the error is fatal. */ |
} ftape_error; |
#define QIC117_ERRORS {\ |
/* 0*/ { "No error", 0, },\ |
/* 1*/ { "Command Received while Drive Not Ready", 0, },\ |
/* 2*/ { "Cartridge Not Present or Removed", 1, },\ |
/* 3*/ { "Motor Speed Error (not within 1%)", 1, },\ |
/* 4*/ { "Motor Speed Fault (jammed, or gross speed error", 1, },\ |
/* 5*/ { "Cartridge Write Protected", 1, },\ |
/* 6*/ { "Undefined or Reserved Command Code", 1, },\ |
/* 7*/ { "Illegal Track Address Specified for Seek", 1, },\ |
/* 8*/ { "Illegal Command in Report Subcontext", 0, },\ |
/* 9*/ { "Illegal Entry into a Diagnostic Mode", 1, },\ |
/*10*/ { "Broken Tape Detected (based on hole sensor)", 1, },\ |
/*11*/ { "Warning--Read Gain Setting Error", 1, },\ |
/*12*/ { "Command Received While Error Status Pending (obs)", 1, },\ |
/*13*/ { "Command Received While New Cartridge Pending", 1, },\ |
/*14*/ { "Command Illegal or Undefined in Primary Mode", 1, },\ |
/*15*/ { "Command Illegal or Undefined in Format Mode", 1, },\ |
/*16*/ { "Command Illegal or Undefined in Verify Mode", 1, },\ |
/*17*/ { "Logical Forward Not at Logical BOT or no Format Segments in Format Mode", 1, },\ |
/*18*/ { "Logical EOT Before All Segments generated", 1, },\ |
/*19*/ { "Command Illegal When Cartridge Not Referenced", 1, },\ |
/*20*/ { "Self-Diagnostic Failed (cannot be cleared)", 1, },\ |
/*21*/ { "Warning EEPROM Not Initialized, Defaults Set", 1, },\ |
/*22*/ { "EEPROM Corrupted or Hardware Failure", 1, },\ |
/*23*/ { "Motion Time-out Error", 1, },\ |
/*24*/ { "Data Segment Too Long -- Logical Forward or Pause", 1, },\ |
/*25*/ { "Transmit Overrun (obs)", 1, },\ |
/*26*/ { "Power On Reset Occurred", 0, },\ |
/*27*/ { "Software Reset Occurred", 0, },\ |
/*28*/ { "Diagnostic Mode 1 Error", 1, },\ |
/*29*/ { "Diagnostic Mode 2 Error", 1, },\ |
/*30*/ { "Command Received During Non-Interruptible Process", 1, },\ |
/*31*/ { "Rate or Format Selection Error", 1, },\ |
/*32*/ { "Illegal Command While in High Speed Mode", 1, },\ |
/*33*/ { "Illegal Seek Segment Value", 1, },\ |
/*34*/ { "Invalid Media", 1, },\ |
/*35*/ { "Head Positioning Failure", 1, },\ |
/*36*/ { "Write Reference Burst Failure", 1, },\ |
/*37*/ { "Prom Code Missing", 1, },\ |
/*38*/ { "Invalid Format", 1, },\ |
/*39*/ { "EOT/BOT System Failure", 1, },\ |
/*40*/ { "Prom A Checksum Error", 1, },\ |
/*41*/ { "Drive Wakeup Reset Occurred", 1, },\ |
/*42*/ { "Prom B Checksum Error", 1, },\ |
/*43*/ { "Illegal Entry into Format Mode", 1, },\ |
} |
#endif /* _QIC117_H */ |
/shark/trunk/drivers/linuxc26/include/linux/mmzone.h |
---|
0,0 → 1,384 |
#ifndef _LINUX_MMZONE_H |
#define _LINUX_MMZONE_H |
#ifdef __KERNEL__ |
#ifndef __ASSEMBLY__ |
#include <linux/config.h> |
#include <linux/spinlock.h> |
#include <linux/list.h> |
#include <linux/wait.h> |
#include <linux/cache.h> |
#include <linux/threads.h> |
#include <linux/numa.h> |
#include <asm/atomic.h> |
/* Free memory management - zoned buddy allocator. */ |
#ifndef CONFIG_FORCE_MAX_ZONEORDER |
#define MAX_ORDER 11 |
#else |
#define MAX_ORDER CONFIG_FORCE_MAX_ZONEORDER |
#endif |
struct free_area { |
struct list_head free_list; |
unsigned long *map; |
}; |
struct pglist_data; |
/* |
* zone->lock and zone->lru_lock are two of the hottest locks in the kernel. |
* So add a wild amount of padding here to ensure that they fall into separate |
* cachelines. There are very few zone structures in the machine, so space |
* consumption is not a concern here. |
*/ |
#if defined(CONFIG_SMP) |
struct zone_padding { |
int x; |
} ____cacheline_maxaligned_in_smp; |
#define ZONE_PADDING(name) struct zone_padding name; |
#else |
#define ZONE_PADDING(name) |
#endif |
struct per_cpu_pages { |
int count; /* number of pages in the list */ |
int low; /* low watermark, refill needed */ |
int high; /* high watermark, emptying needed */ |
int batch; /* chunk size for buddy add/remove */ |
struct list_head list; /* the list of pages */ |
}; |
struct per_cpu_pageset { |
struct per_cpu_pages pcp[2]; /* 0: hot. 1: cold */ |
} ____cacheline_aligned_in_smp; |
/* |
* On machines where it is needed (eg PCs) we divide physical memory |
* into multiple physical zones. On a PC we have 3 zones: |
* |
* ZONE_DMA < 16 MB ISA DMA capable memory |
* ZONE_NORMAL 16-896 MB direct mapped by the kernel |
* ZONE_HIGHMEM > 896 MB only page cache and user processes |
*/ |
struct zone { |
/* |
* Commonly accessed fields: |
*/ |
spinlock_t lock; |
unsigned long free_pages; |
unsigned long pages_min, pages_low, pages_high; |
ZONE_PADDING(_pad1_) |
spinlock_t lru_lock; |
struct list_head active_list; |
struct list_head inactive_list; |
atomic_t refill_counter; |
unsigned long nr_active; |
unsigned long nr_inactive; |
int all_unreclaimable; /* All pages pinned */ |
unsigned long pages_scanned; /* since last reclaim */ |
ZONE_PADDING(_pad2_) |
/* |
* prev_priority holds the scanning priority for this zone. It is |
* defined as the scanning priority at which we achieved our reclaim |
* target at the previous try_to_free_pages() or balance_pgdat() |
* invokation. |
* |
* We use prev_priority as a measure of how much stress page reclaim is |
* under - it drives the swappiness decision: whether to unmap mapped |
* pages. |
* |
* temp_priority is used to remember the scanning priority at which |
* this zone was successfully refilled to free_pages == pages_high. |
* |
* Access to both these fields is quite racy even on uniprocessor. But |
* it is expected to average out OK. |
*/ |
int temp_priority; |
int prev_priority; |
/* |
* free areas of different sizes |
*/ |
struct free_area free_area[MAX_ORDER]; |
/* |
* wait_table -- the array holding the hash table |
* wait_table_size -- the size of the hash table array |
* wait_table_bits -- wait_table_size == (1 << wait_table_bits) |
* |
* The purpose of all these is to keep track of the people |
* waiting for a page to become available and make them |
* runnable again when possible. The trouble is that this |
* consumes a lot of space, especially when so few things |
* wait on pages at a given time. So instead of using |
* per-page waitqueues, we use a waitqueue hash table. |
* |
* The bucket discipline is to sleep on the same queue when |
* colliding and wake all in that wait queue when removing. |
* When something wakes, it must check to be sure its page is |
* truly available, a la thundering herd. The cost of a |
* collision is great, but given the expected load of the |
* table, they should be so rare as to be outweighed by the |
* benefits from the saved space. |
* |
* __wait_on_page_locked() and unlock_page() in mm/filemap.c, are the |
* primary users of these fields, and in mm/page_alloc.c |
* free_area_init_core() performs the initialization of them. |
*/ |
wait_queue_head_t * wait_table; |
unsigned long wait_table_size; |
unsigned long wait_table_bits; |
ZONE_PADDING(_pad3_) |
struct per_cpu_pageset pageset[NR_CPUS]; |
/* |
* Discontig memory support fields. |
*/ |
struct pglist_data *zone_pgdat; |
struct page *zone_mem_map; |
/* zone_start_pfn == zone_start_paddr >> PAGE_SHIFT */ |
unsigned long zone_start_pfn; |
/* |
* rarely used fields: |
*/ |
char *name; |
unsigned long spanned_pages; /* total size, including holes */ |
unsigned long present_pages; /* amount of memory (excluding holes) */ |
} ____cacheline_maxaligned_in_smp; |
#define ZONE_DMA 0 |
#define ZONE_NORMAL 1 |
#define ZONE_HIGHMEM 2 |
#define MAX_NR_ZONES 3 |
#define GFP_ZONEMASK 0x03 |
/* |
* One allocation request operates on a zonelist. A zonelist |
* is a list of zones, the first one is the 'goal' of the |
* allocation, the other zones are fallback zones, in decreasing |
* priority. |
* |
* Right now a zonelist takes up less than a cacheline. We never |
* modify it apart from boot-up, and only a few indices are used, |
* so despite the zonelist table being relatively big, the cache |
* footprint of this construct is very small. |
*/ |
struct zonelist { |
struct zone *zones[MAX_NUMNODES * MAX_NR_ZONES + 1]; // NULL delimited |
}; |
/* |
* The pg_data_t structure is used in machines with CONFIG_DISCONTIGMEM |
* (mostly NUMA machines?) to denote a higher-level memory zone than the |
* zone denotes. |
* |
* On NUMA machines, each NUMA node would have a pg_data_t to describe |
* it's memory layout. |
* |
* Memory statistics and page replacement data structures are maintained on a |
* per-zone basis. |
*/ |
struct bootmem_data; |
typedef struct pglist_data { |
struct zone node_zones[MAX_NR_ZONES]; |
struct zonelist node_zonelists[MAX_NR_ZONES]; |
int nr_zones; |
struct page *node_mem_map; |
unsigned long *valid_addr_bitmap; |
struct bootmem_data *bdata; |
unsigned long node_start_pfn; |
unsigned long node_present_pages; /* total number of physical pages */ |
unsigned long node_spanned_pages; /* total size of physical page |
range, including holes */ |
int node_id; |
struct pglist_data *pgdat_next; |
wait_queue_head_t kswapd_wait; |
} pg_data_t; |
#define node_present_pages(nid) (NODE_DATA(nid)->node_present_pages) |
#define node_spanned_pages(nid) (NODE_DATA(nid)->node_spanned_pages) |
extern int numnodes; |
extern struct pglist_data *pgdat_list; |
void get_zone_counts(unsigned long *active, unsigned long *inactive, |
unsigned long *free); |
void build_all_zonelists(void); |
void wakeup_kswapd(struct zone *zone); |
/** |
* for_each_pgdat - helper macro to iterate over all nodes |
* @pgdat - pointer to a pg_data_t variable |
* |
* Meant to help with common loops of the form |
* pgdat = pgdat_list; |
* while(pgdat) { |
* ... |
* pgdat = pgdat->pgdat_next; |
* } |
*/ |
#define for_each_pgdat(pgdat) \ |
for (pgdat = pgdat_list; pgdat; pgdat = pgdat->pgdat_next) |
/* |
* next_zone - helper magic for for_each_zone() |
* Thanks to William Lee Irwin III for this piece of ingenuity. |
*/ |
static inline struct zone *next_zone(struct zone *zone) |
{ |
pg_data_t *pgdat = zone->zone_pgdat; |
if (zone - pgdat->node_zones < MAX_NR_ZONES - 1) |
zone++; |
else if (pgdat->pgdat_next) { |
pgdat = pgdat->pgdat_next; |
zone = pgdat->node_zones; |
} else |
zone = NULL; |
return zone; |
} |
/** |
* for_each_zone - helper macro to iterate over all memory zones |
* @zone - pointer to struct zone variable |
* |
* The user only needs to declare the zone variable, for_each_zone |
* fills it in. This basically means for_each_zone() is an |
* easier to read version of this piece of code: |
* |
* for (pgdat = pgdat_list; pgdat; pgdat = pgdat->node_next) |
* for (i = 0; i < MAX_NR_ZONES; ++i) { |
* struct zone * z = pgdat->node_zones + i; |
* ... |
* } |
* } |
*/ |
#define for_each_zone(zone) \ |
for (zone = pgdat_list->node_zones; zone; zone = next_zone(zone)) |
/** |
* is_highmem - helper function to quickly check if a struct zone is a |
* highmem zone or not. This is an attempt to keep references |
* to ZONE_{DMA/NORMAL/HIGHMEM/etc} in general code to a minimum. |
* @zone - pointer to struct zone variable |
*/ |
static inline int is_highmem(struct zone *zone) |
{ |
return (zone - zone->zone_pgdat->node_zones == ZONE_HIGHMEM); |
} |
/* These two functions are used to setup the per zone pages min values */ |
struct ctl_table; |
struct file; |
int min_free_kbytes_sysctl_handler(struct ctl_table *, int, struct file *, |
void *, size_t *); |
extern void setup_per_zone_pages_min(void); |
#ifdef CONFIG_NUMA |
#define MAX_NR_MEMBLKS BITS_PER_LONG /* Max number of Memory Blocks */ |
#else /* !CONFIG_NUMA */ |
#define MAX_NR_MEMBLKS 1 |
#endif /* CONFIG_NUMA */ |
#include <linux/topology.h> |
/* Returns the number of the current Node. */ |
#define numa_node_id() (cpu_to_node(smp_processor_id())) |
#ifndef CONFIG_DISCONTIGMEM |
extern struct pglist_data contig_page_data; |
#define NODE_DATA(nid) (&contig_page_data) |
#define NODE_MEM_MAP(nid) mem_map |
#define MAX_NODES_SHIFT 0 |
#else /* CONFIG_DISCONTIGMEM */ |
#include <asm/mmzone.h> |
#if BITS_PER_LONG == 32 |
/* |
* with 32 bit flags field, page->zone is currently 8 bits. |
* there are 3 zones (2 bits) and this leaves 8-2=6 bits for nodes. |
*/ |
#define MAX_NODES_SHIFT 6 |
#elif BITS_PER_LONG == 64 |
/* |
* with 64 bit flags field, there's plenty of room. |
*/ |
#define MAX_NODES_SHIFT 10 |
#endif |
#endif /* !CONFIG_DISCONTIGMEM */ |
#if NODES_SHIFT > MAX_NODES_SHIFT |
#error NODES_SHIFT > MAX_NODES_SHIFT |
#endif |
extern DECLARE_BITMAP(node_online_map, MAX_NUMNODES); |
extern DECLARE_BITMAP(memblk_online_map, MAX_NR_MEMBLKS); |
#if defined(CONFIG_DISCONTIGMEM) || defined(CONFIG_NUMA) |
#define node_online(node) test_bit(node, node_online_map) |
#define node_set_online(node) set_bit(node, node_online_map) |
#define node_set_offline(node) clear_bit(node, node_online_map) |
static inline unsigned int num_online_nodes(void) |
{ |
int i, num = 0; |
for(i = 0; i < MAX_NUMNODES; i++){ |
if (node_online(i)) |
num++; |
} |
return num; |
} |
#define memblk_online(memblk) test_bit(memblk, memblk_online_map) |
#define memblk_set_online(memblk) set_bit(memblk, memblk_online_map) |
#define memblk_set_offline(memblk) clear_bit(memblk, memblk_online_map) |
static inline unsigned int num_online_memblks(void) |
{ |
int i, num = 0; |
for(i = 0; i < MAX_NR_MEMBLKS; i++){ |
if (memblk_online(i)) |
num++; |
} |
return num; |
} |
#else /* !CONFIG_DISCONTIGMEM && !CONFIG_NUMA */ |
#define node_online(node) \ |
({ BUG_ON((node) != 0); test_bit(node, node_online_map); }) |
#define node_set_online(node) \ |
({ BUG_ON((node) != 0); set_bit(node, node_online_map); }) |
#define node_set_offline(node) \ |
({ BUG_ON((node) != 0); clear_bit(node, node_online_map); }) |
#define num_online_nodes() 1 |
#define memblk_online(memblk) \ |
({ BUG_ON((memblk) != 0); test_bit(memblk, memblk_online_map); }) |
#define memblk_set_online(memblk) \ |
({ BUG_ON((memblk) != 0); set_bit(memblk, memblk_online_map); }) |
#define memblk_set_offline(memblk) \ |
({ BUG_ON((memblk) != 0); clear_bit(memblk, memblk_online_map); }) |
#define num_online_memblks() 1 |
#endif /* CONFIG_DISCONTIGMEM || CONFIG_NUMA */ |
#endif /* !__ASSEMBLY__ */ |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_MMZONE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/fcntl.h |
---|
0,0 → 1,50 |
#ifndef _LINUX_FCNTL_H |
#define _LINUX_FCNTL_H |
#include <asm/fcntl.h> |
#define F_SETLEASE (F_LINUX_SPECIFIC_BASE+0) |
#define F_GETLEASE (F_LINUX_SPECIFIC_BASE+1) |
/* |
* Request nofications on a directory. |
* See below for events that may be notified. |
*/ |
#define F_NOTIFY (F_LINUX_SPECIFIC_BASE+2) |
/* |
* 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 */ |
#ifdef __KERNEL__ |
#if BITS_PER_LONG == 32 |
#define IS_GETLK32(cmd) ((cmd) == F_GETLK) |
#define IS_SETLK32(cmd) ((cmd) == F_SETLK) |
#define IS_SETLKW32(cmd) ((cmd) == F_SETLKW) |
#define IS_GETLK64(cmd) ((cmd) == F_GETLK64) |
#define IS_SETLK64(cmd) ((cmd) == F_SETLK64) |
#define IS_SETLKW64(cmd) ((cmd) == F_SETLKW64) |
#else |
#define IS_GETLK32(cmd) (0) |
#define IS_SETLK32(cmd) (0) |
#define IS_SETLKW32(cmd) (0) |
#define IS_GETLK64(cmd) ((cmd) == F_GETLK) |
#define IS_SETLK64(cmd) ((cmd) == F_SETLK) |
#define IS_SETLKW64(cmd) ((cmd) == F_SETLKW) |
#endif /* BITS_PER_LONG == 32 */ |
#define IS_GETLK(cmd) (IS_GETLK32(cmd) || IS_GETLK64(cmd)) |
#define IS_SETLK(cmd) (IS_SETLK32(cmd) || IS_SETLK64(cmd)) |
#define IS_SETLKW(cmd) (IS_SETLKW32(cmd) || IS_SETLKW64(cmd)) |
#endif /* __KERNEL__ */ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/iso_fs_sb.h |
---|
0,0 → 1,34 |
#ifndef _ISOFS_FS_SB |
#define _ISOFS_FS_SB |
/* |
* iso9660 super-block data in memory |
*/ |
struct isofs_sb_info { |
unsigned long s_ninodes; |
unsigned long s_nzones; |
unsigned long s_firstdatazone; |
unsigned long s_log_zone_size; |
unsigned long s_max_size; |
unsigned char s_high_sierra; /* A simple flag */ |
unsigned char s_mapping; |
int s_rock_offset; /* offset of SUSP fields within SU area */ |
unsigned char s_rock; |
unsigned char s_joliet_level; |
unsigned char s_utf8; |
unsigned char s_cruft; /* Broken disks with high |
byte of length containing |
junk */ |
unsigned char s_unhide; |
unsigned char s_nosuid; |
unsigned char s_nodev; |
unsigned char s_nocompress; |
mode_t s_mode; |
gid_t s_gid; |
uid_t s_uid; |
struct nls_table *s_nls_iocharset; /* Native language support table */ |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/memblk.h |
---|
0,0 → 1,32 |
/* |
* include/linux/memblk.h - generic memblk definition |
* |
* This is mainly for topological representation. We define the |
* basic 'struct memblk' here, which can be embedded in per-arch |
* definitions of memory blocks. |
* |
* Basic handling of the devices is done in drivers/base/memblk.c |
* and system devices are handled in drivers/base/sys.c. |
* |
* MemBlks are exported via driverfs in the class/memblk/devices/ |
* directory. |
* |
* Per-memblk interfaces can be implemented using a struct device_interface. |
* See the following for how to do this: |
* - drivers/base/intf.c |
* - Documentation/driver-model/interface.txt |
*/ |
#ifndef _LINUX_MEMBLK_H_ |
#define _LINUX_MEMBLK_H_ |
#include <linux/device.h> |
#include <linux/node.h> |
struct memblk { |
int node_id; /* The node which contains the MemBlk */ |
struct sys_device sysdev; |
}; |
extern int register_memblk(struct memblk *, int, struct node *); |
#endif /* _LINUX_MEMBLK_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/stddef.h |
---|
0,0 → 1,14 |
#ifndef _LINUX_STDDEF_H |
#define _LINUX_STDDEF_H |
#undef NULL |
#if defined(__cplusplus) |
#define NULL 0 |
#else |
#define NULL ((void *)0) |
#endif |
#undef offsetof |
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/serial.h |
---|
0,0 → 1,187 |
/* |
* 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 _LINUX_SERIAL_H |
#define _LINUX_SERIAL_H |
#ifdef __KERNEL__ |
#include <asm/page.h> |
/* |
* Counters of the input lines (CTS, DSR, RI, CD) interrupts |
*/ |
struct async_icount { |
__u32 cts, dsr, rng, dcd, tx, rx; |
__u32 frame, parity, overrun, brk; |
__u32 buf_overrun; |
}; |
/* |
* The size of the serial xmit buffer is 1 page, or 4096 bytes |
*/ |
#define SERIAL_XMIT_SIZE PAGE_SIZE |
#endif |
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 |
struct serial_uart_config { |
char *name; |
int dfl_xmit_fifo_size; |
int flags; |
}; |
#define UART_CLEAR_FIFO 0x01 |
#define UART_USE_FIFO 0x02 |
#define UART_STARTECH 0x04 |
#define UART_NATSEMI 0x08 |
/* |
* Definitions for async_struct (and serial_struct) flags field |
*/ |
#define ASYNC_HUP_NOTIFY 0x0001 /* Notify getty on hangups and closes |
on the callout port */ |
#define ASYNC_FOURPORT 0x0002 /* Set OU1, OUT2 per AST Fourport settings */ |
#define ASYNC_SAK 0x0004 /* Secure Attention Key (Orange book) */ |
#define ASYNC_SPLIT_TERMIOS 0x0008 /* Separate termios for dialin/callout */ |
#define ASYNC_SPD_MASK 0x1030 |
#define ASYNC_SPD_HI 0x0010 /* Use 56000 instead of 38400 bps */ |
#define ASYNC_SPD_VHI 0x0020 /* Use 115200 instead of 38400 bps */ |
#define ASYNC_SPD_CUST 0x0030 /* Use user-specified divisor */ |
#define ASYNC_SKIP_TEST 0x0040 /* Skip UART test during autoconfiguration */ |
#define ASYNC_AUTO_IRQ 0x0080 /* Do automatic IRQ during autoconfiguration */ |
#define ASYNC_SESSION_LOCKOUT 0x0100 /* Lock out cua opens based on session */ |
#define ASYNC_PGRP_LOCKOUT 0x0200 /* Lock out cua opens based on pgrp */ |
#define ASYNC_CALLOUT_NOHUP 0x0400 /* Don't do hangups for cua device */ |
#define ASYNC_HARDPPS_CD 0x0800 /* Call hardpps when CD goes high */ |
#define ASYNC_SPD_SHI 0x1000 /* Use 230400 instead of 38400 bps */ |
#define ASYNC_SPD_WARP 0x1010 /* Use 460800 instead of 38400 bps */ |
#define ASYNC_LOW_LATENCY 0x2000 /* Request low latency behaviour */ |
#define ASYNC_BUGGY_UART 0x4000 /* This is a buggy UART, skip some safety |
* checks. Note: can be dangerous! */ |
#define ASYNC_AUTOPROBE 0x8000 /* Port was autoprobed by PCI or PNP code */ |
#define ASYNC_FLAGS 0x7FFF /* Possible legal async flags */ |
#define ASYNC_USR_MASK 0x3430 /* Legal flags that non-privileged |
* users can set or reset */ |
/* Internal flags used only by kernel/chr_drv/serial.c */ |
#define ASYNC_INITIALIZED 0x80000000 /* Serial port was initialized */ |
#define ASYNC_CALLOUT_ACTIVE 0x40000000 /* Call out device is active */ |
#define ASYNC_NORMAL_ACTIVE 0x20000000 /* Normal device is active */ |
#define ASYNC_BOOT_AUTOCONF 0x10000000 /* Autoconfigure port on bootup */ |
#define ASYNC_CLOSING 0x08000000 /* Serial port is closing */ |
#define ASYNC_CTS_FLOW 0x04000000 /* Do CTS flow control */ |
#define ASYNC_CHECK_CD 0x02000000 /* i.e., CLOCAL */ |
#define ASYNC_SHARE_IRQ 0x01000000 /* for multifunction cards |
--- no longer used */ |
#define ASYNC_CONS_FLOW 0x00800000 /* flow control for console */ |
#define ASYNC_BOOT_ONLYMCA 0x00400000 /* Probe only if MCA bus */ |
#define ASYNC_INTERNAL_FLAGS 0xFFC00000 /* Internal flags */ |
/* |
* 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]; |
}; |
#ifdef __KERNEL__ |
/* Export to allow PCMCIA to use this - Dave Hinds */ |
extern int register_serial(struct serial_struct *req); |
extern void unregister_serial(int line); |
/* Allow architectures to override entries in serial8250_ports[] at run time: */ |
struct uart_port; /* forward declaration */ |
extern int early_serial_setup(struct uart_port *port); |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_SERIAL_H */ |
/shark/trunk/drivers/linuxc26/include/linux/irda.h |
---|
0,0 → 1,222 |
/********************************************************************* |
* |
* 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 |
/* Please do *not* add any #include in this file, this file is |
* included as-is in user space. |
* Please fix the calling file to properly included needed files before |
* this one, or preferably to include <net/irda/irda.h> instead. |
* Jean II */ |
/* 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_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 { |
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 |
#endif /* KERNEL_IRDA_H */ |
/shark/trunk/drivers/linuxc26/include/linux/cycx_drv.h |
---|
0,0 → 1,65 |
/* |
* cycx_drv.h CYCX Support Module. Kernel API Definitions. |
* |
* Author: Arnaldo Carvalho de Melo <acme@conectiva.com.br> |
* |
* Copyright: (c) 1998-2003 Arnaldo Carvalho de Melo |
* |
* Based on sdladrv.h by Gene Kozin <genek@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. |
* ============================================================================ |
* 1999/10/23 acme cycxhw_t cleanup |
* 1999/01/03 acme more judicious use of data types... |
* uclong, ucchar, etc deleted, the u8, u16, u32 |
* types are the portable way to go. |
* 1999/01/03 acme judicious use of data types... u16, u32, etc |
* 1998/12/26 acme FIXED_BUFFERS, CONF_OFFSET, |
* removal of cy_read{bwl} |
* 1998/08/08 acme Initial version. |
*/ |
#ifndef _CYCX_DRV_H |
#define _CYCX_DRV_H |
#define CYCX_WINDOWSIZE 0x4000 /* default dual-port memory window size */ |
#define GEN_CYCX_INTR 0x02 |
#define RST_ENABLE 0x04 |
#define START_CPU 0x06 |
#define RST_DISABLE 0x08 |
#define FIXED_BUFFERS 0x08 |
#define TEST_PATTERN 0xaa55 |
#define CMD_OFFSET 0x20 |
#define CONF_OFFSET 0x0380 |
#define RESET_OFFSET 0x3c00 /* For reset file load */ |
#define DATA_OFFSET 0x0100 /* For code and data files load */ |
#define START_OFFSET 0x3ff0 /* 80186 starts here */ |
/** |
* struct cycx_hw - Adapter hardware configuration |
* @fwid - firmware ID |
* @irq - interrupt request level |
* @dpmbase - dual-port memory base |
* @dpmsize - dual-port memory size |
* @reserved - reserved for future use |
*/ |
struct cycx_hw { |
u32 fwid; |
int irq; |
void *dpmbase; |
u32 dpmsize; |
u32 reserved[5]; |
}; |
/* Function Prototypes */ |
extern int cycx_setup(struct cycx_hw *hw, void *sfm, u32 len); |
extern int cycx_down(struct cycx_hw *hw); |
extern int cycx_peek(struct cycx_hw *hw, u32 addr, void *buf, u32 len); |
extern int cycx_poke(struct cycx_hw *hw, u32 addr, void *buf, u32 len); |
extern int cycx_exec(void *addr); |
extern void cycx_inten(struct cycx_hw *hw); |
extern void cycx_intr(struct cycx_hw *hw); |
#endif /* _CYCX_DRV_H */ |
/shark/trunk/drivers/linuxc26/include/linux/spinlock.h |
---|
0,0 → 1,468 |
#ifndef __LINUX_SPINLOCK_H |
#define __LINUX_SPINLOCK_H |
/* |
* include/linux/spinlock.h - generic locking declarations |
*/ |
#include <linux/config.h> |
#include <linux/preempt.h> |
#include <linux/linkage.h> |
#include <linux/compiler.h> |
#include <linux/thread_info.h> |
#include <linux/kernel.h> |
#include <linux/stringify.h> |
#include <asm/processor.h> /* for cpu relax */ |
#include <asm/system.h> |
/* |
* Must define these before including other files, inline functions need them |
*/ |
#define LOCK_SECTION_NAME \ |
".text.lock." __stringify(KBUILD_BASENAME) |
#define LOCK_SECTION_START(extra) \ |
".subsection 1\n\t" \ |
extra \ |
".ifndef " LOCK_SECTION_NAME "\n\t" \ |
LOCK_SECTION_NAME ":\n\t" \ |
".endif\n\t" |
#define LOCK_SECTION_END \ |
".previous\n\t" |
/* |
* If CONFIG_SMP is set, pull in the _raw_* definitions |
*/ |
#ifdef CONFIG_SMP |
#include <asm/spinlock.h> |
#else |
#if !defined(CONFIG_PREEMPT) && !defined(CONFIG_DEBUG_SPINLOCK) |
# define atomic_dec_and_lock(atomic,lock) atomic_dec_and_test(atomic) |
# define ATOMIC_DEC_AND_LOCK |
#endif |
#ifdef CONFIG_DEBUG_SPINLOCK |
#define SPINLOCK_MAGIC 0x1D244B3C |
typedef struct { |
unsigned long magic; |
volatile unsigned long lock; |
volatile unsigned int babble; |
const char *module; |
char *owner; |
int oline; |
} spinlock_t; |
#define SPIN_LOCK_UNLOCKED (spinlock_t) { SPINLOCK_MAGIC, 0, 10, __FILE__ , NULL, 0} |
#define spin_lock_init(x) \ |
do { \ |
(x)->magic = SPINLOCK_MAGIC; \ |
(x)->lock = 0; \ |
(x)->babble = 5; \ |
(x)->module = __FILE__; \ |
(x)->owner = NULL; \ |
(x)->oline = 0; \ |
} while (0) |
#define CHECK_LOCK(x) \ |
do { \ |
if ((x)->magic != SPINLOCK_MAGIC) { \ |
printk(KERN_ERR "%s:%d: spin_is_locked on uninitialized spinlock %p.\n", \ |
__FILE__, __LINE__, (x)); \ |
} \ |
} while(0) |
#define _raw_spin_lock(x) \ |
do { \ |
CHECK_LOCK(x); \ |
if ((x)->lock&&(x)->babble) { \ |
(x)->babble--; \ |
printk("%s:%d: spin_lock(%s:%p) already locked by %s/%d\n", \ |
__FILE__,__LINE__, (x)->module, \ |
(x), (x)->owner, (x)->oline); \ |
} \ |
(x)->lock = 1; \ |
(x)->owner = __FILE__; \ |
(x)->oline = __LINE__; \ |
} while (0) |
/* without debugging, spin_is_locked on UP always says |
* FALSE. --> printk if already locked. */ |
#define spin_is_locked(x) \ |
({ \ |
CHECK_LOCK(x); \ |
if ((x)->lock&&(x)->babble) { \ |
(x)->babble--; \ |
printk("%s:%d: spin_is_locked(%s:%p) already locked by %s/%d\n", \ |
__FILE__,__LINE__, (x)->module, \ |
(x), (x)->owner, (x)->oline); \ |
} \ |
0; \ |
}) |
/* without debugging, spin_trylock on UP always says |
* TRUE. --> printk if already locked. */ |
#define _raw_spin_trylock(x) \ |
({ \ |
CHECK_LOCK(x); \ |
if ((x)->lock&&(x)->babble) { \ |
(x)->babble--; \ |
printk("%s:%d: spin_trylock(%s:%p) already locked by %s/%d\n", \ |
__FILE__,__LINE__, (x)->module, \ |
(x), (x)->owner, (x)->oline); \ |
} \ |
(x)->lock = 1; \ |
(x)->owner = __FILE__; \ |
(x)->oline = __LINE__; \ |
1; \ |
}) |
#define spin_unlock_wait(x) \ |
do { \ |
CHECK_LOCK(x); \ |
if ((x)->lock&&(x)->babble) { \ |
(x)->babble--; \ |
printk("%s:%d: spin_unlock_wait(%s:%p) owned by %s/%d\n", \ |
__FILE__,__LINE__, (x)->module, (x), \ |
(x)->owner, (x)->oline); \ |
}\ |
} while (0) |
#define _raw_spin_unlock(x) \ |
do { \ |
CHECK_LOCK(x); \ |
if (!(x)->lock&&(x)->babble) { \ |
(x)->babble--; \ |
printk("%s:%d: spin_unlock(%s:%p) not locked\n", \ |
__FILE__,__LINE__, (x)->module, (x));\ |
} \ |
(x)->lock = 0; \ |
} while (0) |
#else |
/* |
* gcc versions before ~2.95 have a nasty bug with empty initializers. |
*/ |
#if (__GNUC__ > 2) |
typedef struct { } spinlock_t; |
#define SPIN_LOCK_UNLOCKED (spinlock_t) { } |
#else |
typedef struct { int gcc_is_buggy; } spinlock_t; |
#define SPIN_LOCK_UNLOCKED (spinlock_t) { 0 } |
#endif |
/* |
* If CONFIG_SMP is unset, declare the _raw_* definitions as nops |
*/ |
#define spin_lock_init(lock) do { (void)(lock); } while(0) |
#define _raw_spin_lock(lock) do { (void)(lock); } while(0) |
#define spin_is_locked(lock) ((void)(lock), 0) |
#define _raw_spin_trylock(lock) ((void)(lock), 1) |
#define spin_unlock_wait(lock) do { (void)(lock); } while(0) |
#define _raw_spin_unlock(lock) do { (void)(lock); } while(0) |
#endif /* CONFIG_DEBUG_SPINLOCK */ |
/* RW spinlocks: No debug version */ |
#if (__GNUC__ > 2) |
typedef struct { } rwlock_t; |
#define RW_LOCK_UNLOCKED (rwlock_t) { } |
#else |
typedef struct { int gcc_is_buggy; } rwlock_t; |
#define RW_LOCK_UNLOCKED (rwlock_t) { 0 } |
#endif |
#define rwlock_init(lock) do { (void)(lock); } while(0) |
#define _raw_read_lock(lock) do { (void)(lock); } while(0) |
#define _raw_read_unlock(lock) do { (void)(lock); } while(0) |
#define _raw_write_lock(lock) do { (void)(lock); } while(0) |
#define _raw_write_unlock(lock) do { (void)(lock); } while(0) |
#define _raw_write_trylock(lock) ({ (void)(lock); (1); }) |
#endif /* !SMP */ |
/* |
* Define the various spin_lock and rw_lock methods. Note we define these |
* regardless of whether CONFIG_SMP or CONFIG_PREEMPT are set. The various |
* methods are defined as nops in the case they are not required. |
*/ |
#define spin_trylock(lock) ({preempt_disable(); _raw_spin_trylock(lock) ? \ |
1 : ({preempt_enable(); 0;});}) |
#define write_trylock(lock) ({preempt_disable();_raw_write_trylock(lock) ? \ |
1 : ({preempt_enable(); 0;});}) |
/* Where's read_trylock? */ |
#if defined(CONFIG_SMP) && defined(CONFIG_PREEMPT) |
void __preempt_spin_lock(spinlock_t *lock); |
void __preempt_write_lock(rwlock_t *lock); |
#define spin_lock(lock) \ |
do { \ |
preempt_disable(); \ |
if (unlikely(!_raw_spin_trylock(lock))) \ |
__preempt_spin_lock(lock); \ |
} while (0) |
#define write_lock(lock) \ |
do { \ |
preempt_disable(); \ |
if (unlikely(!_raw_write_trylock(lock))) \ |
__preempt_write_lock(lock); \ |
} while (0) |
#else |
#define spin_lock(lock) \ |
do { \ |
preempt_disable(); \ |
_raw_spin_lock(lock); \ |
} while(0) |
#define write_lock(lock) \ |
do { \ |
preempt_disable(); \ |
_raw_write_lock(lock); \ |
} while(0) |
#endif |
#define read_lock(lock) \ |
do { \ |
preempt_disable(); \ |
_raw_read_lock(lock); \ |
} while(0) |
#define spin_unlock(lock) \ |
do { \ |
_raw_spin_unlock(lock); \ |
preempt_enable(); \ |
} while (0) |
#define write_unlock(lock) \ |
do { \ |
_raw_write_unlock(lock); \ |
preempt_enable(); \ |
} while(0) |
#define read_unlock(lock) \ |
do { \ |
_raw_read_unlock(lock); \ |
preempt_enable(); \ |
} while(0) |
#define spin_lock_irqsave(lock, flags) \ |
do { \ |
local_irq_save(flags); \ |
preempt_disable(); \ |
_raw_spin_lock(lock); \ |
} while (0) |
#define spin_lock_irq(lock) \ |
do { \ |
local_irq_disable(); \ |
preempt_disable(); \ |
_raw_spin_lock(lock); \ |
} while (0) |
#define spin_lock_bh(lock) \ |
do { \ |
local_bh_disable(); \ |
preempt_disable(); \ |
_raw_spin_lock(lock); \ |
} while (0) |
#define read_lock_irqsave(lock, flags) \ |
do { \ |
local_irq_save(flags); \ |
preempt_disable(); \ |
_raw_read_lock(lock); \ |
} while (0) |
#define read_lock_irq(lock) \ |
do { \ |
local_irq_disable(); \ |
preempt_disable(); \ |
_raw_read_lock(lock); \ |
} while (0) |
#define read_lock_bh(lock) \ |
do { \ |
local_bh_disable(); \ |
preempt_disable(); \ |
_raw_read_lock(lock); \ |
} while (0) |
#define write_lock_irqsave(lock, flags) \ |
do { \ |
local_irq_save(flags); \ |
preempt_disable(); \ |
_raw_write_lock(lock); \ |
} while (0) |
#define write_lock_irq(lock) \ |
do { \ |
local_irq_disable(); \ |
preempt_disable(); \ |
_raw_write_lock(lock); \ |
} while (0) |
#define write_lock_bh(lock) \ |
do { \ |
local_bh_disable(); \ |
preempt_disable(); \ |
_raw_write_lock(lock); \ |
} while (0) |
#define spin_unlock_irqrestore(lock, flags) \ |
do { \ |
_raw_spin_unlock(lock); \ |
local_irq_restore(flags); \ |
preempt_enable(); \ |
} while (0) |
#define _raw_spin_unlock_irqrestore(lock, flags) \ |
do { \ |
_raw_spin_unlock(lock); \ |
local_irq_restore(flags); \ |
} while (0) |
#define spin_unlock_irq(lock) \ |
do { \ |
_raw_spin_unlock(lock); \ |
local_irq_enable(); \ |
preempt_enable(); \ |
} while (0) |
#define spin_unlock_bh(lock) \ |
do { \ |
_raw_spin_unlock(lock); \ |
preempt_enable(); \ |
local_bh_enable(); \ |
} while (0) |
#define read_unlock_irqrestore(lock, flags) \ |
do { \ |
_raw_read_unlock(lock); \ |
local_irq_restore(flags); \ |
preempt_enable(); \ |
} while (0) |
#define read_unlock_irq(lock) \ |
do { \ |
_raw_read_unlock(lock); \ |
local_irq_enable(); \ |
preempt_enable(); \ |
} while (0) |
#define read_unlock_bh(lock) \ |
do { \ |
_raw_read_unlock(lock); \ |
preempt_enable(); \ |
local_bh_enable(); \ |
} while (0) |
#define write_unlock_irqrestore(lock, flags) \ |
do { \ |
_raw_write_unlock(lock); \ |
local_irq_restore(flags); \ |
preempt_enable(); \ |
} while (0) |
#define write_unlock_irq(lock) \ |
do { \ |
_raw_write_unlock(lock); \ |
local_irq_enable(); \ |
preempt_enable(); \ |
} while (0) |
#define write_unlock_bh(lock) \ |
do { \ |
_raw_write_unlock(lock); \ |
preempt_enable(); \ |
local_bh_enable(); \ |
} while (0) |
#define spin_trylock_bh(lock) ({ local_bh_disable(); preempt_disable(); \ |
_raw_spin_trylock(lock) ? 1 : \ |
({preempt_enable(); local_bh_enable(); 0;});}) |
/* "lock on reference count zero" */ |
#ifndef ATOMIC_DEC_AND_LOCK |
#include <asm/atomic.h> |
extern int atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock); |
#endif |
/* |
* bit-based spin_lock() |
* |
* Don't use this unless you really need to: spin_lock() and spin_unlock() |
* are significantly faster. |
*/ |
static inline void bit_spin_lock(int bitnum, unsigned long *addr) |
{ |
/* |
* Assuming the lock is uncontended, this never enters |
* the body of the outer loop. If it is contended, then |
* within the inner loop a non-atomic test is used to |
* busywait with less bus contention for a good time to |
* attempt to acquire the lock bit. |
*/ |
preempt_disable(); |
#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) |
while (test_and_set_bit(bitnum, addr)) { |
while (test_bit(bitnum, addr)) |
cpu_relax(); |
} |
#endif |
} |
/* |
* Return true if it was acquired |
*/ |
static inline int bit_spin_trylock(int bitnum, unsigned long *addr) |
{ |
#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) |
int ret; |
preempt_disable(); |
ret = !test_and_set_bit(bitnum, addr); |
if (!ret) |
preempt_enable(); |
return ret; |
#else |
preempt_disable(); |
return 1; |
#endif |
} |
/* |
* bit-based spin_unlock() |
*/ |
static inline void bit_spin_unlock(int bitnum, unsigned long *addr) |
{ |
#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) |
BUG_ON(!test_bit(bitnum, addr)); |
smp_mb__before_clear_bit(); |
clear_bit(bitnum, addr); |
#endif |
preempt_enable(); |
} |
/* |
* Return true if the lock is held. |
*/ |
static inline int bit_spin_is_locked(int bitnum, unsigned long *addr) |
{ |
#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) |
return test_bit(bitnum, addr); |
#elif defined CONFIG_PREEMPT |
return preempt_count(); |
#else |
return 1; |
#endif |
} |
#endif /* __LINUX_SPINLOCK_H */ |
/shark/trunk/drivers/linuxc26/include/linux/ip6_tunnel.h |
---|
0,0 → 1,32 |
/* |
* $Id: ip6_tunnel.h,v 1.1 2004-01-28 15:25:41 giacomo Exp $ |
*/ |
#ifndef _IP6_TUNNEL_H |
#define _IP6_TUNNEL_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 |
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 */ |
__u32 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 */ |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/cpu.h |
---|
0,0 → 1,53 |
/* |
* include/linux/cpu.h - generic cpu definition |
* |
* This is mainly for topological representation. We define the |
* basic 'struct cpu' here, which can be embedded in per-arch |
* definitions of processors. |
* |
* Basic handling of the devices is done in drivers/base/cpu.c |
* and system devices are handled in drivers/base/sys.c. |
* |
* CPUs are exported via driverfs in the class/cpu/devices/ |
* directory. |
* |
* Per-cpu interfaces can be implemented using a struct device_interface. |
* See the following for how to do this: |
* - drivers/base/intf.c |
* - Documentation/driver-model/interface.txt |
*/ |
#ifndef _LINUX_CPU_H_ |
#define _LINUX_CPU_H_ |
#include <linux/sysdev.h> |
#include <linux/node.h> |
#include <asm/semaphore.h> |
struct cpu { |
int node_id; /* The node which contains the CPU */ |
struct sys_device sysdev; |
}; |
extern int register_cpu(struct cpu *, int, struct node *); |
struct notifier_block; |
#ifdef CONFIG_SMP |
/* Need to know about CPUs going up/down? */ |
extern int register_cpu_notifier(struct notifier_block *nb); |
extern void unregister_cpu_notifier(struct notifier_block *nb); |
int cpu_up(unsigned int cpu); |
#else |
static inline int register_cpu_notifier(struct notifier_block *nb) |
{ |
return 0; |
} |
static inline void unregister_cpu_notifier(struct notifier_block *nb) |
{ |
} |
#endif /* CONFIG_SMP */ |
extern struct sysdev_class cpu_sysdev_class; |
/* Stop CPUs going up and down. */ |
extern struct semaphore cpucontrol; |
#endif /* _LINUX_CPU_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/zftape.h |
---|
0,0 → 1,87 |
#ifndef _ZFTAPE_H |
#define _ZFTAPE_H |
/* |
* Copyright (C) 1996, 1997 Claus-Justus Heine. |
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. |
You should have received a copy of the GNU General Public License |
along with this program; see the file COPYING. If not, write to |
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. |
* |
* $Source: /home/fabio/w/shark/sharkcvs/CVSROOT/shark/drivers/linuxc26/include/linux/zftape.h,v $ |
* $Revision: 1.1 $ |
* $Date: 2004-01-28 15:27:05 $ |
* |
* Special ioctl and other global info for the zftape VFS |
* interface for the QIC-40/80/3010/3020 floppy-tape driver for |
* Linux. |
*/ |
#define ZFTAPE_VERSION "zftape for " FTAPE_VERSION |
#include <linux/ftape.h> |
#define ZFTAPE_LABEL "Ftape - The Linux Floppy Tape Project!" |
/* Bits of the minor device number that control the operation mode */ |
#define ZFT_Q80_MODE (1 << 3) |
#define ZFT_ZIP_MODE (1 << 4) |
#define ZFT_RAW_MODE (1 << 5) |
#define ZFT_MINOR_OP_MASK (ZFT_Q80_MODE | \ |
ZFT_ZIP_MODE | \ |
ZFT_RAW_MODE) |
#define ZFT_MINOR_MASK (FTAPE_SEL_MASK | \ |
ZFT_MINOR_OP_MASK | \ |
FTAPE_NO_REWIND) |
#ifdef ZFT_OBSOLETE |
struct mtblksz { |
unsigned int mt_blksz; |
}; |
#define MTIOC_ZFTAPE_GETBLKSZ _IOR('m', 104, struct mtblksz) |
#endif |
#ifdef __KERNEL__ |
extern int zft_init(void); |
static inline __s64 zft_div_blksz(__s64 value, __u32 blk_sz) |
{ |
if (blk_sz == 1) { |
return value; |
} else { |
return (__s64)(((__u32)(value >> 10) + (blk_sz >> 10) - 1) |
/ (blk_sz >> 10)); |
} |
} |
static inline __s64 zft_mul_blksz(__s64 value, __u32 blk_sz) |
{ |
if (blk_sz == 1) { |
return value; |
} else { |
/* if blk_sz != 1, then it is a multiple of 1024. In |
* this case, `value' will also fit into 32 bits. |
* |
* Actually, this limits the capacity to 42 |
* bits. This is (2^32)*1024, roughly a thousand |
* times 2GB, or 3 Terabytes. Hopefully this is enough |
*/ |
return(__s64)(((__u32)(value)*(blk_sz>>10))<<10); |
} |
} |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/sdlasfm.h |
---|
0,0 → 1,104 |
/***************************************************************************** |
* sdlasfm.h WANPIPE(tm) Multiprotocol WAN Link Driver. |
* Definitions for the SDLA Firmware Module (SFM). |
* |
* Author: Gideon Hack |
* |
* Copyright: (c) 1995-1999 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. |
* ============================================================================ |
* Jun 02, 1999 Gideon Hack Added support for the S514 adapter. |
* Dec 11, 1996 Gene Kozin Cosmetic changes |
* Apr 16, 1996 Gene Kozin Changed adapter & firmware IDs. Version 2 |
* Dec 15, 1995 Gene Kozin Structures chaned |
* Nov 09, 1995 Gene Kozin Initial version. |
*****************************************************************************/ |
#ifndef _SDLASFM_H |
#define _SDLASFM_H |
/****** Defines *************************************************************/ |
#define SFM_VERSION 2 |
#define SFM_SIGNATURE "SFM - Sangoma SDLA Firmware Module" |
/* min/max */ |
#define SFM_IMAGE_SIZE 0x8000 /* max size of SDLA code image file */ |
#define SFM_DESCR_LEN 256 /* max length of description string */ |
#define SFM_MAX_SDLA 16 /* max number of compatible adapters */ |
/* Adapter types */ |
#define SDLA_S502A 5020 |
#define SDLA_S502E 5021 |
#define SDLA_S503 5030 |
#define SDLA_S508 5080 |
#define SDLA_S507 5070 |
#define SDLA_S509 5090 |
#define SDLA_S514 5140 |
/* S514 PCI adapter CPU numbers */ |
#define S514_CPU_A 'A' |
#define S514_CPU_B 'B' |
/* Firmware identification numbers: |
* 0 .. 999 Test & Diagnostics |
* 1000 .. 1999 Streaming HDLC |
* 2000 .. 2999 Bisync |
* 3000 .. 3999 SDLC |
* 4000 .. 4999 HDLC |
* 5000 .. 5999 X.25 |
* 6000 .. 6999 Frame Relay |
* 7000 .. 7999 PPP |
* 8000 .. 8999 Cisco HDLC |
*/ |
#define SFID_CALIB502 200 |
#define SFID_STRM502 1200 |
#define SFID_STRM508 1800 |
#define SFID_BSC502 2200 |
#define SFID_SDLC502 3200 |
#define SFID_HDLC502 4200 |
#define SFID_HDLC508 4800 |
#define SFID_X25_502 5200 |
#define SFID_X25_508 5800 |
#define SFID_FR502 6200 |
#define SFID_FR508 6800 |
#define SFID_PPP502 7200 |
#define SFID_PPP508 7800 |
#define SFID_PPP514 7140 |
#define SFID_CHDLC508 8800 |
#define SFID_CHDLC514 8140 |
/****** Data Types **********************************************************/ |
typedef struct sfm_info /* firmware module information */ |
{ |
unsigned short codeid; /* firmware ID */ |
unsigned short version; /* firmaware version number */ |
unsigned short adapter[SFM_MAX_SDLA]; /* compatible adapter types */ |
unsigned long memsize; /* minimum memory size */ |
unsigned short reserved[2]; /* reserved */ |
unsigned short startoffs; /* entry point offset */ |
unsigned short winoffs; /* dual-port memory window offset */ |
unsigned short codeoffs; /* code load offset */ |
unsigned short codesize; /* code size */ |
unsigned short dataoffs; /* configuration data load offset */ |
unsigned short datasize; /* configuration data size */ |
} sfm_info_t; |
typedef struct sfm /* SDLA firmware file structire */ |
{ |
char signature[80]; /* SFM file signature */ |
unsigned short version; /* file format version */ |
unsigned short checksum; /* info + image */ |
unsigned short reserved[6]; /* reserved */ |
char descr[SFM_DESCR_LEN]; /* description string */ |
sfm_info_t info; /* firmware module info */ |
unsigned char image[1]; /* code image (variable size) */ |
} sfm_t; |
#endif /* _SDLASFM_H */ |
/shark/trunk/drivers/linuxc26/include/linux/hfs_fs_sb.h |
---|
0,0 → 1,53 |
/* |
* linux/include/linux/hfs_fs_sb.h |
* |
* Copyright (C) 1995-1997 Paul H. Hargrove |
* This file may be distributed under the terms of the GNU General Public License. |
* |
* This file defines the type (struct hfs_sb_info) which contains the |
* HFS-specific information in the in-core superblock. |
*/ |
#ifndef _LINUX_HFS_FS_SB_H |
#define _LINUX_HFS_FS_SB_H |
/* forward declaration: */ |
struct hfs_name; |
typedef int (*hfs_namein_fn) (char *, const struct hfs_name *); |
typedef void (*hfs_nameout_fn) (struct hfs_name *, const char *, int); |
typedef void (*hfs_ifill_fn) (struct inode *, ino_t, const int); |
/* |
* struct hfs_sb_info |
* |
* The HFS-specific part of a Linux (struct super_block) |
*/ |
struct hfs_sb_info { |
int magic; /* A magic number */ |
struct hfs_mdb *s_mdb; /* The HFS MDB */ |
int s_quiet; /* Silent failure when |
changing owner or mode? */ |
int s_lowercase; /* Map names to lowercase? */ |
int s_afpd; /* AFPD compatible mode? */ |
int s_version; /* version info */ |
hfs_namein_fn s_namein; /* The function used to |
map Mac filenames to |
Linux filenames */ |
hfs_nameout_fn s_nameout; /* The function used to |
map Linux filenames |
to Mac filenames */ |
hfs_ifill_fn s_ifill; /* The function used |
to fill in inode fields */ |
const struct hfs_name *s_reserved1; /* Reserved names */ |
const struct hfs_name *s_reserved2; /* Reserved names */ |
__u32 s_type; /* Type for new files */ |
__u32 s_creator; /* Creator for new files */ |
umode_t s_umask; /* The umask applied to the |
permissions on all files */ |
uid_t s_uid; /* The uid of all files */ |
gid_t s_gid; /* The gid of all files */ |
char s_conv; /* Type of text conversion */ |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/dm-ioctl-v4.h |
---|
0,0 → 1,237 |
/* |
* Copyright (C) 2001 - 2003 Sistina Software (UK) Limited. |
* |
* 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_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. |
* |
* 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. |
*/ |
/* |
* 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. |
*/ |
uint32_t version[3]; /* in/out */ |
uint32_t data_size; /* total size of data passed in |
* including this struct */ |
uint32_t data_start; /* offset to start of data |
* relative to start of this struct */ |
uint32_t target_count; /* in/out */ |
int32_t open_count; /* out */ |
uint32_t flags; /* in/out */ |
uint32_t event_nr; /* in/out */ |
uint32_t padding; |
uint64_t dev; /* in/out */ |
char name[DM_NAME_LEN]; /* device name */ |
char uuid[DM_UUID_LEN]; /* unique identifier for |
* the block device */ |
}; |
/* |
* Used to specify tables. These structures appear after the |
* dm_ioctl. |
*/ |
struct dm_target_spec { |
uint64_t sector_start; |
uint64_t length; |
int32_t status; /* used when reading from kernel only */ |
/* |
* Offset in bytes (from the start of this struct) to |
* next target_spec. |
*/ |
uint32_t 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 { |
uint32_t count; /* Array size */ |
uint32_t padding; /* unused */ |
uint64_t dev[0]; /* out */ |
}; |
/* |
* Used to get a list of all dm devices. |
*/ |
struct dm_name_list { |
uint64_t dev; |
uint32_t next; /* offset to the next record from |
the _start_ of this */ |
char name[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, |
}; |
#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_VERSION_MAJOR 4 |
#define DM_VERSION_MINOR 0 |
#define DM_VERSION_PATCHLEVEL 0 |
#define DM_VERSION_EXTRA "-ioctl (2003-06-04)" |
/* 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 */ |
#endif /* _LINUX_DM_IOCTL_H */ |
/shark/trunk/drivers/linuxc26/include/linux/if_eql.h |
---|
0,0 → 1,84 |
/* |
* 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 _LINUX_IF_EQL_H |
#define _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 100 |
#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) |
#ifdef __KERNEL__ |
#include <linux/timer.h> |
#include <linux/spinlock.h> |
typedef struct slave { |
struct list_head list; |
struct net_device *dev; |
long priority; |
long priority_bps; |
long priority_Bps; |
long bytes_queued; |
} slave_t; |
typedef struct slave_queue { |
spinlock_t lock; |
struct list_head all_slaves; |
int num_slaves; |
struct net_device *master_dev; |
} slave_queue_t; |
typedef struct equalizer { |
slave_queue_t queue; |
int min_slaves; |
int max_slaves; |
struct net_device_stats stats; |
struct timer_list timer; |
} equalizer_t; |
#endif /* __KERNEL__ */ |
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 /* _LINUX_EQL_H */ |
/shark/trunk/drivers/linuxc26/include/linux/numa.h |
---|
0,0 → 1,16 |
#ifndef _LINUX_NUMA_H |
#define _LINUX_NUMA_H |
#include <linux/config.h> |
#ifdef CONFIG_DISCONTIGMEM |
#include <asm/numnodes.h> |
#endif |
#ifndef NODES_SHIFT |
#define NODES_SHIFT 0 |
#endif |
#define MAX_NUMNODES (1 << NODES_SHIFT) |
#endif /* _LINUX_NUMA_H */ |
/shark/trunk/drivers/linuxc26/include/linux/mca-legacy.h |
---|
0,0 → 1,72 |
/* -*- mode: c; c-basic-offset: 8 -*- */ |
/* This is the function prototypes for the old legacy MCA interface |
* |
* Please move your driver to the new sysfs based one instead */ |
#ifndef _LINUX_MCA_LEGACY_H |
#define _LINUX_MCA_LEGACY_H |
#include <linux/mca.h> |
#warning "MCA legacy - please move your driver to the new sysfs api" |
/* MCA_NOTFOUND is an error condition. The other two indicate |
* motherboard POS registers contain the adapter. They might be |
* returned by the mca_find_adapter() function, and can be used as |
* arguments to mca_read_stored_pos(). I'm not going to allow direct |
* access to the motherboard registers until we run across an adapter |
* that requires it. We don't know enough about them to know if it's |
* safe. |
* |
* See Documentation/mca.txt or one of the existing drivers for |
* more information. |
*/ |
#define MCA_NOTFOUND (-1) |
/* Returns the slot of the first enabled adapter matching id. User can |
* specify a starting slot beyond zero, to deal with detecting multiple |
* devices. Returns MCA_NOTFOUND if id not found. Also checks the |
* integrated adapters. |
*/ |
extern int mca_find_adapter(int id, int start); |
extern int mca_find_unused_adapter(int id, int start); |
/* adapter state info - returns 0 if no */ |
extern int mca_isadapter(int slot); |
extern int mca_isenabled(int slot); |
extern int mca_is_adapter_used(int slot); |
extern int mca_mark_as_used(int slot); |
extern void mca_mark_as_unused(int slot); |
/* gets a byte out of POS register (stored in memory) */ |
extern unsigned char mca_read_stored_pos(int slot, int reg); |
/* This can be expanded later. Right now, it gives us a way of |
* getting meaningful information into the MCA_info structure, |
* so we can have a more interesting /proc/mca. |
*/ |
extern void mca_set_adapter_name(int slot, char* name); |
extern char* mca_get_adapter_name(int slot); |
/* These routines actually mess with the hardware POS registers. They |
* temporarily disable the device (and interrupts), so make sure you know |
* what you're doing if you use them. Furthermore, writing to a POS may |
* result in two devices trying to share a resource, which in turn can |
* result in multiple devices sharing memory spaces, IRQs, or even trashing |
* hardware. YOU HAVE BEEN WARNED. |
* |
* You can only access slots with this. Motherboard registers are off |
* limits. |
*/ |
/* read a byte from the specified POS register. */ |
extern unsigned char mca_read_pos(int slot, int reg); |
/* write a byte to the specified POS register. */ |
extern void mca_write_pos(int slot, int reg, unsigned char byte); |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/mount.h |
---|
0,0 → 1,60 |
/* |
* |
* Definitions for mount interface. This describes the in the kernel build |
* linkedlist with mounted filesystems. |
* |
* Author: Marco van Wieringen <mvw@planets.elm.net> |
* |
* Version: $Id: mount.h,v 1.1 2004-01-28 15:26:00 giacomo Exp $ |
* |
*/ |
#ifndef _LINUX_MOUNT_H |
#define _LINUX_MOUNT_H |
#ifdef __KERNEL__ |
#include <linux/list.h> |
#define MNT_NOSUID 1 |
#define MNT_NODEV 2 |
#define MNT_NOEXEC 4 |
struct vfsmount |
{ |
struct list_head mnt_hash; |
struct vfsmount *mnt_parent; /* fs we are mounted on */ |
struct dentry *mnt_mountpoint; /* dentry of mountpoint */ |
struct dentry *mnt_root; /* root of the mounted tree */ |
struct super_block *mnt_sb; /* pointer to superblock */ |
struct list_head mnt_mounts; /* list of children, anchored here */ |
struct list_head mnt_child; /* and going through their mnt_child */ |
atomic_t mnt_count; |
int mnt_flags; |
char *mnt_devname; /* Name of device e.g. /dev/dsk/hda1 */ |
struct list_head mnt_list; |
}; |
static inline struct vfsmount *mntget(struct vfsmount *mnt) |
{ |
if (mnt) |
atomic_inc(&mnt->mnt_count); |
return mnt; |
} |
extern void __mntput(struct vfsmount *mnt); |
static inline void mntput(struct vfsmount *mnt) |
{ |
if (mnt) { |
if (atomic_dec_and_test(&mnt->mnt_count)) |
__mntput(mnt); |
} |
} |
extern void free_vfsmnt(struct vfsmount *mnt); |
extern struct vfsmount *alloc_vfsmnt(const char *name); |
extern struct vfsmount *do_kern_mount(const char *fstype, int flags, |
const char *name, void *data); |
extern spinlock_t vfsmount_lock; |
#endif |
#endif /* _LINUX_MOUNT_H */ |
/shark/trunk/drivers/linuxc26/include/linux/hysdn_if.h |
---|
0,0 → 1,33 |
/* $Id: hysdn_if.h,v 1.1 2004-01-28 15:25:27 giacomo 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 */ |
/shark/trunk/drivers/linuxc26/include/linux/udf_fs.h |
---|
0,0 → 1,59 |
/* |
* udf_fs.h |
* |
* PURPOSE |
* Included by fs/filesystems.c |
* |
* DESCRIPTION |
* OSTA-UDF(tm) = Optical Storage Technology Association |
* Universal Disk Format. |
* |
* This code is based on version 2.00 of the UDF specification, |
* and revision 3 of the ECMA 167 standard [equivalent to ISO 13346]. |
* http://www.osta.org/ * http://www.ecma.ch/ |
* http://www.iso.org/ |
* |
* CONTACTS |
* E-mail regarding any portion of the Linux UDF file system should be |
* directed to the development team mailing list (run by majordomo): |
* linux_udf@hpesjro.fc.hp.com |
* |
* 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. |
* |
* (C) 1999-2000 Ben Fennema |
* (C) 1999-2000 Stelias Computing Inc |
* |
* HISTORY |
* |
*/ |
#ifndef _UDF_FS_H |
#define _UDF_FS_H 1 |
#define UDF_PREALLOCATE |
#define UDF_DEFAULT_PREALLOC_BLOCKS 8 |
#define UDFFS_DATE "2002/11/15" |
#define UDFFS_VERSION "0.9.7" |
#define UDFFS_DEBUG |
#ifdef UDFFS_DEBUG |
#define udf_debug(f, a...) \ |
{ \ |
printk (KERN_DEBUG "UDF-fs DEBUG %s:%d:%s: ", \ |
__FILE__, __LINE__, __FUNCTION__); \ |
printk (f, ##a); \ |
} |
#else |
#define udf_debug(f, a...) /**/ |
#endif |
#define udf_info(f, a...) \ |
printk (KERN_INFO "UDF-fs INFO " f, ##a); |
#endif /* _UDF_FS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/nfs_mount.h |
---|
0,0 → 1,63 |
#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 5 |
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[256]; /* 1 */ |
int namlen; /* 2 */ |
unsigned int bsize; /* 3 */ |
struct nfs3_fh root; /* 4 */ |
int pseudoflavor; /* 5 */ |
}; |
/* bits in the flags field */ |
#define NFS_MOUNT_SOFT 0x0001 /* 1 */ |
#define NFS_MOUNT_INTR 0x0002 /* 1 */ |
#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_STRICTLOCK 0x1000 /* reserved for NFSv4 */ |
#define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */ |
#define NFS_MOUNT_FLAGMASK 0xFFFF |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/completion.h |
---|
0,0 → 1,36 |
#ifndef __LINUX_COMPLETION_H |
#define __LINUX_COMPLETION_H |
/* |
* (C) Copyright 2001 Linus Torvalds |
* |
* Atomic wait-for-completion handler data structures. |
* See kernel/sched.c for details. |
*/ |
#include <linux/wait.h> |
struct completion { |
unsigned int done; |
wait_queue_head_t wait; |
}; |
#define COMPLETION_INITIALIZER(work) \ |
{ 0, __WAIT_QUEUE_HEAD_INITIALIZER((work).wait) } |
#define DECLARE_COMPLETION(work) \ |
struct completion work = COMPLETION_INITIALIZER(work) |
static inline void init_completion(struct completion *x) |
{ |
x->done = 0; |
init_waitqueue_head(&x->wait); |
} |
extern void FASTCALL(wait_for_completion(struct completion *)); |
extern void FASTCALL(complete(struct completion *)); |
extern void FASTCALL(complete_all(struct completion *)); |
#define INIT_COMPLETION(x) ((x).done = 0) |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/ext3_fs.h |
---|
0,0 → 1,795 |
/* |
* linux/include/linux/ext3_fs.h |
* |
* Copyright (C) 1992, 1993, 1994, 1995 |
* Remy Card (card@masi.ibp.fr) |
* Laboratoire MASI - Institut Blaise Pascal |
* Universite Pierre et Marie Curie (Paris VI) |
* |
* from |
* |
* linux/include/linux/minix_fs.h |
* |
* Copyright (C) 1991, 1992 Linus Torvalds |
*/ |
#ifndef _LINUX_EXT3_FS_H |
#define _LINUX_EXT3_FS_H |
#include <linux/types.h> |
#include <linux/ext3_fs_i.h> |
#include <linux/ext3_fs_sb.h> |
struct statfs; |
/* |
* The second extended filesystem constants/structures |
*/ |
/* |
* Define EXT3FS_DEBUG to produce debug messages |
*/ |
#undef EXT3FS_DEBUG |
/* |
* Define EXT3_PREALLOCATE to preallocate data blocks for expanding files |
*/ |
#undef EXT3_PREALLOCATE /* @@@ Fix this! */ |
#define EXT3_DEFAULT_PREALLOC_BLOCKS 8 |
/* |
* Always enable hashed directories |
*/ |
#define CONFIG_EXT3_INDEX |
/* |
* Debug code |
*/ |
#ifdef EXT3FS_DEBUG |
#define ext3_debug(f, a...) \ |
do { \ |
printk (KERN_DEBUG "EXT3-fs DEBUG (%s, %d): %s:", \ |
__FILE__, __LINE__, __FUNCTION__); \ |
printk (KERN_DEBUG f, ## a); \ |
} while (0) |
#else |
#define ext3_debug(f, a...) do {} while (0) |
#endif |
/* |
* Special inodes numbers |
*/ |
#define EXT3_BAD_INO 1 /* Bad blocks inode */ |
#define EXT3_ROOT_INO 2 /* Root inode */ |
#define EXT3_BOOT_LOADER_INO 5 /* Boot loader inode */ |
#define EXT3_UNDEL_DIR_INO 6 /* Undelete directory inode */ |
#define EXT3_RESIZE_INO 7 /* Reserved group descriptors inode */ |
#define EXT3_JOURNAL_INO 8 /* Journal inode */ |
/* First non-reserved inode for old ext3 filesystems */ |
#define EXT3_GOOD_OLD_FIRST_INO 11 |
/* |
* The second extended file system magic number |
*/ |
#define EXT3_SUPER_MAGIC 0xEF53 |
/* |
* Maximal count of links to a file |
*/ |
#define EXT3_LINK_MAX 32000 |
/* |
* Macro-instructions used to manage several block sizes |
*/ |
#define EXT3_MIN_BLOCK_SIZE 1024 |
#define EXT3_MAX_BLOCK_SIZE 4096 |
#define EXT3_MIN_BLOCK_LOG_SIZE 10 |
#ifdef __KERNEL__ |
# define EXT3_BLOCK_SIZE(s) ((s)->s_blocksize) |
#else |
# define EXT3_BLOCK_SIZE(s) (EXT3_MIN_BLOCK_SIZE << (s)->s_log_block_size) |
#endif |
#define EXT3_ADDR_PER_BLOCK(s) (EXT3_BLOCK_SIZE(s) / sizeof (__u32)) |
#ifdef __KERNEL__ |
# define EXT3_BLOCK_SIZE_BITS(s) ((s)->s_blocksize_bits) |
#else |
# define EXT3_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10) |
#endif |
#ifdef __KERNEL__ |
#define EXT3_ADDR_PER_BLOCK_BITS(s) (EXT3_SB(s)->s_addr_per_block_bits) |
#define EXT3_INODE_SIZE(s) (EXT3_SB(s)->s_inode_size) |
#define EXT3_FIRST_INO(s) (EXT3_SB(s)->s_first_ino) |
#else |
#define EXT3_INODE_SIZE(s) (((s)->s_rev_level == EXT3_GOOD_OLD_REV) ? \ |
EXT3_GOOD_OLD_INODE_SIZE : \ |
(s)->s_inode_size) |
#define EXT3_FIRST_INO(s) (((s)->s_rev_level == EXT3_GOOD_OLD_REV) ? \ |
EXT3_GOOD_OLD_FIRST_INO : \ |
(s)->s_first_ino) |
#endif |
/* |
* Macro-instructions used to manage fragments |
*/ |
#define EXT3_MIN_FRAG_SIZE 1024 |
#define EXT3_MAX_FRAG_SIZE 4096 |
#define EXT3_MIN_FRAG_LOG_SIZE 10 |
#ifdef __KERNEL__ |
# define EXT3_FRAG_SIZE(s) (EXT3_SB(s)->s_frag_size) |
# define EXT3_FRAGS_PER_BLOCK(s) (EXT3_SB(s)->s_frags_per_block) |
#else |
# define EXT3_FRAG_SIZE(s) (EXT3_MIN_FRAG_SIZE << (s)->s_log_frag_size) |
# define EXT3_FRAGS_PER_BLOCK(s) (EXT3_BLOCK_SIZE(s) / EXT3_FRAG_SIZE(s)) |
#endif |
/* |
* Structure of a blocks group descriptor |
*/ |
struct ext3_group_desc |
{ |
__u32 bg_block_bitmap; /* Blocks bitmap block */ |
__u32 bg_inode_bitmap; /* Inodes bitmap block */ |
__u32 bg_inode_table; /* Inodes table block */ |
__u16 bg_free_blocks_count; /* Free blocks count */ |
__u16 bg_free_inodes_count; /* Free inodes count */ |
__u16 bg_used_dirs_count; /* Directories count */ |
__u16 bg_pad; |
__u32 bg_reserved[3]; |
}; |
/* |
* Macro-instructions used to manage group descriptors |
*/ |
#ifdef __KERNEL__ |
# define EXT3_BLOCKS_PER_GROUP(s) (EXT3_SB(s)->s_blocks_per_group) |
# define EXT3_DESC_PER_BLOCK(s) (EXT3_SB(s)->s_desc_per_block) |
# define EXT3_INODES_PER_GROUP(s) (EXT3_SB(s)->s_inodes_per_group) |
# define EXT3_DESC_PER_BLOCK_BITS(s) (EXT3_SB(s)->s_desc_per_block_bits) |
#else |
# define EXT3_BLOCKS_PER_GROUP(s) ((s)->s_blocks_per_group) |
# define EXT3_DESC_PER_BLOCK(s) (EXT3_BLOCK_SIZE(s) / sizeof (struct ext3_group_desc)) |
# define EXT3_INODES_PER_GROUP(s) ((s)->s_inodes_per_group) |
#endif |
/* |
* Constants relative to the data blocks |
*/ |
#define EXT3_NDIR_BLOCKS 12 |
#define EXT3_IND_BLOCK EXT3_NDIR_BLOCKS |
#define EXT3_DIND_BLOCK (EXT3_IND_BLOCK + 1) |
#define EXT3_TIND_BLOCK (EXT3_DIND_BLOCK + 1) |
#define EXT3_N_BLOCKS (EXT3_TIND_BLOCK + 1) |
/* |
* Inode flags |
*/ |
#define EXT3_SECRM_FL 0x00000001 /* Secure deletion */ |
#define EXT3_UNRM_FL 0x00000002 /* Undelete */ |
#define EXT3_COMPR_FL 0x00000004 /* Compress file */ |
#define EXT3_SYNC_FL 0x00000008 /* Synchronous updates */ |
#define EXT3_IMMUTABLE_FL 0x00000010 /* Immutable file */ |
#define EXT3_APPEND_FL 0x00000020 /* writes to file may only append */ |
#define EXT3_NODUMP_FL 0x00000040 /* do not dump file */ |
#define EXT3_NOATIME_FL 0x00000080 /* do not update atime */ |
/* Reserved for compression usage... */ |
#define EXT3_DIRTY_FL 0x00000100 |
#define EXT3_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */ |
#define EXT3_NOCOMPR_FL 0x00000400 /* Don't compress */ |
#define EXT3_ECOMPR_FL 0x00000800 /* Compression error */ |
/* End compression flags --- maybe not all used */ |
#define EXT3_INDEX_FL 0x00001000 /* hash-indexed directory */ |
#define EXT3_IMAGIC_FL 0x00002000 /* AFS directory */ |
#define EXT3_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */ |
#define EXT3_NOTAIL_FL 0x00008000 /* file tail should not be merged */ |
#define EXT3_DIRSYNC_FL 0x00010000 /* dirsync behaviour (directories only) */ |
#define EXT3_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/ |
#define EXT3_RESERVED_FL 0x80000000 /* reserved for ext3 lib */ |
#define EXT3_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */ |
#define EXT3_FL_USER_MODIFIABLE 0x000380FF /* User modifiable flags */ |
/* |
* Inode dynamic state flags |
*/ |
#define EXT3_STATE_JDATA 0x00000001 /* journaled data exists */ |
#define EXT3_STATE_NEW 0x00000002 /* inode is newly created */ |
/* |
* ioctl commands |
*/ |
#define EXT3_IOC_GETFLAGS _IOR('f', 1, long) |
#define EXT3_IOC_SETFLAGS _IOW('f', 2, long) |
#define EXT3_IOC_GETVERSION _IOR('f', 3, long) |
#define EXT3_IOC_SETVERSION _IOW('f', 4, long) |
#define EXT3_IOC_GETVERSION_OLD _IOR('v', 1, long) |
#define EXT3_IOC_SETVERSION_OLD _IOW('v', 2, long) |
#ifdef CONFIG_JBD_DEBUG |
#define EXT3_IOC_WAIT_FOR_READONLY _IOR('f', 99, long) |
#endif |
/* |
* Structure of an inode on the disk |
*/ |
struct ext3_inode { |
__u16 i_mode; /* File mode */ |
__u16 i_uid; /* Low 16 bits of Owner Uid */ |
__u32 i_size; /* Size in bytes */ |
__u32 i_atime; /* Access time */ |
__u32 i_ctime; /* Creation time */ |
__u32 i_mtime; /* Modification time */ |
__u32 i_dtime; /* Deletion Time */ |
__u16 i_gid; /* Low 16 bits of Group Id */ |
__u16 i_links_count; /* Links count */ |
__u32 i_blocks; /* Blocks count */ |
__u32 i_flags; /* File flags */ |
union { |
struct { |
__u32 l_i_reserved1; |
} linux1; |
struct { |
__u32 h_i_translator; |
} hurd1; |
struct { |
__u32 m_i_reserved1; |
} masix1; |
} osd1; /* OS dependent 1 */ |
__u32 i_block[EXT3_N_BLOCKS];/* Pointers to blocks */ |
__u32 i_generation; /* File version (for NFS) */ |
__u32 i_file_acl; /* File ACL */ |
__u32 i_dir_acl; /* Directory ACL */ |
__u32 i_faddr; /* Fragment address */ |
union { |
struct { |
__u8 l_i_frag; /* Fragment number */ |
__u8 l_i_fsize; /* Fragment size */ |
__u16 i_pad1; |
__u16 l_i_uid_high; /* these 2 fields */ |
__u16 l_i_gid_high; /* were reserved2[0] */ |
__u32 l_i_reserved2; |
} linux2; |
struct { |
__u8 h_i_frag; /* Fragment number */ |
__u8 h_i_fsize; /* Fragment size */ |
__u16 h_i_mode_high; |
__u16 h_i_uid_high; |
__u16 h_i_gid_high; |
__u32 h_i_author; |
} hurd2; |
struct { |
__u8 m_i_frag; /* Fragment number */ |
__u8 m_i_fsize; /* Fragment size */ |
__u16 m_pad1; |
__u32 m_i_reserved2[2]; |
} masix2; |
} osd2; /* OS dependent 2 */ |
}; |
#define i_size_high i_dir_acl |
#if defined(__KERNEL__) || defined(__linux__) |
#define i_reserved1 osd1.linux1.l_i_reserved1 |
#define i_frag osd2.linux2.l_i_frag |
#define i_fsize osd2.linux2.l_i_fsize |
#define i_uid_low i_uid |
#define i_gid_low i_gid |
#define i_uid_high osd2.linux2.l_i_uid_high |
#define i_gid_high osd2.linux2.l_i_gid_high |
#define i_reserved2 osd2.linux2.l_i_reserved2 |
#elif defined(__GNU__) |
#define i_translator osd1.hurd1.h_i_translator |
#define i_frag osd2.hurd2.h_i_frag; |
#define i_fsize osd2.hurd2.h_i_fsize; |
#define i_uid_high osd2.hurd2.h_i_uid_high |
#define i_gid_high osd2.hurd2.h_i_gid_high |
#define i_author osd2.hurd2.h_i_author |
#elif defined(__masix__) |
#define i_reserved1 osd1.masix1.m_i_reserved1 |
#define i_frag osd2.masix2.m_i_frag |
#define i_fsize osd2.masix2.m_i_fsize |
#define i_reserved2 osd2.masix2.m_i_reserved2 |
#endif /* defined(__KERNEL__) || defined(__linux__) */ |
/* |
* File system states |
*/ |
#define EXT3_VALID_FS 0x0001 /* Unmounted cleanly */ |
#define EXT3_ERROR_FS 0x0002 /* Errors detected */ |
#define EXT3_ORPHAN_FS 0x0004 /* Orphans being recovered */ |
/* |
* Mount flags |
*/ |
#define EXT3_MOUNT_CHECK 0x0001 /* Do mount-time checks */ |
#define EXT3_MOUNT_OLDALLOC 0x0002 /* Don't use the new Orlov allocator */ |
#define EXT3_MOUNT_GRPID 0x0004 /* Create files with directory's group */ |
#define EXT3_MOUNT_DEBUG 0x0008 /* Some debugging messages */ |
#define EXT3_MOUNT_ERRORS_CONT 0x0010 /* Continue on errors */ |
#define EXT3_MOUNT_ERRORS_RO 0x0020 /* Remount fs ro on errors */ |
#define EXT3_MOUNT_ERRORS_PANIC 0x0040 /* Panic on errors */ |
#define EXT3_MOUNT_MINIX_DF 0x0080 /* Mimics the Minix statfs */ |
#define EXT3_MOUNT_NOLOAD 0x0100 /* Don't use existing journal*/ |
#define EXT3_MOUNT_ABORT 0x0200 /* Fatal error detected */ |
#define EXT3_MOUNT_DATA_FLAGS 0x0C00 /* Mode for data writes: */ |
#define EXT3_MOUNT_JOURNAL_DATA 0x0400 /* Write data to journal */ |
#define EXT3_MOUNT_ORDERED_DATA 0x0800 /* Flush data before commit */ |
#define EXT3_MOUNT_WRITEBACK_DATA 0x0C00 /* No data ordering */ |
#define EXT3_MOUNT_UPDATE_JOURNAL 0x1000 /* Update the journal format */ |
#define EXT3_MOUNT_NO_UID32 0x2000 /* Disable 32-bit UIDs */ |
#define EXT3_MOUNT_XATTR_USER 0x4000 /* Extended user attributes */ |
#define EXT3_MOUNT_POSIX_ACL 0x8000 /* POSIX Access Control Lists */ |
/* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */ |
#ifndef _LINUX_EXT2_FS_H |
#define clear_opt(o, opt) o &= ~EXT3_MOUNT_##opt |
#define set_opt(o, opt) o |= EXT3_MOUNT_##opt |
#define test_opt(sb, opt) (EXT3_SB(sb)->s_mount_opt & \ |
EXT3_MOUNT_##opt) |
#else |
#define EXT2_MOUNT_NOLOAD EXT3_MOUNT_NOLOAD |
#define EXT2_MOUNT_ABORT EXT3_MOUNT_ABORT |
#define EXT2_MOUNT_DATA_FLAGS EXT3_MOUNT_DATA_FLAGS |
#endif |
#define ext3_set_bit ext2_set_bit |
#define ext3_set_bit_atomic ext2_set_bit_atomic |
#define ext3_clear_bit ext2_clear_bit |
#define ext3_clear_bit_atomic ext2_clear_bit_atomic |
#define ext3_test_bit ext2_test_bit |
#define ext3_find_first_zero_bit ext2_find_first_zero_bit |
#define ext3_find_next_zero_bit ext2_find_next_zero_bit |
/* |
* Maximal mount counts between two filesystem checks |
*/ |
#define EXT3_DFL_MAX_MNT_COUNT 20 /* Allow 20 mounts */ |
#define EXT3_DFL_CHECKINTERVAL 0 /* Don't use interval check */ |
/* |
* Behaviour when detecting errors |
*/ |
#define EXT3_ERRORS_CONTINUE 1 /* Continue execution */ |
#define EXT3_ERRORS_RO 2 /* Remount fs read-only */ |
#define EXT3_ERRORS_PANIC 3 /* Panic */ |
#define EXT3_ERRORS_DEFAULT EXT3_ERRORS_CONTINUE |
/* |
* Structure of the super block |
*/ |
struct ext3_super_block { |
/*00*/ __u32 s_inodes_count; /* Inodes count */ |
__u32 s_blocks_count; /* Blocks count */ |
__u32 s_r_blocks_count; /* Reserved blocks count */ |
__u32 s_free_blocks_count; /* Free blocks count */ |
/*10*/ __u32 s_free_inodes_count; /* Free inodes count */ |
__u32 s_first_data_block; /* First Data Block */ |
__u32 s_log_block_size; /* Block size */ |
__s32 s_log_frag_size; /* Fragment size */ |
/*20*/ __u32 s_blocks_per_group; /* # Blocks per group */ |
__u32 s_frags_per_group; /* # Fragments per group */ |
__u32 s_inodes_per_group; /* # Inodes per group */ |
__u32 s_mtime; /* Mount time */ |
/*30*/ __u32 s_wtime; /* Write time */ |
__u16 s_mnt_count; /* Mount count */ |
__s16 s_max_mnt_count; /* Maximal mount count */ |
__u16 s_magic; /* Magic signature */ |
__u16 s_state; /* File system state */ |
__u16 s_errors; /* Behaviour when detecting errors */ |
__u16 s_minor_rev_level; /* minor revision level */ |
/*40*/ __u32 s_lastcheck; /* time of last check */ |
__u32 s_checkinterval; /* max. time between checks */ |
__u32 s_creator_os; /* OS */ |
__u32 s_rev_level; /* Revision level */ |
/*50*/ __u16 s_def_resuid; /* Default uid for reserved blocks */ |
__u16 s_def_resgid; /* Default gid for reserved blocks */ |
/* |
* These fields are for EXT3_DYNAMIC_REV superblocks only. |
* |
* Note: the difference between the compatible feature set and |
* the incompatible feature set is that if there is a bit set |
* in the incompatible feature set that the kernel doesn't |
* know about, it should refuse to mount the filesystem. |
* |
* e2fsck's requirements are more strict; if it doesn't know |
* about a feature in either the compatible or incompatible |
* feature set, it must abort and not try to meddle with |
* things it doesn't understand... |
*/ |
__u32 s_first_ino; /* First non-reserved inode */ |
__u16 s_inode_size; /* size of inode structure */ |
__u16 s_block_group_nr; /* block group # of this superblock */ |
__u32 s_feature_compat; /* compatible feature set */ |
/*60*/ __u32 s_feature_incompat; /* incompatible feature set */ |
__u32 s_feature_ro_compat; /* readonly-compatible feature set */ |
/*68*/ __u8 s_uuid[16]; /* 128-bit uuid for volume */ |
/*78*/ char s_volume_name[16]; /* volume name */ |
/*88*/ char s_last_mounted[64]; /* directory where last mounted */ |
/*C8*/ __u32 s_algorithm_usage_bitmap; /* For compression */ |
/* |
* Performance hints. Directory preallocation should only |
* happen if the EXT3_FEATURE_COMPAT_DIR_PREALLOC flag is on. |
*/ |
__u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/ |
__u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */ |
__u16 s_padding1; |
/* |
* Journaling support valid if EXT3_FEATURE_COMPAT_HAS_JOURNAL set. |
*/ |
/*D0*/ __u8 s_journal_uuid[16]; /* uuid of journal superblock */ |
/*E0*/ __u32 s_journal_inum; /* inode number of journal file */ |
__u32 s_journal_dev; /* device number of journal file */ |
__u32 s_last_orphan; /* start of list of inodes to delete */ |
__u32 s_hash_seed[4]; /* HTREE hash seed */ |
__u8 s_def_hash_version; /* Default hash version to use */ |
__u8 s_reserved_char_pad; |
__u16 s_reserved_word_pad; |
__u32 s_default_mount_opts; |
__u32 s_first_meta_bg; /* First metablock block group */ |
__u32 s_reserved[190]; /* Padding to the end of the block */ |
}; |
#ifdef __KERNEL__ |
static inline struct ext3_sb_info * EXT3_SB(struct super_block *sb) |
{ |
return sb->s_fs_info; |
} |
static inline struct ext3_inode_info *EXT3_I(struct inode *inode) |
{ |
return container_of(inode, struct ext3_inode_info, vfs_inode); |
} |
#else |
/* Assume that user mode programs are passing in an ext3fs superblock, not |
* a kernel struct super_block. This will allow us to call the feature-test |
* macros from user land. */ |
#define EXT3_SB(sb) (sb) |
#endif |
#define NEXT_ORPHAN(inode) EXT3_I(inode)->i_dtime |
/* |
* Codes for operating systems |
*/ |
#define EXT3_OS_LINUX 0 |
#define EXT3_OS_HURD 1 |
#define EXT3_OS_MASIX 2 |
#define EXT3_OS_FREEBSD 3 |
#define EXT3_OS_LITES 4 |
/* |
* Revision levels |
*/ |
#define EXT3_GOOD_OLD_REV 0 /* The good old (original) format */ |
#define EXT3_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */ |
#define EXT3_CURRENT_REV EXT3_GOOD_OLD_REV |
#define EXT3_MAX_SUPP_REV EXT3_DYNAMIC_REV |
#define EXT3_GOOD_OLD_INODE_SIZE 128 |
/* |
* Feature set definitions |
*/ |
#define EXT3_HAS_COMPAT_FEATURE(sb,mask) \ |
( EXT3_SB(sb)->s_es->s_feature_compat & cpu_to_le32(mask) ) |
#define EXT3_HAS_RO_COMPAT_FEATURE(sb,mask) \ |
( EXT3_SB(sb)->s_es->s_feature_ro_compat & cpu_to_le32(mask) ) |
#define EXT3_HAS_INCOMPAT_FEATURE(sb,mask) \ |
( EXT3_SB(sb)->s_es->s_feature_incompat & cpu_to_le32(mask) ) |
#define EXT3_SET_COMPAT_FEATURE(sb,mask) \ |
EXT3_SB(sb)->s_es->s_feature_compat |= cpu_to_le32(mask) |
#define EXT3_SET_RO_COMPAT_FEATURE(sb,mask) \ |
EXT3_SB(sb)->s_es->s_feature_ro_compat |= cpu_to_le32(mask) |
#define EXT3_SET_INCOMPAT_FEATURE(sb,mask) \ |
EXT3_SB(sb)->s_es->s_feature_incompat |= cpu_to_le32(mask) |
#define EXT3_CLEAR_COMPAT_FEATURE(sb,mask) \ |
EXT3_SB(sb)->s_es->s_feature_compat &= ~cpu_to_le32(mask) |
#define EXT3_CLEAR_RO_COMPAT_FEATURE(sb,mask) \ |
EXT3_SB(sb)->s_es->s_feature_ro_compat &= ~cpu_to_le32(mask) |
#define EXT3_CLEAR_INCOMPAT_FEATURE(sb,mask) \ |
EXT3_SB(sb)->s_es->s_feature_incompat &= ~cpu_to_le32(mask) |
#define EXT3_FEATURE_COMPAT_DIR_PREALLOC 0x0001 |
#define EXT3_FEATURE_COMPAT_IMAGIC_INODES 0x0002 |
#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 |
#define EXT3_FEATURE_COMPAT_EXT_ATTR 0x0008 |
#define EXT3_FEATURE_COMPAT_RESIZE_INODE 0x0010 |
#define EXT3_FEATURE_COMPAT_DIR_INDEX 0x0020 |
#define EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 |
#define EXT3_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 |
#define EXT3_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 |
#define EXT3_FEATURE_INCOMPAT_COMPRESSION 0x0001 |
#define EXT3_FEATURE_INCOMPAT_FILETYPE 0x0002 |
#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 /* Needs recovery */ |
#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 /* Journal device */ |
#define EXT3_FEATURE_INCOMPAT_META_BG 0x0010 |
#define EXT3_FEATURE_COMPAT_SUPP EXT2_FEATURE_COMPAT_EXT_ATTR |
#define EXT3_FEATURE_INCOMPAT_SUPP (EXT3_FEATURE_INCOMPAT_FILETYPE| \ |
EXT3_FEATURE_INCOMPAT_RECOVER| \ |
EXT3_FEATURE_INCOMPAT_META_BG) |
#define EXT3_FEATURE_RO_COMPAT_SUPP (EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER| \ |
EXT3_FEATURE_RO_COMPAT_LARGE_FILE| \ |
EXT3_FEATURE_RO_COMPAT_BTREE_DIR) |
/* |
* Default values for user and/or group using reserved blocks |
*/ |
#define EXT3_DEF_RESUID 0 |
#define EXT3_DEF_RESGID 0 |
/* |
* Default mount options |
*/ |
#define EXT3_DEFM_DEBUG 0x0001 |
#define EXT3_DEFM_BSDGROUPS 0x0002 |
#define EXT3_DEFM_XATTR_USER 0x0004 |
#define EXT3_DEFM_ACL 0x0008 |
#define EXT3_DEFM_UID16 0x0010 |
#define EXT3_DEFM_JMODE 0x0060 |
#define EXT3_DEFM_JMODE_DATA 0x0020 |
#define EXT3_DEFM_JMODE_ORDERED 0x0040 |
#define EXT3_DEFM_JMODE_WBACK 0x0060 |
/* |
* Structure of a directory entry |
*/ |
#define EXT3_NAME_LEN 255 |
struct ext3_dir_entry { |
__u32 inode; /* Inode number */ |
__u16 rec_len; /* Directory entry length */ |
__u16 name_len; /* Name length */ |
char name[EXT3_NAME_LEN]; /* File name */ |
}; |
/* |
* The new version of the directory entry. Since EXT3 structures are |
* stored in intel byte order, and the name_len field could never be |
* bigger than 255 chars, it's safe to reclaim the extra byte for the |
* file_type field. |
*/ |
struct ext3_dir_entry_2 { |
__u32 inode; /* Inode number */ |
__u16 rec_len; /* Directory entry length */ |
__u8 name_len; /* Name length */ |
__u8 file_type; |
char name[EXT3_NAME_LEN]; /* File name */ |
}; |
/* |
* Ext3 directory file types. Only the low 3 bits are used. The |
* other bits are reserved for now. |
*/ |
#define EXT3_FT_UNKNOWN 0 |
#define EXT3_FT_REG_FILE 1 |
#define EXT3_FT_DIR 2 |
#define EXT3_FT_CHRDEV 3 |
#define EXT3_FT_BLKDEV 4 |
#define EXT3_FT_FIFO 5 |
#define EXT3_FT_SOCK 6 |
#define EXT3_FT_SYMLINK 7 |
#define EXT3_FT_MAX 8 |
/* |
* EXT3_DIR_PAD defines the directory entries boundaries |
* |
* NOTE: It must be a multiple of 4 |
*/ |
#define EXT3_DIR_PAD 4 |
#define EXT3_DIR_ROUND (EXT3_DIR_PAD - 1) |
#define EXT3_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT3_DIR_ROUND) & \ |
~EXT3_DIR_ROUND) |
/* |
* Hash Tree Directory indexing |
* (c) Daniel Phillips, 2001 |
*/ |
#ifdef CONFIG_EXT3_INDEX |
#define is_dx(dir) (EXT3_HAS_COMPAT_FEATURE(dir->i_sb, \ |
EXT3_FEATURE_COMPAT_DIR_INDEX) && \ |
(EXT3_I(dir)->i_flags & EXT3_INDEX_FL)) |
#define EXT3_DIR_LINK_MAX(dir) (!is_dx(dir) && (dir)->i_nlink >= EXT3_LINK_MAX) |
#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || (dir)->i_nlink == 1) |
#else |
#define is_dx(dir) 0 |
#define EXT3_DIR_LINK_MAX(dir) ((dir)->i_nlink >= EXT3_LINK_MAX) |
#define EXT3_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2) |
#endif |
/* Legal values for the dx_root hash_version field: */ |
#define DX_HASH_LEGACY 0 |
#define DX_HASH_HALF_MD4 1 |
#define DX_HASH_TEA 2 |
/* hash info structure used by the directory hash */ |
struct dx_hash_info |
{ |
u32 hash; |
u32 minor_hash; |
int hash_version; |
u32 *seed; |
}; |
#define EXT3_HTREE_EOF 0x7fffffff |
#ifdef __KERNEL__ |
/* |
* Control parameters used by ext3_htree_next_block |
*/ |
#define HASH_NB_ALWAYS 1 |
/* |
* Describe an inode's exact location on disk and in memory |
*/ |
struct ext3_iloc |
{ |
struct buffer_head *bh; |
unsigned long offset; |
unsigned long block_group; |
}; |
static inline struct ext3_inode *ext3_raw_inode(struct ext3_iloc *iloc) |
{ |
return (struct ext3_inode *) (iloc->bh->b_data + iloc->offset); |
} |
/* |
* This structure is stuffed into the struct file's private_data field |
* for directories. It is where we put information so that we can do |
* readdir operations in hash tree order. |
*/ |
struct dir_private_info { |
struct rb_root root; |
struct rb_node *curr_node; |
struct fname *extra_fname; |
loff_t last_pos; |
__u32 curr_hash; |
__u32 curr_minor_hash; |
__u32 next_hash; |
}; |
/* |
* Special error return code only used by dx_probe() and its callers. |
*/ |
#define ERR_BAD_DX_DIR -75000 |
/* |
* Function prototypes |
*/ |
/* |
* Ok, these declarations are also in <linux/kernel.h> but none of the |
* ext3 source programs needs to include it so they are duplicated here. |
*/ |
# define NORET_TYPE /**/ |
# define ATTRIB_NORET __attribute__((noreturn)) |
# define NORET_AND noreturn, |
/* balloc.c */ |
extern int ext3_bg_has_super(struct super_block *sb, int group); |
extern unsigned long ext3_bg_num_gdb(struct super_block *sb, int group); |
extern int ext3_new_block (handle_t *, struct inode *, unsigned long, |
__u32 *, __u32 *, int *); |
extern void ext3_free_blocks (handle_t *, struct inode *, unsigned long, |
unsigned long); |
extern unsigned long ext3_count_free_blocks (struct super_block *); |
extern void ext3_check_blocks_bitmap (struct super_block *); |
extern struct ext3_group_desc * ext3_get_group_desc(struct super_block * sb, |
unsigned int block_group, |
struct buffer_head ** bh); |
/* dir.c */ |
extern int ext3_check_dir_entry(const char *, struct inode *, |
struct ext3_dir_entry_2 *, |
struct buffer_head *, unsigned long); |
extern int ext3_htree_store_dirent(struct file *dir_file, __u32 hash, |
__u32 minor_hash, |
struct ext3_dir_entry_2 *dirent); |
extern void ext3_htree_free_dir_info(struct dir_private_info *p); |
/* fsync.c */ |
extern int ext3_sync_file (struct file *, struct dentry *, int); |
/* hash.c */ |
extern int ext3fs_dirhash(const char *name, int len, struct |
dx_hash_info *hinfo); |
/* ialloc.c */ |
extern struct inode * ext3_new_inode (handle_t *, struct inode *, int); |
extern void ext3_free_inode (handle_t *, struct inode *); |
extern struct inode * ext3_orphan_get (struct super_block *, unsigned long); |
extern unsigned long ext3_count_free_inodes (struct super_block *); |
extern unsigned long ext3_count_dirs (struct super_block *); |
extern void ext3_check_inodes_bitmap (struct super_block *); |
extern unsigned long ext3_count_free (struct buffer_head *, unsigned); |
/* inode.c */ |
extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int); |
extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *); |
extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *); |
extern void ext3_read_inode (struct inode *); |
extern void ext3_write_inode (struct inode *, int); |
extern int ext3_setattr (struct dentry *, struct iattr *); |
extern void ext3_put_inode (struct inode *); |
extern void ext3_delete_inode (struct inode *); |
extern int ext3_sync_inode (handle_t *, struct inode *); |
extern void ext3_discard_prealloc (struct inode *); |
extern void ext3_dirty_inode(struct inode *); |
extern int ext3_change_inode_journal_flag(struct inode *, int); |
extern void ext3_truncate (struct inode *); |
extern void ext3_set_inode_flags(struct inode *); |
extern void ext3_set_aops(struct inode *inode); |
/* ioctl.c */ |
extern int ext3_ioctl (struct inode *, struct file *, unsigned int, |
unsigned long); |
/* namei.c */ |
extern int ext3_orphan_add(handle_t *, struct inode *); |
extern int ext3_orphan_del(handle_t *, struct inode *); |
extern int ext3_htree_fill_tree(struct file *dir_file, __u32 start_hash, |
__u32 start_minor_hash, __u32 *next_hash); |
/* super.c */ |
extern void ext3_error (struct super_block *, const char *, const char *, ...) |
__attribute__ ((format (printf, 3, 4))); |
extern void __ext3_std_error (struct super_block *, const char *, int); |
extern void ext3_abort (struct super_block *, const char *, const char *, ...) |
__attribute__ ((format (printf, 3, 4))); |
extern NORET_TYPE void ext3_panic (struct super_block *, const char *, |
const char *, ...) |
__attribute__ ((NORET_AND format (printf, 3, 4))); |
extern void ext3_warning (struct super_block *, const char *, const char *, ...) |
__attribute__ ((format (printf, 3, 4))); |
extern void ext3_update_dynamic_rev (struct super_block *sb); |
extern void ext3_put_super (struct super_block *); |
extern void ext3_write_super (struct super_block *); |
extern void ext3_write_super_lockfs (struct super_block *); |
extern void ext3_unlockfs (struct super_block *); |
extern int ext3_remount (struct super_block *, int *, char *); |
extern int ext3_statfs (struct super_block *, struct kstatfs *); |
#define ext3_std_error(sb, errno) \ |
do { \ |
if ((errno)) \ |
__ext3_std_error((sb), __FUNCTION__, (errno)); \ |
} while (0) |
extern const char *ext3_decode_error(struct super_block *sb, int errno, char nbuf[16]); |
/* |
* Inodes and files operations |
*/ |
/* dir.c */ |
extern struct file_operations ext3_dir_operations; |
/* file.c */ |
extern struct inode_operations ext3_file_inode_operations; |
extern struct file_operations ext3_file_operations; |
/* namei.c */ |
extern struct inode_operations ext3_dir_inode_operations; |
extern struct inode_operations ext3_special_inode_operations; |
/* symlink.c */ |
extern struct inode_operations ext3_symlink_inode_operations; |
extern struct inode_operations ext3_fast_symlink_inode_operations; |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_EXT3_FS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/videotext.h |
---|
0,0 → 1,144 |
#ifndef _VTX_H |
#define _VTX_H |
/* $Id: videotext.h,v 1.1 2004-01-28 15:27:00 giacomo Exp $ |
* |
* Copyright (c) 1994-97 Martin Buck <martin-2.buck@student.uni-ulm.de> |
* Read COPYING for more information |
* |
*/ |
/* |
* Videotext ioctls |
*/ |
#define VTXIOCGETINFO 0x7101 /* get version of driver & capabilities of vtx-chipset */ |
#define VTXIOCCLRPAGE 0x7102 /* clear page-buffer */ |
#define VTXIOCCLRFOUND 0x7103 /* clear bits indicating that page was found */ |
#define VTXIOCPAGEREQ 0x7104 /* search for page */ |
#define VTXIOCGETSTAT 0x7105 /* get status of page-buffer */ |
#define VTXIOCGETPAGE 0x7106 /* get contents of page-buffer */ |
#define VTXIOCSTOPDAU 0x7107 /* stop data acquisition unit */ |
#define VTXIOCPUTPAGE 0x7108 /* display page on TV-screen */ |
#define VTXIOCSETDISP 0x7109 /* set TV-mode */ |
#define VTXIOCPUTSTAT 0x710a /* set status of TV-output-buffer */ |
#define VTXIOCCLRCACHE 0x710b /* clear cache on VTX-interface (if avail.) */ |
#define VTXIOCSETVIRT 0x710c /* turn on virtual mode (this disables TV-display) */ |
/* |
* Definitions for VTXIOCGETINFO |
*/ |
#define SAA5243 0 |
#define SAA5246 1 |
#define SAA5249 2 |
#define SAA5248 3 |
#define XSTV5346 4 |
typedef struct { |
int version_major, version_minor; /* version of driver; if version_major changes, driver */ |
/* is not backward compatible!!! CHECK THIS!!! */ |
int numpages; /* number of page-buffers of vtx-chipset */ |
int cct_type; /* type of vtx-chipset (SAA5243, SAA5246, SAA5248 or |
* SAA5249) */ |
} |
vtx_info_t; |
/* |
* Definitions for VTXIOC{CLRPAGE,CLRFOUND,PAGEREQ,GETSTAT,GETPAGE,STOPDAU,PUTPAGE,SETDISP} |
*/ |
#define MIN_UNIT (1<<0) |
#define MIN_TEN (1<<1) |
#define HR_UNIT (1<<2) |
#define HR_TEN (1<<3) |
#define PG_UNIT (1<<4) |
#define PG_TEN (1<<5) |
#define PG_HUND (1<<6) |
#define PGMASK_MAX (1<<7) |
#define PGMASK_PAGE (PG_HUND | PG_TEN | PG_UNIT) |
#define PGMASK_HOUR (HR_TEN | HR_UNIT) |
#define PGMASK_MINUTE (MIN_TEN | MIN_UNIT) |
typedef struct |
{ |
int page; /* number of requested page (hexadecimal) */ |
int hour; /* requested hour (hexadecimal) */ |
int minute; /* requested minute (hexadecimal) */ |
int pagemask; /* mask defining which values of the above are set */ |
int pgbuf; /* buffer where page will be stored */ |
int start; /* start of requested part of page */ |
int end; /* end of requested part of page */ |
void *buffer; /* pointer to beginning of destination buffer */ |
} |
vtx_pagereq_t; |
/* |
* Definitions for VTXIOC{GETSTAT,PUTSTAT} |
*/ |
#define VTX_PAGESIZE (40 * 24) |
#define VTX_VIRTUALSIZE (40 * 49) |
typedef struct |
{ |
int pagenum; /* number of page (hexadecimal) */ |
int hour; /* hour (hexadecimal) */ |
int minute; /* minute (hexadecimal) */ |
int charset; /* national charset */ |
unsigned delete : 1; /* delete page (C4) */ |
unsigned headline : 1; /* insert headline (C5) */ |
unsigned subtitle : 1; /* insert subtitle (C6) */ |
unsigned supp_header : 1; /* suppress header (C7) */ |
unsigned update : 1; /* update page (C8) */ |
unsigned inter_seq : 1; /* interrupted sequence (C9) */ |
unsigned dis_disp : 1; /* disable/suppress display (C10) */ |
unsigned serial : 1; /* serial mode (C11) */ |
unsigned notfound : 1; /* /FOUND */ |
unsigned pblf : 1; /* PBLF */ |
unsigned hamming : 1; /* hamming-error occurred */ |
} |
vtx_pageinfo_t; |
/* |
* Definitions for VTXIOCSETDISP |
*/ |
typedef enum { |
DISPOFF, DISPNORM, DISPTRANS, DISPINS, INTERLACE_OFFSET |
} vtxdisp_t; |
/* |
* Tuner ioctls |
*/ |
#define TUNIOCGETINFO 0x7201 /* get version of driver & capabilities of tuner */ |
#define TUNIOCRESET 0x7202 /* reset tuner */ |
#define TUNIOCSETFREQ 0x7203 /* set tuning frequency (unit: kHz) */ |
#define TUNIOCGETFREQ 0x7204 /* get tuning frequency (unit: kHz) */ |
#define TUNIOCSETCHAN 0x7205 /* set tuning channel */ |
#define TUNIOCGETCHAN 0x7206 /* get tuning channel */ |
typedef struct |
{ |
int version_major, version_minor; /* version of driver; if version_major changes, driver */ |
/* is not backward compatible!!! CHECK THIS!!! */ |
unsigned freq : 1; /* tuner can be set to given frequency */ |
unsigned chan : 1; /* tuner stores several channels */ |
unsigned scan : 1; /* tuner supports scanning */ |
unsigned autoscan : 1; /* tuner supports scanning with automatic stop */ |
unsigned afc : 1; /* tuner supports AFC */ |
unsigned dummy1, dummy2, dummy3, dummy4, dummy5, dummy6, dummy7, dummy8, dummy9, dummy10, |
dummy11 : 1; |
int dummy12, dummy13, dummy14, dummy15, dummy16, dummy17, dummy18, dummy19; |
} tuner_info_t; |
#endif /* _VTX_H */ |
/shark/trunk/drivers/linuxc26/include/linux/topology.h |
---|
0,0 → 1,57 |
/* |
* include/linux/topology.h |
* |
* Written by: Matthew Dobson, IBM Corporation |
* |
* Copyright (C) 2002, IBM Corp. |
* |
* 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, GOOD TITLE or |
* NON INFRINGEMENT. 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. |
* |
* Send feedback to <colpatch@us.ibm.com> |
*/ |
#ifndef _LINUX_TOPOLOGY_H |
#define _LINUX_TOPOLOGY_H |
#include <linux/cpumask.h> |
#include <linux/bitops.h> |
#include <linux/mmzone.h> |
#include <linux/smp.h> |
#include <asm/topology.h> |
#ifndef nr_cpus_node |
#define nr_cpus_node(node) \ |
({ \ |
cpumask_t __tmp__; \ |
__tmp__ = node_to_cpumask(node); \ |
cpus_weight(__tmp__); \ |
}) |
#endif |
static inline int __next_node_with_cpus(int node) |
{ |
do |
++node; |
while (node < numnodes && !nr_cpus_node(node)); |
return node; |
} |
#define for_each_node_with_cpus(node) \ |
for (node = 0; node < numnodes; node = __next_node_with_cpus(node)) |
#endif /* _LINUX_TOPOLOGY_H */ |
/shark/trunk/drivers/linuxc26/include/linux/i2c-algo-ite.h |
---|
0,0 → 1,69 |
/* ------------------------------------------------------------------------- */ |
/* i2c-algo-ite.h i2c driver algorithms for ITE IIC adapters */ |
/* ------------------------------------------------------------------------- */ |
/* Copyright (C) 1995-97 Simon G. Vogl |
1998-99 Hans Berglund |
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. */ |
/* ------------------------------------------------------------------------- */ |
/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even |
Frodo Looijaard <frodol@dds.nl> */ |
/* Modifications by MontaVista Software, 2001 |
Changes made to support the ITE IIC peripheral */ |
#ifndef I2C_ALGO_ITE_H |
#define I2C_ALGO_ITE_H 1 |
#include <linux/i2c.h> |
/* Example of a sequential read request: |
struct i2c_iic_msg s_msg; |
s_msg.addr=device_address; |
s_msg.len=length; |
s_msg.buf=buffer; |
s_msg.waddr=word_address; |
ioctl(file,I2C_SREAD, &s_msg); |
*/ |
#define I2C_SREAD 0x780 /* SREAD ioctl command */ |
struct i2c_iic_msg { |
__u16 addr; /* device address */ |
__u16 waddr; /* word address */ |
short len; /* msg length */ |
char *buf; /* pointer to msg data */ |
}; |
struct i2c_algo_iic_data { |
void *data; /* private data for lolevel routines */ |
void (*setiic) (void *data, int ctl, int val); |
int (*getiic) (void *data, int ctl); |
int (*getown) (void *data); |
int (*getclock) (void *data); |
void (*waitforpin) (void); |
/* local settings */ |
int udelay; |
int mdelay; |
int timeout; |
}; |
int i2c_iic_add_bus(struct i2c_adapter *); |
int i2c_iic_del_bus(struct i2c_adapter *); |
#endif /* I2C_ALGO_ITE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/pm.h |
---|
0,0 → 1,251 |
/* |
* pm.h - Power management interface |
* |
* Copyright (C) 2000 Andrew Henroid |
* |
* 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_PM_H |
#define _LINUX_PM_H |
#ifdef __KERNEL__ |
#include <linux/config.h> |
#include <linux/list.h> |
#include <asm/atomic.h> |
/* |
* Power management requests |
*/ |
enum |
{ |
PM_SUSPEND, /* enter D1-D3 */ |
PM_RESUME, /* enter D0 */ |
PM_SAVE_STATE, /* save device's state */ |
/* enable wake-on */ |
PM_SET_WAKEUP, |
/* bus resource management */ |
PM_GET_RESOURCES, |
PM_SET_RESOURCES, |
/* base station management */ |
PM_EJECT, |
PM_LOCK, |
}; |
typedef int pm_request_t; |
/* |
* Device types |
*/ |
enum |
{ |
PM_UNKNOWN_DEV = 0, /* generic */ |
PM_SYS_DEV, /* system device (fan, KB controller, ...) */ |
PM_PCI_DEV, /* PCI device */ |
PM_USB_DEV, /* USB device */ |
PM_SCSI_DEV, /* SCSI device */ |
PM_ISA_DEV, /* ISA device */ |
PM_MTD_DEV, /* Memory Technology Device */ |
}; |
typedef int pm_dev_t; |
/* |
* System device hardware ID (PnP) values |
*/ |
enum |
{ |
PM_SYS_UNKNOWN = 0x00000000, /* generic */ |
PM_SYS_KBC = 0x41d00303, /* keyboard controller */ |
PM_SYS_COM = 0x41d00500, /* serial port */ |
PM_SYS_IRDA = 0x41d00510, /* IRDA controller */ |
PM_SYS_FDC = 0x41d00700, /* floppy controller */ |
PM_SYS_VGA = 0x41d00900, /* VGA controller */ |
PM_SYS_PCMCIA = 0x41d00e00, /* PCMCIA controller */ |
}; |
/* |
* Device identifier |
*/ |
#define PM_PCI_ID(dev) ((dev)->bus->number << 16 | (dev)->devfn) |
/* |
* Request handler callback |
*/ |
struct pm_dev; |
typedef int (*pm_callback)(struct pm_dev *dev, pm_request_t rqst, void *data); |
/* |
* Dynamic device information |
*/ |
struct pm_dev |
{ |
pm_dev_t type; |
unsigned long id; |
pm_callback callback; |
void *data; |
unsigned long flags; |
unsigned long state; |
unsigned long prev_state; |
struct list_head entry; |
}; |
#ifdef CONFIG_PM |
extern int pm_active; |
#define PM_IS_ACTIVE() (pm_active != 0) |
/* |
* Register a device with power management |
*/ |
struct pm_dev *pm_register(pm_dev_t type, |
unsigned long id, |
pm_callback callback); |
/* |
* Unregister a device with power management |
*/ |
void pm_unregister(struct pm_dev *dev); |
/* |
* Unregister all devices with matching callback |
*/ |
void pm_unregister_all(pm_callback callback); |
/* |
* Send a request to a single device |
*/ |
int pm_send(struct pm_dev *dev, pm_request_t rqst, void *data); |
/* |
* Send a request to all devices |
*/ |
int pm_send_all(pm_request_t rqst, void *data); |
/* |
* Find a device |
*/ |
struct pm_dev *pm_find(pm_dev_t type, struct pm_dev *from); |
static inline void pm_access(struct pm_dev *dev) {} |
static inline void pm_dev_idle(struct pm_dev *dev) {} |
#else /* CONFIG_PM */ |
#define PM_IS_ACTIVE() 0 |
static inline struct pm_dev *pm_register(pm_dev_t type, |
unsigned long id, |
pm_callback callback) |
{ |
return 0; |
} |
static inline void pm_unregister(struct pm_dev *dev) {} |
static inline void pm_unregister_all(pm_callback callback) {} |
static inline int pm_send(struct pm_dev *dev, pm_request_t rqst, void *data) |
{ |
return 0; |
} |
static inline int pm_send_all(pm_request_t rqst, void *data) |
{ |
return 0; |
} |
static inline struct pm_dev *pm_find(pm_dev_t type, struct pm_dev *from) |
{ |
return 0; |
} |
static inline void pm_access(struct pm_dev *dev) {} |
static inline void pm_dev_idle(struct pm_dev *dev) {} |
#endif /* CONFIG_PM */ |
/* |
* Callbacks for platform drivers to implement. |
*/ |
extern void (*pm_idle)(void); |
extern void (*pm_power_off)(void); |
enum { |
PM_SUSPEND_ON, |
PM_SUSPEND_STANDBY, |
PM_SUSPEND_MEM, |
PM_SUSPEND_DISK, |
PM_SUSPEND_MAX, |
}; |
enum { |
PM_DISK_FIRMWARE = 1, |
PM_DISK_PLATFORM, |
PM_DISK_SHUTDOWN, |
PM_DISK_REBOOT, |
PM_DISK_MAX, |
}; |
struct pm_ops { |
u32 pm_disk_mode; |
int (*prepare)(u32 state); |
int (*enter)(u32 state); |
int (*finish)(u32 state); |
}; |
extern void pm_set_ops(struct pm_ops *); |
extern int pm_suspend(u32 state); |
/* |
* Device power management |
*/ |
struct device; |
struct dev_pm_info { |
#ifdef CONFIG_PM |
u32 power_state; |
u8 * saved_state; |
atomic_t pm_users; |
struct device * pm_parent; |
struct list_head entry; |
#endif |
}; |
extern void device_pm_set_parent(struct device * dev, struct device * parent); |
extern int device_suspend(u32 state); |
extern int device_power_down(u32 state); |
extern void device_power_up(void); |
extern void device_resume(void); |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_PM_H */ |
/shark/trunk/drivers/linuxc26/include/linux/msdos_fs.h |
---|
0,0 → 1,337 |
#ifndef _LINUX_MSDOS_FS_H |
#define _LINUX_MSDOS_FS_H |
/* |
* The MS-DOS filesystem constants/structures |
*/ |
#include <linux/buffer_head.h> |
#include <linux/string.h> |
#include <asm/byteorder.h> |
struct statfs; |
#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_ROOT_INO 1 /* == MINIX_ROOT_INO */ |
#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 MSDOS_SUPER_MAGIC 0x4d44 /* MD */ |
#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 */ |
#define ATTR_UNUSED (ATTR_VOLUME | ATTR_ARCH | ATTR_SYS | ATTR_HIDDEN) |
/* attribute bits that are copied "as is" */ |
#define ATTR_EXT (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME) |
/* bits that are used by the Windows 95/Windows NT extended FAT */ |
#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 MSDOS_VALID_MODE (S_IFREG | S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO) |
/* valid file mode bits */ |
#define MSDOS_NAME 11 /* maximum name length */ |
#define MSDOS_LONGNAME 256 /* maximum name length */ |
#define MSDOS_SLOTS 21 /* max # of slots needed for short and long names */ |
#define MSDOS_DOT ". " /* ".", padded to MSDOS_NAME chars */ |
#define MSDOS_DOTDOT ".. " /* "..", padded to MSDOS_NAME chars */ |
#define MSDOS_FAT12 4084 /* maximum number of clusters in a 12 bit FAT */ |
/* media of boot sector */ |
#define FAT_VALID_MEDIA(x) ((0xF8 <= (x) && (x) <= 0xFF) || (x) == 0xF0) |
#define FAT_FIRST_ENT(s, x) ((MSDOS_SB(s)->fat_bits == 32 ? 0x0FFFFF00 : \ |
MSDOS_SB(s)->fat_bits == 16 ? 0xFF00 : 0xF00) | (x)) |
/* bad cluster mark */ |
#define BAD_FAT12 0xFF7 |
#define BAD_FAT16 0xFFF7 |
#define BAD_FAT32 0xFFFFFF7 |
#define BAD_FAT(s) (MSDOS_SB(s)->fat_bits == 32 ? BAD_FAT32 : \ |
MSDOS_SB(s)->fat_bits == 16 ? BAD_FAT16 : BAD_FAT12) |
/* standard EOF */ |
#define EOF_FAT12 0xFFF |
#define EOF_FAT16 0xFFFF |
#define EOF_FAT32 0xFFFFFFF |
#define EOF_FAT(s) (MSDOS_SB(s)->fat_bits == 32 ? EOF_FAT32 : \ |
MSDOS_SB(s)->fat_bits == 16 ? EOF_FAT16 : EOF_FAT12) |
#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) (CF_LE_L((x)->signature1) == FAT_FSINFO_SIG1 \ |
&& CF_LE_L((x)->signature2) == FAT_FSINFO_SIG2) |
/* |
* ioctl commands |
*/ |
#define VFAT_IOCTL_READDIR_BOTH _IOR('r', 1, struct dirent [2]) |
#define VFAT_IOCTL_READDIR_SHORT _IOR('r', 2, struct dirent [2]) |
/* |
* vfat shortname flags |
*/ |
#define VFAT_SFN_DISPLAY_LOWER 0x0001 /* convert to lowercase for display */ |
#define VFAT_SFN_DISPLAY_WIN95 0x0002 /* emulate win95 rule for display */ |
#define VFAT_SFN_DISPLAY_WINNT 0x0004 /* emulate winnt rule for display */ |
#define VFAT_SFN_CREATE_WIN95 0x0100 /* emulate win95 rule for create */ |
#define VFAT_SFN_CREATE_WINNT 0x0200 /* emulate winnt rule for create */ |
/* |
* Conversion from and to little-endian byte order. (no-op on i386/i486) |
* |
* Naming: Ca_b_c, where a: F = from, T = to, b: LE = little-endian, |
* BE = big-endian, c: W = word (16 bits), L = longword (32 bits) |
*/ |
#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) |
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 */ |
__u16 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 */ |
__u16 fat_length; /* sectors/FAT */ |
__u16 secs_track; /* sectors per track */ |
__u16 heads; /* number of heads */ |
__u32 hidden; /* hidden sectors (unused) */ |
__u32 total_sect; /* number of sectors (if sectors == 0) */ |
/* The following fields are only used by FAT32 */ |
__u32 fat32_length; /* sectors/FAT */ |
__u16 flags; /* bit 8: fat mirroring, low 4: active fat */ |
__u8 version[2]; /* major, minor filesystem version */ |
__u32 root_cluster; /* first cluster in root directory */ |
__u16 info_sector; /* filesystem info sector */ |
__u16 backup_boot; /* backup boot sector */ |
__u16 reserved2[6]; /* Unused */ |
}; |
struct fat_boot_fsinfo { |
__u32 signature1; /* 0x41615252L */ |
__u32 reserved1[120]; /* Nothing as far as I can tell */ |
__u32 signature2; /* 0x61417272L */ |
__u32 free_clusters; /* Free cluster count. -1 if unknown */ |
__u32 next_cluster; /* Most recently allocated cluster */ |
__u32 reserved2[4]; |
}; |
struct msdos_dir_entry { |
__u8 name[8],ext[3]; /* name and extension */ |
__u8 attr; /* attribute bits */ |
__u8 lcase; /* Case for base and extension */ |
__u8 ctime_ms; /* Creation time, milliseconds */ |
__u16 ctime; /* Creation time */ |
__u16 cdate; /* Creation date */ |
__u16 adate; /* Last access date */ |
__u16 starthi; /* High 16 bits of cluster in FAT32 */ |
__u16 time,date,start;/* time, date and first cluster */ |
__u32 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 */ |
__u16 start; /* starting cluster number, 0 in long slots */ |
__u8 name11_12[4]; /* last 2 characters in name */ |
}; |
struct vfat_slot_info { |
int long_slots; /* number of long slots in filename */ |
loff_t longname_offset; /* dir offset for longname start */ |
loff_t i_pos; /* on-disk position of directory entry */ |
}; |
/* Convert attribute bits and a mask to the UNIX mode. */ |
#define MSDOS_MKMODE(a,m) (m & (a & ATTR_RO ? S_IRUGO|S_IXUGO : S_IRWXUGO)) |
/* Convert the UNIX mode to MS-DOS attribute bits. */ |
#define MSDOS_MKATTR(m) ((m & S_IWUGO) ? ATTR_NONE : ATTR_RO) |
#ifdef __KERNEL__ |
#include <linux/nls.h> |
#include <linux/msdos_fs_i.h> |
#include <linux/msdos_fs_sb.h> |
static inline struct msdos_sb_info *MSDOS_SB(struct super_block *sb) |
{ |
return sb->s_fs_info; |
} |
static inline struct msdos_inode_info *MSDOS_I(struct inode *inode) |
{ |
return container_of(inode, struct msdos_inode_info, vfs_inode); |
} |
static inline void fat16_towchar(wchar_t *dst, const __u8 *src, size_t len) |
{ |
#ifdef __BIG_ENDIAN |
while (len--) { |
*dst++ = src[0] | (src[1] << 8); |
src += 2; |
} |
#else |
memcpy(dst, src, len * 2); |
#endif |
} |
static inline void fatwchar_to16(__u8 *dst, const wchar_t *src, size_t len) |
{ |
#ifdef __BIG_ENDIAN |
while (len--) { |
dst[0] = *src & 0x00FF; |
dst[1] = (*src & 0xFF00) >> 8; |
dst += 2; |
src++; |
} |
#else |
memcpy(dst, src, len * 2); |
#endif |
} |
/* fat/cache.c */ |
extern int fat_access(struct super_block *sb, int nr, int new_value); |
extern int __fat_access(struct super_block *sb, int nr, int new_value); |
extern int fat_bmap(struct inode *inode, sector_t sector, sector_t *phys); |
extern void fat_cache_init(struct super_block *sb); |
extern void fat_cache_lookup(struct inode *inode, int cluster, int *f_clu, |
int *d_clu); |
extern void fat_cache_add(struct inode *inode, int f_clu, int d_clu); |
extern void fat_cache_inval_inode(struct inode *inode); |
extern int fat_get_cluster(struct inode *inode, int cluster, |
int *fclus, int *dclus); |
extern int fat_free(struct inode *inode, int skip); |
/* fat/dir.c */ |
extern struct file_operations fat_dir_operations; |
extern int fat_search_long(struct inode *inode, const unsigned char *name, |
int name_len, int anycase, |
loff_t *spos, loff_t *lpos); |
extern int fat_readdir(struct file *filp, void *dirent, filldir_t filldir); |
extern int fat_dir_ioctl(struct inode * inode, struct file * filp, |
unsigned int cmd, unsigned long arg); |
extern int fat_add_entries(struct inode *dir, int slots, struct buffer_head **bh, |
struct msdos_dir_entry **de, loff_t *i_pos); |
extern int fat_new_dir(struct inode *dir, struct inode *parent, int is_vfat); |
extern int fat_dir_empty(struct inode *dir); |
extern int fat_subdirs(struct inode *dir); |
extern int fat_scan(struct inode *dir, const unsigned char *name, |
struct buffer_head **res_bh, |
struct msdos_dir_entry **res_de, loff_t *i_pos); |
/* fat/file.c */ |
extern struct file_operations fat_file_operations; |
extern struct inode_operations fat_file_inode_operations; |
extern int fat_get_block(struct inode *inode, sector_t iblock, |
struct buffer_head *bh_result, int create); |
extern void fat_truncate(struct inode *inode); |
/* fat/inode.c */ |
extern void fat_hash_init(void); |
extern void fat_attach(struct inode *inode, loff_t i_pos); |
extern void fat_detach(struct inode *inode); |
extern struct inode *fat_iget(struct super_block *sb, loff_t i_pos); |
extern struct inode *fat_build_inode(struct super_block *sb, |
struct msdos_dir_entry *de, loff_t i_pos, int *res); |
extern void fat_delete_inode(struct inode *inode); |
extern void fat_clear_inode(struct inode *inode); |
extern void fat_put_super(struct super_block *sb); |
int fat_fill_super(struct super_block *sb, void *data, int silent, |
struct inode_operations *fs_dir_inode_ops, int isvfat); |
extern int fat_statfs(struct super_block *sb, struct kstatfs *buf); |
extern void fat_write_inode(struct inode *inode, int wait); |
extern int fat_notify_change(struct dentry * dentry, struct iattr * attr); |
/* fat/misc.c */ |
extern void fat_fs_panic(struct super_block *s, const char *fmt, ...); |
extern void lock_fat(struct super_block *sb); |
extern void unlock_fat(struct super_block *sb); |
extern void fat_clusters_flush(struct super_block *sb); |
extern int fat_add_cluster(struct inode *inode); |
extern struct buffer_head *fat_extend_dir(struct inode *inode); |
extern int date_dos2unix(unsigned short time, unsigned short date); |
extern void fat_date_unix2dos(int unix_date, unsigned short *time, |
unsigned short *date); |
extern int fat__get_entry(struct inode *dir, loff_t *pos, |
struct buffer_head **bh, |
struct msdos_dir_entry **de, loff_t *i_pos); |
static __inline__ int fat_get_entry(struct inode *dir, loff_t *pos, |
struct buffer_head **bh, |
struct msdos_dir_entry **de, loff_t *i_pos) |
{ |
/* Fast stuff first */ |
if (*bh && *de && |
(*de - (struct msdos_dir_entry *)(*bh)->b_data) < MSDOS_SB(dir->i_sb)->dir_per_block - 1) { |
*pos += sizeof(struct msdos_dir_entry); |
(*de)++; |
(*i_pos)++; |
return 0; |
} |
return fat__get_entry(dir, pos, bh, de, i_pos); |
} |
/* msdos/namei.c - these are for Umsdos */ |
extern struct dentry *msdos_lookup(struct inode *dir, struct dentry *, struct nameidata *); |
extern int msdos_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *); |
extern int msdos_rmdir(struct inode *dir, struct dentry *dentry); |
extern int msdos_mkdir(struct inode *dir, struct dentry *dentry, int mode); |
extern int msdos_unlink(struct inode *dir, struct dentry *dentry); |
extern int msdos_rename(struct inode *old_dir, struct dentry *old_dentry, |
struct inode *new_dir, struct dentry *new_dentry); |
extern int msdos_fill_super(struct super_block *sb, void *data, int silent); |
/* vfat/namei.c - these are for dmsdos */ |
extern struct dentry *vfat_lookup(struct inode *dir, struct dentry *, struct nameidata *); |
extern int vfat_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *); |
extern int vfat_rmdir(struct inode *dir, struct dentry *dentry); |
extern int vfat_unlink(struct inode *dir, struct dentry *dentry); |
extern int vfat_mkdir(struct inode *dir, struct dentry *dentry, int mode); |
extern int vfat_rename(struct inode *old_dir, struct dentry *old_dentry, |
struct inode *new_dir, struct dentry *new_dentry); |
extern int vfat_fill_super(struct super_block *sb, void *data, int silent); |
/* vfat/vfatfs_syms.c */ |
extern struct file_system_type vfat_fs_type; |
#endif /* __KERNEL__ */ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/matroxfb.h |
---|
0,0 → 1,43 |
#ifndef __LINUX_MATROXFB_H__ |
#define __LINUX_MATROXFB_H__ |
#include <asm/ioctl.h> |
#include <asm/types.h> |
#include <linux/videodev2.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 |
}; |
#define FBIO_WAITFORVSYNC _IOW('F', 0x20, u_int32_t) |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/kobj_map.h |
---|
0,0 → 1,12 |
#ifdef __KERNEL__ |
typedef struct kobject *kobj_probe_t(dev_t, int *, void *); |
struct kobj_map; |
int kobj_map(struct kobj_map *, dev_t, unsigned long, struct module *, |
kobj_probe_t *, int (*)(dev_t, void *), void *); |
void kobj_unmap(struct kobj_map *, dev_t, unsigned long); |
struct kobject *kobj_lookup(struct kobj_map *, dev_t, int *); |
struct kobj_map *kobj_map_init(kobj_probe_t *, struct subsystem *); |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/mbcache.h |
---|
0,0 → 1,72 |
/* |
File: linux/mbcache.h |
(C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org> |
*/ |
/* Hardwire the number of additional indexes */ |
#define MB_CACHE_INDEXES_COUNT 1 |
struct mb_cache_entry; |
struct mb_cache_op { |
int (*free)(struct mb_cache_entry *, int); |
}; |
struct mb_cache { |
struct list_head c_cache_list; |
const char *c_name; |
struct mb_cache_op c_op; |
atomic_t c_entry_count; |
int c_bucket_bits; |
#ifndef MB_CACHE_INDEXES_COUNT |
int c_indexes_count; |
#endif |
kmem_cache_t *c_entry_cache; |
struct list_head *c_block_hash; |
struct list_head *c_indexes_hash[0]; |
}; |
struct mb_cache_entry_index { |
struct list_head o_list; |
unsigned int o_key; |
}; |
struct mb_cache_entry { |
struct list_head e_lru_list; |
struct mb_cache *e_cache; |
atomic_t e_used; |
struct block_device *e_bdev; |
sector_t e_block; |
struct list_head e_block_list; |
struct mb_cache_entry_index e_indexes[0]; |
}; |
/* Functions on caches */ |
struct mb_cache * mb_cache_create(const char *, struct mb_cache_op *, size_t, |
int, int); |
void mb_cache_shrink(struct mb_cache *, struct block_device *); |
void mb_cache_destroy(struct mb_cache *); |
/* Functions on cache entries */ |
struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *); |
int mb_cache_entry_insert(struct mb_cache_entry *, struct block_device *, |
sector_t, unsigned int[]); |
void mb_cache_entry_rehash(struct mb_cache_entry *, unsigned int[]); |
void mb_cache_entry_release(struct mb_cache_entry *); |
void mb_cache_entry_takeout(struct mb_cache_entry *); |
void mb_cache_entry_free(struct mb_cache_entry *); |
struct mb_cache_entry *mb_cache_entry_dup(struct mb_cache_entry *); |
struct mb_cache_entry *mb_cache_entry_get(struct mb_cache *, |
struct block_device *, |
sector_t); |
#if !defined(MB_CACHE_INDEXES_COUNT) || (MB_CACHE_INDEXES_COUNT > 0) |
struct mb_cache_entry *mb_cache_entry_find_first(struct mb_cache *cache, int, |
struct block_device *, |
unsigned int); |
struct mb_cache_entry *mb_cache_entry_find_next(struct mb_cache_entry *, int, |
struct block_device *, |
unsigned int); |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/vt.h |
---|
0,0 → 1,54 |
#ifndef _LINUX_VT_H |
#define _LINUX_VT_H |
/* 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 */ |
#endif /* _LINUX_VT_H */ |
/shark/trunk/drivers/linuxc26/include/linux/mpage.h |
---|
0,0 → 1,25 |
/* |
* include/linux/mpage.h |
* |
* Contains declarations related to preparing and submitting BIOS which contain |
* multiple pagecache pages. |
*/ |
/* |
* (And no, it doesn't do the #ifdef __MPAGE_H thing, and it doesn't do |
* nested includes. Get it right in the .c file). |
*/ |
struct writeback_control; |
int mpage_readpages(struct address_space *mapping, struct list_head *pages, |
unsigned nr_pages, get_block_t get_block); |
int mpage_readpage(struct page *page, get_block_t get_block); |
int mpage_writepages(struct address_space *mapping, |
struct writeback_control *wbc, get_block_t get_block); |
static inline int |
generic_writepages(struct address_space *mapping, struct writeback_control *wbc) |
{ |
return mpage_writepages(mapping, wbc, NULL); |
} |
/shark/trunk/drivers/linuxc26/include/linux/netbeui.h |
---|
0,0 → 1,16 |
#ifndef _LINUX_NETBEUI_H |
#define _LINUX_NETBEUI_H |
#include <linux/if.h> |
#define NB_NAME_LEN 20 /* Set this properly from the full docs when |
I get them */ |
struct sockaddr_netbeui |
{ |
sa_family snb_family; |
char snb_name[NB_NAME_LEN]; |
char snb_devhint[IFNAMSIZ]; |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/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 */ |
/shark/trunk/drivers/linuxc26/include/linux/nfs_idmap.h |
---|
0,0 → 1,69 |
/* |
* 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 NFS_IDMAP_H |
#define NFS_IDMAP_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 { |
u_int8_t im_type; |
u_int8_t im_conv; |
char im_name[IDMAP_NAMESZ]; |
u_int32_t im_id; |
u_int8_t im_status; |
}; |
#ifdef __KERNEL__ |
void *nfs_idmap_new(struct nfs_server *); |
void nfs_idmap_delete(struct nfs_server *); |
int nfs_idmap_id(struct nfs_server *, u_int8_t, char *, u_int, uid_t *); |
int nfs_idmap_name(struct nfs_server *, u_int8_t, uid_t, char *, u_int *); |
#endif /* __KERNEL__ */ |
#endif /* NFS_IDMAP_H */ |
/shark/trunk/drivers/linuxc26/include/linux/com20020.h |
---|
0,0 → 1,108 |
/* |
* Linux ARCnet driver - COM20020 chipset support - function declarations |
* |
* Written 1997 by David Woodhouse. |
* Written 1994-1999 by Avery Pennarun. |
* Derived from skeleton.c by Donald Becker. |
* |
* Special thanks to Contemporary Controls, Inc. (www.ccontrols.com) |
* for sponsoring the further development of this driver. |
* |
* ********************** |
* |
* The original copyright of skeleton.c was as follows: |
* |
* skeleton.c Written 1993 by Donald Becker. |
* Copyright 1993 United States Government as represented by the |
* Director, National Security Agency. This software may only be used |
* and distributed according to the terms of the GNU General Public License as |
* modified by SRC, incorporated herein by reference. |
* |
* ********************** |
* |
* For more details, see drivers/net/arcnet.c |
* |
* ********************** |
*/ |
#ifndef __COM20020_H |
#define __COM20020_H |
int com20020_check(struct net_device *dev); |
int com20020_found(struct net_device *dev, int shared); |
void com20020_remove(struct net_device *dev); |
/* The number of low I/O ports used by the card. */ |
#define ARCNET_TOTAL_SIZE 8 |
/* various register addresses */ |
#define _INTMASK (ioaddr+0) /* writable */ |
#define _STATUS (ioaddr+0) /* readable */ |
#define _COMMAND (ioaddr+1) /* standard arcnet commands */ |
#define _DIAGSTAT (ioaddr+1) /* diagnostic status register */ |
#define _ADDR_HI (ioaddr+2) /* control registers for IO-mapped memory */ |
#define _ADDR_LO (ioaddr+3) |
#define _MEMDATA (ioaddr+4) /* data port for IO-mapped memory */ |
#define _SUBADR (ioaddr+5) /* the extended port _XREG refers to */ |
#define _CONFIG (ioaddr+6) /* configuration register */ |
#define _XREG (ioaddr+7) /* extra registers (indexed by _CONFIG |
or _SUBADR) */ |
/* in the ADDR_HI register */ |
#define RDDATAflag 0x80 /* next access is a read (not a write) */ |
/* in the DIAGSTAT register */ |
#define NEWNXTIDflag 0x02 /* ID to which token is passed has changed */ |
/* in the CONFIG register */ |
#define RESETcfg 0x80 /* put card in reset state */ |
#define TXENcfg 0x20 /* enable TX */ |
/* in SETUP register */ |
#define PROMISCset 0x10 /* enable RCV_ALL */ |
#define P1MODE 0x80 /* enable P1-MODE for Backplane */ |
#define SLOWARB 0x01 /* enable Slow Arbitration for >=5Mbps */ |
/* COM2002x */ |
#define SUB_TENTATIVE 0 /* tentative node ID */ |
#define SUB_NODE 1 /* node ID */ |
#define SUB_SETUP1 2 /* various options */ |
#define SUB_TEST 3 /* test/diag register */ |
/* COM20022 only */ |
#define SUB_SETUP2 4 /* sundry options */ |
#define SUB_BUSCTL 5 /* bus control options */ |
#define SUB_DMACOUNT 6 /* DMA count options */ |
#define SET_SUBADR(x) do { \ |
if ((x) < 4) \ |
{ \ |
lp->config = (lp->config & ~0x03) | (x); \ |
SETCONF; \ |
} \ |
else \ |
{ \ |
outb(x, _SUBADR); \ |
} \ |
} while (0) |
#undef ARCRESET |
#undef ASTATUS |
#undef ACOMMAND |
#undef AINTMASK |
#define ARCRESET { outb(lp->config | 0x80, _CONFIG); \ |
udelay(5); \ |
outb(lp->config , _CONFIG); \ |
} |
#define ARCRESET0 { outb(0x18 | 0x80, _CONFIG); \ |
udelay(5); \ |
outb(0x18 , _CONFIG); \ |
} |
#define ASTATUS() inb(_STATUS) |
#define ACOMMAND(cmd) outb((cmd),_COMMAND) |
#define AINTMASK(msk) outb((msk),_INTMASK) |
#define SETCONF outb(lp->config, _CONFIG) |
#endif /* __COM20020_H */ |
/shark/trunk/drivers/linuxc26/include/linux/dqblk_v1.h |
---|
0,0 → 1,18 |
/* |
* File with in-memory structures of old quota format |
*/ |
#ifndef _LINUX_DQBLK_V1_H |
#define _LINUX_DQBLK_V1_H |
/* Id of quota format */ |
#define QFMT_VFS_OLD 1 |
/* Root squash turned on */ |
#define V1_DQF_RSQUASH 1 |
/* Special information about quotafile */ |
struct v1_mem_dqinfo { |
}; |
#endif /* _LINUX_DQBLK_V1_H */ |
/shark/trunk/drivers/linuxc26/include/linux/cpumask.h |
---|
0,0 → 1,71 |
#ifndef __LINUX_CPUMASK_H |
#define __LINUX_CPUMASK_H |
#include <linux/config.h> |
#include <linux/kernel.h> |
#include <linux/threads.h> |
#include <linux/types.h> |
#include <linux/bitmap.h> |
#if NR_CPUS > BITS_PER_LONG && NR_CPUS != 1 |
#define CPU_ARRAY_SIZE BITS_TO_LONGS(NR_CPUS) |
struct cpumask |
{ |
unsigned long mask[CPU_ARRAY_SIZE]; |
}; |
typedef struct cpumask cpumask_t; |
#else |
typedef unsigned long cpumask_t; |
#endif |
#ifdef CONFIG_SMP |
#if NR_CPUS > BITS_PER_LONG |
#include <asm-generic/cpumask_array.h> |
#else |
#include <asm-generic/cpumask_arith.h> |
#endif |
#else |
#include <asm-generic/cpumask_up.h> |
#endif |
#if NR_CPUS <= 4*BITS_PER_LONG |
#include <asm-generic/cpumask_const_value.h> |
#else |
#include <asm-generic/cpumask_const_reference.h> |
#endif |
#ifdef CONFIG_SMP |
extern cpumask_t cpu_online_map; |
#define num_online_cpus() cpus_weight(cpu_online_map) |
#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map) |
#else |
#define cpu_online_map cpumask_of_cpu(0) |
#define num_online_cpus() 1 |
#define cpu_online(cpu) ({ BUG_ON((cpu) != 0); 1; }) |
#endif |
static inline int next_online_cpu(int cpu, cpumask_t map) |
{ |
do |
cpu = next_cpu_const(cpu, map); |
while (cpu < NR_CPUS && !cpu_online(cpu)); |
return cpu; |
} |
#define for_each_cpu(cpu, map) \ |
for (cpu = first_cpu_const(map); \ |
cpu < NR_CPUS; \ |
cpu = next_cpu_const(cpu,map)) |
#define for_each_online_cpu(cpu, map) \ |
for (cpu = first_cpu_const(map); \ |
cpu < NR_CPUS; \ |
cpu = next_online_cpu(cpu,map)) |
#endif /* __LINUX_CPUMASK_H */ |
/shark/trunk/drivers/linuxc26/include/linux/pkt_sched.h |
---|
0,0 → 1,404 |
#ifndef __LINUX_PKT_SCHED_H |
#define __LINUX_PKT_SCHED_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 enqueues 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; |
#ifdef __KERNEL__ |
spinlock_t *lock; |
#endif |
}; |
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 feature; |
short addend; |
unsigned short mpu; |
__u32 rate; |
}; |
/* FIFO section */ |
struct tc_fifo_qopt |
{ |
__u32 limit; /* Queue length: bytes for bfifo, packets for pfifo */ |
}; |
/* PRIO section */ |
#define TCQ_PRIO_BANDS 16 |
struct tc_prio_qopt |
{ |
int bands; /* Number of bands */ |
__u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */ |
}; |
/* CSZ section */ |
struct tc_csz_qopt |
{ |
int flows; /* Maximal number of guaranteed flows */ |
unsigned char R_log; /* Fixed point position for round number */ |
unsigned char delta_log; /* Log of maximal managed time interval */ |
__u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> CSZ band */ |
}; |
struct tc_csz_copt |
{ |
struct tc_ratespec slice; |
struct tc_ratespec rate; |
struct tc_ratespec peakrate; |
__u32 limit; |
__u32 buffer; |
__u32 mtu; |
}; |
enum |
{ |
TCA_CSZ_UNSPEC, |
TCA_CSZ_PARMS, |
TCA_CSZ_RTAB, |
TCA_CSZ_PTAB, |
}; |
/* 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, |
}; |
/* 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 */ |
}; |
/* |
* NOTE: limit, divisor and flows are hardwired to code at the moment. |
* |
* limit=flows=128, divisor=1024; |
* |
* The only reason for this is efficiency, it is possible |
* to change these parameters in compile time. |
*/ |
/* RED section */ |
enum |
{ |
TCA_RED_UNSPEC, |
TCA_RED_PARMS, |
TCA_RED_STAB, |
}; |
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 |
}; |
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, |
}; |
#define TCA_SET_OFF TCA_GRED_PARMS |
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; /* upto 2^32 DPs */ |
__u32 backlog; |
__u32 qave; |
__u32 forced; |
__u32 early; |
__u32 other; |
__u32 pdrop; |
unsigned char Wlog; /* log(W) */ |
unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ |
unsigned char 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; |
}; |
/* 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 shapped packets */ |
}; |
enum |
{ |
TCA_HTB_UNSPEC, |
TCA_HTB_PARMS, |
TCA_HTB_INIT, |
TCA_HTB_CTAB, |
TCA_HTB_RTAB, |
}; |
struct tc_htb_xstats |
{ |
__u32 lends; |
__u32 borrows; |
__u32 giants; /* too big packets (rate will not be accurate) */ |
__u32 tokens; |
__u32 ctokens; |
}; |
/* 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; |
__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, |
}; |
#define TCA_CBQ_MAX TCA_CBQ_POLICE |
/* dsmark section */ |
enum { |
TCA_DSMARK_UNSPEC, |
TCA_DSMARK_INDICES, |
TCA_DSMARK_DEFAULT_INDEX, |
TCA_DSMARK_SET_TC_INDEX, |
TCA_DSMARK_MASK, |
TCA_DSMARK_VALUE |
}; |
#define TCA_DSMARK_MAX TCA_DSMARK_VALUE |
/* 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) */ |
}; |
#define TCA_ATM_MAX TCA_ATM_STATE |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/adfs_fs.h |
---|
0,0 → 1,76 |
#ifndef _ADFS_FS_H |
#define _ADFS_FS_H |
#include <linux/types.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; |
__u16 zone_spare; |
__u32 root; |
__u32 disc_size; |
__u16 disc_id; |
__u8 disc_name[10]; |
__u32 disc_type; |
__u32 disc_size_high; |
__u8 log2sharesize:4; |
__u8 unused40:4; |
__u8 big_flag:1; |
__u8 unused41:1; |
__u8 nzones_high; |
__u32 format_version; |
__u32 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) |
#define ADFS_SUPER_MAGIC 0xadf5 |
#ifdef __KERNEL__ |
#include <linux/adfs_fs_i.h> |
#include <linux/adfs_fs_sb.h> |
/* |
* Calculate the boot block checksum on an ADFS drive. Note that this will |
* appear to be correct if the sector contains all zeros, so also check that |
* the disk size is non-zero!!! |
*/ |
static inline int adfs_checkbblk(unsigned char *ptr) |
{ |
unsigned int result = 0; |
unsigned char *p = ptr + 511; |
do { |
result = (result & 0xff) + (result >> 8); |
result = result + *--p; |
} while (p != ptr); |
return (result & 0xff) != ptr[511]; |
} |
static inline struct adfs_sb_info *ADFS_SB(struct super_block *sb) |
{ |
return sb->s_fs_info; |
} |
static inline struct adfs_inode_info *ADFS_I(struct inode *inode) |
{ |
return container_of(inode, struct adfs_inode_info, vfs_inode); |
} |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/video_encoder.h |
---|
0,0 → 1,21 |
#ifndef _LINUX_VIDEO_ENCODER_H |
#define _LINUX_VIDEO_ENCODER_H |
struct video_encoder_capability { /* this name is too long */ |
__u32 flags; |
#define VIDEO_ENCODER_PAL 1 /* can encode PAL signal */ |
#define VIDEO_ENCODER_NTSC 2 /* can encode NTSC */ |
#define VIDEO_ENCODER_SECAM 4 /* can encode SECAM */ |
#define VIDEO_ENCODER_CCIR 16 /* CCIR-601 pixel rate (720 pixels per line) instead of square pixel rate */ |
int inputs; /* number of inputs */ |
int outputs; /* number of outputs */ |
}; |
#define ENCODER_GET_CAPABILITIES _IOR('e', 1, struct video_encoder_capability) |
#define ENCODER_SET_NORM _IOW('e', 2, int) |
#define ENCODER_SET_INPUT _IOW('e', 3, int) /* 0 <= input < #inputs */ |
#define ENCODER_SET_OUTPUT _IOW('e', 4, int) /* 0 <= output < #outputs */ |
#define ENCODER_ENABLE_OUTPUT _IOW('e', 5, int) /* boolean output enable control */ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/hfs_sysdep.h |
---|
0,0 → 1,238 |
/* |
* linux/include/linux/hfs_sysdep.h |
* |
* Copyright (C) 1996-1997 Paul H. Hargrove |
* This file may be distributed under the terms of the GNU General Public License. |
* |
* This file contains constants, types and inline |
* functions for various system dependent things. |
* |
* "XXX" in a comment is a note to myself to consider changing something. |
* |
* In function preconditions the term "valid" applied to a pointer to |
* a structure means that the pointer is non-NULL and the structure it |
* points to has all fields initialized to consistent values. |
*/ |
#ifndef _HFS_SYSDEP_H |
#define _HFS_SYSDEP_H |
#include <linux/slab.h> |
#include <linux/types.h> |
#include <linux/fs.h> |
#include <linux/sched.h> |
#include <linux/buffer_head.h> |
#include <asm/byteorder.h> |
#include <asm/unaligned.h> |
extern struct timezone sys_tz; |
/* Typedefs for integer types by size and signedness */ |
typedef __u8 hfs_u8; |
typedef __u16 hfs_u16; |
typedef __u32 hfs_u32; |
typedef __s8 hfs_s8; |
typedef __s16 hfs_s16; |
typedef __s32 hfs_s32; |
/* Typedefs for unaligned integer types */ |
typedef unsigned char hfs_byte_t; |
typedef unsigned char hfs_word_t[2]; |
typedef unsigned char hfs_lword_t[4]; |
/* these funny looking things are GCC variable argument macros */ |
#define hfs_warn(format, args...) printk(KERN_WARNING format , ## args) |
#define hfs_error(format, args...) printk(KERN_ERR format , ## args) |
#if defined(DEBUG_ALL) || defined(DEBUG_MEM) |
extern long int hfs_alloc; |
#endif |
static inline void *hfs_malloc(unsigned int size) { |
#if defined(DEBUG_ALL) || defined(DEBUG_MEM) |
hfs_warn("%ld bytes allocation at %s:%u\n", |
(hfs_alloc += size), __FILE__, __LINE__); |
#endif |
return kmalloc(size, GFP_KERNEL); |
} |
static inline void hfs_free(void *ptr, unsigned int size) { |
kfree(ptr); |
#if defined(DEBUG_ALL) || defined(DEBUG_MEM) |
hfs_warn("%ld bytes allocation at %s:%u\n", |
(hfs_alloc -= ptr ? size : 0), __FILE__, __LINE__); |
#endif |
} |
/* handle conversion between times. |
* |
* NOTE: hfs+ doesn't need this. also, we don't use tz_dsttime as that's |
* not a good thing to do. instead, we depend upon tz_minuteswest |
* having the correct daylight savings correction. |
*/ |
static inline hfs_u32 hfs_from_utc(hfs_s32 time) |
{ |
return time - sys_tz.tz_minuteswest*60; |
} |
static inline hfs_s32 hfs_to_utc(hfs_u32 time) |
{ |
return time + sys_tz.tz_minuteswest*60; |
} |
static inline hfs_u32 hfs_time(void) { |
return htonl(hfs_from_utc(get_seconds())+2082844800U); |
} |
/* |
* hfs_wait_queue |
*/ |
typedef wait_queue_head_t hfs_wait_queue; |
static inline void hfs_init_waitqueue(hfs_wait_queue *queue) { |
init_waitqueue_head(queue); |
} |
static inline void hfs_sleep_on(hfs_wait_queue *queue) { |
sleep_on(queue); |
} |
static inline void hfs_wake_up(hfs_wait_queue *queue) { |
wake_up(queue); |
} |
static inline void hfs_relinquish(void) { |
schedule(); |
} |
/* |
* hfs_sysmdb |
*/ |
typedef struct super_block *hfs_sysmdb; |
static inline void hfs_mdb_dirty(hfs_sysmdb sys_mdb) { |
sys_mdb->s_dirt = 1; |
} |
static inline const char *hfs_mdb_name(hfs_sysmdb sys_mdb) { |
return sys_mdb->s_id; |
} |
/* |
* hfs_sysentry |
*/ |
typedef struct dentry *hfs_sysentry[4]; |
/* |
* hfs_buffer |
*/ |
typedef struct buffer_head *hfs_buffer; |
#define HFS_BAD_BUFFER NULL |
/* In sysdep.c, since it needs HFS_SECTOR_SIZE */ |
extern hfs_buffer hfs_buffer_get(hfs_sysmdb, int, int); |
static inline int hfs_buffer_ok(hfs_buffer buffer) { |
return (buffer != NULL); |
} |
static inline void hfs_buffer_put(hfs_buffer buffer) { |
brelse(buffer); |
} |
static inline void hfs_buffer_dirty(hfs_buffer buffer) { |
mark_buffer_dirty(buffer); |
} |
static inline void hfs_buffer_sync(hfs_buffer buffer) { |
if (buffer_dirty(buffer)) |
sync_dirty_buffer(buffer); |
} |
static inline void *hfs_buffer_data(const hfs_buffer buffer) { |
return buffer->b_data; |
} |
/* |
* bit operations |
*/ |
#undef BITNR |
#if defined(__BIG_ENDIAN) |
# define BITNR(X) ((X)^31) |
# if !defined(__constant_htonl) |
# define __constant_htonl(x) (x) |
# endif |
# if !defined(__constant_htons) |
# define __constant_htons(x) (x) |
# endif |
#elif defined(__LITTLE_ENDIAN) |
# define BITNR(X) ((X)^7) |
# if !defined(__constant_htonl) |
# define __constant_htonl(x) \ |
((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \ |
(((unsigned long int)(x) & 0x0000ff00U) << 8) | \ |
(((unsigned long int)(x) & 0x00ff0000U) >> 8) | \ |
(((unsigned long int)(x) & 0xff000000U) >> 24))) |
# endif |
# if !defined(__constant_htons) |
# define __constant_htons(x) \ |
((unsigned short int)((((unsigned short int)(x) & 0x00ff) << 8) | \ |
(((unsigned short int)(x) & 0xff00) >> 8))) |
# endif |
#else |
# error "Don't know if bytes are big- or little-endian!" |
#endif |
static inline int hfs_clear_bit(int bitnr, hfs_u32 *lword) { |
return test_and_clear_bit(BITNR(bitnr), (unsigned long *)lword); |
} |
static inline int hfs_set_bit(int bitnr, hfs_u32 *lword) { |
return test_and_set_bit(BITNR(bitnr), (unsigned long *)lword); |
} |
static inline int hfs_test_bit(int bitnr, const hfs_u32 *lword) { |
/* the kernel should declare the second arg of test_bit as const */ |
return test_bit(BITNR(bitnr), (unsigned long *)lword); |
} |
#undef BITNR |
/* |
* HFS structures have fields aligned to 16-bit boundaries. |
* So, 16-bit get/put are easy while 32-bit get/put need |
* some care on architectures like the DEC Alpha. |
* |
* In what follows: |
* ns = 16-bit integer in network byte-order w/ 16-bit alignment |
* hs = 16-bit integer in host byte-order w/ 16-bit alignment |
* nl = 32-bit integer in network byte-order w/ unknown alignment |
* hl = 32-bit integer in host byte-order w/ unknown alignment |
* anl = 32-bit integer in network byte-order w/ 32-bit alignment |
* ahl = 32-bit integer in host byte-order w/ 32-bit alignment |
* Example: hfs_get_hl() gets an unaligned 32-bit integer converting |
* it to host byte-order. |
*/ |
#define hfs_get_hs(addr) ntohs(*((hfs_u16 *)(addr))) |
#define hfs_get_ns(addr) (*((hfs_u16 *)(addr))) |
#define hfs_get_hl(addr) ntohl(get_unaligned((hfs_u32 *)(addr))) |
#define hfs_get_nl(addr) get_unaligned((hfs_u32 *)(addr)) |
#define hfs_get_ahl(addr) ntohl(*((hfs_u32 *)(addr))) |
#define hfs_get_anl(addr) (*((hfs_u32 *)(addr))) |
#define hfs_put_hs(val, addr) ((void)(*((hfs_u16 *)(addr)) = ntohs(val))) |
#define hfs_put_ns(val, addr) ((void)(*((hfs_u16 *)(addr)) = (val))) |
#define hfs_put_hl(val, addr) put_unaligned(htonl(val), (hfs_u32 *)(addr)) |
#define hfs_put_nl(val, addr) put_unaligned((val), (hfs_u32 *)(addr)) |
#define hfs_put_ahl(val, addr) ((void)(*((hfs_u32 *)(addr)) = ntohl(val))) |
#define hfs_put_anl(val, addr) ((void)(*((hfs_u32 *)(addr)) = (val))) |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/i2c-algo-bit.h |
---|
0,0 → 1,54 |
/* ------------------------------------------------------------------------- */ |
/* i2c-algo-bit.h i2c driver algorithms for bit-shift adapters */ |
/* ------------------------------------------------------------------------- */ |
/* Copyright (C) 1995-99 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ |
/* ------------------------------------------------------------------------- */ |
/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even |
Frodo Looijaard <frodol@dds.nl> */ |
/* $Id: i2c-algo-bit.h,v 1.1 2004-01-28 15:25:27 giacomo Exp $ */ |
#ifndef _LINUX_I2C_ALGO_BIT_H |
#define _LINUX_I2C_ALGO_BIT_H |
/* --- Defines for bit-adapters --------------------------------------- */ |
/* |
* This struct contains the hw-dependent functions of bit-style adapters to |
* manipulate the line states, and to init any hw-specific features. This is |
* only used if you have more than one hw-type of adapter running. |
*/ |
struct i2c_algo_bit_data { |
void *data; /* private data for lowlevel routines */ |
void (*setsda) (void *data, int state); |
void (*setscl) (void *data, int state); |
int (*getsda) (void *data); |
int (*getscl) (void *data); |
/* local settings */ |
int udelay; /* half-clock-cycle time in microsecs */ |
/* i.e. clock is (500 / udelay) KHz */ |
int mdelay; /* in millisecs, unused */ |
int timeout; /* in jiffies */ |
}; |
#define I2C_BIT_ADAP_MAX 16 |
int i2c_bit_add_bus(struct i2c_adapter *); |
int i2c_bit_del_bus(struct i2c_adapter *); |
#endif /* _LINUX_I2C_ALGO_BIT_H */ |
/shark/trunk/drivers/linuxc26/include/linux/rtnetlink.h |
---|
0,0 → 1,708 |
#ifndef __LINUX_RTNETLINK_H |
#define __LINUX_RTNETLINK_H |
#include <linux/netlink.h> |
/**** |
* Routing/neighbour discovery messages. |
****/ |
/* Types of messages */ |
#define RTM_BASE 0x10 |
#define RTM_NEWLINK (RTM_BASE+0) |
#define RTM_DELLINK (RTM_BASE+1) |
#define RTM_GETLINK (RTM_BASE+2) |
#define RTM_SETLINK (RTM_BASE+3) |
#define RTM_NEWADDR (RTM_BASE+4) |
#define RTM_DELADDR (RTM_BASE+5) |
#define RTM_GETADDR (RTM_BASE+6) |
#define RTM_NEWROUTE (RTM_BASE+8) |
#define RTM_DELROUTE (RTM_BASE+9) |
#define RTM_GETROUTE (RTM_BASE+10) |
#define RTM_NEWNEIGH (RTM_BASE+12) |
#define RTM_DELNEIGH (RTM_BASE+13) |
#define RTM_GETNEIGH (RTM_BASE+14) |
#define RTM_NEWRULE (RTM_BASE+16) |
#define RTM_DELRULE (RTM_BASE+17) |
#define RTM_GETRULE (RTM_BASE+18) |
#define RTM_NEWQDISC (RTM_BASE+20) |
#define RTM_DELQDISC (RTM_BASE+21) |
#define RTM_GETQDISC (RTM_BASE+22) |
#define RTM_NEWTCLASS (RTM_BASE+24) |
#define RTM_DELTCLASS (RTM_BASE+25) |
#define RTM_GETTCLASS (RTM_BASE+26) |
#define RTM_NEWTFILTER (RTM_BASE+28) |
#define RTM_DELTFILTER (RTM_BASE+29) |
#define RTM_GETTFILTER (RTM_BASE+30) |
#define RTM_MAX (RTM_BASE+31) |
/* |
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) > 0 && (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 */ |
}; |
#define RTN_MAX RTN_XRESOLVE |
/* 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 */ |
/* 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_DEFAULT=253, |
RT_TABLE_MAIN=254, |
RT_TABLE_LOCAL=255 |
}; |
#define RT_TABLE_MAX RT_TABLE_LOCAL |
/* 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, |
RTA_FLOW, |
RTA_CACHEINFO, |
RTA_SESSION, |
}; |
#define RTA_MAX RTA_SESSION |
#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 |
}; |
#define RTAX_MAX RTAX_FEATURES |
#define RTAX_FEATURE_ECN 0x00000001 |
#define RTAX_FEATURE_SACK 0x00000002 |
#define RTAX_FEATURE_TIMESTAMP 0x00000004 |
struct rta_session |
{ |
__u8 proto; |
union { |
struct { |
__u16 sport; |
__u16 dport; |
} ports; |
struct { |
__u8 type; |
__u8 code; |
__u16 ident; |
} icmpt; |
__u32 spi; |
} u; |
}; |
/********************************************************* |
* Interface address. |
****/ |
struct ifaddrmsg |
{ |
unsigned char ifa_family; |
unsigned char ifa_prefixlen; /* The prefix length */ |
unsigned char ifa_flags; /* Flags */ |
unsigned char ifa_scope; /* See above */ |
int ifa_index; /* Link index */ |
}; |
enum |
{ |
IFA_UNSPEC, |
IFA_ADDRESS, |
IFA_LOCAL, |
IFA_LABEL, |
IFA_BROADCAST, |
IFA_ANYCAST, |
IFA_CACHEINFO |
}; |
#define IFA_MAX IFA_CACHEINFO |
/* ifa_flags */ |
#define IFA_F_SECONDARY 0x01 |
#define IFA_F_TEMPORARY IFA_F_SECONDARY |
#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 */ |
}; |
#define IFA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg)))) |
#define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg)) |
/* |
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. |
*/ |
/************************************************************** |
* Neighbour discovery. |
****/ |
struct ndmsg |
{ |
unsigned char ndm_family; |
unsigned char ndm_pad1; |
unsigned short ndm_pad2; |
int ndm_ifindex; /* Link index */ |
__u16 ndm_state; |
__u8 ndm_flags; |
__u8 ndm_type; |
}; |
enum |
{ |
NDA_UNSPEC, |
NDA_DST, |
NDA_LLADDR, |
NDA_CACHEINFO |
}; |
#define NDA_MAX NDA_CACHEINFO |
#define NDA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ndmsg)))) |
#define NDA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ndmsg)) |
/* |
* Neighbor Cache Entry Flags |
*/ |
#define NTF_PROXY 0x08 /* == ATF_PUBL */ |
#define NTF_ROUTER 0x80 |
/* |
* 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 |
struct nda_cacheinfo |
{ |
__u32 ndm_confirmed; |
__u32 ndm_used; |
__u32 ndm_updated; |
__u32 ndm_refcnt; |
}; |
/**** |
* 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 */ |
}; |
/* The struct should be in sync with struct net_device_stats */ |
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; |
}; |
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 |
}; |
#define IFLA_MAX IFLA_PROTINFO |
#define IFLA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg)))) |
#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg)) |
/* 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? */ |
}; |
#define IFLA_INET6_MAX IFLA_INET6_MCAST |
/***************************************************************** |
* 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, |
}; |
#define TCA_MAX TCA_RATE |
#define TCA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg)))) |
#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg)) |
/* SUMMARY: maximal rtattr understood by kernel */ |
#define RTATTR_MAX RTA_MAX |
/* RTnetlink multicast groups */ |
#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_IPV6_IFADDR 0x100 |
#define RTMGRP_IPV6_MROUTE 0x200 |
#define RTMGRP_IPV6_ROUTE 0x400 |
#define RTMGRP_DECnet_IFADDR 0x1000 |
#define RTMGRP_DECnet_ROUTE 0x4000 |
/* End of information exported to user level */ |
#ifdef __KERNEL__ |
#include <linux/config.h> |
static __inline__ int rtattr_strcmp(const struct rtattr *rta, const char *str) |
{ |
int len = strlen(str) + 1; |
return len > rta->rta_len || memcmp(RTA_DATA(rta), str, len); |
} |
extern int rtattr_parse(struct rtattr *tb[], int maxattr, struct rtattr *rta, int len); |
extern struct sock *rtnl; |
struct rtnetlink_link |
{ |
int (*doit)(struct sk_buff *, struct nlmsghdr*, void *attr); |
int (*dumpit)(struct sk_buff *, struct netlink_callback *cb); |
}; |
extern struct rtnetlink_link * rtnetlink_links[NPROTO]; |
extern int rtnetlink_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb); |
extern int rtnetlink_send(struct sk_buff *skb, u32 pid, u32 group, int echo); |
extern int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics); |
extern void __rta_fill(struct sk_buff *skb, int attrtype, int attrlen, const void *data); |
#define RTA_PUT(skb, attrtype, attrlen, data) \ |
({ if (unlikely(skb_tailroom(skb) < (int)RTA_SPACE(attrlen))) \ |
goto rtattr_failure; \ |
__rta_fill(skb, attrtype, attrlen, data); }) |
static inline struct rtattr * |
__rta_reserve(struct sk_buff *skb, int attrtype, int attrlen) |
{ |
struct rtattr *rta; |
int size = RTA_LENGTH(attrlen); |
rta = (struct rtattr*)skb_put(skb, RTA_ALIGN(size)); |
rta->rta_type = attrtype; |
rta->rta_len = size; |
return rta; |
} |
#define __RTA_PUT(skb, attrtype, attrlen) \ |
({ if (unlikely(skb_tailroom(skb) < (int)RTA_SPACE(attrlen))) \ |
goto rtattr_failure; \ |
__rta_reserve(skb, attrtype, attrlen); }) |
extern void rtmsg_ifinfo(int type, struct net_device *dev, unsigned change); |
extern struct semaphore rtnl_sem; |
#define rtnl_exlock() do { } while(0) |
#define rtnl_exunlock() do { } while(0) |
#define rtnl_exlock_nowait() (0) |
#define rtnl_shlock() down(&rtnl_sem) |
#define rtnl_shlock_nowait() down_trylock(&rtnl_sem) |
#define rtnl_shunlock() do { up(&rtnl_sem); \ |
if (rtnl && rtnl->sk_receive_queue.qlen) \ |
rtnl->sk_data_ready(rtnl, 0); \ |
} while(0) |
extern void rtnl_lock(void); |
extern void rtnl_unlock(void); |
extern void rtnetlink_init(void); |
#define ASSERT_RTNL() do { \ |
if (unlikely(down_trylock(&rtnl_sem) == 0)) { \ |
up(&rtnl_sem); \ |
printk(KERN_ERR "RTNL: assertion failed at %s (%d)\n", \ |
__FILE__, __LINE__); \ |
dump_stack(); \ |
} \ |
} while(0) |
#define BUG_TRAP(x) do { \ |
if (unlikely(!(x))) { \ |
printk(KERN_ERR "KERNEL: assertion (%s) failed at %s (%d)\n", \ |
#x, __FILE__ , __LINE__); \ |
} \ |
} while(0) |
#endif /* __KERNEL__ */ |
#endif /* __LINUX_RTNETLINK_H */ |
/shark/trunk/drivers/linuxc26/include/linux/ioctl.h |
---|
0,0 → 1,7 |
#ifndef _LINUX_IOCTL_H |
#define _LINUX_IOCTL_H |
#include <asm/ioctl.h> |
#endif /* _LINUX_IOCTL_H */ |
/shark/trunk/drivers/linuxc26/include/linux/affs_hardblocks.h |
---|
0,0 → 1,66 |
#ifndef AFFS_HARDBLOCKS_H |
#define AFFS_HARDBLOCKS_H |
/* Just the needed definitions for the RDB of an Amiga HD. */ |
struct RigidDiskBlock { |
u32 rdb_ID; |
u32 rdb_SummedLongs; |
s32 rdb_ChkSum; |
u32 rdb_HostID; |
u32 rdb_BlockBytes; |
u32 rdb_Flags; |
u32 rdb_BadBlockList; |
u32 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 { |
u32 pb_ID; |
u32 pb_SummedLongs; |
s32 pb_ChkSum; |
u32 pb_HostID; |
u32 pb_Next; |
u32 pb_Flags; |
u32 pb_Reserved1[2]; |
u32 pb_DevFlags; |
u8 pb_DriveName[32]; |
u32 pb_Reserved2[15]; |
u32 pb_Environment[17]; |
u32 pb_EReserved[15]; |
}; |
#define IDNAME_PARTITION 0x50415254 /* "PART" */ |
#define RDB_ALLOCATION_LIMIT 16 |
#endif /* AFFS_HARDBLOCKS_H */ |
/shark/trunk/drivers/linuxc26/include/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__ |
/* statfs() magic number for EFS */ |
#define EFS_SUPER_MAGIC 0x414A53 |
/* 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 { |
int32_t fs_size; /* size of filesystem, in sectors */ |
int32_t fs_firstcg; /* bb offset to first cg */ |
int32_t fs_cgfsize; /* size of cylinder group in bb's */ |
short fs_cgisize; /* bb's of inodes per cylinder group */ |
short fs_sectors; /* sectors per track */ |
short fs_heads; /* heads per cylinder */ |
short fs_ncg; /* # of cylinder groups in filesystem */ |
short fs_dirty; /* fs needs to be fsck'd */ |
int32_t fs_time; /* last super-block update */ |
int32_t fs_magic; /* magic number */ |
char fs_fname[6]; /* file system name */ |
char fs_fpack[6]; /* file system pack name */ |
int32_t fs_bmsize; /* size of bitmap in bytes */ |
int32_t fs_tfree; /* total free data blocks */ |
int32_t fs_tinode; /* total free inodes */ |
int32_t fs_bmblock; /* bitmap location. */ |
int32_t fs_replsb; /* Location of replicated superblock. */ |
int32_t fs_lastialloc; /* last allocated inode */ |
char fs_spare[20]; /* space for expansion - MUST BE ZERO */ |
int32_t fs_checksum; /* checksum of volume portion of fs */ |
}; |
/* efs superblock information in memory */ |
struct efs_sb_info { |
int32_t fs_magic; /* superblock magic number */ |
int32_t fs_start; /* first block of filesystem */ |
int32_t first_block; /* first data block in filesystem */ |
int32_t total_blocks; /* total number of blocks in filesystem */ |
int32_t group_size; /* # of blocks a group consists of */ |
int32_t data_free; /* # of free data blocks */ |
int32_t inode_free; /* # of free inodes */ |
short inode_blocks; /* # of blocks used for inodes in every grp */ |
short total_groups; /* # of groups */ |
}; |
#endif /* __EFS_FS_SB_H__ */ |
/shark/trunk/drivers/linuxc26/include/linux/proc_fs.h |
---|
0,0 → 1,257 |
#ifndef _LINUX_PROC_FS_H |
#define _LINUX_PROC_FS_H |
#include <linux/config.h> |
#include <linux/slab.h> |
#include <linux/fs.h> |
#include <asm/atomic.h> |
/* |
* The proc filesystem constants/structures |
*/ |
/* |
* Offset of the first process in the /proc root directory.. |
*/ |
#define FIRST_PROCESS_ENTRY 256 |
/* |
* We always define these enumerators |
*/ |
enum { |
PROC_ROOT_INO = 1, |
}; |
/* Finally, the dynamically allocatable proc entries are reserved: */ |
#define PROC_DYNAMIC_FIRST 4096 |
#define PROC_NDYNAMIC 16384 |
#define PROC_SUPER_MAGIC 0x9fa0 |
/* |
* This is not completely implemented yet. The idea is to |
* create an in-memory tree (like the actual /proc filesystem |
* tree) of these proc_dir_entries, so that we can dynamically |
* add new files to /proc. |
* |
* The "next" pointer creates a linked list of one /proc directory, |
* while parent/subdir create the directory structure (every |
* /proc file has a parent, but "subdir" is NULL for all |
* non-directory entries). |
* |
* "get_info" is called at "read", while "owner" is used to protect module |
* from unloading while proc_dir_entry is in use |
*/ |
typedef int (read_proc_t)(char *page, char **start, off_t off, |
int count, int *eof, void *data); |
typedef int (write_proc_t)(struct file *file, const char __user *buffer, |
unsigned long count, void *data); |
typedef int (get_info_t)(char *, char **, off_t, int); |
struct proc_dir_entry { |
unsigned short low_ino; |
unsigned short namelen; |
const char *name; |
mode_t mode; |
nlink_t nlink; |
uid_t uid; |
gid_t gid; |
unsigned long size; |
struct inode_operations * proc_iops; |
struct file_operations * proc_fops; |
get_info_t *get_info; |
struct module *owner; |
struct proc_dir_entry *next, *parent, *subdir; |
void *data; |
read_proc_t *read_proc; |
write_proc_t *write_proc; |
atomic_t count; /* use count */ |
int deleted; /* delete flag */ |
}; |
struct kcore_list { |
struct kcore_list *next; |
unsigned long addr; |
size_t size; |
}; |
#ifdef CONFIG_PROC_FS |
extern struct proc_dir_entry proc_root; |
extern struct proc_dir_entry *proc_root_fs; |
extern struct proc_dir_entry *proc_net; |
extern struct proc_dir_entry *proc_bus; |
extern struct proc_dir_entry *proc_root_driver; |
extern struct proc_dir_entry *proc_root_kcore; |
extern void proc_root_init(void); |
extern void proc_misc_init(void); |
struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, struct nameidata *); |
struct dentry *proc_pid_unhash(struct task_struct *p); |
void proc_pid_flush(struct dentry *proc_dentry); |
int proc_pid_readdir(struct file * filp, void * dirent, filldir_t filldir); |
extern struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, |
struct proc_dir_entry *parent); |
extern void remove_proc_entry(const char *name, struct proc_dir_entry *parent); |
extern struct vfsmount *proc_mnt; |
extern int proc_fill_super(struct super_block *,void *,int); |
extern struct inode * proc_get_inode(struct super_block *, int, struct proc_dir_entry *); |
extern int proc_match(int, const char *,struct proc_dir_entry *); |
/* |
* These are generic /proc routines that use the internal |
* "struct proc_dir_entry" tree to traverse the filesystem. |
* |
* The /proc root directory has extended versions to take care |
* of the /proc/<pid> subdirectories. |
*/ |
extern int proc_readdir(struct file *, void *, filldir_t); |
extern struct dentry *proc_lookup(struct inode *, struct dentry *, struct nameidata *); |
extern struct file_operations proc_kcore_operations; |
extern struct file_operations proc_kmsg_operations; |
extern struct file_operations ppc_htab_operations; |
/* |
* proc_tty.c |
*/ |
struct tty_driver; |
extern void proc_tty_init(void); |
extern void proc_tty_register_driver(struct tty_driver *driver); |
extern void proc_tty_unregister_driver(struct tty_driver *driver); |
/* |
* proc_devtree.c |
*/ |
extern void proc_device_tree_init(void); |
/* |
* proc_rtas.c |
*/ |
extern void proc_rtas_init(void); |
extern struct proc_dir_entry *proc_symlink(const char *, |
struct proc_dir_entry *, const char *); |
extern struct proc_dir_entry *proc_mkdir(const char *,struct proc_dir_entry *); |
static inline struct proc_dir_entry *create_proc_read_entry(const char *name, |
mode_t mode, struct proc_dir_entry *base, |
read_proc_t *read_proc, void * data) |
{ |
struct proc_dir_entry *res=create_proc_entry(name,mode,base); |
if (res) { |
res->read_proc=read_proc; |
res->data=data; |
} |
return res; |
} |
static inline struct proc_dir_entry *create_proc_info_entry(const char *name, |
mode_t mode, struct proc_dir_entry *base, get_info_t *get_info) |
{ |
struct proc_dir_entry *res=create_proc_entry(name,mode,base); |
if (res) res->get_info=get_info; |
return res; |
} |
static inline struct proc_dir_entry *proc_net_create(const char *name, |
mode_t mode, get_info_t *get_info) |
{ |
return create_proc_info_entry(name,mode,proc_net,get_info); |
} |
static inline struct proc_dir_entry *proc_net_fops_create(const char *name, |
mode_t mode, struct file_operations *fops) |
{ |
struct proc_dir_entry *res = create_proc_entry(name, mode, proc_net); |
if (res) |
res->proc_fops = fops; |
return res; |
} |
static inline void proc_net_remove(const char *name) |
{ |
remove_proc_entry(name,proc_net); |
} |
#else |
#define proc_root_driver NULL |
#define proc_net NULL |
#define proc_net_fops_create(name, mode, fops) ({ (void)(mode), NULL; }) |
#define proc_net_create(name, mode, info) ({ (void)(mode), NULL; }) |
static inline void proc_net_remove(const char *name) {} |
static inline struct dentry *proc_pid_unhash(struct task_struct *p) { return NULL; } |
static inline void proc_pid_flush(struct dentry *proc_dentry) { } |
static inline struct proc_dir_entry *create_proc_entry(const char *name, |
mode_t mode, struct proc_dir_entry *parent) { return NULL; } |
#define remove_proc_entry(name, parent) do {} while (0) |
static inline struct proc_dir_entry *proc_symlink(const char *name, |
struct proc_dir_entry *parent,char *dest) {return NULL;} |
static inline struct proc_dir_entry *proc_mkdir(const char *name, |
struct proc_dir_entry *parent) {return NULL;} |
static inline struct proc_dir_entry *create_proc_read_entry(const char *name, |
mode_t mode, struct proc_dir_entry *base, |
int (*read_proc)(char *, char **, off_t, int, int *, void *), |
void * data) { return NULL; } |
static inline struct proc_dir_entry *create_proc_info_entry(const char *name, |
mode_t mode, struct proc_dir_entry *base, get_info_t *get_info) |
{ return NULL; } |
struct tty_driver; |
static inline void proc_tty_register_driver(struct tty_driver *driver) {}; |
static inline void proc_tty_unregister_driver(struct tty_driver *driver) {}; |
extern struct proc_dir_entry proc_root; |
#endif /* CONFIG_PROC_FS */ |
#if !defined(CONFIG_PROC_FS) |
static inline void kclist_add(struct kcore_list *new, void *addr, size_t size) |
{ |
} |
static inline struct kcore_list * kclist_del(void *addr) |
{ |
return NULL; |
} |
#else |
extern void kclist_add(struct kcore_list *, void *, size_t); |
extern struct kcore_list *kclist_del(void *); |
#endif |
struct proc_inode { |
struct task_struct *task; |
int type; |
union { |
int (*proc_get_link)(struct inode *, struct dentry **, struct vfsmount **); |
int (*proc_read)(struct task_struct *task, char *page); |
} op; |
struct proc_dir_entry *pde; |
struct inode vfs_inode; |
}; |
static inline struct proc_inode *PROC_I(const struct inode *inode) |
{ |
return container_of(inode, struct proc_inode, vfs_inode); |
} |
static inline struct proc_dir_entry *PDE(const struct inode *inode) |
{ |
return PROC_I(inode)->pde; |
} |
#endif /* _LINUX_PROC_FS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/device.h |
---|
0,0 → 1,408 |
/* |
* device.h - generic, centralized driver model |
* |
* Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org> |
* |
* This file is released under the GPLv2 |
* |
* See Documentation/driver-model/ for more information. |
*/ |
#ifndef _DEVICE_H_ |
#define _DEVICE_H_ |
#include <linux/config.h> |
#include <linux/ioport.h> |
#include <linux/kobject.h> |
#include <linux/list.h> |
#include <linux/spinlock.h> |
#include <linux/types.h> |
#include <linux/ioport.h> |
#include <linux/module.h> |
#include <linux/pm.h> |
#include <asm/semaphore.h> |
#include <asm/atomic.h> |
#define DEVICE_NAME_SIZE 50 |
#define DEVICE_NAME_HALF __stringify(20) /* Less than half to accommodate slop */ |
#define DEVICE_ID_SIZE 32 |
#define BUS_ID_SIZE KOBJ_NAME_LEN |
enum { |
SUSPEND_NOTIFY, |
SUSPEND_SAVE_STATE, |
SUSPEND_DISABLE, |
SUSPEND_POWER_DOWN, |
}; |
enum { |
RESUME_POWER_ON, |
RESUME_RESTORE_STATE, |
RESUME_ENABLE, |
}; |
struct device; |
struct device_driver; |
struct class; |
struct class_device; |
struct bus_type { |
char * name; |
struct subsystem subsys; |
struct kset drivers; |
struct kset devices; |
int (*match)(struct device * dev, struct device_driver * drv); |
struct device * (*add) (struct device * parent, char * bus_id); |
int (*hotplug) (struct device *dev, char **envp, |
int num_envp, char *buffer, int buffer_size); |
int (*suspend)(struct device * dev, u32 state); |
int (*resume)(struct device * dev); |
}; |
extern int bus_register(struct bus_type * bus); |
extern void bus_unregister(struct bus_type * bus); |
extern int bus_rescan_devices(struct bus_type * bus); |
extern struct bus_type * get_bus(struct bus_type * bus); |
extern void put_bus(struct bus_type * bus); |
extern struct bus_type * find_bus(char * name); |
/* iterator helpers for buses */ |
int bus_for_each_dev(struct bus_type * bus, struct device * start, void * data, |
int (*fn)(struct device *, void *)); |
int bus_for_each_drv(struct bus_type * bus, struct device_driver * start, |
void * data, int (*fn)(struct device_driver *, void *)); |
/* driverfs interface for exporting bus attributes */ |
struct bus_attribute { |
struct attribute attr; |
ssize_t (*show)(struct bus_type *, char * buf); |
ssize_t (*store)(struct bus_type *, const char * buf, size_t count); |
}; |
#define BUS_ATTR(_name,_mode,_show,_store) \ |
struct bus_attribute bus_attr_##_name = { \ |
.attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \ |
.show = _show, \ |
.store = _store, \ |
}; |
extern int bus_create_file(struct bus_type *, struct bus_attribute *); |
extern void bus_remove_file(struct bus_type *, struct bus_attribute *); |
struct device_driver { |
char * name; |
struct bus_type * bus; |
struct semaphore unload_sem; |
struct kobject kobj; |
struct list_head devices; |
int (*probe) (struct device * dev); |
int (*remove) (struct device * dev); |
void (*shutdown) (struct device * dev); |
int (*suspend) (struct device * dev, u32 state, u32 level); |
int (*resume) (struct device * dev, u32 level); |
}; |
extern int driver_register(struct device_driver * drv); |
extern void driver_unregister(struct device_driver * drv); |
extern struct device_driver * get_driver(struct device_driver * drv); |
extern void put_driver(struct device_driver * drv); |
/* driverfs interface for exporting driver attributes */ |
struct driver_attribute { |
struct attribute attr; |
ssize_t (*show)(struct device_driver *, char * buf); |
ssize_t (*store)(struct device_driver *, const char * buf, size_t count); |
}; |
#define DRIVER_ATTR(_name,_mode,_show,_store) \ |
struct driver_attribute driver_attr_##_name = { \ |
.attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \ |
.show = _show, \ |
.store = _store, \ |
}; |
extern int driver_create_file(struct device_driver *, struct driver_attribute *); |
extern void driver_remove_file(struct device_driver *, struct driver_attribute *); |
/* |
* device classes |
*/ |
struct class { |
char * name; |
struct subsystem subsys; |
struct list_head children; |
struct list_head interfaces; |
int (*hotplug)(struct class_device *dev, char **envp, |
int num_envp, char *buffer, int buffer_size); |
void (*release)(struct class_device *dev); |
}; |
extern int class_register(struct class *); |
extern void class_unregister(struct class *); |
extern struct class * class_get(struct class *); |
extern void class_put(struct class *); |
struct class_attribute { |
struct attribute attr; |
ssize_t (*show)(struct class *, char * buf); |
ssize_t (*store)(struct class *, const char * buf, size_t count); |
}; |
#define CLASS_ATTR(_name,_mode,_show,_store) \ |
struct class_attribute class_attr_##_name = { \ |
.attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \ |
.show = _show, \ |
.store = _store, \ |
}; |
extern int class_create_file(struct class *, const struct class_attribute *); |
extern void class_remove_file(struct class *, const struct class_attribute *); |
struct class_device { |
struct list_head node; |
struct kobject kobj; |
struct class * class; /* required */ |
struct device * dev; /* not necessary, but nice to have */ |
void * class_data; /* class-specific data */ |
char class_id[BUS_ID_SIZE]; /* unique to this class */ |
}; |
static inline void * |
class_get_devdata (struct class_device *dev) |
{ |
return dev->class_data; |
} |
static inline void |
class_set_devdata (struct class_device *dev, void *data) |
{ |
dev->class_data = data; |
} |
extern int class_device_register(struct class_device *); |
extern void class_device_unregister(struct class_device *); |
extern void class_device_initialize(struct class_device *); |
extern int class_device_add(struct class_device *); |
extern void class_device_del(struct class_device *); |
extern int class_device_rename(struct class_device *, char *); |
extern struct class_device * class_device_get(struct class_device *); |
extern void class_device_put(struct class_device *); |
struct class_device_attribute { |
struct attribute attr; |
ssize_t (*show)(struct class_device *, char * buf); |
ssize_t (*store)(struct class_device *, const char * buf, size_t count); |
}; |
#define CLASS_DEVICE_ATTR(_name,_mode,_show,_store) \ |
struct class_device_attribute class_device_attr_##_name = { \ |
.attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \ |
.show = _show, \ |
.store = _store, \ |
}; |
extern int class_device_create_file(struct class_device *, |
const struct class_device_attribute *); |
extern void class_device_remove_file(struct class_device *, |
const struct class_device_attribute *); |
struct class_interface { |
struct list_head node; |
struct class *class; |
int (*add) (struct class_device *); |
void (*remove) (struct class_device *); |
}; |
extern int class_interface_register(struct class_interface *); |
extern void class_interface_unregister(struct class_interface *); |
struct device { |
struct list_head node; /* node in sibling list */ |
struct list_head bus_list; /* node in bus's list */ |
struct list_head driver_list; |
struct list_head children; |
struct device * parent; |
struct completion * complete; /* Notification for freeing device. */ |
struct kobject kobj; |
char bus_id[BUS_ID_SIZE]; /* position on parent bus */ |
struct bus_type * bus; /* type of bus device is on */ |
struct device_driver *driver; /* which driver has allocated this |
device */ |
void *driver_data; /* data private to the driver */ |
void *platform_data; /* Platform specific data (e.g. ACPI, |
BIOS data relevant to device) */ |
struct dev_pm_info power; |
u32 power_state; /* Current operating state. In |
ACPI-speak, this is D0-D3, D0 |
being fully functional, and D3 |
being off. */ |
unsigned char *saved_state; /* saved device state */ |
u32 detach_state; /* State to enter when device is |
detached from its driver. */ |
u64 *dma_mask; /* dma mask (if dma'able device) */ |
void (*release)(struct device * dev); |
}; |
static inline struct device * |
list_to_dev(struct list_head *node) |
{ |
return list_entry(node, struct device, node); |
} |
static inline void * |
dev_get_drvdata (struct device *dev) |
{ |
return dev->driver_data; |
} |
static inline void |
dev_set_drvdata (struct device *dev, void *data) |
{ |
dev->driver_data = data; |
} |
/* |
* High level routines for use by the bus drivers |
*/ |
extern int device_register(struct device * dev); |
extern void device_unregister(struct device * dev); |
extern void device_unregister_wait(struct device * dev); |
extern void device_initialize(struct device * dev); |
extern int device_add(struct device * dev); |
extern void device_del(struct device * dev); |
extern int device_for_each_child(struct device *, void *, |
int (*fn)(struct device *, void *)); |
/* |
* Manual binding of a device to driver. See drivers/base/bus.c |
* for information on use. |
*/ |
extern void device_bind_driver(struct device * dev); |
extern void device_release_driver(struct device * dev); |
extern void driver_attach(struct device_driver * drv); |
/* driverfs interface for exporting device attributes */ |
struct device_attribute { |
struct attribute attr; |
ssize_t (*show)(struct device * dev, char * buf); |
ssize_t (*store)(struct device * dev, const char * buf, size_t count); |
}; |
#define DEVICE_ATTR(_name,_mode,_show,_store) \ |
struct device_attribute dev_attr_##_name = { \ |
.attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \ |
.show = _show, \ |
.store = _store, \ |
}; |
extern int device_create_file(struct device *device, struct device_attribute * entry); |
extern void device_remove_file(struct device * dev, struct device_attribute * attr); |
/* |
* Platform "fixup" functions - allow the platform to have their say |
* about devices and actions that the general device layer doesn't |
* know about. |
*/ |
/* Notify platform of device discovery */ |
extern int (*platform_notify)(struct device * dev); |
extern int (*platform_notify_remove)(struct device * dev); |
/** |
* get_device - atomically increment the reference count for the device. |
* |
*/ |
extern struct device * get_device(struct device * dev); |
extern void put_device(struct device * dev); |
/* drivers/base/platform.c */ |
struct platform_device { |
char * name; |
u32 id; |
struct device dev; |
u32 num_resources; |
struct resource * resource; |
}; |
#define to_platform_device(x) container_of((x), struct platform_device, dev) |
extern int platform_device_register(struct platform_device *); |
extern void platform_device_unregister(struct platform_device *); |
extern struct bus_type platform_bus_type; |
extern struct device legacy_bus; |
/* drivers/base/power.c */ |
extern void device_shutdown(void); |
/* drivers/base/firmware.c */ |
extern int firmware_register(struct subsystem *); |
extern void firmware_unregister(struct subsystem *); |
/* debugging and troubleshooting/diagnostic helpers. */ |
#define dev_printk(level, dev, format, arg...) \ |
printk(level "%s %s: " format , (dev)->driver->name , (dev)->bus_id , ## arg) |
#ifdef DEBUG |
#define dev_dbg(dev, format, arg...) \ |
dev_printk(KERN_DEBUG , dev , format , ## arg) |
#else |
#define dev_dbg(dev, format, arg...) do {} while (0) |
#endif |
#define dev_err(dev, format, arg...) \ |
dev_printk(KERN_ERR , dev , format , ## arg) |
#define dev_info(dev, format, arg...) \ |
dev_printk(KERN_INFO , dev , format , ## arg) |
#define dev_warn(dev, format, arg...) \ |
dev_printk(KERN_WARNING , dev , format , ## arg) |
/* Create alias, so I can be autoloaded. */ |
#define MODULE_ALIAS_CHARDEV(major,minor) \ |
MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor)) |
#define MODULE_ALIAS_CHARDEV_MAJOR(major) \ |
MODULE_ALIAS("char-major-" __stringify(major) "-*") |
#endif /* _DEVICE_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/serialP.h |
---|
0,0 → 1,182 |
/* |
* Private header file for the (dumb) serial driver |
* |
* Copyright (C) 1997 by Theodore Ts'o. |
* |
* Redistribution of this file is permitted under the terms of the GNU |
* Public License (GPL) |
*/ |
#ifndef _LINUX_SERIALP_H |
#define _LINUX_SERIALP_H |
/* |
* This is our internal structure for each serial port's state. |
* |
* Many fields are paralleled by the structure used by the serial_struct |
* structure. |
* |
* For definitions of the flags field, see tty.h |
*/ |
#include <linux/version.h> |
#include <linux/config.h> |
#include <linux/termios.h> |
#include <linux/workqueue.h> |
#include <linux/interrupt.h> |
#include <linux/circ_buf.h> |
#include <linux/wait.h> |
#if (LINUX_VERSION_CODE < 0x020300) |
/* Unfortunate, but Linux 2.2 needs async_icount defined here and |
* it got moved in 2.3 */ |
#include <linux/serial.h> |
#endif |
struct serial_state { |
int magic; |
int baud_base; |
unsigned long port; |
int irq; |
int flags; |
int hub6; |
int type; |
int line; |
int revision; /* Chip revision (950) */ |
int xmit_fifo_size; |
int custom_divisor; |
int count; |
u8 *iomem_base; |
u16 iomem_reg_shift; |
unsigned short close_delay; |
unsigned short closing_wait; /* time to wait before closing */ |
struct async_icount icount; |
int io_type; |
struct async_struct *info; |
struct pci_dev *dev; |
}; |
struct async_struct { |
int magic; |
unsigned long port; |
int hub6; |
int flags; |
int xmit_fifo_size; |
struct serial_state *state; |
struct tty_struct *tty; |
int read_status_mask; |
int ignore_status_mask; |
int timeout; |
int quot; |
int x_char; /* xon/xoff character */ |
int close_delay; |
unsigned short closing_wait; |
unsigned short closing_wait2; /* obsolete */ |
int IER; /* Interrupt Enable Register */ |
int MCR; /* Modem control register */ |
int LCR; /* Line control register */ |
int ACR; /* 16950 Additional Control Reg. */ |
unsigned long event; |
unsigned long last_active; |
int line; |
int blocked_open; /* # of blocked opens */ |
struct circ_buf xmit; |
spinlock_t xmit_lock; |
u8 *iomem_base; |
u16 iomem_reg_shift; |
int io_type; |
struct work_struct work; |
struct tasklet_struct tlet; |
#ifdef DECLARE_WAITQUEUE |
wait_queue_head_t open_wait; |
wait_queue_head_t close_wait; |
wait_queue_head_t delta_msr_wait; |
#else |
struct wait_queue *open_wait; |
struct wait_queue *close_wait; |
struct wait_queue *delta_msr_wait; |
#endif |
struct async_struct *next_port; /* For the linked list */ |
struct async_struct *prev_port; |
}; |
#define CONFIGURED_SERIAL_PORT(info) ((info)->port || ((info)->iomem_base)) |
#define SERIAL_MAGIC 0x5301 |
#define SSTATE_MAGIC 0x5302 |
/* |
* Events are used to schedule things to happen at timer-interrupt |
* time, instead of at rs interrupt time. |
*/ |
#define RS_EVENT_WRITE_WAKEUP 0 |
/* |
* Multiport serial configuration structure --- internal structure |
*/ |
struct rs_multiport_struct { |
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; |
}; |
#if defined(__alpha__) && !defined(CONFIG_PCI) |
/* |
* Digital did something really horribly wrong with the OUT1 and OUT2 |
* lines on at least some ALPHA's. The failure mode is that if either |
* is cleared, the machine locks up with endless interrupts. |
* |
* This is still used by arch/mips/au1000/common/serial.c for some weird |
* reason (mips != alpha!) |
*/ |
#define ALPHA_KLUDGE_MCR (UART_MCR_OUT2 | UART_MCR_OUT1) |
#else |
#define ALPHA_KLUDGE_MCR 0 |
#endif |
/* |
* Definitions for PCI support. |
*/ |
#define SPCI_FL_BASE_MASK 0x0007 |
#define SPCI_FL_BASE0 0x0000 |
#define SPCI_FL_BASE1 0x0001 |
#define SPCI_FL_BASE2 0x0002 |
#define SPCI_FL_BASE3 0x0003 |
#define SPCI_FL_BASE4 0x0004 |
#define SPCI_FL_GET_BASE(x) (x & SPCI_FL_BASE_MASK) |
#define SPCI_FL_IRQ_MASK (0x0007 << 4) |
#define SPCI_FL_IRQBASE0 (0x0000 << 4) |
#define SPCI_FL_IRQBASE1 (0x0001 << 4) |
#define SPCI_FL_IRQBASE2 (0x0002 << 4) |
#define SPCI_FL_IRQBASE3 (0x0003 << 4) |
#define SPCI_FL_IRQBASE4 (0x0004 << 4) |
#define SPCI_FL_GET_IRQBASE(x) ((x & SPCI_FL_IRQ_MASK) >> 4) |
/* Use successive BARs (PCI base address registers), |
else use offset into some specified BAR */ |
#define SPCI_FL_BASE_TABLE 0x0100 |
/* Use successive entries in the irq resource table */ |
#define SPCI_FL_IRQ_TABLE 0x0200 |
/* Use the irq resource table instead of dev->irq */ |
#define SPCI_FL_IRQRESOURCE 0x0400 |
/* Use the Base address register size to cap number of ports */ |
#define SPCI_FL_REGION_SZ_CAP 0x0800 |
/* Do not use irq sharing for this device */ |
#define SPCI_FL_NO_SHIRQ 0x1000 |
/* This is a PNP device */ |
#define SPCI_FL_ISPNP 0x2000 |
#define SPCI_FL_PNPDEFAULT (SPCI_FL_IRQRESOURCE|SPCI_FL_ISPNP) |
#endif /* _LINUX_SERIAL_H */ |
/shark/trunk/drivers/linuxc26/include/linux/kallsyms.h |
---|
0,0 → 1,47 |
/* Rewritten and vastly simplified by Rusty Russell for in-kernel |
* module loader: |
* Copyright 2002 Rusty Russell <rusty@rustcorp.com.au> IBM Corporation |
*/ |
#ifndef _LINUX_KALLSYMS_H |
#define _LINUX_KALLSYMS_H |
#include <linux/config.h> |
#ifdef CONFIG_KALLSYMS |
/* Lookup an address. modname is set to NULL if it's in the kernel. */ |
const char *kallsyms_lookup(unsigned long addr, |
unsigned long *symbolsize, |
unsigned long *offset, |
char **modname, char *namebuf); |
/* Replace "%s" in format with address, if found */ |
extern void __print_symbol(const char *fmt, unsigned long address); |
#else /* !CONFIG_KALLSYMS */ |
static inline const char *kallsyms_lookup(unsigned long addr, |
unsigned long *symbolsize, |
unsigned long *offset, |
char **modname, char *namebuf) |
{ |
return NULL; |
} |
/* Stupid that this does nothing, but I didn't create this mess. */ |
#define __print_symbol(fmt, addr) |
#endif /*CONFIG_KALLSYMS*/ |
/* This macro allows us to keep printk typechecking */ |
static void __check_printsym_format(const char *fmt, ...) |
__attribute__((format(printf,1,2))); |
static inline void __check_printsym_format(const char *fmt, ...) |
{ |
} |
#define print_symbol(fmt, addr) \ |
do { \ |
__check_printsym_format(fmt, ""); \ |
__print_symbol(fmt, addr); \ |
} while(0) |
#endif /*_LINUX_KALLSYMS_H*/ |
/shark/trunk/drivers/linuxc26/include/linux/if_shaper.h |
---|
0,0 → 1,64 |
#ifndef __LINUX_SHAPER_H |
#define __LINUX_SHAPER_H |
#ifdef __KERNEL__ |
#define SHAPER_QLEN 10 |
/* |
* This is a bit speed dependent (read it shouldn't be a constant!) |
* |
* 5 is about right for 28.8 upwards. Below that double for every |
* halving of speed or so. - ie about 20 for 9600 baud. |
*/ |
#define SHAPER_LATENCY (5*HZ) |
#define SHAPER_MAXSLIP 2 |
#define SHAPER_BURST (HZ/50) /* Good for >128K then */ |
struct shaper |
{ |
struct sk_buff_head sendq; |
__u32 bytespertick; |
__u32 bitspersec; |
__u32 shapelatency; |
__u32 shapeclock; |
unsigned long recovery; /* Time we can next clock a packet out on |
an empty queue */ |
unsigned long locked; |
struct net_device_stats stats; |
struct net_device *dev; |
int (*hard_start_xmit) (struct sk_buff *skb, |
struct net_device *dev); |
int (*hard_header) (struct sk_buff *skb, |
struct net_device *dev, |
unsigned short type, |
void *daddr, |
void *saddr, |
unsigned len); |
int (*rebuild_header)(struct sk_buff *skb); |
int (*hard_header_cache)(struct neighbour *neigh, struct hh_cache *hh); |
void (*header_cache_update)(struct hh_cache *hh, struct net_device *dev, unsigned char * haddr); |
struct net_device_stats* (*get_stats)(struct net_device *dev); |
wait_queue_head_t wait_queue; |
struct timer_list timer; |
}; |
#endif |
#define SHAPER_SET_DEV 0x0001 |
#define SHAPER_SET_SPEED 0x0002 |
#define SHAPER_GET_DEV 0x0003 |
#define SHAPER_GET_SPEED 0x0004 |
struct shaperconf |
{ |
__u16 ss_cmd; |
union |
{ |
char ssu_name[14]; |
__u32 ssu_speed; |
} ss_u; |
#define ss_speed ss_u.ssu_speed |
#define ss_name ss_u.ssu_name |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/n_r3964.h |
---|
0,0 → 1,226 |
/* r3964 linediscipline for linux |
* |
* ----------------------------------------------------------- |
* Copyright by |
* Philips Automation Projects |
* Kassel (Germany) |
* http://www.pap-philips.de |
* ----------------------------------------------------------- |
* 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: not supported by cvs2svn $ |
* 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 __LINUX_N_R3964_H__ |
#define __LINUX_N_R3964_H__ |
/* line disciplines for r3964 protocol */ |
#include <asm/termios.h> |
#ifdef __KERNEL__ |
/* |
* Common ascii handshake characters: |
*/ |
#define STX 0x02 |
#define ETX 0x03 |
#define DLE 0x10 |
#define NAK 0x15 |
/* |
* Timeouts (msecs/10 msecs per timer interrupt): |
*/ |
#define R3964_TO_QVZ 550/10 |
#define R3964_TO_ZVZ 220/10 |
#define R3964_TO_NO_BUF 400/10 |
#define R3964_NO_TX_ROOM 100/10 |
#define R3964_TO_RX_PANIC 4000/10 |
#define R3964_MAX_RETRIES 5 |
#endif |
/* |
* 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: |
*/ |
#ifdef __KERNEL__ |
enum { R3964_IDLE, |
R3964_TX_REQUEST, R3964_TRANSMITTING, |
R3964_WAIT_ZVZ_BEFORE_TX_RETRY, R3964_WAIT_FOR_TX_ACK, |
R3964_WAIT_FOR_RX_BUF, |
R3964_RECEIVING, R3964_WAIT_FOR_BCC, R3964_WAIT_FOR_RX_REPEAT |
}; |
/* |
* All open file-handles are 'clients' and are stored in a linked list: |
*/ |
struct r3964_message; |
struct r3964_client_info { |
spinlock_t lock; |
pid_t pid; |
unsigned int sig_flags; |
struct r3964_client_info *next; |
struct r3964_message *first_msg; |
struct r3964_message *last_msg; |
struct r3964_block_header *next_block_to_read; |
int msg_count; |
}; |
#endif |
/* 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 |
#ifdef __KERNEL__ |
struct r3964_block_header; |
/* internal version of client_message: */ |
struct r3964_message { |
int msg_id; |
int arg; |
int error_code; |
struct r3964_block_header *block; |
struct r3964_message *next; |
}; |
/* |
* Header of received block in rx_buf/tx_buf: |
*/ |
struct r3964_block_header |
{ |
unsigned int length; /* length in chars without header */ |
unsigned char *data; /* usually data is located |
immediately behind this struct */ |
unsigned int locks; /* only used in rx_buffer */ |
struct r3964_block_header *next; |
struct r3964_client_info *owner; /* =NULL in rx_buffer */ |
}; |
/* |
* If rx_buf hasn't enough space to store R3964_MTU chars, |
* we will reject all incoming STX-requests by sending NAK. |
*/ |
#define RX_BUF_SIZE 4000 |
#define TX_BUF_SIZE 4000 |
#define R3964_MAX_BLOCKS_IN_RX_QUEUE 100 |
#define R3964_PARITY 0x0001 |
#define R3964_FRAME 0x0002 |
#define R3964_OVERRUN 0x0004 |
#define R3964_UNKNOWN 0x0008 |
#define R3964_BREAK 0x0010 |
#define R3964_CHECKSUM 0x0020 |
#define R3964_ERROR 0x003f |
#define R3964_BCC 0x4000 |
#define R3964_DEBUG 0x8000 |
struct r3964_info { |
spinlock_t lock; |
struct tty_struct *tty; |
unsigned char priority; |
unsigned char *rx_buf; /* ring buffer */ |
unsigned char *tx_buf; |
wait_queue_head_t read_wait; |
//struct wait_queue *read_wait; |
struct r3964_block_header *rx_first; |
struct r3964_block_header *rx_last; |
struct r3964_block_header *tx_first; |
struct r3964_block_header *tx_last; |
unsigned int tx_position; |
unsigned int rx_position; |
unsigned char last_rx; |
unsigned char bcc; |
unsigned int blocks_in_rx_queue; |
struct r3964_client_info *firstClient; |
unsigned int state; |
unsigned int flags; |
struct timer_list tmr; |
int nRetry; |
}; |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/icmpv6.h |
---|
0,0 → 1,162 |
#ifndef _LINUX_ICMPV6_H |
#define _LINUX_ICMPV6_H |
#include <asm/byteorder.h> |
struct icmp6hdr { |
__u8 icmp6_type; |
__u8 icmp6_code; |
__u16 icmp6_cksum; |
union { |
__u32 un_data32[1]; |
__u16 un_data16[2]; |
__u8 un_data8[4]; |
struct icmpv6_echo { |
__u16 identifier; |
__u16 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:6, |
other:1, |
managed:1; |
#elif defined(__BIG_ENDIAN_BITFIELD) |
__u8 managed:1, |
other:1, |
reserved:6; |
#else |
#error "Please fix <asm/byteorder.h>" |
#endif |
__u16 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 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 |
/* 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 |
/* this must be an IANA-assigned value; 206 for testing only */ |
#define ICMPV6_MLD2_REPORT 206 |
#define MLD2_ALL_MCR_INIT { { { 0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,0x16 } } } |
/* |
* 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]; |
}; |
#ifdef __KERNEL__ |
#include <linux/netdevice.h> |
#include <linux/skbuff.h> |
extern void icmpv6_send(struct sk_buff *skb, |
int type, int code, |
__u32 info, |
struct net_device *dev); |
extern int icmpv6_init(struct net_proto_family *ops); |
extern int icmpv6_err_convert(int type, int code, |
int *err); |
extern void icmpv6_cleanup(void); |
extern void icmpv6_param_prob(struct sk_buff *skb, |
int code, int pos); |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/loop.h |
---|
0,0 → 1,155 |
#ifndef _LINUX_LOOP_H |
#define _LINUX_LOOP_H |
/* |
* 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. |
*/ |
#define LO_NAME_SIZE 64 |
#define LO_KEY_SIZE 32 |
#ifdef __KERNEL__ |
#include <linux/bio.h> |
#include <linux/blkdev.h> |
#include <linux/spinlock.h> |
/* Possible states of device */ |
enum { |
Lo_unbound, |
Lo_bound, |
Lo_rundown, |
}; |
struct loop_func_table; |
struct loop_device { |
int lo_number; |
int lo_refcnt; |
loff_t lo_offset; |
loff_t lo_sizelimit; |
int lo_flags; |
int (*transfer)(struct loop_device *, int cmd, |
char *raw_buf, char *loop_buf, int size, |
sector_t real_block); |
char lo_file_name[LO_NAME_SIZE]; |
char lo_crypt_name[LO_NAME_SIZE]; |
char lo_encrypt_key[LO_KEY_SIZE]; |
int lo_encrypt_key_size; |
struct loop_func_table *lo_encryption; |
__u32 lo_init[2]; |
uid_t lo_key_owner; /* Who set the key */ |
int (*ioctl)(struct loop_device *, int cmd, |
unsigned long arg); |
struct file * lo_backing_file; |
struct block_device *lo_device; |
unsigned lo_blocksize; |
void *key_data; |
int old_gfp_mask; |
spinlock_t lo_lock; |
struct bio *lo_bio; |
struct bio *lo_biotail; |
int lo_state; |
struct semaphore lo_sem; |
struct semaphore lo_ctl_mutex; |
struct semaphore lo_bh_mutex; |
atomic_t lo_pending; |
request_queue_t *lo_queue; |
}; |
#endif /* __KERNEL__ */ |
/* |
* Loop flags |
*/ |
#define LO_FLAGS_DO_BMAP 1 |
#define LO_FLAGS_READ_ONLY 2 |
#include <asm/posix_types.h> /* for __kernel_old_dev_t */ |
#include <asm/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 |
#ifdef __KERNEL__ |
/* Support for loadable transfer modules */ |
struct loop_func_table { |
int number; /* filter type */ |
int (*transfer)(struct loop_device *lo, int cmd, char *raw_buf, |
char *loop_buf, int size, sector_t real_block); |
int (*init)(struct loop_device *, const struct loop_info64 *); |
/* release is called from loop_unregister_transfer or clr_fd */ |
int (*release)(struct loop_device *); |
int (*ioctl)(struct loop_device *, int cmd, unsigned long arg); |
struct module *owner; |
}; |
int loop_register_transfer(struct loop_func_table *funcs); |
int loop_unregister_transfer(int number); |
#endif |
/* |
* 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 |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/ufs_fs_sb.h |
---|
0,0 → 1,38 |
/* |
* linux/include/linux/ufs_fs_sb.h |
* |
* Copyright (C) 1996 |
* Adrian Rodriguez (adrian@franklins-tower.rutgers.edu) |
* Laboratory for Computer Science Research Computing Facility |
* Rutgers, The State University of New Jersey |
* |
* $Id: ufs_fs_sb.h,v 1.1 2004-01-28 15:26:53 giacomo Exp $ |
* |
* Write support by Daniel Pirkl <daniel.pirkl@email.cz> |
*/ |
#ifndef __LINUX_UFS_FS_SB_H |
#define __LINUX_UFS_FS_SB_H |
#define UFS_MAX_GROUP_LOADED 8 |
#define UFS_CGNO_EMPTY ((unsigned)-1) |
struct ufs_sb_private_info; |
struct ufs_cg_private_info; |
struct ufs_csum; |
#define UFS_MAXCSBUFS 31 |
struct ufs_sb_info { |
struct ufs_sb_private_info * s_uspi; |
struct ufs_csum * s_csp[UFS_MAXCSBUFS]; |
unsigned s_bytesex; |
unsigned s_flags; |
struct buffer_head ** s_ucg; |
struct ufs_cg_private_info * s_ucpi[UFS_MAX_GROUP_LOADED]; |
unsigned s_cgno[UFS_MAX_GROUP_LOADED]; |
unsigned short s_cg_loaded; |
unsigned s_mount_opt; |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/pci_ids.h |
---|
0,0 → 1,2150 |
/* |
* PCI Class, Vendor and Device IDs |
* |
* Please keep sorted. |
*/ |
/* Device classes and subclasses */ |
#define PCI_CLASS_NOT_DEFINED 0x0000 |
#define PCI_CLASS_NOT_DEFINED_VGA 0x0001 |
#define PCI_BASE_CLASS_STORAGE 0x01 |
#define PCI_CLASS_STORAGE_SCSI 0x0100 |
#define PCI_CLASS_STORAGE_IDE 0x0101 |
#define PCI_CLASS_STORAGE_FLOPPY 0x0102 |
#define PCI_CLASS_STORAGE_IPI 0x0103 |
#define PCI_CLASS_STORAGE_RAID 0x0104 |
#define PCI_CLASS_STORAGE_OTHER 0x0180 |
#define PCI_BASE_CLASS_NETWORK 0x02 |
#define PCI_CLASS_NETWORK_ETHERNET 0x0200 |
#define PCI_CLASS_NETWORK_TOKEN_RING 0x0201 |
#define PCI_CLASS_NETWORK_FDDI 0x0202 |
#define PCI_CLASS_NETWORK_ATM 0x0203 |
#define PCI_CLASS_NETWORK_OTHER 0x0280 |
#define PCI_BASE_CLASS_DISPLAY 0x03 |
#define PCI_CLASS_DISPLAY_VGA 0x0300 |
#define PCI_CLASS_DISPLAY_XGA 0x0301 |
#define PCI_CLASS_DISPLAY_3D 0x0302 |
#define PCI_CLASS_DISPLAY_OTHER 0x0380 |
#define PCI_BASE_CLASS_MULTIMEDIA 0x04 |
#define PCI_CLASS_MULTIMEDIA_VIDEO 0x0400 |
#define PCI_CLASS_MULTIMEDIA_AUDIO 0x0401 |
#define PCI_CLASS_MULTIMEDIA_PHONE 0x0402 |
#define PCI_CLASS_MULTIMEDIA_OTHER 0x0480 |
#define PCI_BASE_CLASS_MEMORY 0x05 |
#define PCI_CLASS_MEMORY_RAM 0x0500 |
#define PCI_CLASS_MEMORY_FLASH 0x0501 |
#define PCI_CLASS_MEMORY_OTHER 0x0580 |
#define PCI_BASE_CLASS_BRIDGE 0x06 |
#define PCI_CLASS_BRIDGE_HOST 0x0600 |
#define PCI_CLASS_BRIDGE_ISA 0x0601 |
#define PCI_CLASS_BRIDGE_EISA 0x0602 |
#define PCI_CLASS_BRIDGE_MC 0x0603 |
#define PCI_CLASS_BRIDGE_PCI 0x0604 |
#define PCI_CLASS_BRIDGE_PCMCIA 0x0605 |
#define PCI_CLASS_BRIDGE_NUBUS 0x0606 |
#define PCI_CLASS_BRIDGE_CARDBUS 0x0607 |
#define PCI_CLASS_BRIDGE_RACEWAY 0x0608 |
#define PCI_CLASS_BRIDGE_OTHER 0x0680 |
#define PCI_BASE_CLASS_COMMUNICATION 0x07 |
#define PCI_CLASS_COMMUNICATION_SERIAL 0x0700 |
#define PCI_CLASS_COMMUNICATION_PARALLEL 0x0701 |
#define PCI_CLASS_COMMUNICATION_MULTISERIAL 0x0702 |
#define PCI_CLASS_COMMUNICATION_MODEM 0x0703 |
#define PCI_CLASS_COMMUNICATION_OTHER 0x0780 |
#define PCI_BASE_CLASS_SYSTEM 0x08 |
#define PCI_CLASS_SYSTEM_PIC 0x0800 |
#define PCI_CLASS_SYSTEM_DMA 0x0801 |
#define PCI_CLASS_SYSTEM_TIMER 0x0802 |
#define PCI_CLASS_SYSTEM_RTC 0x0803 |
#define PCI_CLASS_SYSTEM_PCI_HOTPLUG 0x0804 |
#define PCI_CLASS_SYSTEM_OTHER 0x0880 |
#define PCI_BASE_CLASS_INPUT 0x09 |
#define PCI_CLASS_INPUT_KEYBOARD 0x0900 |
#define PCI_CLASS_INPUT_PEN 0x0901 |
#define PCI_CLASS_INPUT_MOUSE 0x0902 |
#define PCI_CLASS_INPUT_SCANNER 0x0903 |
#define PCI_CLASS_INPUT_GAMEPORT 0x0904 |
#define PCI_CLASS_INPUT_OTHER 0x0980 |
#define PCI_BASE_CLASS_DOCKING 0x0a |
#define PCI_CLASS_DOCKING_GENERIC 0x0a00 |
#define PCI_CLASS_DOCKING_OTHER 0x0a80 |
#define PCI_BASE_CLASS_PROCESSOR 0x0b |
#define PCI_CLASS_PROCESSOR_386 0x0b00 |
#define PCI_CLASS_PROCESSOR_486 0x0b01 |
#define PCI_CLASS_PROCESSOR_PENTIUM 0x0b02 |
#define PCI_CLASS_PROCESSOR_ALPHA 0x0b10 |
#define PCI_CLASS_PROCESSOR_POWERPC 0x0b20 |
#define PCI_CLASS_PROCESSOR_MIPS 0x0b30 |
#define PCI_CLASS_PROCESSOR_CO 0x0b40 |
#define PCI_BASE_CLASS_SERIAL 0x0c |
#define PCI_CLASS_SERIAL_FIREWIRE 0x0c00 |
#define PCI_CLASS_SERIAL_ACCESS 0x0c01 |
#define PCI_CLASS_SERIAL_SSA 0x0c02 |
#define PCI_CLASS_SERIAL_USB 0x0c03 |
#define PCI_CLASS_SERIAL_FIBER 0x0c04 |
#define PCI_CLASS_SERIAL_SMBUS 0x0c05 |
#define PCI_BASE_CLASS_INTELLIGENT 0x0e |
#define PCI_CLASS_INTELLIGENT_I2O 0x0e00 |
#define PCI_BASE_CLASS_SATELLITE 0x0f |
#define PCI_CLASS_SATELLITE_TV 0x0f00 |
#define PCI_CLASS_SATELLITE_AUDIO 0x0f01 |
#define PCI_CLASS_SATELLITE_VOICE 0x0f03 |
#define PCI_CLASS_SATELLITE_DATA 0x0f04 |
#define PCI_BASE_CLASS_CRYPT 0x10 |
#define PCI_CLASS_CRYPT_NETWORK 0x1000 |
#define PCI_CLASS_CRYPT_ENTERTAINMENT 0x1001 |
#define PCI_CLASS_CRYPT_OTHER 0x1080 |
#define PCI_BASE_CLASS_SIGNAL_PROCESSING 0x11 |
#define PCI_CLASS_SP_DPIO 0x1100 |
#define PCI_CLASS_SP_OTHER 0x1180 |
#define PCI_CLASS_OTHERS 0xff |
/* Vendors and devices. Sort key: vendor first, device next. */ |
#define PCI_VENDOR_ID_DYNALINK 0x0675 |
#define PCI_DEVICE_ID_DYNALINK_IS64PH 0x1702 |
#define PCI_VENDOR_ID_BERKOM 0x0871 |
#define PCI_DEVICE_ID_BERKOM_A1T 0xffa1 |
#define PCI_DEVICE_ID_BERKOM_T_CONCEPT 0xffa2 |
#define PCI_DEVICE_ID_BERKOM_A4T 0xffa4 |
#define PCI_DEVICE_ID_BERKOM_SCITEL_QUADRO 0xffa8 |
#define PCI_VENDOR_ID_COMPAQ 0x0e11 |
#define PCI_DEVICE_ID_COMPAQ_TOKENRING 0x0508 |
#define PCI_DEVICE_ID_COMPAQ_1280 0x3033 |
#define PCI_DEVICE_ID_COMPAQ_TRIFLEX 0x4000 |
#define PCI_DEVICE_ID_COMPAQ_6010 0x6010 |
#define PCI_DEVICE_ID_COMPAQ_TACHYON 0xa0fc |
#define PCI_DEVICE_ID_COMPAQ_SMART2P 0xae10 |
#define PCI_DEVICE_ID_COMPAQ_NETEL100 0xae32 |
#define PCI_DEVICE_ID_COMPAQ_NETEL10 0xae34 |
#define PCI_DEVICE_ID_COMPAQ_TRIFLEX_IDE 0xae33 |
#define PCI_DEVICE_ID_COMPAQ_NETFLEX3I 0xae35 |
#define PCI_DEVICE_ID_COMPAQ_NETEL100D 0xae40 |
#define PCI_DEVICE_ID_COMPAQ_NETEL100PI 0xae43 |
#define PCI_DEVICE_ID_COMPAQ_NETEL100I 0xb011 |
#define PCI_DEVICE_ID_COMPAQ_CISS 0xb060 |
#define PCI_DEVICE_ID_COMPAQ_CISSB 0xb178 |
#define PCI_DEVICE_ID_COMPAQ_CISSC 0x46 |
#define PCI_DEVICE_ID_COMPAQ_THUNDER 0xf130 |
#define PCI_DEVICE_ID_COMPAQ_NETFLEX3B 0xf150 |
#define PCI_VENDOR_ID_NCR 0x1000 |
#define PCI_VENDOR_ID_LSI_LOGIC 0x1000 |
#define PCI_DEVICE_ID_NCR_53C810 0x0001 |
#define PCI_DEVICE_ID_NCR_53C820 0x0002 |
#define PCI_DEVICE_ID_NCR_53C825 0x0003 |
#define PCI_DEVICE_ID_NCR_53C815 0x0004 |
#define PCI_DEVICE_ID_LSI_53C810AP 0x0005 |
#define PCI_DEVICE_ID_NCR_53C860 0x0006 |
#define PCI_DEVICE_ID_LSI_53C1510 0x000a |
#define PCI_DEVICE_ID_NCR_53C896 0x000b |
#define PCI_DEVICE_ID_NCR_53C895 0x000c |
#define PCI_DEVICE_ID_NCR_53C885 0x000d |
#define PCI_DEVICE_ID_NCR_53C875 0x000f |
#define PCI_DEVICE_ID_NCR_53C1510 0x0010 |
#define PCI_DEVICE_ID_LSI_53C895A 0x0012 |
#define PCI_DEVICE_ID_LSI_53C875A 0x0013 |
#define PCI_DEVICE_ID_LSI_53C1010_33 0x0020 |
#define PCI_DEVICE_ID_LSI_53C1010_66 0x0021 |
#define PCI_DEVICE_ID_LSI_53C1030 0x0030 |
#define PCI_DEVICE_ID_LSI_1030_53C1035 0x0032 |
#define PCI_DEVICE_ID_LSI_53C1035 0x0040 |
#define PCI_DEVICE_ID_NCR_53C875J 0x008f |
#define PCI_DEVICE_ID_LSI_FC909 0x0621 |
#define PCI_DEVICE_ID_LSI_FC929 0x0622 |
#define PCI_DEVICE_ID_LSI_FC929_LAN 0x0623 |
#define PCI_DEVICE_ID_LSI_FC919 0x0624 |
#define PCI_DEVICE_ID_LSI_FC919_LAN 0x0625 |
#define PCI_DEVICE_ID_LSI_FC929X 0x0626 |
#define PCI_DEVICE_ID_LSI_FC919X 0x0628 |
#define PCI_DEVICE_ID_NCR_YELLOWFIN 0x0701 |
#define PCI_DEVICE_ID_LSI_61C102 0x0901 |
#define PCI_DEVICE_ID_LSI_63C815 0x1000 |
#define PCI_VENDOR_ID_ATI 0x1002 |
/* Mach64 */ |
#define PCI_DEVICE_ID_ATI_68800 0x4158 |
#define PCI_DEVICE_ID_ATI_215CT222 0x4354 |
#define PCI_DEVICE_ID_ATI_210888CX 0x4358 |
#define PCI_DEVICE_ID_ATI_215ET222 0x4554 |
/* Mach64 / Rage */ |
#define PCI_DEVICE_ID_ATI_215GB 0x4742 |
#define PCI_DEVICE_ID_ATI_215GD 0x4744 |
#define PCI_DEVICE_ID_ATI_215GI 0x4749 |
#define PCI_DEVICE_ID_ATI_215GP 0x4750 |
#define PCI_DEVICE_ID_ATI_215GQ 0x4751 |
#define PCI_DEVICE_ID_ATI_215XL 0x4752 |
#define PCI_DEVICE_ID_ATI_215GT 0x4754 |
#define PCI_DEVICE_ID_ATI_215GTB 0x4755 |
#define PCI_DEVICE_ID_ATI_215_IV 0x4756 |
#define PCI_DEVICE_ID_ATI_215_IW 0x4757 |
#define PCI_DEVICE_ID_ATI_215_IZ 0x475A |
#define PCI_DEVICE_ID_ATI_210888GX 0x4758 |
#define PCI_DEVICE_ID_ATI_215_LB 0x4c42 |
#define PCI_DEVICE_ID_ATI_215_LD 0x4c44 |
#define PCI_DEVICE_ID_ATI_215_LG 0x4c47 |
#define PCI_DEVICE_ID_ATI_215_LI 0x4c49 |
#define PCI_DEVICE_ID_ATI_215_LM 0x4c4D |
#define PCI_DEVICE_ID_ATI_215_LN 0x4c4E |
#define PCI_DEVICE_ID_ATI_215_LR 0x4c52 |
#define PCI_DEVICE_ID_ATI_215_LS 0x4c53 |
#define PCI_DEVICE_ID_ATI_264_LT 0x4c54 |
/* Mach64 VT */ |
#define PCI_DEVICE_ID_ATI_264VT 0x5654 |
#define PCI_DEVICE_ID_ATI_264VU 0x5655 |
#define PCI_DEVICE_ID_ATI_264VV 0x5656 |
/* Rage128 GL */ |
#define PCI_DEVICE_ID_ATI_RAGE128_RE 0x5245 |
#define PCI_DEVICE_ID_ATI_RAGE128_RF 0x5246 |
#define PCI_DEVICE_ID_ATI_RAGE128_RG 0x534b |
#define PCI_DEVICE_ID_ATI_RAGE128_RH 0x534c |
#define PCI_DEVICE_ID_ATI_RAGE128_RI 0x534d |
/* Rage128 VR */ |
#define PCI_DEVICE_ID_ATI_RAGE128_RK 0x524b |
#define PCI_DEVICE_ID_ATI_RAGE128_RL 0x524c |
#define PCI_DEVICE_ID_ATI_RAGE128_RM 0x5345 |
#define PCI_DEVICE_ID_ATI_RAGE128_RN 0x5346 |
#define PCI_DEVICE_ID_ATI_RAGE128_RO 0x5347 |
/* Rage128 M3 */ |
#define PCI_DEVICE_ID_ATI_RAGE128_LE 0x4c45 |
#define PCI_DEVICE_ID_ATI_RAGE128_LF 0x4c46 |
/* Rage128 Pro Ultra */ |
#define PCI_DEVICE_ID_ATI_RAGE128_U1 0x5446 |
#define PCI_DEVICE_ID_ATI_RAGE128_U2 0x544C |
#define PCI_DEVICE_ID_ATI_RAGE128_U3 0x5452 |
/* Rage128 Pro GL */ |
#define PCI_DEVICE_ID_ATI_Rage128_PA 0x5041 |
#define PCI_DEVICE_ID_ATI_Rage128_PB 0x5042 |
#define PCI_DEVICE_ID_ATI_Rage128_PC 0x5043 |
#define PCI_DEVICE_ID_ATI_Rage128_PD 0x5044 |
#define PCI_DEVICE_ID_ATI_Rage128_PE 0x5045 |
#define PCI_DEVICE_ID_ATI_RAGE128_PF 0x5046 |
/* Rage128 Pro VR */ |
#define PCI_DEVICE_ID_ATI_RAGE128_PG 0x5047 |
#define PCI_DEVICE_ID_ATI_RAGE128_PH 0x5048 |
#define PCI_DEVICE_ID_ATI_RAGE128_PI 0x5049 |
#define PCI_DEVICE_ID_ATI_RAGE128_PJ 0x504A |
#define PCI_DEVICE_ID_ATI_RAGE128_PK 0x504B |
#define PCI_DEVICE_ID_ATI_RAGE128_PL 0x504C |
#define PCI_DEVICE_ID_ATI_RAGE128_PM 0x504D |
#define PCI_DEVICE_ID_ATI_RAGE128_PN 0x504E |
#define PCI_DEVICE_ID_ATI_RAGE128_PO 0x504F |
#define PCI_DEVICE_ID_ATI_RAGE128_PP 0x5050 |
#define PCI_DEVICE_ID_ATI_RAGE128_PQ 0x5051 |
#define PCI_DEVICE_ID_ATI_RAGE128_PR 0x5052 |
#define PCI_DEVICE_ID_ATI_RAGE128_TR 0x5452 |
#define PCI_DEVICE_ID_ATI_RAGE128_PS 0x5053 |
#define PCI_DEVICE_ID_ATI_RAGE128_PT 0x5054 |
#define PCI_DEVICE_ID_ATI_RAGE128_PU 0x5055 |
#define PCI_DEVICE_ID_ATI_RAGE128_PV 0x5056 |
#define PCI_DEVICE_ID_ATI_RAGE128_PW 0x5057 |
#define PCI_DEVICE_ID_ATI_RAGE128_PX 0x5058 |
/* Rage128 M4 */ |
#define PCI_DEVICE_ID_ATI_RADEON_LE 0x4d45 |
#define PCI_DEVICE_ID_ATI_RADEON_LF 0x4d46 |
/* Radeon R100 */ |
#define PCI_DEVICE_ID_ATI_RADEON_QD 0x5144 |
#define PCI_DEVICE_ID_ATI_RADEON_QE 0x5145 |
#define PCI_DEVICE_ID_ATI_RADEON_QF 0x5146 |
#define PCI_DEVICE_ID_ATI_RADEON_QG 0x5147 |
/* Radeon RV100 (VE) */ |
#define PCI_DEVICE_ID_ATI_RADEON_QY 0x5159 |
#define PCI_DEVICE_ID_ATI_RADEON_QZ 0x515a |
/* Radeon R200 (8500) */ |
#define PCI_DEVICE_ID_ATI_RADEON_QL 0x514c |
#define PCI_DEVICE_ID_ATI_RADEON_QN 0x514e |
#define PCI_DEVICE_ID_ATI_RADEON_QO 0x514f |
#define PCI_DEVICE_ID_ATI_RADEON_Ql 0x516c |
#define PCI_DEVICE_ID_ATI_RADEON_BB 0x4242 |
/* Radeon R200 (9100) */ |
#define PCI_DEVICE_ID_ATI_RADEON_QM 0x514d |
/* Radeon RV200 (7500) */ |
#define PCI_DEVICE_ID_ATI_RADEON_QW 0x5157 |
#define PCI_DEVICE_ID_ATI_RADEON_QX 0x5158 |
/* Radeon NV-100 */ |
#define PCI_DEVICE_ID_ATI_RADEON_N1 0x5159 |
#define PCI_DEVICE_ID_ATI_RADEON_N2 0x515a |
/* Radeon RV250 (9000) */ |
#define PCI_DEVICE_ID_ATI_RADEON_Id 0x4964 |
#define PCI_DEVICE_ID_ATI_RADEON_Ie 0x4965 |
#define PCI_DEVICE_ID_ATI_RADEON_If 0x4966 |
#define PCI_DEVICE_ID_ATI_RADEON_Ig 0x4967 |
/* Radeon RV280 (9200) */ |
#define PCI_DEVICE_ID_ATI_RADEON_Y_ 0x5960 |
/* Radeon R300 (9500) */ |
#define PCI_DEVICE_ID_ATI_RADEON_AD 0x4144 |
/* Radeon R300 (9700) */ |
#define PCI_DEVICE_ID_ATI_RADEON_ND 0x4e44 |
#define PCI_DEVICE_ID_ATI_RADEON_NE 0x4e45 |
#define PCI_DEVICE_ID_ATI_RADEON_NF 0x4e46 |
#define PCI_DEVICE_ID_ATI_RADEON_NG 0x4e47 |
#define PCI_DEVICE_ID_ATI_RADEON_AE 0x4145 |
#define PCI_DEVICE_ID_ATI_RADEON_AF 0x4146 |
/* Radeon R350 (9800) */ |
#define PCI_DEVICE_ID_ATI_RADEON_NH 0x4e48 |
#define PCI_DEVICE_ID_ATI_RADEON_NI 0x4e49 |
/* Radeon RV350 (9600) */ |
#define PCI_DEVICE_ID_ATI_RADEON_AP 0x4150 |
#define PCI_DEVICE_ID_ATI_RADEON_AR 0x4152 |
/* Radeon M6 */ |
#define PCI_DEVICE_ID_ATI_RADEON_LY 0x4c59 |
#define PCI_DEVICE_ID_ATI_RADEON_LZ 0x4c5a |
/* Radeon M7 */ |
#define PCI_DEVICE_ID_ATI_RADEON_LW 0x4c57 |
#define PCI_DEVICE_ID_ATI_RADEON_LX 0x4c58 |
/* Radeon M9 */ |
#define PCI_DEVICE_ID_ATI_RADEON_Ld 0x4c64 |
#define PCI_DEVICE_ID_ATI_RADEON_Le 0x4c65 |
#define PCI_DEVICE_ID_ATI_RADEON_Lf 0x4c66 |
#define PCI_DEVICE_ID_ATI_RADEON_Lg 0x4c67 |
/* Radeon */ |
#define PCI_DEVICE_ID_ATI_RADEON_RA 0x5144 |
#define PCI_DEVICE_ID_ATI_RADEON_RB 0x5145 |
#define PCI_DEVICE_ID_ATI_RADEON_RC 0x5146 |
#define PCI_DEVICE_ID_ATI_RADEON_RD 0x5147 |
/* RadeonIGP */ |
#define PCI_DEVICE_ID_ATI_RS100 0xcab0 |
#define PCI_DEVICE_ID_ATI_RS200 0xcab2 |
#define PCI_DEVICE_ID_ATI_RS250 0xcab3 |
#define PCI_DEVICE_ID_ATI_RS300_100 0x5830 |
#define PCI_DEVICE_ID_ATI_RS300_133 0x5831 |
#define PCI_DEVICE_ID_ATI_RS300_166 0x5832 |
#define PCI_DEVICE_ID_ATI_RS300_200 0x5833 |
#define PCI_VENDOR_ID_VLSI 0x1004 |
#define PCI_DEVICE_ID_VLSI_82C592 0x0005 |
#define PCI_DEVICE_ID_VLSI_82C593 0x0006 |
#define PCI_DEVICE_ID_VLSI_82C594 0x0007 |
#define PCI_DEVICE_ID_VLSI_82C597 0x0009 |
#define PCI_DEVICE_ID_VLSI_82C541 0x000c |
#define PCI_DEVICE_ID_VLSI_82C543 0x000d |
#define PCI_DEVICE_ID_VLSI_82C532 0x0101 |
#define PCI_DEVICE_ID_VLSI_82C534 0x0102 |
#define PCI_DEVICE_ID_VLSI_82C535 0x0104 |
#define PCI_DEVICE_ID_VLSI_82C147 0x0105 |
#define PCI_DEVICE_ID_VLSI_VAS96011 0x0702 |
#define PCI_VENDOR_ID_ADL 0x1005 |
#define PCI_DEVICE_ID_ADL_2301 0x2301 |
#define PCI_VENDOR_ID_NS 0x100b |
#define PCI_DEVICE_ID_NS_87415 0x0002 |
#define PCI_DEVICE_ID_NS_87560_LIO 0x000e |
#define PCI_DEVICE_ID_NS_87560_USB 0x0012 |
#define PCI_DEVICE_ID_NS_83815 0x0020 |
#define PCI_DEVICE_ID_NS_83820 0x0022 |
#define PCI_DEVICE_ID_NS_SCx200_BRIDGE 0x0500 |
#define PCI_DEVICE_ID_NS_SCx200_SMI 0x0501 |
#define PCI_DEVICE_ID_NS_SCx200_IDE 0x0502 |
#define PCI_DEVICE_ID_NS_SCx200_AUDIO 0x0503 |
#define PCI_DEVICE_ID_NS_SCx200_VIDEO 0x0504 |
#define PCI_DEVICE_ID_NS_SCx200_XBUS 0x0505 |
#define PCI_DEVICE_ID_NS_87410 0xd001 |
#define PCI_VENDOR_ID_TSENG 0x100c |
#define PCI_DEVICE_ID_TSENG_W32P_2 0x3202 |
#define PCI_DEVICE_ID_TSENG_W32P_b 0x3205 |
#define PCI_DEVICE_ID_TSENG_W32P_c 0x3206 |
#define PCI_DEVICE_ID_TSENG_W32P_d 0x3207 |
#define PCI_DEVICE_ID_TSENG_ET6000 0x3208 |
#define PCI_VENDOR_ID_WEITEK 0x100e |
#define PCI_DEVICE_ID_WEITEK_P9000 0x9001 |
#define PCI_DEVICE_ID_WEITEK_P9100 0x9100 |
#define PCI_VENDOR_ID_DEC 0x1011 |
#define PCI_DEVICE_ID_DEC_BRD 0x0001 |
#define PCI_DEVICE_ID_DEC_TULIP 0x0002 |
#define PCI_DEVICE_ID_DEC_TGA 0x0004 |
#define PCI_DEVICE_ID_DEC_TULIP_FAST 0x0009 |
#define PCI_DEVICE_ID_DEC_TGA2 0x000D |
#define PCI_DEVICE_ID_DEC_FDDI 0x000F |
#define PCI_DEVICE_ID_DEC_TULIP_PLUS 0x0014 |
#define PCI_DEVICE_ID_DEC_21142 0x0019 |
#define PCI_DEVICE_ID_DEC_21052 0x0021 |
#define PCI_DEVICE_ID_DEC_21150 0x0022 |
#define PCI_DEVICE_ID_DEC_21152 0x0024 |
#define PCI_DEVICE_ID_DEC_21153 0x0025 |
#define PCI_DEVICE_ID_DEC_21154 0x0026 |
#define PCI_DEVICE_ID_DEC_21285 0x1065 |
#define PCI_DEVICE_ID_COMPAQ_42XX 0x0046 |
#define PCI_VENDOR_ID_CIRRUS 0x1013 |
#define PCI_DEVICE_ID_CIRRUS_7548 0x0038 |
#define PCI_DEVICE_ID_CIRRUS_5430 0x00a0 |
#define PCI_DEVICE_ID_CIRRUS_5434_4 0x00a4 |
#define PCI_DEVICE_ID_CIRRUS_5434_8 0x00a8 |
#define PCI_DEVICE_ID_CIRRUS_5436 0x00ac |
#define PCI_DEVICE_ID_CIRRUS_5446 0x00b8 |
#define PCI_DEVICE_ID_CIRRUS_5480 0x00bc |
#define PCI_DEVICE_ID_CIRRUS_5462 0x00d0 |
#define PCI_DEVICE_ID_CIRRUS_5464 0x00d4 |
#define PCI_DEVICE_ID_CIRRUS_5465 0x00d6 |
#define PCI_DEVICE_ID_CIRRUS_6729 0x1100 |
#define PCI_DEVICE_ID_CIRRUS_6832 0x1110 |
#define PCI_DEVICE_ID_CIRRUS_7542 0x1200 |
#define PCI_DEVICE_ID_CIRRUS_7543 0x1202 |
#define PCI_DEVICE_ID_CIRRUS_7541 0x1204 |
#define PCI_VENDOR_ID_IBM 0x1014 |
#define PCI_DEVICE_ID_IBM_FIRE_CORAL 0x000a |
#define PCI_DEVICE_ID_IBM_TR 0x0018 |
#define PCI_DEVICE_ID_IBM_82G2675 0x001d |
#define PCI_DEVICE_ID_IBM_MCA 0x0020 |
#define PCI_DEVICE_ID_IBM_82351 0x0022 |
#define PCI_DEVICE_ID_IBM_PYTHON 0x002d |
#define PCI_DEVICE_ID_IBM_SERVERAID 0x002e |
#define PCI_DEVICE_ID_IBM_TR_WAKE 0x003e |
#define PCI_DEVICE_ID_IBM_MPIC 0x0046 |
#define PCI_DEVICE_ID_IBM_3780IDSP 0x007d |
#define PCI_DEVICE_ID_IBM_CHUKAR 0x0096 |
#define PCI_DEVICE_ID_IBM_CPC710_PCI64 0x00fc |
#define PCI_DEVICE_ID_IBM_CPC710_PCI32 0x0105 |
#define PCI_DEVICE_ID_IBM_405GP 0x0156 |
#define PCI_DEVICE_ID_IBM_SERVERAIDI960 0x01bd |
#define PCI_DEVICE_ID_IBM_MPIC_2 0xffff |
#define PCI_VENDOR_ID_COMPEX2 0x101a // pci.ids says "AT&T GIS (NCR)" |
#define PCI_DEVICE_ID_COMPEX2_100VG 0x0005 |
#define PCI_VENDOR_ID_WD 0x101c |
#define PCI_DEVICE_ID_WD_7197 0x3296 |
#define PCI_DEVICE_ID_WD_90C 0xc24a |
#define PCI_VENDOR_ID_AMI 0x101e |
#define PCI_DEVICE_ID_AMI_MEGARAID3 0x1960 |
#define PCI_DEVICE_ID_AMI_MEGARAID 0x9010 |
#define PCI_DEVICE_ID_AMI_MEGARAID2 0x9060 |
#define PCI_VENDOR_ID_AMD 0x1022 |
#define PCI_DEVICE_ID_AMD_LANCE 0x2000 |
#define PCI_DEVICE_ID_AMD_LANCE_HOME 0x2001 |
#define PCI_DEVICE_ID_AMD_SCSI 0x2020 |
#define PCI_DEVICE_ID_AMD_SERENADE 0x36c0 |
#define PCI_DEVICE_ID_AMD_FE_GATE_7006 0x7006 |
#define PCI_DEVICE_ID_AMD_FE_GATE_7007 0x7007 |
#define PCI_DEVICE_ID_AMD_FE_GATE_700C 0x700C |
#define PCI_DEVICE_ID_AMD_FE_GATE_700D 0x700D |
#define PCI_DEVICE_ID_AMD_FE_GATE_700E 0x700E |
#define PCI_DEVICE_ID_AMD_FE_GATE_700F 0x700F |
#define PCI_DEVICE_ID_AMD_COBRA_7400 0x7400 |
#define PCI_DEVICE_ID_AMD_COBRA_7401 0x7401 |
#define PCI_DEVICE_ID_AMD_COBRA_7403 0x7403 |
#define PCI_DEVICE_ID_AMD_COBRA_7404 0x7404 |
#define PCI_DEVICE_ID_AMD_VIPER_7408 0x7408 |
#define PCI_DEVICE_ID_AMD_VIPER_7409 0x7409 |
#define PCI_DEVICE_ID_AMD_VIPER_740B 0x740B |
#define PCI_DEVICE_ID_AMD_VIPER_740C 0x740C |
#define PCI_DEVICE_ID_AMD_VIPER_7410 0x7410 |
#define PCI_DEVICE_ID_AMD_VIPER_7411 0x7411 |
#define PCI_DEVICE_ID_AMD_VIPER_7413 0x7413 |
#define PCI_DEVICE_ID_AMD_VIPER_7414 0x7414 |
#define PCI_DEVICE_ID_AMD_OPUS_7440 0x7440 |
# define PCI_DEVICE_ID_AMD_VIPER_7440 PCI_DEVICE_ID_AMD_OPUS_7440 |
#define PCI_DEVICE_ID_AMD_OPUS_7441 0x7441 |
# define PCI_DEVICE_ID_AMD_VIPER_7441 PCI_DEVICE_ID_AMD_OPUS_7441 |
#define PCI_DEVICE_ID_AMD_OPUS_7443 0x7443 |
# define PCI_DEVICE_ID_AMD_VIPER_7443 PCI_DEVICE_ID_AMD_OPUS_7443 |
#define PCI_DEVICE_ID_AMD_OPUS_7448 0x7448 |
# define PCI_DEVICE_ID_AMD_VIPER_7448 PCI_DEVICE_ID_AMD_OPUS_7448 |
#define PCI_DEVICE_ID_AMD_OPUS_7449 0x7449 |
# define PCI_DEVICE_ID_AMD_VIPER_7449 PCI_DEVICE_ID_AMD_OPUS_7449 |
#define PCI_DEVICE_ID_AMD_8111_LAN 0x7462 |
#define PCI_DEVICE_ID_AMD_8111_IDE 0x7469 |
#define PCI_DEVICE_ID_AMD_8111_AUDIO 0x746d |
#define PCI_DEVICE_ID_AMD_8151_0 0x7454 |
#define PCI_DEVICE_ID_AMD_8131_APIC 0x7450 |
#define PCI_VENDOR_ID_TRIDENT 0x1023 |
#define PCI_DEVICE_ID_TRIDENT_4DWAVE_DX 0x2000 |
#define PCI_DEVICE_ID_TRIDENT_4DWAVE_NX 0x2001 |
#define PCI_DEVICE_ID_TRIDENT_9320 0x9320 |
#define PCI_DEVICE_ID_TRIDENT_9388 0x9388 |
#define PCI_DEVICE_ID_TRIDENT_9397 0x9397 |
#define PCI_DEVICE_ID_TRIDENT_939A 0x939A |
#define PCI_DEVICE_ID_TRIDENT_9520 0x9520 |
#define PCI_DEVICE_ID_TRIDENT_9525 0x9525 |
#define PCI_DEVICE_ID_TRIDENT_9420 0x9420 |
#define PCI_DEVICE_ID_TRIDENT_9440 0x9440 |
#define PCI_DEVICE_ID_TRIDENT_9660 0x9660 |
#define PCI_DEVICE_ID_TRIDENT_9750 0x9750 |
#define PCI_DEVICE_ID_TRIDENT_9850 0x9850 |
#define PCI_DEVICE_ID_TRIDENT_9880 0x9880 |
#define PCI_DEVICE_ID_TRIDENT_8400 0x8400 |
#define PCI_DEVICE_ID_TRIDENT_8420 0x8420 |
#define PCI_DEVICE_ID_TRIDENT_8500 0x8500 |
#define PCI_VENDOR_ID_AI 0x1025 |
#define PCI_DEVICE_ID_AI_M1435 0x1435 |
#define PCI_VENDOR_ID_DELL 0x1028 |
#define PCI_VENDOR_ID_MATROX 0x102B |
#define PCI_DEVICE_ID_MATROX_MGA_2 0x0518 |
#define PCI_DEVICE_ID_MATROX_MIL 0x0519 |
#define PCI_DEVICE_ID_MATROX_MYS 0x051A |
#define PCI_DEVICE_ID_MATROX_MIL_2 0x051b |
#define PCI_DEVICE_ID_MATROX_MIL_2_AGP 0x051f |
#define PCI_DEVICE_ID_MATROX_MGA_IMP 0x0d10 |
#define PCI_DEVICE_ID_MATROX_G100_MM 0x1000 |
#define PCI_DEVICE_ID_MATROX_G100_AGP 0x1001 |
#define PCI_DEVICE_ID_MATROX_G200_PCI 0x0520 |
#define PCI_DEVICE_ID_MATROX_G200_AGP 0x0521 |
#define PCI_DEVICE_ID_MATROX_G400 0x0525 |
#define PCI_DEVICE_ID_MATROX_G550 0x2527 |
#define PCI_DEVICE_ID_MATROX_VIA 0x4536 |
#define PCI_VENDOR_ID_CT 0x102c |
#define PCI_DEVICE_ID_CT_65545 0x00d8 |
#define PCI_DEVICE_ID_CT_65548 0x00dc |
#define PCI_DEVICE_ID_CT_65550 0x00e0 |
#define PCI_DEVICE_ID_CT_65554 0x00e4 |
#define PCI_DEVICE_ID_CT_65555 0x00e5 |
#define PCI_VENDOR_ID_MIRO 0x1031 |
#define PCI_DEVICE_ID_MIRO_36050 0x5601 |
#define PCI_DEVICE_ID_MIRO_DC10PLUS 0x7efe |
#define PCI_DEVICE_ID_MIRO_DC30PLUS 0xd801 |
#define PCI_VENDOR_ID_NEC 0x1033 |
#define PCI_DEVICE_ID_NEC_CBUS_1 0x0001 /* PCI-Cbus Bridge */ |
#define PCI_DEVICE_ID_NEC_LOCAL 0x0002 /* Local Bridge */ |
#define PCI_DEVICE_ID_NEC_ATM 0x0003 /* ATM LAN Controller */ |
#define PCI_DEVICE_ID_NEC_R4000 0x0004 /* R4000 Bridge */ |
#define PCI_DEVICE_ID_NEC_486 0x0005 /* 486 Like Peripheral Bus Bridge */ |
#define PCI_DEVICE_ID_NEC_ACCEL_1 0x0006 /* Graphic Accelerator */ |
#define PCI_DEVICE_ID_NEC_UXBUS 0x0007 /* UX-Bus Bridge */ |
#define PCI_DEVICE_ID_NEC_ACCEL_2 0x0008 /* Graphic Accelerator */ |
#define PCI_DEVICE_ID_NEC_GRAPH 0x0009 /* PCI-CoreGraph Bridge */ |
#define PCI_DEVICE_ID_NEC_VL 0x0016 /* PCI-VL Bridge */ |
#define PCI_DEVICE_ID_NEC_STARALPHA2 0x002c /* STAR ALPHA2 */ |
#define PCI_DEVICE_ID_NEC_CBUS_2 0x002d /* PCI-Cbus Bridge */ |
#define PCI_DEVICE_ID_NEC_USB 0x0035 /* PCI-USB Host */ |
#define PCI_DEVICE_ID_NEC_CBUS_3 0x003b |
#define PCI_DEVICE_ID_NEC_PCX2 0x0046 /* PowerVR */ |
#define PCI_DEVICE_ID_NEC_NILE4 0x005a |
#define PCI_DEVICE_ID_NEC_VRC5476 0x009b |
#define PCI_DEVICE_ID_NEC_VRC5477_AC97 0x00a6 |
#define PCI_DEVICE_ID_NEC_PC9821CS01 0x800c /* PC-9821-CS01 */ |
#define PCI_DEVICE_ID_NEC_PC9821NRB06 0x800d /* PC-9821NR-B06 */ |
#define PCI_VENDOR_ID_FD 0x1036 |
#define PCI_DEVICE_ID_FD_36C70 0x0000 |
#define PCI_VENDOR_ID_SI 0x1039 |
#define PCI_DEVICE_ID_SI_5591_AGP 0x0001 |
#define PCI_DEVICE_ID_SI_6202 0x0002 |
#define PCI_DEVICE_ID_SI_503 0x0008 |
#define PCI_DEVICE_ID_SI_ACPI 0x0009 |
#define PCI_DEVICE_ID_SI_5597_VGA 0x0200 |
#define PCI_DEVICE_ID_SI_6205 0x0205 |
#define PCI_DEVICE_ID_SI_501 0x0406 |
#define PCI_DEVICE_ID_SI_496 0x0496 |
#define PCI_DEVICE_ID_SI_300 0x0300 |
#define PCI_DEVICE_ID_SI_315H 0x0310 |
#define PCI_DEVICE_ID_SI_315 0x0315 |
#define PCI_DEVICE_ID_SI_315PRO 0x0325 |
#define PCI_DEVICE_ID_SI_530 0x0530 |
#define PCI_DEVICE_ID_SI_540 0x0540 |
#define PCI_DEVICE_ID_SI_550 0x0550 |
#define PCI_DEVICE_ID_SI_540_VGA 0x5300 |
#define PCI_DEVICE_ID_SI_550_VGA 0x5315 |
#define PCI_DEVICE_ID_SI_601 0x0601 |
#define PCI_DEVICE_ID_SI_620 0x0620 |
#define PCI_DEVICE_ID_SI_630 0x0630 |
#define PCI_DEVICE_ID_SI_633 0x0633 |
#define PCI_DEVICE_ID_SI_635 0x0635 |
#define PCI_DEVICE_ID_SI_640 0x0640 |
#define PCI_DEVICE_ID_SI_645 0x0645 |
#define PCI_DEVICE_ID_SI_646 0x0646 |
#define PCI_DEVICE_ID_SI_648 0x0648 |
#define PCI_DEVICE_ID_SI_650 0x0650 |
#define PCI_DEVICE_ID_SI_651 0x0651 |
#define PCI_DEVICE_ID_SI_652 0x0652 |
#define PCI_DEVICE_ID_SI_655 0x0655 |
#define PCI_DEVICE_ID_SI_661 0x0661 |
#define PCI_DEVICE_ID_SI_730 0x0730 |
#define PCI_DEVICE_ID_SI_733 0x0733 |
#define PCI_DEVICE_ID_SI_630_VGA 0x6300 |
#define PCI_DEVICE_ID_SI_730_VGA 0x7300 |
#define PCI_DEVICE_ID_SI_735 0x0735 |
#define PCI_DEVICE_ID_SI_740 0x0740 |
#define PCI_DEVICE_ID_SI_741 0x0741 |
#define PCI_DEVICE_ID_SI_745 0x0745 |
#define PCI_DEVICE_ID_SI_746 0x0746 |
#define PCI_DEVICE_ID_SI_748 0x0748 |
#define PCI_DEVICE_ID_SI_750 0x0750 |
#define PCI_DEVICE_ID_SI_751 0x0751 |
#define PCI_DEVICE_ID_SI_752 0x0752 |
#define PCI_DEVICE_ID_SI_755 0x0755 |
#define PCI_DEVICE_ID_SI_760 0x0760 |
#define PCI_DEVICE_ID_SI_900 0x0900 |
#define PCI_DEVICE_ID_SI_961 0x0961 |
#define PCI_DEVICE_ID_SI_962 0x0962 |
#define PCI_DEVICE_ID_SI_963 0x0963 |
#define PCI_DEVICE_ID_SI_5107 0x5107 |
#define PCI_DEVICE_ID_SI_5300 0x5300 |
#define PCI_DEVICE_ID_SI_5511 0x5511 |
#define PCI_DEVICE_ID_SI_5513 0x5513 |
#define PCI_DEVICE_ID_SI_5518 0x5518 |
#define PCI_DEVICE_ID_SI_5571 0x5571 |
#define PCI_DEVICE_ID_SI_5581 0x5581 |
#define PCI_DEVICE_ID_SI_5582 0x5582 |
#define PCI_DEVICE_ID_SI_5591 0x5591 |
#define PCI_DEVICE_ID_SI_5596 0x5596 |
#define PCI_DEVICE_ID_SI_5597 0x5597 |
#define PCI_DEVICE_ID_SI_5598 0x5598 |
#define PCI_DEVICE_ID_SI_5600 0x5600 |
#define PCI_DEVICE_ID_SI_6300 0x6300 |
#define PCI_DEVICE_ID_SI_6306 0x6306 |
#define PCI_DEVICE_ID_SI_6326 0x6326 |
#define PCI_DEVICE_ID_SI_7001 0x7001 |
#define PCI_DEVICE_ID_SI_7016 0x7016 |
#define PCI_VENDOR_ID_HP 0x103c |
#define PCI_DEVICE_ID_HP_VISUALIZE_EG 0x1005 |
#define PCI_DEVICE_ID_HP_VISUALIZE_FX6 0x1006 |
#define PCI_DEVICE_ID_HP_VISUALIZE_FX4 0x1008 |
#define PCI_DEVICE_ID_HP_VISUALIZE_FX2 0x100a |
#define PCI_DEVICE_ID_HP_TACHYON 0x1028 |
#define PCI_DEVICE_ID_HP_TACHLITE 0x1029 |
#define PCI_DEVICE_ID_HP_J2585A 0x1030 |
#define PCI_DEVICE_ID_HP_J2585B 0x1031 |
#define PCI_DEVICE_ID_HP_DIVA 0x1048 |
#define PCI_DEVICE_ID_HP_DIVA_TOSCA1 0x1049 |
#define PCI_DEVICE_ID_HP_DIVA_TOSCA2 0x104A |
#define PCI_DEVICE_ID_HP_DIVA_MAESTRO 0x104B |
#define PCI_DEVICE_ID_HP_PCI_LBA 0x1054 |
#define PCI_DEVICE_ID_HP_REO_SBA 0x10f0 |
#define PCI_DEVICE_ID_HP_REO_IOC 0x10f1 |
#define PCI_DEVICE_ID_HP_VISUALIZE_FXE 0x108b |
#define PCI_DEVICE_ID_HP_DIVA_HALFDOME 0x1223 |
#define PCI_DEVICE_ID_HP_DIVA_KEYSTONE 0x1226 |
#define PCI_DEVICE_ID_HP_DIVA_POWERBAR 0x1227 |
#define PCI_DEVICE_ID_HP_ZX1_SBA 0x1229 |
#define PCI_DEVICE_ID_HP_ZX1_IOC 0x122a |
#define PCI_DEVICE_ID_HP_PCIX_LBA 0x122e |
#define PCI_DEVICE_ID_HP_SX1000_IOC 0x127c |
#define PCI_DEVICE_ID_HP_DIVA_EVEREST 0x1282 |
#define PCI_DEVICE_ID_HP_DIVA_AUX 0x1290 |
#define PCI_VENDOR_ID_PCTECH 0x1042 |
#define PCI_DEVICE_ID_PCTECH_RZ1000 0x1000 |
#define PCI_DEVICE_ID_PCTECH_RZ1001 0x1001 |
#define PCI_DEVICE_ID_PCTECH_SAMURAI_0 0x3000 |
#define PCI_DEVICE_ID_PCTECH_SAMURAI_1 0x3010 |
#define PCI_DEVICE_ID_PCTECH_SAMURAI_IDE 0x3020 |
#define PCI_VENDOR_ID_ASUSTEK 0x1043 |
#define PCI_DEVICE_ID_ASUSTEK_0675 0x0675 |
#define PCI_VENDOR_ID_DPT 0x1044 |
#define PCI_DEVICE_ID_DPT 0xa400 |
#define PCI_VENDOR_ID_OPTI 0x1045 |
#define PCI_DEVICE_ID_OPTI_92C178 0xc178 |
#define PCI_DEVICE_ID_OPTI_82C557 0xc557 |
#define PCI_DEVICE_ID_OPTI_82C558 0xc558 |
#define PCI_DEVICE_ID_OPTI_82C621 0xc621 |
#define PCI_DEVICE_ID_OPTI_82C700 0xc700 |
#define PCI_DEVICE_ID_OPTI_82C701 0xc701 |
#define PCI_DEVICE_ID_OPTI_82C814 0xc814 |
#define PCI_DEVICE_ID_OPTI_82C822 0xc822 |
#define PCI_DEVICE_ID_OPTI_82C861 0xc861 |
#define PCI_DEVICE_ID_OPTI_82C825 0xd568 |
#define PCI_VENDOR_ID_ELSA 0x1048 |
#define PCI_DEVICE_ID_ELSA_MICROLINK 0x1000 |
#define PCI_DEVICE_ID_ELSA_QS3000 0x3000 |
#define PCI_VENDOR_ID_SGS 0x104a |
#define PCI_DEVICE_ID_SGS_2000 0x0008 |
#define PCI_DEVICE_ID_SGS_1764 0x0009 |
#define PCI_VENDOR_ID_BUSLOGIC 0x104B |
#define PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER_NC 0x0140 |
#define PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER 0x1040 |
#define PCI_DEVICE_ID_BUSLOGIC_FLASHPOINT 0x8130 |
#define PCI_VENDOR_ID_TI 0x104c |
#define PCI_DEVICE_ID_TI_TVP4010 0x3d04 |
#define PCI_DEVICE_ID_TI_TVP4020 0x3d07 |
#define PCI_DEVICE_ID_TI_1130 0xac12 |
#define PCI_DEVICE_ID_TI_1031 0xac13 |
#define PCI_DEVICE_ID_TI_1131 0xac15 |
#define PCI_DEVICE_ID_TI_1250 0xac16 |
#define PCI_DEVICE_ID_TI_1220 0xac17 |
#define PCI_DEVICE_ID_TI_1221 0xac19 |
#define PCI_DEVICE_ID_TI_1210 0xac1a |
#define PCI_DEVICE_ID_TI_1450 0xac1b |
#define PCI_DEVICE_ID_TI_1225 0xac1c |
#define PCI_DEVICE_ID_TI_1251A 0xac1d |
#define PCI_DEVICE_ID_TI_1211 0xac1e |
#define PCI_DEVICE_ID_TI_1251B 0xac1f |
#define PCI_DEVICE_ID_TI_4410 0xac41 |
#define PCI_DEVICE_ID_TI_4451 0xac42 |
#define PCI_DEVICE_ID_TI_1410 0xac50 |
#define PCI_DEVICE_ID_TI_1420 0xac51 |
#define PCI_DEVICE_ID_TI_1520 0xac55 |
#define PCI_VENDOR_ID_SONY 0x104d |
#define PCI_DEVICE_ID_SONY_CXD3222 0x8039 |
#define PCI_VENDOR_ID_OAK 0x104e |
#define PCI_DEVICE_ID_OAK_OTI107 0x0107 |
/* Winbond have two vendor IDs! See 0x10ad as well */ |
#define PCI_VENDOR_ID_WINBOND2 0x1050 |
#define PCI_DEVICE_ID_WINBOND2_89C940 0x0940 |
#define PCI_DEVICE_ID_WINBOND2_89C940F 0x5a5a |
#define PCI_DEVICE_ID_WINBOND2_6692 0x6692 |
#define PCI_VENDOR_ID_ANIGMA 0x1051 |
#define PCI_DEVICE_ID_ANIGMA_MC145575 0x0100 |
#define PCI_VENDOR_ID_EFAR 0x1055 |
#define PCI_DEVICE_ID_EFAR_SLC90E66_1 0x9130 |
#define PCI_DEVICE_ID_EFAR_SLC90E66_0 0x9460 |
#define PCI_DEVICE_ID_EFAR_SLC90E66_2 0x9462 |
#define PCI_DEVICE_ID_EFAR_SLC90E66_3 0x9463 |
#define PCI_VENDOR_ID_MOTOROLA 0x1057 |
#define PCI_VENDOR_ID_MOTOROLA_OOPS 0x1507 |
#define PCI_DEVICE_ID_MOTOROLA_MPC105 0x0001 |
#define PCI_DEVICE_ID_MOTOROLA_MPC106 0x0002 |
#define PCI_DEVICE_ID_MOTOROLA_MPC107 0x0004 |
#define PCI_DEVICE_ID_MOTOROLA_RAVEN 0x4801 |
#define PCI_DEVICE_ID_MOTOROLA_FALCON 0x4802 |
#define PCI_DEVICE_ID_MOTOROLA_HAWK 0x4803 |
#define PCI_DEVICE_ID_MOTOROLA_CPX8216 0x4806 |
#define PCI_VENDOR_ID_PROMISE 0x105a |
#define PCI_DEVICE_ID_PROMISE_20265 0x0d30 |
#define PCI_DEVICE_ID_PROMISE_20267 0x4d30 |
#define PCI_DEVICE_ID_PROMISE_20246 0x4d33 |
#define PCI_DEVICE_ID_PROMISE_20262 0x4d38 |
#define PCI_DEVICE_ID_PROMISE_20263 0x0D38 |
#define PCI_DEVICE_ID_PROMISE_20268 0x4d68 |
#define PCI_DEVICE_ID_PROMISE_20268R 0x6268 |
#define PCI_DEVICE_ID_PROMISE_20269 0x4d69 |
#define PCI_DEVICE_ID_PROMISE_20270 0x6268 |
#define PCI_DEVICE_ID_PROMISE_20271 0x6269 |
#define PCI_DEVICE_ID_PROMISE_20275 0x1275 |
#define PCI_DEVICE_ID_PROMISE_20276 0x5275 |
#define PCI_DEVICE_ID_PROMISE_20277 0x7275 |
#define PCI_DEVICE_ID_PROMISE_5300 0x5300 |
#define PCI_VENDOR_ID_N9 0x105d |
#define PCI_DEVICE_ID_N9_I128 0x2309 |
#define PCI_DEVICE_ID_N9_I128_2 0x2339 |
#define PCI_DEVICE_ID_N9_I128_T2R 0x493d |
#define PCI_VENDOR_ID_UMC 0x1060 |
#define PCI_DEVICE_ID_UMC_UM8673F 0x0101 |
#define PCI_DEVICE_ID_UMC_UM8891A 0x0891 |
#define PCI_DEVICE_ID_UMC_UM8886BF 0x673a |
#define PCI_DEVICE_ID_UMC_UM8886A 0x886a |
#define PCI_DEVICE_ID_UMC_UM8881F 0x8881 |
#define PCI_DEVICE_ID_UMC_UM8886F 0x8886 |
#define PCI_DEVICE_ID_UMC_UM9017F 0x9017 |
#define PCI_DEVICE_ID_UMC_UM8886N 0xe886 |
#define PCI_DEVICE_ID_UMC_UM8891N 0xe891 |
#define PCI_VENDOR_ID_X 0x1061 |
#define PCI_DEVICE_ID_X_AGX016 0x0001 |
#define PCI_VENDOR_ID_MYLEX 0x1069 |
#define PCI_DEVICE_ID_MYLEX_DAC960_P 0x0001 |
#define PCI_DEVICE_ID_MYLEX_DAC960_PD 0x0002 |
#define PCI_DEVICE_ID_MYLEX_DAC960_PG 0x0010 |
#define PCI_DEVICE_ID_MYLEX_DAC960_LA 0x0020 |
#define PCI_DEVICE_ID_MYLEX_DAC960_LP 0x0050 |
#define PCI_DEVICE_ID_MYLEX_DAC960_BA 0xBA56 |
#define PCI_VENDOR_ID_PICOP 0x1066 |
#define PCI_DEVICE_ID_PICOP_PT86C52X 0x0001 |
#define PCI_DEVICE_ID_PICOP_PT80C524 0x8002 |
#define PCI_VENDOR_ID_APPLE 0x106b |
#define PCI_DEVICE_ID_APPLE_BANDIT 0x0001 |
#define PCI_DEVICE_ID_APPLE_GC 0x0002 |
#define PCI_DEVICE_ID_APPLE_HYDRA 0x000e |
#define PCI_DEVICE_ID_APPLE_UNI_N_FW 0x0018 |
#define PCI_DEVICE_ID_APPLE_KL_USB 0x0019 |
#define PCI_DEVICE_ID_APPLE_UNI_N_AGP 0x0020 |
#define PCI_DEVICE_ID_APPLE_UNI_N_GMAC 0x0021 |
#define PCI_DEVICE_ID_APPLE_KEYLARGO 0x0022 |
#define PCI_DEVICE_ID_APPLE_UNI_N_GMACP 0x0024 |
#define PCI_DEVICE_ID_APPLE_KEYLARGO_P 0x0025 |
#define PCI_DEVICE_ID_APPLE_KL_USB_P 0x0026 |
#define PCI_DEVICE_ID_APPLE_UNI_N_AGP_P 0x0027 |
#define PCI_DEVICE_ID_APPLE_UNI_N_AGP15 0x002d |
#define PCI_DEVICE_ID_APPLE_UNI_N_FW2 0x0030 |
#define PCI_DEVICE_ID_APPLE_UNI_N_GMAC2 0x0032 |
#define PCI_DEVICE_ID_APPLE_UNI_N_AGP2 0x0034 |
#define PCI_DEVICE_ID_APPLE_KAUAI_ATA 0x003b |
#define PCI_DEVICE_ID_APPLE_KEYLARGO_I 0x003e |
#define PCI_DEVICE_ID_APPLE_TIGON3 0x1645 |
#define PCI_VENDOR_ID_YAMAHA 0x1073 |
#define PCI_DEVICE_ID_YAMAHA_724 0x0004 |
#define PCI_DEVICE_ID_YAMAHA_724F 0x000d |
#define PCI_DEVICE_ID_YAMAHA_740 0x000a |
#define PCI_DEVICE_ID_YAMAHA_740C 0x000c |
#define PCI_DEVICE_ID_YAMAHA_744 0x0010 |
#define PCI_DEVICE_ID_YAMAHA_754 0x0012 |
#define PCI_VENDOR_ID_NEXGEN 0x1074 |
#define PCI_DEVICE_ID_NEXGEN_82C501 0x4e78 |
#define PCI_VENDOR_ID_QLOGIC 0x1077 |
#define PCI_DEVICE_ID_QLOGIC_ISP1020 0x1020 |
#define PCI_DEVICE_ID_QLOGIC_ISP1022 0x1022 |
#define PCI_DEVICE_ID_QLOGIC_ISP2100 0x2100 |
#define PCI_DEVICE_ID_QLOGIC_ISP2200 0x2200 |
#define PCI_VENDOR_ID_CYRIX 0x1078 |
#define PCI_DEVICE_ID_CYRIX_5510 0x0000 |
#define PCI_DEVICE_ID_CYRIX_PCI_MASTER 0x0001 |
#define PCI_DEVICE_ID_CYRIX_5520 0x0002 |
#define PCI_DEVICE_ID_CYRIX_5530_LEGACY 0x0100 |
#define PCI_DEVICE_ID_CYRIX_5530_SMI 0x0101 |
#define PCI_DEVICE_ID_CYRIX_5530_IDE 0x0102 |
#define PCI_DEVICE_ID_CYRIX_5530_AUDIO 0x0103 |
#define PCI_DEVICE_ID_CYRIX_5530_VIDEO 0x0104 |
#define PCI_VENDOR_ID_LEADTEK 0x107d |
#define PCI_DEVICE_ID_LEADTEK_805 0x0000 |
#define PCI_VENDOR_ID_INTERPHASE 0x107e |
#define PCI_DEVICE_ID_INTERPHASE_5526 0x0004 |
#define PCI_DEVICE_ID_INTERPHASE_55x6 0x0005 |
#define PCI_DEVICE_ID_INTERPHASE_5575 0x0008 |
#define PCI_VENDOR_ID_CONTAQ 0x1080 |
#define PCI_DEVICE_ID_CONTAQ_82C599 0x0600 |
#define PCI_DEVICE_ID_CONTAQ_82C693 0xc693 |
#define PCI_VENDOR_ID_FOREX 0x1083 |
#define PCI_VENDOR_ID_OLICOM 0x108d |
#define PCI_DEVICE_ID_OLICOM_OC3136 0x0001 |
#define PCI_DEVICE_ID_OLICOM_OC2315 0x0011 |
#define PCI_DEVICE_ID_OLICOM_OC2325 0x0012 |
#define PCI_DEVICE_ID_OLICOM_OC2183 0x0013 |
#define PCI_DEVICE_ID_OLICOM_OC2326 0x0014 |
#define PCI_DEVICE_ID_OLICOM_OC6151 0x0021 |
#define PCI_VENDOR_ID_SUN 0x108e |
#define PCI_DEVICE_ID_SUN_EBUS 0x1000 |
#define PCI_DEVICE_ID_SUN_HAPPYMEAL 0x1001 |
#define PCI_DEVICE_ID_SUN_RIO_EBUS 0x1100 |
#define PCI_DEVICE_ID_SUN_RIO_GEM 0x1101 |
#define PCI_DEVICE_ID_SUN_RIO_1394 0x1102 |
#define PCI_DEVICE_ID_SUN_RIO_USB 0x1103 |
#define PCI_DEVICE_ID_SUN_GEM 0x2bad |
#define PCI_DEVICE_ID_SUN_SIMBA 0x5000 |
#define PCI_DEVICE_ID_SUN_PBM 0x8000 |
#define PCI_DEVICE_ID_SUN_SCHIZO 0x8001 |
#define PCI_DEVICE_ID_SUN_SABRE 0xa000 |
#define PCI_DEVICE_ID_SUN_HUMMINGBIRD 0xa001 |
#define PCI_DEVICE_ID_SUN_TOMATILLO 0xa801 |
#define PCI_VENDOR_ID_CMD 0x1095 |
#define PCI_DEVICE_ID_CMD_640 0x0640 |
#define PCI_DEVICE_ID_CMD_643 0x0643 |
#define PCI_DEVICE_ID_CMD_646 0x0646 |
#define PCI_DEVICE_ID_CMD_647 0x0647 |
#define PCI_DEVICE_ID_CMD_648 0x0648 |
#define PCI_DEVICE_ID_CMD_649 0x0649 |
#define PCI_DEVICE_ID_CMD_670 0x0670 |
#define PCI_DEVICE_ID_CMD_680 0x0680 |
#define PCI_DEVICE_ID_SII_680 0x0680 |
#define PCI_DEVICE_ID_SII_3112 0x3112 |
#define PCI_DEVICE_ID_SII_1210SA 0x0240 |
#define PCI_VENDOR_ID_VISION 0x1098 |
#define PCI_DEVICE_ID_VISION_QD8500 0x0001 |
#define PCI_DEVICE_ID_VISION_QD8580 0x0002 |
#define PCI_VENDOR_ID_BROOKTREE 0x109e |
#define PCI_DEVICE_ID_BROOKTREE_848 0x0350 |
#define PCI_DEVICE_ID_BROOKTREE_849A 0x0351 |
#define PCI_DEVICE_ID_BROOKTREE_878_1 0x036e |
#define PCI_DEVICE_ID_BROOKTREE_878 0x0878 |
#define PCI_DEVICE_ID_BROOKTREE_8474 0x8474 |
#define PCI_VENDOR_ID_SIERRA 0x10a8 |
#define PCI_DEVICE_ID_SIERRA_STB 0x0000 |
#define PCI_VENDOR_ID_SGI 0x10a9 |
#define PCI_DEVICE_ID_SGI_IOC3 0x0003 |
#define PCI_VENDOR_ID_SGI_LITHIUM 0x1002 |
#define PCI_VENDOR_ID_ACC 0x10aa |
#define PCI_DEVICE_ID_ACC_2056 0x0000 |
#define PCI_VENDOR_ID_WINBOND 0x10ad |
#define PCI_DEVICE_ID_WINBOND_83769 0x0001 |
#define PCI_DEVICE_ID_WINBOND_82C105 0x0105 |
#define PCI_DEVICE_ID_WINBOND_83C553 0x0565 |
#define PCI_VENDOR_ID_DATABOOK 0x10b3 |
#define PCI_DEVICE_ID_DATABOOK_87144 0xb106 |
#define PCI_VENDOR_ID_PLX 0x10b5 |
#define PCI_DEVICE_ID_PLX_R685 0x1030 |
#define PCI_DEVICE_ID_PLX_ROMULUS 0x106a |
#define PCI_DEVICE_ID_PLX_SPCOM800 0x1076 |
#define PCI_DEVICE_ID_PLX_1077 0x1077 |
#define PCI_DEVICE_ID_PLX_SPCOM200 0x1103 |
#define PCI_DEVICE_ID_PLX_DJINN_ITOO 0x1151 |
#define PCI_DEVICE_ID_PLX_R753 0x1152 |
#define PCI_DEVICE_ID_PLX_9030 0x9030 |
#define PCI_DEVICE_ID_PLX_9050 0x9050 |
#define PCI_DEVICE_ID_PLX_9060 0x9060 |
#define PCI_DEVICE_ID_PLX_9060ES 0x906E |
#define PCI_DEVICE_ID_PLX_9060SD 0x906D |
#define PCI_DEVICE_ID_PLX_9080 0x9080 |
#define PCI_DEVICE_ID_PLX_GTEK_SERIAL2 0xa001 |
#define PCI_VENDOR_ID_MADGE 0x10b6 |
#define PCI_DEVICE_ID_MADGE_MK2 0x0002 |
#define PCI_DEVICE_ID_MADGE_C155S 0x1001 |
#define PCI_VENDOR_ID_3COM 0x10b7 |
#define PCI_DEVICE_ID_3COM_3C985 0x0001 |
#define PCI_DEVICE_ID_3COM_3C339 0x3390 |
#define PCI_DEVICE_ID_3COM_3C359 0x3590 |
#define PCI_DEVICE_ID_3COM_3C590 0x5900 |
#define PCI_DEVICE_ID_3COM_3C595TX 0x5950 |
#define PCI_DEVICE_ID_3COM_3C595T4 0x5951 |
#define PCI_DEVICE_ID_3COM_3C595MII 0x5952 |
#define PCI_DEVICE_ID_3COM_3C900TPO 0x9000 |
#define PCI_DEVICE_ID_3COM_3C900COMBO 0x9001 |
#define PCI_DEVICE_ID_3COM_3C905TX 0x9050 |
#define PCI_DEVICE_ID_3COM_3C905T4 0x9051 |
#define PCI_DEVICE_ID_3COM_3C905B_TX 0x9055 |
#define PCI_DEVICE_ID_3COM_3CR990 0x9900 |
#define PCI_DEVICE_ID_3COM_3CR990_TX_95 0x9902 |
#define PCI_DEVICE_ID_3COM_3CR990_TX_97 0x9903 |
#define PCI_DEVICE_ID_3COM_3CR990B 0x9904 |
#define PCI_DEVICE_ID_3COM_3CR990_FX 0x9905 |
#define PCI_DEVICE_ID_3COM_3CR990SVR95 0x9908 |
#define PCI_DEVICE_ID_3COM_3CR990SVR97 0x9909 |
#define PCI_DEVICE_ID_3COM_3CR990SVR 0x990a |
#define PCI_VENDOR_ID_SMC 0x10b8 |
#define PCI_DEVICE_ID_SMC_EPIC100 0x0005 |
#define PCI_VENDOR_ID_AL 0x10b9 |
#define PCI_DEVICE_ID_AL_M1445 0x1445 |
#define PCI_DEVICE_ID_AL_M1449 0x1449 |
#define PCI_DEVICE_ID_AL_M1451 0x1451 |
#define PCI_DEVICE_ID_AL_M1461 0x1461 |
#define PCI_DEVICE_ID_AL_M1489 0x1489 |
#define PCI_DEVICE_ID_AL_M1511 0x1511 |
#define PCI_DEVICE_ID_AL_M1513 0x1513 |
#define PCI_DEVICE_ID_AL_M1521 0x1521 |
#define PCI_DEVICE_ID_AL_M1523 0x1523 |
#define PCI_DEVICE_ID_AL_M1531 0x1531 |
#define PCI_DEVICE_ID_AL_M1533 0x1533 |
#define PCI_DEVICE_ID_AL_M1541 0x1541 |
#define PCI_DEVICE_ID_AL_M1621 0x1621 |
#define PCI_DEVICE_ID_AL_M1631 0x1631 |
#define PCI_DEVICE_ID_AL_M1632 0x1632 |
#define PCI_DEVICE_ID_AL_M1641 0x1641 |
#define PCI_DEVICE_ID_AL_M1644 0x1644 |
#define PCI_DEVICE_ID_AL_M1647 0x1647 |
#define PCI_DEVICE_ID_AL_M1651 0x1651 |
#define PCI_DEVICE_ID_AL_M1671 0x1671 |
#define PCI_DEVICE_ID_AL_M1543 0x1543 |
#define PCI_DEVICE_ID_AL_M3307 0x3307 |
#define PCI_DEVICE_ID_AL_M4803 0x5215 |
#define PCI_DEVICE_ID_AL_M5219 0x5219 |
#define PCI_DEVICE_ID_AL_M5229 0x5229 |
#define PCI_DEVICE_ID_AL_M5237 0x5237 |
#define PCI_DEVICE_ID_AL_M5243 0x5243 |
#define PCI_DEVICE_ID_AL_M5451 0x5451 |
#define PCI_DEVICE_ID_AL_M7101 0x7101 |
#define PCI_VENDOR_ID_MITSUBISHI 0x10ba |
#define PCI_VENDOR_ID_SURECOM 0x10bd |
#define PCI_DEVICE_ID_SURECOM_NE34 0x0e34 |
#define PCI_VENDOR_ID_NEOMAGIC 0x10c8 |
#define PCI_DEVICE_ID_NEOMAGIC_MAGICGRAPH_NM2070 0x0001 |
#define PCI_DEVICE_ID_NEOMAGIC_MAGICGRAPH_128V 0x0002 |
#define PCI_DEVICE_ID_NEOMAGIC_MAGICGRAPH_128ZV 0x0003 |
#define PCI_DEVICE_ID_NEOMAGIC_MAGICGRAPH_NM2160 0x0004 |
#define PCI_DEVICE_ID_NEOMAGIC_MAGICMEDIA_256AV 0x0005 |
#define PCI_DEVICE_ID_NEOMAGIC_MAGICGRAPH_128ZVPLUS 0x0083 |
#define PCI_VENDOR_ID_ASP 0x10cd |
#define PCI_DEVICE_ID_ASP_ABP940 0x1200 |
#define PCI_DEVICE_ID_ASP_ABP940U 0x1300 |
#define PCI_DEVICE_ID_ASP_ABP940UW 0x2300 |
#define PCI_VENDOR_ID_MACRONIX 0x10d9 |
#define PCI_DEVICE_ID_MACRONIX_MX98713 0x0512 |
#define PCI_DEVICE_ID_MACRONIX_MX987x5 0x0531 |
#define PCI_VENDOR_ID_TCONRAD 0x10da |
#define PCI_DEVICE_ID_TCONRAD_TOKENRING 0x0508 |
#define PCI_VENDOR_ID_CERN 0x10dc |
#define PCI_DEVICE_ID_CERN_SPSB_PMC 0x0001 |
#define PCI_DEVICE_ID_CERN_SPSB_PCI 0x0002 |
#define PCI_DEVICE_ID_CERN_HIPPI_DST 0x0021 |
#define PCI_DEVICE_ID_CERN_HIPPI_SRC 0x0022 |
#define PCI_VENDOR_ID_NVIDIA 0x10de |
#define PCI_DEVICE_ID_NVIDIA_TNT 0x0020 |
#define PCI_DEVICE_ID_NVIDIA_TNT2 0x0028 |
#define PCI_DEVICE_ID_NVIDIA_UTNT2 0x0029 |
#define PCI_DEVICE_ID_NVIDIA_VTNT2 0x002C |
#define PCI_DEVICE_ID_NVIDIA_UVTNT2 0x002D |
#define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE 0x0065 |
#define PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE 0x0085 |
#define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA 0x008e |
#define PCI_DEVICE_ID_NVIDIA_ITNT2 0x00A0 |
#define PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE 0x00d5 |
#define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA 0x00e3 |
#define PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE 0x00e5 |
#define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2 0x00ee |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE_SDR 0x0100 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE_DDR 0x0101 |
#define PCI_DEVICE_ID_NVIDIA_QUADRO 0x0103 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_MX 0x0110 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_MX2 0x0111 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_GO 0x0112 |
#define PCI_DEVICE_ID_NVIDIA_QUADRO2_MXR 0x0113 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_GTS 0x0150 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_GTS2 0x0151 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_ULTRA 0x0152 |
#define PCI_DEVICE_ID_NVIDIA_QUADRO2_PRO 0x0153 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_460 0x0170 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_440 0x0171 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_420 0x0172 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_440_GO 0x0174 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_420_GO 0x0175 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_420_GO_M32 0x0176 |
#define PCI_DEVICE_ID_NVIDIA_QUADRO4_500XGL 0x0178 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_440_GO_M64 0x0179 |
#define PCI_DEVICE_ID_NVIDIA_QUADRO4_200 0x017A |
#define PCI_DEVICE_ID_NVIDIA_QUADRO4_550XGL 0x017B |
#define PCI_DEVICE_ID_NVIDIA_QUADRO4_500_GOGL 0x017C |
#define PCI_DEVICE_ID_NVIDIA_IGEFORCE2 0x01a0 |
#define PCI_DEVICE_ID_NVIDIA_NFORCE 0x01a4 |
#define PCI_DEVICE_ID_NVIDIA_NFORCE_IDE 0x01bc |
#define PCI_DEVICE_ID_NVIDIA_NFORCE2 0x01e0 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE3 0x0200 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE3_1 0x0201 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE3_2 0x0202 |
#define PCI_DEVICE_ID_NVIDIA_QUADRO_DDC 0x0203 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4600 0x0250 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4400 0x0251 |
#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4200 0x0253 |
#define PCI_DEVICE_ID_NVIDIA_QUADRO4_900XGL 0x0258 |
#define PCI_DEVICE_ID_NVIDIA_QUADRO4_750XGL 0x0259 |
#define PCI_DEVICE_ID_NVIDIA_QUADRO4_700XGL 0x025B |
#define PCI_VENDOR_ID_IMS 0x10e0 |
#define PCI_DEVICE_ID_IMS_8849 0x8849 |
#define PCI_DEVICE_ID_IMS_TT128 0x9128 |
#define PCI_DEVICE_ID_IMS_TT3D 0x9135 |
#define PCI_VENDOR_ID_TEKRAM2 0x10e1 |
#define PCI_DEVICE_ID_TEKRAM2_690c 0x690c |
#define PCI_VENDOR_ID_TUNDRA 0x10e3 |
#define PCI_DEVICE_ID_TUNDRA_CA91C042 0x0000 |
#define PCI_VENDOR_ID_AMCC 0x10e8 |
#define PCI_DEVICE_ID_AMCC_MYRINET 0x8043 |
#define PCI_DEVICE_ID_AMCC_PARASTATION 0x8062 |
#define PCI_DEVICE_ID_AMCC_S5933 0x807d |
#define PCI_DEVICE_ID_AMCC_S5933_HEPC3 0x809c |
#define PCI_VENDOR_ID_INTERG 0x10ea |
#define PCI_DEVICE_ID_INTERG_1680 0x1680 |
#define PCI_DEVICE_ID_INTERG_1682 0x1682 |
#define PCI_DEVICE_ID_INTERG_2000 0x2000 |
#define PCI_DEVICE_ID_INTERG_2010 0x2010 |
#define PCI_DEVICE_ID_INTERG_5000 0x5000 |
#define PCI_DEVICE_ID_INTERG_5050 0x5050 |
#define PCI_VENDOR_ID_REALTEK 0x10ec |
#define PCI_DEVICE_ID_REALTEK_8029 0x8029 |
#define PCI_DEVICE_ID_REALTEK_8129 0x8129 |
#define PCI_DEVICE_ID_REALTEK_8139 0x8139 |
#define PCI_DEVICE_ID_REALTEK_8169 0x8169 |
#define PCI_VENDOR_ID_XILINX 0x10ee |
#define PCI_DEVICE_ID_TURBOPAM 0x4020 |
#define PCI_VENDOR_ID_TRUEVISION 0x10fa |
#define PCI_DEVICE_ID_TRUEVISION_T1000 0x000c |
#define PCI_VENDOR_ID_INIT 0x1101 |
#define PCI_DEVICE_ID_INIT_320P 0x9100 |
#define PCI_DEVICE_ID_INIT_360P 0x9500 |
#define PCI_VENDOR_ID_CREATIVE 0x1102 // duplicate: ECTIVA |
#define PCI_DEVICE_ID_CREATIVE_EMU10K1 0x0002 |
#define PCI_VENDOR_ID_ECTIVA 0x1102 // duplicate: CREATIVE |
#define PCI_DEVICE_ID_ECTIVA_EV1938 0x8938 |
#define PCI_VENDOR_ID_TTI 0x1103 |
#define PCI_DEVICE_ID_TTI_HPT343 0x0003 |
#define PCI_DEVICE_ID_TTI_HPT366 0x0004 |
#define PCI_DEVICE_ID_TTI_HPT372 0x0005 |
#define PCI_DEVICE_ID_TTI_HPT302 0x0006 |
#define PCI_DEVICE_ID_TTI_HPT371 0x0007 |
#define PCI_DEVICE_ID_TTI_HPT374 0x0008 |
#define PCI_VENDOR_ID_VIA 0x1106 |
#define PCI_DEVICE_ID_VIA_8763_0 0x0198 |
#define PCI_DEVICE_ID_VIA_8380_0 0x0204 |
#define PCI_DEVICE_ID_VIA_PX8X0_0 0x0259 |
#define PCI_DEVICE_ID_VIA_8363_0 0x0305 |
#define PCI_DEVICE_ID_VIA_8371_0 0x0391 |
#define PCI_DEVICE_ID_VIA_8501_0 0x0501 |
#define PCI_DEVICE_ID_VIA_82C505 0x0505 |
#define PCI_DEVICE_ID_VIA_82C561 0x0561 |
#define PCI_DEVICE_ID_VIA_82C586_1 0x0571 |
#define PCI_DEVICE_ID_VIA_82C576 0x0576 |
#define PCI_DEVICE_ID_VIA_82C585 0x0585 |
#define PCI_DEVICE_ID_VIA_82C586_0 0x0586 |
#define PCI_DEVICE_ID_VIA_82C595 0x0595 |
#define PCI_DEVICE_ID_VIA_82C596 0x0596 |
#define PCI_DEVICE_ID_VIA_82C597_0 0x0597 |
#define PCI_DEVICE_ID_VIA_82C598_0 0x0598 |
#define PCI_DEVICE_ID_VIA_8601_0 0x0601 |
#define PCI_DEVICE_ID_VIA_8605_0 0x0605 |
#define PCI_DEVICE_ID_VIA_82C680 0x0680 |
#define PCI_DEVICE_ID_VIA_82C686 0x0686 |
#define PCI_DEVICE_ID_VIA_82C691_0 0x0691 |
#define PCI_DEVICE_ID_VIA_82C693 0x0693 |
#define PCI_DEVICE_ID_VIA_82C693_1 0x0698 |
#define PCI_DEVICE_ID_VIA_82C926 0x0926 |
#define PCI_DEVICE_ID_VIA_82C576_1 0x1571 |
#define PCI_DEVICE_ID_VIA_82C595_97 0x1595 |
#define PCI_DEVICE_ID_VIA_82C586_2 0x3038 |
#define PCI_DEVICE_ID_VIA_82C586_3 0x3040 |
#define PCI_DEVICE_ID_VIA_6305 0x3044 |
#define PCI_DEVICE_ID_VIA_82C596_3 0x3050 |
#define PCI_DEVICE_ID_VIA_82C596B_3 0x3051 |
#define PCI_DEVICE_ID_VIA_82C686_4 0x3057 |
#define PCI_DEVICE_ID_VIA_82C686_5 0x3058 |
#define PCI_DEVICE_ID_VIA_8233_5 0x3059 |
#define PCI_DEVICE_ID_VIA_8233_7 0x3065 |
#define PCI_DEVICE_ID_VIA_82C686_6 0x3068 |
#define PCI_DEVICE_ID_VIA_8233_0 0x3074 |
#define PCI_DEVICE_ID_VIA_8633_0 0x3091 |
#define PCI_DEVICE_ID_VIA_8367_0 0x3099 |
#define PCI_DEVICE_ID_VIA_8653_0 0x3101 |
#define PCI_DEVICE_ID_VIA_8622 0x3102 |
#define PCI_DEVICE_ID_VIA_8233C_0 0x3109 |
#define PCI_DEVICE_ID_VIA_8361 0x3112 |
#define PCI_DEVICE_ID_VIA_XM266 0x3116 |
#define PCI_DEVICE_ID_VIA_862X_0 0x3123 |
#define PCI_DEVICE_ID_VIA_8753_0 0x3128 |
#define PCI_DEVICE_ID_VIA_8233A 0x3147 |
#define PCI_DEVICE_ID_VIA_8703_51_0 0x3148 |
#define PCI_DEVICE_ID_VIA_8237_SATA 0x3149 |
#define PCI_DEVICE_ID_VIA_XN266 0x3156 |
#define PCI_DEVICE_ID_VIA_8754C_0 0x3168 |
#define PCI_DEVICE_ID_VIA_8235 0x3177 |
#define PCI_DEVICE_ID_VIA_P4N333 0x3178 |
#define PCI_DEVICE_ID_VIA_8385_0 0x3188 |
#define PCI_DEVICE_ID_VIA_8377_0 0x3189 |
#define PCI_DEVICE_ID_VIA_8378_0 0x3205 |
#define PCI_DEVICE_ID_VIA_8783_0 0x3208 |
#define PCI_DEVICE_ID_VIA_PT880 0x3258 |
#define PCI_DEVICE_ID_VIA_P4M400 0x3209 |
#define PCI_DEVICE_ID_VIA_8237 0x3227 |
#define PCI_DEVICE_ID_VIA_86C100A 0x6100 |
#define PCI_DEVICE_ID_VIA_8231 0x8231 |
#define PCI_DEVICE_ID_VIA_8231_4 0x8235 |
#define PCI_DEVICE_ID_VIA_8365_1 0x8305 |
#define PCI_DEVICE_ID_VIA_8371_1 0x8391 |
#define PCI_DEVICE_ID_VIA_8501_1 0x8501 |
#define PCI_DEVICE_ID_VIA_82C597_1 0x8597 |
#define PCI_DEVICE_ID_VIA_82C598_1 0x8598 |
#define PCI_DEVICE_ID_VIA_8601_1 0x8601 |
#define PCI_DEVICE_ID_VIA_8505_1 0x8605 |
#define PCI_DEVICE_ID_VIA_8633_1 0xB091 |
#define PCI_DEVICE_ID_VIA_8367_1 0xB099 |
#define PCI_DEVICE_ID_VIA_P4X266_1 0xB101 |
#define PCI_DEVICE_ID_VIA_8615_1 0xB103 |
#define PCI_DEVICE_ID_VIA_8361_1 0xB112 |
#define PCI_DEVICE_ID_VIA_8235_1 0xB168 |
#define PCI_DEVICE_ID_VIA_838X_1 0xB188 |
#define PCI_DEVICE_ID_VIA_83_87XX_1 0xB198 |
#define PCI_VENDOR_ID_SIEMENS 0x110A |
#define PCI_DEVICE_ID_SIEMENS_DSCC4 0x2102 |
#define PCI_VENDOR_ID_SMC2 0x1113 |
#define PCI_DEVICE_ID_SMC2_1211TX 0x1211 |
#define PCI_VENDOR_ID_VORTEX 0x1119 |
#define PCI_DEVICE_ID_VORTEX_GDT60x0 0x0000 |
#define PCI_DEVICE_ID_VORTEX_GDT6000B 0x0001 |
#define PCI_DEVICE_ID_VORTEX_GDT6x10 0x0002 |
#define PCI_DEVICE_ID_VORTEX_GDT6x20 0x0003 |
#define PCI_DEVICE_ID_VORTEX_GDT6530 0x0004 |
#define PCI_DEVICE_ID_VORTEX_GDT6550 0x0005 |
#define PCI_DEVICE_ID_VORTEX_GDT6x17 0x0006 |
#define PCI_DEVICE_ID_VORTEX_GDT6x27 0x0007 |
#define PCI_DEVICE_ID_VORTEX_GDT6537 0x0008 |
#define PCI_DEVICE_ID_VORTEX_GDT6557 0x0009 |
#define PCI_DEVICE_ID_VORTEX_GDT6x15 0x000a |
#define PCI_DEVICE_ID_VORTEX_GDT6x25 0x000b |
#define PCI_DEVICE_ID_VORTEX_GDT6535 0x000c |
#define PCI_DEVICE_ID_VORTEX_GDT6555 0x000d |
#define PCI_DEVICE_ID_VORTEX_GDT6x17RP 0x0100 |
#define PCI_DEVICE_ID_VORTEX_GDT6x27RP 0x0101 |
#define PCI_DEVICE_ID_VORTEX_GDT6537RP 0x0102 |
#define PCI_DEVICE_ID_VORTEX_GDT6557RP 0x0103 |
#define PCI_DEVICE_ID_VORTEX_GDT6x11RP 0x0104 |
#define PCI_DEVICE_ID_VORTEX_GDT6x21RP 0x0105 |
#define PCI_DEVICE_ID_VORTEX_GDT6x17RP1 0x0110 |
#define PCI_DEVICE_ID_VORTEX_GDT6x27RP1 0x0111 |
#define PCI_DEVICE_ID_VORTEX_GDT6537RP1 0x0112 |
#define PCI_DEVICE_ID_VORTEX_GDT6557RP1 0x0113 |
#define PCI_DEVICE_ID_VORTEX_GDT6x11RP1 0x0114 |
#define PCI_DEVICE_ID_VORTEX_GDT6x21RP1 0x0115 |
#define PCI_DEVICE_ID_VORTEX_GDT6x17RP2 0x0120 |
#define PCI_DEVICE_ID_VORTEX_GDT6x27RP2 0x0121 |
#define PCI_DEVICE_ID_VORTEX_GDT6537RP2 0x0122 |
#define PCI_DEVICE_ID_VORTEX_GDT6557RP2 0x0123 |
#define PCI_DEVICE_ID_VORTEX_GDT6x11RP2 0x0124 |
#define PCI_DEVICE_ID_VORTEX_GDT6x21RP2 0x0125 |
#define PCI_VENDOR_ID_EF 0x111a |
#define PCI_DEVICE_ID_EF_ATM_FPGA 0x0000 |
#define PCI_DEVICE_ID_EF_ATM_ASIC 0x0002 |
#define PCI_VENDOR_ID_EF_ATM_LANAI2 0x0003 |
#define PCI_VENDOR_ID_EF_ATM_LANAIHB 0x0005 |
#define PCI_VENDOR_ID_IDT 0x111d |
#define PCI_DEVICE_ID_IDT_IDT77201 0x0001 |
#define PCI_VENDOR_ID_FORE 0x1127 |
#define PCI_DEVICE_ID_FORE_PCA200PC 0x0210 |
#define PCI_DEVICE_ID_FORE_PCA200E 0x0300 |
#define PCI_VENDOR_ID_IMAGINGTECH 0x112f |
#define PCI_DEVICE_ID_IMAGINGTECH_ICPCI 0x0000 |
#define PCI_VENDOR_ID_PHILIPS 0x1131 |
#define PCI_DEVICE_ID_PHILIPS_SAA7145 0x7145 |
#define PCI_DEVICE_ID_PHILIPS_SAA7146 0x7146 |
#define PCI_DEVICE_ID_PHILIPS_SAA9730 0x9730 |
#define PCI_VENDOR_ID_EICON 0x1133 |
#define PCI_DEVICE_ID_EICON_DIVA20PRO 0xe001 |
#define PCI_DEVICE_ID_EICON_DIVA20 0xe002 |
#define PCI_DEVICE_ID_EICON_DIVA20PRO_U 0xe003 |
#define PCI_DEVICE_ID_EICON_DIVA20_U 0xe004 |
#define PCI_DEVICE_ID_EICON_DIVA201 0xe005 |
#define PCI_DEVICE_ID_EICON_DIVA202 0xe00b |
#define PCI_DEVICE_ID_EICON_MAESTRA 0xe010 |
#define PCI_DEVICE_ID_EICON_MAESTRAQ 0xe012 |
#define PCI_DEVICE_ID_EICON_MAESTRAQ_U 0xe013 |
#define PCI_DEVICE_ID_EICON_MAESTRAP 0xe014 |
#define PCI_VENDOR_ID_ZIATECH 0x1138 |
#define PCI_DEVICE_ID_ZIATECH_5550_HC 0x5550 |
#define PCI_VENDOR_ID_CYCLONE 0x113c |
#define PCI_DEVICE_ID_CYCLONE_SDK 0x0001 |
#define PCI_VENDOR_ID_ALLIANCE 0x1142 |
#define PCI_DEVICE_ID_ALLIANCE_PROMOTIO 0x3210 |
#define PCI_DEVICE_ID_ALLIANCE_PROVIDEO 0x6422 |
#define PCI_DEVICE_ID_ALLIANCE_AT24 0x6424 |
#define PCI_DEVICE_ID_ALLIANCE_AT3D 0x643d |
#define PCI_VENDOR_ID_SYSKONNECT 0x1148 |
#define PCI_DEVICE_ID_SYSKONNECT_FP 0x4000 |
#define PCI_DEVICE_ID_SYSKONNECT_TR 0x4200 |
#define PCI_DEVICE_ID_SYSKONNECT_GE 0x4300 |
#define PCI_DEVICE_ID_SYSKONNECT_YU 0x4320 |
#define PCI_DEVICE_ID_SYSKONNECT_9DXX 0x4400 |
#define PCI_DEVICE_ID_SYSKONNECT_9MXX 0x4500 |
#define PCI_VENDOR_ID_VMIC 0x114a |
#define PCI_DEVICE_ID_VMIC_VME 0x7587 |
#define PCI_VENDOR_ID_DIGI 0x114f |
#define PCI_DEVICE_ID_DIGI_EPC 0x0002 |
#define PCI_DEVICE_ID_DIGI_RIGHTSWITCH 0x0003 |
#define PCI_DEVICE_ID_DIGI_XEM 0x0004 |
#define PCI_DEVICE_ID_DIGI_XR 0x0005 |
#define PCI_DEVICE_ID_DIGI_CX 0x0006 |
#define PCI_DEVICE_ID_DIGI_XRJ 0x0009 |
#define PCI_DEVICE_ID_DIGI_EPCJ 0x000a |
#define PCI_DEVICE_ID_DIGI_XR_920 0x0027 |
#define PCI_DEVICE_ID_DIGI_DF_M_IOM2_E 0x0070 |
#define PCI_DEVICE_ID_DIGI_DF_M_E 0x0071 |
#define PCI_DEVICE_ID_DIGI_DF_M_IOM2_A 0x0072 |
#define PCI_DEVICE_ID_DIGI_DF_M_A 0x0073 |
#define PCI_VENDOR_ID_MUTECH 0x1159 |
#define PCI_DEVICE_ID_MUTECH_MV1000 0x0001 |
#define PCI_VENDOR_ID_XIRCOM 0x115d |
#define PCI_DEVICE_ID_XIRCOM_X3201_ETH 0x0003 |
#define PCI_DEVICE_ID_XIRCOM_RBM56G 0x0101 |
#define PCI_DEVICE_ID_XIRCOM_X3201_MDM 0x0103 |
#define PCI_VENDOR_ID_RENDITION 0x1163 |
#define PCI_DEVICE_ID_RENDITION_VERITE 0x0001 |
#define PCI_DEVICE_ID_RENDITION_VERITE2100 0x2000 |
#define PCI_VENDOR_ID_SERVERWORKS 0x1166 |
#define PCI_DEVICE_ID_SERVERWORKS_HE 0x0008 |
#define PCI_DEVICE_ID_SERVERWORKS_LE 0x0009 |
#define PCI_DEVICE_ID_SERVERWORKS_CIOB30 0x0010 |
#define PCI_DEVICE_ID_SERVERWORKS_CMIC_HE 0x0011 |
#define PCI_DEVICE_ID_SERVERWORKS_GCNB_LE 0x0017 |
#define PCI_DEVICE_ID_SERVERWORKS_OSB4 0x0200 |
#define PCI_DEVICE_ID_SERVERWORKS_CSB5 0x0201 |
#define PCI_DEVICE_ID_SERVERWORKS_CSB6 0x0203 |
#define PCI_DEVICE_ID_SERVERWORKS_OSB4IDE 0x0211 |
#define PCI_DEVICE_ID_SERVERWORKS_CSB5IDE 0x0212 |
#define PCI_DEVICE_ID_SERVERWORKS_CSB6IDE 0x0213 |
#define PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2 0x0217 |
#define PCI_DEVICE_ID_SERVERWORKS_OSB4USB 0x0220 |
#define PCI_DEVICE_ID_SERVERWORKS_CSB5USB PCI_DEVICE_ID_SERVERWORKS_OSB4USB |
#define PCI_DEVICE_ID_SERVERWORKS_CSB6USB 0x0221 |
#define PCI_DEVICE_ID_SERVERWORKS_GCLE 0x0225 |
#define PCI_DEVICE_ID_SERVERWORKS_GCLE2 0x0227 |
#define PCI_DEVICE_ID_SERVERWORKS_CSB5ISA 0x0230 |
#define PCI_VENDOR_ID_SBE 0x1176 |
#define PCI_DEVICE_ID_SBE_WANXL100 0x0301 |
#define PCI_DEVICE_ID_SBE_WANXL200 0x0302 |
#define PCI_DEVICE_ID_SBE_WANXL400 0x0104 |
#define PCI_VENDOR_ID_TOSHIBA 0x1179 |
#define PCI_DEVICE_ID_TOSHIBA_601 0x0601 |
#define PCI_DEVICE_ID_TOSHIBA_TOPIC95 0x060a |
#define PCI_DEVICE_ID_TOSHIBA_TOPIC95_A 0x0603 |
#define PCI_DEVICE_ID_TOSHIBA_TOPIC95_B 0x060a |
#define PCI_DEVICE_ID_TOSHIBA_TOPIC97 0x060f |
#define PCI_DEVICE_ID_TOSHIBA_TOPIC100 0x0617 |
#define PCI_VENDOR_ID_TOSHIBA_2 0x102f |
#define PCI_DEVICE_ID_TOSHIBA_TX3927 0x000a |
#define PCI_DEVICE_ID_TOSHIBA_TC35815CF 0x0030 |
#define PCI_DEVICE_ID_TOSHIBA_TX4927 0x0180 |
#define PCI_VENDOR_ID_RICOH 0x1180 |
#define PCI_DEVICE_ID_RICOH_RL5C465 0x0465 |
#define PCI_DEVICE_ID_RICOH_RL5C466 0x0466 |
#define PCI_DEVICE_ID_RICOH_RL5C475 0x0475 |
#define PCI_DEVICE_ID_RICOH_RL5C476 0x0476 |
#define PCI_DEVICE_ID_RICOH_RL5C478 0x0478 |
#define PCI_VENDOR_ID_ARTOP 0x1191 |
#define PCI_DEVICE_ID_ARTOP_ATP8400 0x0004 |
#define PCI_DEVICE_ID_ARTOP_ATP850UF 0x0005 |
#define PCI_DEVICE_ID_ARTOP_ATP860 0x0006 |
#define PCI_DEVICE_ID_ARTOP_ATP860R 0x0007 |
#define PCI_DEVICE_ID_ARTOP_ATP865 0x0008 |
#define PCI_DEVICE_ID_ARTOP_ATP865R 0x0009 |
#define PCI_DEVICE_ID_ARTOP_AEC7610 0x8002 |
#define PCI_DEVICE_ID_ARTOP_AEC7612UW 0x8010 |
#define PCI_DEVICE_ID_ARTOP_AEC7612U 0x8020 |
#define PCI_DEVICE_ID_ARTOP_AEC7612S 0x8030 |
#define PCI_DEVICE_ID_ARTOP_AEC7612D 0x8040 |
#define PCI_DEVICE_ID_ARTOP_AEC7612SUW 0x8050 |
#define PCI_DEVICE_ID_ARTOP_8060 0x8060 |
#define PCI_VENDOR_ID_ZEITNET 0x1193 |
#define PCI_DEVICE_ID_ZEITNET_1221 0x0001 |
#define PCI_DEVICE_ID_ZEITNET_1225 0x0002 |
#define PCI_VENDOR_ID_OMEGA 0x119b |
#define PCI_DEVICE_ID_OMEGA_82C092G 0x1221 |
#define PCI_VENDOR_ID_FUJITSU_ME 0x119e |
#define PCI_DEVICE_ID_FUJITSU_FS155 0x0001 |
#define PCI_DEVICE_ID_FUJITSU_FS50 0x0003 |
#define PCI_SUBVENDOR_ID_KEYSPAN 0x11a9 |
#define PCI_SUBDEVICE_ID_KEYSPAN_SX2 0x5334 |
#define PCI_VENDOR_ID_GALILEO 0x11ab |
#define PCI_DEVICE_ID_GALILEO_GT64011 0x4146 |
#define PCI_DEVICE_ID_GALILEO_GT64111 0x4146 |
#define PCI_DEVICE_ID_GALILEO_GT96100 0x9652 |
#define PCI_DEVICE_ID_GALILEO_GT96100A 0x9653 |
#define PCI_VENDOR_ID_LITEON 0x11ad |
#define PCI_DEVICE_ID_LITEON_LNE100TX 0x0002 |
#define PCI_VENDOR_ID_V3 0x11b0 |
#define PCI_DEVICE_ID_V3_V960 0x0001 |
#define PCI_DEVICE_ID_V3_V350 0x0001 |
#define PCI_DEVICE_ID_V3_V961 0x0002 |
#define PCI_DEVICE_ID_V3_V351 0x0002 |
#define PCI_VENDOR_ID_NP 0x11bc |
#define PCI_DEVICE_ID_NP_PCI_FDDI 0x0001 |
#define PCI_VENDOR_ID_ATT 0x11c1 |
#define PCI_DEVICE_ID_ATT_L56XMF 0x0440 |
#define PCI_DEVICE_ID_ATT_VENUS_MODEM 0x480 |
#define PCI_VENDOR_ID_NEC2 0x11c3 /* NEC (2nd) */ |
#define PCI_VENDOR_ID_SPECIALIX 0x11cb |
#define PCI_DEVICE_ID_SPECIALIX_IO8 0x2000 |
#define PCI_DEVICE_ID_SPECIALIX_XIO 0x4000 |
#define PCI_DEVICE_ID_SPECIALIX_RIO 0x8000 |
#define PCI_SUBDEVICE_ID_SPECIALIX_SPEED4 0xa004 |
#define PCI_VENDOR_ID_AURAVISION 0x11d1 |
#define PCI_DEVICE_ID_AURAVISION_VXP524 0x01f7 |
#define PCI_VENDOR_ID_ANALOG_DEVICES 0x11d4 |
#define PCI_DEVICE_ID_AD1889JS 0x1889 |
#define PCI_VENDOR_ID_IKON 0x11d5 |
#define PCI_DEVICE_ID_IKON_10115 0x0115 |
#define PCI_DEVICE_ID_IKON_10117 0x0117 |
#define PCI_VENDOR_ID_ZORAN 0x11de |
#define PCI_DEVICE_ID_ZORAN_36057 0x6057 |
#define PCI_DEVICE_ID_ZORAN_36120 0x6120 |
#define PCI_VENDOR_ID_KINETIC 0x11f4 |
#define PCI_DEVICE_ID_KINETIC_2915 0x2915 |
#define PCI_VENDOR_ID_COMPEX 0x11f6 |
#define PCI_DEVICE_ID_COMPEX_ENET100VG4 0x0112 |
#define PCI_DEVICE_ID_COMPEX_RL2000 0x1401 |
#define PCI_VENDOR_ID_RP 0x11fe |
#define PCI_DEVICE_ID_RP32INTF 0x0001 |
#define PCI_DEVICE_ID_RP8INTF 0x0002 |
#define PCI_DEVICE_ID_RP16INTF 0x0003 |
#define PCI_DEVICE_ID_RP4QUAD 0x0004 |
#define PCI_DEVICE_ID_RP8OCTA 0x0005 |
#define PCI_DEVICE_ID_RP8J 0x0006 |
#define PCI_DEVICE_ID_RP4J 0x0007 |
#define PCI_DEVICE_ID_RP8SNI 0x0008 |
#define PCI_DEVICE_ID_RP16SNI 0x0009 |
#define PCI_DEVICE_ID_RPP4 0x000A |
#define PCI_DEVICE_ID_RPP8 0x000B |
#define PCI_DEVICE_ID_RP8M 0x000C |
#define PCI_DEVICE_ID_RP4M 0x000D |
#define PCI_DEVICE_ID_RP2_232 0x000E |
#define PCI_DEVICE_ID_RP2_422 0x000F |
#define PCI_DEVICE_ID_URP32INTF 0x0801 |
#define PCI_DEVICE_ID_URP8INTF 0x0802 |
#define PCI_DEVICE_ID_URP16INTF 0x0803 |
#define PCI_DEVICE_ID_URP8OCTA 0x0805 |
#define PCI_DEVICE_ID_UPCI_RM3_8PORT 0x080C |
#define PCI_DEVICE_ID_UPCI_RM3_4PORT 0x080D |
#define PCI_DEVICE_ID_CRP16INTF 0x0903 |
#define PCI_VENDOR_ID_CYCLADES 0x120e |
#define PCI_DEVICE_ID_CYCLOM_Y_Lo 0x0100 |
#define PCI_DEVICE_ID_CYCLOM_Y_Hi 0x0101 |
#define PCI_DEVICE_ID_CYCLOM_4Y_Lo 0x0102 |
#define PCI_DEVICE_ID_CYCLOM_4Y_Hi 0x0103 |
#define PCI_DEVICE_ID_CYCLOM_8Y_Lo 0x0104 |
#define PCI_DEVICE_ID_CYCLOM_8Y_Hi 0x0105 |
#define PCI_DEVICE_ID_CYCLOM_Z_Lo 0x0200 |
#define PCI_DEVICE_ID_CYCLOM_Z_Hi 0x0201 |
#define PCI_DEVICE_ID_PC300_RX_2 0x0300 |
#define PCI_DEVICE_ID_PC300_RX_1 0x0301 |
#define PCI_DEVICE_ID_PC300_TE_2 0x0310 |
#define PCI_DEVICE_ID_PC300_TE_1 0x0311 |
#define PCI_DEVICE_ID_PC300_TE_M_2 0x0320 |
#define PCI_DEVICE_ID_PC300_TE_M_1 0x0321 |
#define PCI_VENDOR_ID_ESSENTIAL 0x120f |
#define PCI_DEVICE_ID_ESSENTIAL_ROADRUNNER 0x0001 |
#define PCI_VENDOR_ID_O2 0x1217 |
#define PCI_DEVICE_ID_O2_6729 0x6729 |
#define PCI_DEVICE_ID_O2_6730 0x673a |
#define PCI_DEVICE_ID_O2_6832 0x6832 |
#define PCI_DEVICE_ID_O2_6836 0x6836 |
#define PCI_VENDOR_ID_3DFX 0x121a |
#define PCI_DEVICE_ID_3DFX_VOODOO 0x0001 |
#define PCI_DEVICE_ID_3DFX_VOODOO2 0x0002 |
#define PCI_DEVICE_ID_3DFX_BANSHEE 0x0003 |
#define PCI_DEVICE_ID_3DFX_VOODOO3 0x0005 |
#define PCI_DEVICE_ID_3DFX_VOODOO5 0x0009 |
#define PCI_VENDOR_ID_SIGMADES 0x1236 |
#define PCI_DEVICE_ID_SIGMADES_6425 0x6401 |
#define PCI_VENDOR_ID_CCUBE 0x123f |
#define PCI_VENDOR_ID_AVM 0x1244 |
#define PCI_DEVICE_ID_AVM_B1 0x0700 |
#define PCI_DEVICE_ID_AVM_C4 0x0800 |
#define PCI_DEVICE_ID_AVM_A1 0x0a00 |
#define PCI_DEVICE_ID_AVM_A1_V2 0x0e00 |
#define PCI_DEVICE_ID_AVM_C2 0x1100 |
#define PCI_DEVICE_ID_AVM_T1 0x1200 |
#define PCI_VENDOR_ID_DIPIX 0x1246 |
#define PCI_VENDOR_ID_STALLION 0x124d |
#define PCI_DEVICE_ID_STALLION_ECHPCI832 0x0000 |
#define PCI_DEVICE_ID_STALLION_ECHPCI864 0x0002 |
#define PCI_DEVICE_ID_STALLION_EIOPCI 0x0003 |
#define PCI_VENDOR_ID_OPTIBASE 0x1255 |
#define PCI_DEVICE_ID_OPTIBASE_FORGE 0x1110 |
#define PCI_DEVICE_ID_OPTIBASE_FUSION 0x1210 |
#define PCI_DEVICE_ID_OPTIBASE_VPLEX 0x2110 |
#define PCI_DEVICE_ID_OPTIBASE_VPLEXCC 0x2120 |
#define PCI_DEVICE_ID_OPTIBASE_VQUEST 0x2130 |
#define PCI_VENDOR_ID_ESS 0x125d |
#define PCI_DEVICE_ID_ESS_ESS1968 0x1968 |
#define PCI_DEVICE_ID_ESS_AUDIOPCI 0x1969 |
#define PCI_DEVICE_ID_ESS_ESS1978 0x1978 |
#define PCI_VENDOR_ID_SATSAGEM 0x1267 |
#define PCI_DEVICE_ID_SATSAGEM_NICCY 0x1016 |
#define PCI_DEVICE_ID_SATSAGEM_PCR2101 0x5352 |
#define PCI_DEVICE_ID_SATSAGEM_TELSATTURBO 0x5a4b |
#define PCI_VENDOR_ID_HUGHES 0x1273 |
#define PCI_DEVICE_ID_HUGHES_DIRECPC 0x0002 |
#define PCI_VENDOR_ID_ENSONIQ 0x1274 |
#define PCI_DEVICE_ID_ENSONIQ_CT5880 0x5880 |
#define PCI_DEVICE_ID_ENSONIQ_ES1370 0x5000 |
#define PCI_DEVICE_ID_ENSONIQ_ES1371 0x1371 |
#define PCI_VENDOR_ID_ROCKWELL 0x127A |
#define PCI_VENDOR_ID_ITE 0x1283 |
#define PCI_DEVICE_ID_ITE_IT8172G 0x8172 |
#define PCI_DEVICE_ID_ITE_IT8172G_AUDIO 0x0801 |
#define PCI_DEVICE_ID_ITE_8872 0x8872 |
#define PCI_DEVICE_ID_ITE_IT8330G_0 0xe886 |
/* formerly Platform Tech */ |
#define PCI_VENDOR_ID_ESS_OLD 0x1285 |
#define PCI_DEVICE_ID_ESS_ESS0100 0x0100 |
#define PCI_VENDOR_ID_ALTEON 0x12ae |
#define PCI_DEVICE_ID_ALTEON_ACENIC 0x0001 |
#define PCI_VENDOR_ID_USR 0x12B9 |
#define PCI_SUBVENDOR_ID_CONNECT_TECH 0x12c4 |
#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232 0x0001 |
#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232 0x0002 |
#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232 0x0003 |
#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485 0x0004 |
#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_4_4 0x0005 |
#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485 0x0006 |
#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485_2_2 0x0007 |
#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_485 0x0008 |
#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6 0x0009 |
#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1 0x000A |
#define PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1 0x000B |
#define PCI_VENDOR_ID_PICTUREL 0x12c5 |
#define PCI_DEVICE_ID_PICTUREL_PCIVST 0x0081 |
#define PCI_VENDOR_ID_NVIDIA_SGS 0x12d2 |
#define PCI_DEVICE_ID_NVIDIA_SGS_RIVA128 0x0018 |
#define PCI_SUBVENDOR_ID_CHASE_PCIFAST 0x12E0 |
#define PCI_SUBDEVICE_ID_CHASE_PCIFAST4 0x0031 |
#define PCI_SUBDEVICE_ID_CHASE_PCIFAST8 0x0021 |
#define PCI_SUBDEVICE_ID_CHASE_PCIFAST16 0x0011 |
#define PCI_SUBDEVICE_ID_CHASE_PCIFAST16FMC 0x0041 |
#define PCI_SUBVENDOR_ID_CHASE_PCIRAS 0x124D |
#define PCI_SUBDEVICE_ID_CHASE_PCIRAS4 0xF001 |
#define PCI_SUBDEVICE_ID_CHASE_PCIRAS8 0xF010 |
#define PCI_VENDOR_ID_AUREAL 0x12eb |
#define PCI_DEVICE_ID_AUREAL_VORTEX_1 0x0001 |
#define PCI_DEVICE_ID_AUREAL_VORTEX_2 0x0002 |
#define PCI_VENDOR_ID_ELECTRONICDESIGNGMBH 0x12f8 |
#define PCI_DEVICE_ID_LML_33R10 0x8a02 |
#define PCI_VENDOR_ID_CBOARDS 0x1307 |
#define PCI_DEVICE_ID_CBOARDS_DAS1602_16 0x0001 |
#define PCI_VENDOR_ID_SIIG 0x131f |
#define PCI_DEVICE_ID_SIIG_1S_10x_550 0x1000 |
#define PCI_DEVICE_ID_SIIG_1S_10x_650 0x1001 |
#define PCI_DEVICE_ID_SIIG_1S_10x_850 0x1002 |
#define PCI_DEVICE_ID_SIIG_1S1P_10x_550 0x1010 |
#define PCI_DEVICE_ID_SIIG_1S1P_10x_650 0x1011 |
#define PCI_DEVICE_ID_SIIG_1S1P_10x_850 0x1012 |
#define PCI_DEVICE_ID_SIIG_1P_10x 0x1020 |
#define PCI_DEVICE_ID_SIIG_2P_10x 0x1021 |
#define PCI_DEVICE_ID_SIIG_2S_10x_550 0x1030 |
#define PCI_DEVICE_ID_SIIG_2S_10x_650 0x1031 |
#define PCI_DEVICE_ID_SIIG_2S_10x_850 0x1032 |
#define PCI_DEVICE_ID_SIIG_2S1P_10x_550 0x1034 |
#define PCI_DEVICE_ID_SIIG_2S1P_10x_650 0x1035 |
#define PCI_DEVICE_ID_SIIG_2S1P_10x_850 0x1036 |
#define PCI_DEVICE_ID_SIIG_4S_10x_550 0x1050 |
#define PCI_DEVICE_ID_SIIG_4S_10x_650 0x1051 |
#define PCI_DEVICE_ID_SIIG_4S_10x_850 0x1052 |
#define PCI_DEVICE_ID_SIIG_1S_20x_550 0x2000 |
#define PCI_DEVICE_ID_SIIG_1S_20x_650 0x2001 |
#define PCI_DEVICE_ID_SIIG_1S_20x_850 0x2002 |
#define PCI_DEVICE_ID_SIIG_1P_20x 0x2020 |
#define PCI_DEVICE_ID_SIIG_2P_20x 0x2021 |
#define PCI_DEVICE_ID_SIIG_2S_20x_550 0x2030 |
#define PCI_DEVICE_ID_SIIG_2S_20x_650 0x2031 |
#define PCI_DEVICE_ID_SIIG_2S_20x_850 0x2032 |
#define PCI_DEVICE_ID_SIIG_2P1S_20x_550 0x2040 |
#define PCI_DEVICE_ID_SIIG_2P1S_20x_650 0x2041 |
#define PCI_DEVICE_ID_SIIG_2P1S_20x_850 0x2042 |
#define PCI_DEVICE_ID_SIIG_1S1P_20x_550 0x2010 |
#define PCI_DEVICE_ID_SIIG_1S1P_20x_650 0x2011 |
#define PCI_DEVICE_ID_SIIG_1S1P_20x_850 0x2012 |
#define PCI_DEVICE_ID_SIIG_4S_20x_550 0x2050 |
#define PCI_DEVICE_ID_SIIG_4S_20x_650 0x2051 |
#define PCI_DEVICE_ID_SIIG_4S_20x_850 0x2052 |
#define PCI_DEVICE_ID_SIIG_2S1P_20x_550 0x2060 |
#define PCI_DEVICE_ID_SIIG_2S1P_20x_650 0x2061 |
#define PCI_DEVICE_ID_SIIG_2S1P_20x_850 0x2062 |
#define PCI_VENDOR_ID_DOMEX 0x134a |
#define PCI_DEVICE_ID_DOMEX_DMX3191D 0x0001 |
#define PCI_VENDOR_ID_QUATECH 0x135C |
#define PCI_DEVICE_ID_QUATECH_QSC100 0x0010 |
#define PCI_DEVICE_ID_QUATECH_DSC100 0x0020 |
#define PCI_DEVICE_ID_QUATECH_DSC200 0x0030 |
#define PCI_DEVICE_ID_QUATECH_QSC200 0x0040 |
#define PCI_DEVICE_ID_QUATECH_ESC100D 0x0050 |
#define PCI_DEVICE_ID_QUATECH_ESC100M 0x0060 |
#define PCI_VENDOR_ID_SEALEVEL 0x135e |
#define PCI_DEVICE_ID_SEALEVEL_U530 0x7101 |
#define PCI_DEVICE_ID_SEALEVEL_UCOMM2 0x7201 |
#define PCI_DEVICE_ID_SEALEVEL_UCOMM422 0x7402 |
#define PCI_DEVICE_ID_SEALEVEL_UCOMM232 0x7202 |
#define PCI_DEVICE_ID_SEALEVEL_COMM4 0x7401 |
#define PCI_DEVICE_ID_SEALEVEL_COMM8 0x7801 |
#define PCI_VENDOR_ID_HYPERCOPE 0x1365 |
#define PCI_DEVICE_ID_HYPERCOPE_PLX 0x9050 |
#define PCI_SUBDEVICE_ID_HYPERCOPE_OLD_ERGO 0x0104 |
#define PCI_SUBDEVICE_ID_HYPERCOPE_ERGO 0x0106 |
#define PCI_SUBDEVICE_ID_HYPERCOPE_METRO 0x0107 |
#define PCI_SUBDEVICE_ID_HYPERCOPE_CHAMP2 0x0108 |
#define PCI_SUBDEVICE_ID_HYPERCOPE_PLEXUS 0x0109 |
#define PCI_VENDOR_ID_KAWASAKI 0x136b |
#define PCI_DEVICE_ID_MCHIP_KL5A72002 0xff01 |
#define PCI_VENDOR_ID_LMC 0x1376 |
#define PCI_DEVICE_ID_LMC_HSSI 0x0003 |
#define PCI_DEVICE_ID_LMC_DS3 0x0004 |
#define PCI_DEVICE_ID_LMC_SSI 0x0005 |
#define PCI_DEVICE_ID_LMC_T1 0x0006 |
#define PCI_VENDOR_ID_NETGEAR 0x1385 |
#define PCI_DEVICE_ID_NETGEAR_GA620 0x620a |
#define PCI_DEVICE_ID_NETGEAR_GA622 0x622a |
#define PCI_VENDOR_ID_APPLICOM 0x1389 |
#define PCI_DEVICE_ID_APPLICOM_PCIGENERIC 0x0001 |
#define PCI_DEVICE_ID_APPLICOM_PCI2000IBS_CAN 0x0002 |
#define PCI_DEVICE_ID_APPLICOM_PCI2000PFB 0x0003 |
#define PCI_VENDOR_ID_MOXA 0x1393 |
#define PCI_DEVICE_ID_MOXA_C104 0x1040 |
#define PCI_DEVICE_ID_MOXA_C168 0x1680 |
#define PCI_DEVICE_ID_MOXA_CP204J 0x2040 |
#define PCI_DEVICE_ID_MOXA_C218 0x2180 |
#define PCI_DEVICE_ID_MOXA_C320 0x3200 |
#define PCI_VENDOR_ID_CCD 0x1397 |
#define PCI_DEVICE_ID_CCD_2BD0 0x2bd0 |
#define PCI_DEVICE_ID_CCD_B000 0xb000 |
#define PCI_DEVICE_ID_CCD_B006 0xb006 |
#define PCI_DEVICE_ID_CCD_B007 0xb007 |
#define PCI_DEVICE_ID_CCD_B008 0xb008 |
#define PCI_DEVICE_ID_CCD_B009 0xb009 |
#define PCI_DEVICE_ID_CCD_B00A 0xb00a |
#define PCI_DEVICE_ID_CCD_B00B 0xb00b |
#define PCI_DEVICE_ID_CCD_B00C 0xb00c |
#define PCI_DEVICE_ID_CCD_B100 0xb100 |
#define PCI_VENDOR_ID_3WARE 0x13C1 |
#define PCI_DEVICE_ID_3WARE_1000 0x1000 |
#define PCI_VENDOR_ID_IOMEGA 0x13ca |
#define PCI_DEVICE_ID_IOMEGA_BUZ 0x4231 |
#define PCI_VENDOR_ID_ABOCOM 0x13D1 |
#define PCI_DEVICE_ID_ABOCOM_2BD1 0x2BD1 |
#define PCI_VENDOR_ID_CMEDIA 0x13f6 |
#define PCI_DEVICE_ID_CMEDIA_CM8338A 0x0100 |
#define PCI_DEVICE_ID_CMEDIA_CM8338B 0x0101 |
#define PCI_DEVICE_ID_CMEDIA_CM8738 0x0111 |
#define PCI_DEVICE_ID_CMEDIA_CM8738B 0x0112 |
#define PCI_VENDOR_ID_LAVA 0x1407 |
#define PCI_DEVICE_ID_LAVA_DSERIAL 0x0100 /* 2x 16550 */ |
#define PCI_DEVICE_ID_LAVA_QUATRO_A 0x0101 /* 2x 16550, half of 4 port */ |
#define PCI_DEVICE_ID_LAVA_QUATRO_B 0x0102 /* 2x 16550, half of 4 port */ |
#define PCI_DEVICE_ID_LAVA_OCTO_A 0x0180 /* 4x 16550A, half of 8 port */ |
#define PCI_DEVICE_ID_LAVA_OCTO_B 0x0181 /* 4x 16550A, half of 8 port */ |
#define PCI_DEVICE_ID_LAVA_PORT_PLUS 0x0200 /* 2x 16650 */ |
#define PCI_DEVICE_ID_LAVA_QUAD_A 0x0201 /* 2x 16650, half of 4 port */ |
#define PCI_DEVICE_ID_LAVA_QUAD_B 0x0202 /* 2x 16650, half of 4 port */ |
#define PCI_DEVICE_ID_LAVA_SSERIAL 0x0500 /* 1x 16550 */ |
#define PCI_DEVICE_ID_LAVA_PORT_650 0x0600 /* 1x 16650 */ |
#define PCI_DEVICE_ID_LAVA_PARALLEL 0x8000 |
#define PCI_DEVICE_ID_LAVA_DUAL_PAR_A 0x8002 /* The Lava Dual Parallel is */ |
#define PCI_DEVICE_ID_LAVA_DUAL_PAR_B 0x8003 /* two PCI devices on a card */ |
#define PCI_DEVICE_ID_LAVA_BOCA_IOPPAR 0x8800 |
#define PCI_VENDOR_ID_TIMEDIA 0x1409 |
#define PCI_DEVICE_ID_TIMEDIA_1889 0x7168 |
#define PCI_VENDOR_ID_OXSEMI 0x1415 |
#define PCI_DEVICE_ID_OXSEMI_12PCI840 0x8403 |
#define PCI_DEVICE_ID_OXSEMI_16PCI954 0x9501 |
#define PCI_DEVICE_ID_OXSEMI_16PCI95N 0x9511 |
#define PCI_DEVICE_ID_OXSEMI_16PCI954PP 0x9513 |
#define PCI_DEVICE_ID_OXSEMI_16PCI952 0x9521 |
#define PCI_VENDOR_ID_AIRONET 0x14b9 |
#define PCI_DEVICE_ID_AIRONET_4800_1 0x0001 |
#define PCI_DEVICE_ID_AIRONET_4800 0x4500 // values switched? see |
#define PCI_DEVICE_ID_AIRONET_4500 0x4800 // drivers/net/aironet4500_card.c |
#define PCI_VENDOR_ID_TITAN 0x14D2 |
#define PCI_DEVICE_ID_TITAN_010L 0x8001 |
#define PCI_DEVICE_ID_TITAN_100L 0x8010 |
#define PCI_DEVICE_ID_TITAN_110L 0x8011 |
#define PCI_DEVICE_ID_TITAN_200L 0x8020 |
#define PCI_DEVICE_ID_TITAN_210L 0x8021 |
#define PCI_DEVICE_ID_TITAN_400L 0x8040 |
#define PCI_DEVICE_ID_TITAN_800L 0x8080 |
#define PCI_DEVICE_ID_TITAN_100 0xA001 |
#define PCI_DEVICE_ID_TITAN_200 0xA005 |
#define PCI_DEVICE_ID_TITAN_400 0xA003 |
#define PCI_DEVICE_ID_TITAN_800B 0xA004 |
#define PCI_VENDOR_ID_PANACOM 0x14d4 |
#define PCI_DEVICE_ID_PANACOM_QUADMODEM 0x0400 |
#define PCI_DEVICE_ID_PANACOM_DUALMODEM 0x0402 |
#define PCI_VENDOR_ID_AFAVLAB 0x14db |
#define PCI_DEVICE_ID_AFAVLAB_P028 0x2180 |
#define PCI_VENDOR_ID_BROADCOM 0x14e4 |
#define PCI_DEVICE_ID_TIGON3_5700 0x1644 |
#define PCI_DEVICE_ID_TIGON3_5701 0x1645 |
#define PCI_DEVICE_ID_TIGON3_5702 0x1646 |
#define PCI_DEVICE_ID_TIGON3_5703 0x1647 |
#define PCI_DEVICE_ID_TIGON3_5704 0x1648 |
#define PCI_DEVICE_ID_TIGON3_5702FE 0x164d |
#define PCI_DEVICE_ID_TIGON3_5705 0x1653 |
#define PCI_DEVICE_ID_TIGON3_5705_2 0x1654 |
#define PCI_DEVICE_ID_TIGON3_5705M 0x165d |
#define PCI_DEVICE_ID_TIGON3_5705M_2 0x165e |
#define PCI_DEVICE_ID_TIGON3_5782 0x1696 |
#define PCI_DEVICE_ID_TIGON3_5788 0x169c |
#define PCI_DEVICE_ID_TIGON3_5702X 0x16a6 |
#define PCI_DEVICE_ID_TIGON3_5703X 0x16a7 |
#define PCI_DEVICE_ID_TIGON3_5704S 0x16a8 |
#define PCI_DEVICE_ID_TIGON3_5702A3 0x16c6 |
#define PCI_DEVICE_ID_TIGON3_5703A3 0x16c7 |
#define PCI_DEVICE_ID_TIGON3_5901 0x170d |
#define PCI_DEVICE_ID_TIGON3_5901_2 0x170e |
#define PCI_DEVICE_ID_BCM4401 0x4401 |
#define PCI_VENDOR_ID_SYBA 0x1592 |
#define PCI_DEVICE_ID_SYBA_2P_EPP 0x0782 |
#define PCI_DEVICE_ID_SYBA_1P_ECP 0x0783 |
#define PCI_VENDOR_ID_MORETON 0x15aa |
#define PCI_DEVICE_ID_RASTEL_2PORT 0x2000 |
#define PCI_VENDOR_ID_ZOLTRIX 0x15b0 |
#define PCI_DEVICE_ID_ZOLTRIX_2BD0 0x2bd0 |
#define PCI_VENDOR_ID_PDC 0x15e9 |
#define PCI_DEVICE_ID_PDC_1841 0x1841 |
#define PCI_VENDOR_ID_MACROLINK 0x15ed |
#define PCI_DEVICE_ID_MACROLINK_MCCS8 0x1000 |
#define PCI_DEVICE_ID_MACROLINK_MCCS 0x1001 |
#define PCI_DEVICE_ID_MACROLINK_MCCS8H 0x1002 |
#define PCI_DEVICE_ID_MACROLINK_MCCSH 0x1003 |
#define PCI_DEVICE_ID_MACROLINK_MCCR8 0x2000 |
#define PCI_DEVICE_ID_MACROLINK_MCCR 0x2001 |
#define PCI_VENDOR_ID_ALTIMA 0x173b |
#define PCI_DEVICE_ID_ALTIMA_AC1000 0x03e8 |
#define PCI_DEVICE_ID_ALTIMA_AC1001 0x03e9 |
#define PCI_DEVICE_ID_ALTIMA_AC9100 0x03ea |
#define PCI_DEVICE_ID_ALTIMA_AC1003 0x03eb |
#define PCI_VENDOR_ID_SYMPHONY 0x1c1c |
#define PCI_DEVICE_ID_SYMPHONY_101 0x0001 |
#define PCI_VENDOR_ID_TEKRAM 0x1de1 |
#define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29 |
#define PCI_VENDOR_ID_HINT 0x3388 |
#define PCI_DEVICE_ID_HINT_VXPROII_IDE 0x8013 |
#define PCI_VENDOR_ID_3DLABS 0x3d3d |
#define PCI_DEVICE_ID_3DLABS_300SX 0x0001 |
#define PCI_DEVICE_ID_3DLABS_500TX 0x0002 |
#define PCI_DEVICE_ID_3DLABS_DELTA 0x0003 |
#define PCI_DEVICE_ID_3DLABS_PERMEDIA 0x0004 |
#define PCI_DEVICE_ID_3DLABS_MX 0x0006 |
#define PCI_DEVICE_ID_3DLABS_PERMEDIA2 0x0007 |
#define PCI_DEVICE_ID_3DLABS_GAMMA 0x0008 |
#define PCI_DEVICE_ID_3DLABS_PERMEDIA2V 0x0009 |
#define PCI_VENDOR_ID_AVANCE 0x4005 |
#define PCI_DEVICE_ID_AVANCE_ALG2064 0x2064 |
#define PCI_DEVICE_ID_AVANCE_2302 0x2302 |
#define PCI_VENDOR_ID_AKS 0x416c |
#define PCI_DEVICE_ID_AKS_ALADDINCARD 0x0100 |
#define PCI_DEVICE_ID_AKS_CPC 0x0200 |
#define PCI_VENDOR_ID_REDCREEK 0x4916 |
#define PCI_DEVICE_ID_RC45 0x1960 |
#define PCI_VENDOR_ID_NETVIN 0x4a14 |
#define PCI_DEVICE_ID_NETVIN_NV5000SC 0x5000 |
#define PCI_VENDOR_ID_S3 0x5333 |
#define PCI_DEVICE_ID_S3_PLATO_PXS 0x0551 |
#define PCI_DEVICE_ID_S3_ViRGE 0x5631 |
#define PCI_DEVICE_ID_S3_TRIO 0x8811 |
#define PCI_DEVICE_ID_S3_AURORA64VP 0x8812 |
#define PCI_DEVICE_ID_S3_TRIO64UVP 0x8814 |
#define PCI_DEVICE_ID_S3_ViRGE_VX 0x883d |
#define PCI_DEVICE_ID_S3_868 0x8880 |
#define PCI_DEVICE_ID_S3_928 0x88b0 |
#define PCI_DEVICE_ID_S3_864_1 0x88c0 |
#define PCI_DEVICE_ID_S3_864_2 0x88c1 |
#define PCI_DEVICE_ID_S3_964_1 0x88d0 |
#define PCI_DEVICE_ID_S3_964_2 0x88d1 |
#define PCI_DEVICE_ID_S3_968 0x88f0 |
#define PCI_DEVICE_ID_S3_TRIO64V2 0x8901 |
#define PCI_DEVICE_ID_S3_PLATO_PXG 0x8902 |
#define PCI_DEVICE_ID_S3_ViRGE_DXGX 0x8a01 |
#define PCI_DEVICE_ID_S3_ViRGE_GX2 0x8a10 |
#define PCI_DEVICE_ID_S3_ViRGE_MX 0x8c01 |
#define PCI_DEVICE_ID_S3_ViRGE_MXP 0x8c02 |
#define PCI_DEVICE_ID_S3_ViRGE_MXPMV 0x8c03 |
#define PCI_DEVICE_ID_S3_SONICVIBES 0xca00 |
#define PCI_VENDOR_ID_DUNORD 0x5544 |
#define PCI_DEVICE_ID_DUNORD_I3000 0x0001 |
#define PCI_VENDOR_ID_DCI 0x6666 |
#define PCI_DEVICE_ID_DCI_PCCOM4 0x0001 |
#define PCI_DEVICE_ID_DCI_PCCOM8 0x0002 |
#define PCI_VENDOR_ID_DUNORD 0x5544 |
#define PCI_DEVICE_ID_DUNORD_I3000 0x0001 |
#define PCI_VENDOR_ID_GENROCO 0x5555 |
#define PCI_DEVICE_ID_GENROCO_HFP832 0x0003 |
#define PCI_VENDOR_ID_INTEL 0x8086 |
#define PCI_DEVICE_ID_INTEL_21145 0x0039 |
#define PCI_DEVICE_ID_INTEL_82375 0x0482 |
#define PCI_DEVICE_ID_INTEL_82424 0x0483 |
#define PCI_DEVICE_ID_INTEL_82378 0x0484 |
#define PCI_DEVICE_ID_INTEL_82430 0x0486 |
#define PCI_DEVICE_ID_INTEL_82434 0x04a3 |
#define PCI_DEVICE_ID_INTEL_I960 0x0960 |
#define PCI_DEVICE_ID_INTEL_I960RM 0x0962 |
#define PCI_DEVICE_ID_INTEL_82562ET 0x1031 |
#define PCI_DEVICE_ID_INTEL_82801CAM 0x1038 |
#define PCI_DEVICE_ID_INTEL_82815_MC 0x1130 |
#define PCI_DEVICE_ID_INTEL_82815_AB 0x1131 |
#define PCI_DEVICE_ID_INTEL_82815_CGC 0x1132 |
#define PCI_DEVICE_ID_INTEL_82559ER 0x1209 |
#define PCI_DEVICE_ID_INTEL_82092AA_0 0x1221 |
#define PCI_DEVICE_ID_INTEL_82092AA_1 0x1222 |
#define PCI_DEVICE_ID_INTEL_7116 0x1223 |
#define PCI_DEVICE_ID_INTEL_7505_0 0x2550 |
#define PCI_DEVICE_ID_INTEL_7505_1 0x2552 |
#define PCI_DEVICE_ID_INTEL_7205_0 0x255d |
#define PCI_DEVICE_ID_INTEL_82596 0x1226 |
#define PCI_DEVICE_ID_INTEL_82865 0x1227 |
#define PCI_DEVICE_ID_INTEL_82557 0x1229 |
#define PCI_DEVICE_ID_INTEL_82437 0x122d |
#define PCI_DEVICE_ID_INTEL_82371FB_0 0x122e |
#define PCI_DEVICE_ID_INTEL_82371FB_1 0x1230 |
#define PCI_DEVICE_ID_INTEL_82371MX 0x1234 |
#define PCI_DEVICE_ID_INTEL_82437MX 0x1235 |
#define PCI_DEVICE_ID_INTEL_82441 0x1237 |
#define PCI_DEVICE_ID_INTEL_82380FB 0x124b |
#define PCI_DEVICE_ID_INTEL_82439 0x1250 |
#define PCI_DEVICE_ID_INTEL_80960_RP 0x1960 |
#define PCI_DEVICE_ID_INTEL_82840_HB 0x1a21 |
#define PCI_DEVICE_ID_INTEL_82845_HB 0x1a30 |
#define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410 |
#define PCI_DEVICE_ID_INTEL_82801AA_1 0x2411 |
#define PCI_DEVICE_ID_INTEL_82801AA_2 0x2412 |
#define PCI_DEVICE_ID_INTEL_82801AA_3 0x2413 |
#define PCI_DEVICE_ID_INTEL_82801AA_5 0x2415 |
#define PCI_DEVICE_ID_INTEL_82801AA_6 0x2416 |
#define PCI_DEVICE_ID_INTEL_82801AA_8 0x2418 |
#define PCI_DEVICE_ID_INTEL_82801AB_0 0x2420 |
#define PCI_DEVICE_ID_INTEL_82801AB_1 0x2421 |
#define PCI_DEVICE_ID_INTEL_82801AB_2 0x2422 |
#define PCI_DEVICE_ID_INTEL_82801AB_3 0x2423 |
#define PCI_DEVICE_ID_INTEL_82801AB_5 0x2425 |
#define PCI_DEVICE_ID_INTEL_82801AB_6 0x2426 |
#define PCI_DEVICE_ID_INTEL_82801AB_8 0x2428 |
#define PCI_DEVICE_ID_INTEL_82801BA_0 0x2440 |
#define PCI_DEVICE_ID_INTEL_82801BA_1 0x2442 |
#define PCI_DEVICE_ID_INTEL_82801BA_2 0x2443 |
#define PCI_DEVICE_ID_INTEL_82801BA_3 0x2444 |
#define PCI_DEVICE_ID_INTEL_82801BA_4 0x2445 |
#define PCI_DEVICE_ID_INTEL_82801BA_5 0x2446 |
#define PCI_DEVICE_ID_INTEL_82801BA_6 0x2448 |
#define PCI_DEVICE_ID_INTEL_82801BA_7 0x2449 |
#define PCI_DEVICE_ID_INTEL_82801BA_8 0x244a |
#define PCI_DEVICE_ID_INTEL_82801BA_9 0x244b |
#define PCI_DEVICE_ID_INTEL_82801BA_10 0x244c |
#define PCI_DEVICE_ID_INTEL_82801BA_11 0x244e |
#define PCI_DEVICE_ID_INTEL_82801E_0 0x2450 |
#define PCI_DEVICE_ID_INTEL_82801E_2 0x2452 |
#define PCI_DEVICE_ID_INTEL_82801E_3 0x2453 |
#define PCI_DEVICE_ID_INTEL_82801E_9 0x2459 |
#define PCI_DEVICE_ID_INTEL_82801E_11 0x245b |
#define PCI_DEVICE_ID_INTEL_82801E_13 0x245d |
#define PCI_DEVICE_ID_INTEL_82801E_14 0x245e |
#define PCI_DEVICE_ID_INTEL_82801CA_0 0x2480 |
#define PCI_DEVICE_ID_INTEL_82801CA_2 0x2482 |
#define PCI_DEVICE_ID_INTEL_82801CA_3 0x2483 |
#define PCI_DEVICE_ID_INTEL_82801CA_4 0x2484 |
#define PCI_DEVICE_ID_INTEL_82801CA_5 0x2485 |
#define PCI_DEVICE_ID_INTEL_82801CA_6 0x2486 |
#define PCI_DEVICE_ID_INTEL_82801CA_7 0x2487 |
#define PCI_DEVICE_ID_INTEL_82801CA_10 0x248a |
#define PCI_DEVICE_ID_INTEL_82801CA_11 0x248b |
#define PCI_DEVICE_ID_INTEL_82801CA_12 0x248c |
#define PCI_DEVICE_ID_INTEL_82801DB_0 0x24c0 |
#define PCI_DEVICE_ID_INTEL_82801DB_2 0x24c2 |
#define PCI_DEVICE_ID_INTEL_82801DB_3 0x24c3 |
#define PCI_DEVICE_ID_INTEL_82801DB_4 0x24c4 |
#define PCI_DEVICE_ID_INTEL_82801DB_5 0x24c5 |
#define PCI_DEVICE_ID_INTEL_82801DB_6 0x24c6 |
#define PCI_DEVICE_ID_INTEL_82801DB_7 0x24c7 |
#define PCI_DEVICE_ID_INTEL_82801DB_9 0x24c9 |
#define PCI_DEVICE_ID_INTEL_82801DB_10 0x24ca |
#define PCI_DEVICE_ID_INTEL_82801DB_11 0x24cb |
#define PCI_DEVICE_ID_INTEL_82801DB_12 0x24cc |
#define PCI_DEVICE_ID_INTEL_82801DB_13 0x24cd |
#define PCI_DEVICE_ID_INTEL_82801EB_0 0x24d0 |
#define PCI_DEVICE_ID_INTEL_82801EB_1 0x24d1 |
#define PCI_DEVICE_ID_INTEL_82801EB_2 0x24d2 |
#define PCI_DEVICE_ID_INTEL_82801EB_3 0x24d3 |
#define PCI_DEVICE_ID_INTEL_82801EB_4 0x24d4 |
#define PCI_DEVICE_ID_INTEL_82801EB_5 0x24d5 |
#define PCI_DEVICE_ID_INTEL_82801EB_6 0x24d6 |
#define PCI_DEVICE_ID_INTEL_82801EB_7 0x24d7 |
#define PCI_DEVICE_ID_INTEL_82801EB_11 0x24db |
#define PCI_DEVICE_ID_INTEL_82801EB_13 0x24dd |
#define PCI_DEVICE_ID_INTEL_ESB_0 0x25a0 |
#define PCI_DEVICE_ID_INTEL_ESB_1 0x25a1 |
#define PCI_DEVICE_ID_INTEL_ESB_2 0x25a2 |
#define PCI_DEVICE_ID_INTEL_ESB_3 0x25a3 |
#define PCI_DEVICE_ID_INTEL_ESB_31 0x25b0 |
#define PCI_DEVICE_ID_INTEL_ESB_4 0x25a4 |
#define PCI_DEVICE_ID_INTEL_ESB_5 0x25a6 |
#define PCI_DEVICE_ID_INTEL_ESB_6 0x25a7 |
#define PCI_DEVICE_ID_INTEL_ESB_7 0x25a9 |
#define PCI_DEVICE_ID_INTEL_ESB_8 0x25aa |
#define PCI_DEVICE_ID_INTEL_ESB_9 0x25ab |
#define PCI_DEVICE_ID_INTEL_ESB_11 0x25ac |
#define PCI_DEVICE_ID_INTEL_ESB_12 0x25ad |
#define PCI_DEVICE_ID_INTEL_ESB_13 0x25ae |
#define PCI_DEVICE_ID_INTEL_82820_HB 0x2500 |
#define PCI_DEVICE_ID_INTEL_82820_UP_HB 0x2501 |
#define PCI_DEVICE_ID_INTEL_82850_HB 0x2530 |
#define PCI_DEVICE_ID_INTEL_82860_HB 0x2531 |
#define PCI_DEVICE_ID_INTEL_82845G_HB 0x2560 |
#define PCI_DEVICE_ID_INTEL_82845G_IG 0x2562 |
#define PCI_DEVICE_ID_INTEL_82865_HB 0x2570 |
#define PCI_DEVICE_ID_INTEL_82865_IG 0x2572 |
#define PCI_DEVICE_ID_INTEL_82875_HB 0x2578 |
#define PCI_DEVICE_ID_INTEL_82875_IG 0x257b |
#define PCI_DEVICE_ID_INTEL_82855PM_HB 0x3340 |
#define PCI_DEVICE_ID_INTEL_82830_HB 0x3575 |
#define PCI_DEVICE_ID_INTEL_82830_CGC 0x3577 |
#define PCI_DEVICE_ID_INTEL_82855GM_HB 0x3580 |
#define PCI_DEVICE_ID_INTEL_82855GM_IG 0x3582 |
#define PCI_DEVICE_ID_INTEL_80310 0x530d |
#define PCI_DEVICE_ID_INTEL_82371SB_0 0x7000 |
#define PCI_DEVICE_ID_INTEL_82371SB_1 0x7010 |
#define PCI_DEVICE_ID_INTEL_82371SB_2 0x7020 |
#define PCI_DEVICE_ID_INTEL_82437VX 0x7030 |
#define PCI_DEVICE_ID_INTEL_82439TX 0x7100 |
#define PCI_DEVICE_ID_INTEL_82371AB_0 0x7110 |
#define PCI_DEVICE_ID_INTEL_82371AB 0x7111 |
#define PCI_DEVICE_ID_INTEL_82371AB_2 0x7112 |
#define PCI_DEVICE_ID_INTEL_82371AB_3 0x7113 |
#define PCI_DEVICE_ID_INTEL_82810_MC1 0x7120 |
#define PCI_DEVICE_ID_INTEL_82810_IG1 0x7121 |
#define PCI_DEVICE_ID_INTEL_82810_MC3 0x7122 |
#define PCI_DEVICE_ID_INTEL_82810_IG3 0x7123 |
#define PCI_DEVICE_ID_INTEL_82810E_MC 0x7124 |
#define PCI_DEVICE_ID_INTEL_82810E_IG 0x7125 |
#define PCI_DEVICE_ID_INTEL_82443LX_0 0x7180 |
#define PCI_DEVICE_ID_INTEL_82443LX_1 0x7181 |
#define PCI_DEVICE_ID_INTEL_82443BX_0 0x7190 |
#define PCI_DEVICE_ID_INTEL_82443BX_1 0x7191 |
#define PCI_DEVICE_ID_INTEL_82443BX_2 0x7192 |
#define PCI_DEVICE_ID_INTEL_82443MX_0 0x7198 |
#define PCI_DEVICE_ID_INTEL_82443MX_1 0x7199 |
#define PCI_DEVICE_ID_INTEL_82443MX_2 0x719a |
#define PCI_DEVICE_ID_INTEL_82443MX_3 0x719b |
#define PCI_DEVICE_ID_INTEL_82443GX_0 0x71a0 |
#define PCI_DEVICE_ID_INTEL_82443GX_1 0x71a1 |
#define PCI_DEVICE_ID_INTEL_82372FB_0 0x7600 |
#define PCI_DEVICE_ID_INTEL_82372FB_1 0x7601 |
#define PCI_DEVICE_ID_INTEL_82372FB_2 0x7602 |
#define PCI_DEVICE_ID_INTEL_82372FB_3 0x7603 |
#define PCI_DEVICE_ID_INTEL_82454GX 0x84c4 |
#define PCI_DEVICE_ID_INTEL_82450GX 0x84c5 |
#define PCI_DEVICE_ID_INTEL_82451NX 0x84ca |
#define PCI_DEVICE_ID_INTEL_82454NX 0x84cb |
#define PCI_DEVICE_ID_INTEL_84460GX 0x84ea |
#define PCI_VENDOR_ID_COMPUTONE 0x8e0e |
#define PCI_DEVICE_ID_COMPUTONE_IP2EX 0x0291 |
#define PCI_DEVICE_ID_COMPUTONE_PG 0x0302 |
#define PCI_SUBVENDOR_ID_COMPUTONE 0x8e0e |
#define PCI_SUBDEVICE_ID_COMPUTONE_PG4 0x0001 |
#define PCI_SUBDEVICE_ID_COMPUTONE_PG8 0x0002 |
#define PCI_SUBDEVICE_ID_COMPUTONE_PG6 0x0003 |
#define PCI_VENDOR_ID_KTI 0x8e2e |
#define PCI_DEVICE_ID_KTI_ET32P2 0x3000 |
#define PCI_VENDOR_ID_ADAPTEC 0x9004 |
#define PCI_DEVICE_ID_ADAPTEC_7810 0x1078 |
#define PCI_DEVICE_ID_ADAPTEC_7821 0x2178 |
#define PCI_DEVICE_ID_ADAPTEC_38602 0x3860 |
#define PCI_DEVICE_ID_ADAPTEC_7850 0x5078 |
#define PCI_DEVICE_ID_ADAPTEC_7855 0x5578 |
#define PCI_DEVICE_ID_ADAPTEC_5800 0x5800 |
#define PCI_DEVICE_ID_ADAPTEC_3860 0x6038 |
#define PCI_DEVICE_ID_ADAPTEC_1480A 0x6075 |
#define PCI_DEVICE_ID_ADAPTEC_7860 0x6078 |
#define PCI_DEVICE_ID_ADAPTEC_7861 0x6178 |
#define PCI_DEVICE_ID_ADAPTEC_7870 0x7078 |
#define PCI_DEVICE_ID_ADAPTEC_7871 0x7178 |
#define PCI_DEVICE_ID_ADAPTEC_7872 0x7278 |
#define PCI_DEVICE_ID_ADAPTEC_7873 0x7378 |
#define PCI_DEVICE_ID_ADAPTEC_7874 0x7478 |
#define PCI_DEVICE_ID_ADAPTEC_7895 0x7895 |
#define PCI_DEVICE_ID_ADAPTEC_7880 0x8078 |
#define PCI_DEVICE_ID_ADAPTEC_7881 0x8178 |
#define PCI_DEVICE_ID_ADAPTEC_7882 0x8278 |
#define PCI_DEVICE_ID_ADAPTEC_7883 0x8378 |
#define PCI_DEVICE_ID_ADAPTEC_7884 0x8478 |
#define PCI_DEVICE_ID_ADAPTEC_7885 0x8578 |
#define PCI_DEVICE_ID_ADAPTEC_7886 0x8678 |
#define PCI_DEVICE_ID_ADAPTEC_7887 0x8778 |
#define PCI_DEVICE_ID_ADAPTEC_7888 0x8878 |
#define PCI_DEVICE_ID_ADAPTEC_1030 0x8b78 |
#define PCI_VENDOR_ID_ADAPTEC2 0x9005 |
#define PCI_DEVICE_ID_ADAPTEC2_2940U2 0x0010 |
#define PCI_DEVICE_ID_ADAPTEC2_2930U2 0x0011 |
#define PCI_DEVICE_ID_ADAPTEC2_7890B 0x0013 |
#define PCI_DEVICE_ID_ADAPTEC2_7890 0x001f |
#define PCI_DEVICE_ID_ADAPTEC2_3940U2 0x0050 |
#define PCI_DEVICE_ID_ADAPTEC2_3950U2D 0x0051 |
#define PCI_DEVICE_ID_ADAPTEC2_7896 0x005f |
#define PCI_DEVICE_ID_ADAPTEC2_7892A 0x0080 |
#define PCI_DEVICE_ID_ADAPTEC2_7892B 0x0081 |
#define PCI_DEVICE_ID_ADAPTEC2_7892D 0x0083 |
#define PCI_DEVICE_ID_ADAPTEC2_7892P 0x008f |
#define PCI_DEVICE_ID_ADAPTEC2_7899A 0x00c0 |
#define PCI_DEVICE_ID_ADAPTEC2_7899B 0x00c1 |
#define PCI_DEVICE_ID_ADAPTEC2_7899D 0x00c3 |
#define PCI_DEVICE_ID_ADAPTEC2_7899P 0x00cf |
#define PCI_VENDOR_ID_ATRONICS 0x907f |
#define PCI_DEVICE_ID_ATRONICS_2015 0x2015 |
#define PCI_VENDOR_ID_HOLTEK 0x9412 |
#define PCI_DEVICE_ID_HOLTEK_6565 0x6565 |
#define PCI_VENDOR_ID_NETMOS 0x9710 |
#define PCI_DEVICE_ID_NETMOS_9735 0x9735 |
#define PCI_DEVICE_ID_NETMOS_9835 0x9835 |
#define PCI_SUBVENDOR_ID_EXSYS 0xd84d |
#define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014 |
#define PCI_VENDOR_ID_TIGERJET 0xe159 |
#define PCI_DEVICE_ID_TIGERJET_300 0x0001 |
#define PCI_DEVICE_ID_TIGERJET_100 0x0002 |
#define PCI_VENDOR_ID_ARK 0xedd8 |
#define PCI_DEVICE_ID_ARK_STING 0xa091 |
#define PCI_DEVICE_ID_ARK_STINGARK 0xa099 |
#define PCI_DEVICE_ID_ARK_2000MT 0xa0a1 |
#define PCI_VENDOR_ID_MICROGATE 0x13c0 |
#define PCI_DEVICE_ID_MICROGATE_USC 0x0010 |
#define PCI_DEVICE_ID_MICROGATE_SCC 0x0020 |
#define PCI_DEVICE_ID_MICROGATE_SCA 0x0030 |
#define PCI_DEVICE_ID_MICROGATE_USC2 0x0210 |
#define PCI_VENDOR_ID_HINT 0x3388 |
#define PCI_DEVICE_ID_HINT_VXPROII_IDE 0x8013 |
/shark/trunk/drivers/linuxc26/include/linux/tiocl.h |
---|
0,0 → 1,38 |
#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 */ |
#endif /* _LINUX_TIOCL_H */ |
/shark/trunk/drivers/linuxc26/include/linux/dio.h |
---|
0,0 → 1,204 |
/* header file for DIO boards for the HP300 architecture. |
* Maybe this should handle DIO-II later? |
* The general structure of this is vaguely based on how |
* the Amiga port handles Zorro boards. |
* Copyright (C) Peter Maydell 05/1998 <pmaydell@chiark.greenend.org.uk> |
* |
* The board IDs are from the NetBSD kernel, which for once provided |
* helpful comments... |
* |
* This goes with arch/m68k/hp300/dio.c |
*/ |
#ifndef _LINUX_DIO_H |
#define _LINUX_DIO_H |
/* The DIO boards in a system are distinguished by 'select codes' which |
* range from 0-63 (DIO) and 132-255 (DIO-II). |
* The DIO board with select code sc is located at physical address |
* 0x600000 + sc * 0x10000 |
* So DIO cards cover [0x600000-0x800000); the areas [0x200000-0x400000) and |
* [0x800000-0x1000000) are for additional space required by things |
* like framebuffers. [0x400000-0x600000) is for miscellaneous internal I/O. |
* On Linux, this is currently all mapped into the virtual address space |
* at 0xf0000000 on bootup. |
* DIO-II boards are at 0x1000000 + (sc - 132) * 0x400000 |
* which is address range [0x1000000-0x20000000) -- too big to map completely, |
* so currently we just don't handle DIO-II boards. It wouldn't be hard to |
* do with ioremap() though. |
*/ |
#ifdef __KERNEL__ |
/* DIO/DIO-II boards all have the following 8bit registers. |
* These are offsets from the base of the device. |
*/ |
#define DIO_IDOFF 0x01 /* primary device ID */ |
#define DIO_IPLOFF 0x03 /* interrupt priority level */ |
#define DIO_SECIDOFF 0x15 /* secondary device ID */ |
#define DIOII_SIZEOFF 0x101 /* device size, DIO-II only */ |
/* The internal HPIB device is special; this is its physaddr; its select code is 7. |
* The reason why we have to treat it specially is because apparently it's broken: |
* the device ID isn't consistent/reliable. *sigh* |
*/ |
#define DIO_IHPIBADDR 0x47800 |
#define DIO_IHPIBSCODE 7 |
/* If we don't have the internal HPIB defined, then treat select code 7 like |
* any other. If we *do* have internal HPIB, then we just have to assume that |
* select code 7 is the internal HPIB regardless of the ID register :-< |
*/ |
#define CONFIG_IHPIB /* hack hack : not yet a proper config option */ |
#ifdef CONFIG_IHPIB |
#define DIO_ISIHPIB(scode) ((scode) == DIO_IHPIBSCODE) |
#else |
#define DIO_ISIHPIB(scode) 0 |
#endif |
#define DIO_VIRADDRBASE 0xf0000000 /* vir addr where IOspace is mapped */ |
#define DIO_BASE 0x600000 /* start of DIO space */ |
#define DIO_END 0x1000000 /* end of DIO space */ |
#define DIO_DEVSIZE 0x10000 /* size of a DIO device */ |
#define DIOII_BASE 0x01000000 /* start of DIO-II space */ |
#define DIOII_END 0x20000000 /* end of DIO-II space */ |
#define DIOII_DEVSIZE 0x00400000 /* size of a DIO-II device */ |
/* Highest valid select code. If we add DIO-II support this should become |
* 256 for everything except HP320, which only has DIO. |
*/ |
#define DIO_SCMAX 32 |
#define DIOII_SCBASE 132 /* lowest DIO-II select code */ |
#define DIO_SCINHOLE(scode) (((scode) >= 32) && ((scode) < DIOII_SCBASE)) |
/* macros to read device IDs, given base address */ |
#define DIO_ID(baseaddr) in_8((baseaddr) + DIO_IDOFF) |
#define DIO_SECID(baseaddr) in_8((baseaddr) + DIO_SECIDOFF) |
/* extract the interrupt level */ |
#define DIO_IPL(baseaddr) (((in_8((baseaddr) + DIO_IPLOFF) >> 4) & 0x03) + 3) |
/* find the size of a DIO-II board's address space. |
* DIO boards are all fixed length. |
*/ |
#define DIOII_SIZE(baseaddr) ((in_8((baseaddr) + DIOII_SIZEOFF) + 1) * 0x100000) |
/* general purpose macro for both DIO and DIO-II */ |
#define DIO_SIZE(scode, base) (DIO_ISDIOII((scode)) ? DIOII_SIZE((base)) : DIO_DEVSIZE) |
/* The hardware has primary and secondary IDs; we encode these in a single |
* int as PRIMARY ID & (SECONDARY ID << 8). |
* In practice this is only important for framebuffers, |
* and everybody else just sets ID fields equal to the DIO_ID_FOO value. |
*/ |
#define DIO_ENCODE_ID(pr,sec) ((((int)sec & 0xff) << 8) & ((int)pr & 0xff)) |
/* macro to determine whether a given primary ID requires a secondary ID byte */ |
#define DIO_NEEDSSECID(id) ((id) == DIO_ID_FBUFFER) |
/* Now a whole slew of macros giving device IDs and descriptive strings: */ |
#define DIO_ID_DCA0 0x02 /* 98644A serial */ |
#define DIO_DESC_DCA0 "98644A DCA0 serial" |
#define DIO_ID_DCA0REM 0x82 /* 98644A serial */ |
#define DIO_DESC_DCA0REM "98644A DCA0REM serial" |
#define DIO_ID_DCA1 0x42 /* 98644A serial */ |
#define DIO_DESC_DCA1 "98644A DCA1 serial" |
#define DIO_ID_DCA1REM 0xc2 /* 98644A serial */ |
#define DIO_DESC_DCA1REM "98644A DCA1REM serial" |
#define DIO_ID_DCM 0x05 /* 98642A serial MUX */ |
#define DIO_DESC_DCM "98642A DCM serial MUX" |
#define DIO_ID_DCMREM 0x85 /* 98642A serial MUX */ |
#define DIO_DESC_DCMREM "98642A DCMREM serial MUX" |
#define DIO_ID_LAN 0x15 /* 98643A LAN */ |
#define DIO_DESC_LAN "98643A LANCE ethernet" |
#define DIO_ID_FHPIB 0x08 /* 98625A/98625B fast HP-IB */ |
#define DIO_DESC_FHPIB "98625A/98625B fast HPIB" |
#define DIO_ID_NHPIB 0x80 /* 98624A HP-IB (normal ie slow) */ |
#define DIO_DESC_NHPIB "98624A HPIB" |
#define DIO_ID_IHPIB 0x00 /* internal HPIB (not its real ID, it hasn't got one! */ |
#define DIO_DESC_IHPIB "internal HPIB" |
#define DIO_ID_SCSI0 0x07 /* 98625A SCSI */ |
#define DIO_DESC_SCSI0 "98625A SCSI0" |
#define DIO_ID_SCSI1 0x27 /* ditto */ |
#define DIO_DESC_SCSI1 "98625A SCSI1" |
#define DIO_ID_SCSI2 0x47 /* ditto */ |
#define DIO_DESC_SCSI2 "98625A SCSI2" |
#define DIO_ID_SCSI3 0x67 /* ditto */ |
#define DIO_DESC_SCSI3 "98625A SCSI3" |
#define DIO_ID_FBUFFER 0x39 /* framebuffer: flavour is distinguished by secondary ID */ |
#define DIO_DESC_FBUFFER "bitmapped display" |
/* the NetBSD kernel source is a bit unsure as to what these next IDs actually do :-> */ |
#define DIO_ID_MISC0 0x03 /* 98622A */ |
#define DIO_DESC_MISC0 "98622A" |
#define DIO_ID_MISC1 0x04 /* 98623A */ |
#define DIO_DESC_MISC1 "98623A" |
#define DIO_ID_PARALLEL 0x06 /* internal parallel */ |
#define DIO_DESC_PARALLEL "internal parallel" |
#define DIO_ID_MISC2 0x09 /* 98287A keyboard */ |
#define DIO_DESC_MISC2 "98287A keyboard" |
#define DIO_ID_MISC3 0x0a /* HP98635A FP accelerator */ |
#define DIO_DESC_MISC3 "HP98635A FP accelerator" |
#define DIO_ID_MISC4 0x0b /* timer */ |
#define DIO_DESC_MISC4 "timer" |
#define DIO_ID_MISC5 0x12 /* 98640A */ |
#define DIO_DESC_MISC5 "98640A" |
#define DIO_ID_MISC6 0x16 /* 98659A */ |
#define DIO_DESC_MISC6 "98659A" |
#define DIO_ID_MISC7 0x19 /* 237 display */ |
#define DIO_DESC_MISC7 "237 display" |
#define DIO_ID_MISC8 0x1a /* quad-wide card */ |
#define DIO_DESC_MISC8 "quad-wide card" |
#define DIO_ID_MISC9 0x1b /* 98253A */ |
#define DIO_DESC_MISC9 "98253A" |
#define DIO_ID_MISC10 0x1c /* 98627A */ |
#define DIO_DESC_MISC10 "98253A" |
#define DIO_ID_MISC11 0x1d /* 98633A */ |
#define DIO_DESC_MISC11 "98633A" |
#define DIO_ID_MISC12 0x1e /* 98259A */ |
#define DIO_DESC_MISC12 "98259A" |
#define DIO_ID_MISC13 0x1f /* 8741 */ |
#define DIO_DESC_MISC13 "8741" |
#define DIO_ID_VME 0x31 /* 98577A VME adapter */ |
#define DIO_DESC_VME "98577A VME adapter" |
#define DIO_ID_DCL 0x34 /* 98628A serial */ |
#define DIO_DESC_DCL "98628A DCL serial" |
#define DIO_ID_DCLREM 0xb4 /* 98628A serial */ |
#define DIO_DESC_DCLREM "98628A DCLREM serial" |
/* These are the secondary IDs for the framebuffers */ |
#define DIO_ID2_GATORBOX 0x01 /* 98700/98710 "gatorbox" */ |
#define DIO_DESC2_GATORBOX "98700/98710 \"gatorbox\" display" |
#define DIO_ID2_TOPCAT 0x02 /* 98544/98545/98547 "topcat" */ |
#define DIO_DESC2_TOPCAT "98544/98545/98547 \"topcat\" display" |
#define DIO_ID2_RENAISSANCE 0x04 /* 98720/98721 "renaissance" */ |
#define DIO_DESC2_RENAISSANCE "98720/98721 \"renaissance\" display" |
#define DIO_ID2_LRCATSEYE 0x05 /* lowres "catseye" */ |
#define DIO_DESC2_LRCATSEYE "low-res catseye display" |
#define DIO_ID2_HRCCATSEYE 0x06 /* highres colour "catseye" */ |
#define DIO_DESC2_HRCCATSEYE "high-res color catseye display" |
#define DIO_ID2_HRMCATSEYE 0x07 /* highres mono "catseye" */ |
#define DIO_DESC2_HRMCATSEYE "high-res mono catseye display" |
#define DIO_ID2_DAVINCI 0x08 /* 98730/98731 "davinci" */ |
#define DIO_DESC2_DAVINCI "98730/98731 \"davinci\" display" |
#define DIO_ID2_XXXCATSEYE 0x09 /* "catseye" */ |
#define DIO_DESC2_XXXCATSEYE "catseye display" |
#define DIO_ID2_HYPERION 0x0e /* A1096A "hyperion" */ |
#define DIO_DESC2_HYPERION "A1096A \"hyperion\" display" |
#define DIO_ID2_XGENESIS 0x0b /* "x-genesis"; no NetBSD support */ |
#define DIO_DESC2_XGENESIS "\"x-genesis\" display" |
#define DIO_ID2_TIGER 0x0c /* "tiger"; no NetBSD support */ |
#define DIO_DESC2_TIGER "\"tiger\" display" |
#define DIO_ID2_YGENESIS 0x0d /* "y-genesis"; no NetBSD support */ |
#define DIO_DESC2_YGENESIS "\"y-genesis\" display" |
/* if you add new IDs then you should tell dio.c about them so it can |
* identify them... |
*/ |
extern int dio_find(int deviceid); |
extern void *dio_scodetoviraddr(int scode); |
extern int dio_scodetoipl(int scode); |
extern const char *dio_scodetoname(int scode); |
extern void dio_config_board(int scode); |
extern void dio_unconfig_board(int scode); |
#endif /* __KERNEL__ */ |
#endif /* ndef _LINUX_DIO_H */ |
/shark/trunk/drivers/linuxc26/include/linux/bitmap.h |
---|
0,0 → 1,159 |
#ifndef __LINUX_BITMAP_H |
#define __LINUX_BITMAP_H |
#ifndef __ASSEMBLY__ |
#include <linux/config.h> |
#include <linux/compiler.h> |
#include <linux/types.h> |
#include <linux/kernel.h> |
#include <linux/bitops.h> |
#include <linux/string.h> |
static inline int bitmap_empty(const unsigned long *bitmap, int bits) |
{ |
int k, lim = bits/BITS_PER_LONG; |
for (k = 0; k < lim; ++k) |
if (bitmap[k]) |
return 0; |
if (bits % BITS_PER_LONG) |
if (bitmap[k] & ((1UL << (bits % BITS_PER_LONG)) - 1)) |
return 0; |
return 1; |
} |
static inline int bitmap_full(const unsigned long *bitmap, int bits) |
{ |
int k, lim = bits/BITS_PER_LONG; |
for (k = 0; k < lim; ++k) |
if (~bitmap[k]) |
return 0; |
if (bits % BITS_PER_LONG) |
if (~bitmap[k] & ((1UL << (bits % BITS_PER_LONG)) - 1)) |
return 0; |
return 1; |
} |
static inline int bitmap_equal(const unsigned long *bitmap1, |
unsigned long *bitmap2, int bits) |
{ |
int k, lim = bits/BITS_PER_LONG;; |
for (k = 0; k < lim; ++k) |
if (bitmap1[k] != bitmap2[k]) |
return 0; |
if (bits % BITS_PER_LONG) |
if ((bitmap1[k] ^ bitmap2[k]) & |
((1UL << (bits % BITS_PER_LONG)) - 1)) |
return 0; |
return 1; |
} |
static inline void bitmap_complement(unsigned long *bitmap, int bits) |
{ |
int k; |
for (k = 0; k < BITS_TO_LONGS(bits); ++k) |
bitmap[k] = ~bitmap[k]; |
} |
static inline void bitmap_clear(unsigned long *bitmap, int bits) |
{ |
CLEAR_BITMAP((unsigned long *)bitmap, bits); |
} |
static inline void bitmap_fill(unsigned long *bitmap, int bits) |
{ |
memset(bitmap, 0xff, BITS_TO_LONGS(bits)*sizeof(unsigned long)); |
} |
static inline void bitmap_copy(unsigned long *dst, |
const unsigned long *src, int bits) |
{ |
memcpy(dst, src, BITS_TO_LONGS(bits)*sizeof(unsigned long)); |
} |
static inline void bitmap_shift_right(unsigned long *dst, |
const unsigned long *src, int shift, int bits) |
{ |
int k; |
DECLARE_BITMAP(__shr_tmp, bits); |
bitmap_clear(__shr_tmp, bits); |
for (k = 0; k < bits - shift; ++k) |
if (test_bit(k + shift, src)) |
set_bit(k, __shr_tmp); |
bitmap_copy(dst, __shr_tmp, bits); |
} |
static inline void bitmap_shift_left(unsigned long *dst, |
const unsigned long *src, int shift, int bits) |
{ |
int k; |
DECLARE_BITMAP(__shl_tmp, bits); |
bitmap_clear(__shl_tmp, bits); |
for (k = bits; k >= shift; --k) |
if (test_bit(k - shift, src)) |
set_bit(k, __shl_tmp); |
bitmap_copy(dst, __shl_tmp, bits); |
} |
static inline void bitmap_and(unsigned long *dst, const unsigned long *bitmap1, |
const unsigned long *bitmap2, int bits) |
{ |
int k; |
int nr = BITS_TO_LONGS(bits); |
for (k = 0; k < nr; k++) |
dst[k] = bitmap1[k] & bitmap2[k]; |
} |
static inline void bitmap_or(unsigned long *dst, const unsigned long *bitmap1, |
const unsigned long *bitmap2, int bits) |
{ |
int k; |
int nr = BITS_TO_LONGS(bits); |
for (k = 0; k < nr; k++) |
dst[k] = bitmap1[k] | bitmap2[k]; |
} |
#if BITS_PER_LONG == 32 |
static inline int bitmap_weight(const unsigned long *bitmap, int bits) |
{ |
int k, w = 0, lim = bits/BITS_PER_LONG; |
for (k = 0; k < lim; k++) |
w += hweight32(bitmap[k]); |
if (bits % BITS_PER_LONG) |
w += hweight32(bitmap[k] & |
((1UL << (bits % BITS_PER_LONG)) - 1)); |
return w; |
} |
#else |
static inline int bitmap_weight(const unsigned long *bitmap, int bits) |
{ |
int k, w = 0, lim = bits/BITS_PER_LONG; |
for (k = 0; k < lim; k++) |
w += hweight64(bitmap[k]); |
if (bits % BITS_PER_LONG) |
w += hweight64(bitmap[k] & |
((1UL << (bits % BITS_PER_LONG)) - 1)); |
return w; |
} |
#endif |
#endif /* __ASSEMBLY__ */ |
#endif /* __LINUX_BITMAP_H */ |
/shark/trunk/drivers/linuxc26/include/linux/adfs_fs_i.h |
---|
0,0 → 1,24 |
/* |
* linux/include/linux/adfs_fs_i.h |
* |
* Copyright (C) 1997 Russell King |
*/ |
#ifndef _ADFS_FS_I |
#define _ADFS_FS_I |
/* |
* adfs file system inode data in memory |
*/ |
struct adfs_inode_info { |
loff_t mmu_private; |
unsigned long parent_id; /* object id of parent */ |
__u32 loadaddr; /* RISC OS load address */ |
__u32 execaddr; /* RISC OS exec address */ |
unsigned int filetype; /* RISC OS file type */ |
unsigned int attr; /* RISC OS permissions */ |
int stamped:1; /* RISC OS file has date/time */ |
struct inode vfs_inode; |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/sdlapci.h |
---|
0,0 → 1,72 |
/***************************************************************************** |
* sdlapci.h WANPIPE(tm) Multiprotocol WAN Link Driver. |
* Definitions for the SDLA PCI adapter. |
* |
* Author: Gideon Hack <ghack@sangoma.com> |
* |
* Copyright: (c) 1999-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. |
* ============================================================================ |
* Jun 02, 1999 Gideon Hack Initial version. |
*****************************************************************************/ |
#ifndef _SDLAPCI_H |
#define _SDLAPCI_H |
/****** Defines *************************************************************/ |
/* Definitions for identifying and finding S514 PCI adapters */ |
#define V3_VENDOR_ID 0x11B0 /* V3 vendor ID number */ |
#define V3_DEVICE_ID 0x0002 /* V3 device ID number */ |
#define SANGOMA_SUBSYS_VENDOR 0x4753 /* ID for Sangoma */ |
#define PCI_DEV_SLOT_MASK 0x1F /* mask for slot numbering */ |
#define PCI_IRQ_NOT_ALLOCATED 0xFF /* interrupt line for no IRQ */ |
/* Local PCI register offsets */ |
#define PCI_VENDOR_ID_WORD 0x00 /* vendor ID */ |
#define PCI_IO_BASE_DWORD 0x10 /* IO base */ |
#define PCI_MEM_BASE0_DWORD 0x14 /* memory base - apperture 0 */ |
#define PCI_MEM_BASE1_DWORD 0x18 /* memory base - apperture 1 */ |
#define PCI_SUBSYS_VENDOR_WORD 0x2C /* subsystem vendor ID */ |
#define PCI_INT_LINE_BYTE 0x3C /* interrupt line */ |
#define PCI_INT_PIN_BYTE 0x3D /* interrupt pin */ |
#define PCI_MAP0_DWORD 0x40 /* PCI to local bus address 0 */ |
#define PCI_MAP1_DWORD 0x44 /* PCI to local bus address 1 */ |
#define PCI_INT_STATUS 0x48 /* interrupt status */ |
#define PCI_INT_CONFIG 0x4C /* interrupt configuration */ |
/* Local PCI register usage */ |
#define PCI_MEMORY_ENABLE 0x00000003 /* enable PCI memory */ |
#define PCI_CPU_A_MEM_DISABLE 0x00000002 /* disable CPU A memory */ |
#define PCI_CPU_B_MEM_DISABLE 0x00100002 /* disable CPU B memory */ |
#define PCI_ENABLE_IRQ_CPU_A 0x005A0004 /* enable IRQ for CPU A */ |
#define PCI_ENABLE_IRQ_CPU_B 0x005A0008 /* enable IRQ for CPU B */ |
#define PCI_DISABLE_IRQ_CPU_A 0x00000004 /* disable IRQ for CPU A */ |
#define PCI_DISABLE_IRQ_CPU_B 0x00000008 /* disable IRQ for CPU B */ |
/* Setting for the Interrupt Status register */ |
#define IRQ_CPU_A 0x04 /* IRQ for CPU A */ |
#define IRQ_CPU_B 0x08 /* IRQ for CPU B */ |
/* The maximum size of the S514 memory */ |
#define MAX_SIZEOF_S514_MEMORY (256 * 1024) |
/* S514 control register offsets within the memory address space */ |
#define S514_CTRL_REG_BYTE 0x80000 |
/* S514 adapter control bytes */ |
#define S514_CPU_HALT 0x00 |
#define S514_CPU_START 0x01 |
/* The maximum number of S514 adapters supported */ |
#define MAX_S514_CARDS 20 |
#define PCI_CARD_TYPE 0x2E |
#define S514_DUAL_CPU 0x12 |
#define S514_SINGLE_CPU 0x11 |
#endif /* _SDLAPCI_H */ |
/shark/trunk/drivers/linuxc26/include/linux/linux_logo.h |
---|
0,0 → 1,37 |
#ifndef _LINUX_LINUX_LOGO_H |
#define _LINUX_LINUX_LOGO_H |
/* |
* Linux logo to be displayed on boot |
* |
* Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu) |
* Copyright (C) 1996,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz) |
* Copyright (C) 2001 Greg Banks <gnb@alphalink.com.au> |
* Copyright (C) 2001 Jan-Benedict Glaw <jbglaw@lug-owl.de> |
* Copyright (C) 2003 Geert Uytterhoeven <geert@linux-m68k.org> |
* |
* Serial_console ascii image can be any size, |
* but should contain %s to display the version |
*/ |
#include <linux/init.h> |
#define LINUX_LOGO_MONO 1 /* monochrome black/white */ |
#define LINUX_LOGO_VGA16 2 /* 16 colors VGA text palette */ |
#define LINUX_LOGO_CLUT224 3 /* 224 colors */ |
#define LINUX_LOGO_GRAY256 4 /* 256 levels grayscale */ |
struct linux_logo { |
int type; /* one of LINUX_LOGO_* */ |
unsigned int width; |
unsigned int height; |
unsigned int clutsize; /* LINUX_LOGO_CLUT224 only */ |
const unsigned char *clut; /* LINUX_LOGO_CLUT224 only */ |
const unsigned char *data; |
}; |
extern const struct linux_logo *fb_find_logo(int depth); |
#endif /* _LINUX_LINUX_LOGO_H */ |
/shark/trunk/drivers/linuxc26/include/linux/ncp_fs_i.h |
---|
0,0 → 1,33 |
/* |
* ncp_fs_i.h |
* |
* Copyright (C) 1995 Volker Lendecke |
* |
*/ |
#ifndef _LINUX_NCP_FS_I |
#define _LINUX_NCP_FS_I |
#ifdef __KERNEL__ |
/* |
* This is the ncpfs part of the inode structure. This must contain |
* all the information we need to work with an inode after creation. |
*/ |
struct ncp_inode_info { |
__u32 dirEntNum; |
__u32 DosDirNum; |
__u32 volNumber; |
__u32 nwattr; |
struct semaphore open_sem; |
atomic_t opened; |
int access; |
int flags; |
#define NCPI_KLUDGE_SYMLINK 0x0001 |
__u8 file_handle[6]; |
struct inode vfs_inode; |
}; |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_NCP_FS_I */ |
/shark/trunk/drivers/linuxc26/include/linux/filter.h |
---|
0,0 → 1,141 |
/* |
* Linux Socket Filter Data Structures |
*/ |
#ifndef __LINUX_FILTER_H__ |
#define __LINUX_FILTER_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 *filter; |
}; |
#ifdef __KERNEL__ |
struct sk_filter |
{ |
atomic_t refcnt; |
unsigned int len; /* Number of filter blocks */ |
struct sock_filter insns[0]; |
}; |
static inline unsigned int sk_filter_len(struct sk_filter *fp) |
{ |
return fp->len*sizeof(struct sock_filter) + sizeof(*fp); |
} |
#endif |
/* |
* 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_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_MAX 12 |
#define SKF_NET_OFF (-0x100000) |
#define SKF_LL_OFF (-0x200000) |
#ifdef __KERNEL__ |
extern int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen); |
extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk); |
extern int sk_chk_filter(struct sock_filter *filter, int flen); |
#endif /* __KERNEL__ */ |
#endif /* __LINUX_FILTER_H__ */ |
/shark/trunk/drivers/linuxc26/include/linux/if_hippi.h |
---|
0,0 → 1,157 |
/* |
* 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@redhat.com> |
* 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 <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 |
__u32 fixed; |
#endif |
__u32 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)*/ |
__u16 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 */ |
/shark/trunk/drivers/linuxc26/include/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 |
/shark/trunk/drivers/linuxc26/include/linux/if_frad.h |
---|
0,0 → 1,200 |
/* |
* 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 _FRAD_H_ |
#define _FRAD_H_ |
#include <linux/config.h> |
#include <linux/if.h> |
#if defined(CONFIG_DLCI) || defined(CONFIG_DLCI_MODULE) |
/* 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 |
/* FRAD driver uses these to indicate what it did with packet */ |
#define DLCI_RET_OK 0x00 |
#define DLCI_RET_ERR 0x01 |
#define DLCI_RET_DROP 0x02 |
/* 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 |
#ifdef __KERNEL__ |
/* these are the fields of an RFC 1490 header */ |
struct frhdr |
{ |
unsigned char control __attribute__((packed)); |
/* for IP packets, this can be the NLPID */ |
unsigned char pad __attribute__((packed)); |
unsigned char NLPID __attribute__((packed)); |
unsigned char OUI[3] __attribute__((packed)); |
unsigned short PID __attribute__((packed)); |
#define IP_NLPID pad |
}; |
/* see RFC 1490 for the definition of the following */ |
#define FRAD_I_UI 0x03 |
#define FRAD_P_PADDING 0x00 |
#define FRAD_P_Q933 0x08 |
#define FRAD_P_SNAP 0x80 |
#define FRAD_P_CLNP 0x81 |
#define FRAD_P_IP 0xCC |
struct dlci_local |
{ |
struct net_device_stats stats; |
struct net_device *master; |
struct net_device *slave; |
struct dlci_conf config; |
int configured; |
struct list_head list; |
/* callback function */ |
void (*receive)(struct sk_buff *skb, struct net_device *); |
}; |
struct frad_local |
{ |
struct net_device_stats stats; |
/* devices which this FRAD is slaved to */ |
struct net_device *master[CONFIG_DLCI_MAX]; |
short dlci[CONFIG_DLCI_MAX]; |
struct frad_conf config; |
int configured; /* has this device been configured */ |
int initialized; /* mem_start, port, irq set ? */ |
/* callback functions */ |
int (*activate)(struct net_device *, struct net_device *); |
int (*deactivate)(struct net_device *, struct net_device *); |
int (*assoc)(struct net_device *, struct net_device *); |
int (*deassoc)(struct net_device *, struct net_device *); |
int (*dlci_conf)(struct net_device *, struct net_device *, int get); |
/* fields that are used by the Sangoma SDLA cards */ |
struct timer_list timer; |
int type; /* adapter type */ |
int state; /* state of the S502/8 control latch */ |
int buffer; /* current buffer for S508 firmware */ |
}; |
extern void dlci_ioctl_set(int (*hook)(unsigned int, void *)); |
#endif /* __KERNEL__ */ |
#endif /* CONFIG_DLCI || CONFIG_DLCI_MODULE */ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/sysv_fs.h |
---|
0,0 → 1,201 |
#ifndef _LINUX_SYSV_FS_H |
#define _LINUX_SYSV_FS_H |
#if defined(__GNUC__) |
# define __packed2__ __attribute__((packed, aligned(2))) |
#else |
>> I want to scream! << |
#endif |
/* inode numbers are 16 bit */ |
typedef u16 sysv_ino_t; |
/* Block numbers are 24 bit, sometimes stored in 32 bit. |
On Coherent FS, they are always stored in PDP-11 manner: the least |
significant 16 bits come last. */ |
typedef u32 sysv_zone_t; |
/* 0 is non-existent */ |
#define SYSV_BADBL_INO 1 /* inode of bad blocks file */ |
#define SYSV_ROOT_INO 2 /* inode of root directory */ |
/* Xenix super-block data on disk */ |
#define XENIX_NICINOD 100 /* number of inode cache entries */ |
#define XENIX_NICFREE 100 /* number of free block list chunk entries */ |
struct xenix_super_block { |
u16 s_isize; /* index of first data zone */ |
u32 s_fsize __packed2__; /* total number of zones of this fs */ |
/* the start of the free block list: */ |
u16 s_nfree; /* number of free blocks in s_free, <= XENIX_NICFREE */ |
u32 s_free[XENIX_NICFREE]; /* first free block list chunk */ |
/* the cache of free inodes: */ |
u16 s_ninode; /* number of free inodes in s_inode, <= XENIX_NICINOD */ |
sysv_ino_t s_inode[XENIX_NICINOD]; /* some free inodes */ |
/* locks, not used by Linux: */ |
char s_flock; /* lock during free block list manipulation */ |
char s_ilock; /* lock during inode cache manipulation */ |
char s_fmod; /* super-block modified flag */ |
char s_ronly; /* flag whether fs is mounted read-only */ |
u32 s_time __packed2__; /* time of last super block update */ |
u32 s_tfree __packed2__; /* total number of free zones */ |
u16 s_tinode; /* total number of free inodes */ |
s16 s_dinfo[4]; /* device information ?? */ |
char s_fname[6]; /* file system volume name */ |
char s_fpack[6]; /* file system pack name */ |
char s_clean; /* set to 0x46 when filesystem is properly unmounted */ |
char s_fill[371]; |
s32 s_magic; /* version of file system */ |
s32 s_type; /* type of file system: 1 for 512 byte blocks |
2 for 1024 byte blocks |
3 for 2048 byte blocks */ |
}; |
/* |
* SystemV FS comes in two variants: |
* sysv2: System V Release 2 (e.g. Microport), structure elements aligned(2). |
* sysv4: System V Release 4 (e.g. Consensys), structure elements aligned(4). |
*/ |
#define SYSV_NICINOD 100 /* number of inode cache entries */ |
#define SYSV_NICFREE 50 /* number of free block list chunk entries */ |
/* SystemV4 super-block data on disk */ |
struct sysv4_super_block { |
u16 s_isize; /* index of first data zone */ |
u16 s_pad0; |
u32 s_fsize; /* total number of zones of this fs */ |
/* the start of the free block list: */ |
u16 s_nfree; /* number of free blocks in s_free, <= SYSV_NICFREE */ |
u16 s_pad1; |
u32 s_free[SYSV_NICFREE]; /* first free block list chunk */ |
/* the cache of free inodes: */ |
u16 s_ninode; /* number of free inodes in s_inode, <= SYSV_NICINOD */ |
u16 s_pad2; |
sysv_ino_t s_inode[SYSV_NICINOD]; /* some free inodes */ |
/* locks, not used by Linux: */ |
char s_flock; /* lock during free block list manipulation */ |
char s_ilock; /* lock during inode cache manipulation */ |
char s_fmod; /* super-block modified flag */ |
char s_ronly; /* flag whether fs is mounted read-only */ |
u32 s_time; /* time of last super block update */ |
s16 s_dinfo[4]; /* device information ?? */ |
u32 s_tfree; /* total number of free zones */ |
u16 s_tinode; /* total number of free inodes */ |
u16 s_pad3; |
char s_fname[6]; /* file system volume name */ |
char s_fpack[6]; /* file system pack name */ |
s32 s_fill[12]; |
s32 s_state; /* file system state: 0x7c269d38-s_time means clean */ |
s32 s_magic; /* version of file system */ |
s32 s_type; /* type of file system: 1 for 512 byte blocks |
2 for 1024 byte blocks */ |
}; |
/* SystemV2 super-block data on disk */ |
struct sysv2_super_block { |
u16 s_isize; /* index of first data zone */ |
u32 s_fsize __packed2__; /* total number of zones of this fs */ |
/* the start of the free block list: */ |
u16 s_nfree; /* number of free blocks in s_free, <= SYSV_NICFREE */ |
u32 s_free[SYSV_NICFREE]; /* first free block list chunk */ |
/* the cache of free inodes: */ |
u16 s_ninode; /* number of free inodes in s_inode, <= SYSV_NICINOD */ |
sysv_ino_t s_inode[SYSV_NICINOD]; /* some free inodes */ |
/* locks, not used by Linux: */ |
char s_flock; /* lock during free block list manipulation */ |
char s_ilock; /* lock during inode cache manipulation */ |
char s_fmod; /* super-block modified flag */ |
char s_ronly; /* flag whether fs is mounted read-only */ |
u32 s_time __packed2__; /* time of last super block update */ |
s16 s_dinfo[4]; /* device information ?? */ |
u32 s_tfree __packed2__; /* total number of free zones */ |
u16 s_tinode; /* total number of free inodes */ |
char s_fname[6]; /* file system volume name */ |
char s_fpack[6]; /* file system pack name */ |
s32 s_fill[14]; |
s32 s_state; /* file system state: 0xcb096f43 means clean */ |
s32 s_magic; /* version of file system */ |
s32 s_type; /* type of file system: 1 for 512 byte blocks |
2 for 1024 byte blocks */ |
}; |
/* V7 super-block data on disk */ |
#define V7_NICINOD 100 /* number of inode cache entries */ |
#define V7_NICFREE 50 /* number of free block list chunk entries */ |
struct v7_super_block { |
u16 s_isize; /* index of first data zone */ |
u32 s_fsize __packed2__; /* total number of zones of this fs */ |
/* the start of the free block list: */ |
u16 s_nfree; /* number of free blocks in s_free, <= V7_NICFREE */ |
u32 s_free[V7_NICFREE]; /* first free block list chunk */ |
/* the cache of free inodes: */ |
u16 s_ninode; /* number of free inodes in s_inode, <= V7_NICINOD */ |
sysv_ino_t s_inode[V7_NICINOD]; /* some free inodes */ |
/* locks, not used by Linux or V7: */ |
char s_flock; /* lock during free block list manipulation */ |
char s_ilock; /* lock during inode cache manipulation */ |
char s_fmod; /* super-block modified flag */ |
char s_ronly; /* flag whether fs is mounted read-only */ |
u32 s_time __packed2__; /* time of last super block update */ |
/* the following fields are not maintained by V7: */ |
u32 s_tfree __packed2__; /* total number of free zones */ |
u16 s_tinode; /* total number of free inodes */ |
u16 s_m; /* interleave factor */ |
u16 s_n; /* interleave factor */ |
char s_fname[6]; /* file system name */ |
char s_fpack[6]; /* file system pack name */ |
}; |
/* Coherent super-block data on disk */ |
#define COH_NICINOD 100 /* number of inode cache entries */ |
#define COH_NICFREE 64 /* number of free block list chunk entries */ |
struct coh_super_block { |
u16 s_isize; /* index of first data zone */ |
u32 s_fsize __packed2__; /* total number of zones of this fs */ |
/* the start of the free block list: */ |
u16 s_nfree; /* number of free blocks in s_free, <= COH_NICFREE */ |
u32 s_free[COH_NICFREE] __packed2__; /* first free block list chunk */ |
/* the cache of free inodes: */ |
u16 s_ninode; /* number of free inodes in s_inode, <= COH_NICINOD */ |
sysv_ino_t s_inode[COH_NICINOD]; /* some free inodes */ |
/* locks, not used by Linux: */ |
char s_flock; /* lock during free block list manipulation */ |
char s_ilock; /* lock during inode cache manipulation */ |
char s_fmod; /* super-block modified flag */ |
char s_ronly; /* flag whether fs is mounted read-only */ |
u32 s_time __packed2__; /* time of last super block update */ |
u32 s_tfree __packed2__; /* total number of free zones */ |
u16 s_tinode; /* total number of free inodes */ |
u16 s_interleave_m; /* interleave factor */ |
u16 s_interleave_n; |
char s_fname[6]; /* file system volume name */ |
char s_fpack[6]; /* file system pack name */ |
u32 s_unique; /* zero, not used */ |
}; |
/* SystemV/Coherent inode data on disk */ |
struct sysv_inode { |
u16 i_mode; |
u16 i_nlink; |
u16 i_uid; |
u16 i_gid; |
u32 i_size; |
u8 i_data[3*(10+1+1+1)]; |
u8 i_gen; |
u32 i_atime; /* time of last access */ |
u32 i_mtime; /* time of last modification */ |
u32 i_ctime; /* time of creation */ |
}; |
/* SystemV/Coherent directory entry on disk */ |
#define SYSV_NAMELEN 14 /* max size of name in struct sysv_dir_entry */ |
struct sysv_dir_entry { |
sysv_ino_t inode; |
char name[SYSV_NAMELEN]; /* up to 14 characters, the rest are zeroes */ |
}; |
#define SYSV_DIRSIZE sizeof(struct sysv_dir_entry) /* size of every directory entry */ |
#endif /* _LINUX_SYSV_FS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/ipmi.h |
---|
0,0 → 1,516 |
/* |
* 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 __LINUX_IPMI_H |
#define __LINUX_IPMI_H |
#include <linux/ipmi_msgdefs.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; |
}; |
/* |
* 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 |
/* |
* 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 *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. |
*/ |
#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 */ |
/* Note that async events and received commands do not have a completion |
code as the first byte of the incoming data, unlike a response. */ |
#ifdef __KERNEL__ |
/* |
* The in-kernel interface. |
*/ |
#include <linux/list.h> |
/* Opaque type for a IPMI message user. One of these is needed to |
send and receive messages. */ |
typedef struct ipmi_user *ipmi_user_t; |
/* |
* Stuff coming from the receive interface comes as one of these. |
* They are allocated, the receiver must free them with |
* ipmi_free_recv_msg() when done with the message. The link is not |
* used after the message is delivered, so the upper layer may use the |
* link to build a linked list, if it likes. |
*/ |
struct ipmi_recv_msg |
{ |
struct list_head link; |
/* The type of message as defined in the "Receive Types" |
defines above. */ |
int recv_type; |
ipmi_user_t user; |
struct ipmi_addr addr; |
long msgid; |
struct ipmi_msg msg; |
/* Call this when done with the message. It will presumably free |
the message and do any other necessary cleanup. */ |
void (*done)(struct ipmi_recv_msg *msg); |
/* Place-holder for the data, don't make any assumptions about |
the size or existance of this, since it may change. */ |
unsigned char msg_data[IPMI_MAX_MSG_LENGTH]; |
}; |
/* Allocate and free the receive message. */ |
static inline void ipmi_free_recv_msg(struct ipmi_recv_msg *msg) |
{ |
msg->done(msg); |
} |
struct ipmi_recv_msg *ipmi_alloc_recv_msg(void); |
struct ipmi_user_hndl |
{ |
/* Routine type to call when a message needs to be routed to |
the upper layer. This will be called with some locks held, |
the only IPMI routines that can be called are ipmi_request |
and the alloc/free operations. */ |
void (*ipmi_recv_hndl)(struct ipmi_recv_msg *msg, |
void *handler_data); |
/* Called when the interface detects a watchdog pre-timeout. If |
this is NULL, it will be ignored for the user. */ |
void (*ipmi_watchdog_pretimeout)(void *handler_data); |
}; |
/* Create a new user of the IPMI layer on the given interface number. */ |
int ipmi_create_user(unsigned int if_num, |
struct ipmi_user_hndl *handler, |
void *handler_data, |
ipmi_user_t *user); |
/* Destroy the given user of the IPMI layer. */ |
int ipmi_destroy_user(ipmi_user_t user); |
/* Get the IPMI version of the BMC we are talking to. */ |
void ipmi_get_version(ipmi_user_t user, |
unsigned char *major, |
unsigned char *minor); |
/* 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. */ |
void ipmi_set_my_address(ipmi_user_t user, |
unsigned char address); |
unsigned char ipmi_get_my_address(ipmi_user_t user); |
void ipmi_set_my_LUN(ipmi_user_t user, |
unsigned char LUN); |
unsigned char ipmi_get_my_LUN(ipmi_user_t user); |
/* |
* Send a command request from the given user. The address is the |
* proper address for the channel type. If this is a command, then |
* the message response comes back, the receive handler for this user |
* will be called with the given msgid value in the recv msg. If this |
* is a response to a command, then the msgid will be used as the |
* sequence number for the response (truncated if necessary), so when |
* sending a response you should use the sequence number you received |
* in the msgid field of the received command. If the priority is > |
* 0, the message will go into a high-priority queue and be sent |
* first. Otherwise, it goes into a normal-priority queue. |
*/ |
int ipmi_request(ipmi_user_t user, |
struct ipmi_addr *addr, |
long msgid, |
struct ipmi_msg *msg, |
int priority); |
/* |
* Like ipmi_request, but lets you specify the slave return address. |
*/ |
int ipmi_request_with_source(ipmi_user_t user, |
struct ipmi_addr *addr, |
long msgid, |
struct ipmi_msg *msg, |
int priority, |
unsigned char source_address, |
unsigned char source_lun); |
/* |
* Like ipmi_request, but with messages supplied. This will not |
* allocate any memory, and the messages may be statically allocated |
* (just make sure to do the "done" handling on them). Note that this |
* is primarily for the watchdog timer, since it should be able to |
* send messages even if no memory is available. This is subject to |
* change as the system changes, so don't use it unless you REALLY |
* have to. |
*/ |
int ipmi_request_supply_msgs(ipmi_user_t user, |
struct ipmi_addr *addr, |
long msgid, |
struct ipmi_msg *msg, |
void *supplied_smi, |
struct ipmi_recv_msg *supplied_recv, |
int priority); |
/* |
* When commands come in to the SMS, the user can register to receive |
* them. Only one user can be listening on a specific netfn/cmd pair |
* at a time, you will get an EBUSY error if the command is already |
* registered. If a command is received that does not have a user |
* registered, the driver will automatically return the proper |
* error. |
*/ |
int ipmi_register_for_cmd(ipmi_user_t user, |
unsigned char netfn, |
unsigned char cmd); |
int ipmi_unregister_for_cmd(ipmi_user_t user, |
unsigned char netfn, |
unsigned char cmd); |
/* |
* When the user is created, it will not receive IPMI events by |
* default. The user must set this to TRUE to get incoming events. |
* The first user that sets this to TRUE will receive all events that |
* have been queued while no one was waiting for events. |
*/ |
int ipmi_set_gets_events(ipmi_user_t user, int val); |
/* |
* Register the given user to handle all received IPMI commands. This |
* will fail if anyone is registered as a command receiver or if |
* another is already registered to receive all commands. NOTE THAT |
* THIS IS FOR EMULATION USERS ONLY, DO NOT USER THIS FOR NORMAL |
* STUFF. |
*/ |
int ipmi_register_all_cmd_rcvr(ipmi_user_t user); |
int ipmi_unregister_all_cmd_rcvr(ipmi_user_t user); |
/* |
* Called when a new SMI is registered. This will also be called on |
* every existing interface when a new watcher is registered with |
* ipmi_smi_watcher_register(). |
*/ |
struct ipmi_smi_watcher |
{ |
struct list_head link; |
/* These two are called with read locks held for the interface |
the watcher list. So you can add and remove users from the |
IPMI interface, send messages, etc., but you cannot add |
or remove SMI watchers or SMI interfaces. */ |
void (*new_smi)(int if_num); |
void (*smi_gone)(int if_num); |
}; |
int ipmi_smi_watcher_register(struct ipmi_smi_watcher *watcher); |
int ipmi_smi_watcher_unregister(struct ipmi_smi_watcher *watcher); |
/* The following are various helper functions for dealing with IPMI |
addresses. */ |
/* Return the maximum length of an IPMI address given it's type. */ |
unsigned int ipmi_addr_length(int addr_type); |
/* Validate that the given IPMI address is valid. */ |
int ipmi_validate_addr(struct ipmi_addr *addr, int len); |
/* Return 1 if the given addresses are equal, 0 if not. */ |
int ipmi_addr_equal(struct ipmi_addr *addr1, struct ipmi_addr *addr2); |
#endif /* __KERNEL__ */ |
/* |
* 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 *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 received from the interface are this format. */ |
struct ipmi_recv |
{ |
int recv_type; /* Is this a command, response or an |
asyncronous event. */ |
unsigned char *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) |
/* |
* 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. |
*/ |
#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) |
#endif /* __LINUX_IPMI_H */ |
/shark/trunk/drivers/linuxc26/include/linux/if_bonding.h |
---|
0,0 → 1,117 |
/* |
* 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. |
*/ |
#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 1 |
/* |
* 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_MULTICAST_DISABLED 0 |
#define BOND_MULTICAST_ACTIVE 1 |
#define BOND_MULTICAST_ALL 2 |
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]; |
char link; |
char 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: |
*/ |
/shark/trunk/drivers/linuxc26/include/linux/shmem_fs.h |
---|
0,0 → 1,35 |
#ifndef __SHMEM_FS_H |
#define __SHMEM_FS_H |
#include <linux/swap.h> |
/* inode in-kernel data */ |
#define SHMEM_NR_DIRECT 16 |
struct shmem_inode_info { |
spinlock_t lock; |
unsigned long next_index; |
swp_entry_t i_direct[SHMEM_NR_DIRECT]; /* for the first blocks */ |
struct page *i_indirect; /* indirect blocks */ |
unsigned long alloced; /* data pages allocated to file */ |
unsigned long swapped; /* subtotal assigned to swap */ |
unsigned long flags; |
struct list_head list; |
struct inode vfs_inode; |
}; |
struct shmem_sb_info { |
unsigned long max_blocks; /* How many blocks are allowed */ |
unsigned long free_blocks; /* How many are left for allocation */ |
unsigned long max_inodes; /* How many inodes are allowed */ |
unsigned long free_inodes; /* How many are left for allocation */ |
spinlock_t stat_lock; |
}; |
static inline struct shmem_inode_info *SHMEM_I(struct inode *inode) |
{ |
return container_of(inode, struct shmem_inode_info, vfs_inode); |
} |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/umem.h |
---|
0,0 → 1,138 |
/* |
* This file contains defines for the |
* Micro Memory MM5415 |
* family PCI Memory Module with Battery Backup. |
* |
* Copyright Micro Memory INC 2001. All rights reserved. |
* Release under the terms of the GNU GENERAL PUBLIC LICENSE version 2. |
* See the file COPYING. |
*/ |
#ifndef _DRIVERS_BLOCK_MM_H |
#define _DRIVERS_BLOCK_MM_H |
#define IRQ_TIMEOUT (1 * HZ) |
/* CSR register definition */ |
#define MEMCTRLSTATUS_MAGIC 0x00 |
#define MM_MAGIC_VALUE (unsigned char)0x59 |
#define MEMCTRLSTATUS_BATTERY 0x04 |
#define BATTERY_1_DISABLED 0x01 |
#define BATTERY_1_FAILURE 0x02 |
#define BATTERY_2_DISABLED 0x04 |
#define BATTERY_2_FAILURE 0x08 |
#define MEMCTRLSTATUS_MEMORY 0x07 |
#define MEM_128_MB 0xfe |
#define MEM_256_MB 0xfc |
#define MEM_512_MB 0xf8 |
#define MEM_1_GB 0xf0 |
#define MEM_2_GB 0xe0 |
#define MEMCTRLCMD_LEDCTRL 0x08 |
#define LED_REMOVE 2 |
#define LED_FAULT 4 |
#define LED_POWER 6 |
#define LED_FLIP 255 |
#define LED_OFF 0x00 |
#define LED_ON 0x01 |
#define LED_FLASH_3_5 0x02 |
#define LED_FLASH_7_0 0x03 |
#define LED_POWER_ON 0x00 |
#define LED_POWER_OFF 0x01 |
#define USER_BIT1 0x01 |
#define USER_BIT2 0x02 |
#define MEMORY_INITIALIZED USER_BIT1 |
#define MEMCTRLCMD_ERRCTRL 0x0C |
#define EDC_NONE_DEFAULT 0x00 |
#define EDC_NONE 0x01 |
#define EDC_STORE_READ 0x02 |
#define EDC_STORE_CORRECT 0x03 |
#define MEMCTRLCMD_ERRCNT 0x0D |
#define MEMCTRLCMD_ERRSTATUS 0x0E |
#define ERROR_DATA_LOG 0x20 |
#define ERROR_ADDR_LOG 0x28 |
#define ERROR_COUNT 0x3D |
#define ERROR_SYNDROME 0x3E |
#define ERROR_CHECK 0x3F |
#define DMA_PCI_ADDR 0x40 |
#define DMA_LOCAL_ADDR 0x48 |
#define DMA_TRANSFER_SIZE 0x50 |
#define DMA_DESCRIPTOR_ADDR 0x58 |
#define DMA_SEMAPHORE_ADDR 0x60 |
#define DMA_STATUS_CTRL 0x68 |
#define DMASCR_GO 0x00001 |
#define DMASCR_TRANSFER_READ 0x00002 |
#define DMASCR_CHAIN_EN 0x00004 |
#define DMASCR_SEM_EN 0x00010 |
#define DMASCR_DMA_COMP_EN 0x00020 |
#define DMASCR_CHAIN_COMP_EN 0x00040 |
#define DMASCR_ERR_INT_EN 0x00080 |
#define DMASCR_PARITY_INT_EN 0x00100 |
#define DMASCR_ANY_ERR 0x00800 |
#define DMASCR_MBE_ERR 0x01000 |
#define DMASCR_PARITY_ERR_REP 0x02000 |
#define DMASCR_PARITY_ERR_DET 0x04000 |
#define DMASCR_SYSTEM_ERR_SIG 0x08000 |
#define DMASCR_TARGET_ABT 0x10000 |
#define DMASCR_MASTER_ABT 0x20000 |
#define DMASCR_DMA_COMPLETE 0x40000 |
#define DMASCR_CHAIN_COMPLETE 0x80000 |
/* |
3.SOME PCs HAVE HOST BRIDGES WHICH APPARENTLY DO NOT CORRECTLY HANDLE |
READ-LINE (0xE) OR READ-MULTIPLE (0xC) PCI COMMAND CODES DURING DMA |
TRANSFERS. IN OTHER SYSTEMS THESE COMMAND CODES WILL CAUSE THE HOST BRIDGE |
TO ALLOW LONGER BURSTS DURING DMA READ OPERATIONS. THE UPPER FOUR BITS |
(31..28) OF THE DMA CSR HAVE BEEN MADE PROGRAMMABLE, SO THAT EITHER A 0x6, |
AN 0xE OR A 0xC CAN BE WRITTEN TO THEM TO SET THE COMMAND CODE USED DURING |
DMA READ OPERATIONS. |
*/ |
#define DMASCR_READ 0x60000000 |
#define DMASCR_READLINE 0xE0000000 |
#define DMASCR_READMULTI 0xC0000000 |
#define DMASCR_ERROR_MASK (DMASCR_MASTER_ABT | DMASCR_TARGET_ABT | DMASCR_SYSTEM_ERR_SIG | DMASCR_PARITY_ERR_DET | DMASCR_MBE_ERR | DMASCR_ANY_ERR) |
#define DMASCR_HARD_ERROR (DMASCR_MASTER_ABT | DMASCR_TARGET_ABT | DMASCR_SYSTEM_ERR_SIG | DMASCR_PARITY_ERR_DET | DMASCR_MBE_ERR) |
#define WINDOWMAP_WINNUM 0x7B |
#define DMA_READ_FROM_HOST 0 |
#define DMA_WRITE_TO_HOST 1 |
struct mm_dma_desc { |
u64 pci_addr; |
u64 local_addr; |
u32 transfer_size; |
u32 zero1; |
u64 next_desc_addr; |
u64 sem_addr; |
u32 control_bits; |
u32 zero2; |
dma_addr_t data_dma_handle; |
/* Copy of the bits */ |
u64 sem_control_bits; |
} __attribute__((aligned(8))); |
#define PCI_VENDOR_ID_MICRO_MEMORY 0x1332 |
#define PCI_DEVICE_ID_MICRO_MEMORY_5415CN 0x5415 |
#define PCI_DEVICE_ID_MICRO_MEMORY_5425CN 0x5425 |
#define PCI_DEVICE_ID_MICRO_MEMORY_6155 0x6155 |
/* bits for card->flags */ |
#define UM_FLAG_DMA_IN_REGS 1 |
#define UM_FLAG_NO_BYTE_STATUS 2 |
#define UM_FLAG_NO_BATTREG 4 |
#define UM_FLAG_NO_BATT 8 |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/dqblk_v2.h |
---|
0,0 → 1,20 |
/* |
* Definitions of structures for vfsv0 quota format |
*/ |
#ifndef _LINUX_DQBLK_V2_H |
#define _LINUX_DQBLK_V2_H |
#include <linux/types.h> |
/* id numbers of quota format */ |
#define QFMT_VFS_V0 2 |
/* Inmemory copy of version specific information */ |
struct v2_mem_dqinfo { |
unsigned int dqi_blocks; |
unsigned int dqi_free_blk; |
unsigned int dqi_free_entry; |
}; |
#endif /* _LINUX_DQBLK_V2_H */ |
/shark/trunk/drivers/linuxc26/include/linux/ipmi_msgdefs.h |
---|
0,0 → 1,68 |
/* |
* 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_CLEAR_MSG_FLAGS_CMD 0x30 |
#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_NETFN_STORAGE_REQUEST 0x0a |
#define IPMI_NETFN_STORAGE_RESPONSE 0x0b |
#define IPMI_ADD_SEL_ENTRY_CMD 0x44 |
/* The default slave address */ |
#define IPMI_BMC_SLAVE_ADDR 0x20 |
#define IPMI_MAX_MSG_LENGTH 80 |
#define IPMI_CC_NO_ERROR 0 |
#endif /* __LINUX_IPMI_MSGDEFS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/mm_inline.h |
---|
0,0 → 1,40 |
static inline void |
add_page_to_active_list(struct zone *zone, struct page *page) |
{ |
list_add(&page->lru, &zone->active_list); |
zone->nr_active++; |
} |
static inline void |
add_page_to_inactive_list(struct zone *zone, struct page *page) |
{ |
list_add(&page->lru, &zone->inactive_list); |
zone->nr_inactive++; |
} |
static inline void |
del_page_from_active_list(struct zone *zone, struct page *page) |
{ |
list_del(&page->lru); |
zone->nr_active--; |
} |
static inline void |
del_page_from_inactive_list(struct zone *zone, struct page *page) |
{ |
list_del(&page->lru); |
zone->nr_inactive--; |
} |
static inline void |
del_page_from_lru(struct zone *zone, struct page *page) |
{ |
list_del(&page->lru); |
if (PageActive(page)) { |
ClearPageActive(page); |
zone->nr_active--; |
} else { |
zone->nr_inactive--; |
} |
} |
/shark/trunk/drivers/linuxc26/include/linux/dcache.h |
---|
0,0 → 1,316 |
#ifndef __LINUX_DCACHE_H |
#define __LINUX_DCACHE_H |
#ifdef __KERNEL__ |
#include <asm/atomic.h> |
#include <linux/list.h> |
#include <linux/spinlock.h> |
#include <linux/cache.h> |
#include <linux/rcupdate.h> |
#include <asm/bug.h> |
struct nameidata; |
struct vfsmount; |
/* |
* linux/include/linux/dcache.h |
* |
* Dirent cache data structures |
* |
* (C) Copyright 1997 Thomas Schoebel-Theuer, |
* with heavy changes by Linus Torvalds |
*/ |
#define IS_ROOT(x) ((x) == (x)->d_parent) |
/* |
* "quick string" -- eases parameter passing, but more importantly |
* saves "metadata" about the string (ie length and the hash). |
*/ |
struct qstr { |
const unsigned char * name; |
unsigned int len; |
unsigned int hash; |
char name_str[0]; |
}; |
struct dentry_stat_t { |
int nr_dentry; |
int nr_unused; |
int age_limit; /* age in seconds */ |
int want_pages; /* pages requested by system */ |
int dummy[2]; |
}; |
extern struct dentry_stat_t dentry_stat; |
/* Name hashing routines. Initial hash value */ |
/* Hash courtesy of the R5 hash in reiserfs modulo sign bits */ |
#define init_name_hash() 0 |
/* partial hash update function. Assume roughly 4 bits per character */ |
static inline unsigned long |
partial_name_hash(unsigned long c, unsigned long prevhash) |
{ |
return (prevhash + (c << 4) + (c >> 4)) * 11; |
} |
/* |
* Finally: cut down the number of bits to a int value (and try to avoid |
* losing bits) |
*/ |
static inline unsigned long end_name_hash(unsigned long hash) |
{ |
return (unsigned int) hash; |
} |
/* Compute the hash for a name string. */ |
static inline unsigned int |
full_name_hash(const unsigned char *name, unsigned int len) |
{ |
unsigned long hash = init_name_hash(); |
while (len--) |
hash = partial_name_hash(*name++, hash); |
return end_name_hash(hash); |
} |
#define DNAME_INLINE_LEN_MIN 16 |
struct dcookie_struct; |
struct dentry { |
atomic_t d_count; |
unsigned long d_vfs_flags; /* moved here to be on same cacheline */ |
spinlock_t d_lock; /* per dentry lock */ |
struct inode * d_inode; /* Where the name belongs to - NULL is negative */ |
struct list_head d_lru; /* LRU list */ |
struct list_head d_child; /* child of parent list */ |
struct list_head d_subdirs; /* our children */ |
struct list_head d_alias; /* inode alias list */ |
unsigned long d_time; /* used by d_revalidate */ |
struct dentry_operations *d_op; |
struct super_block * d_sb; /* The root of the dentry tree */ |
unsigned int d_flags; |
int d_mounted; |
void * d_fsdata; /* fs-specific data */ |
struct rcu_head d_rcu; |
struct dcookie_struct * d_cookie; /* cookie, if any */ |
unsigned long d_move_count; /* to indicated moved dentry while lockless lookup */ |
struct qstr * d_qstr; /* quick str ptr used in lockless lookup and concurrent d_move */ |
struct dentry * d_parent; /* parent directory */ |
struct qstr d_name; |
struct hlist_node d_hash; /* lookup hash list */ |
struct hlist_head * d_bucket; /* lookup hash bucket */ |
unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* small names */ |
} ____cacheline_aligned; |
#define DNAME_INLINE_LEN (sizeof(struct dentry)-offsetof(struct dentry,d_iname)) |
struct dentry_operations { |
int (*d_revalidate)(struct dentry *, struct nameidata *); |
int (*d_hash) (struct dentry *, struct qstr *); |
int (*d_compare) (struct dentry *, struct qstr *, struct qstr *); |
int (*d_delete)(struct dentry *); |
void (*d_release)(struct dentry *); |
void (*d_iput)(struct dentry *, struct inode *); |
}; |
/* the dentry parameter passed to d_hash and d_compare is the parent |
* directory of the entries to be compared. It is used in case these |
* functions need any directory specific information for determining |
* equivalency classes. Using the dentry itself might not work, as it |
* might be a negative dentry which has no information associated with |
* it */ |
/* |
locking rules: |
big lock dcache_lock may block |
d_revalidate: no no yes |
d_hash no no yes |
d_compare: no yes no |
d_delete: no yes no |
d_release: no no yes |
d_iput: no no yes |
*/ |
/* d_flags entries */ |
#define DCACHE_AUTOFS_PENDING 0x0001 /* autofs: "under construction" */ |
#define DCACHE_NFSFS_RENAMED 0x0002 /* this dentry has been "silly |
* renamed" and has to be |
* deleted on the last dput() |
*/ |
#define DCACHE_DISCONNECTED 0x0004 |
/* This dentry is possibly not currently connected to the dcache tree, |
* in which case its parent will either be itself, or will have this |
* flag as well. nfsd will not use a dentry with this bit set, but will |
* first endeavour to clear the bit either by discovering that it is |
* connected, or by performing lookup operations. Any filesystem which |
* supports nfsd_operations MUST have a lookup function which, if it finds |
* a directory inode with a DCACHE_DISCONNECTED dentry, will d_move |
* that dentry into place and return that dentry rather than the passed one, |
* typically using d_splice_alias. |
*/ |
#define DCACHE_REFERENCED 0x0008 /* Recently used, don't discard. */ |
#define DCACHE_UNHASHED 0x0010 |
extern spinlock_t dcache_lock; |
/** |
* d_drop - drop a dentry |
* @dentry: dentry to drop |
* |
* d_drop() unhashes the entry from the parent |
* dentry hashes, so that it won't be found through |
* a VFS lookup any more. Note that this is different |
* from deleting the dentry - d_delete will try to |
* mark the dentry negative if possible, giving a |
* successful _negative_ lookup, while d_drop will |
* just make the cache lookup fail. |
* |
* d_drop() is used mainly for stuff that wants |
* to invalidate a dentry for some reason (NFS |
* timeouts or autofs deletes). |
*/ |
static inline void __d_drop(struct dentry *dentry) |
{ |
if (!(dentry->d_vfs_flags & DCACHE_UNHASHED)) { |
dentry->d_vfs_flags |= DCACHE_UNHASHED; |
hlist_del_rcu(&dentry->d_hash); |
} |
} |
static inline void d_drop(struct dentry *dentry) |
{ |
spin_lock(&dcache_lock); |
__d_drop(dentry); |
spin_unlock(&dcache_lock); |
} |
static inline int dname_external(struct dentry *d) |
{ |
return d->d_name.name != d->d_iname; |
} |
/* |
* These are the low-level FS interfaces to the dcache.. |
*/ |
extern void d_instantiate(struct dentry *, struct inode *); |
extern void d_delete(struct dentry *); |
/* allocate/de-allocate */ |
extern struct dentry * d_alloc(struct dentry *, const struct qstr *); |
extern struct dentry * d_alloc_anon(struct inode *); |
extern struct dentry * d_splice_alias(struct inode *, struct dentry *); |
extern void shrink_dcache_sb(struct super_block *); |
extern void shrink_dcache_parent(struct dentry *); |
extern void shrink_dcache_anon(struct hlist_head *); |
extern int d_invalidate(struct dentry *); |
/* only used at mount-time */ |
extern struct dentry * d_alloc_root(struct inode *); |
/* <clickety>-<click> the ramfs-type tree */ |
extern void d_genocide(struct dentry *); |
extern struct dentry *d_find_alias(struct inode *); |
extern void d_prune_aliases(struct inode *); |
/* test whether we have any submounts in a subdir tree */ |
extern int have_submounts(struct dentry *); |
/* |
* This adds the entry to the hash queues. |
*/ |
extern void d_rehash(struct dentry *); |
/** |
* d_add - add dentry to hash queues |
* @entry: dentry to add |
* @inode: The inode to attach to this dentry |
* |
* This adds the entry to the hash queues and initializes @inode. |
* The entry was actually filled in earlier during d_alloc(). |
*/ |
static inline void d_add(struct dentry *entry, struct inode *inode) |
{ |
d_instantiate(entry, inode); |
d_rehash(entry); |
} |
/* used for rename() and baskets */ |
extern void d_move(struct dentry *, struct dentry *); |
/* appendix may either be NULL or be used for transname suffixes */ |
extern struct dentry * d_lookup(struct dentry *, struct qstr *); |
extern struct dentry * __d_lookup(struct dentry *, struct qstr *); |
/* validate "insecure" dentry pointer */ |
extern int d_validate(struct dentry *, struct dentry *); |
extern char * d_path(struct dentry *, struct vfsmount *, char *, int); |
/* Allocation counts.. */ |
/** |
* dget, dget_locked - get a reference to a dentry |
* @dentry: dentry to get a reference to |
* |
* Given a dentry or %NULL pointer increment the reference count |
* if appropriate and return the dentry. A dentry will not be |
* destroyed when it has references. dget() should never be |
* called for dentries with zero reference counter. For these cases |
* (preferably none, functions in dcache.c are sufficient for normal |
* needs and they take necessary precautions) you should hold dcache_lock |
* and call dget_locked() instead of dget(). |
*/ |
static inline struct dentry *dget(struct dentry *dentry) |
{ |
if (dentry) { |
if (!atomic_read(&dentry->d_count)) |
BUG(); |
atomic_inc(&dentry->d_count); |
} |
return dentry; |
} |
extern struct dentry * dget_locked(struct dentry *); |
/** |
* d_unhashed - is dentry hashed |
* @dentry: entry to check |
* |
* Returns true if the dentry passed is not currently hashed. |
*/ |
static inline int d_unhashed(struct dentry *dentry) |
{ |
return (dentry->d_vfs_flags & DCACHE_UNHASHED); |
} |
static inline struct dentry *dget_parent(struct dentry *dentry) |
{ |
struct dentry *ret; |
spin_lock(&dentry->d_lock); |
ret = dget(dentry->d_parent); |
spin_unlock(&dentry->d_lock); |
return ret; |
} |
extern void dput(struct dentry *); |
static inline int d_mountpoint(struct dentry *dentry) |
{ |
return dentry->d_mounted; |
} |
extern struct vfsmount *lookup_mnt(struct vfsmount *, struct dentry *); |
extern struct dentry *lookup_create(struct nameidata *nd, int is_dir); |
#endif /* __KERNEL__ */ |
#endif /* __LINUX_DCACHE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/securebits.h |
---|
0,0 → 1,30 |
#ifndef _LINUX_SECUREBITS_H |
#define _LINUX_SECUREBITS_H 1 |
#define SECUREBITS_DEFAULT 0x00000000 |
extern unsigned securebits; |
/* 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 inheritable bitmask of the |
executable file. */ |
#define SECURE_NOROOT 0 |
/* When set, setuid to/from uid 0 does not trigger capability-"fixes" |
to be compatible with old programs relying on set*uid to loose |
privileges. When unset, setuid doesn't change privileges. */ |
#define SECURE_NO_SETUID_FIXUP 2 |
/* Each securesetting is implemented using two bits. One bit specify |
whether the setting is on or off. The other bit specify whether the |
setting is fixed or not. A setting which is fixed cannot be changed |
from user-level. */ |
#define issecure(X) ( (1 << (X+1)) & SECUREBITS_DEFAULT ? \ |
(1 << (X)) & SECUREBITS_DEFAULT : \ |
(1 << (X)) & securebits ) |
#endif /* !_LINUX_SECUREBITS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/smbno.h |
---|
0,0 → 1,363 |
#ifndef _SMBNO_H_ |
#define _SMBNO_H_ |
/* these define the attribute byte as seen by DOS */ |
#define aRONLY (1L<<0) |
#define aHIDDEN (1L<<1) |
#define aSYSTEM (1L<<2) |
#define aVOLID (1L<<3) |
#define aDIR (1L<<4) |
#define aARCH (1L<<5) |
/* error classes */ |
#define SUCCESS 0 /* The request was successful. */ |
#define ERRDOS 0x01 /* Error is from the core DOS operating system set. */ |
#define ERRSRV 0x02 /* Error is generated by the server network file manager.*/ |
#define ERRHRD 0x03 /* Error is an hardware error. */ |
#define ERRCMD 0xFF /* Command was not in the "SMB" format. */ |
/* SMB X/Open error codes for the ERRdos error class */ |
#define ERRbadfunc 1 /* Invalid function (or system call) */ |
#define ERRbadfile 2 /* File not found (pathname error) */ |
#define ERRbadpath 3 /* Directory not found */ |
#define ERRnofids 4 /* Too many open files */ |
#define ERRnoaccess 5 /* Access denied */ |
#define ERRbadfid 6 /* Invalid fid */ |
#define ERRbadmcb 7 /* Memory control blocks destroyed */ |
#define ERRnomem 8 /* Out of memory */ |
#define ERRbadmem 9 /* Invalid memory block address */ |
#define ERRbadenv 10 /* Invalid environment */ |
#define ERRbadformat 11 /* Invalid format */ |
#define ERRbadaccess 12 /* Invalid open mode */ |
#define ERRbaddata 13 /* Invalid data (only from ioctl call) */ |
#define ERRres 14 /* reserved */ |
#define ERRbaddrive 15 /* Invalid drive */ |
#define ERRremcd 16 /* Attempt to delete current directory */ |
#define ERRdiffdevice 17 /* rename/move across different filesystems */ |
#define ERRnofiles 18 /* no more files found in file search */ |
#define ERRbadshare 32 /* Share mode on file conflict with open mode */ |
#define ERRlock 33 /* Lock request conflicts with existing lock */ |
#define ERRfilexists 80 /* File in operation already exists */ |
#define ERRbadpipe 230 /* Named pipe invalid */ |
#define ERRpipebusy 231 /* All instances of pipe are busy */ |
#define ERRpipeclosing 232 /* named pipe close in progress */ |
#define ERRnotconnected 233 /* No process on other end of named pipe */ |
#define ERRmoredata 234 /* More data to be returned */ |
#define ERROR_INVALID_PARAMETER 87 |
#define ERROR_DISK_FULL 112 |
#define ERROR_INVALID_NAME 123 |
#define ERROR_DIR_NOT_EMPTY 145 |
#define ERROR_NOT_LOCKED 158 |
#define ERROR_ALREADY_EXISTS 183 /* see also 80 ? */ |
#define ERROR_EAS_DIDNT_FIT 275 /* Extended attributes didn't fit */ |
#define ERROR_EAS_NOT_SUPPORTED 282 /* Extended attributes not supported */ |
/* Error codes for the ERRSRV class */ |
#define ERRerror 1 /* Non specific error code */ |
#define ERRbadpw 2 /* Bad password */ |
#define ERRbadtype 3 /* reserved */ |
#define ERRaccess 4 /* No permissions to do the requested operation */ |
#define ERRinvnid 5 /* tid invalid */ |
#define ERRinvnetname 6 /* Invalid servername */ |
#define ERRinvdevice 7 /* Invalid device */ |
#define ERRqfull 49 /* Print queue full */ |
#define ERRqtoobig 50 /* Queued item too big */ |
#define ERRinvpfid 52 /* Invalid print file in smb_fid */ |
#define ERRsmbcmd 64 /* Unrecognised command */ |
#define ERRsrverror 65 /* smb server internal error */ |
#define ERRfilespecs 67 /* fid and pathname invalid combination */ |
#define ERRbadlink 68 /* reserved */ |
#define ERRbadpermits 69 /* Access specified for a file is not valid */ |
#define ERRbadpid 70 /* reserved */ |
#define ERRsetattrmode 71 /* attribute mode invalid */ |
#define ERRpaused 81 /* Message server paused */ |
#define ERRmsgoff 82 /* Not receiving messages */ |
#define ERRnoroom 83 /* No room for message */ |
#define ERRrmuns 87 /* too many remote usernames */ |
#define ERRtimeout 88 /* operation timed out */ |
#define ERRnoresource 89 /* No resources currently available for request. */ |
#define ERRtoomanyuids 90 /* too many userids */ |
#define ERRbaduid 91 /* bad userid */ |
#define ERRuseMPX 250 /* temporarily unable to use raw mode, use MPX mode */ |
#define ERRuseSTD 251 /* temporarily unable to use raw mode, use std.mode */ |
#define ERRcontMPX 252 /* resume MPX mode */ |
#define ERRbadPW /* reserved */ |
#define ERRnosupport 0xFFFF |
/* Error codes for the ERRHRD class */ |
#define ERRnowrite 19 /* read only media */ |
#define ERRbadunit 20 /* Unknown device */ |
#define ERRnotready 21 /* Drive not ready */ |
#define ERRbadcmd 22 /* Unknown command */ |
#define ERRdata 23 /* Data (CRC) error */ |
#define ERRbadreq 24 /* Bad request structure length */ |
#define ERRseek 25 |
#define ERRbadmedia 26 |
#define ERRbadsector 27 |
#define ERRnopaper 28 |
#define ERRwrite 29 /* write fault */ |
#define ERRread 30 /* read fault */ |
#define ERRgeneral 31 /* General hardware failure */ |
#define ERRwrongdisk 34 |
#define ERRFCBunavail 35 |
#define ERRsharebufexc 36 /* share buffer exceeded */ |
#define ERRdiskfull 39 |
/* |
* Access modes when opening a file |
*/ |
#define SMB_ACCMASK 0x0003 |
#define SMB_O_RDONLY 0x0000 |
#define SMB_O_WRONLY 0x0001 |
#define SMB_O_RDWR 0x0002 |
/* offsets into message for common items */ |
#define smb_com 8 |
#define smb_rcls 9 |
#define smb_reh 10 |
#define smb_err 11 |
#define smb_flg 13 |
#define smb_flg2 14 |
#define smb_reb 13 |
#define smb_tid 28 |
#define smb_pid 30 |
#define smb_uid 32 |
#define smb_mid 34 |
#define smb_wct 36 |
#define smb_vwv 37 |
#define smb_vwv0 37 |
#define smb_vwv1 39 |
#define smb_vwv2 41 |
#define smb_vwv3 43 |
#define smb_vwv4 45 |
#define smb_vwv5 47 |
#define smb_vwv6 49 |
#define smb_vwv7 51 |
#define smb_vwv8 53 |
#define smb_vwv9 55 |
#define smb_vwv10 57 |
#define smb_vwv11 59 |
#define smb_vwv12 61 |
#define smb_vwv13 63 |
#define smb_vwv14 65 |
/* these are the trans2 sub fields for primary requests */ |
#define smb_tpscnt smb_vwv0 |
#define smb_tdscnt smb_vwv1 |
#define smb_mprcnt smb_vwv2 |
#define smb_mdrcnt smb_vwv3 |
#define smb_msrcnt smb_vwv4 |
#define smb_flags smb_vwv5 |
#define smb_timeout smb_vwv6 |
#define smb_pscnt smb_vwv9 |
#define smb_psoff smb_vwv10 |
#define smb_dscnt smb_vwv11 |
#define smb_dsoff smb_vwv12 |
#define smb_suwcnt smb_vwv13 |
#define smb_setup smb_vwv14 |
#define smb_setup0 smb_setup |
#define smb_setup1 (smb_setup+2) |
#define smb_setup2 (smb_setup+4) |
/* these are for the secondary requests */ |
#define smb_spscnt smb_vwv2 |
#define smb_spsoff smb_vwv3 |
#define smb_spsdisp smb_vwv4 |
#define smb_sdscnt smb_vwv5 |
#define smb_sdsoff smb_vwv6 |
#define smb_sdsdisp smb_vwv7 |
#define smb_sfid smb_vwv8 |
/* and these for responses */ |
#define smb_tprcnt smb_vwv0 |
#define smb_tdrcnt smb_vwv1 |
#define smb_prcnt smb_vwv3 |
#define smb_proff smb_vwv4 |
#define smb_prdisp smb_vwv5 |
#define smb_drcnt smb_vwv6 |
#define smb_droff smb_vwv7 |
#define smb_drdisp smb_vwv8 |
/* the complete */ |
#define SMBmkdir 0x00 /* create directory */ |
#define SMBrmdir 0x01 /* delete directory */ |
#define SMBopen 0x02 /* open file */ |
#define SMBcreate 0x03 /* create file */ |
#define SMBclose 0x04 /* close file */ |
#define SMBflush 0x05 /* flush file */ |
#define SMBunlink 0x06 /* delete file */ |
#define SMBmv 0x07 /* rename file */ |
#define SMBgetatr 0x08 /* get file attributes */ |
#define SMBsetatr 0x09 /* set file attributes */ |
#define SMBread 0x0A /* read from file */ |
#define SMBwrite 0x0B /* write to file */ |
#define SMBlock 0x0C /* lock byte range */ |
#define SMBunlock 0x0D /* unlock byte range */ |
#define SMBctemp 0x0E /* create temporary file */ |
#define SMBmknew 0x0F /* make new file */ |
#define SMBchkpth 0x10 /* check directory path */ |
#define SMBexit 0x11 /* process exit */ |
#define SMBlseek 0x12 /* seek */ |
#define SMBtcon 0x70 /* tree connect */ |
#define SMBtconX 0x75 /* tree connect and X*/ |
#define SMBtdis 0x71 /* tree disconnect */ |
#define SMBnegprot 0x72 /* negotiate protocol */ |
#define SMBdskattr 0x80 /* get disk attributes */ |
#define SMBsearch 0x81 /* search directory */ |
#define SMBsplopen 0xC0 /* open print spool file */ |
#define SMBsplwr 0xC1 /* write to print spool file */ |
#define SMBsplclose 0xC2 /* close print spool file */ |
#define SMBsplretq 0xC3 /* return print queue */ |
#define SMBsends 0xD0 /* send single block message */ |
#define SMBsendb 0xD1 /* send broadcast message */ |
#define SMBfwdname 0xD2 /* forward user name */ |
#define SMBcancelf 0xD3 /* cancel forward */ |
#define SMBgetmac 0xD4 /* get machine name */ |
#define SMBsendstrt 0xD5 /* send start of multi-block message */ |
#define SMBsendend 0xD6 /* send end of multi-block message */ |
#define SMBsendtxt 0xD7 /* send text of multi-block message */ |
/* Core+ protocol */ |
#define SMBlockread 0x13 /* Lock a range and read */ |
#define SMBwriteunlock 0x14 /* Unlock a range then write */ |
#define SMBreadbraw 0x1a /* read a block of data with no smb header */ |
#define SMBwritebraw 0x1d /* write a block of data with no smb header */ |
#define SMBwritec 0x20 /* secondary write request */ |
#define SMBwriteclose 0x2c /* write a file then close it */ |
/* dos extended protocol */ |
#define SMBreadBraw 0x1A /* read block raw */ |
#define SMBreadBmpx 0x1B /* read block multiplexed */ |
#define SMBreadBs 0x1C /* read block (secondary response) */ |
#define SMBwriteBraw 0x1D /* write block raw */ |
#define SMBwriteBmpx 0x1E /* write block multiplexed */ |
#define SMBwriteBs 0x1F /* write block (secondary request) */ |
#define SMBwriteC 0x20 /* write complete response */ |
#define SMBsetattrE 0x22 /* set file attributes expanded */ |
#define SMBgetattrE 0x23 /* get file attributes expanded */ |
#define SMBlockingX 0x24 /* lock/unlock byte ranges and X */ |
#define SMBtrans 0x25 /* transaction - name, bytes in/out */ |
#define SMBtranss 0x26 /* transaction (secondary request/response) */ |
#define SMBioctl 0x27 /* IOCTL */ |
#define SMBioctls 0x28 /* IOCTL (secondary request/response) */ |
#define SMBcopy 0x29 /* copy */ |
#define SMBmove 0x2A /* move */ |
#define SMBecho 0x2B /* echo */ |
#define SMBopenX 0x2D /* open and X */ |
#define SMBreadX 0x2E /* read and X */ |
#define SMBwriteX 0x2F /* write and X */ |
#define SMBsesssetupX 0x73 /* Session Set Up & X (including User Logon) */ |
#define SMBtconX 0x75 /* tree connect and X */ |
#define SMBffirst 0x82 /* find first */ |
#define SMBfunique 0x83 /* find unique */ |
#define SMBfclose 0x84 /* find close */ |
#define SMBinvalid 0xFE /* invalid command */ |
/* Extended 2.0 protocol */ |
#define SMBtrans2 0x32 /* TRANS2 protocol set */ |
#define SMBtranss2 0x33 /* TRANS2 protocol set, secondary command */ |
#define SMBfindclose 0x34 /* Terminate a TRANSACT2_FINDFIRST */ |
#define SMBfindnclose 0x35 /* Terminate a TRANSACT2_FINDNOTIFYFIRST */ |
#define SMBulogoffX 0x74 /* user logoff */ |
/* these are the TRANS2 sub commands */ |
#define TRANSACT2_OPEN 0 |
#define TRANSACT2_FINDFIRST 1 |
#define TRANSACT2_FINDNEXT 2 |
#define TRANSACT2_QFSINFO 3 |
#define TRANSACT2_SETFSINFO 4 |
#define TRANSACT2_QPATHINFO 5 |
#define TRANSACT2_SETPATHINFO 6 |
#define TRANSACT2_QFILEINFO 7 |
#define TRANSACT2_SETFILEINFO 8 |
#define TRANSACT2_FSCTL 9 |
#define TRANSACT2_IOCTL 10 |
#define TRANSACT2_FINDNOTIFYFIRST 11 |
#define TRANSACT2_FINDNOTIFYNEXT 12 |
#define TRANSACT2_MKDIR 13 |
/* Information Levels - Shared? */ |
#define SMB_INFO_STANDARD 1 |
#define SMB_INFO_QUERY_EA_SIZE 2 |
#define SMB_INFO_QUERY_EAS_FROM_LIST 3 |
#define SMB_INFO_QUERY_ALL_EAS 4 |
#define SMB_INFO_IS_NAME_VALID 6 |
/* Information Levels - TRANSACT2_FINDFIRST */ |
#define SMB_FIND_FILE_DIRECTORY_INFO 0x101 |
#define SMB_FIND_FILE_FULL_DIRECTORY_INFO 0x102 |
#define SMB_FIND_FILE_NAMES_INFO 0x103 |
#define SMB_FIND_FILE_BOTH_DIRECTORY_INFO 0x104 |
/* Information Levels - TRANSACT2_QPATHINFO */ |
#define SMB_QUERY_FILE_BASIC_INFO 0x101 |
#define SMB_QUERY_FILE_STANDARD_INFO 0x102 |
#define SMB_QUERY_FILE_EA_INFO 0x103 |
#define SMB_QUERY_FILE_NAME_INFO 0x104 |
#define SMB_QUERY_FILE_ALL_INFO 0x107 |
#define SMB_QUERY_FILE_ALT_NAME_INFO 0x108 |
#define SMB_QUERY_FILE_STREAM_INFO 0x109 |
#define SMB_QUERY_FILE_COMPRESSION_INFO 0x10b |
/* Information Levels - TRANSACT2_SETFILEINFO */ |
#define SMB_SET_FILE_BASIC_INFO 0x101 |
#define SMB_SET_FILE_DISPOSITION_INFO 0x102 |
#define SMB_SET_FILE_ALLOCATION_INFO 0x103 |
#define SMB_SET_FILE_END_OF_FILE_INFO 0x104 |
/* smb_flg field flags */ |
#define SMB_FLAGS_SUPPORT_LOCKREAD 0x01 |
#define SMB_FLAGS_CLIENT_BUF_AVAIL 0x02 |
#define SMB_FLAGS_RESERVED 0x04 |
#define SMB_FLAGS_CASELESS_PATHNAMES 0x08 |
#define SMB_FLAGS_CANONICAL_PATHNAMES 0x10 |
#define SMB_FLAGS_REQUEST_OPLOCK 0x20 |
#define SMB_FLAGS_REQUEST_BATCH_OPLOCK 0x40 |
#define SMB_FLAGS_REPLY 0x80 |
/* smb_flg2 field flags (samba-2.2.0/source/include/smb.h) */ |
#define SMB_FLAGS2_LONG_PATH_COMPONENTS 0x0001 |
#define SMB_FLAGS2_EXTENDED_ATTRIBUTES 0x0002 |
#define SMB_FLAGS2_DFS_PATHNAMES 0x1000 |
#define SMB_FLAGS2_READ_PERMIT_NO_EXECUTE 0x2000 |
#define SMB_FLAGS2_32_BIT_ERROR_CODES 0x4000 |
#define SMB_FLAGS2_UNICODE_STRINGS 0x8000 |
/* |
* UNIX stuff (from samba trans2.h) |
*/ |
#define MIN_UNIX_INFO_LEVEL 0x200 |
#define MAX_UNIX_INFO_LEVEL 0x2FF |
#define SMB_FIND_FILE_UNIX 0x202 |
#define SMB_QUERY_FILE_UNIX_BASIC 0x200 |
#define SMB_QUERY_FILE_UNIX_LINK 0x201 |
#define SMB_QUERY_FILE_UNIX_HLINK 0x202 |
#define SMB_SET_FILE_UNIX_BASIC 0x200 |
#define SMB_SET_FILE_UNIX_LINK 0x201 |
#define SMB_SET_FILE_UNIX_HLINK 0x203 |
#define SMB_QUERY_CIFS_UNIX_INFO 0x200 |
/* values which means "don't change it" */ |
#define SMB_MODE_NO_CHANGE 0xFFFFFFFF |
#define SMB_UID_NO_CHANGE 0xFFFFFFFF |
#define SMB_GID_NO_CHANGE 0xFFFFFFFF |
#define SMB_TIME_NO_CHANGE 0xFFFFFFFFFFFFFFFFULL |
#define SMB_SIZE_NO_CHANGE 0xFFFFFFFFFFFFFFFFULL |
/* UNIX filetype mappings. */ |
#define UNIX_TYPE_FILE 0 |
#define UNIX_TYPE_DIR 1 |
#define UNIX_TYPE_SYMLINK 2 |
#define UNIX_TYPE_CHARDEV 3 |
#define UNIX_TYPE_BLKDEV 4 |
#define UNIX_TYPE_FIFO 5 |
#define UNIX_TYPE_SOCKET 6 |
#define UNIX_TYPE_UNKNOWN 0xFFFFFFFF |
#endif /* _SMBNO_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/udf_fs_i.h |
---|
0,0 → 1,78 |
/* |
* udf_fs_i.h |
* |
* This file is intended for the Linux kernel/module. |
* |
* CONTACTS |
* E-mail regarding any portion of the Linux UDF file system should be |
* directed to the development team mailing list (run by majordomo): |
* linux_udf@hpesjro.fc.hp.com |
* |
* 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 |
#ifdef __KERNEL__ |
#ifndef _ECMA_167_H |
typedef struct |
{ |
__u32 logicalBlockNum; |
__u16 partitionReferenceNum; |
} __attribute__ ((packed)) lb_addr; |
typedef struct |
{ |
__u32 extLength; |
__u32 extPosition; |
} __attribute__ ((packed)) short_ad; |
typedef struct |
{ |
__u32 extLength; |
lb_addr extLocation; |
__u8 impUse[6]; |
} __attribute__ ((packed)) long_ad; |
#endif |
struct udf_inode_info |
{ |
struct timespec i_crtime; |
/* Physical address of inode */ |
lb_addr i_location; |
__u64 i_unique; |
__u32 i_lenEAttr; |
__u32 i_lenAlloc; |
__u64 i_lenExtents; |
__u32 i_next_alloc_block; |
__u32 i_next_alloc_goal; |
unsigned i_alloc_type : 3; |
unsigned i_efe : 1; |
unsigned i_use : 1; |
unsigned i_strat4096 : 1; |
unsigned reserved : 26; |
union |
{ |
short_ad *i_sad; |
long_ad *i_lad; |
__u8 *i_data; |
} i_ext; |
struct inode vfs_inode; |
}; |
#endif |
/* 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 */ |
/shark/trunk/drivers/linuxc26/include/linux/blockgroup_lock.h |
---|
0,0 → 1,58 |
/* |
* Per-blockgroup locking for ext2 and ext3. |
* |
* Simple hashed spinlocking. |
*/ |
#include <linux/config.h> |
#include <linux/spinlock.h> |
#include <linux/cache.h> |
#ifdef CONFIG_SMP |
/* |
* We want a power-of-two. Is there a better way than this? |
*/ |
#if NR_CPUS >= 32 |
#define NR_BG_LOCKS 128 |
#elif NR_CPUS >= 16 |
#define NR_BG_LOCKS 64 |
#elif NR_CPUS >= 8 |
#define NR_BG_LOCKS 32 |
#elif NR_CPUS >= 4 |
#define NR_BG_LOCKS 16 |
#elif NR_CPUS >= 2 |
#define NR_BG_LOCKS 8 |
#else |
#define NR_BG_LOCKS 4 |
#endif |
#else /* CONFIG_SMP */ |
#define NR_BG_LOCKS 1 |
#endif /* CONFIG_SMP */ |
struct bgl_lock { |
spinlock_t lock; |
} ____cacheline_aligned_in_smp; |
struct blockgroup_lock { |
struct bgl_lock locks[NR_BG_LOCKS]; |
}; |
static inline void bgl_lock_init(struct blockgroup_lock *bgl) |
{ |
int i; |
for (i = 0; i < NR_BG_LOCKS; i++) |
spin_lock_init(&bgl->locks[i].lock); |
} |
/* |
* The accessor is a macro so we can embed a blockgroup_lock into different |
* superblock types |
*/ |
#define sb_bgl_lock(sb, block_group) \ |
(&(sb)->s_blockgroup_lock.locks[(block_group) & (NR_BG_LOCKS-1)].lock) |
/shark/trunk/drivers/linuxc26/include/linux/platform.h |
---|
0,0 → 1,43 |
/* |
* include/linux/platform.h - platform driver definitions |
* |
* Because of the prolific consumerism of the average American, |
* and the dominant marketing budgets of PC OEMs, we have been |
* blessed with frequent updates of the PC architecture. |
* |
* While most of these calls are singular per architecture, they |
* require an extra layer of abstraction on the x86 so the right |
* subsystem gets the right call. |
* |
* Basically, this consolidates the power off and reboot callbacks |
* into one structure, as well as adding power management hooks. |
* |
* When adding a platform driver, please make sure all callbacks are |
* filled. There are defaults defined below that do nothing; use those |
* if you do not support that callback. |
*/ |
#ifndef _PLATFORM_H_ |
#define _PLATFORM_H_ |
#ifdef __KERNEL__ |
#include <linux/types.h> |
struct platform_t { |
char * name; |
u32 suspend_states; |
void (*reboot)(char * cmd); |
void (*halt)(void); |
void (*power_off)(void); |
int (*suspend)(int state, int flags); |
void (*idle)(void); |
}; |
extern struct platform_t * platform; |
extern void default_reboot(char * cmd); |
extern void default_halt(void); |
extern int default_suspend(int state, int flags); |
extern void default_idle(void); |
#endif /* __KERNEL__ */ |
#endif /* _PLATFORM_H */ |
/shark/trunk/drivers/linuxc26/include/linux/eeprom.h |
---|
0,0 → 1,136 |
/* credit winbond-840.c |
*/ |
#include <asm/io.h> |
struct eeprom_ops { |
void (*set_cs)(void *ee); |
void (*clear_cs)(void *ee); |
}; |
#define EEPOL_EEDI 0x01 |
#define EEPOL_EEDO 0x02 |
#define EEPOL_EECLK 0x04 |
#define EEPOL_EESEL 0x08 |
struct eeprom { |
void *dev; |
struct eeprom_ops *ops; |
long addr; |
unsigned ee_addr_bits; |
unsigned eesel; |
unsigned eeclk; |
unsigned eedo; |
unsigned eedi; |
unsigned polarity; |
unsigned ee_state; |
spinlock_t *lock; |
u32 *cache; |
}; |
u8 eeprom_readb(struct eeprom *ee, unsigned address); |
void eeprom_read(struct eeprom *ee, unsigned address, u8 *bytes, |
unsigned count); |
void eeprom_writeb(struct eeprom *ee, unsigned address, u8 data); |
void eeprom_write(struct eeprom *ee, unsigned address, u8 *bytes, |
unsigned count); |
/* The EEPROM commands include the alway-set leading bit. */ |
enum EEPROM_Cmds { |
EE_WriteCmd=(5 << 6), EE_ReadCmd=(6 << 6), EE_EraseCmd=(7 << 6), |
}; |
void setup_ee_mem_bitbanger(struct eeprom *ee, long memaddr, int eesel_bit, int eeclk_bit, int eedo_bit, int eedi_bit, unsigned polarity) |
{ |
ee->addr = memaddr; |
ee->eesel = 1 << eesel_bit; |
ee->eeclk = 1 << eeclk_bit; |
ee->eedo = 1 << eedo_bit; |
ee->eedi = 1 << eedi_bit; |
ee->polarity = polarity; |
*ee->cache = readl(ee->addr); |
} |
/* foo. put this in a .c file */ |
static inline void eeprom_update(struct eeprom *ee, u32 mask, int pol) |
{ |
unsigned long flags; |
u32 data; |
spin_lock_irqsave(ee->lock, flags); |
data = *ee->cache; |
data &= ~mask; |
if (pol) |
data |= mask; |
*ee->cache = data; |
//printk("update: %08x\n", data); |
writel(data, ee->addr); |
spin_unlock_irqrestore(ee->lock, flags); |
} |
void eeprom_clk_lo(struct eeprom *ee) |
{ |
int pol = !!(ee->polarity & EEPOL_EECLK); |
eeprom_update(ee, ee->eeclk, pol); |
udelay(2); |
} |
void eeprom_clk_hi(struct eeprom *ee) |
{ |
int pol = !!(ee->polarity & EEPOL_EECLK); |
eeprom_update(ee, ee->eeclk, !pol); |
udelay(2); |
} |
void eeprom_send_addr(struct eeprom *ee, unsigned address) |
{ |
int pol = !!(ee->polarity & EEPOL_EEDI); |
unsigned i; |
address |= 6 << 6; |
/* Shift the read command bits out. */ |
for (i=0; i<11; i++) { |
eeprom_update(ee, ee->eedi, ((address >> 10) & 1) ^ pol); |
address <<= 1; |
eeprom_clk_hi(ee); |
eeprom_clk_lo(ee); |
} |
eeprom_update(ee, ee->eedi, pol); |
} |
u16 eeprom_readw(struct eeprom *ee, unsigned address) |
{ |
unsigned i; |
u16 res = 0; |
eeprom_clk_lo(ee); |
eeprom_update(ee, ee->eesel, 1 ^ !!(ee->polarity & EEPOL_EESEL)); |
eeprom_send_addr(ee, address); |
for (i=0; i<16; i++) { |
u32 data; |
eeprom_clk_hi(ee); |
res <<= 1; |
data = readl(ee->addr); |
//printk("eeprom_readw: %08x\n", data); |
res |= !!(data & ee->eedo) ^ !!(ee->polarity & EEPOL_EEDO); |
eeprom_clk_lo(ee); |
} |
eeprom_update(ee, ee->eesel, 0 ^ !!(ee->polarity & EEPOL_EESEL)); |
return res; |
} |
void eeprom_writeb(struct eeprom *ee, unsigned address, u8 data) |
{ |
} |
/shark/trunk/drivers/linuxc26/include/linux/videodev2.h |
---|
0,0 → 1,859 |
#ifndef __LINUX_VIDEODEV2_H |
#define __LINUX_VIDEODEV2_H |
/* |
* Video for Linux Two |
* |
* Header file for v4l or V4L2 drivers and applications, for |
* Linux kernels 2.2.x or 2.4.x. |
* |
* See http://bytesex.org/v4l/ for API specs and other |
* v4l2 documentation. |
* |
* Author: Bill Dirks <bdirks@pacbell.net> |
* Justin Schoeman |
* et al. |
*/ |
#include <linux/time.h> /* need struct timeval */ |
/* |
* 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)<<0)|((__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 */ |
}; |
#define V4L2_FIELD_HAS_TOP(field) \ |
((field) == V4L2_FIELD_TOP ||\ |
(field) == V4L2_FIELD_INTERLACED ||\ |
(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_SEQ_TB ||\ |
(field) == V4L2_FIELD_SEQ_BT) |
#define V4L2_FIELD_HAS_BOTH(field) \ |
((field) == V4L2_FIELD_INTERLACED ||\ |
(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_PRIVATE = 0x80, |
}; |
enum v4l2_ctrl_type { |
V4L2_CTRL_TYPE_INTEGER = 1, |
V4L2_CTRL_TYPE_BOOLEAN = 2, |
V4L2_CTRL_TYPE_MENU = 3, |
V4L2_CTRL_TYPE_BUTTON = 4, |
}; |
enum v4l2_tuner_type { |
V4L2_TUNER_RADIO = 1, |
V4L2_TUNER_ANALOG_TV = 2, |
}; |
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, |
}; |
struct v4l2_rect { |
__s32 left; |
__s32 top; |
__s32 width; |
__s32 height; |
}; |
struct v4l2_fract { |
__u32 numerator; |
__u32 denominator; |
}; |
/* |
* D R I V E R C A P A B I L I T I E S |
*/ |
struct v4l2_capability |
{ |
__u8 driver[16]; /* i.e. "bttv" */ |
__u8 card[32]; /* i.e. "Hauppauge WinTV" */ |
__u8 bus_info[32]; /* "PCI:" + pci_name(pci_dev) */ |
__u32 version; /* should use KERNEL_VERSION() */ |
__u32 capabilities; /* Device capabilities */ |
__u32 reserved[4]; |
}; |
/* 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 VBI capture device */ |
#define V4L2_CAP_VBI_OUTPUT 0x00000020 /* Is a VBI output device */ |
#define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */ |
#define V4L2_CAP_TUNER 0x00010000 /* Has a tuner */ |
#define V4L2_CAP_AUDIO 0x00020000 /* has audio support */ |
#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 */ |
/* |
* 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; |
enum v4l2_field field; |
__u32 bytesperline; /* for padding, zero if unused */ |
__u32 sizeimage; |
enum v4l2_colorspace colorspace; |
__u32 priv; /* private data, depends on pixelformat */ |
}; |
/* Pixel format FOURCC depth Description */ |
#define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R','G','B','1') /* 8 RGB-3-3-2 */ |
#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_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 */ |
#define V4L2_PIX_FMT_GREY v4l2_fourcc('G','R','E','Y') /* 8 Greyscale */ |
#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_UYVY v4l2_fourcc('U','Y','V','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 */ |
/* 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 */ |
/* The following formats are not defined in the V4L2 specification */ |
#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_YYUV v4l2_fourcc('Y','Y','U','V') /* 16 YUV 4:2:2 */ |
#define V4L2_PIX_FMT_HI240 v4l2_fourcc('H','I','2','4') /* 8 8-bit color */ |
/* 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 */ |
/* Vendor-specific formats */ |
#define V4L2_PIX_FMT_WNVA v4l2_fourcc('W','N','V','A') /* Winnov hw compres */ |
/* |
* F O R M A T E N U M E R A T I O N |
*/ |
struct v4l2_fmtdesc |
{ |
__u32 index; /* Format number */ |
enum v4l2_buf_type type; /* buffer type */ |
__u32 flags; |
__u8 description[32]; /* Description string */ |
__u32 pixelformat; /* Format fourcc */ |
__u32 reserved[4]; |
}; |
#define V4L2_FMT_FLAG_COMPRESSED 0x0001 |
/* |
* 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 */ |
/* |
* C O M P R E S S I O N P A R A M E T E R S |
*/ |
#if 0 |
/* ### generic compression settings don't work, there is too much |
* ### codec-specific stuff. Maybe reuse that for MPEG codec settings |
* ### later ... */ |
struct v4l2_compression |
{ |
__u32 quality; |
__u32 keyframerate; |
__u32 pframerate; |
__u32 reserved[5]; |
}; |
#endif |
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 aplications 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; |
enum v4l2_buf_type type; |
enum v4l2_memory memory; |
__u32 reserved[2]; |
}; |
struct v4l2_buffer |
{ |
__u32 index; |
enum v4l2_buf_type type; |
__u32 bytesused; |
__u32 flags; |
enum v4l2_field field; |
struct timeval timestamp; |
struct v4l2_timecode timecode; |
__u32 sequence; |
/* memory location */ |
enum v4l2_memory memory; |
union { |
__u32 offset; |
unsigned long userptr; |
} m; |
__u32 length; |
__u32 reserved[2]; |
}; |
/* 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 */ |
#define V4L2_BUF_FLAG_TIMECODE 0x0100 /* timecode field is valid */ |
/* |
* 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 |
/* Flags for the 'flags' field. */ |
#define V4L2_FBUF_FLAG_PRIMARY 0x0001 |
#define V4L2_FBUF_FLAG_OVERLAY 0x0002 |
#define V4L2_FBUF_FLAG_CHROMAKEY 0x0004 |
struct v4l2_clip |
{ |
struct v4l2_rect c; |
struct v4l2_clip *next; |
}; |
struct v4l2_window |
{ |
struct v4l2_rect w; |
enum v4l2_field field; |
__u32 chromakey; |
struct v4l2_clip *clips; |
__u32 clipcount; |
void *bitmap; |
}; |
/* |
* 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 { |
enum v4l2_buf_type type; |
struct v4l2_rect bounds; |
struct v4l2_rect defrect; |
struct v4l2_fract pixelaspect; |
}; |
struct v4l2_crop { |
enum v4l2_buf_type type; |
struct v4l2_rect c; |
}; |
/* |
* 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) |
#define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000) |
#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) |
/* ATSC/HDTV */ |
#define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000) |
#define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000) |
/* some common needed stuff */ |
#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) |
#define V4L2_STD_PAL (V4L2_STD_PAL_BG |\ |
V4L2_STD_PAL_DK |\ |
V4L2_STD_PAL_H |\ |
V4L2_STD_PAL_I) |
#define V4L2_STD_NTSC (V4L2_STD_NTSC_M |\ |
V4L2_STD_NTSC_M_JP) |
#define V4L2_STD_SECAM (V4L2_STD_SECAM_B |\ |
V4L2_STD_SECAM_D |\ |
V4L2_STD_SECAM_G |\ |
V4L2_STD_SECAM_H |\ |
V4L2_STD_SECAM_K |\ |
V4L2_STD_SECAM_K1 |\ |
V4L2_STD_SECAM_L) |
#define V4L2_STD_525_60 (V4L2_STD_PAL_M |\ |
V4L2_STD_PAL_60 |\ |
V4L2_STD_NTSC) |
#define V4L2_STD_625_50 (V4L2_STD_PAL |\ |
V4L2_STD_PAL_N |\ |
V4L2_STD_PAL_Nc |\ |
V4L2_STD_SECAM) |
#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]; |
}; |
/* |
* 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; /* Associated tuner */ |
v4l2_std_id std; |
__u32 status; |
__u32 reserved[4]; |
}; |
/* 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' - 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 */ |
/* |
* 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 reserved[4]; |
}; |
/* Values for the 'type' field */ |
#define V4L2_OUTPUT_TYPE_MODULATOR 1 |
#define V4L2_OUTPUT_TYPE_ANALOG 2 |
#define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY 3 |
/* |
* C O N T R O L S |
*/ |
struct v4l2_control |
{ |
__u32 id; |
__s32 value; |
}; |
/* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ |
struct v4l2_queryctrl |
{ |
__u32 id; |
enum v4l2_ctrl_type 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; |
__u8 name[32]; /* Whatever */ |
__u32 reserved; |
}; |
/* Control flags */ |
#define V4L2_CTRL_FLAG_DISABLED 0x0001 |
#define V4L2_CTRL_FLAG_GRABBED 0x0002 |
/* Control IDs defined by V4L2 */ |
#define V4L2_CID_BASE 0x00980900 |
/* IDs reserved for driver specific controls */ |
#define V4L2_CID_PRIVATE_BASE 0x08000000 |
#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) |
#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) /* ? Not sure */ |
#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) |
#define V4L2_CID_HCENTER (V4L2_CID_BASE+22) |
#define V4L2_CID_VCENTER (V4L2_CID_BASE+23) |
#define V4L2_CID_LASTP1 (V4L2_CID_BASE+24) /* last CID + 1 */ |
/* |
* T U N I N G |
*/ |
struct v4l2_tuner |
{ |
__u32 index; |
__u8 name[32]; |
enum v4l2_tuner_type 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_STEREO 0x0010 |
#define V4L2_TUNER_CAP_LANG2 0x0020 |
#define V4L2_TUNER_CAP_SAP 0x0020 |
#define V4L2_TUNER_CAP_LANG1 0x0040 |
/* 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 |
/* 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 |
struct v4l2_frequency |
{ |
__u32 tuner; |
enum v4l2_tuner_type type; |
__u32 frequency; |
__u32 reserved[8]; |
}; |
/* |
* 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]; |
}; |
/* |
* D A T A S E R V I C E S ( V B I ) |
* |
* Data services API by Michael Schimek |
*/ |
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) |
/* |
* A G G R E G A T E S T R U C T U R E S |
*/ |
/* Stream data format |
*/ |
struct v4l2_format |
{ |
enum v4l2_buf_type type; |
union |
{ |
struct v4l2_pix_format pix; // V4L2_BUF_TYPE_VIDEO_CAPTURE |
struct v4l2_window win; // V4L2_BUF_TYPE_VIDEO_OVERLAY |
struct v4l2_vbi_format vbi; // V4L2_BUF_TYPE_VBI_CAPTURE |
__u8 raw_data[200]; // user-defined |
} fmt; |
}; |
/* Stream type-dependent parameters |
*/ |
struct v4l2_streamparm |
{ |
enum v4l2_buf_type type; |
union |
{ |
struct v4l2_captureparm capture; |
struct v4l2_outputparm output; |
__u8 raw_data[200]; /* user-defined */ |
} parm; |
}; |
/* |
* 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) |
#if 0 |
#define VIDIOC_G_COMP _IOR ('V', 6, struct v4l2_compression) |
#define VIDIOC_S_COMP _IOW ('V', 7, struct v4l2_compression) |
#endif |
#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 _IOWR ('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 _IOW ('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 _IOW ('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 _IOWR ('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 _IOWR ('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 _IOR ('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 BASE_VIDIOC_PRIVATE 192 /* 192-255 are private */ |
#ifdef __KERNEL__ |
/* |
* |
* V 4 L 2 D R I V E R H E L P E R A P I |
* |
* Some commonly needed functions for drivers (v4l2-common.o module) |
*/ |
#include <linux/fs.h> |
/* Video standard functions */ |
extern unsigned int v4l2_video_std_fps(struct v4l2_standard *vs); |
extern int v4l2_video_std_construct(struct v4l2_standard *vs, |
int id, char *name); |
/* Compatibility layer interface */ |
typedef int (*v4l2_kioctl)(struct inode *inode, struct file *file, |
unsigned int cmd, void *arg); |
int v4l_compat_translate_ioctl(struct inode *inode, struct file *file, |
int cmd, void *arg, v4l2_kioctl driver_ioctl); |
/* names for fancy debug output */ |
extern char *v4l2_field_names[]; |
extern char *v4l2_type_names[]; |
extern char *v4l2_ioctl_names[]; |
#endif /* __KERNEL__ */ |
#endif /* __LINUX_VIDEODEV2_H */ |
/* |
* Local variables: |
* c-basic-offset: 8 |
* End: |
*/ |
/shark/trunk/drivers/linuxc26/include/linux/sound.h |
---|
0,0 → 1,42 |
/* |
* 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) */ |
/* |
* Sound core interface functions |
*/ |
extern int register_sound_special(struct file_operations *fops, int unit); |
extern int register_sound_mixer(struct file_operations *fops, int dev); |
extern int register_sound_midi(struct file_operations *fops, int dev); |
extern int register_sound_dsp(struct file_operations *fops, int dev); |
extern int register_sound_synth(struct file_operations *fops, int dev); |
extern void unregister_sound_special(int unit); |
extern void unregister_sound_mixer(int unit); |
extern void unregister_sound_midi(int unit); |
extern void unregister_sound_dsp(int unit); |
extern void unregister_sound_synth(int unit); |
/shark/trunk/drivers/linuxc26/include/linux/rtc.h |
---|
0,0 → 1,108 |
/* |
* 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 _LINUX_RTC_H_ |
#define _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 disable, 1 = alarm disabled */ |
unsigned char pending; /* 0 = alarm pending, 1 = alarm not 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 */ |
#ifdef __KERNEL__ |
typedef struct rtc_task { |
void (*func)(void *private_data); |
void *private_data; |
} rtc_task_t; |
int rtc_register(rtc_task_t *task); |
int rtc_unregister(rtc_task_t *task); |
int rtc_control(rtc_task_t *t, unsigned int cmd, unsigned long arg); |
void rtc_get_rtc_time(struct rtc_time *rtc_tm); |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_RTC_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/isapnp.h |
---|
0,0 → 1,162 |
/* |
* ISA Plug & Play support |
* Copyright (c) by Jaroslav Kysela <perex@suse.cz> |
* |
* |
* 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 LINUX_ISAPNP_H |
#define LINUX_ISAPNP_H |
#include <linux/config.h> |
#include <linux/errno.h> |
#include <linux/pnp.h> |
/* |
* Configuration registers (TODO: change by specification) |
*/ |
#define ISAPNP_CFG_ACTIVATE 0x30 /* byte */ |
#define ISAPNP_CFG_MEM 0x40 /* 4 * dword */ |
#define ISAPNP_CFG_PORT 0x60 /* 8 * word */ |
#define ISAPNP_CFG_IRQ 0x70 /* 2 * word */ |
#define ISAPNP_CFG_DMA 0x74 /* 2 * byte */ |
/* |
* |
*/ |
#define ISAPNP_VENDOR(a,b,c) (((((a)-'A'+1)&0x3f)<<2)|\ |
((((b)-'A'+1)&0x18)>>3)|((((b)-'A'+1)&7)<<13)|\ |
((((c)-'A'+1)&0x1f)<<8)) |
#define ISAPNP_DEVICE(x) ((((x)&0xf000)>>8)|\ |
(((x)&0x0f00)>>8)|\ |
(((x)&0x00f0)<<8)|\ |
(((x)&0x000f)<<8)) |
#define ISAPNP_FUNCTION(x) ISAPNP_DEVICE(x) |
/* |
* |
*/ |
#ifdef __KERNEL__ |
#define DEVICE_COUNT_COMPATIBLE 4 |
#define ISAPNP_ANY_ID 0xffff |
#define ISAPNP_CARD_DEVS 8 |
#define ISAPNP_CARD_ID(_va, _vb, _vc, _device) \ |
.card_vendor = ISAPNP_VENDOR(_va, _vb, _vc), .card_device = ISAPNP_DEVICE(_device) |
#define ISAPNP_CARD_END \ |
.card_vendor = 0, .card_device = 0 |
#define ISAPNP_DEVICE_ID(_va, _vb, _vc, _function) \ |
{ .vendor = ISAPNP_VENDOR(_va, _vb, _vc), .function = ISAPNP_FUNCTION(_function) } |
/* export used IDs outside module */ |
#define ISAPNP_CARD_TABLE(name) \ |
MODULE_GENERIC_TABLE(isapnp_card, name) |
struct isapnp_card_id { |
unsigned long driver_data; /* data private to the driver */ |
unsigned short card_vendor, card_device; |
struct { |
unsigned short vendor, function; |
} devs[ISAPNP_CARD_DEVS]; /* logical devices */ |
}; |
#define ISAPNP_DEVICE_SINGLE(_cva, _cvb, _cvc, _cdevice, _dva, _dvb, _dvc, _dfunction) \ |
.card_vendor = ISAPNP_VENDOR(_cva, _cvb, _cvc), .card_device = ISAPNP_DEVICE(_cdevice), \ |
.vendor = ISAPNP_VENDOR(_dva, _dvb, _dvc), .function = ISAPNP_FUNCTION(_dfunction) |
#define ISAPNP_DEVICE_SINGLE_END \ |
.card_vendor = 0, .card_device = 0 |
struct isapnp_device_id { |
unsigned short card_vendor, card_device; |
unsigned short vendor, function; |
unsigned long driver_data; /* data private to the driver */ |
}; |
#if defined(CONFIG_ISAPNP) || (defined(CONFIG_ISAPNP_MODULE) && defined(MODULE)) |
#define __ISAPNP__ |
/* lowlevel configuration */ |
int isapnp_present(void); |
int isapnp_cfg_begin(int csn, int device); |
int isapnp_cfg_end(void); |
unsigned char isapnp_read_byte(unsigned char idx); |
unsigned short isapnp_read_word(unsigned char idx); |
unsigned int isapnp_read_dword(unsigned char idx); |
void isapnp_write_byte(unsigned char idx, unsigned char val); |
void isapnp_write_word(unsigned char idx, unsigned short val); |
void isapnp_write_dword(unsigned char idx, unsigned int val); |
void isapnp_wake(unsigned char csn); |
void isapnp_device(unsigned char device); |
void isapnp_activate(unsigned char device); |
void isapnp_deactivate(unsigned char device); |
void *isapnp_alloc(long size); |
#ifdef CONFIG_PROC_FS |
int isapnp_proc_init(void); |
int isapnp_proc_done(void); |
#else |
static inline int isapnp_proc_init(void) { return 0; } |
static inline int isapnp_proc_done(void) { return 0; } |
#endif |
/* init/main.c */ |
int isapnp_init(void); |
/* compat */ |
struct pnp_card *pnp_find_card(unsigned short vendor, |
unsigned short device, |
struct pnp_card *from); |
struct pnp_dev *pnp_find_dev(struct pnp_card *card, |
unsigned short vendor, |
unsigned short function, |
struct pnp_dev *from); |
#else /* !CONFIG_ISAPNP */ |
/* lowlevel configuration */ |
static inline int isapnp_present(void) { return 0; } |
static inline int isapnp_cfg_begin(int csn, int device) { return -ENODEV; } |
static inline int isapnp_cfg_end(void) { return -ENODEV; } |
static inline unsigned char isapnp_read_byte(unsigned char idx) { return 0xff; } |
static inline unsigned short isapnp_read_word(unsigned char idx) { return 0xffff; } |
static inline unsigned int isapnp_read_dword(unsigned char idx) { return 0xffffffff; } |
static inline void isapnp_write_byte(unsigned char idx, unsigned char val) { ; } |
static inline void isapnp_write_word(unsigned char idx, unsigned short val) { ; } |
static inline void isapnp_write_dword(unsigned char idx, unsigned int val) { ; } |
static inline void isapnp_wake(unsigned char csn) { ; } |
static inline void isapnp_device(unsigned char device) { ; } |
static inline void isapnp_activate(unsigned char device) { ; } |
static inline void isapnp_deactivate(unsigned char device) { ; } |
static inline struct pnp_card *pnp_find_card(unsigned short vendor, |
unsigned short device, |
struct pnp_card *from) { return NULL; } |
static inline struct pnp_dev *pnp_find_dev(struct pnp_card *card, |
unsigned short vendor, |
unsigned short function, |
struct pnp_dev *from) { return NULL; } |
#endif /* CONFIG_ISAPNP */ |
#endif /* __KERNEL__ */ |
#endif /* LINUX_ISAPNP_H */ |
/shark/trunk/drivers/linuxc26/include/linux/pnp.h |
---|
0,0 → 1,460 |
/* |
* Linux Plug and Play Support |
* Copyright by Adam Belay <ambx1@neo.rr.com> |
* |
*/ |
#ifndef _LINUX_PNP_H |
#define _LINUX_PNP_H |
#ifdef __KERNEL__ |
#include <linux/device.h> |
#include <linux/list.h> |
#include <linux/errno.h> |
#define PNP_MAX_PORT 8 |
#define PNP_MAX_MEM 4 |
#define PNP_MAX_IRQ 2 |
#define PNP_MAX_DMA 2 |
#define PNP_MAX_DEVICES 8 |
#define PNP_ID_LEN 8 |
#define PNP_NAME_LEN 50 |
struct pnp_protocol; |
struct pnp_dev; |
/* |
* Resource Management |
*/ |
/* Use these instead of directly reading pnp_dev to get resource information */ |
#define pnp_port_start(dev,bar) ((dev)->res.port_resource[(bar)].start) |
#define pnp_port_end(dev,bar) ((dev)->res.port_resource[(bar)].end) |
#define pnp_port_flags(dev,bar) ((dev)->res.port_resource[(bar)].flags) |
#define pnp_port_valid(dev,bar) (pnp_port_flags((dev),(bar)) & IORESOURCE_IO) |
#define pnp_port_len(dev,bar) \ |
((pnp_port_start((dev),(bar)) == 0 && \ |
pnp_port_end((dev),(bar)) == \ |
pnp_port_start((dev),(bar))) ? 0 : \ |
\ |
(pnp_port_end((dev),(bar)) - \ |
pnp_port_start((dev),(bar)) + 1)) |
#define pnp_mem_start(dev,bar) ((dev)->res.mem_resource[(bar)].start) |
#define pnp_mem_end(dev,bar) ((dev)->res.mem_resource[(bar)].end) |
#define pnp_mem_flags(dev,bar) ((dev)->res.mem_resource[(bar)].flags) |
#define pnp_mem_valid(dev,bar) (pnp_mem_flags((dev),(bar)) & IORESOURCE_MEM) |
#define pnp_mem_len(dev,bar) \ |
((pnp_mem_start((dev),(bar)) == 0 && \ |
pnp_mem_end((dev),(bar)) == \ |
pnp_mem_start((dev),(bar))) ? 0 : \ |
\ |
(pnp_mem_end((dev),(bar)) - \ |
pnp_mem_start((dev),(bar)) + 1)) |
#define pnp_irq(dev,bar) ((dev)->res.irq_resource[(bar)].start) |
#define pnp_irq_flags(dev,bar) ((dev)->res.irq_resource[(bar)].flags) |
#define pnp_irq_valid(dev,bar) (pnp_irq_flags((dev),(bar)) & IORESOURCE_IRQ) |
#define pnp_dma(dev,bar) ((dev)->res.dma_resource[(bar)].start) |
#define pnp_dma_flags(dev,bar) ((dev)->res.dma_resource[(bar)].flags) |
#define pnp_dma_valid(dev,bar) (pnp_dma_flags((dev),(bar)) & IORESOURCE_DMA) |
#define PNP_PORT_FLAG_16BITADDR (1<<0) |
#define PNP_PORT_FLAG_FIXED (1<<1) |
struct pnp_port { |
unsigned short min; /* min base number */ |
unsigned short max; /* max base number */ |
unsigned char align; /* align boundary */ |
unsigned char size; /* size of range */ |
unsigned char flags; /* port flags */ |
unsigned char pad; /* pad */ |
struct pnp_port *next; /* next port */ |
}; |
struct pnp_irq { |
unsigned short map; /* bitmaks for IRQ lines */ |
unsigned char flags; /* IRQ flags */ |
unsigned char pad; /* pad */ |
struct pnp_irq *next; /* next IRQ */ |
}; |
struct pnp_dma { |
unsigned char map; /* bitmask for DMA channels */ |
unsigned char flags; /* DMA flags */ |
struct pnp_dma *next; /* next port */ |
}; |
struct pnp_mem { |
unsigned int min; /* min base number */ |
unsigned int max; /* max base number */ |
unsigned int align; /* align boundary */ |
unsigned int size; /* size of range */ |
unsigned char flags; /* memory flags */ |
unsigned char pad; /* pad */ |
struct pnp_mem *next; /* next memory resource */ |
}; |
#define PNP_RES_PRIORITY_PREFERRED 0 |
#define PNP_RES_PRIORITY_ACCEPTABLE 1 |
#define PNP_RES_PRIORITY_FUNCTIONAL 2 |
#define PNP_RES_PRIORITY_INVALID 65535 |
struct pnp_option { |
unsigned short priority; /* priority */ |
struct pnp_port *port; /* first port */ |
struct pnp_irq *irq; /* first IRQ */ |
struct pnp_dma *dma; /* first DMA */ |
struct pnp_mem *mem; /* first memory resource */ |
struct pnp_option *next; /* used to chain dependent resources */ |
}; |
struct pnp_resource_table { |
struct resource port_resource[PNP_MAX_PORT]; |
struct resource mem_resource[PNP_MAX_MEM]; |
struct resource dma_resource[PNP_MAX_DMA]; |
struct resource irq_resource[PNP_MAX_IRQ]; |
}; |
/* |
* Device Managemnt |
*/ |
struct pnp_card { |
struct device dev; /* Driver Model device interface */ |
unsigned char number; /* used as an index, must be unique */ |
struct list_head global_list; /* node in global list of cards */ |
struct list_head protocol_list; /* node in protocol's list of cards */ |
struct list_head devices; /* devices attached to the card */ |
struct pnp_protocol * protocol; |
struct pnp_id * id; /* contains supported EISA IDs*/ |
char name[PNP_NAME_LEN]; /* contains a human-readable name */ |
unsigned char pnpver; /* Plug & Play version */ |
unsigned char productver; /* product version */ |
unsigned int serial; /* serial number */ |
unsigned char checksum; /* if zero - checksum passed */ |
struct proc_dir_entry *procdir; /* directory entry in /proc/bus/isapnp */ |
}; |
#define global_to_pnp_card(n) list_entry(n, struct pnp_card, global_list) |
#define protocol_to_pnp_card(n) list_entry(n, struct pnp_card, protocol_list) |
#define to_pnp_card(n) container_of(n, struct pnp_card, dev) |
#define pnp_for_each_card(card) \ |
for((card) = global_to_pnp_card(pnp_cards.next); \ |
(card) != global_to_pnp_card(&pnp_cards); \ |
(card) = global_to_pnp_card((card)->global_list.next)) |
struct pnp_card_link { |
struct pnp_card * card; |
struct pnp_card_driver * driver; |
void * driver_data; |
}; |
static inline void *pnp_get_card_drvdata (struct pnp_card_link *pcard) |
{ |
return pcard->driver_data; |
} |
static inline void pnp_set_card_drvdata (struct pnp_card_link *pcard, void *data) |
{ |
pcard->driver_data = data; |
} |
struct pnp_dev { |
struct device dev; /* Driver Model device interface */ |
unsigned char number; /* used as an index, must be unique */ |
int status; |
struct list_head global_list; /* node in global list of devices */ |
struct list_head protocol_list; /* node in list of device's protocol */ |
struct list_head card_list; /* node in card's list of devices */ |
struct list_head rdev_list; /* node in cards list of requested devices */ |
struct pnp_protocol * protocol; |
struct pnp_card * card; /* card the device is attached to, none if NULL */ |
struct pnp_driver * driver; |
struct pnp_card_link * card_link; |
struct pnp_id * id; /* supported EISA IDs*/ |
int active; |
int capabilities; |
struct pnp_option * independent; |
struct pnp_option * dependent; |
struct pnp_resource_table res; |
char name[PNP_NAME_LEN]; /* contains a human-readable name */ |
unsigned short regs; /* ISAPnP: supported registers */ |
int flags; /* used by protocols */ |
struct proc_dir_entry *procent; /* device entry in /proc/bus/isapnp */ |
}; |
#define global_to_pnp_dev(n) list_entry(n, struct pnp_dev, global_list) |
#define card_to_pnp_dev(n) list_entry(n, struct pnp_dev, card_list) |
#define protocol_to_pnp_dev(n) list_entry(n, struct pnp_dev, protocol_list) |
#define to_pnp_dev(n) container_of(n, struct pnp_dev, dev) |
#define pnp_for_each_dev(dev) \ |
for((dev) = global_to_pnp_dev(pnp_global.next); \ |
(dev) != global_to_pnp_dev(&pnp_global); \ |
(dev) = global_to_pnp_dev((dev)->global_list.next)) |
#define card_for_each_dev(card,dev) \ |
for((dev) = card_to_pnp_dev((card)->devices.next); \ |
(dev) != card_to_pnp_dev(&(card)->devices); \ |
(dev) = card_to_pnp_dev((dev)->card_list.next)) |
#define pnp_dev_name(dev) (dev)->name |
static inline void *pnp_get_drvdata (struct pnp_dev *pdev) |
{ |
return dev_get_drvdata(&pdev->dev); |
} |
static inline void pnp_set_drvdata (struct pnp_dev *pdev, void *data) |
{ |
dev_set_drvdata(&pdev->dev, data); |
} |
struct pnp_fixup { |
char id[7]; |
void (*quirk_function)(struct pnp_dev *dev); /* fixup function */ |
}; |
/* config parameters */ |
#define PNP_CONFIG_NORMAL 0x0001 |
#define PNP_CONFIG_FORCE 0x0002 /* disables validity checking */ |
/* capabilities */ |
#define PNP_READ 0x0001 |
#define PNP_WRITE 0x0002 |
#define PNP_DISABLE 0x0004 |
#define PNP_CONFIGURABLE 0x0008 |
#define PNP_REMOVABLE 0x0010 |
#define pnp_can_read(dev) (((dev)->protocol) && ((dev)->protocol->get) && \ |
((dev)->capabilities & PNP_READ)) |
#define pnp_can_write(dev) (((dev)->protocol) && ((dev)->protocol->set) && \ |
((dev)->capabilities & PNP_WRITE)) |
#define pnp_can_disable(dev) (((dev)->protocol) && ((dev)->protocol->disable) && \ |
((dev)->capabilities & PNP_DISABLE)) |
#define pnp_can_configure(dev) ((!(dev)->active) && \ |
((dev)->capabilities & PNP_CONFIGURABLE)) |
#ifdef CONFIG_ISAPNP |
extern struct pnp_protocol isapnp_protocol; |
#define pnp_device_is_isapnp(dev) ((dev)->protocol == (&isapnp_protocol)) |
#else |
#define pnp_device_is_isapnp(dev) 0 |
#endif |
#ifdef CONFIG_PNPBIOS |
extern struct pnp_protocol pnpbios_protocol; |
#define pnp_device_is_pnpbios(dev) ((dev)->protocol == (&pnpbios_protocol)) |
#else |
#define pnp_device_is_pnpbios(dev) 0 |
#endif |
/* status */ |
#define PNP_READY 0x0000 |
#define PNP_ATTACHED 0x0001 |
#define PNP_BUSY 0x0002 |
#define PNP_FAULTY 0x0004 |
/* isapnp specific macros */ |
#define isapnp_card_number(dev) ((dev)->card ? (dev)->card->number : -1) |
#define isapnp_csn_number(dev) ((dev)->number) |
/* |
* Driver Management |
*/ |
struct pnp_id { |
char id[PNP_ID_LEN]; |
struct pnp_id * next; |
}; |
struct pnp_device_id { |
char id[PNP_ID_LEN]; |
unsigned long driver_data; /* data private to the driver */ |
}; |
struct pnp_card_device_id { |
char id[PNP_ID_LEN]; |
unsigned long driver_data; /* data private to the driver */ |
struct { |
char id[PNP_ID_LEN]; |
} devs[PNP_MAX_DEVICES]; /* logical devices */ |
}; |
struct pnp_driver { |
char * name; |
const struct pnp_device_id *id_table; |
unsigned int flags; |
int (*probe) (struct pnp_dev *dev, const struct pnp_device_id *dev_id); |
void (*remove) (struct pnp_dev *dev); |
struct device_driver driver; |
}; |
#define to_pnp_driver(drv) container_of(drv, struct pnp_driver, driver) |
struct pnp_card_driver { |
struct list_head global_list; |
char * name; |
const struct pnp_card_device_id *id_table; |
unsigned int flags; |
int (*probe) (struct pnp_card_link *card, const struct pnp_card_device_id *card_id); |
void (*remove) (struct pnp_card_link *card); |
struct pnp_driver link; |
}; |
#define to_pnp_card_driver(drv) container_of(drv, struct pnp_card_driver, link) |
/* pnp driver flags */ |
#define PNP_DRIVER_RES_DO_NOT_CHANGE 0x0001 /* do not change the state of the device */ |
#define PNP_DRIVER_RES_DISABLE 0x0003 /* ensure the device is disabled */ |
/* |
* Protocol Management |
*/ |
struct pnp_protocol { |
struct list_head protocol_list; |
char * name; |
/* resource control functions */ |
int (*get)(struct pnp_dev *dev, struct pnp_resource_table *res); |
int (*set)(struct pnp_dev *dev, struct pnp_resource_table *res); |
int (*disable)(struct pnp_dev *dev); |
/* used by pnp layer only (look but don't touch) */ |
unsigned char number; /* protocol number*/ |
struct device dev; /* link to driver model */ |
struct list_head cards; |
struct list_head devices; |
}; |
#define to_pnp_protocol(n) list_entry(n, struct pnp_protocol, protocol_list) |
#define protocol_for_each_card(protocol,card) \ |
for((card) = protocol_to_pnp_card((protocol)->cards.next); \ |
(card) != protocol_to_pnp_card(&(protocol)->cards); \ |
(card) = protocol_to_pnp_card((card)->protocol_list.next)) |
#define protocol_for_each_dev(protocol,dev) \ |
for((dev) = protocol_to_pnp_dev((protocol)->devices.next); \ |
(dev) != protocol_to_pnp_dev(&(protocol)->devices); \ |
(dev) = protocol_to_pnp_dev((dev)->protocol_list.next)) |
#if defined(CONFIG_PNP) |
/* device management */ |
int pnp_register_protocol(struct pnp_protocol *protocol); |
void pnp_unregister_protocol(struct pnp_protocol *protocol); |
int pnp_add_device(struct pnp_dev *dev); |
void pnp_remove_device(struct pnp_dev *dev); |
int pnp_device_attach(struct pnp_dev *pnp_dev); |
void pnp_device_detach(struct pnp_dev *pnp_dev); |
extern struct list_head pnp_global; |
/* multidevice card support */ |
int pnp_add_card(struct pnp_card *card); |
void pnp_remove_card(struct pnp_card *card); |
int pnp_add_card_device(struct pnp_card *card, struct pnp_dev *dev); |
void pnp_remove_card_device(struct pnp_dev *dev); |
int pnp_add_card_id(struct pnp_id *id, struct pnp_card *card); |
struct pnp_dev * pnp_request_card_device(struct pnp_card_link *clink, const char * id, struct pnp_dev * from); |
void pnp_release_card_device(struct pnp_dev * dev); |
int pnp_register_card_driver(struct pnp_card_driver * drv); |
void pnp_unregister_card_driver(struct pnp_card_driver * drv); |
extern struct list_head pnp_cards; |
/* resource management */ |
struct pnp_option * pnp_register_independent_option(struct pnp_dev *dev); |
struct pnp_option * pnp_register_dependent_option(struct pnp_dev *dev, int priority); |
int pnp_register_irq_resource(struct pnp_option *option, struct pnp_irq *data); |
int pnp_register_dma_resource(struct pnp_option *option, struct pnp_dma *data); |
int pnp_register_port_resource(struct pnp_option *option, struct pnp_port *data); |
int pnp_register_mem_resource(struct pnp_option *option, struct pnp_mem *data); |
void pnp_init_resource_table(struct pnp_resource_table *table); |
int pnp_assign_resources(struct pnp_dev *dev, int depnum); |
int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, int mode); |
int pnp_auto_config_dev(struct pnp_dev *dev); |
int pnp_validate_config(struct pnp_dev *dev); |
int pnp_activate_dev(struct pnp_dev *dev); |
int pnp_disable_dev(struct pnp_dev *dev); |
void pnp_resource_change(struct resource *resource, unsigned long start, unsigned long size); |
/* protocol helpers */ |
int pnp_is_active(struct pnp_dev * dev); |
int compare_pnp_id(struct pnp_id * pos, const char * id); |
int pnp_add_id(struct pnp_id *id, struct pnp_dev *dev); |
int pnp_register_driver(struct pnp_driver *drv); |
void pnp_unregister_driver(struct pnp_driver *drv); |
#else |
/* device management */ |
static inline int pnp_register_protocol(struct pnp_protocol *protocol) { return -ENODEV; } |
static inline void pnp_unregister_protocol(struct pnp_protocol *protocol) { } |
static inline int pnp_init_device(struct pnp_dev *dev) { return -ENODEV; } |
static inline int pnp_add_device(struct pnp_dev *dev) { return -ENODEV; } |
static inline void pnp_remove_device(struct pnp_dev *dev) { } |
static inline int pnp_device_attach(struct pnp_dev *pnp_dev) { return -ENODEV; } |
static inline void pnp_device_detach(struct pnp_dev *pnp_dev) { ; } |
/* multidevice card support */ |
static inline int pnp_add_card(struct pnp_card *card) { return -ENODEV; } |
static inline void pnp_remove_card(struct pnp_card *card) { ; } |
static inline int pnp_add_card_device(struct pnp_card *card, struct pnp_dev *dev) { return -ENODEV; } |
static inline void pnp_remove_card_device(struct pnp_dev *dev) { ; } |
static inline int pnp_add_card_id(struct pnp_id *id, struct pnp_card *card) { return -ENODEV; } |
static inline struct pnp_dev * pnp_request_card_device(struct pnp_card_link *clink, const char * id, struct pnp_dev * from) { return NULL; } |
static inline void pnp_release_card_device(struct pnp_dev * dev) { ; } |
static inline int pnp_register_card_driver(struct pnp_card_driver * drv) { return -ENODEV; } |
static inline void pnp_unregister_card_driver(struct pnp_card_driver * drv) { ; } |
/* resource management */ |
static inline struct pnp_option * pnp_register_independent_option(struct pnp_dev *dev) { return NULL; } |
static inline struct pnp_option * pnp_register_dependent_option(struct pnp_dev *dev, int priority) { return NULL; } |
static inline int pnp_register_irq_resource(struct pnp_option *option, struct pnp_irq *data) { return -ENODEV; } |
static inline int pnp_register_dma_resource(struct pnp_option *option, struct pnp_dma *data) { return -ENODEV; } |
static inline int pnp_register_port_resource(struct pnp_option *option, struct pnp_port *data) { return -ENODEV; } |
static inline int pnp_register_mem_resource(struct pnp_option *option, struct pnp_mem *data) { return -ENODEV; } |
static inline void pnp_init_resource_table(struct pnp_resource_table *table) { } |
static inline int pnp_assign_resources(struct pnp_dev *dev, int depnum) { return -ENODEV; } |
static inline int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, int mode) { return -ENODEV; } |
static inline int pnp_auto_config_dev(struct pnp_dev *dev) { return -ENODEV; } |
static inline int pnp_validate_config(struct pnp_dev *dev) { return -ENODEV; } |
static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; } |
static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; } |
static inline void pnp_resource_change(struct resource *resource, unsigned long start, unsigned long size) { } |
/* protocol helpers */ |
static inline int pnp_is_active(struct pnp_dev * dev) { return 0; } |
static inline int compare_pnp_id(struct pnp_id * pos, const char * id) { return -ENODEV; } |
static inline int pnp_add_id(struct pnp_id *id, struct pnp_dev *dev) { return -ENODEV; } |
static inline int pnp_register_driver(struct pnp_driver *drv) { return -ENODEV; } |
static inline void pnp_unregister_driver(struct pnp_driver *drv) { ; } |
#endif /* CONFIG_PNP */ |
#define pnp_err(format, arg...) printk(KERN_ERR "pnp: " format "\n" , ## arg) |
#define pnp_info(format, arg...) printk(KERN_INFO "pnp: " format "\n" , ## arg) |
#define pnp_warn(format, arg...) printk(KERN_WARNING "pnp: " format "\n" , ## arg) |
#ifdef DEBUG |
#define pnp_dbg(format, arg...) printk(KERN_DEBUG "pnp: " format "\n" , ## arg) |
#else |
#define pnp_dbg(format, arg...) do {} while (0) |
#endif |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_PNP_H */ |
/shark/trunk/drivers/linuxc26/include/linux/percpu_counter.h |
---|
0,0 → 1,100 |
/* |
* A simple "approximate counter" for use in ext2 and ext3 superblocks. |
* |
* WARNING: these things are HUGE. 4 kbytes per counter on 32-way P4. |
*/ |
#include <linux/config.h> |
#include <linux/spinlock.h> |
#include <linux/smp.h> |
#include <linux/threads.h> |
#ifdef CONFIG_SMP |
struct __percpu_counter { |
long count; |
} ____cacheline_aligned; |
struct percpu_counter { |
spinlock_t lock; |
long count; |
struct __percpu_counter counters[NR_CPUS]; |
}; |
#if NR_CPUS >= 16 |
#define FBC_BATCH (NR_CPUS*2) |
#else |
#define FBC_BATCH (NR_CPUS*4) |
#endif |
static inline void percpu_counter_init(struct percpu_counter *fbc) |
{ |
int i; |
spin_lock_init(&fbc->lock); |
fbc->count = 0; |
for (i = 0; i < NR_CPUS; i++) |
fbc->counters[i].count = 0; |
} |
void percpu_counter_mod(struct percpu_counter *fbc, long amount); |
static inline long percpu_counter_read(struct percpu_counter *fbc) |
{ |
return fbc->count; |
} |
/* |
* It is possible for the percpu_counter_read() to return a small negative |
* number for some counter which should never be negative. |
*/ |
static inline long percpu_counter_read_positive(struct percpu_counter *fbc) |
{ |
long ret = fbc->count; |
barrier(); /* Prevent reloads of fbc->count */ |
if (ret > 0) |
return ret; |
return 1; |
} |
#else |
struct percpu_counter { |
long count; |
}; |
static inline void percpu_counter_init(struct percpu_counter *fbc) |
{ |
fbc->count = 0; |
} |
static inline void |
percpu_counter_mod(struct percpu_counter *fbc, long amount) |
{ |
preempt_disable(); |
fbc->count += amount; |
preempt_enable(); |
} |
static inline long percpu_counter_read(struct percpu_counter *fbc) |
{ |
return fbc->count; |
} |
static inline long percpu_counter_read_positive(struct percpu_counter *fbc) |
{ |
return fbc->count; |
} |
#endif /* CONFIG_SMP */ |
static inline void percpu_counter_inc(struct percpu_counter *fbc) |
{ |
percpu_counter_mod(fbc, 1); |
} |
static inline void percpu_counter_dec(struct percpu_counter *fbc) |
{ |
percpu_counter_mod(fbc, -1); |
} |
/shark/trunk/drivers/linuxc26/include/linux/input.h |
---|
0,0 → 1,926 |
#ifndef _INPUT_H |
#define _INPUT_H |
/* |
* 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. |
*/ |
#ifdef __KERNEL__ |
#include <linux/time.h> |
#include <linux/list.h> |
#else |
#include <sys/time.h> |
#include <sys/ioctl.h> |
#include <asm/types.h> |
#endif |
/* |
* The event structure itself |
*/ |
struct input_event { |
struct timeval time; |
__u16 type; |
__u16 code; |
__s32 value; |
}; |
/* |
* Protocol version. |
*/ |
#define EV_VERSION 0x010000 |
/* |
* IOCTLs (0x00 - 0x7f) |
*/ |
struct input_id { |
__u16 bustype; |
__u16 vendor; |
__u16 product; |
__u16 version; |
}; |
struct input_absinfo { |
__s32 value; |
__s32 minimum; |
__s32 maximum; |
__s32 fuzz; |
__s32 flat; |
}; |
#define EVIOCGVERSION _IOR('E', 0x01, int) /* get driver version */ |
#define EVIOCGID _IOR('E', 0x02, struct input_id) /* get device ID */ |
#define EVIOCGKEYCODE _IOR('E', 0x04, int[2]) /* get keycode */ |
#define EVIOCSKEYCODE _IOW('E', 0x04, int[2]) /* set keycode */ |
#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 EVIOCGKEY(len) _IOC(_IOC_READ, 'E', 0x18, len) /* get global keystate */ |
#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 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 */ |
/* |
* Event types |
*/ |
#define EV_SYN 0x00 |
#define EV_KEY 0x01 |
#define EV_REL 0x02 |
#define EV_ABS 0x03 |
#define EV_MSC 0x04 |
#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 |
/* |
* Synchronization events. |
*/ |
#define SYN_REPORT 0 |
#define SYN_CONFIG 1 |
/* |
* Keys and buttons |
*/ |
#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_103RD 84 |
#define KEY_F13 85 |
#define KEY_102ND 86 |
#define KEY_F11 87 |
#define KEY_F12 88 |
#define KEY_F14 89 |
#define KEY_F15 90 |
#define KEY_F16 91 |
#define KEY_F17 92 |
#define KEY_F18 93 |
#define KEY_F19 94 |
#define KEY_F20 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 |
#define KEY_KPEQUAL 117 |
#define KEY_KPPLUSMINUS 118 |
#define KEY_PAUSE 119 |
#define KEY_F21 120 |
#define KEY_F22 121 |
#define KEY_F23 122 |
#define KEY_F24 123 |
#define KEY_KPCOMMA 124 |
#define KEY_LEFTMETA 125 |
#define KEY_RIGHTMETA 126 |
#define KEY_COMPOSE 127 |
#define KEY_STOP 128 |
#define KEY_AGAIN 129 |
#define KEY_PROPS 130 |
#define KEY_UNDO 131 |
#define KEY_FRONT 132 |
#define KEY_COPY 133 |
#define KEY_OPEN 134 |
#define KEY_PASTE 135 |
#define KEY_FIND 136 |
#define KEY_CUT 137 |
#define KEY_HELP 138 |
#define KEY_MENU 139 |
#define KEY_CALC 140 |
#define KEY_SETUP 141 |
#define KEY_SLEEP 142 |
#define KEY_WAKEUP 143 |
#define KEY_FILE 144 |
#define KEY_SENDFILE 145 |
#define KEY_DELETEFILE 146 |
#define KEY_XFER 147 |
#define KEY_PROG1 148 |
#define KEY_PROG2 149 |
#define KEY_WWW 150 |
#define KEY_MSDOS 151 |
#define KEY_COFFEE 152 |
#define KEY_DIRECTION 153 |
#define KEY_CYCLEWINDOWS 154 |
#define KEY_MAIL 155 |
#define KEY_BOOKMARKS 156 |
#define KEY_COMPUTER 157 |
#define KEY_BACK 158 |
#define KEY_FORWARD 159 |
#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 |
#define KEY_ISO 170 |
#define KEY_CONFIG 171 |
#define KEY_HOMEPAGE 172 |
#define KEY_REFRESH 173 |
#define KEY_EXIT 174 |
#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_INTL1 181 |
#define KEY_INTL2 182 |
#define KEY_INTL3 183 |
#define KEY_INTL4 184 |
#define KEY_INTL5 185 |
#define KEY_INTL6 186 |
#define KEY_INTL7 187 |
#define KEY_INTL8 188 |
#define KEY_INTL9 189 |
#define KEY_LANG1 190 |
#define KEY_LANG2 191 |
#define KEY_LANG3 192 |
#define KEY_LANG4 193 |
#define KEY_LANG5 194 |
#define KEY_LANG6 195 |
#define KEY_LANG7 196 |
#define KEY_LANG8 197 |
#define KEY_LANG9 198 |
#define KEY_PLAYCD 200 |
#define KEY_PAUSECD 201 |
#define KEY_PROG3 202 |
#define KEY_PROG4 203 |
#define KEY_SUSPEND 205 |
#define KEY_CLOSE 206 |
#define KEY_PLAY 207 |
#define KEY_FASTFORWARD 208 |
#define KEY_BASSBOOST 209 |
#define KEY_PRINT 210 |
#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 |
#define KEY_SPORT 220 |
#define KEY_SHOP 221 |
#define KEY_ALTERASE 222 |
#define KEY_CANCEL 223 |
#define KEY_BRIGHTNESSDOWN 224 |
#define KEY_BRIGHTNESSUP 225 |
#define KEY_MEDIA 226 |
#define KEY_UNKNOWN 240 |
#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_TOUCH 0x14a |
#define BTN_STYLUS 0x14b |
#define BTN_STYLUS2 0x14c |
#define BTN_TOOL_DOUBLETAP 0x14d |
#define BTN_TOOL_TRIPLETAP 0x14e |
#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 |
#define KEY_TIME 0x167 |
#define KEY_VENDOR 0x168 |
#define KEY_ARCHIVE 0x169 |
#define KEY_PROGRAM 0x16a |
#define KEY_CHANNEL 0x16b |
#define KEY_FAVORITES 0x16c |
#define KEY_EPG 0x16d |
#define KEY_PVR 0x16e |
#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 |
#define KEY_TV 0x179 |
#define KEY_TV2 0x17a |
#define KEY_VCR 0x17b |
#define KEY_VCR2 0x17c |
#define KEY_SAT 0x17d |
#define KEY_SAT2 0x17e |
#define KEY_CD 0x17f |
#define KEY_TAPE 0x180 |
#define KEY_RADIO 0x181 |
#define KEY_TUNER 0x182 |
#define KEY_PLAYER 0x183 |
#define KEY_TEXT 0x184 |
#define KEY_DVD 0x185 |
#define KEY_AUX 0x186 |
#define KEY_MP3 0x187 |
#define KEY_AUDIO 0x188 |
#define KEY_VIDEO 0x189 |
#define KEY_DIRECTORY 0x18a |
#define KEY_LIST 0x18b |
#define KEY_MEMO 0x18c |
#define KEY_CALENDAR 0x18d |
#define KEY_RED 0x18e |
#define KEY_GREEN 0x18f |
#define KEY_YELLOW 0x190 |
#define KEY_BLUE 0x191 |
#define KEY_CHANNELUP 0x192 |
#define KEY_CHANNELDOWN 0x193 |
#define KEY_FIRST 0x194 |
#define KEY_LAST 0x195 |
#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_DEL_EOL 0x1c0 |
#define KEY_DEL_EOS 0x1c1 |
#define KEY_INS_LINE 0x1c2 |
#define KEY_DEL_LINE 0x1c3 |
#define KEY_MAX 0x1ff |
/* |
* Relative axes |
*/ |
#define REL_X 0x00 |
#define REL_Y 0x01 |
#define REL_Z 0x02 |
#define REL_HWHEEL 0x06 |
#define REL_DIAL 0x07 |
#define REL_WHEEL 0x08 |
#define REL_MISC 0x09 |
#define REL_MAX 0x0f |
/* |
* 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_MAX 0x3f |
/* |
* Misc events |
*/ |
#define MSC_SERIAL 0x00 |
#define MSC_PULSELED 0x01 |
#define MSC_GESTURE 0x02 |
#define MSC_MAX 0x07 |
/* |
* 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_MAX 0x0f |
/* |
* Autorepeat values |
*/ |
#define REP_DELAY 0x00 |
#define REP_PERIOD 0x01 |
#define REP_MAX 0x01 |
/* |
* Sounds |
*/ |
#define SND_CLICK 0x00 |
#define SND_BELL 0x01 |
#define SND_TONE 0x02 |
#define SND_MAX 0x07 |
/* |
* 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_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 |
/* |
* Values describing the status of an 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 |
* The first structures are not passed directly by using ioctls. |
* They are sub-structures of the actually sent structure (called ff_effect) |
*/ |
struct ff_replay { |
__u16 length; /* Duration of an effect in ms. All other times are also expressed in ms */ |
__u16 delay; /* Time to wait before to start playing an effect */ |
}; |
struct ff_trigger { |
__u16 button; /* Number of button triggering an effect */ |
__u16 interval; /* Time to wait before an effect can be re-triggered (ms) */ |
}; |
struct ff_envelope { |
__u16 attack_length; /* Duration of attack (ms) */ |
__u16 attack_level; /* Level at beginning of attack */ |
__u16 fade_length; /* Duration of fade (ms) */ |
__u16 fade_level; /* Level at end of fade */ |
}; |
/* FF_CONSTANT */ |
struct ff_constant_effect { |
__s16 level; /* Strength of effect. Negative values are OK */ |
struct ff_envelope envelope; |
}; |
/* FF_RAMP */ |
struct ff_ramp_effect { |
__s16 start_level; |
__s16 end_level; |
struct ff_envelope envelope; |
}; |
/* FF_SPRING of FF_FRICTION */ |
struct ff_condition_effect { |
__u16 right_saturation; /* Max level when joystick is on the right */ |
__u16 left_saturation; /* Max level when joystick in on the left */ |
__s16 right_coeff; /* Indicates how fast the force grows when the |
joystick moves to the right */ |
__s16 left_coeff; /* Same for left side */ |
__u16 deadband; /* Size of area where no force is produced */ |
__s16 center; /* Position of dead zone */ |
}; |
/* FF_PERIODIC */ |
struct ff_periodic_effect { |
__u16 waveform; /* Kind of wave (sine, square...) */ |
__u16 period; /* in ms */ |
__s16 magnitude; /* Peak value */ |
__s16 offset; /* Mean value of wave (roughly) */ |
__u16 phase; /* 'Horizontal' shift */ |
struct ff_envelope envelope; |
/* Only used if waveform == FF_CUSTOM */ |
__u32 custom_len; /* Number of samples */ |
__s16 *custom_data; /* Buffer of samples */ |
/* Note: the data pointed by custom_data is copied by the driver. You can |
* therefore dispose of the memory after the upload/update */ |
}; |
/* FF_RUMBLE */ |
/* Some rumble pads have two motors of different weight. |
strong_magnitude represents the magnitude of the vibration generated |
by the heavy motor. |
*/ |
struct ff_rumble_effect { |
__u16 strong_magnitude; /* Magnitude of the heavy motor */ |
__u16 weak_magnitude; /* Magnitude of the light one */ |
}; |
/* |
* Structure sent through ioctl from the application to the driver |
*/ |
struct ff_effect { |
__u16 type; |
/* Following field denotes the unique id assigned to an effect. |
* If user sets if to -1, a new effect is created, and its id is returned in the same field |
* Else, the user sets it to the effect id it wants to update. |
*/ |
__s16 id; |
__u16 direction; /* Direction. 0 deg -> 0x0000 (down) |
90 deg -> 0x4000 (left) |
180 deg -> 0x8000 (up) |
270 deg -> 0xC000 (right) |
*/ |
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 |
/* |
* 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 |
/* |
* Set ff device properties |
*/ |
#define FF_GAIN 0x60 |
#define FF_AUTOCENTER 0x61 |
#define FF_MAX 0x7f |
#ifdef __KERNEL__ |
/* |
* In-kernel definitions. |
*/ |
#include <linux/fs.h> |
#include <linux/timer.h> |
#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1) |
#define BIT(x) (1UL<<((x)%BITS_PER_LONG)) |
#define LONG(x) ((x)/BITS_PER_LONG) |
#define INPUT_KEYCODE(dev, scancode) ((dev->keycodesize == 1) ? ((u8*)dev->keycode)[scancode] : \ |
((dev->keycodesize == 2) ? ((u16*)dev->keycode)[scancode] : (((u32*)dev->keycode)[scancode]))) |
#define init_input_dev(dev) do { INIT_LIST_HEAD(&((dev)->h_list)); INIT_LIST_HEAD(&((dev)->node)); } while (0) |
struct input_dev { |
void *private; |
char *name; |
char *phys; |
char *uniq; |
struct input_id id; |
unsigned long evbit[NBITS(EV_MAX)]; |
unsigned long keybit[NBITS(KEY_MAX)]; |
unsigned long relbit[NBITS(REL_MAX)]; |
unsigned long absbit[NBITS(ABS_MAX)]; |
unsigned long mscbit[NBITS(MSC_MAX)]; |
unsigned long ledbit[NBITS(LED_MAX)]; |
unsigned long sndbit[NBITS(SND_MAX)]; |
unsigned long ffbit[NBITS(FF_MAX)]; |
int ff_effects_max; |
unsigned int keycodemax; |
unsigned int keycodesize; |
void *keycode; |
unsigned int repeat_key; |
struct timer_list timer; |
struct pm_dev *pm_dev; |
struct pt_regs *regs; |
int state; |
int sync; |
int abs[ABS_MAX + 1]; |
int rep[REP_MAX + 1]; |
unsigned long key[NBITS(KEY_MAX)]; |
unsigned long led[NBITS(LED_MAX)]; |
unsigned long snd[NBITS(SND_MAX)]; |
int absmax[ABS_MAX + 1]; |
int absmin[ABS_MAX + 1]; |
int absfuzz[ABS_MAX + 1]; |
int absflat[ABS_MAX + 1]; |
int (*open)(struct input_dev *dev); |
void (*close)(struct input_dev *dev); |
int (*accept)(struct input_dev *dev, struct file *file); |
int (*flush)(struct input_dev *dev, struct file *file); |
int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value); |
int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect); |
int (*erase_effect)(struct input_dev *dev, int effect_id); |
struct input_handle *grab; |
struct list_head h_list; |
struct list_head node; |
}; |
/* |
* Structure for hotplug & device<->driver matching. |
*/ |
#define INPUT_DEVICE_ID_MATCH_BUS 1 |
#define INPUT_DEVICE_ID_MATCH_VENDOR 2 |
#define INPUT_DEVICE_ID_MATCH_PRODUCT 4 |
#define INPUT_DEVICE_ID_MATCH_VERSION 8 |
#define INPUT_DEVICE_ID_MATCH_EVBIT 0x010 |
#define INPUT_DEVICE_ID_MATCH_KEYBIT 0x020 |
#define INPUT_DEVICE_ID_MATCH_RELBIT 0x040 |
#define INPUT_DEVICE_ID_MATCH_ABSBIT 0x080 |
#define INPUT_DEVICE_ID_MATCH_MSCIT 0x100 |
#define INPUT_DEVICE_ID_MATCH_LEDBIT 0x200 |
#define INPUT_DEVICE_ID_MATCH_SNDBIT 0x400 |
#define INPUT_DEVICE_ID_MATCH_FFBIT 0x800 |
#define INPUT_DEVICE_ID_MATCH_DEVICE\ |
(INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT) |
#define INPUT_DEVICE_ID_MATCH_DEVICE_AND_VERSION\ |
(INPUT_DEVICE_ID_MATCH_DEVICE | INPUT_DEVICE_ID_MATCH_VERSION) |
struct input_device_id { |
unsigned long flags; |
struct input_id id; |
unsigned long evbit[NBITS(EV_MAX)]; |
unsigned long keybit[NBITS(KEY_MAX)]; |
unsigned long relbit[NBITS(REL_MAX)]; |
unsigned long absbit[NBITS(ABS_MAX)]; |
unsigned long mscbit[NBITS(MSC_MAX)]; |
unsigned long ledbit[NBITS(LED_MAX)]; |
unsigned long sndbit[NBITS(SND_MAX)]; |
unsigned long ffbit[NBITS(FF_MAX)]; |
unsigned long driver_info; |
}; |
struct input_handle; |
struct input_handler { |
void *private; |
void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); |
struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev, struct input_device_id *id); |
void (*disconnect)(struct input_handle *handle); |
struct file_operations *fops; |
int minor; |
char *name; |
struct input_device_id *id_table; |
struct list_head h_list; |
struct list_head node; |
}; |
struct input_handle { |
void *private; |
int open; |
char *name; |
struct input_dev *dev; |
struct input_handler *handler; |
struct list_head d_node; |
struct list_head h_node; |
}; |
#define to_dev(n) container_of(n,struct input_dev,node) |
#define to_handler(n) container_of(n,struct input_handler,node); |
#define to_handle(n) container_of(n,struct input_handle,d_node) |
#define to_handle_h(n) container_of(n,struct input_handle,h_node) |
void input_register_device(struct input_dev *); |
void input_unregister_device(struct input_dev *); |
void input_register_handler(struct input_handler *); |
void input_unregister_handler(struct input_handler *); |
int input_grab_device(struct input_handle *); |
void input_release_device(struct input_handle *); |
int input_open_device(struct input_handle *); |
void input_close_device(struct input_handle *); |
int input_accept_process(struct input_handle *handle, struct file *file); |
int input_flush_device(struct input_handle* handle, struct file* file); |
void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value); |
#define input_report_key(a,b,c) input_event(a, EV_KEY, b, !!(c)) |
#define input_report_rel(a,b,c) input_event(a, EV_REL, b, c) |
#define input_report_abs(a,b,c) input_event(a, EV_ABS, b, c) |
#define input_report_ff(a,b,c) input_event(a, EV_FF, b, c) |
#define input_report_ff_status(a,b,c) input_event(a, EV_FF_STATUS, b, c) |
#define input_regs(a,b) do { (a)->regs = (b); } while (0) |
#define input_sync(a) do { input_event(a, EV_SYN, SYN_REPORT, 0); (a)->regs = NULL; } while (0) |
extern struct class input_class; |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/ppp_defs.h |
---|
0,0 → 1,188 |
/* $Id: ppp_defs.h,v 1.1 2004-01-28 15:26:22 giacomo Exp $ */ |
/* |
* ppp_defs.h - PPP definitions. |
* |
* Copyright (c) 1994 The Australian National University. |
* All rights reserved. |
* |
* 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. The Australian National University |
* makes no representations about the suitability of this software for |
* any purpose. |
* |
* IN NO EVENT SHALL THE AUSTRALIAN NATIONAL UNIVERSITY 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 |
* THE AUSTRALIAN NATIONAL UNIVERSITY HAVE BEEN ADVISED OF THE POSSIBILITY |
* OF SUCH DAMAGE. |
* |
* THE AUSTRALIAN NATIONAL UNIVERSITY 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 THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO |
* OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, |
* OR MODIFICATIONS. |
*/ |
/* |
* ==FILEVERSION 20000114== |
* |
* NOTE TO MAINTAINERS: |
* If you modify this file at all, please set the above date. |
* ppp_defs.h is shipped with a PPP distribution as well as with the kernel; |
* if everyone increases the FILEVERSION number above, then scripts |
* can do the right thing when deciding whether to install a new ppp_defs.h |
* file. Don't change the format of that line otherwise, so the |
* installation script can recognize it. |
*/ |
#ifndef _PPP_DEFS_H_ |
#define _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 */ |
#define PPP_FCS(fcs, c) (((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) & 0xff]) |
/* |
* 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 { |
time_t xmit_idle; /* time since last NP packet sent */ |
time_t recv_idle; /* time since last NP packet received */ |
}; |
#ifndef __P |
#ifdef __STDC__ |
#define __P(x) x |
#else |
#define __P(x) () |
#endif |
#endif |
#endif /* _PPP_DEFS_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/ext3_jbd.h |
---|
0,0 → 1,233 |
/* |
* linux/include/linux/ext3_jbd.h |
* |
* Written by Stephen C. Tweedie <sct@redhat.com>, 1999 |
* |
* Copyright 1998--1999 Red Hat corp --- 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. |
* |
* Ext3-specific journaling extensions. |
*/ |
#ifndef _LINUX_EXT3_JBD_H |
#define _LINUX_EXT3_JBD_H |
#include <linux/fs.h> |
#include <linux/jbd.h> |
#include <linux/ext3_fs.h> |
#define EXT3_JOURNAL(inode) (EXT3_SB((inode)->i_sb)->s_journal) |
/* Define the number of blocks we need to account to a transaction to |
* modify one block of data. |
* |
* We may have to touch one inode, one bitmap buffer, up to three |
* indirection blocks, the group and superblock summaries, and the data |
* block to complete the transaction. */ |
#define EXT3_SINGLEDATA_TRANS_BLOCKS 8U |
/* Extended attribute operations touch at most two data buffers, |
* two bitmap buffers, and two group summaries, in addition to the inode |
* and the superblock, which are already accounted for. */ |
#define EXT3_XATTR_TRANS_BLOCKS 6U |
/* Define the minimum size for a transaction which modifies data. This |
* needs to take into account the fact that we may end up modifying two |
* quota files too (one for the group, one for the user quota). The |
* superblock only gets updated once, of course, so don't bother |
* counting that again for the quota updates. */ |
#define EXT3_DATA_TRANS_BLOCKS (3 * EXT3_SINGLEDATA_TRANS_BLOCKS + \ |
EXT3_XATTR_TRANS_BLOCKS - 2) |
extern int ext3_writepage_trans_blocks(struct inode *inode); |
/* Delete operations potentially hit one directory's namespace plus an |
* entire inode, plus arbitrary amounts of bitmap/indirection data. Be |
* generous. We can grow the delete transaction later if necessary. */ |
#define EXT3_DELETE_TRANS_BLOCKS (2 * EXT3_DATA_TRANS_BLOCKS + 64) |
/* Define an arbitrary limit for the amount of data we will anticipate |
* writing to any given transaction. For unbounded transactions such as |
* write(2) and truncate(2) we can write more than this, but we always |
* start off at the maximum transaction size and grow the transaction |
* optimistically as we go. */ |
#define EXT3_MAX_TRANS_DATA 64U |
/* We break up a large truncate or write transaction once the handle's |
* buffer credits gets this low, we need either to extend the |
* transaction or to start a new one. Reserve enough space here for |
* inode, bitmap, superblock, group and indirection updates for at least |
* one block, plus two quota updates. Quota allocations are not |
* needed. */ |
#define EXT3_RESERVE_TRANS_BLOCKS 12U |
#define EXT3_INDEX_EXTRA_TRANS_BLOCKS 8 |
int |
ext3_mark_iloc_dirty(handle_t *handle, |
struct inode *inode, |
struct ext3_iloc *iloc); |
/* |
* On success, We end up with an outstanding reference count against |
* iloc->bh. This _must_ be cleaned up later. |
*/ |
int ext3_reserve_inode_write(handle_t *handle, struct inode *inode, |
struct ext3_iloc *iloc); |
int ext3_mark_inode_dirty(handle_t *handle, struct inode *inode); |
/* |
* Wrapper functions with which ext3 calls into JBD. The intent here is |
* to allow these to be turned into appropriate stubs so ext3 can control |
* ext2 filesystems, so ext2+ext3 systems only nee one fs. This work hasn't |
* been done yet. |
*/ |
void ext3_journal_abort_handle(const char *caller, const char *err_fn, |
struct buffer_head *bh, handle_t *handle, int err); |
static inline int |
__ext3_journal_get_undo_access(const char *where, handle_t *handle, |
struct buffer_head *bh, int *credits) |
{ |
int err = journal_get_undo_access(handle, bh, credits); |
if (err) |
ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); |
return err; |
} |
static inline int |
__ext3_journal_get_write_access(const char *where, handle_t *handle, |
struct buffer_head *bh, int *credits) |
{ |
int err = journal_get_write_access(handle, bh, credits); |
if (err) |
ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); |
return err; |
} |
static inline void |
ext3_journal_release_buffer(handle_t *handle, struct buffer_head *bh, |
int credits) |
{ |
journal_release_buffer(handle, bh, credits); |
} |
static inline void |
ext3_journal_forget(handle_t *handle, struct buffer_head *bh) |
{ |
journal_forget(handle, bh); |
} |
static inline int |
__ext3_journal_revoke(const char *where, handle_t *handle, |
unsigned long blocknr, struct buffer_head *bh) |
{ |
int err = journal_revoke(handle, blocknr, bh); |
if (err) |
ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); |
return err; |
} |
static inline int |
__ext3_journal_get_create_access(const char *where, |
handle_t *handle, struct buffer_head *bh) |
{ |
int err = journal_get_create_access(handle, bh); |
if (err) |
ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); |
return err; |
} |
static inline int |
__ext3_journal_dirty_metadata(const char *where, |
handle_t *handle, struct buffer_head *bh) |
{ |
int err = journal_dirty_metadata(handle, bh); |
if (err) |
ext3_journal_abort_handle(where, __FUNCTION__, bh, handle,err); |
return err; |
} |
#define ext3_journal_get_undo_access(handle, bh, credits) \ |
__ext3_journal_get_undo_access(__FUNCTION__, (handle), (bh), (credits)) |
#define ext3_journal_get_write_access(handle, bh) \ |
__ext3_journal_get_write_access(__FUNCTION__, (handle), (bh), NULL) |
#define ext3_journal_get_write_access_credits(handle, bh, credits) \ |
__ext3_journal_get_write_access(__FUNCTION__, (handle), (bh), (credits)) |
#define ext3_journal_revoke(handle, blocknr, bh) \ |
__ext3_journal_revoke(__FUNCTION__, (handle), (blocknr), (bh)) |
#define ext3_journal_get_create_access(handle, bh) \ |
__ext3_journal_get_create_access(__FUNCTION__, (handle), (bh)) |
#define ext3_journal_dirty_metadata(handle, bh) \ |
__ext3_journal_dirty_metadata(__FUNCTION__, (handle), (bh)) |
handle_t *ext3_journal_start(struct inode *inode, int nblocks); |
int __ext3_journal_stop(const char *where, handle_t *handle); |
#define ext3_journal_stop(handle) \ |
__ext3_journal_stop(__FUNCTION__, (handle)) |
static inline handle_t *ext3_journal_current_handle(void) |
{ |
return journal_current_handle(); |
} |
static inline int ext3_journal_extend(handle_t *handle, int nblocks) |
{ |
return journal_extend(handle, nblocks); |
} |
static inline int ext3_journal_restart(handle_t *handle, int nblocks) |
{ |
return journal_restart(handle, nblocks); |
} |
static inline int ext3_journal_blocks_per_page(struct inode *inode) |
{ |
return journal_blocks_per_page(inode); |
} |
static inline int ext3_journal_force_commit(journal_t *journal) |
{ |
return journal_force_commit(journal); |
} |
/* super.c */ |
int ext3_force_commit(struct super_block *sb); |
static inline int ext3_should_journal_data(struct inode *inode) |
{ |
if (!S_ISREG(inode->i_mode)) |
return 1; |
if (test_opt(inode->i_sb, DATA_FLAGS) == EXT3_MOUNT_JOURNAL_DATA) |
return 1; |
if (EXT3_I(inode)->i_flags & EXT3_JOURNAL_DATA_FL) |
return 1; |
return 0; |
} |
static inline int ext3_should_order_data(struct inode *inode) |
{ |
return (test_opt(inode->i_sb, DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA); |
} |
static inline int ext3_should_writeback_data(struct inode *inode) |
{ |
return !ext3_should_journal_data(inode) && |
!ext3_should_order_data(inode); |
} |
#endif /* _LINUX_EXT3_JBD_H */ |
/shark/trunk/drivers/linuxc26/include/linux/pci-dynids.h |
---|
0,0 → 1,18 |
/* |
* PCI defines and function prototypes |
* Copyright 2003 Dell Inc. |
* by Matt Domsch <Matt_Domsch@dell.com> |
*/ |
#ifndef LINUX_PCI_DYNIDS_H |
#define LINUX_PCI_DYNIDS_H |
#include <linux/list.h> |
#include <linux/mod_devicetable.h> |
struct dynid { |
struct list_head node; |
struct pci_device_id id; |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/cache.h |
---|
0,0 → 1,55 |
#ifndef __LINUX_CACHE_H |
#define __LINUX_CACHE_H |
#include <linux/kernel.h> |
#include <linux/config.h> |
#include <asm/cache.h> |
#ifndef L1_CACHE_ALIGN |
#define L1_CACHE_ALIGN(x) ALIGN(x, L1_CACHE_BYTES) |
#endif |
#ifndef SMP_CACHE_BYTES |
#define SMP_CACHE_BYTES L1_CACHE_BYTES |
#endif |
#ifndef ____cacheline_aligned |
#define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES))) |
#endif |
#ifndef ____cacheline_aligned_in_smp |
#ifdef CONFIG_SMP |
#define ____cacheline_aligned_in_smp ____cacheline_aligned |
#else |
#define ____cacheline_aligned_in_smp |
#endif /* CONFIG_SMP */ |
#endif |
#ifndef __cacheline_aligned |
#ifdef MODULE |
#define __cacheline_aligned ____cacheline_aligned |
#else |
#define __cacheline_aligned \ |
__attribute__((__aligned__(SMP_CACHE_BYTES), \ |
__section__(".data.cacheline_aligned"))) |
#endif |
#endif /* __cacheline_aligned */ |
#ifndef __cacheline_aligned_in_smp |
#ifdef CONFIG_SMP |
#define __cacheline_aligned_in_smp __cacheline_aligned |
#else |
#define __cacheline_aligned_in_smp |
#endif /* CONFIG_SMP */ |
#endif |
#if !defined(____cacheline_maxaligned_in_smp) |
#if defined(CONFIG_SMP) |
#define ____cacheline_maxaligned_in_smp \ |
__attribute__((__aligned__(1 << (L1_CACHE_SHIFT_MAX)))) |
#else |
#define ____cacheline_maxaligned_in_smp |
#endif |
#endif |
#endif /* __LINUX_CACHE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/if_ec.h |
---|
0,0 → 1,68 |
/* Definitions for Econet sockets. */ |
#ifndef __LINUX_IF_EC |
#define __LINUX_IF_EC |
/* User visible stuff. Glibc provides its own but libc5 folk will use these */ |
struct ec_addr |
{ |
unsigned char station; /* Station number. */ |
unsigned char net; /* Network number. */ |
}; |
struct sockaddr_ec |
{ |
unsigned short sec_family; |
unsigned char port; /* Port number. */ |
unsigned char cb; /* Control/flag byte. */ |
unsigned char type; /* Type of message. */ |
struct ec_addr addr; |
unsigned long cookie; |
}; |
#define ECTYPE_PACKET_RECEIVED 0 /* Packet received */ |
#define ECTYPE_TRANSMIT_STATUS 0x10 /* Transmit completed, |
low nibble holds status */ |
#define ECTYPE_TRANSMIT_OK 1 |
#define ECTYPE_TRANSMIT_NOT_LISTENING 2 |
#define ECTYPE_TRANSMIT_NET_ERROR 3 |
#define ECTYPE_TRANSMIT_NO_CLOCK 4 |
#define ECTYPE_TRANSMIT_LINE_JAMMED 5 |
#define ECTYPE_TRANSMIT_NOT_PRESENT 6 |
#ifdef __KERNEL__ |
#define EC_HLEN 6 |
/* This is what an Econet frame looks like on the wire. */ |
struct ec_framehdr |
{ |
unsigned char dst_stn; |
unsigned char dst_net; |
unsigned char src_stn; |
unsigned char src_net; |
unsigned char cb; |
unsigned char port; |
}; |
struct econet_opt |
{ |
unsigned char cb; |
unsigned char port; |
unsigned char station; |
unsigned char net; |
unsigned short num; |
}; |
#define ec_sk(__sk) ((struct econet_opt *)(__sk)->sk_protinfo) |
struct ec_device |
{ |
unsigned char station, net; /* Econet protocol address */ |
}; |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/cpufreq.h |
---|
0,0 → 1,344 |
/* |
* linux/include/linux/cpufreq.h |
* |
* Copyright (C) 2001 Russell King |
* (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de> |
* |
* |
* $Id: cpufreq.h,v 1.1 2004-01-28 15:25:05 giacomo Exp $ |
* |
* 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_CPUFREQ_H |
#define _LINUX_CPUFREQ_H |
#include <linux/config.h> |
#include <linux/notifier.h> |
#include <linux/threads.h> |
#include <linux/device.h> |
#include <linux/kobject.h> |
#include <linux/sysfs.h> |
#include <linux/completion.h> |
#define CPUFREQ_NAME_LEN 16 |
/********************************************************************* |
* CPUFREQ NOTIFIER INTERFACE * |
*********************************************************************/ |
int cpufreq_register_notifier(struct notifier_block *nb, unsigned int list); |
int cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list); |
#define CPUFREQ_TRANSITION_NOTIFIER (0) |
#define CPUFREQ_POLICY_NOTIFIER (1) |
/* if (cpufreq_driver->target) exists, the ->governor decides what frequency |
* within the limits is used. If (cpufreq_driver->setpolicy> exists, these |
* two generic policies are available: |
*/ |
#define CPUFREQ_POLICY_POWERSAVE (1) |
#define CPUFREQ_POLICY_PERFORMANCE (2) |
/* Frequency values here are CPU kHz so that hardware which doesn't run |
* with some frequencies can complain without having to guess what per |
* cent / per mille means. |
* Maximum transition latency is in microseconds - if it's unknown, |
* CPUFREQ_ETERNAL shall be used. |
*/ |
struct cpufreq_governor; |
#define CPUFREQ_ETERNAL (-1) |
struct cpufreq_cpuinfo { |
unsigned int max_freq; |
unsigned int min_freq; |
unsigned int transition_latency; /* in 10^(-9) s */ |
}; |
struct cpufreq_real_policy { |
unsigned int min; /* in kHz */ |
unsigned int max; /* in kHz */ |
unsigned int policy; /* see above */ |
struct cpufreq_governor *governor; /* see below */ |
}; |
struct cpufreq_policy { |
unsigned int cpu; /* cpu nr */ |
struct cpufreq_cpuinfo cpuinfo;/* see above */ |
unsigned int min; /* in kHz */ |
unsigned int max; /* in kHz */ |
unsigned int cur; /* in kHz, only needed if cpufreq |
* governors are used */ |
unsigned int policy; /* see above */ |
struct cpufreq_governor *governor; /* see below */ |
struct semaphore lock; /* CPU ->setpolicy or ->target may |
only be called once a time */ |
struct cpufreq_real_policy user_policy; |
struct kobject kobj; |
struct completion kobj_unregister; |
}; |
#define CPUFREQ_ADJUST (0) |
#define CPUFREQ_INCOMPATIBLE (1) |
#define CPUFREQ_NOTIFY (2) |
/******************** cpufreq transition notifiers *******************/ |
#define CPUFREQ_PRECHANGE (0) |
#define CPUFREQ_POSTCHANGE (1) |
struct cpufreq_freqs { |
unsigned int cpu; /* cpu nr */ |
unsigned int old; |
unsigned int new; |
}; |
/** |
* cpufreq_scale - "old * mult / div" calculation for large values (32-bit-arch safe) |
* @old: old value |
* @div: divisor |
* @mult: multiplier |
* |
* Needed for loops_per_jiffy and similar calculations. We do it |
* this way to avoid math overflow on 32-bit machines. This will |
* become architecture dependent once high-resolution-timer is |
* merged (or any other thing that introduces sc_math.h). |
* |
* new = old * mult / div |
*/ |
static inline unsigned long cpufreq_scale(unsigned long old, u_int div, u_int mult) |
{ |
unsigned long val, carry; |
mult /= 100; |
div /= 100; |
val = (old / div) * mult; |
carry = old % div; |
carry = carry * mult / div; |
return carry + val; |
}; |
/********************************************************************* |
* CPUFREQ GOVERNORS * |
*********************************************************************/ |
#define CPUFREQ_GOV_START 1 |
#define CPUFREQ_GOV_STOP 2 |
#define CPUFREQ_GOV_LIMITS 3 |
struct cpufreq_governor { |
char name[CPUFREQ_NAME_LEN]; |
int (*governor) (struct cpufreq_policy *policy, |
unsigned int event); |
struct list_head governor_list; |
struct module *owner; |
}; |
/* pass a target to the cpufreq driver |
*/ |
extern int cpufreq_driver_target(struct cpufreq_policy *policy, |
unsigned int target_freq, |
unsigned int relation); |
extern int __cpufreq_driver_target(struct cpufreq_policy *policy, |
unsigned int target_freq, |
unsigned int relation); |
/* pass an event to the cpufreq governor */ |
int cpufreq_governor(unsigned int cpu, unsigned int event); |
int cpufreq_register_governor(struct cpufreq_governor *governor); |
void cpufreq_unregister_governor(struct cpufreq_governor *governor); |
/********************************************************************* |
* CPUFREQ DRIVER INTERFACE * |
*********************************************************************/ |
#define CPUFREQ_RELATION_L 0 /* lowest frequency at or above target */ |
#define CPUFREQ_RELATION_H 1 /* highest frequency below or at target */ |
struct freq_attr; |
struct cpufreq_driver { |
struct module *owner; |
char name[CPUFREQ_NAME_LEN]; |
/* needed by all drivers */ |
int (*init) (struct cpufreq_policy *policy); |
int (*verify) (struct cpufreq_policy *policy); |
/* define one out of two */ |
int (*setpolicy) (struct cpufreq_policy *policy); |
int (*target) (struct cpufreq_policy *policy, |
unsigned int target_freq, |
unsigned int relation); |
/* optional */ |
int (*exit) (struct cpufreq_policy *policy); |
int (*resume) (struct cpufreq_policy *policy); |
struct freq_attr **attr; |
}; |
int cpufreq_register_driver(struct cpufreq_driver *driver_data); |
int cpufreq_unregister_driver(struct cpufreq_driver *driver_data); |
void cpufreq_notify_transition(struct cpufreq_freqs *freqs, unsigned int state); |
static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy, unsigned int min, unsigned int max) |
{ |
if (policy->min < min) |
policy->min = min; |
if (policy->max < min) |
policy->max = min; |
if (policy->min > max) |
policy->min = max; |
if (policy->max > max) |
policy->max = max; |
if (policy->min > policy->max) |
policy->min = policy->max; |
return; |
} |
struct freq_attr { |
struct attribute attr; |
ssize_t (*show)(struct cpufreq_policy *, char *); |
ssize_t (*store)(struct cpufreq_policy *, const char *, size_t count); |
}; |
/********************************************************************* |
* CPUFREQ 2.6. INTERFACE * |
*********************************************************************/ |
int cpufreq_set_policy(struct cpufreq_policy *policy); |
int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu); |
int cpufreq_update_policy(unsigned int cpu); |
/* the proc_intf.c needs this */ |
int cpufreq_parse_governor (char *str_governor, unsigned int *policy, struct cpufreq_governor **governor); |
#if defined(CONFIG_CPU_FREQ_GOV_USERSPACE) || defined(CONFIG_CPU_FREQ_GOV_USERSPACE_MODULE) |
/********************************************************************* |
* CPUFREQ USERSPACE GOVERNOR * |
*********************************************************************/ |
int cpufreq_gov_userspace_init(void); |
int cpufreq_setmax(unsigned int cpu); |
int cpufreq_set(unsigned int kHz, unsigned int cpu); |
unsigned int cpufreq_get(unsigned int cpu); |
#ifdef CONFIG_CPU_FREQ_24_API |
/* /proc/sys/cpu */ |
enum { |
CPU_NR = 1, /* compatibilty reasons */ |
CPU_NR_0 = 1, |
CPU_NR_1 = 2, |
CPU_NR_2 = 3, |
CPU_NR_3 = 4, |
CPU_NR_4 = 5, |
CPU_NR_5 = 6, |
CPU_NR_6 = 7, |
CPU_NR_7 = 8, |
CPU_NR_8 = 9, |
CPU_NR_9 = 10, |
CPU_NR_10 = 11, |
CPU_NR_11 = 12, |
CPU_NR_12 = 13, |
CPU_NR_13 = 14, |
CPU_NR_14 = 15, |
CPU_NR_15 = 16, |
CPU_NR_16 = 17, |
CPU_NR_17 = 18, |
CPU_NR_18 = 19, |
CPU_NR_19 = 20, |
CPU_NR_20 = 21, |
CPU_NR_21 = 22, |
CPU_NR_22 = 23, |
CPU_NR_23 = 24, |
CPU_NR_24 = 25, |
CPU_NR_25 = 26, |
CPU_NR_26 = 27, |
CPU_NR_27 = 28, |
CPU_NR_28 = 29, |
CPU_NR_29 = 30, |
CPU_NR_30 = 31, |
CPU_NR_31 = 32, |
}; |
/* /proc/sys/cpu/{0,1,...,(NR_CPUS-1)} */ |
enum { |
CPU_NR_FREQ_MAX = 1, |
CPU_NR_FREQ_MIN = 2, |
CPU_NR_FREQ = 3, |
}; |
#endif /* CONFIG_CPU_FREQ_24_API */ |
#endif /* CONFIG_CPU_FREQ_GOV_USERSPACE */ |
/********************************************************************* |
* CPUFREQ DEFAULT GOVERNOR * |
*********************************************************************/ |
#ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE |
extern struct cpufreq_governor cpufreq_gov_performance; |
#define CPUFREQ_DEFAULT_GOVERNOR &cpufreq_gov_performance |
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE) |
extern struct cpufreq_governor cpufreq_gov_userspace; |
#define CPUFREQ_DEFAULT_GOVERNOR &cpufreq_gov_userspace |
#endif |
/********************************************************************* |
* FREQUENCY TABLE HELPERS * |
*********************************************************************/ |
#define CPUFREQ_ENTRY_INVALID ~0 |
#define CPUFREQ_TABLE_END ~1 |
struct cpufreq_frequency_table { |
unsigned int index; /* any */ |
unsigned int frequency; /* kHz - doesn't need to be in ascending |
* order */ |
}; |
#if defined(CONFIG_CPU_FREQ_TABLE) || defined(CONFIG_CPU_FREQ_TABLE_MODULE) |
int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy, |
struct cpufreq_frequency_table *table); |
int cpufreq_frequency_table_verify(struct cpufreq_policy *policy, |
struct cpufreq_frequency_table *table); |
int cpufreq_frequency_table_target(struct cpufreq_policy *policy, |
struct cpufreq_frequency_table *table, |
unsigned int target_freq, |
unsigned int relation, |
unsigned int *index); |
/* the following are really really optional */ |
extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs; |
void cpufreq_frequency_table_get_attr(struct cpufreq_frequency_table *table, |
unsigned int cpu); |
void cpufreq_frequency_table_put_attr(unsigned int cpu); |
#endif /* CONFIG_CPU_FREQ_TABLE */ |
#endif /* _LINUX_CPUFREQ_H */ |
/shark/trunk/drivers/linuxc26/include/linux/sctp.h |
---|
0,0 → 1,527 |
/* SCTP kernel reference Implementation |
* (C) Copyright IBM Corp. 2001, 2003 |
* Copyright (c) 1999-2000 Cisco, Inc. |
* Copyright (c) 1999-2001 Motorola, Inc. |
* Copyright (c) 2001 Intel Corp. |
* Copyright (c) 2001 Nokia, Inc. |
* Copyright (c) 2001 La Monte H.P. Yarroll |
* |
* This file is part of the SCTP kernel reference Implementation |
* |
* Various protocol defined structures. |
* |
* The SCTP reference implementation 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. |
* |
* The SCTP reference implementation 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 GNU CC; see the file COPYING. If not, write to |
* the Free Software Foundation, 59 Temple Place - Suite 330, |
* Boston, MA 02111-1307, USA. |
* |
* Please send any bug reports or fixes you make to the |
* email address(es): |
* lksctp developers <lksctp-developerst@lists.sourceforge.net> |
* |
* Or submit a bug report through the following website: |
* http://www.sf.net/projects/lksctp |
* |
* Written or modified by: |
* La Monte H.P. Yarroll <piggy@acm.org> |
* Karl Knutson <karl@athena.chicago.il.us> |
* Jon Grimm <jgrimm@us.ibm.com> |
* Xingang Guo <xingang.guo@intel.com> |
* randall@sctp.chicago.il.us |
* kmorneau@cisco.com |
* qxie1@email.mot.com |
* Sridhar Samudrala <sri@us.ibm.com> |
* Kevin Gao <kevin.gao@intel.com> |
* |
* Any bugs reported given to us we will try to fix... any fixes shared will |
* be incorporated into the next SCTP release. |
*/ |
#ifndef __LINUX_SCTP_H__ |
#define __LINUX_SCTP_H__ |
#include <linux/in.h> /* We need in_addr. */ |
#include <linux/in6.h> /* We need in6_addr. */ |
/* Section 3.1. SCTP Common Header Format */ |
typedef struct sctphdr { |
__u16 source; |
__u16 dest; |
__u32 vtag; |
__u32 checksum; |
} sctp_sctphdr_t __attribute__((packed)); |
/* Section 3.2. Chunk Field Descriptions. */ |
typedef struct sctp_chunkhdr { |
__u8 type; |
__u8 flags; |
__u16 length; |
} sctp_chunkhdr_t __attribute__((packed)); |
/* Section 3.2. Chunk Type Values. |
* [Chunk Type] identifies the type of information contained in the Chunk |
* Value field. It takes a value from 0 to 254. The value of 255 is |
* reserved for future use as an extension field. |
*/ |
typedef enum { |
SCTP_CID_DATA = 0, |
SCTP_CID_INIT = 1, |
SCTP_CID_INIT_ACK = 2, |
SCTP_CID_SACK = 3, |
SCTP_CID_HEARTBEAT = 4, |
SCTP_CID_HEARTBEAT_ACK = 5, |
SCTP_CID_ABORT = 6, |
SCTP_CID_SHUTDOWN = 7, |
SCTP_CID_SHUTDOWN_ACK = 8, |
SCTP_CID_ERROR = 9, |
SCTP_CID_COOKIE_ECHO = 10, |
SCTP_CID_COOKIE_ACK = 11, |
SCTP_CID_ECN_ECNE = 12, |
SCTP_CID_ECN_CWR = 13, |
SCTP_CID_SHUTDOWN_COMPLETE = 14, |
/* Use hex, as defined in ADDIP sec. 3.1 */ |
SCTP_CID_ASCONF = 0xC1, |
SCTP_CID_ASCONF_ACK = 0x80, |
} sctp_cid_t; /* enum */ |
/* Section 3.2 |
* Chunk Types are encoded such that the highest-order two bits specify |
* the action that must be taken if the processing endpoint does not |
* recognize the Chunk Type. |
*/ |
typedef enum { |
SCTP_CID_ACTION_DISCARD = 0x00, |
SCTP_CID_ACTION_DISCARD_ERR = 0x40, |
SCTP_CID_ACTION_SKIP = 0x80, |
SCTP_CID_ACTION_SKIP_ERR = 0xc0, |
} sctp_cid_action_t; |
enum { SCTP_CID_ACTION_MASK = 0xc0, }; |
/* This flag is used in Chunk Flags for ABORT and SHUTDOWN COMPLETE. |
* |
* 3.3.7 Abort Association (ABORT) (6): |
* The T bit is set to 0 if the sender had a TCB that it destroyed. |
* If the sender did not have a TCB it should set this bit to 1. |
*/ |
enum { SCTP_CHUNK_FLAG_T = 0x01 }; |
/* |
* Set the T bit |
* |
* 0 1 2 3 |
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
* | Type = 14 |Reserved |T| Length = 4 | |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
* |
* Chunk Flags: 8 bits |
* |
* Reserved: 7 bits |
* Set to 0 on transmit and ignored on receipt. |
* |
* T bit: 1 bit |
* The T bit is set to 0 if the sender had a TCB that it destroyed. If |
* the sender did NOT have a TCB it should set this bit to 1. |
* |
* Note: Special rules apply to this chunk for verification, please |
* see Section 8.5.1 for details. |
*/ |
#define sctp_test_T_bit(c) ((c)->chunk_hdr->flags & SCTP_CHUNK_FLAG_T) |
/* RFC 2960 |
* Section 3.2.1 Optional/Variable-length Parmaeter Format. |
*/ |
typedef struct sctp_paramhdr { |
__u16 type; |
__u16 length; |
} sctp_paramhdr_t __attribute((packed)); |
typedef enum { |
/* RFC 2960 Section 3.3.5 */ |
SCTP_PARAM_HEARTBEAT_INFO = __constant_htons(1), |
/* RFC 2960 Section 3.3.2.1 */ |
SCTP_PARAM_IPV4_ADDRESS = __constant_htons(5), |
SCTP_PARAM_IPV6_ADDRESS = __constant_htons(6), |
SCTP_PARAM_STATE_COOKIE = __constant_htons(7), |
SCTP_PARAM_UNRECOGNIZED_PARAMETERS = __constant_htons(8), |
SCTP_PARAM_COOKIE_PRESERVATIVE = __constant_htons(9), |
SCTP_PARAM_HOST_NAME_ADDRESS = __constant_htons(11), |
SCTP_PARAM_SUPPORTED_ADDRESS_TYPES = __constant_htons(12), |
SCTP_PARAM_ECN_CAPABLE = __constant_htons(0x8000), |
/* Add-IP Extension. Section 3.2 */ |
SCTP_PARAM_ADD_IP = __constant_htons(0xc001), |
SCTP_PARAM_DEL_IP = __constant_htons(0xc002), |
SCTP_PARAM_ERR_CAUSE = __constant_htons(0xc003), |
SCTP_PARAM_SET_PRIMARY = __constant_htons(0xc004), |
SCTP_PARAM_SUCCESS_REPORT = __constant_htons(0xc005), |
SCTP_PARAM_ADAPTION_LAYER_IND = __constant_htons(0xc006), |
} sctp_param_t; /* enum */ |
/* RFC 2960 Section 3.2.1 |
* The Parameter Types are encoded such that the highest-order two bits |
* specify the action that must be taken if the processing endpoint does |
* not recognize the Parameter Type. |
* |
*/ |
typedef enum { |
SCTP_PARAM_ACTION_DISCARD = __constant_htons(0x0000), |
SCTP_PARAM_ACTION_DISCARD_ERR = __constant_htons(0x4000), |
SCTP_PARAM_ACTION_SKIP = __constant_htons(0x8000), |
SCTP_PARAM_ACTION_SKIP_ERR = __constant_htons(0xc000), |
} sctp_param_action_t; |
enum { SCTP_PARAM_ACTION_MASK = __constant_htons(0xc000), }; |
/* RFC 2960 Section 3.3.1 Payload Data (DATA) (0) */ |
typedef struct sctp_datahdr { |
__u32 tsn; |
__u16 stream; |
__u16 ssn; |
__u32 ppid; |
__u8 payload[0]; |
} sctp_datahdr_t __attribute__((packed)); |
typedef struct sctp_data_chunk { |
sctp_chunkhdr_t chunk_hdr; |
sctp_datahdr_t data_hdr; |
} sctp_data_chunk_t __attribute__((packed)); |
/* DATA Chuck Specific Flags */ |
enum { |
SCTP_DATA_MIDDLE_FRAG = 0x00, |
SCTP_DATA_LAST_FRAG = 0x01, |
SCTP_DATA_FIRST_FRAG = 0x02, |
SCTP_DATA_NOT_FRAG = 0x03, |
SCTP_DATA_UNORDERED = 0x04, |
}; |
enum { SCTP_DATA_FRAG_MASK = 0x03, }; |
/* RFC 2960 Section 3.3.2 Initiation (INIT) (1) |
* |
* This chunk is used to initiate a SCTP association between two |
* endpoints. |
*/ |
typedef struct sctp_inithdr { |
__u32 init_tag; |
__u32 a_rwnd; |
__u16 num_outbound_streams; |
__u16 num_inbound_streams; |
__u32 initial_tsn; |
__u8 params[0]; |
} sctp_inithdr_t __attribute__((packed)); |
typedef struct sctp_init_chunk { |
sctp_chunkhdr_t chunk_hdr; |
sctp_inithdr_t init_hdr; |
} sctp_init_chunk_t __attribute__((packed)); |
/* Section 3.3.2.1. IPv4 Address Parameter (5) */ |
typedef struct sctp_ipv4addr_param { |
sctp_paramhdr_t param_hdr; |
struct in_addr addr; |
} sctp_ipv4addr_param_t __attribute__((packed)); |
/* Section 3.3.2.1. IPv6 Address Parameter (6) */ |
typedef struct sctp_ipv6addr_param { |
sctp_paramhdr_t param_hdr; |
struct in6_addr addr; |
} sctp_ipv6addr_param_t __attribute__((packed)); |
/* Section 3.3.2.1 Cookie Preservative (9) */ |
typedef struct sctp_cookie_preserve_param { |
sctp_paramhdr_t param_hdr; |
uint32_t lifespan_increment; |
} sctp_cookie_preserve_param_t __attribute__((packed)); |
/* Section 3.3.2.1 Host Name Address (11) */ |
typedef struct sctp_hostname_param { |
sctp_paramhdr_t param_hdr; |
uint8_t hostname[0]; |
} sctp_hostname_param_t __attribute__((packed)); |
/* Section 3.3.2.1 Supported Address Types (12) */ |
typedef struct sctp_supported_addrs_param { |
sctp_paramhdr_t param_hdr; |
uint16_t types[0]; |
} sctp_supported_addrs_param_t __attribute__((packed)); |
/* Appendix A. ECN Capable (32768) */ |
typedef struct sctp_ecn_capable_param { |
sctp_paramhdr_t param_hdr; |
} sctp_ecn_capable_param_t __attribute__((packed)); |
/* RFC 2960. Section 3.3.3 Initiation Acknowledgement (INIT ACK) (2): |
* The INIT ACK chunk is used to acknowledge the initiation of an SCTP |
* association. |
*/ |
typedef sctp_init_chunk_t sctp_initack_chunk_t; |
/* Section 3.3.3.1 State Cookie (7) */ |
typedef struct sctp_cookie_param { |
sctp_paramhdr_t p; |
__u8 body[0]; |
} sctp_cookie_param_t __attribute__((packed)); |
/* Section 3.3.3.1 Unrecognized Parameters (8) */ |
typedef struct sctp_unrecognized_param { |
sctp_paramhdr_t param_hdr; |
sctp_paramhdr_t unrecognized; |
} sctp_unrecognized_param_t __attribute__((packed)); |
/* |
* 3.3.4 Selective Acknowledgement (SACK) (3): |
* |
* This chunk is sent to the peer endpoint to acknowledge received DATA |
* chunks and to inform the peer endpoint of gaps in the received |
* subsequences of DATA chunks as represented by their TSNs. |
*/ |
typedef struct sctp_gap_ack_block { |
__u16 start; |
__u16 end; |
} sctp_gap_ack_block_t __attribute__((packed)); |
typedef uint32_t sctp_dup_tsn_t; |
typedef union { |
sctp_gap_ack_block_t gab; |
sctp_dup_tsn_t dup; |
} sctp_sack_variable_t; |
typedef struct sctp_sackhdr { |
__u32 cum_tsn_ack; |
__u32 a_rwnd; |
__u16 num_gap_ack_blocks; |
__u16 num_dup_tsns; |
sctp_sack_variable_t variable[0]; |
} sctp_sackhdr_t __attribute__((packed)); |
typedef struct sctp_sack_chunk { |
sctp_chunkhdr_t chunk_hdr; |
sctp_sackhdr_t sack_hdr; |
} sctp_sack_chunk_t __attribute__((packed)); |
/* RFC 2960. Section 3.3.5 Heartbeat Request (HEARTBEAT) (4): |
* |
* An endpoint should send this chunk to its peer endpoint to probe the |
* reachability of a particular destination transport address defined in |
* the present association. |
*/ |
typedef struct sctp_heartbeathdr { |
sctp_paramhdr_t info; |
} sctp_heartbeathdr_t __attribute__((packed)); |
typedef struct sctp_heartbeat_chunk { |
sctp_chunkhdr_t chunk_hdr; |
sctp_heartbeathdr_t hb_hdr; |
} sctp_heartbeat_chunk_t __attribute__((packed)); |
/* For the abort and shutdown ACK we must carry the init tag in the |
* common header. Just the common header is all that is needed with a |
* chunk descriptor. |
*/ |
typedef struct sctp_abort_chunk { |
sctp_chunkhdr_t uh; |
} sctp_abort_chunkt_t __attribute__((packed)); |
/* For the graceful shutdown we must carry the tag (in common header) |
* and the highest consecutive acking value. |
*/ |
typedef struct sctp_shutdownhdr { |
__u32 cum_tsn_ack; |
} sctp_shutdownhdr_t __attribute__((packed)); |
struct sctp_shutdown_chunk_t { |
sctp_chunkhdr_t chunk_hdr; |
sctp_shutdownhdr_t shutdown_hdr; |
} __attribute__((packed)); |
/* RFC 2960. Section 3.3.10 Operation Error (ERROR) (9) */ |
typedef struct sctp_errhdr { |
__u16 cause; |
__u16 length; |
__u8 variable[0]; |
} sctp_errhdr_t __attribute__((packed)); |
typedef struct sctp_operr_chunk { |
sctp_chunkhdr_t chunk_hdr; |
sctp_errhdr_t err_hdr; |
} sctp_operr_chunk_t __attribute__((packed)); |
/* RFC 2960 3.3.10 - Operation Error |
* |
* Cause Code: 16 bits (unsigned integer) |
* |
* Defines the type of error conditions being reported. |
* Cause Code |
* Value Cause Code |
* --------- ---------------- |
* 1 Invalid Stream Identifier |
* 2 Missing Mandatory Parameter |
* 3 Stale Cookie Error |
* 4 Out of Resource |
* 5 Unresolvable Address |
* 6 Unrecognized Chunk Type |
* 7 Invalid Mandatory Parameter |
* 8 Unrecognized Parameters |
* 9 No User Data |
* 10 Cookie Received While Shutting Down |
*/ |
typedef enum { |
SCTP_ERROR_NO_ERROR = __constant_htons(0x00), |
SCTP_ERROR_INV_STRM = __constant_htons(0x01), |
SCTP_ERROR_MISS_PARAM = __constant_htons(0x02), |
SCTP_ERROR_STALE_COOKIE = __constant_htons(0x03), |
SCTP_ERROR_NO_RESOURCE = __constant_htons(0x04), |
SCTP_ERROR_DNS_FAILED = __constant_htons(0x05), |
SCTP_ERROR_UNKNOWN_CHUNK = __constant_htons(0x06), |
SCTP_ERROR_INV_PARAM = __constant_htons(0x07), |
SCTP_ERROR_UNKNOWN_PARAM = __constant_htons(0x08), |
SCTP_ERROR_NO_DATA = __constant_htons(0x09), |
SCTP_ERROR_COOKIE_IN_SHUTDOWN = __constant_htons(0x0a), |
/* SCTP Implementation Guide: |
* 11 Restart of an association with new addresses |
* 12 User Initiated Abort |
* 13 Protocol Violation |
*/ |
SCTP_ERROR_RESTART = __constant_htons(0x0b), |
SCTP_ERROR_USER_ABORT = __constant_htons(0x0c), |
SCTP_ERROR_PROTO_VIOLATION = __constant_htons(0x0d), |
/* ADDIP Section 3.3 New Error Causes |
* |
* Four new Error Causes are added to the SCTP Operational Errors, |
* primarily for use in the ASCONF-ACK chunk. |
* |
* Value Cause Code |
* --------- ---------------- |
* 0x0100 Request to Delete Last Remaining IP Address. |
* 0x0101 Operation Refused Due to Resource Shortage. |
* 0x0102 Request to Delete Source IP Address. |
* 0x0103 Association Aborted due to illegal ASCONF-ACK |
*/ |
SCTP_ERROR_DEL_LAST_IP = __constant_htons(0x0100), |
SCTP_ERROR_RSRC_LOW = __constant_htons(0x0101), |
SCTP_ERROR_DEL_SRC_IP = __constant_htons(0x0102), |
SCTP_ERROR_ASCONF_ACK = __constant_htons(0x0103), |
} sctp_error_t; |
/* RFC 2960. Appendix A. Explicit Congestion Notification. |
* Explicit Congestion Notification Echo (ECNE) (12) |
*/ |
typedef struct sctp_ecnehdr { |
__u32 lowest_tsn; |
} sctp_ecnehdr_t; |
typedef struct sctp_ecne_chunk { |
sctp_chunkhdr_t chunk_hdr; |
sctp_ecnehdr_t ence_hdr; |
} sctp_ecne_chunk_t __attribute__((packed)); |
/* RFC 2960. Appendix A. Explicit Congestion Notification. |
* Congestion Window Reduced (CWR) (13) |
*/ |
typedef struct sctp_cwrhdr { |
__u32 lowest_tsn; |
} sctp_cwrhdr_t; |
typedef struct sctp_cwr_chunk { |
sctp_chunkhdr_t chunk_hdr; |
sctp_cwrhdr_t cwr_hdr; |
} sctp_cwr_chunk_t __attribute__((packed)); |
/* |
* ADDIP Section 3.1 New Chunk Types |
*/ |
/* ADDIP |
* Section 3.1.1 Address Configuration Change Chunk (ASCONF) |
* |
* Serial Number: 32 bits (unsigned integer) |
* This value represents a Serial Number for the ASCONF Chunk. The |
* valid range of Serial Number is from 0 to 2^32-1. |
* Serial Numbers wrap back to 0 after reaching 2^32 -1. |
* |
* Address Parameter: 8 or 20 bytes (depending on type) |
* The address is an address of the sender of the ASCONF chunk, |
* the address MUST be considered part of the association by the |
* peer endpoint. This field may be used by the receiver of the |
* ASCONF to help in finding the association. This parameter MUST |
* be present in every ASCONF message i.e. it is a mandatory TLV |
* parameter. |
* |
* ASCONF Parameter: TLV format |
* Each Address configuration change is represented by a TLV |
* parameter as defined in Section 3.2. One or more requests may |
* be present in an ASCONF Chunk. |
* |
* Section 3.1.2 Address Configuration Acknowledgement Chunk (ASCONF-ACK) |
* |
* Serial Number: 32 bits (unsigned integer) |
* This value represents the Serial Number for the received ASCONF |
* Chunk that is acknowledged by this chunk. This value is copied |
* from the received ASCONF Chunk. |
* |
* ASCONF Parameter Response: TLV format |
* The ASCONF Parameter Response is used in the ASCONF-ACK to |
* report status of ASCONF processing. |
*/ |
typedef struct sctp_addip_param { |
sctp_paramhdr_t param_hdr; |
__u32 crr_id; |
}sctp_addip_param_t __attribute__((packed)); |
typedef struct sctp_addiphdr { |
__u32 serial; |
__u8 params[0]; |
} sctp_addiphdr_t __attribute__((packed)); |
typedef struct sctp_addip_chunk { |
sctp_chunkhdr_t chunk_hdr; |
sctp_addiphdr_t addip_hdr; |
} sctp_addip_chunk_t __attribute__((packed)); |
#endif /* __LINUX_SCTP_H__ */ |
/shark/trunk/drivers/linuxc26/include/linux/quotaops.h |
---|
0,0 → 1,223 |
/* |
* Definitions for diskquota-operations. When diskquota is configured these |
* macros expand to the right source-code. |
* |
* Author: Marco van Wieringen <mvw@planets.elm.net> |
* |
* Version: $Id: quotaops.h,v 1.1 2004-01-28 15:26:25 giacomo Exp $ |
* |
*/ |
#ifndef _LINUX_QUOTAOPS_ |
#define _LINUX_QUOTAOPS_ |
#include <linux/config.h> |
#include <linux/smp_lock.h> |
#include <linux/fs.h> |
#if defined(CONFIG_QUOTA) |
/* |
* declaration of quota_function calls in kernel. |
*/ |
extern void sync_dquots(struct super_block *sb, int type); |
extern void dquot_initialize(struct inode *inode, int type); |
extern void dquot_drop(struct inode *inode); |
extern int dquot_alloc_space(struct inode *inode, qsize_t number, int prealloc); |
extern int dquot_alloc_inode(const struct inode *inode, unsigned long number); |
extern void dquot_free_space(struct inode *inode, qsize_t number); |
extern void dquot_free_inode(const struct inode *inode, unsigned long number); |
extern int dquot_transfer(struct inode *inode, struct iattr *iattr); |
/* |
* Operations supported for diskquotas. |
*/ |
extern struct dquot_operations dquot_operations; |
extern struct quotactl_ops vfs_quotactl_ops; |
#define sb_dquot_ops (&dquot_operations) |
#define sb_quotactl_ops (&vfs_quotactl_ops) |
static __inline__ void DQUOT_INIT(struct inode *inode) |
{ |
if (!inode->i_sb) |
BUG(); |
if (sb_any_quota_enabled(inode->i_sb) && !IS_NOQUOTA(inode)) |
inode->i_sb->dq_op->initialize(inode, -1); |
} |
static __inline__ void DQUOT_DROP(struct inode *inode) |
{ |
if (IS_QUOTAINIT(inode)) { |
if (!inode->i_sb) |
BUG(); |
inode->i_sb->dq_op->drop(inode); /* Ops must be set when there's any quota... */ |
} |
} |
static __inline__ int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr) |
{ |
if (sb_any_quota_enabled(inode->i_sb)) { |
/* Used space is updated in alloc_space() */ |
if (inode->i_sb->dq_op->alloc_space(inode, nr, 1) == NO_QUOTA) |
return 1; |
} |
else { |
spin_lock(&dq_data_lock); |
inode_add_bytes(inode, nr); |
spin_unlock(&dq_data_lock); |
} |
return 0; |
} |
static __inline__ int DQUOT_PREALLOC_SPACE(struct inode *inode, qsize_t nr) |
{ |
int ret; |
if (!(ret = DQUOT_PREALLOC_SPACE_NODIRTY(inode, nr))) |
mark_inode_dirty(inode); |
return ret; |
} |
static __inline__ int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr) |
{ |
if (sb_any_quota_enabled(inode->i_sb)) { |
/* Used space is updated in alloc_space() */ |
if (inode->i_sb->dq_op->alloc_space(inode, nr, 0) == NO_QUOTA) |
return 1; |
} |
else { |
spin_lock(&dq_data_lock); |
inode_add_bytes(inode, nr); |
spin_unlock(&dq_data_lock); |
} |
return 0; |
} |
static __inline__ int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr) |
{ |
int ret; |
if (!(ret = DQUOT_ALLOC_SPACE_NODIRTY(inode, nr))) |
mark_inode_dirty(inode); |
return ret; |
} |
static __inline__ int DQUOT_ALLOC_INODE(struct inode *inode) |
{ |
if (sb_any_quota_enabled(inode->i_sb)) { |
DQUOT_INIT(inode); |
if (inode->i_sb->dq_op->alloc_inode(inode, 1) == NO_QUOTA) |
return 1; |
} |
return 0; |
} |
static __inline__ void DQUOT_FREE_SPACE_NODIRTY(struct inode *inode, qsize_t nr) |
{ |
if (sb_any_quota_enabled(inode->i_sb)) |
inode->i_sb->dq_op->free_space(inode, nr); |
else { |
spin_lock(&dq_data_lock); |
inode_sub_bytes(inode, nr); |
spin_unlock(&dq_data_lock); |
} |
} |
static __inline__ void DQUOT_FREE_SPACE(struct inode *inode, qsize_t nr) |
{ |
DQUOT_FREE_SPACE_NODIRTY(inode, nr); |
mark_inode_dirty(inode); |
} |
static __inline__ void DQUOT_FREE_INODE(struct inode *inode) |
{ |
if (sb_any_quota_enabled(inode->i_sb)) |
inode->i_sb->dq_op->free_inode(inode, 1); |
} |
static __inline__ int DQUOT_TRANSFER(struct inode *inode, struct iattr *iattr) |
{ |
if (sb_any_quota_enabled(inode->i_sb) && !IS_NOQUOTA(inode)) { |
DQUOT_INIT(inode); |
if (inode->i_sb->dq_op->transfer(inode, iattr) == NO_QUOTA) |
return 1; |
} |
return 0; |
} |
#define DQUOT_SYNC(sb) sync_dquots(sb, -1) |
static __inline__ int DQUOT_OFF(struct super_block *sb) |
{ |
int ret = -ENOSYS; |
if (sb->s_qcop && sb->s_qcop->quota_off) |
ret = sb->s_qcop->quota_off(sb, -1); |
return ret; |
} |
#else |
/* |
* NO-OP when quota not configured. |
*/ |
#define sb_dquot_ops (NULL) |
#define sb_quotactl_ops (NULL) |
#define sync_dquots_dev(dev,type) (NULL) |
#define DQUOT_INIT(inode) do { } while(0) |
#define DQUOT_DROP(inode) do { } while(0) |
#define DQUOT_ALLOC_INODE(inode) (0) |
#define DQUOT_FREE_INODE(inode) do { } while(0) |
#define DQUOT_SYNC(sb) do { } while(0) |
#define DQUOT_OFF(sb) do { } while(0) |
#define DQUOT_TRANSFER(inode, iattr) (0) |
extern __inline__ int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr) |
{ |
inode_add_bytes(inode, nr); |
return 0; |
} |
extern __inline__ int DQUOT_PREALLOC_SPACE(struct inode *inode, qsize_t nr) |
{ |
DQUOT_PREALLOC_SPACE_NODIRTY(inode, nr); |
mark_inode_dirty(inode); |
return 0; |
} |
extern __inline__ int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr) |
{ |
inode_add_bytes(inode, nr); |
return 0; |
} |
extern __inline__ int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr) |
{ |
DQUOT_ALLOC_SPACE_NODIRTY(inode, nr); |
mark_inode_dirty(inode); |
return 0; |
} |
extern __inline__ void DQUOT_FREE_SPACE_NODIRTY(struct inode *inode, qsize_t nr) |
{ |
inode_sub_bytes(inode, nr); |
} |
extern __inline__ void DQUOT_FREE_SPACE(struct inode *inode, qsize_t nr) |
{ |
DQUOT_FREE_SPACE_NODIRTY(inode, nr); |
mark_inode_dirty(inode); |
} |
#endif /* CONFIG_QUOTA */ |
#define DQUOT_PREALLOC_BLOCK_NODIRTY(inode, nr) DQUOT_PREALLOC_SPACE_NODIRTY(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits) |
#define DQUOT_PREALLOC_BLOCK(inode, nr) DQUOT_PREALLOC_SPACE(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits) |
#define DQUOT_ALLOC_BLOCK_NODIRTY(inode, nr) DQUOT_ALLOC_SPACE_NODIRTY(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits) |
#define DQUOT_ALLOC_BLOCK(inode, nr) DQUOT_ALLOC_SPACE(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits) |
#define DQUOT_FREE_BLOCK_NODIRTY(inode, nr) DQUOT_FREE_SPACE_NODIRTY(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits) |
#define DQUOT_FREE_BLOCK(inode, nr) DQUOT_FREE_SPACE(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits) |
#endif /* _LINUX_QUOTAOPS_ */ |
/shark/trunk/drivers/linuxc26/include/linux/zorro.h |
---|
0,0 → 1,212 |
/* |
* linux/zorro.h -- Amiga AutoConfig (Zorro) Bus Definitions |
* |
* Copyright (C) 1995--2000 Geert Uytterhoeven |
* |
* 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. |
*/ |
#ifndef _LINUX_ZORRO_H |
#define _LINUX_ZORRO_H |
#ifndef __ASSEMBLY__ |
/* |
* Each Zorro board has a 32-bit ID of the form |
* |
* mmmmmmmmmmmmmmmmppppppppeeeeeeee |
* |
* with |
* |
* mmmmmmmmmmmmmmmm 16-bit Manufacturer ID (assigned by CBM (sigh)) |
* pppppppp 8-bit Product ID (assigned by manufacturer) |
* eeeeeeee 8-bit Extended Product ID (currently only used |
* for some GVP boards) |
*/ |
#define ZORRO_MANUF(id) ((id) >> 16) |
#define ZORRO_PROD(id) (((id) >> 8) & 0xff) |
#define ZORRO_EPC(id) ((id) & 0xff) |
#define ZORRO_ID(manuf, prod, epc) \ |
((ZORRO_MANUF_##manuf << 16) | ((prod) << 8) | (epc)) |
typedef __u32 zorro_id; |
#define ZORRO_WILDCARD (0xffffffff) /* not official */ |
/* Include the ID list */ |
#include <linux/zorro_ids.h> |
/* |
* GVP identifies most of its products through the 'extended product code' |
* (epc). The epc has to be ANDed with the GVP_PRODMASK before the |
* identification. |
*/ |
#define GVP_PRODMASK (0xf8) |
#define GVP_SCSICLKMASK (0x01) |
enum GVP_flags { |
GVP_IO = 0x01, |
GVP_ACCEL = 0x02, |
GVP_SCSI = 0x04, |
GVP_24BITDMA = 0x08, |
GVP_25BITDMA = 0x10, |
GVP_NOBANK = 0x20, |
GVP_14MHZ = 0x40, |
}; |
struct Node { |
struct Node *ln_Succ; /* Pointer to next (successor) */ |
struct Node *ln_Pred; /* Pointer to previous (predecessor) */ |
__u8 ln_Type; |
__s8 ln_Pri; /* Priority, for sorting */ |
__s8 *ln_Name; /* ID string, null terminated */ |
} __attribute__ ((packed)); |
struct ExpansionRom { |
/* -First 16 bytes of the expansion ROM */ |
__u8 er_Type; /* Board type, size and flags */ |
__u8 er_Product; /* Product number, assigned by manufacturer */ |
__u8 er_Flags; /* Flags */ |
__u8 er_Reserved03; /* Must be zero ($ff inverted) */ |
__u16 er_Manufacturer; /* Unique ID, ASSIGNED BY COMMODORE-AMIGA! */ |
__u32 er_SerialNumber; /* Available for use by manufacturer */ |
__u16 er_InitDiagVec; /* Offset to optional "DiagArea" structure */ |
__u8 er_Reserved0c; |
__u8 er_Reserved0d; |
__u8 er_Reserved0e; |
__u8 er_Reserved0f; |
} __attribute__ ((packed)); |
/* er_Type board type bits */ |
#define ERT_TYPEMASK 0xc0 |
#define ERT_ZORROII 0xc0 |
#define ERT_ZORROIII 0x80 |
/* other bits defined in er_Type */ |
#define ERTB_MEMLIST 5 /* Link RAM into free memory list */ |
#define ERTF_MEMLIST (1<<5) |
struct ConfigDev { |
struct Node cd_Node; |
__u8 cd_Flags; /* (read/write) */ |
__u8 cd_Pad; /* reserved */ |
struct ExpansionRom cd_Rom; /* copy of board's expansion ROM */ |
void *cd_BoardAddr; /* where in memory the board was placed */ |
__u32 cd_BoardSize; /* size of board in bytes */ |
__u16 cd_SlotAddr; /* which slot number (PRIVATE) */ |
__u16 cd_SlotSize; /* number of slots (PRIVATE) */ |
void *cd_Driver; /* pointer to node of driver */ |
struct ConfigDev *cd_NextCD; /* linked list of drivers to config */ |
__u32 cd_Unused[4]; /* for whatever the driver wants */ |
} __attribute__ ((packed)); |
#else /* __ASSEMBLY__ */ |
LN_Succ = 0 |
LN_Pred = LN_Succ+4 |
LN_Type = LN_Pred+4 |
LN_Pri = LN_Type+1 |
LN_Name = LN_Pri+1 |
LN_sizeof = LN_Name+4 |
ER_Type = 0 |
ER_Product = ER_Type+1 |
ER_Flags = ER_Product+1 |
ER_Reserved03 = ER_Flags+1 |
ER_Manufacturer = ER_Reserved03+1 |
ER_SerialNumber = ER_Manufacturer+2 |
ER_InitDiagVec = ER_SerialNumber+4 |
ER_Reserved0c = ER_InitDiagVec+2 |
ER_Reserved0d = ER_Reserved0c+1 |
ER_Reserved0e = ER_Reserved0d+1 |
ER_Reserved0f = ER_Reserved0e+1 |
ER_sizeof = ER_Reserved0f+1 |
CD_Node = 0 |
CD_Flags = CD_Node+LN_sizeof |
CD_Pad = CD_Flags+1 |
CD_Rom = CD_Pad+1 |
CD_BoardAddr = CD_Rom+ER_sizeof |
CD_BoardSize = CD_BoardAddr+4 |
CD_SlotAddr = CD_BoardSize+4 |
CD_SlotSize = CD_SlotAddr+2 |
CD_Driver = CD_SlotSize+2 |
CD_NextCD = CD_Driver+4 |
CD_Unused = CD_NextCD+4 |
CD_sizeof = CD_Unused+(4*4) |
#endif /* __ASSEMBLY__ */ |
#ifndef __ASSEMBLY__ |
#define ZORRO_NUM_AUTO 16 |
#ifdef __KERNEL__ |
#include <linux/init.h> |
#include <linux/ioport.h> |
#include <asm/zorro.h> |
struct zorro_dev { |
struct ExpansionRom rom; |
zorro_id id; |
u16 slotaddr; |
u16 slotsize; |
char name[64]; |
struct resource resource; |
}; |
extern unsigned int zorro_num_autocon; /* # of autoconfig devices found */ |
extern struct zorro_dev zorro_autocon[ZORRO_NUM_AUTO]; |
/* |
* Zorro Functions |
*/ |
extern void zorro_name_device(struct zorro_dev *dev); |
extern struct zorro_dev *zorro_find_device(zorro_id id, |
struct zorro_dev *from); |
#define zorro_request_device(z, name) \ |
request_mem_region((z)->resource.start, \ |
(z)->resource.end-(z)->resource.start+1, (name)) |
#define zorro_release_device(z) \ |
release_mem_region((z)->resource.start, \ |
(z)->resource.end-(z)->resource.start+1) |
/* |
* Bitmask indicating portions of available Zorro II RAM that are unused |
* by the system. Every bit represents a 64K chunk, for a maximum of 8MB |
* (128 chunks, physical 0x00200000-0x009fffff). |
* |
* If you want to use (= allocate) portions of this RAM, you should clear |
* the corresponding bits. |
*/ |
extern DECLARE_BITMAP(zorro_unused_z2ram, 128); |
#define Z2RAM_START (0x00200000) |
#define Z2RAM_END (0x00a00000) |
#define Z2RAM_SIZE (0x00800000) |
#define Z2RAM_CHUNKSIZE (0x00010000) |
#define Z2RAM_CHUNKMASK (0x0000ffff) |
#define Z2RAM_CHUNKSHIFT (16) |
#endif /* !__ASSEMBLY__ */ |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_ZORRO_H */ |
/shark/trunk/drivers/linuxc26/include/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 |
/shark/trunk/drivers/linuxc26/include/linux/compat_ioctl.h |
---|
0,0 → 1,680 |
/* List here explicitly which ioctl's are known to have |
* compatible types passed or none at all... Please include |
* only stuff that is compatible on *all architectures*. |
*/ |
/* Big T */ |
COMPATIBLE_IOCTL(TCGETA) |
COMPATIBLE_IOCTL(TCSETA) |
COMPATIBLE_IOCTL(TCSETAW) |
COMPATIBLE_IOCTL(TCSETAF) |
COMPATIBLE_IOCTL(TCSBRK) |
COMPATIBLE_IOCTL(TCXONC) |
COMPATIBLE_IOCTL(TCFLSH) |
COMPATIBLE_IOCTL(TCGETS) |
COMPATIBLE_IOCTL(TCSETS) |
COMPATIBLE_IOCTL(TCSETSW) |
COMPATIBLE_IOCTL(TCSETSF) |
COMPATIBLE_IOCTL(TIOCLINUX) |
/* Little t */ |
COMPATIBLE_IOCTL(TIOCGETD) |
COMPATIBLE_IOCTL(TIOCSETD) |
COMPATIBLE_IOCTL(TIOCEXCL) |
COMPATIBLE_IOCTL(TIOCNXCL) |
COMPATIBLE_IOCTL(TIOCCONS) |
COMPATIBLE_IOCTL(TIOCGSOFTCAR) |
COMPATIBLE_IOCTL(TIOCSSOFTCAR) |
COMPATIBLE_IOCTL(TIOCSWINSZ) |
COMPATIBLE_IOCTL(TIOCGWINSZ) |
COMPATIBLE_IOCTL(TIOCMGET) |
COMPATIBLE_IOCTL(TIOCMBIC) |
COMPATIBLE_IOCTL(TIOCMBIS) |
COMPATIBLE_IOCTL(TIOCMSET) |
COMPATIBLE_IOCTL(TIOCPKT) |
COMPATIBLE_IOCTL(TIOCNOTTY) |
COMPATIBLE_IOCTL(TIOCSTI) |
COMPATIBLE_IOCTL(TIOCOUTQ) |
COMPATIBLE_IOCTL(TIOCSPGRP) |
COMPATIBLE_IOCTL(TIOCGPGRP) |
COMPATIBLE_IOCTL(TIOCSCTTY) |
COMPATIBLE_IOCTL(TIOCGPTN) |
COMPATIBLE_IOCTL(TIOCSPTLCK) |
COMPATIBLE_IOCTL(TIOCSERGETLSR) |
#ifdef CONFIG_FB |
/* Big F */ |
COMPATIBLE_IOCTL(FBIOGET_VSCREENINFO) |
COMPATIBLE_IOCTL(FBIOPUT_VSCREENINFO) |
COMPATIBLE_IOCTL(FBIOPAN_DISPLAY) |
COMPATIBLE_IOCTL(FBIOGET_CON2FBMAP) |
COMPATIBLE_IOCTL(FBIOPUT_CON2FBMAP) |
#endif |
/* Little f */ |
COMPATIBLE_IOCTL(FIOCLEX) |
COMPATIBLE_IOCTL(FIONCLEX) |
COMPATIBLE_IOCTL(FIOASYNC) |
COMPATIBLE_IOCTL(FIONBIO) |
COMPATIBLE_IOCTL(FIONREAD) /* This is also TIOCINQ */ |
/* 0x00 */ |
COMPATIBLE_IOCTL(FIBMAP) |
COMPATIBLE_IOCTL(FIGETBSZ) |
/* 0x03 -- HD/IDE ioctl's used by hdparm and friends. |
* Some need translations, these do not. |
*/ |
COMPATIBLE_IOCTL(HDIO_GET_IDENTITY) |
COMPATIBLE_IOCTL(HDIO_SET_DMA) |
COMPATIBLE_IOCTL(HDIO_SET_UNMASKINTR) |
COMPATIBLE_IOCTL(HDIO_SET_NOWERR) |
COMPATIBLE_IOCTL(HDIO_SET_32BIT) |
COMPATIBLE_IOCTL(HDIO_SET_MULTCOUNT) |
COMPATIBLE_IOCTL(HDIO_DRIVE_CMD) |
COMPATIBLE_IOCTL(HDIO_SET_PIO_MODE) |
COMPATIBLE_IOCTL(HDIO_SET_NICE) |
#ifdef CONFIG_BLK_DEV_FD |
/* 0x02 -- Floppy ioctls */ |
COMPATIBLE_IOCTL(FDMSGON) |
COMPATIBLE_IOCTL(FDMSGOFF) |
COMPATIBLE_IOCTL(FDSETEMSGTRESH) |
COMPATIBLE_IOCTL(FDFLUSH) |
COMPATIBLE_IOCTL(FDWERRORCLR) |
COMPATIBLE_IOCTL(FDSETMAXERRS) |
COMPATIBLE_IOCTL(FDGETMAXERRS) |
COMPATIBLE_IOCTL(FDGETDRVTYP) |
COMPATIBLE_IOCTL(FDEJECT) |
COMPATIBLE_IOCTL(FDCLRPRM) |
COMPATIBLE_IOCTL(FDFMTBEG) |
COMPATIBLE_IOCTL(FDFMTEND) |
COMPATIBLE_IOCTL(FDRESET) |
COMPATIBLE_IOCTL(FDTWADDLE) |
COMPATIBLE_IOCTL(FDFMTTRK) |
COMPATIBLE_IOCTL(FDRAWCMD) |
#endif |
/* 0x12 */ |
COMPATIBLE_IOCTL(BLKROSET) |
COMPATIBLE_IOCTL(BLKROGET) |
COMPATIBLE_IOCTL(BLKRRPART) |
COMPATIBLE_IOCTL(BLKFLSBUF) |
COMPATIBLE_IOCTL(BLKSECTSET) |
COMPATIBLE_IOCTL(BLKSSZGET) |
COMPATIBLE_IOCTL(BLKRASET) |
COMPATIBLE_IOCTL(BLKFRASET) |
/* RAID */ |
COMPATIBLE_IOCTL(RAID_VERSION) |
COMPATIBLE_IOCTL(GET_ARRAY_INFO) |
COMPATIBLE_IOCTL(GET_DISK_INFO) |
COMPATIBLE_IOCTL(PRINT_RAID_DEBUG) |
COMPATIBLE_IOCTL(RAID_AUTORUN) |
COMPATIBLE_IOCTL(CLEAR_ARRAY) |
COMPATIBLE_IOCTL(ADD_NEW_DISK) |
COMPATIBLE_IOCTL(HOT_REMOVE_DISK) |
COMPATIBLE_IOCTL(SET_ARRAY_INFO) |
COMPATIBLE_IOCTL(SET_DISK_INFO) |
COMPATIBLE_IOCTL(WRITE_RAID_INFO) |
COMPATIBLE_IOCTL(UNPROTECT_ARRAY) |
COMPATIBLE_IOCTL(PROTECT_ARRAY) |
COMPATIBLE_IOCTL(HOT_ADD_DISK) |
COMPATIBLE_IOCTL(SET_DISK_FAULTY) |
COMPATIBLE_IOCTL(RUN_ARRAY) |
COMPATIBLE_IOCTL(START_ARRAY) |
COMPATIBLE_IOCTL(STOP_ARRAY) |
COMPATIBLE_IOCTL(STOP_ARRAY_RO) |
COMPATIBLE_IOCTL(RESTART_ARRAY_RW) |
#ifdef CONFIG_BLK_DEV_DM |
/* DM */ |
#ifdef CONFIG_DM_IOCTL_V4 |
COMPATIBLE_IOCTL(DM_VERSION) |
COMPATIBLE_IOCTL(DM_LIST_DEVICES) |
COMPATIBLE_IOCTL(DM_DEV_CREATE) |
COMPATIBLE_IOCTL(DM_DEV_REMOVE) |
COMPATIBLE_IOCTL(DM_DEV_RENAME) |
COMPATIBLE_IOCTL(DM_DEV_SUSPEND) |
COMPATIBLE_IOCTL(DM_DEV_STATUS) |
COMPATIBLE_IOCTL(DM_DEV_WAIT) |
COMPATIBLE_IOCTL(DM_TABLE_LOAD) |
COMPATIBLE_IOCTL(DM_TABLE_CLEAR) |
COMPATIBLE_IOCTL(DM_TABLE_DEPS) |
COMPATIBLE_IOCTL(DM_TABLE_STATUS) |
#else |
COMPATIBLE_IOCTL(DM_VERSION) |
COMPATIBLE_IOCTL(DM_REMOVE_ALL) |
COMPATIBLE_IOCTL(DM_DEV_CREATE) |
COMPATIBLE_IOCTL(DM_DEV_REMOVE) |
COMPATIBLE_IOCTL(DM_DEV_RELOAD) |
COMPATIBLE_IOCTL(DM_DEV_SUSPEND) |
COMPATIBLE_IOCTL(DM_DEV_RENAME) |
COMPATIBLE_IOCTL(DM_DEV_DEPS) |
COMPATIBLE_IOCTL(DM_DEV_STATUS) |
COMPATIBLE_IOCTL(DM_TARGET_STATUS) |
COMPATIBLE_IOCTL(DM_TARGET_WAIT) |
#endif |
#endif |
/* Big K */ |
COMPATIBLE_IOCTL(PIO_FONT) |
COMPATIBLE_IOCTL(GIO_FONT) |
COMPATIBLE_IOCTL(KDSIGACCEPT) |
COMPATIBLE_IOCTL(KDGETKEYCODE) |
COMPATIBLE_IOCTL(KDSETKEYCODE) |
COMPATIBLE_IOCTL(KIOCSOUND) |
COMPATIBLE_IOCTL(KDMKTONE) |
COMPATIBLE_IOCTL(KDGKBTYPE) |
COMPATIBLE_IOCTL(KDSETMODE) |
COMPATIBLE_IOCTL(KDGETMODE) |
COMPATIBLE_IOCTL(KDSKBMODE) |
COMPATIBLE_IOCTL(KDGKBMODE) |
COMPATIBLE_IOCTL(KDSKBMETA) |
COMPATIBLE_IOCTL(KDGKBMETA) |
COMPATIBLE_IOCTL(KDGKBENT) |
COMPATIBLE_IOCTL(KDSKBENT) |
COMPATIBLE_IOCTL(KDGKBSENT) |
COMPATIBLE_IOCTL(KDSKBSENT) |
COMPATIBLE_IOCTL(KDGKBDIACR) |
COMPATIBLE_IOCTL(KDSKBDIACR) |
COMPATIBLE_IOCTL(KDKBDREP) |
COMPATIBLE_IOCTL(KDGKBLED) |
COMPATIBLE_IOCTL(KDSKBLED) |
COMPATIBLE_IOCTL(KDGETLED) |
COMPATIBLE_IOCTL(KDSETLED) |
COMPATIBLE_IOCTL(GIO_SCRNMAP) |
COMPATIBLE_IOCTL(PIO_SCRNMAP) |
COMPATIBLE_IOCTL(GIO_UNISCRNMAP) |
COMPATIBLE_IOCTL(PIO_UNISCRNMAP) |
COMPATIBLE_IOCTL(PIO_FONTRESET) |
COMPATIBLE_IOCTL(PIO_UNIMAPCLR) |
/* Big S */ |
COMPATIBLE_IOCTL(SCSI_IOCTL_GET_IDLUN) |
COMPATIBLE_IOCTL(SCSI_IOCTL_DOORLOCK) |
COMPATIBLE_IOCTL(SCSI_IOCTL_DOORUNLOCK) |
COMPATIBLE_IOCTL(SCSI_IOCTL_TEST_UNIT_READY) |
COMPATIBLE_IOCTL(SCSI_IOCTL_GET_BUS_NUMBER) |
COMPATIBLE_IOCTL(SCSI_IOCTL_SEND_COMMAND) |
COMPATIBLE_IOCTL(SCSI_IOCTL_PROBE_HOST) |
COMPATIBLE_IOCTL(SCSI_IOCTL_GET_PCI) |
/* Big T */ |
COMPATIBLE_IOCTL(TUNSETNOCSUM) |
COMPATIBLE_IOCTL(TUNSETDEBUG) |
COMPATIBLE_IOCTL(TUNSETIFF) |
COMPATIBLE_IOCTL(TUNSETPERSIST) |
COMPATIBLE_IOCTL(TUNSETOWNER) |
/* Big V */ |
COMPATIBLE_IOCTL(VT_SETMODE) |
COMPATIBLE_IOCTL(VT_GETMODE) |
COMPATIBLE_IOCTL(VT_GETSTATE) |
COMPATIBLE_IOCTL(VT_OPENQRY) |
COMPATIBLE_IOCTL(VT_ACTIVATE) |
COMPATIBLE_IOCTL(VT_WAITACTIVE) |
COMPATIBLE_IOCTL(VT_RELDISP) |
COMPATIBLE_IOCTL(VT_DISALLOCATE) |
COMPATIBLE_IOCTL(VT_RESIZE) |
COMPATIBLE_IOCTL(VT_RESIZEX) |
COMPATIBLE_IOCTL(VT_LOCKSWITCH) |
COMPATIBLE_IOCTL(VT_UNLOCKSWITCH) |
#if defined(CONFIG_VIDEO_DEV) || defined(CONFIG_VIDEO_DEV_MODULE) |
/* Little v */ |
/* Little v, the video4linux ioctls (conflict?) */ |
COMPATIBLE_IOCTL(VIDIOCGCAP) |
COMPATIBLE_IOCTL(VIDIOCGCHAN) |
COMPATIBLE_IOCTL(VIDIOCSCHAN) |
COMPATIBLE_IOCTL(VIDIOCGPICT) |
COMPATIBLE_IOCTL(VIDIOCSPICT) |
COMPATIBLE_IOCTL(VIDIOCCAPTURE) |
COMPATIBLE_IOCTL(VIDIOCKEY) |
COMPATIBLE_IOCTL(VIDIOCGAUDIO) |
COMPATIBLE_IOCTL(VIDIOCSAUDIO) |
COMPATIBLE_IOCTL(VIDIOCSYNC) |
COMPATIBLE_IOCTL(VIDIOCMCAPTURE) |
COMPATIBLE_IOCTL(VIDIOCGMBUF) |
COMPATIBLE_IOCTL(VIDIOCGUNIT) |
COMPATIBLE_IOCTL(VIDIOCGCAPTURE) |
COMPATIBLE_IOCTL(VIDIOCSCAPTURE) |
/* BTTV specific... */ |
COMPATIBLE_IOCTL(_IOW('v', BASE_VIDIOCPRIVATE+0, char [256])) |
COMPATIBLE_IOCTL(_IOR('v', BASE_VIDIOCPRIVATE+1, char [256])) |
COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE+2, unsigned int)) |
COMPATIBLE_IOCTL(_IOW('v' , BASE_VIDIOCPRIVATE+3, char [16])) /* struct bttv_pll_info */ |
COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE+4, int)) |
COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE+5, int)) |
COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE+6, int)) |
COMPATIBLE_IOCTL(_IOR('v' , BASE_VIDIOCPRIVATE+7, int)) |
#endif |
/* Little p (/dev/rtc, /dev/envctrl, etc.) */ |
COMPATIBLE_IOCTL(RTC_AIE_ON) |
COMPATIBLE_IOCTL(RTC_AIE_OFF) |
COMPATIBLE_IOCTL(RTC_UIE_ON) |
COMPATIBLE_IOCTL(RTC_UIE_OFF) |
COMPATIBLE_IOCTL(RTC_PIE_ON) |
COMPATIBLE_IOCTL(RTC_PIE_OFF) |
COMPATIBLE_IOCTL(RTC_WIE_ON) |
COMPATIBLE_IOCTL(RTC_WIE_OFF) |
COMPATIBLE_IOCTL(RTC_ALM_SET) |
COMPATIBLE_IOCTL(RTC_ALM_READ) |
COMPATIBLE_IOCTL(RTC_RD_TIME) |
COMPATIBLE_IOCTL(RTC_SET_TIME) |
COMPATIBLE_IOCTL(RTC_WKALM_SET) |
COMPATIBLE_IOCTL(RTC_WKALM_RD) |
/* Little m */ |
COMPATIBLE_IOCTL(MTIOCTOP) |
/* Socket level stuff */ |
COMPATIBLE_IOCTL(FIOSETOWN) |
COMPATIBLE_IOCTL(SIOCSPGRP) |
COMPATIBLE_IOCTL(FIOGETOWN) |
COMPATIBLE_IOCTL(SIOCGPGRP) |
COMPATIBLE_IOCTL(SIOCATMARK) |
COMPATIBLE_IOCTL(SIOCSIFLINK) |
COMPATIBLE_IOCTL(SIOCSIFENCAP) |
COMPATIBLE_IOCTL(SIOCGIFENCAP) |
COMPATIBLE_IOCTL(SIOCSIFBR) |
COMPATIBLE_IOCTL(SIOCGIFBR) |
COMPATIBLE_IOCTL(SIOCSARP) |
COMPATIBLE_IOCTL(SIOCGARP) |
COMPATIBLE_IOCTL(SIOCDARP) |
COMPATIBLE_IOCTL(SIOCSRARP) |
COMPATIBLE_IOCTL(SIOCGRARP) |
COMPATIBLE_IOCTL(SIOCDRARP) |
COMPATIBLE_IOCTL(SIOCADDDLCI) |
COMPATIBLE_IOCTL(SIOCDELDLCI) |
COMPATIBLE_IOCTL(SIOCGMIIPHY) |
COMPATIBLE_IOCTL(SIOCGMIIREG) |
COMPATIBLE_IOCTL(SIOCSMIIREG) |
COMPATIBLE_IOCTL(SIOCGIFVLAN) |
COMPATIBLE_IOCTL(SIOCSIFVLAN) |
/* SG stuff */ |
COMPATIBLE_IOCTL(SG_SET_TIMEOUT) |
COMPATIBLE_IOCTL(SG_GET_TIMEOUT) |
COMPATIBLE_IOCTL(SG_EMULATED_HOST) |
COMPATIBLE_IOCTL(SG_SET_TRANSFORM) |
COMPATIBLE_IOCTL(SG_GET_TRANSFORM) |
COMPATIBLE_IOCTL(SG_SET_RESERVED_SIZE) |
COMPATIBLE_IOCTL(SG_GET_RESERVED_SIZE) |
COMPATIBLE_IOCTL(SG_GET_SCSI_ID) |
COMPATIBLE_IOCTL(SG_SET_FORCE_LOW_DMA) |
COMPATIBLE_IOCTL(SG_GET_LOW_DMA) |
COMPATIBLE_IOCTL(SG_SET_FORCE_PACK_ID) |
COMPATIBLE_IOCTL(SG_GET_PACK_ID) |
COMPATIBLE_IOCTL(SG_GET_NUM_WAITING) |
COMPATIBLE_IOCTL(SG_SET_DEBUG) |
COMPATIBLE_IOCTL(SG_GET_SG_TABLESIZE) |
COMPATIBLE_IOCTL(SG_GET_COMMAND_Q) |
COMPATIBLE_IOCTL(SG_SET_COMMAND_Q) |
COMPATIBLE_IOCTL(SG_GET_VERSION_NUM) |
COMPATIBLE_IOCTL(SG_NEXT_CMD_LEN) |
COMPATIBLE_IOCTL(SG_SCSI_RESET) |
COMPATIBLE_IOCTL(SG_GET_REQUEST_TABLE) |
COMPATIBLE_IOCTL(SG_SET_KEEP_ORPHAN) |
COMPATIBLE_IOCTL(SG_GET_KEEP_ORPHAN) |
#if defined(CONFIG_PPP) || defined(CONFIG_PPP_MODULE) |
/* PPP stuff */ |
COMPATIBLE_IOCTL(PPPIOCGFLAGS) |
COMPATIBLE_IOCTL(PPPIOCSFLAGS) |
COMPATIBLE_IOCTL(PPPIOCGASYNCMAP) |
COMPATIBLE_IOCTL(PPPIOCSASYNCMAP) |
COMPATIBLE_IOCTL(PPPIOCGUNIT) |
COMPATIBLE_IOCTL(PPPIOCGRASYNCMAP) |
COMPATIBLE_IOCTL(PPPIOCSRASYNCMAP) |
COMPATIBLE_IOCTL(PPPIOCGMRU) |
COMPATIBLE_IOCTL(PPPIOCSMRU) |
COMPATIBLE_IOCTL(PPPIOCSMAXCID) |
COMPATIBLE_IOCTL(PPPIOCGXASYNCMAP) |
COMPATIBLE_IOCTL(PPPIOCSXASYNCMAP) |
COMPATIBLE_IOCTL(PPPIOCXFERUNIT) |
/* PPPIOCSCOMPRESS is translated */ |
COMPATIBLE_IOCTL(PPPIOCGNPMODE) |
COMPATIBLE_IOCTL(PPPIOCSNPMODE) |
COMPATIBLE_IOCTL(PPPIOCGDEBUG) |
COMPATIBLE_IOCTL(PPPIOCSDEBUG) |
/* PPPIOCSPASS is translated */ |
/* PPPIOCSACTIVE is translated */ |
/* PPPIOCGIDLE is translated */ |
COMPATIBLE_IOCTL(PPPIOCNEWUNIT) |
COMPATIBLE_IOCTL(PPPIOCATTACH) |
COMPATIBLE_IOCTL(PPPIOCDETACH) |
COMPATIBLE_IOCTL(PPPIOCSMRRU) |
COMPATIBLE_IOCTL(PPPIOCCONNECT) |
COMPATIBLE_IOCTL(PPPIOCDISCONN) |
COMPATIBLE_IOCTL(PPPIOCATTCHAN) |
COMPATIBLE_IOCTL(PPPIOCGCHAN) |
/* PPPOX */ |
COMPATIBLE_IOCTL(PPPOEIOCSFWD) |
COMPATIBLE_IOCTL(PPPOEIOCDFWD) |
#endif |
/* LP */ |
COMPATIBLE_IOCTL(LPGETSTATUS) |
/* CDROM stuff */ |
COMPATIBLE_IOCTL(CDROMPAUSE) |
COMPATIBLE_IOCTL(CDROMRESUME) |
COMPATIBLE_IOCTL(CDROMPLAYMSF) |
COMPATIBLE_IOCTL(CDROMPLAYTRKIND) |
COMPATIBLE_IOCTL(CDROMREADTOCHDR) |
COMPATIBLE_IOCTL(CDROMREADTOCENTRY) |
COMPATIBLE_IOCTL(CDROMSTOP) |
COMPATIBLE_IOCTL(CDROMSTART) |
COMPATIBLE_IOCTL(CDROMEJECT) |
COMPATIBLE_IOCTL(CDROMVOLCTRL) |
COMPATIBLE_IOCTL(CDROMSUBCHNL) |
COMPATIBLE_IOCTL(CDROMEJECT_SW) |
COMPATIBLE_IOCTL(CDROMMULTISESSION) |
COMPATIBLE_IOCTL(CDROM_GET_MCN) |
COMPATIBLE_IOCTL(CDROMRESET) |
COMPATIBLE_IOCTL(CDROMVOLREAD) |
COMPATIBLE_IOCTL(CDROMSEEK) |
COMPATIBLE_IOCTL(CDROMPLAYBLK) |
COMPATIBLE_IOCTL(CDROMCLOSETRAY) |
COMPATIBLE_IOCTL(CDROM_SET_OPTIONS) |
COMPATIBLE_IOCTL(CDROM_CLEAR_OPTIONS) |
COMPATIBLE_IOCTL(CDROM_SELECT_SPEED) |
COMPATIBLE_IOCTL(CDROM_SELECT_DISC) |
COMPATIBLE_IOCTL(CDROM_MEDIA_CHANGED) |
COMPATIBLE_IOCTL(CDROM_DRIVE_STATUS) |
COMPATIBLE_IOCTL(CDROM_DISC_STATUS) |
COMPATIBLE_IOCTL(CDROM_CHANGER_NSLOTS) |
COMPATIBLE_IOCTL(CDROM_LOCKDOOR) |
COMPATIBLE_IOCTL(CDROM_DEBUG) |
COMPATIBLE_IOCTL(CDROM_GET_CAPABILITY) |
/* Ignore cdrom.h about these next 5 ioctls, they absolutely do |
* not take a struct cdrom_read, instead they take a struct cdrom_msf |
* which is compatible. |
*/ |
COMPATIBLE_IOCTL(CDROMREADMODE2) |
COMPATIBLE_IOCTL(CDROMREADMODE1) |
COMPATIBLE_IOCTL(CDROMREADRAW) |
COMPATIBLE_IOCTL(CDROMREADCOOKED) |
COMPATIBLE_IOCTL(CDROMREADALL) |
/* DVD ioctls */ |
COMPATIBLE_IOCTL(DVD_READ_STRUCT) |
COMPATIBLE_IOCTL(DVD_WRITE_STRUCT) |
COMPATIBLE_IOCTL(DVD_AUTH) |
/* Big L */ |
COMPATIBLE_IOCTL(LOOP_SET_FD) |
COMPATIBLE_IOCTL(LOOP_CLR_FD) |
COMPATIBLE_IOCTL(LOOP_GET_STATUS64) |
COMPATIBLE_IOCTL(LOOP_SET_STATUS64) |
/* Big A */ |
/* sparc only */ |
#if defined(CONFIG_SOUND) || defined (CONFIG_SOUND_MODULE) |
/* Big Q for sound/OSS */ |
COMPATIBLE_IOCTL(SNDCTL_SEQ_RESET) |
COMPATIBLE_IOCTL(SNDCTL_SEQ_SYNC) |
COMPATIBLE_IOCTL(SNDCTL_SYNTH_INFO) |
COMPATIBLE_IOCTL(SNDCTL_SEQ_CTRLRATE) |
COMPATIBLE_IOCTL(SNDCTL_SEQ_GETOUTCOUNT) |
COMPATIBLE_IOCTL(SNDCTL_SEQ_GETINCOUNT) |
COMPATIBLE_IOCTL(SNDCTL_SEQ_PERCMODE) |
COMPATIBLE_IOCTL(SNDCTL_FM_LOAD_INSTR) |
COMPATIBLE_IOCTL(SNDCTL_SEQ_TESTMIDI) |
COMPATIBLE_IOCTL(SNDCTL_SEQ_RESETSAMPLES) |
COMPATIBLE_IOCTL(SNDCTL_SEQ_NRSYNTHS) |
COMPATIBLE_IOCTL(SNDCTL_SEQ_NRMIDIS) |
COMPATIBLE_IOCTL(SNDCTL_MIDI_INFO) |
COMPATIBLE_IOCTL(SNDCTL_SEQ_THRESHOLD) |
COMPATIBLE_IOCTL(SNDCTL_SYNTH_MEMAVL) |
COMPATIBLE_IOCTL(SNDCTL_FM_4OP_ENABLE) |
COMPATIBLE_IOCTL(SNDCTL_SEQ_PANIC) |
COMPATIBLE_IOCTL(SNDCTL_SEQ_OUTOFBAND) |
COMPATIBLE_IOCTL(SNDCTL_SEQ_GETTIME) |
COMPATIBLE_IOCTL(SNDCTL_SYNTH_ID) |
COMPATIBLE_IOCTL(SNDCTL_SYNTH_CONTROL) |
COMPATIBLE_IOCTL(SNDCTL_SYNTH_REMOVESAMPLE) |
/* Big T for sound/OSS */ |
COMPATIBLE_IOCTL(SNDCTL_TMR_TIMEBASE) |
COMPATIBLE_IOCTL(SNDCTL_TMR_START) |
COMPATIBLE_IOCTL(SNDCTL_TMR_STOP) |
COMPATIBLE_IOCTL(SNDCTL_TMR_CONTINUE) |
COMPATIBLE_IOCTL(SNDCTL_TMR_TEMPO) |
COMPATIBLE_IOCTL(SNDCTL_TMR_SOURCE) |
COMPATIBLE_IOCTL(SNDCTL_TMR_METRONOME) |
COMPATIBLE_IOCTL(SNDCTL_TMR_SELECT) |
/* Little m for sound/OSS */ |
COMPATIBLE_IOCTL(SNDCTL_MIDI_PRETIME) |
COMPATIBLE_IOCTL(SNDCTL_MIDI_MPUMODE) |
COMPATIBLE_IOCTL(SNDCTL_MIDI_MPUCMD) |
/* Big P for sound/OSS */ |
COMPATIBLE_IOCTL(SNDCTL_DSP_RESET) |
COMPATIBLE_IOCTL(SNDCTL_DSP_SYNC) |
COMPATIBLE_IOCTL(SNDCTL_DSP_SPEED) |
COMPATIBLE_IOCTL(SNDCTL_DSP_STEREO) |
COMPATIBLE_IOCTL(SNDCTL_DSP_GETBLKSIZE) |
COMPATIBLE_IOCTL(SNDCTL_DSP_CHANNELS) |
COMPATIBLE_IOCTL(SOUND_PCM_WRITE_FILTER) |
COMPATIBLE_IOCTL(SNDCTL_DSP_POST) |
COMPATIBLE_IOCTL(SNDCTL_DSP_SUBDIVIDE) |
COMPATIBLE_IOCTL(SNDCTL_DSP_SETFRAGMENT) |
COMPATIBLE_IOCTL(SNDCTL_DSP_GETFMTS) |
COMPATIBLE_IOCTL(SNDCTL_DSP_SETFMT) |
COMPATIBLE_IOCTL(SNDCTL_DSP_GETOSPACE) |
COMPATIBLE_IOCTL(SNDCTL_DSP_GETISPACE) |
COMPATIBLE_IOCTL(SNDCTL_DSP_NONBLOCK) |
COMPATIBLE_IOCTL(SNDCTL_DSP_GETCAPS) |
COMPATIBLE_IOCTL(SNDCTL_DSP_GETTRIGGER) |
COMPATIBLE_IOCTL(SNDCTL_DSP_SETTRIGGER) |
COMPATIBLE_IOCTL(SNDCTL_DSP_GETIPTR) |
COMPATIBLE_IOCTL(SNDCTL_DSP_GETOPTR) |
/* SNDCTL_DSP_MAPINBUF, XXX needs translation */ |
/* SNDCTL_DSP_MAPOUTBUF, XXX needs translation */ |
COMPATIBLE_IOCTL(SNDCTL_DSP_SETSYNCRO) |
COMPATIBLE_IOCTL(SNDCTL_DSP_SETDUPLEX) |
COMPATIBLE_IOCTL(SNDCTL_DSP_GETODELAY) |
COMPATIBLE_IOCTL(SNDCTL_DSP_PROFILE) |
COMPATIBLE_IOCTL(SOUND_PCM_READ_RATE) |
COMPATIBLE_IOCTL(SOUND_PCM_READ_CHANNELS) |
COMPATIBLE_IOCTL(SOUND_PCM_READ_BITS) |
COMPATIBLE_IOCTL(SOUND_PCM_READ_FILTER) |
/* Big C for sound/OSS */ |
COMPATIBLE_IOCTL(SNDCTL_COPR_RESET) |
COMPATIBLE_IOCTL(SNDCTL_COPR_LOAD) |
COMPATIBLE_IOCTL(SNDCTL_COPR_RDATA) |
COMPATIBLE_IOCTL(SNDCTL_COPR_RCODE) |
COMPATIBLE_IOCTL(SNDCTL_COPR_WDATA) |
COMPATIBLE_IOCTL(SNDCTL_COPR_WCODE) |
COMPATIBLE_IOCTL(SNDCTL_COPR_RUN) |
COMPATIBLE_IOCTL(SNDCTL_COPR_HALT) |
COMPATIBLE_IOCTL(SNDCTL_COPR_SENDMSG) |
COMPATIBLE_IOCTL(SNDCTL_COPR_RCVMSG) |
/* Big M for sound/OSS */ |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_VOLUME) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_BASS) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_TREBLE) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_SYNTH) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_PCM) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_SPEAKER) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_MIC) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_CD) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_IMIX) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_ALTPCM) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_RECLEV) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_IGAIN) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_OGAIN) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE1) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE2) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE3) |
COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_DIGITAL1)) |
COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_DIGITAL2)) |
COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_DIGITAL3)) |
COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_PHONEIN)) |
COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_PHONEOUT)) |
COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_VIDEO)) |
COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_RADIO)) |
COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_MONITOR)) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_MUTE) |
/* SOUND_MIXER_READ_ENHANCE, same value as READ_MUTE */ |
/* SOUND_MIXER_READ_LOUD, same value as READ_MUTE */ |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_RECSRC) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_DEVMASK) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_RECMASK) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_STEREODEVS) |
COMPATIBLE_IOCTL(SOUND_MIXER_READ_CAPS) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_VOLUME) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_BASS) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_TREBLE) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_SYNTH) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_PCM) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_SPEAKER) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_MIC) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_CD) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_IMIX) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_ALTPCM) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_RECLEV) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_IGAIN) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_OGAIN) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE1) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE2) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE3) |
COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_DIGITAL1)) |
COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_DIGITAL2)) |
COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_DIGITAL3)) |
COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_PHONEIN)) |
COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_PHONEOUT)) |
COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_VIDEO)) |
COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_RADIO)) |
COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_MONITOR)) |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_MUTE) |
/* SOUND_MIXER_WRITE_ENHANCE, same value as WRITE_MUTE */ |
/* SOUND_MIXER_WRITE_LOUD, same value as WRITE_MUTE */ |
COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_RECSRC) |
COMPATIBLE_IOCTL(SOUND_MIXER_INFO) |
COMPATIBLE_IOCTL(SOUND_OLD_MIXER_INFO) |
COMPATIBLE_IOCTL(SOUND_MIXER_ACCESS) |
COMPATIBLE_IOCTL(SOUND_MIXER_AGC) |
COMPATIBLE_IOCTL(SOUND_MIXER_3DSE) |
COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE1) |
COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE2) |
COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE3) |
COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE4) |
COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE5) |
COMPATIBLE_IOCTL(SOUND_MIXER_GETLEVELS) |
COMPATIBLE_IOCTL(SOUND_MIXER_SETLEVELS) |
COMPATIBLE_IOCTL(OSS_GETVERSION) |
#endif |
/* AUTOFS */ |
COMPATIBLE_IOCTL(AUTOFS_IOC_READY) |
COMPATIBLE_IOCTL(AUTOFS_IOC_FAIL) |
COMPATIBLE_IOCTL(AUTOFS_IOC_CATATONIC) |
COMPATIBLE_IOCTL(AUTOFS_IOC_PROTOVER) |
COMPATIBLE_IOCTL(AUTOFS_IOC_EXPIRE) |
COMPATIBLE_IOCTL(AUTOFS_IOC_EXPIRE_MULTI) |
/* DEVFS */ |
COMPATIBLE_IOCTL(DEVFSDIOC_GET_PROTO_REV) |
COMPATIBLE_IOCTL(DEVFSDIOC_SET_EVENT_MASK) |
COMPATIBLE_IOCTL(DEVFSDIOC_RELEASE_EVENT_QUEUE) |
COMPATIBLE_IOCTL(DEVFSDIOC_SET_DEBUG_MASK) |
/* Raw devices */ |
COMPATIBLE_IOCTL(RAW_SETBIND) |
COMPATIBLE_IOCTL(RAW_GETBIND) |
/* SMB ioctls which do not need any translations */ |
COMPATIBLE_IOCTL(SMB_IOC_NEWCONN) |
/* NCP ioctls which do not need any translations */ |
COMPATIBLE_IOCTL(NCP_IOC_CONN_LOGGED_IN) |
COMPATIBLE_IOCTL(NCP_IOC_SIGN_INIT) |
COMPATIBLE_IOCTL(NCP_IOC_SIGN_WANTED) |
COMPATIBLE_IOCTL(NCP_IOC_SET_SIGN_WANTED) |
COMPATIBLE_IOCTL(NCP_IOC_LOCKUNLOCK) |
COMPATIBLE_IOCTL(NCP_IOC_GETROOT) |
COMPATIBLE_IOCTL(NCP_IOC_SETROOT) |
COMPATIBLE_IOCTL(NCP_IOC_GETCHARSETS) |
COMPATIBLE_IOCTL(NCP_IOC_SETCHARSETS) |
COMPATIBLE_IOCTL(NCP_IOC_GETDENTRYTTL) |
COMPATIBLE_IOCTL(NCP_IOC_SETDENTRYTTL) |
#if defined(CONFIG_ATM) || defined(CONFIG_ATM_MODULE) |
/* Little a */ |
COMPATIBLE_IOCTL(ATMSIGD_CTRL) |
COMPATIBLE_IOCTL(ATMARPD_CTRL) |
COMPATIBLE_IOCTL(ATMLEC_CTRL) |
COMPATIBLE_IOCTL(ATMLEC_MCAST) |
COMPATIBLE_IOCTL(ATMLEC_DATA) |
COMPATIBLE_IOCTL(ATM_SETSC) |
COMPATIBLE_IOCTL(SIOCSIFATMTCP) |
COMPATIBLE_IOCTL(SIOCMKCLIP) |
COMPATIBLE_IOCTL(ATMARP_MKIP) |
COMPATIBLE_IOCTL(ATMARP_SETENTRY) |
COMPATIBLE_IOCTL(ATMARP_ENCAP) |
COMPATIBLE_IOCTL(ATMTCP_CREATE) |
COMPATIBLE_IOCTL(ATMTCP_REMOVE) |
COMPATIBLE_IOCTL(ATMMPC_CTRL) |
COMPATIBLE_IOCTL(ATMMPC_DATA) |
#endif |
/* Big W */ |
/* WIOC_GETSUPPORT not yet implemented -E */ |
COMPATIBLE_IOCTL(WDIOC_GETSTATUS) |
COMPATIBLE_IOCTL(WDIOC_GETBOOTSTATUS) |
COMPATIBLE_IOCTL(WDIOC_GETTEMP) |
COMPATIBLE_IOCTL(WDIOC_SETOPTIONS) |
COMPATIBLE_IOCTL(WDIOC_KEEPALIVE) |
/* Big R */ |
COMPATIBLE_IOCTL(RNDGETENTCNT) |
COMPATIBLE_IOCTL(RNDADDTOENTCNT) |
COMPATIBLE_IOCTL(RNDGETPOOL) |
COMPATIBLE_IOCTL(RNDADDENTROPY) |
COMPATIBLE_IOCTL(RNDZAPENTCNT) |
COMPATIBLE_IOCTL(RNDCLEARPOOL) |
#if defined(CONFIG_BT) || defined(CONFIG_BT_MODULE) |
/* Bluetooth ioctls */ |
COMPATIBLE_IOCTL(HCIDEVUP) |
COMPATIBLE_IOCTL(HCIDEVDOWN) |
COMPATIBLE_IOCTL(HCIDEVRESET) |
COMPATIBLE_IOCTL(HCIDEVRESTAT) |
COMPATIBLE_IOCTL(HCIGETDEVLIST) |
COMPATIBLE_IOCTL(HCIGETDEVINFO) |
COMPATIBLE_IOCTL(HCIGETCONNLIST) |
COMPATIBLE_IOCTL(HCIGETCONNINFO) |
COMPATIBLE_IOCTL(HCISETRAW) |
COMPATIBLE_IOCTL(HCISETSCAN) |
COMPATIBLE_IOCTL(HCISETAUTH) |
COMPATIBLE_IOCTL(HCISETENCRYPT) |
COMPATIBLE_IOCTL(HCISETPTYPE) |
COMPATIBLE_IOCTL(HCISETLINKPOL) |
COMPATIBLE_IOCTL(HCISETLINKMODE) |
COMPATIBLE_IOCTL(HCISETACLMTU) |
COMPATIBLE_IOCTL(HCISETSCOMTU) |
COMPATIBLE_IOCTL(HCIINQUIRY) |
COMPATIBLE_IOCTL(HCIUARTSETPROTO) |
COMPATIBLE_IOCTL(HCIUARTGETPROTO) |
COMPATIBLE_IOCTL(RFCOMMCREATEDEV) |
COMPATIBLE_IOCTL(RFCOMMRELEASEDEV) |
COMPATIBLE_IOCTL(RFCOMMGETDEVLIST) |
COMPATIBLE_IOCTL(RFCOMMGETDEVINFO) |
COMPATIBLE_IOCTL(RFCOMMSTEALDLC) |
COMPATIBLE_IOCTL(BNEPCONNADD) |
COMPATIBLE_IOCTL(BNEPCONNDEL) |
COMPATIBLE_IOCTL(BNEPGETCONNLIST) |
COMPATIBLE_IOCTL(BNEPGETCONNINFO) |
#endif |
#ifdef CONFIG_PCI |
/* Misc. */ |
COMPATIBLE_IOCTL(0x41545900) /* ATYIO_CLKR */ |
COMPATIBLE_IOCTL(0x41545901) /* ATYIO_CLKW */ |
COMPATIBLE_IOCTL(PCIIOC_CONTROLLER) |
COMPATIBLE_IOCTL(PCIIOC_MMAP_IS_IO) |
COMPATIBLE_IOCTL(PCIIOC_MMAP_IS_MEM) |
COMPATIBLE_IOCTL(PCIIOC_WRITE_COMBINE) |
#endif |
#if defined(CONFIG_USB) || defined(CONFIG_USB_MODULE) |
/* USB */ |
COMPATIBLE_IOCTL(USBDEVFS_RESETEP) |
COMPATIBLE_IOCTL(USBDEVFS_SETINTERFACE) |
COMPATIBLE_IOCTL(USBDEVFS_SETCONFIGURATION) |
COMPATIBLE_IOCTL(USBDEVFS_GETDRIVER) |
COMPATIBLE_IOCTL(USBDEVFS_DISCARDURB) |
COMPATIBLE_IOCTL(USBDEVFS_CLAIMINTERFACE) |
COMPATIBLE_IOCTL(USBDEVFS_RELEASEINTERFACE) |
COMPATIBLE_IOCTL(USBDEVFS_CONNECTINFO) |
COMPATIBLE_IOCTL(USBDEVFS_HUB_PORTINFO) |
COMPATIBLE_IOCTL(USBDEVFS_RESET) |
COMPATIBLE_IOCTL(USBDEVFS_CLEAR_HALT) |
#endif |
#if defined(CONFIG_MTD) || defined(CONFIG_MTD_MODULE) |
/* MTD */ |
COMPATIBLE_IOCTL(MEMGETINFO) |
COMPATIBLE_IOCTL(MEMERASE) |
COMPATIBLE_IOCTL(MEMLOCK) |
COMPATIBLE_IOCTL(MEMUNLOCK) |
COMPATIBLE_IOCTL(MEMGETREGIONCOUNT) |
COMPATIBLE_IOCTL(MEMGETREGIONINFO) |
#endif |
/* NBD */ |
COMPATIBLE_IOCTL(NBD_SET_SOCK) |
COMPATIBLE_IOCTL(NBD_SET_BLKSIZE) |
COMPATIBLE_IOCTL(NBD_SET_SIZE) |
COMPATIBLE_IOCTL(NBD_DO_IT) |
COMPATIBLE_IOCTL(NBD_CLEAR_SOCK) |
COMPATIBLE_IOCTL(NBD_CLEAR_QUE) |
COMPATIBLE_IOCTL(NBD_PRINT_DEBUG) |
COMPATIBLE_IOCTL(NBD_SET_SIZE_BLOCKS) |
COMPATIBLE_IOCTL(NBD_DISCONNECT) |
/shark/trunk/drivers/linuxc26/include/linux/sc26198.h |
---|
0,0 → 1,533 |
/*****************************************************************************/ |
/* |
* sc26198.h -- SC26198 UART hardware info. |
* |
* Copyright (C) 1995-1998 Stallion Technologies (support@stallion.oz.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. |
* |
* 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 _SC26198_H |
#define _SC26198_H |
/*****************************************************************************/ |
/* |
* Define the number of async ports per sc26198 uart device. |
*/ |
#define SC26198_PORTS 8 |
/* |
* Baud rate timing clocks. All derived from a master 14.7456 MHz clock. |
*/ |
#define SC26198_MASTERCLOCK 14745600L |
#define SC26198_DCLK (SC26198_MASTERCLOCK) |
#define SC26198_CCLK (SC26198_MASTERCLOCK / 2) |
#define SC26198_BCLK (SC26198_MASTERCLOCK / 4) |
/* |
* Define internal FIFO sizes for the 26198 ports. |
*/ |
#define SC26198_TXFIFOSIZE 16 |
#define SC26198_RXFIFOSIZE 16 |
/*****************************************************************************/ |
/* |
* Global register definitions. These registers are global to each 26198 |
* device, not specific ports on it. |
*/ |
#define TSTR 0x0d |
#define GCCR 0x0f |
#define ICR 0x1b |
#define WDTRCR 0x1d |
#define IVR 0x1f |
#define BRGTRUA 0x84 |
#define GPOSR 0x87 |
#define GPOC 0x8b |
#define UCIR 0x8c |
#define CIR 0x8c |
#define BRGTRUB 0x8d |
#define GRXFIFO 0x8e |
#define GTXFIFO 0x8e |
#define GCCR2 0x8f |
#define BRGTRLA 0x94 |
#define GPOR 0x97 |
#define GPOD 0x9b |
#define BRGTCR 0x9c |
#define GICR 0x9c |
#define BRGTRLB 0x9d |
#define GIBCR 0x9d |
#define GITR 0x9f |
/* |
* Per port channel registers. These are the register offsets within |
* the port address space, so need to have the port address (0 to 7) |
* inserted in bit positions 4:6. |
*/ |
#define MR0 0x00 |
#define MR1 0x01 |
#define IOPCR 0x02 |
#define BCRBRK 0x03 |
#define BCRCOS 0x04 |
#define BCRX 0x06 |
#define BCRA 0x07 |
#define XONCR 0x08 |
#define XOFFCR 0x09 |
#define ARCR 0x0a |
#define RXCSR 0x0c |
#define TXCSR 0x0e |
#define MR2 0x80 |
#define SR 0x81 |
#define SCCR 0x81 |
#define ISR 0x82 |
#define IMR 0x82 |
#define TXFIFO 0x83 |
#define RXFIFO 0x83 |
#define IPR 0x84 |
#define IOPIOR 0x85 |
#define XISR 0x86 |
/* |
* For any given port calculate the address to use to access a specified |
* register. This is only used for unusual access, mostly this is done |
* through the assembler access routines. |
*/ |
#define SC26198_PORTREG(port,reg) ((((port) & 0x07) << 4) | (reg)) |
/*****************************************************************************/ |
/* |
* Global configuration control register bit definitions. |
*/ |
#define GCCR_NOACK 0x00 |
#define GCCR_IVRACK 0x02 |
#define GCCR_IVRCHANACK 0x04 |
#define GCCR_IVRTYPCHANACK 0x06 |
#define GCCR_ASYNCCYCLE 0x00 |
#define GCCR_SYNCCYCLE 0x40 |
/*****************************************************************************/ |
/* |
* Mode register 0 bit definitions. |
*/ |
#define MR0_ADDRNONE 0x00 |
#define MR0_AUTOWAKE 0x01 |
#define MR0_AUTODOZE 0x02 |
#define MR0_AUTOWAKEDOZE 0x03 |
#define MR0_SWFNONE 0x00 |
#define MR0_SWFTX 0x04 |
#define MR0_SWFRX 0x08 |
#define MR0_SWFRXTX 0x0c |
#define MR0_TXMASK 0x30 |
#define MR0_TXEMPTY 0x00 |
#define MR0_TXHIGH 0x10 |
#define MR0_TXHALF 0x20 |
#define MR0_TXRDY 0x00 |
#define MR0_ADDRNT 0x00 |
#define MR0_ADDRT 0x40 |
#define MR0_SWFNT 0x00 |
#define MR0_SWFT 0x80 |
/* |
* Mode register 1 bit definitions. |
*/ |
#define MR1_CS5 0x00 |
#define MR1_CS6 0x01 |
#define MR1_CS7 0x02 |
#define MR1_CS8 0x03 |
#define MR1_PAREVEN 0x00 |
#define MR1_PARODD 0x04 |
#define MR1_PARENB 0x00 |
#define MR1_PARFORCE 0x08 |
#define MR1_PARNONE 0x10 |
#define MR1_PARSPECIAL 0x18 |
#define MR1_ERRCHAR 0x00 |
#define MR1_ERRBLOCK 0x20 |
#define MR1_ISRUNMASKED 0x00 |
#define MR1_ISRMASKED 0x40 |
#define MR1_AUTORTS 0x80 |
/* |
* Mode register 2 bit definitions. |
*/ |
#define MR2_STOP1 0x00 |
#define MR2_STOP15 0x01 |
#define MR2_STOP2 0x02 |
#define MR2_STOP916 0x03 |
#define MR2_RXFIFORDY 0x00 |
#define MR2_RXFIFOHALF 0x04 |
#define MR2_RXFIFOHIGH 0x08 |
#define MR2_RXFIFOFULL 0x0c |
#define MR2_AUTOCTS 0x10 |
#define MR2_TXRTS 0x20 |
#define MR2_MODENORM 0x00 |
#define MR2_MODEAUTOECHO 0x40 |
#define MR2_MODELOOP 0x80 |
#define MR2_MODEREMECHO 0xc0 |
/*****************************************************************************/ |
/* |
* Baud Rate Generator (BRG) selector values. |
*/ |
#define BRG_50 0x00 |
#define BRG_75 0x01 |
#define BRG_150 0x02 |
#define BRG_200 0x03 |
#define BRG_300 0x04 |
#define BRG_450 0x05 |
#define BRG_600 0x06 |
#define BRG_900 0x07 |
#define BRG_1200 0x08 |
#define BRG_1800 0x09 |
#define BRG_2400 0x0a |
#define BRG_3600 0x0b |
#define BRG_4800 0x0c |
#define BRG_7200 0x0d |
#define BRG_9600 0x0e |
#define BRG_14400 0x0f |
#define BRG_19200 0x10 |
#define BRG_28200 0x11 |
#define BRG_38400 0x12 |
#define BRG_57600 0x13 |
#define BRG_115200 0x14 |
#define BRG_230400 0x15 |
#define BRG_GIN0 0x16 |
#define BRG_GIN1 0x17 |
#define BRG_CT0 0x18 |
#define BRG_CT1 0x19 |
#define BRG_RX2TX316 0x1b |
#define BRG_RX2TX31 0x1c |
#define SC26198_MAXBAUD 921600 |
/*****************************************************************************/ |
/* |
* Command register command definitions. |
*/ |
#define CR_NULL 0x04 |
#define CR_ADDRNORMAL 0x0c |
#define CR_RXRESET 0x14 |
#define CR_TXRESET 0x1c |
#define CR_CLEARRXERR 0x24 |
#define CR_BREAKRESET 0x2c |
#define CR_TXSTARTBREAK 0x34 |
#define CR_TXSTOPBREAK 0x3c |
#define CR_RTSON 0x44 |
#define CR_RTSOFF 0x4c |
#define CR_ADDRINIT 0x5c |
#define CR_RXERRBLOCK 0x6c |
#define CR_TXSENDXON 0x84 |
#define CR_TXSENDXOFF 0x8c |
#define CR_GANGXONSET 0x94 |
#define CR_GANGXOFFSET 0x9c |
#define CR_GANGXONINIT 0xa4 |
#define CR_GANGXOFFINIT 0xac |
#define CR_HOSTXON 0xb4 |
#define CR_HOSTXOFF 0xbc |
#define CR_CANCELXOFF 0xc4 |
#define CR_ADDRRESET 0xdc |
#define CR_RESETALLPORTS 0xf4 |
#define CR_RESETALL 0xfc |
#define CR_RXENABLE 0x01 |
#define CR_TXENABLE 0x02 |
/*****************************************************************************/ |
/* |
* Channel status register. |
*/ |
#define SR_RXRDY 0x01 |
#define SR_RXFULL 0x02 |
#define SR_TXRDY 0x04 |
#define SR_TXEMPTY 0x08 |
#define SR_RXOVERRUN 0x10 |
#define SR_RXPARITY 0x20 |
#define SR_RXFRAMING 0x40 |
#define SR_RXBREAK 0x80 |
#define SR_RXERRS (SR_RXPARITY | SR_RXFRAMING | SR_RXOVERRUN) |
/*****************************************************************************/ |
/* |
* Interrupt status register and interrupt mask register bit definitions. |
*/ |
#define IR_TXRDY 0x01 |
#define IR_RXRDY 0x02 |
#define IR_RXBREAK 0x04 |
#define IR_XONXOFF 0x10 |
#define IR_ADDRRECOG 0x20 |
#define IR_RXWATCHDOG 0x40 |
#define IR_IOPORT 0x80 |
/*****************************************************************************/ |
/* |
* Interrupt vector register field definitions. |
*/ |
#define IVR_CHANMASK 0x07 |
#define IVR_TYPEMASK 0x18 |
#define IVR_CONSTMASK 0xc0 |
#define IVR_RXDATA 0x10 |
#define IVR_RXBADDATA 0x18 |
#define IVR_TXDATA 0x08 |
#define IVR_OTHER 0x00 |
/*****************************************************************************/ |
/* |
* BRG timer control register bit definitions. |
*/ |
#define BRGCTCR_DISABCLK0 0x00 |
#define BRGCTCR_ENABCLK0 0x08 |
#define BRGCTCR_DISABCLK1 0x00 |
#define BRGCTCR_ENABCLK1 0x80 |
#define BRGCTCR_0SCLK16 0x00 |
#define BRGCTCR_0SCLK32 0x01 |
#define BRGCTCR_0SCLK64 0x02 |
#define BRGCTCR_0SCLK128 0x03 |
#define BRGCTCR_0X1 0x04 |
#define BRGCTCR_0X12 0x05 |
#define BRGCTCR_0IO1A 0x06 |
#define BRGCTCR_0GIN0 0x07 |
#define BRGCTCR_1SCLK16 0x00 |
#define BRGCTCR_1SCLK32 0x10 |
#define BRGCTCR_1SCLK64 0x20 |
#define BRGCTCR_1SCLK128 0x30 |
#define BRGCTCR_1X1 0x40 |
#define BRGCTCR_1X12 0x50 |
#define BRGCTCR_1IO1B 0x60 |
#define BRGCTCR_1GIN1 0x70 |
/*****************************************************************************/ |
/* |
* Watch dog timer enable register. |
*/ |
#define WDTRCR_ENABALL 0xff |
/*****************************************************************************/ |
/* |
* XON/XOFF interrupt status register. |
*/ |
#define XISR_TXCHARMASK 0x03 |
#define XISR_TXCHARNORMAL 0x00 |
#define XISR_TXWAIT 0x01 |
#define XISR_TXXOFFPEND 0x02 |
#define XISR_TXXONPEND 0x03 |
#define XISR_TXFLOWMASK 0x0c |
#define XISR_TXNORMAL 0x00 |
#define XISR_TXSTOPPEND 0x04 |
#define XISR_TXSTARTED 0x08 |
#define XISR_TXSTOPPED 0x0c |
#define XISR_RXFLOWMASK 0x30 |
#define XISR_RXFLOWNONE 0x00 |
#define XISR_RXXONSENT 0x10 |
#define XISR_RXXOFFSENT 0x20 |
#define XISR_RXXONGOT 0x40 |
#define XISR_RXXOFFGOT 0x80 |
/*****************************************************************************/ |
/* |
* Current interrupt register. |
*/ |
#define CIR_TYPEMASK 0xc0 |
#define CIR_TYPEOTHER 0x00 |
#define CIR_TYPETX 0x40 |
#define CIR_TYPERXGOOD 0x80 |
#define CIR_TYPERXBAD 0xc0 |
#define CIR_RXDATA 0x80 |
#define CIR_RXBADDATA 0x40 |
#define CIR_TXDATA 0x40 |
#define CIR_CHANMASK 0x07 |
#define CIR_CNTMASK 0x38 |
#define CIR_SUBTYPEMASK 0x38 |
#define CIR_SUBNONE 0x00 |
#define CIR_SUBCOS 0x08 |
#define CIR_SUBADDR 0x10 |
#define CIR_SUBXONXOFF 0x18 |
#define CIR_SUBBREAK 0x28 |
/*****************************************************************************/ |
/* |
* Global interrupting channel register. |
*/ |
#define GICR_CHANMASK 0x07 |
/*****************************************************************************/ |
/* |
* Global interrupting byte count register. |
*/ |
#define GICR_COUNTMASK 0x0f |
/*****************************************************************************/ |
/* |
* Global interrupting type register. |
*/ |
#define GITR_RXMASK 0xc0 |
#define GITR_RXNONE 0x00 |
#define GITR_RXBADDATA 0x80 |
#define GITR_RXGOODDATA 0xc0 |
#define GITR_TXDATA 0x20 |
#define GITR_SUBTYPEMASK 0x07 |
#define GITR_SUBNONE 0x00 |
#define GITR_SUBCOS 0x01 |
#define GITR_SUBADDR 0x02 |
#define GITR_SUBXONXOFF 0x03 |
#define GITR_SUBBREAK 0x05 |
/*****************************************************************************/ |
/* |
* Input port change register. |
*/ |
#define IPR_CTS 0x01 |
#define IPR_DTR 0x02 |
#define IPR_RTS 0x04 |
#define IPR_DCD 0x08 |
#define IPR_CTSCHANGE 0x10 |
#define IPR_DTRCHANGE 0x20 |
#define IPR_RTSCHANGE 0x40 |
#define IPR_DCDCHANGE 0x80 |
#define IPR_CHANGEMASK 0xf0 |
/*****************************************************************************/ |
/* |
* IO port interrupt and output register. |
*/ |
#define IOPR_CTS 0x01 |
#define IOPR_DTR 0x02 |
#define IOPR_RTS 0x04 |
#define IOPR_DCD 0x08 |
#define IOPR_CTSCOS 0x10 |
#define IOPR_DTRCOS 0x20 |
#define IOPR_RTSCOS 0x40 |
#define IOPR_DCDCOS 0x80 |
/*****************************************************************************/ |
/* |
* IO port configuration register. |
*/ |
#define IOPCR_SETCTS 0x00 |
#define IOPCR_SETDTR 0x04 |
#define IOPCR_SETRTS 0x10 |
#define IOPCR_SETDCD 0x00 |
#define IOPCR_SETSIGS (IOPCR_SETRTS | IOPCR_SETRTS | IOPCR_SETDTR | IOPCR_SETDCD) |
/*****************************************************************************/ |
/* |
* General purpose output select register. |
*/ |
#define GPORS_TXC1XA 0x08 |
#define GPORS_TXC16XA 0x09 |
#define GPORS_RXC16XA 0x0a |
#define GPORS_TXC16XB 0x0b |
#define GPORS_GPOR3 0x0c |
#define GPORS_GPOR2 0x0d |
#define GPORS_GPOR1 0x0e |
#define GPORS_GPOR0 0x0f |
/*****************************************************************************/ |
/* |
* General purpose output register. |
*/ |
#define GPOR_0 0x01 |
#define GPOR_1 0x02 |
#define GPOR_2 0x04 |
#define GPOR_3 0x08 |
/*****************************************************************************/ |
/* |
* General purpose output clock register. |
*/ |
#define GPORC_0NONE 0x00 |
#define GPORC_0GIN0 0x01 |
#define GPORC_0GIN1 0x02 |
#define GPORC_0IO3A 0x02 |
#define GPORC_1NONE 0x00 |
#define GPORC_1GIN0 0x04 |
#define GPORC_1GIN1 0x08 |
#define GPORC_1IO3C 0x0c |
#define GPORC_2NONE 0x00 |
#define GPORC_2GIN0 0x10 |
#define GPORC_2GIN1 0x20 |
#define GPORC_2IO3E 0x20 |
#define GPORC_3NONE 0x00 |
#define GPORC_3GIN0 0x40 |
#define GPORC_3GIN1 0x80 |
#define GPORC_3IO3G 0xc0 |
/*****************************************************************************/ |
/* |
* General purpose output data register. |
*/ |
#define GPOD_0MASK 0x03 |
#define GPOD_0SET1 0x00 |
#define GPOD_0SET0 0x01 |
#define GPOD_0SETR0 0x02 |
#define GPOD_0SETIO3B 0x03 |
#define GPOD_1MASK 0x0c |
#define GPOD_1SET1 0x00 |
#define GPOD_1SET0 0x04 |
#define GPOD_1SETR0 0x08 |
#define GPOD_1SETIO3D 0x0c |
#define GPOD_2MASK 0x30 |
#define GPOD_2SET1 0x00 |
#define GPOD_2SET0 0x10 |
#define GPOD_2SETR0 0x20 |
#define GPOD_2SETIO3F 0x30 |
#define GPOD_3MASK 0xc0 |
#define GPOD_3SET1 0x00 |
#define GPOD_3SET0 0x40 |
#define GPOD_3SETR0 0x80 |
#define GPOD_3SETIO3H 0xc0 |
/*****************************************************************************/ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/amifd.h |
---|
0,0 → 1,62 |
#ifndef _AMIFD_H |
#define _AMIFD_H |
/* Definitions for the Amiga floppy driver */ |
#include <linux/fd.h> |
#define FD_MAX_UNITS 4 /* Max. Number of drives */ |
#define FLOPPY_MAX_SECTORS 22 /* Max. Number of sectors per track */ |
#ifndef ASSEMBLER |
struct fd_data_type { |
char *name; /* description of data type */ |
int sects; /* sectors per track */ |
#ifdef __STDC__ |
int (*read_fkt)(int); |
void (*write_fkt)(int); |
#else |
int (*read_fkt)(); /* read whole track */ |
void (*write_fkt)(); /* write whole track */ |
#endif |
}; |
/* |
** Floppy type descriptions |
*/ |
struct fd_drive_type { |
unsigned long code; /* code returned from drive */ |
char *name; /* description of drive */ |
unsigned int tracks; /* number of tracks */ |
unsigned int heads; /* number of heads */ |
unsigned int read_size; /* raw read size for one track */ |
unsigned int write_size; /* raw write size for one track */ |
unsigned int sect_mult; /* sectors and gap multiplier (HD = 2) */ |
unsigned int precomp1; /* start track for precomp 1 */ |
unsigned int precomp2; /* start track for precomp 2 */ |
unsigned int step_delay; /* time (in ms) for delay after step */ |
unsigned int settle_time; /* time to settle after dir change */ |
unsigned int side_time; /* time needed to change sides */ |
}; |
struct amiga_floppy_struct { |
struct fd_drive_type *type; /* type of floppy for this unit */ |
struct fd_data_type *dtype; /* type of floppy for this unit */ |
int track; /* current track (-1 == unknown) */ |
unsigned char *trackbuf; /* current track (kmaloc()'d */ |
int blocks; /* total # blocks on disk */ |
int changed; /* true when not known */ |
int disk; /* disk in drive (-1 == unknown) */ |
int motor; /* true when motor is at speed */ |
int busy; /* true when drive is active */ |
int dirty; /* true when trackbuf is not on disk */ |
int status; /* current error code for unit */ |
struct gendisk *gendisk; |
}; |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/random.h |
---|
0,0 → 1,78 |
/* |
* include/linux/random.h |
* |
* Include file for the random number generator. |
*/ |
#ifndef _LINUX_RANDOM_H |
#define _LINUX_RANDOM_H |
#include <linux/ioctl.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]; |
}; |
/* Exported functions */ |
#ifdef __KERNEL__ |
extern void rand_initialize_irq(int irq); |
extern void batch_entropy_store(u32 a, u32 b, int num); |
extern void add_keyboard_randomness(unsigned char scancode); |
extern void add_mouse_randomness(__u32 mouse_data); |
extern void add_interrupt_randomness(int irq); |
extern void get_random_bytes(void *buf, int nbytes); |
void generate_random_uuid(unsigned char uuid_out[16]); |
extern __u32 secure_ip_id(__u32 daddr); |
extern __u32 secure_tcp_sequence_number(__u32 saddr, __u32 daddr, |
__u16 sport, __u16 dport); |
extern __u32 secure_tcp_syn_cookie(__u32 saddr, __u32 daddr, |
__u16 sport, __u16 dport, |
__u32 sseq, __u32 count, |
__u32 data); |
extern __u32 check_tcp_syn_cookie(__u32 cookie, __u32 saddr, |
__u32 daddr, __u16 sport, |
__u16 dport, __u32 sseq, |
__u32 count, __u32 maxdiff); |
extern __u32 secure_tcpv6_sequence_number(__u32 *saddr, __u32 *daddr, |
__u16 sport, __u16 dport); |
extern __u32 secure_ipv6_id(__u32 *daddr); |
#ifndef MODULE |
extern struct file_operations random_fops, urandom_fops; |
#endif |
#endif /* __KERNEL___ */ |
#endif /* _LINUX_RANDOM_H */ |
/shark/trunk/drivers/linuxc26/include/linux/elevator.h |
---|
0,0 → 1,117 |
#ifndef _LINUX_ELEVATOR_H |
#define _LINUX_ELEVATOR_H |
typedef int (elevator_merge_fn) (request_queue_t *, struct request **, |
struct bio *); |
typedef void (elevator_merge_req_fn) (request_queue_t *, struct request *, struct request *); |
typedef void (elevator_merged_fn) (request_queue_t *, struct request *); |
typedef struct request *(elevator_next_req_fn) (request_queue_t *); |
typedef void (elevator_add_req_fn) (request_queue_t *, struct request *, int); |
typedef int (elevator_queue_empty_fn) (request_queue_t *); |
typedef void (elevator_remove_req_fn) (request_queue_t *, struct request *); |
typedef void (elevator_requeue_req_fn) (request_queue_t *, struct request *); |
typedef struct request *(elevator_request_list_fn) (request_queue_t *, struct request *); |
typedef void (elevator_completed_req_fn) (request_queue_t *, struct request *); |
typedef int (elevator_may_queue_fn) (request_queue_t *, int); |
typedef int (elevator_set_req_fn) (request_queue_t *, struct request *, int); |
typedef void (elevator_put_req_fn) (request_queue_t *, struct request *); |
typedef int (elevator_init_fn) (request_queue_t *, elevator_t *); |
typedef void (elevator_exit_fn) (request_queue_t *, elevator_t *); |
struct elevator_s |
{ |
elevator_merge_fn *elevator_merge_fn; |
elevator_merged_fn *elevator_merged_fn; |
elevator_merge_req_fn *elevator_merge_req_fn; |
elevator_next_req_fn *elevator_next_req_fn; |
elevator_add_req_fn *elevator_add_req_fn; |
elevator_remove_req_fn *elevator_remove_req_fn; |
elevator_requeue_req_fn *elevator_requeue_req_fn; |
elevator_queue_empty_fn *elevator_queue_empty_fn; |
elevator_completed_req_fn *elevator_completed_req_fn; |
elevator_request_list_fn *elevator_former_req_fn; |
elevator_request_list_fn *elevator_latter_req_fn; |
elevator_set_req_fn *elevator_set_req_fn; |
elevator_put_req_fn *elevator_put_req_fn; |
elevator_may_queue_fn *elevator_may_queue_fn; |
elevator_init_fn *elevator_init_fn; |
elevator_exit_fn *elevator_exit_fn; |
void *elevator_data; |
struct kobject kobj; |
struct kobj_type *elevator_ktype; |
const char *elevator_name; |
}; |
/* |
* block elevator interface |
*/ |
extern void elv_add_request(request_queue_t *, struct request *, int, int); |
extern void __elv_add_request(request_queue_t *, struct request *, int, int); |
extern int elv_merge(request_queue_t *, struct request **, struct bio *); |
extern void elv_merge_requests(request_queue_t *, struct request *, |
struct request *); |
extern void elv_merged_request(request_queue_t *, struct request *); |
extern void elv_remove_request(request_queue_t *, struct request *); |
extern void elv_requeue_request(request_queue_t *, struct request *); |
extern int elv_queue_empty(request_queue_t *); |
extern struct request *elv_next_request(struct request_queue *q); |
extern struct request *elv_former_request(request_queue_t *, struct request *); |
extern struct request *elv_latter_request(request_queue_t *, struct request *); |
extern int elv_register_queue(request_queue_t *q); |
extern void elv_unregister_queue(request_queue_t *q); |
extern int elv_may_queue(request_queue_t *, int); |
extern void elv_completed_request(request_queue_t *, struct request *); |
extern int elv_set_request(request_queue_t *, struct request *, int); |
extern void elv_put_request(request_queue_t *, struct request *); |
/* |
* noop I/O scheduler. always merges, always inserts new request at tail |
*/ |
extern elevator_t elevator_noop; |
/* |
* deadline i/o scheduler. uses request time outs to prevent indefinite |
* starvation |
*/ |
extern elevator_t iosched_deadline; |
/* |
* anticipatory I/O scheduler |
*/ |
extern elevator_t iosched_as; |
extern int elevator_init(request_queue_t *, elevator_t *); |
extern void elevator_exit(request_queue_t *); |
extern inline int elv_rq_merge_ok(struct request *, struct bio *); |
extern inline int elv_try_merge(struct request *, struct bio *); |
extern inline int elv_try_last_merge(request_queue_t *, struct bio *); |
/* |
* Return values from elevator merger |
*/ |
#define ELEVATOR_NO_MERGE 0 |
#define ELEVATOR_FRONT_MERGE 1 |
#define ELEVATOR_BACK_MERGE 2 |
/* |
* Insertion selection |
*/ |
#define ELEVATOR_INSERT_FRONT 1 |
#define ELEVATOR_INSERT_BACK 2 |
#define ELEVATOR_INSERT_SORT 3 |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/if_tunnel.h |
---|
0,0 → 1,29 |
#ifndef _IF_TUNNEL_H_ |
#define _IF_TUNNEL_H_ |
#define SIOCGETTUNNEL (SIOCDEVPRIVATE + 0) |
#define SIOCADDTUNNEL (SIOCDEVPRIVATE + 1) |
#define SIOCDELTUNNEL (SIOCDEVPRIVATE + 2) |
#define SIOCCHGTUNNEL (SIOCDEVPRIVATE + 3) |
#define GRE_CSUM __constant_htons(0x8000) |
#define GRE_ROUTING __constant_htons(0x4000) |
#define GRE_KEY __constant_htons(0x2000) |
#define GRE_SEQ __constant_htons(0x1000) |
#define GRE_STRICT __constant_htons(0x0800) |
#define GRE_REC __constant_htons(0x0700) |
#define GRE_FLAGS __constant_htons(0x00F8) |
#define GRE_VERSION __constant_htons(0x0007) |
struct ip_tunnel_parm |
{ |
char name[IFNAMSIZ]; |
int link; |
__u16 i_flags; |
__u16 o_flags; |
__u32 i_key; |
__u32 o_key; |
struct iphdr iph; |
}; |
#endif /* _IF_TUNNEL_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/agpgart.h |
---|
0,0 → 1,214 |
/* |
* 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 _AGP_H |
#define _AGP_H 1 |
#include <linux/agp_backend.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 AGP_DEVICE "/dev/agpgart" |
#ifndef TRUE |
#define TRUE 1 |
#endif |
#ifndef FALSE |
#define FALSE 0 |
#endif |
#ifndef __KERNEL__ |
#include <linux/types.h> |
#include <asm/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 */ |
off_t 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 { |
off_t pg_start; /* starting page to populate */ |
size_t pg_count; /* number of pages */ |
int prot; /* prot flags for mmap */ |
} agp_segment; |
typedef struct _agp_region { |
pid_t pid; /* pid of process */ |
size_t seg_count; /* number of segments */ |
struct _agp_segment *seg_list; |
} agp_region; |
typedef struct _agp_allocate { |
int key; /* tag of allocation */ |
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 */ |
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; |
#else /* __KERNEL__ */ |
#define AGPGART_MINOR 175 |
struct agp_info { |
struct agp_version version; /* version of the driver */ |
u32 bridge_id; /* bridge vendor/device */ |
u32 agp_mode; /* mode info of bridge */ |
off_t 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 */ |
}; |
struct agp_setup { |
u32 agp_mode; /* mode info of bridge */ |
}; |
/* |
* The "prot" down below needs still a "sleep" flag somehow ... |
*/ |
struct agp_segment { |
off_t pg_start; /* starting page to populate */ |
size_t pg_count; /* number of pages */ |
int prot; /* prot flags for mmap */ |
}; |
struct agp_segment_priv { |
off_t pg_start; |
size_t pg_count; |
pgprot_t prot; |
}; |
struct agp_region { |
pid_t pid; /* pid of process */ |
size_t seg_count; /* number of segments */ |
struct agp_segment *seg_list; |
}; |
struct agp_allocate { |
int key; /* tag of allocation */ |
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) */ |
}; |
struct agp_bind { |
int key; /* tag of allocation */ |
off_t pg_start; /* starting page to populate */ |
}; |
struct agp_unbind { |
int key; /* tag of allocation */ |
u32 priority; /* priority for paging out */ |
}; |
struct agp_client { |
struct agp_client *next; |
struct agp_client *prev; |
pid_t pid; |
int num_segments; |
struct agp_segment_priv **segments; |
}; |
struct agp_controller { |
struct agp_controller *next; |
struct agp_controller *prev; |
pid_t pid; |
int num_clients; |
struct agp_memory *pool; |
struct agp_client *clients; |
}; |
#define AGP_FF_ALLOW_CLIENT 0 |
#define AGP_FF_ALLOW_CONTROLLER 1 |
#define AGP_FF_IS_CLIENT 2 |
#define AGP_FF_IS_CONTROLLER 3 |
#define AGP_FF_IS_VALID 4 |
struct agp_file_private { |
struct agp_file_private *next; |
struct agp_file_private *prev; |
pid_t my_pid; |
long access_flags; /* long req'd for set_bit --RR */ |
}; |
struct agp_front_data { |
struct semaphore agp_mutex; |
struct agp_controller *current_controller; |
struct agp_controller *controllers; |
struct agp_file_private *file_priv_list; |
u8 used_by_controller; |
u8 backend_acquired; |
}; |
#endif /* __KERNEL__ */ |
#endif /* _AGP_H */ |
/shark/trunk/drivers/linuxc26/include/linux/fddidevice.h |
---|
0,0 → 1,40 |
/* |
* 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 FDDI handlers. |
* |
* Version: @(#)fddidevice.h 1.0.0 08/12/96 |
* |
* Author: Lawrence V. Stefani, <stefani@lkg.dec.com> |
* |
* fddidevice.h is based on previous trdevice.h work by |
* Ross Biro, <bir7@leland.Stanford.Edu> |
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> |
* Alan Cox, <gw4pts@gw4pts.ampr.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_FDDIDEVICE_H |
#define _LINUX_FDDIDEVICE_H |
#include <linux/if_fddi.h> |
#ifdef __KERNEL__ |
extern int fddi_header(struct sk_buff *skb, |
struct net_device *dev, |
unsigned short type, |
void *daddr, |
void *saddr, |
unsigned len); |
extern int fddi_rebuild_header(struct sk_buff *skb); |
extern unsigned short fddi_type_trans(struct sk_buff *skb, |
struct net_device *dev); |
extern struct net_device *alloc_fddidev(int sizeof_priv); |
#endif |
#endif /* _LINUX_FDDIDEVICE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/parport.h |
---|
0,0 → 1,574 |
/* $Id: parport.h,v 1.1 2004-01-28 15:26:14 giacomo Exp $ */ |
/* |
* 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 _PARPORT_H_ |
#define _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 */ |
#ifdef __KERNEL__ |
#include <linux/config.h> |
#include <linux/jiffies.h> |
#include <linux/proc_fs.h> |
#include <linux/spinlock.h> |
#include <linux/wait.h> |
#include <asm/system.h> |
#include <asm/ptrace.h> |
#include <asm/semaphore.h> |
#define PARPORT_NEED_GENERIC_OPS |
/* Define this later. */ |
struct parport; |
struct pardevice; |
struct pc_parport_state { |
unsigned int ctr; |
unsigned int ecr; |
}; |
struct ax_parport_state { |
unsigned int ctr; |
unsigned int ecr; |
unsigned int dcsr; |
}; |
/* used by both parport_amiga and parport_mfc3 */ |
struct amiga_parport_state { |
unsigned char data; /* ciaa.prb */ |
unsigned char datadir; /* ciaa.ddrb */ |
unsigned char status; /* ciab.pra & 7 */ |
unsigned char statusdir;/* ciab.ddrb & 7 */ |
}; |
struct parport_state { |
union { |
struct pc_parport_state pc; |
/* ARC has no state. */ |
struct ax_parport_state ax; |
struct amiga_parport_state amiga; |
/* Atari has not state. */ |
void *misc; |
} u; |
}; |
struct parport_operations { |
/* IBM PC-style virtual registers. */ |
void (*write_data)(struct parport *, unsigned char); |
unsigned char (*read_data)(struct parport *); |
void (*write_control)(struct parport *, unsigned char); |
unsigned char (*read_control)(struct parport *); |
unsigned char (*frob_control)(struct parport *, unsigned char mask, |
unsigned char val); |
unsigned char (*read_status)(struct parport *); |
/* IRQs. */ |
void (*enable_irq)(struct parport *); |
void (*disable_irq)(struct parport *); |
/* Data direction. */ |
void (*data_forward) (struct parport *); |
void (*data_reverse) (struct parport *); |
/* For core parport code. */ |
void (*init_state)(struct pardevice *, struct parport_state *); |
void (*save_state)(struct parport *, struct parport_state *); |
void (*restore_state)(struct parport *, struct parport_state *); |
/* Block read/write */ |
size_t (*epp_write_data) (struct parport *port, const void *buf, |
size_t len, int flags); |
size_t (*epp_read_data) (struct parport *port, void *buf, size_t len, |
int flags); |
size_t (*epp_write_addr) (struct parport *port, const void *buf, |
size_t len, int flags); |
size_t (*epp_read_addr) (struct parport *port, void *buf, size_t len, |
int flags); |
size_t (*ecp_write_data) (struct parport *port, const void *buf, |
size_t len, int flags); |
size_t (*ecp_read_data) (struct parport *port, void *buf, size_t len, |
int flags); |
size_t (*ecp_write_addr) (struct parport *port, const void *buf, |
size_t len, int flags); |
size_t (*compat_write_data) (struct parport *port, const void *buf, |
size_t len, int flags); |
size_t (*nibble_read_data) (struct parport *port, void *buf, |
size_t len, int flags); |
size_t (*byte_read_data) (struct parport *port, void *buf, |
size_t len, int flags); |
struct module *owner; |
}; |
struct parport_device_info { |
parport_device_class class; |
const char *class_name; |
const char *mfr; |
const char *model; |
const char *cmdset; |
const char *description; |
}; |
/* Each device can have two callback functions: |
* 1) a preemption function, called by the resource manager to request |
* that the driver relinquish control of the port. The driver should |
* return zero if it agrees to release the port, and nonzero if it |
* refuses. Do not call parport_release() - the kernel will do this |
* implicitly. |
* |
* 2) a wake-up function, called by the resource manager to tell drivers |
* that the port is available to be claimed. If a driver wants to use |
* the port, it should call parport_claim() here. |
*/ |
/* A parallel port device */ |
struct pardevice { |
const char *name; |
struct parport *port; |
int daisy; |
int (*preempt)(void *); |
void (*wakeup)(void *); |
void *private; |
void (*irq_func)(int, void *, struct pt_regs *); |
unsigned int flags; |
struct pardevice *next; |
struct pardevice *prev; |
struct parport_state *state; /* saved status over preemption */ |
wait_queue_head_t wait_q; |
unsigned long int time; |
unsigned long int timeslice; |
volatile long int timeout; |
unsigned long waiting; /* long req'd for set_bit --RR */ |
struct pardevice *waitprev; |
struct pardevice *waitnext; |
void * sysctl_table; |
}; |
/* IEEE1284 information */ |
/* IEEE1284 phases */ |
enum ieee1284_phase { |
IEEE1284_PH_FWD_DATA, |
IEEE1284_PH_FWD_IDLE, |
IEEE1284_PH_TERMINATE, |
IEEE1284_PH_NEGOTIATION, |
IEEE1284_PH_HBUSY_DNA, |
IEEE1284_PH_REV_IDLE, |
IEEE1284_PH_HBUSY_DAVAIL, |
IEEE1284_PH_REV_DATA, |
IEEE1284_PH_ECP_SETUP, |
IEEE1284_PH_ECP_FWD_TO_REV, |
IEEE1284_PH_ECP_REV_TO_FWD, |
IEEE1284_PH_ECP_DIR_UNKNOWN, |
}; |
struct ieee1284_info { |
int mode; |
volatile enum ieee1284_phase phase; |
struct semaphore irq; |
}; |
/* A parallel port */ |
struct parport { |
unsigned long base; /* base address */ |
unsigned long base_hi; /* base address (hi - ECR) */ |
unsigned int size; /* IO extent */ |
const char *name; |
unsigned int modes; |
int irq; /* interrupt (or -1 for none) */ |
int dma; |
int muxport; /* which muxport (if any) this is */ |
int portnum; /* which physical parallel port (not mux) */ |
struct parport *physport; |
/* If this is a non-default mux |
parport, i.e. we're a clone of a real |
physical port, this is a pointer to that |
port. The locking is only done in the |
real port. For a clone port, the |
following structure members are |
meaningless: devices, cad, muxsel, |
waithead, waittail, flags, pdir, |
ieee1284, *_lock. |
It this is a default mux parport, or |
there is no mux involved, this points to |
ourself. */ |
struct pardevice *devices; |
struct pardevice *cad; /* port owner */ |
int daisy; /* currently selected daisy addr */ |
int muxsel; /* currently selected mux port */ |
struct pardevice *waithead; |
struct pardevice *waittail; |
struct parport *next; |
unsigned int flags; |
void *sysctl_table; |
struct parport_device_info probe_info[5]; /* 0-3 + non-IEEE1284.3 */ |
struct ieee1284_info ieee1284; |
struct parport_operations *ops; |
void *private_data; /* for lowlevel driver */ |
int number; /* port index - the `n' in `parportn' */ |
spinlock_t pardevice_lock; |
spinlock_t waitlist_lock; |
rwlock_t cad_lock; |
int spintime; |
atomic_t ref_count; |
}; |
#define DEFAULT_SPIN_TIME 500 /* us */ |
struct parport_driver { |
const char *name; |
void (*attach) (struct parport *); |
void (*detach) (struct parport *); |
struct parport_driver *next; |
}; |
/* parport_register_port registers a new parallel port at the given |
address (if one does not already exist) and returns a pointer to it. |
This entails claiming the I/O region, IRQ and DMA. NULL is returned |
if initialisation fails. */ |
struct parport *parport_register_port(unsigned long base, int irq, int dma, |
struct parport_operations *ops); |
/* Once a registered port is ready for high-level drivers to use, the |
low-level driver that registered it should announce it. This will |
call the high-level drivers' attach() functions (after things like |
determining the IEEE 1284.3 topology of the port and collecting |
DeviceIDs). */ |
void parport_announce_port (struct parport *port); |
/* Unregister a port. */ |
extern void parport_unregister_port(struct parport *port); |
/* parport_enumerate returns a pointer to the linked list of all the |
ports in this machine. DON'T USE THIS. Use |
parport_register_driver instead. */ |
struct parport *parport_enumerate(void); |
/* Register a new high-level driver. */ |
extern int parport_register_driver (struct parport_driver *); |
/* Unregister a high-level driver. */ |
extern void parport_unregister_driver (struct parport_driver *); |
/* If parport_register_driver doesn't fit your needs, perhaps |
* parport_find_xxx does. */ |
extern struct parport *parport_find_number (int); |
extern struct parport *parport_find_base (unsigned long); |
/* Reference counting for ports. */ |
extern struct parport *parport_get_port (struct parport *); |
extern void parport_put_port (struct parport *); |
/* parport_register_device declares that a device is connected to a |
port, and tells the kernel all it needs to know. |
- pf is the preemption function (may be NULL for no callback) |
- kf is the wake-up function (may be NULL for no callback) |
- irq_func is the interrupt handler (may be NULL for no interrupts) |
- handle is a user pointer that gets handed to callback functions. */ |
struct pardevice *parport_register_device(struct parport *port, |
const char *name, |
int (*pf)(void *), void (*kf)(void *), |
void (*irq_func)(int, void *, struct pt_regs *), |
int flags, void *handle); |
/* parport_unregister unlinks a device from the chain. */ |
extern void parport_unregister_device(struct pardevice *dev); |
/* parport_claim tries to gain ownership of the port for a particular |
driver. This may fail (return non-zero) if another driver is busy. |
If this driver has registered an interrupt handler, it will be |
enabled. */ |
extern int parport_claim(struct pardevice *dev); |
/* parport_claim_or_block is the same, but sleeps if the port cannot |
be claimed. Return value is 1 if it slept, 0 normally and -errno |
on error. */ |
extern int parport_claim_or_block(struct pardevice *dev); |
/* parport_release reverses a previous parport_claim. This can never |
fail, though the effects are undefined (except that they are bad) |
if you didn't previously own the port. Once you have released the |
port you should make sure that neither your code nor the hardware |
on the port tries to initiate any communication without first |
re-claiming the port. If you mess with the port state (enabling |
ECP for example) you should clean up before releasing the port. */ |
extern void parport_release(struct pardevice *dev); |
/** |
* parport_yield - relinquish a parallel port temporarily |
* @dev: a device on the parallel port |
* |
* This function relinquishes the port if it would be helpful to other |
* drivers to do so. Afterwards it tries to reclaim the port using |
* parport_claim(), and the return value is the same as for |
* parport_claim(). If it fails, the port is left unclaimed and it is |
* the driver's responsibility to reclaim the port. |
* |
* The parport_yield() and parport_yield_blocking() functions are for |
* marking points in the driver at which other drivers may claim the |
* port and use their devices. Yielding the port is similar to |
* releasing it and reclaiming it, but is more efficient because no |
* action is taken if there are no other devices needing the port. In |
* fact, nothing is done even if there are other devices waiting but |
* the current device is still within its "timeslice". The default |
* timeslice is half a second, but it can be adjusted via the /proc |
* interface. |
**/ |
static __inline__ int parport_yield(struct pardevice *dev) |
{ |
unsigned long int timeslip = (jiffies - dev->time); |
if ((dev->port->waithead == NULL) || (timeslip < dev->timeslice)) |
return 0; |
parport_release(dev); |
return parport_claim(dev); |
} |
/** |
* parport_yield_blocking - relinquish a parallel port temporarily |
* @dev: a device on the parallel port |
* |
* This function relinquishes the port if it would be helpful to other |
* drivers to do so. Afterwards it tries to reclaim the port using |
* parport_claim_or_block(), and the return value is the same as for |
* parport_claim_or_block(). |
**/ |
static __inline__ int parport_yield_blocking(struct pardevice *dev) |
{ |
unsigned long int timeslip = (jiffies - dev->time); |
if ((dev->port->waithead == NULL) || (timeslip < dev->timeslice)) |
return 0; |
parport_release(dev); |
return parport_claim_or_block(dev); |
} |
/* Flags used to identify what a device does. */ |
#define PARPORT_DEV_TRAN 0 /* WARNING !! DEPRECATED !! */ |
#define PARPORT_DEV_LURK (1<<0) /* WARNING !! DEPRECATED !! */ |
#define PARPORT_DEV_EXCL (1<<1) /* Need exclusive access. */ |
#define PARPORT_FLAG_EXCL (1<<1) /* EXCL driver registered. */ |
extern int parport_parse_irqs(int, const char *[], int irqval[]); |
extern int parport_parse_dmas(int, const char *[], int dmaval[]); |
/* IEEE1284 functions */ |
extern void parport_ieee1284_interrupt (int, void *, struct pt_regs *); |
extern int parport_negotiate (struct parport *, int mode); |
extern ssize_t parport_write (struct parport *, const void *buf, size_t len); |
extern ssize_t parport_read (struct parport *, void *buf, size_t len); |
#define PARPORT_INACTIVITY_O_NONBLOCK 1 |
extern long parport_set_timeout (struct pardevice *, long inactivity); |
extern int parport_wait_event (struct parport *, long timeout); |
extern int parport_wait_peripheral (struct parport *port, |
unsigned char mask, |
unsigned char val); |
extern int parport_poll_peripheral (struct parport *port, |
unsigned char mask, |
unsigned char val, |
int usec); |
/* For architectural drivers */ |
extern void parport_ieee1284_wakeup (struct parport *port); |
extern size_t parport_ieee1284_write_compat (struct parport *, |
const void *, size_t, int); |
extern size_t parport_ieee1284_read_nibble (struct parport *, |
void *, size_t, int); |
extern size_t parport_ieee1284_read_byte (struct parport *, |
void *, size_t, int); |
extern size_t parport_ieee1284_ecp_read_data (struct parport *, |
void *, size_t, int); |
extern size_t parport_ieee1284_ecp_write_data (struct parport *, |
const void *, size_t, int); |
extern size_t parport_ieee1284_ecp_write_addr (struct parport *, |
const void *, size_t, int); |
extern size_t parport_ieee1284_epp_write_data (struct parport *, |
const void *, size_t, int); |
extern size_t parport_ieee1284_epp_read_data (struct parport *, |
void *, size_t, int); |
extern size_t parport_ieee1284_epp_write_addr (struct parport *, |
const void *, size_t, int); |
extern size_t parport_ieee1284_epp_read_addr (struct parport *, |
void *, size_t, int); |
/* IEEE1284.3 functions */ |
extern int parport_daisy_init (struct parport *port); |
extern void parport_daisy_fini (struct parport *port); |
extern struct pardevice *parport_open (int devnum, const char *name, |
int (*pf) (void *), |
void (*kf) (void *), |
void (*irqf) (int, void *, |
struct pt_regs *), |
int flags, void *handle); |
extern void parport_close (struct pardevice *dev); |
extern ssize_t parport_device_id (int devnum, char *buffer, size_t len); |
extern int parport_device_num (int parport, int mux, int daisy); |
extern int parport_device_coords (int devnum, int *parport, int *mux, |
int *daisy); |
extern void parport_daisy_deselect_all (struct parport *port); |
extern int parport_daisy_select (struct parport *port, int daisy, int mode); |
/* For finding devices based on their device ID. Example usage: |
int devnum = -1; |
while ((devnum = parport_find_class (PARPORT_CLASS_DIGCAM, devnum)) != -1) { |
struct pardevice *dev = parport_open (devnum, ...); |
... |
} |
*/ |
extern int parport_find_device (const char *mfg, const char *mdl, int from); |
extern int parport_find_class (parport_device_class cls, int from); |
/* Lowlevel drivers _can_ call this support function to handle irqs. */ |
static __inline__ void parport_generic_irq(int irq, struct parport *port, |
struct pt_regs *regs) |
{ |
parport_ieee1284_interrupt (irq, port, regs); |
read_lock(&port->cad_lock); |
if (port->cad && port->cad->irq_func) |
port->cad->irq_func(irq, port->cad->private, regs); |
read_unlock(&port->cad_lock); |
} |
/* Prototypes from parport_procfs */ |
extern int parport_proc_register(struct parport *pp); |
extern int parport_proc_unregister(struct parport *pp); |
extern int parport_device_proc_register(struct pardevice *device); |
extern int parport_device_proc_unregister(struct pardevice *device); |
extern int parport_default_proc_register(void); |
extern int parport_default_proc_unregister(void); |
/* If PC hardware is the only type supported, we can optimise a bit. */ |
#if (defined(CONFIG_PARPORT_PC) || defined(CONFIG_PARPORT_PC_MODULE)) && !(defined(CONFIG_PARPORT_ARC) || defined(CONFIG_PARPORT_ARC_MODULE)) && !(defined(CONFIG_PARPORT_AMIGA) || defined(CONFIG_PARPORT_AMIGA_MODULE)) && !(defined(CONFIG_PARPORT_MFC3) || defined(CONFIG_PARPORT_MFC3_MODULE)) && !(defined(CONFIG_PARPORT_ATARI) || defined(CONFIG_PARPORT_ATARI_MODULE)) && !(defined(CONFIG_USB_USS720) || defined(CONFIG_USB_USS720_MODULE)) && !(defined(CONFIG_PARPORT_SUNBPP) || defined(CONFIG_PARPORT_SUNBPP_MODULE)) && !defined(CONFIG_PARPORT_OTHER) |
#undef PARPORT_NEED_GENERIC_OPS |
#include <linux/parport_pc.h> |
#define parport_write_data(p,x) parport_pc_write_data(p,x) |
#define parport_read_data(p) parport_pc_read_data(p) |
#define parport_write_control(p,x) parport_pc_write_control(p,x) |
#define parport_read_control(p) parport_pc_read_control(p) |
#define parport_frob_control(p,m,v) parport_pc_frob_control(p,m,v) |
#define parport_read_status(p) parport_pc_read_status(p) |
#define parport_enable_irq(p) parport_pc_enable_irq(p) |
#define parport_disable_irq(p) parport_pc_disable_irq(p) |
#define parport_data_forward(p) parport_pc_data_forward(p) |
#define parport_data_reverse(p) parport_pc_data_reverse(p) |
#endif |
#ifdef PARPORT_NEED_GENERIC_OPS |
/* Generic operations vector through the dispatch table. */ |
#define parport_write_data(p,x) (p)->ops->write_data(p,x) |
#define parport_read_data(p) (p)->ops->read_data(p) |
#define parport_write_control(p,x) (p)->ops->write_control(p,x) |
#define parport_read_control(p) (p)->ops->read_control(p) |
#define parport_frob_control(p,m,v) (p)->ops->frob_control(p,m,v) |
#define parport_read_status(p) (p)->ops->read_status(p) |
#define parport_enable_irq(p) (p)->ops->enable_irq(p) |
#define parport_disable_irq(p) (p)->ops->disable_irq(p) |
#define parport_data_forward(p) (p)->ops->data_forward(p) |
#define parport_data_reverse(p) (p)->ops->data_reverse(p) |
#endif |
#endif /* __KERNEL__ */ |
#endif /* _PARPORT_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/workqueue.h |
---|
0,0 → 1,77 |
/* |
* workqueue.h --- work queue handling for Linux. |
*/ |
#ifndef _LINUX_WORKQUEUE_H |
#define _LINUX_WORKQUEUE_H |
#include <linux/timer.h> |
#include <linux/linkage.h> |
struct workqueue_struct; |
struct work_struct { |
unsigned long pending; |
struct list_head entry; |
void (*func)(void *); |
void *data; |
void *wq_data; |
struct timer_list timer; |
}; |
#define __WORK_INITIALIZER(n, f, d) { \ |
.entry = { &(n).entry, &(n).entry }, \ |
.func = (f), \ |
.data = (d), \ |
.timer = TIMER_INITIALIZER(NULL, 0, 0), \ |
} |
#define DECLARE_WORK(n, f, d) \ |
struct work_struct n = __WORK_INITIALIZER(n, f, d) |
/* |
* initialize a work-struct's func and data pointers: |
*/ |
#define PREPARE_WORK(_work, _func, _data) \ |
do { \ |
(_work)->func = _func; \ |
(_work)->data = _data; \ |
} while (0) |
/* |
* initialize all of a work-struct: |
*/ |
#define INIT_WORK(_work, _func, _data) \ |
do { \ |
INIT_LIST_HEAD(&(_work)->entry); \ |
(_work)->pending = 0; \ |
PREPARE_WORK((_work), (_func), (_data)); \ |
init_timer(&(_work)->timer); \ |
} while (0) |
extern struct workqueue_struct *create_workqueue(const char *name); |
extern void destroy_workqueue(struct workqueue_struct *wq); |
extern int FASTCALL(queue_work(struct workqueue_struct *wq, struct work_struct *work)); |
extern int FASTCALL(queue_delayed_work(struct workqueue_struct *wq, struct work_struct *work, unsigned long delay)); |
extern void FASTCALL(flush_workqueue(struct workqueue_struct *wq)); |
extern int FASTCALL(schedule_work(struct work_struct *work)); |
extern int FASTCALL(schedule_delayed_work(struct work_struct *work, unsigned long delay)); |
extern void flush_scheduled_work(void); |
extern int current_is_keventd(void); |
extern void init_workqueues(void); |
/* |
* Kill off a pending schedule_delayed_work(). Note that the work callback |
* function may still be running on return from cancel_delayed_work(). Run |
* flush_scheduled_work() to wait on it. |
*/ |
static inline int cancel_delayed_work(struct work_struct *work) |
{ |
return del_timer_sync(&work->timer); |
} |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/isdn_divertif.h |
---|
0,0 → 1,42 |
/* $Id: isdn_divertif.h,v 1.1 2004-01-28 15:25:44 giacomo 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. |
* |
*/ |
/***********************************************************/ |
/* 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 |
/***************************************************************/ |
/* structure exchanging data between isdn hl and divert module */ |
/***************************************************************/ |
typedef struct |
{ ulong if_magic; /* magic info and version */ |
int cmd; /* command */ |
int (*stat_callback)(isdn_ctrl *); /* supplied by divert module when calling */ |
int (*ll_cmd)(isdn_ctrl *); /* supplied by hl on return */ |
char * (*drv_to_name)(int); /* map a driver id to name, supplied by hl */ |
int (*name_to_drv)(char *); /* map a driver id to name, supplied by hl */ |
} isdn_divert_if; |
/*********************/ |
/* function register */ |
/*********************/ |
extern int DIVERT_REG_NAME(isdn_divert_if *); |
/shark/trunk/drivers/linuxc26/include/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 */ |
/shark/trunk/drivers/linuxc26/include/linux/smb_fs_sb.h |
---|
0,0 → 1,103 |
/* |
* smb_fs_sb.h |
* |
* Copyright (C) 1995 by Paal-Kr. Engstad and Volker Lendecke |
* Copyright (C) 1997 by Volker Lendecke |
* |
*/ |
#ifndef _SMB_FS_SB |
#define _SMB_FS_SB |
#ifdef __KERNEL__ |
#include <linux/types.h> |
#include <linux/smb.h> |
/* |
* Upper limit on the total number of active smb_request structs. |
*/ |
#define MAX_REQUEST_HARD 256 |
enum smb_receive_state { |
SMB_RECV_START, /* No data read, looking for length + sig */ |
SMB_RECV_HEADER, /* Reading the header data */ |
SMB_RECV_HCOMPLETE, /* Done with the header */ |
SMB_RECV_PARAM, /* Reading parameter words */ |
SMB_RECV_DATA, /* Reading data bytes */ |
SMB_RECV_END, /* End of request */ |
SMB_RECV_DROP, /* Dropping this SMB */ |
SMB_RECV_REQUEST, /* Received a request and not a reply */ |
}; |
/* structure access macros */ |
#define server_from_inode(inode) SMB_SB((inode)->i_sb) |
#define server_from_dentry(dentry) SMB_SB((dentry)->d_sb) |
#define SB_of(server) ((server)->super_block) |
struct smb_sb_info { |
/* List of all smbfs superblocks */ |
struct list_head entry; |
enum smb_conn_state state; |
struct file * sock_file; |
int conn_error; |
enum smb_receive_state rstate; |
atomic_t nr_requests; |
struct list_head xmitq; |
struct list_head recvq; |
u16 mid; |
struct smb_mount_data_kernel *mnt; |
/* Connections are counted. Each time a new socket arrives, |
* generation is incremented. |
*/ |
unsigned int generation; |
pid_t conn_pid; |
struct smb_conn_opt opt; |
struct semaphore sem; |
unsigned short rcls; /* The error codes we received */ |
unsigned short err; |
unsigned char header[SMB_HEADER_LEN + 20*2 + 2]; |
u32 header_len; |
u32 smb_len; |
u32 smb_read; |
/* We use our own data_ready callback, but need the original one */ |
void *data_ready; |
/* nls pointers for codepage conversions */ |
struct nls_table *remote_nls; |
struct nls_table *local_nls; |
struct smb_ops *ops; |
struct super_block *super_block; |
}; |
static inline int |
smb_lock_server_interruptible(struct smb_sb_info *server) |
{ |
return down_interruptible(&(server->sem)); |
} |
static inline void |
smb_lock_server(struct smb_sb_info *server) |
{ |
down(&(server->sem)); |
} |
static inline void |
smb_unlock_server(struct smb_sb_info *server) |
{ |
up(&(server->sem)); |
} |
#endif /* __KERNEL__ */ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/joystick.h |
---|
0,0 → 1,128 |
#ifndef _LINUX_JOYSTICK_H |
#define _LINUX_JOYSTICK_H |
/* |
* $Id: joystick.h,v 1.1 2004-01-28 15:25:49 giacomo Exp $ |
* |
* 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 |
*/ |
#include <asm/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_MAX]) /* set axis mapping */ |
#define JSIOCGAXMAP _IOR('j', 0x32, __u8[ABS_MAX]) /* get axis mapping */ |
#define JSIOCSBTNMAP _IOW('j', 0x33, __u16[KEY_MAX - BTN_MISC]) /* set button mapping */ |
#define JSIOCGBTNMAP _IOR('j', 0x34, __u16[KEY_MAX - BTN_MISC]) /* 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 { |
int buttons; |
int x; |
int y; |
}; |
struct JS_DATA_SAVE_TYPE { |
int JS_TIMEOUT; |
int BUSY; |
long JS_EXPIRETIME; |
long JS_TIMELIMIT; |
struct JS_DATA_TYPE JS_SAVE; |
struct JS_DATA_TYPE JS_CORR; |
}; |
#endif /* _LINUX_JOYSTICK_H */ |
/shark/trunk/drivers/linuxc26/include/linux/usbdevice_fs.h |
---|
0,0 → 1,183 |
/*****************************************************************************/ |
/* |
* 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 |
* |
* $Id: usbdevice_fs.h,v 1.1 2004-01-28 15:26:57 giacomo Exp $ |
*/ |
/*****************************************************************************/ |
#ifndef _LINUX_USBDEVICE_FS_H |
#define _LINUX_USBDEVICE_FS_H |
#include <linux/types.h> |
/* --------------------------------------------------------------------- */ |
#define USBDEVICE_SUPER_MAGIC 0x9fa2 |
/* 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 *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 1 |
#define USBDEVFS_URB_ISO_ASAP 2 |
#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 error, -1 if none should be sent */ |
void *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 */ |
}; |
#define USBDEVFS_CONTROL _IOWR('U', 0, struct usbdevfs_ctrltransfer) |
#define USBDEVFS_BULK _IOWR('U', 2, struct usbdevfs_bulktransfer) |
#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_DISCARDURB _IO('U', 11) |
#define USBDEVFS_REAPURB _IOW('U', 12, void *) |
#define USBDEVFS_REAPURBNDELAY _IOW('U', 13, void *) |
#define USBDEVFS_DISCSIGNAL _IOR('U', 14, struct usbdevfs_disconnectsignal) |
#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_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) |
/* --------------------------------------------------------------------- */ |
#ifdef __KERNEL__ |
#include <linux/list.h> |
#include <asm/semaphore.h> |
struct dev_state { |
struct list_head list; /* state list */ |
struct rw_semaphore devsem; /* protects modifications to dev (dev == NULL indicating disconnect) */ |
struct usb_device *dev; |
struct file *file; |
spinlock_t lock; /* protects the async urb lists */ |
struct list_head async_pending; |
struct list_head async_completed; |
wait_queue_head_t wait; /* wake up if a request completed */ |
unsigned int discsignr; |
struct task_struct *disctask; |
void *disccontext; |
unsigned long ifclaimed; |
}; |
/* internal methods & data */ |
extern struct usb_driver usbdevfs_driver; |
extern struct file_operations usbdevfs_drivers_fops; |
extern struct file_operations usbdevfs_devices_fops; |
extern struct file_operations usbdevfs_device_file_operations; |
extern struct inode_operations usbdevfs_device_inode_operations; |
extern struct inode_operations usbdevfs_bus_inode_operations; |
extern struct file_operations usbdevfs_bus_file_operations; |
extern void usbdevfs_conn_disc_event(void); |
#endif /* __KERNEL__ */ |
/* --------------------------------------------------------------------- */ |
#endif /* _LINUX_USBDEVICE_FS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/console.h |
---|
0,0 → 1,123 |
/* |
* linux/include/linux/console.h |
* |
* Copyright (C) 1993 Hamish Macdonald |
* |
* 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. |
* |
* Changed: |
* 10-Mar-94: Arno Griffioen: Conversion for vt100 emulator port from PC LINUX |
*/ |
#ifndef _LINUX_CONSOLE_H_ |
#define _LINUX_CONSOLE_H_ 1 |
#include <linux/types.h> |
#include <linux/spinlock.h> |
struct vc_data; |
struct console_font_op; |
/* |
* this is what the terminal answers to a ESC-Z or csi0c query. |
*/ |
#define VT100ID "\033[?1;2c" |
#define VT102ID "\033[?6c" |
struct consw { |
const char *(*con_startup)(void); |
void (*con_init)(struct vc_data *, int); |
void (*con_deinit)(struct vc_data *); |
void (*con_clear)(struct vc_data *, int, int, int, int); |
void (*con_putc)(struct vc_data *, int, int, int); |
void (*con_putcs)(struct vc_data *, const unsigned short *, int, int, int); |
void (*con_cursor)(struct vc_data *, int); |
int (*con_scroll)(struct vc_data *, int, int, int, int); |
void (*con_bmove)(struct vc_data *, int, int, int, int, int, int); |
int (*con_switch)(struct vc_data *); |
int (*con_blank)(struct vc_data *, int); |
int (*con_font_op)(struct vc_data *, struct console_font_op *); |
int (*con_resize)(struct vc_data *, unsigned int, unsigned int); |
int (*con_set_palette)(struct vc_data *, unsigned char *); |
int (*con_scrolldelta)(struct vc_data *, int); |
int (*con_set_origin)(struct vc_data *); |
void (*con_save_screen)(struct vc_data *); |
u8 (*con_build_attr)(struct vc_data *, u8, u8, u8, u8, u8); |
void (*con_invert_region)(struct vc_data *, u16 *, int); |
u16 *(*con_screen_pos)(struct vc_data *, int); |
unsigned long (*con_getxy)(struct vc_data *, unsigned long, int *, int *); |
}; |
extern const struct consw *conswitchp; |
extern const struct consw dummy_con; /* dummy console buffer */ |
extern const struct consw fb_con; /* frame buffer based console */ |
extern const struct consw vga_con; /* VGA text console */ |
extern const struct consw newport_con; /* SGI Newport console */ |
extern const struct consw prom_con; /* SPARC PROM console */ |
void take_over_console(const struct consw *sw, int first, int last, int deflt); |
void give_up_console(const struct consw *sw); |
/* scroll */ |
#define SM_UP (1) |
#define SM_DOWN (2) |
/* cursor */ |
#define CM_DRAW (1) |
#define CM_ERASE (2) |
#define CM_MOVE (3) |
/* |
* Array of consoles built from command line options (console=) |
*/ |
struct console_cmdline |
{ |
char name[8]; /* Name of the driver */ |
int index; /* Minor dev. to use */ |
char *options; /* Options for the driver */ |
}; |
#define MAX_CMDLINECONSOLES 8 |
extern struct console_cmdline console_list[MAX_CMDLINECONSOLES]; |
/* |
* The interface for a console, or any other device that |
* wants to capture console messages (printer driver?) |
*/ |
#define CON_PRINTBUFFER (1) |
#define CON_CONSDEV (2) /* Last on the command line */ |
#define CON_ENABLED (4) |
struct console |
{ |
char name[8]; |
void (*write)(struct console *, const char *, unsigned); |
int (*read)(struct console *, char *, unsigned); |
struct tty_driver *(*device)(struct console *, int *); |
void (*unblank)(void); |
int (*setup)(struct console *, char *); |
short flags; |
short index; |
int cflag; |
void *data; |
struct console *next; |
}; |
extern void register_console(struct console *); |
extern int unregister_console(struct console *); |
extern struct console *console_drivers; |
extern void acquire_console_sem(void); |
extern void release_console_sem(void); |
extern void console_conditional_schedule(void); |
extern void console_unblank(void); |
/* VESA Blanking Levels */ |
#define VESA_NO_BLANKING 0 |
#define VESA_VSYNC_SUSPEND 1 |
#define VESA_HSYNC_SUSPEND 2 |
#define VESA_POWERDOWN 3 |
#endif /* _LINUX_CONSOLE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/b1lli.h |
---|
0,0 → 1,73 |
/* $Id: b1lli.h,v 1.1 2004-01-28 15:24:54 giacomo 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_ */ |
/shark/trunk/drivers/linuxc26/include/linux/init.h |
---|
0,0 → 1,221 |
#ifndef _LINUX_INIT_H |
#define _LINUX_INIT_H |
#include <linux/config.h> |
#include <linux/compiler.h> |
/* These macros are used to mark some functions or |
* initialized data (doesn't apply to uninitialized data) |
* as `initialization' functions. The kernel can take this |
* as hint that the function is used only during the initialization |
* phase and free up used memory resources after |
* |
* Usage: |
* For functions: |
* |
* You should add __init immediately before the function name, like: |
* |
* static void __init initme(int x, int y) |
* { |
* extern int z; z = x * y; |
* } |
* |
* If the function has a prototype somewhere, you can also add |
* __init between closing brace of the prototype and semicolon: |
* |
* extern int initialize_foobar_device(int, int, int) __init; |
* |
* For initialized data: |
* You should insert __initdata between the variable name and equal |
* sign followed by value, e.g.: |
* |
* static int init_variable __initdata = 0; |
* static char linux_logo[] __initdata = { 0x32, 0x36, ... }; |
* |
* Don't forget to initialize data not at file scope, i.e. within a function, |
* as gcc otherwise puts the data into the bss section and not into the init |
* section. |
* |
* Also note, that this data cannot be "const". |
*/ |
/* These are for everybody (although not all archs will actually |
discard it in modules) */ |
#define __init __attribute__ ((__section__ (".init.text"))) |
#define __initdata __attribute__ ((__section__ (".init.data"))) |
#define __exitdata __attribute__ ((__section__(".exit.data"))) |
#define __exit_call __attribute_used__ __attribute__ ((__section__ (".exitcall.exit"))) |
#ifdef MODULE |
#define __exit __attribute__ ((__section__(".exit.text"))) |
#else |
#define __exit __attribute_used__ __attribute__ ((__section__(".exit.text"))) |
#endif |
/* For assembly routines */ |
#define __INIT .section ".init.text","ax" |
#define __FINIT .previous |
#define __INITDATA .section ".init.data","aw" |
#ifndef __ASSEMBLY__ |
/* |
* Used for initialization calls.. |
*/ |
typedef int (*initcall_t)(void); |
typedef void (*exitcall_t)(void); |
extern initcall_t __con_initcall_start, __con_initcall_end; |
extern initcall_t __security_initcall_start, __security_initcall_end; |
#endif |
#ifndef MODULE |
#ifndef __ASSEMBLY__ |
/* initcalls are now grouped by functionality into separate |
* subsections. Ordering inside the subsections is determined |
* by link order. |
* For backwards compatibility, initcall() puts the call in |
* the device init subsection. |
*/ |
#define __define_initcall(level,fn) \ |
static initcall_t __initcall_##fn __attribute_used__ \ |
__attribute__((__section__(".initcall" level ".init"))) = fn |
#define core_initcall(fn) __define_initcall("1",fn) |
#define postcore_initcall(fn) __define_initcall("2",fn) |
#define arch_initcall(fn) __define_initcall("3",fn) |
#define subsys_initcall(fn) __define_initcall("4",fn) |
#define fs_initcall(fn) __define_initcall("5",fn) |
#define device_initcall(fn) __define_initcall("6",fn) |
#define late_initcall(fn) __define_initcall("7",fn) |
#define __initcall(fn) device_initcall(fn) |
#define __exitcall(fn) \ |
static exitcall_t __exitcall_##fn __exit_call = fn |
#define console_initcall(fn) \ |
static initcall_t __initcall_##fn \ |
__attribute_used__ __attribute__((__section__(".con_initcall.init")))=fn |
#define security_initcall(fn) \ |
static initcall_t __initcall_##fn \ |
__attribute_used__ __attribute__((__section__(".security_initcall.init"))) = fn |
struct obs_kernel_param { |
const char *str; |
int (*setup_func)(char *); |
}; |
/* OBSOLETE: see moduleparam.h for the right way. */ |
#define __setup(str, fn) \ |
static char __setup_str_##fn[] __initdata = str; \ |
static struct obs_kernel_param __setup_##fn \ |
__attribute_used__ \ |
__attribute__((__section__(".init.setup"))) \ |
= { __setup_str_##fn, fn } |
#endif /* __ASSEMBLY__ */ |
/** |
* module_init() - driver initialization entry point |
* @x: function to be run at kernel boot time or module insertion |
* |
* module_init() will either be called during do_initcalls (if |
* builtin) or at module insertion time (if a module). There can only |
* be one per module. |
*/ |
#define module_init(x) __initcall(x); |
/** |
* module_exit() - driver exit entry point |
* @x: function to be run when driver is removed |
* |
* module_exit() will wrap the driver clean-up code |
* with cleanup_module() when used with rmmod when |
* the driver is a module. If the driver is statically |
* compiled into the kernel, module_exit() has no effect. |
* There can only be one per module. |
*/ |
#define module_exit(x) __exitcall(x); |
#else /* MODULE */ |
/* Don't use these in modules, but some people do... */ |
#define core_initcall(fn) module_init(fn) |
#define postcore_initcall(fn) module_init(fn) |
#define arch_initcall(fn) module_init(fn) |
#define subsys_initcall(fn) module_init(fn) |
#define fs_initcall(fn) module_init(fn) |
#define device_initcall(fn) module_init(fn) |
#define late_initcall(fn) module_init(fn) |
#define security_initcall(fn) module_init(fn) |
/* These macros create a dummy inline: gcc 2.9x does not count alias |
as usage, hence the `unused function' warning when __init functions |
are declared static. We use the dummy __*_module_inline functions |
both to kill the warning and check the type of the init/cleanup |
function. */ |
/* Each module must use one module_init(), or one no_module_init */ |
#define module_init(initfn) \ |
static inline initcall_t __inittest(void) \ |
{ return initfn; } \ |
int init_module(void) __attribute__((alias(#initfn))); |
/* This is only required if you want to be unloadable. */ |
#define module_exit(exitfn) \ |
static inline exitcall_t __exittest(void) \ |
{ return exitfn; } \ |
void cleanup_module(void) __attribute__((alias(#exitfn))); |
#define __setup(str,func) /* nothing */ |
#endif |
/* Data marked not to be saved by software_suspend() */ |
#define __nosavedata __attribute__ ((__section__ (".data.nosave"))) |
/* This means "can be init if no module support, otherwise module load |
may call it." */ |
#ifdef CONFIG_MODULES |
#define __init_or_module |
#define __initdata_or_module |
#else |
#define __init_or_module __init |
#define __initdata_or_module __initdata |
#endif /*CONFIG_MODULES*/ |
#ifdef CONFIG_HOTPLUG |
#define __devinit |
#define __devinitdata |
#define __devexit |
#define __devexitdata |
#else |
#define __devinit __init |
#define __devinitdata __initdata |
#define __devexit __exit |
#define __devexitdata __exitdata |
#endif |
/* Functions marked as __devexit may be discarded at kernel link time, depending |
on config options. Newer versions of binutils detect references from |
retained sections to discarded sections and flag an error. Pointers to |
__devexit functions must use __devexit_p(function_name), the wrapper will |
insert either the function_name or NULL, depending on the config options. |
*/ |
#if defined(MODULE) || defined(CONFIG_HOTPLUG) |
#define __devexit_p(x) x |
#else |
#define __devexit_p(x) NULL |
#endif |
#ifdef MODULE |
#define __exit_p(x) x |
#else |
#define __exit_p(x) NULL |
#endif |
#endif /* _LINUX_INIT_H */ |
/shark/trunk/drivers/linuxc26/include/linux/mc146818rtc.h |
---|
0,0 → 1,90 |
/* mc146818rtc.h - register definitions for the Real-Time-Clock / CMOS RAM |
* Copyright Torsten Duwe <duwe@informatik.uni-erlangen.de> 1993 |
* derived from Data Sheet, Copyright Motorola 1984 (!). |
* It was written to be part of the Linux operating system. |
*/ |
/* permission is hereby granted to copy, modify and redistribute this code |
* in terms of the GNU Library General Public License, Version 2 or later, |
* at your option. |
*/ |
#ifndef _MC146818RTC_H |
#define _MC146818RTC_H |
#include <asm/io.h> |
#include <linux/rtc.h> /* get the user-level API */ |
#include <linux/spinlock.h> /* spinlock_t */ |
#include <asm/mc146818rtc.h> /* register access macros */ |
extern spinlock_t rtc_lock; /* serialize CMOS RAM access */ |
/********************************************************************** |
* register summary |
**********************************************************************/ |
#define RTC_SECONDS 0 |
#define RTC_SECONDS_ALARM 1 |
#define RTC_MINUTES 2 |
#define RTC_MINUTES_ALARM 3 |
#define RTC_HOURS 4 |
#define RTC_HOURS_ALARM 5 |
/* RTC_*_alarm is always true if 2 MSBs are set */ |
# define RTC_ALARM_DONT_CARE 0xC0 |
#define RTC_DAY_OF_WEEK 6 |
#define RTC_DAY_OF_MONTH 7 |
#define RTC_MONTH 8 |
#define RTC_YEAR 9 |
/* control registers - Moto names |
*/ |
#define RTC_REG_A 10 |
#define RTC_REG_B 11 |
#define RTC_REG_C 12 |
#define RTC_REG_D 13 |
/********************************************************************** |
* register details |
**********************************************************************/ |
#define RTC_FREQ_SELECT RTC_REG_A |
/* update-in-progress - set to "1" 244 microsecs before RTC goes off the bus, |
* reset after update (may take 1.984ms @ 32768Hz RefClock) is complete, |
* totalling to a max high interval of 2.228 ms. |
*/ |
# define RTC_UIP 0x80 |
# define RTC_DIV_CTL 0x70 |
/* divider control: refclock values 4.194 / 1.049 MHz / 32.768 kHz */ |
# define RTC_REF_CLCK_4MHZ 0x00 |
# define RTC_REF_CLCK_1MHZ 0x10 |
# define RTC_REF_CLCK_32KHZ 0x20 |
/* 2 values for divider stage reset, others for "testing purposes only" */ |
# define RTC_DIV_RESET1 0x60 |
# define RTC_DIV_RESET2 0x70 |
/* Periodic intr. / Square wave rate select. 0=none, 1=32.8kHz,... 15=2Hz */ |
# define RTC_RATE_SELECT 0x0F |
/**********************************************************************/ |
#define RTC_CONTROL RTC_REG_B |
# define RTC_SET 0x80 /* disable updates for clock setting */ |
# define RTC_PIE 0x40 /* periodic interrupt enable */ |
# define RTC_AIE 0x20 /* alarm interrupt enable */ |
# define RTC_UIE 0x10 /* update-finished interrupt enable */ |
# define RTC_SQWE 0x08 /* enable square-wave output */ |
# define RTC_DM_BINARY 0x04 /* all time/date values are BCD if clear */ |
# define RTC_24H 0x02 /* 24 hour mode - else hours bit 7 means pm */ |
# define RTC_DST_EN 0x01 /* auto switch DST - works f. USA only */ |
/**********************************************************************/ |
#define RTC_INTR_FLAGS RTC_REG_C |
/* caution - cleared by read */ |
# define RTC_IRQF 0x80 /* any of the following 3 is active */ |
# define RTC_PF 0x40 |
# define RTC_AF 0x20 |
# define RTC_UF 0x10 |
/**********************************************************************/ |
#define RTC_VALID RTC_REG_D |
# define RTC_VRT 0x80 /* valid RAM and time */ |
/**********************************************************************/ |
#endif /* _MC146818RTC_H */ |
/shark/trunk/drivers/linuxc26/include/linux/netdevice.h |
---|
0,0 → 1,916 |
/* |
* 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, <bir7@leland.Stanford.Edu> |
* 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.Cox@linux.org> |
* 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 _LINUX_NETDEVICE_H |
#define _LINUX_NETDEVICE_H |
#include <linux/if.h> |
#include <linux/if_ether.h> |
#include <linux/if_packet.h> |
#include <asm/atomic.h> |
#include <asm/cache.h> |
#include <asm/byteorder.h> |
#ifdef __KERNEL__ |
#include <linux/config.h> |
#include <linux/device.h> |
#include <linux/percpu.h> |
struct divert_blk; |
struct vlan_group; |
struct ethtool_ops; |
/* source back-compat hook */ |
#define SET_ETHTOOL_OPS(netdev,ops) \ |
( (netdev)->ethtool_ops = (ops) ) |
#define HAVE_ALLOC_NETDEV /* feature macro: alloc_xxxdev |
functions are available. */ |
#define HAVE_FREE_NETDEV |
#define NET_XMIT_SUCCESS 0 |
#define NET_XMIT_DROP 1 /* skb dropped */ |
#define NET_XMIT_CN 2 /* congestion notification */ |
#define NET_XMIT_POLICED 3 /* skb is shot by police */ |
#define NET_XMIT_BYPASS 4 /* packet does not leave via dequeue; |
(TC use only - dev_queue_xmit |
returns this as NET_XMIT_SUCCESS) */ |
/* Backlog congestion levels */ |
#define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ |
#define NET_RX_DROP 1 /* packet dropped */ |
#define NET_RX_CN_LOW 2 /* storm alert, just in case */ |
#define NET_RX_CN_MOD 3 /* Storm on its way! */ |
#define NET_RX_CN_HIGH 4 /* The storm is here */ |
#define NET_RX_BAD 5 /* packet dropped due to kernel error */ |
#define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0) |
#endif |
#define MAX_ADDR_LEN 32 /* Largest hardware address length */ |
/* |
* Compute the worst case header length according to the protocols |
* used. |
*/ |
#if !defined(CONFIG_AX25) && !defined(CONFIG_AX25_MODULE) && !defined(CONFIG_TR) |
#define LL_MAX_HEADER 32 |
#else |
#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) |
#define LL_MAX_HEADER 96 |
#else |
#define LL_MAX_HEADER 48 |
#endif |
#endif |
#if !defined(CONFIG_NET_IPIP) && \ |
!defined(CONFIG_IPV6) && !defined(CONFIG_IPV6_MODULE) |
#define MAX_HEADER LL_MAX_HEADER |
#else |
#define MAX_HEADER (LL_MAX_HEADER + 48) |
#endif |
/* |
* Network device statistics. Akin to the 2.0 ether stats but |
* with byte counters. |
*/ |
struct net_device_stats |
{ |
unsigned long rx_packets; /* total packets received */ |
unsigned long tx_packets; /* total packets transmitted */ |
unsigned long rx_bytes; /* total bytes received */ |
unsigned long tx_bytes; /* total bytes transmitted */ |
unsigned long rx_errors; /* bad packets received */ |
unsigned long tx_errors; /* packet transmit problems */ |
unsigned long rx_dropped; /* no space in linux buffers */ |
unsigned long tx_dropped; /* no space available in linux */ |
unsigned long multicast; /* multicast packets received */ |
unsigned long collisions; |
/* detailed rx_errors: */ |
unsigned long rx_length_errors; |
unsigned long rx_over_errors; /* receiver ring buff overflow */ |
unsigned long rx_crc_errors; /* recved pkt with crc error */ |
unsigned long rx_frame_errors; /* recv'd frame alignment error */ |
unsigned long rx_fifo_errors; /* recv'r fifo overrun */ |
unsigned long rx_missed_errors; /* receiver missed packet */ |
/* detailed tx_errors */ |
unsigned long tx_aborted_errors; |
unsigned long tx_carrier_errors; |
unsigned long tx_fifo_errors; |
unsigned long tx_heartbeat_errors; |
unsigned long tx_window_errors; |
/* for cslip etc */ |
unsigned long rx_compressed; |
unsigned long tx_compressed; |
}; |
/* 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 |
}; |
#ifdef __KERNEL__ |
#include <linux/cache.h> |
#include <linux/skbuff.h> |
struct neighbour; |
struct neigh_parms; |
struct sk_buff; |
struct netif_rx_stats |
{ |
unsigned total; |
unsigned dropped; |
unsigned time_squeeze; |
unsigned throttled; |
unsigned fastroute_hit; |
unsigned fastroute_success; |
unsigned fastroute_defer; |
unsigned fastroute_deferred_out; |
unsigned fastroute_latency_reduction; |
unsigned cpu_collision; |
}; |
DECLARE_PER_CPU(struct netif_rx_stats, netdev_rx_stat); |
/* |
* We tag multicasts with these structures. |
*/ |
struct dev_mc_list |
{ |
struct dev_mc_list *next; |
__u8 dmi_addr[MAX_ADDR_LEN]; |
unsigned char dmi_addrlen; |
int dmi_users; |
int dmi_gusers; |
}; |
struct hh_cache |
{ |
struct hh_cache *hh_next; /* Next entry */ |
atomic_t hh_refcnt; /* number of users */ |
unsigned short hh_type; /* protocol identifier, f.e ETH_P_IP |
* NOTE: For VLANs, this will be the |
* encapuslated type. --BLG |
*/ |
int hh_len; /* length of header */ |
int (*hh_output)(struct sk_buff *skb); |
rwlock_t hh_lock; |
/* cached hardware header; allow for machine alignment needs. */ |
#define HH_DATA_MOD 16 |
#define HH_DATA_OFF(__len) \ |
(HH_DATA_MOD - ((__len) & (HH_DATA_MOD - 1))) |
#define HH_DATA_ALIGN(__len) \ |
(((__len)+(HH_DATA_MOD-1))&~(HH_DATA_MOD - 1)) |
unsigned long hh_data[HH_DATA_ALIGN(LL_MAX_HEADER) / sizeof(long)]; |
}; |
/* Reserve HH_DATA_MOD byte aligned hard_header_len, but at least that much. |
* Alternative is: |
* dev->hard_header_len ? (dev->hard_header_len + |
* (HH_DATA_MOD - 1)) & ~(HH_DATA_MOD - 1) : 0 |
* |
* We could use other alignment values, but we must maintain the |
* relationship HH alignment <= LL alignment. |
*/ |
#define LL_RESERVED_SPACE(dev) \ |
(((dev)->hard_header_len&~(HH_DATA_MOD - 1)) + HH_DATA_MOD) |
/* These flag bits are private to the generic network queueing |
* layer, they may not be explicitly referenced by any other |
* code. |
*/ |
enum netdev_state_t |
{ |
__LINK_STATE_XOFF=0, |
__LINK_STATE_START, |
__LINK_STATE_PRESENT, |
__LINK_STATE_SCHED, |
__LINK_STATE_NOCARRIER, |
__LINK_STATE_RX_SCHED, |
__LINK_STATE_LINKWATCH_PENDING |
}; |
/* |
* This structure holds at boot time configured netdevice settings. They |
* are then used in the device probing. |
*/ |
struct netdev_boot_setup { |
char name[IFNAMSIZ]; |
struct ifmap map; |
}; |
#define NETDEV_BOOT_SETUP_MAX 8 |
/* |
* The DEVICE structure. |
* Actually, this whole structure is a big mistake. It mixes I/O |
* data with strictly "high-level" data, and it has to know about |
* almost every data structure used in the INET module. |
* |
* FIXME: cleanup struct net_device such that network protocol info |
* moves out. |
*/ |
struct net_device |
{ |
/* |
* This is the first field of the "visible" part of this structure |
* (i.e. as seen by users in the "Space.c" file). It is the name |
* the interface. |
*/ |
char name[IFNAMSIZ]; |
/* |
* I/O specific fields |
* FIXME: Merge these and struct ifmap into one |
*/ |
unsigned long mem_end; /* shared mem end */ |
unsigned long mem_start; /* shared mem start */ |
unsigned long base_addr; /* device I/O address */ |
unsigned int irq; /* device IRQ number */ |
/* |
* Some hardware also needs these fields, but they are not |
* part of the usual set specified in Space.c. |
*/ |
unsigned char if_port; /* Selectable AUI, TP,..*/ |
unsigned char dma; /* DMA channel */ |
unsigned long state; |
struct net_device *next; |
/* The device initialization function. Called only once. */ |
int (*init)(struct net_device *dev); |
/* ------- Fields preinitialized in Space.c finish here ------- */ |
struct net_device *next_sched; |
/* Interface index. Unique device identifier */ |
int ifindex; |
int iflink; |
struct net_device_stats* (*get_stats)(struct net_device *dev); |
struct iw_statistics* (*get_wireless_stats)(struct net_device *dev); |
/* List of functions to handle Wireless Extensions (instead of ioctl). |
* See <net/iw_handler.h> for details. Jean II */ |
struct iw_handler_def * wireless_handlers; |
struct ethtool_ops *ethtool_ops; |
/* |
* This marks the end of the "visible" part of the structure. All |
* fields hereafter are internal to the system, and may change at |
* will (read: may be cleaned up at will). |
*/ |
/* These may be needed for future network-power-down code. */ |
unsigned long trans_start; /* Time (in jiffies) of last Tx */ |
unsigned long last_rx; /* Time of last Rx */ |
unsigned short flags; /* interface flags (a la BSD) */ |
unsigned short gflags; |
unsigned short priv_flags; /* Like 'flags' but invisible to userspace. */ |
unsigned short unused_alignment_fixer; /* Because we need priv_flags, |
* and we want to be 32-bit aligned. |
*/ |
unsigned mtu; /* interface MTU value */ |
unsigned short type; /* interface hardware type */ |
unsigned short hard_header_len; /* hardware hdr length */ |
void *priv; /* pointer to private data */ |
struct net_device *master; /* Pointer to master device of a group, |
* which this device is member of. |
*/ |
/* Interface address info. */ |
unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ |
unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address */ |
unsigned char addr_len; /* hardware address length */ |
struct dev_mc_list *mc_list; /* Multicast mac addresses */ |
int mc_count; /* Number of installed mcasts */ |
int promiscuity; |
int allmulti; |
int watchdog_timeo; |
struct timer_list watchdog_timer; |
/* Protocol specific pointers */ |
void *atalk_ptr; /* AppleTalk link */ |
void *ip_ptr; /* IPv4 specific data */ |
void *dn_ptr; /* DECnet specific data */ |
void *ip6_ptr; /* IPv6 specific data */ |
void *ec_ptr; /* Econet specific data */ |
void *ax25_ptr; /* AX.25 specific data */ |
struct list_head poll_list; /* Link to poll list */ |
int quota; |
int weight; |
struct Qdisc *qdisc; |
struct Qdisc *qdisc_sleeping; |
struct Qdisc *qdisc_list; |
struct Qdisc *qdisc_ingress; |
unsigned long tx_queue_len; /* Max frames per queue allowed */ |
/* hard_start_xmit synchronizer */ |
spinlock_t xmit_lock; |
/* cpu id of processor entered to hard_start_xmit or -1, |
if nobody entered there. |
*/ |
int xmit_lock_owner; |
/* device queue lock */ |
spinlock_t queue_lock; |
/* Number of references to this device */ |
atomic_t refcnt; |
/* delayed register/unregister */ |
struct list_head todo_list; |
/* register/unregister state machine */ |
enum { NETREG_UNINITIALIZED=0, |
NETREG_REGISTERING, /* called register_netdevice */ |
NETREG_REGISTERED, /* completed register todo */ |
NETREG_UNREGISTERING, /* called unregister_netdevice */ |
NETREG_UNREGISTERED, /* completed unregister todo */ |
NETREG_RELEASED, /* called free_netdev */ |
} reg_state; |
/* Net device features */ |
int features; |
#define NETIF_F_SG 1 /* Scatter/gather IO. */ |
#define NETIF_F_IP_CSUM 2 /* Can checksum only TCP/UDP over IPv4. */ |
#define NETIF_F_NO_CSUM 4 /* Does not require checksum. F.e. loopack. */ |
#define NETIF_F_HW_CSUM 8 /* Can checksum all the packets. */ |
#define NETIF_F_HIGHDMA 32 /* Can DMA to high memory. */ |
#define NETIF_F_FRAGLIST 64 /* Scatter/gather IO. */ |
#define NETIF_F_HW_VLAN_TX 128 /* Transmit VLAN hw acceleration */ |
#define NETIF_F_HW_VLAN_RX 256 /* Receive VLAN hw acceleration */ |
#define NETIF_F_HW_VLAN_FILTER 512 /* Receive filtering on VLAN */ |
#define NETIF_F_VLAN_CHALLENGED 1024 /* Device cannot handle VLAN packets */ |
#define NETIF_F_TSO 2048 /* Can offload TCP/IP segmentation */ |
/* Called after device is detached from network. */ |
void (*uninit)(struct net_device *dev); |
/* Called after last user reference disappears. */ |
void (*destructor)(struct net_device *dev); |
/* Pointers to interface service routines. */ |
int (*open)(struct net_device *dev); |
int (*stop)(struct net_device *dev); |
int (*hard_start_xmit) (struct sk_buff *skb, |
struct net_device *dev); |
#define HAVE_NETDEV_POLL |
int (*poll) (struct net_device *dev, int *quota); |
int (*hard_header) (struct sk_buff *skb, |
struct net_device *dev, |
unsigned short type, |
void *daddr, |
void *saddr, |
unsigned len); |
int (*rebuild_header)(struct sk_buff *skb); |
#define HAVE_MULTICAST |
void (*set_multicast_list)(struct net_device *dev); |
#define HAVE_SET_MAC_ADDR |
int (*set_mac_address)(struct net_device *dev, |
void *addr); |
#define HAVE_PRIVATE_IOCTL |
int (*do_ioctl)(struct net_device *dev, |
struct ifreq *ifr, int cmd); |
#define HAVE_SET_CONFIG |
int (*set_config)(struct net_device *dev, |
struct ifmap *map); |
#define HAVE_HEADER_CACHE |
int (*hard_header_cache)(struct neighbour *neigh, |
struct hh_cache *hh); |
void (*header_cache_update)(struct hh_cache *hh, |
struct net_device *dev, |
unsigned char * haddr); |
#define HAVE_CHANGE_MTU |
int (*change_mtu)(struct net_device *dev, int new_mtu); |
#define HAVE_TX_TIMEOUT |
void (*tx_timeout) (struct net_device *dev); |
void (*vlan_rx_register)(struct net_device *dev, |
struct vlan_group *grp); |
void (*vlan_rx_add_vid)(struct net_device *dev, |
unsigned short vid); |
void (*vlan_rx_kill_vid)(struct net_device *dev, |
unsigned short vid); |
int (*hard_header_parse)(struct sk_buff *skb, |
unsigned char *haddr); |
int (*neigh_setup)(struct net_device *dev, struct neigh_parms *); |
int (*accept_fastpath)(struct net_device *, struct dst_entry*); |
/* bridge stuff */ |
struct net_bridge_port *br_port; |
#ifdef CONFIG_NET_FASTROUTE |
#define NETDEV_FASTROUTE_HMASK 0xF |
/* Semi-private data. Keep it at the end of device struct. */ |
rwlock_t fastpath_lock; |
struct dst_entry *fastpath[NETDEV_FASTROUTE_HMASK+1]; |
#endif |
#ifdef CONFIG_NET_DIVERT |
/* this will get initialized at each interface type init routine */ |
struct divert_blk *divert; |
#endif /* CONFIG_NET_DIVERT */ |
/* class/net/name entry */ |
struct class_device class_dev; |
struct net_device_stats* (*last_stats)(struct net_device *); |
}; |
#define SET_MODULE_OWNER(dev) do { } while (0) |
/* Set the sysfs physical device reference for the network logical device |
* if set prior to registration will cause a symlink during initialization. |
*/ |
#define SET_NETDEV_DEV(net, pdev) ((net)->class_dev.dev = (pdev)) |
struct packet_type { |
unsigned short type; /* This is really htons(ether_type). */ |
struct net_device *dev; /* NULL is wildcarded here */ |
int (*func) (struct sk_buff *, struct net_device *, |
struct packet_type *); |
void *af_packet_priv; |
struct list_head list; |
}; |
#include <linux/interrupt.h> |
#include <linux/notifier.h> |
extern struct net_device loopback_dev; /* The loopback */ |
extern struct net_device *dev_base; /* All devices */ |
extern rwlock_t dev_base_lock; /* Device list lock */ |
extern int netdev_boot_setup_add(char *name, struct ifmap *map); |
extern int netdev_boot_setup_check(struct net_device *dev); |
extern struct net_device *dev_getbyhwaddr(unsigned short type, char *hwaddr); |
extern struct net_device *__dev_getfirstbyhwtype(unsigned short type); |
extern struct net_device *dev_getfirstbyhwtype(unsigned short type); |
extern void dev_add_pack(struct packet_type *pt); |
extern void dev_remove_pack(struct packet_type *pt); |
extern void __dev_remove_pack(struct packet_type *pt); |
extern int __dev_get(const char *name); |
static inline int __deprecated dev_get(const char *name) |
{ |
return __dev_get(name); |
} |
extern struct net_device *dev_get_by_flags(unsigned short flags, |
unsigned short mask); |
extern struct net_device *__dev_get_by_flags(unsigned short flags, |
unsigned short mask); |
extern struct net_device *dev_get_by_name(const char *name); |
extern struct net_device *__dev_get_by_name(const char *name); |
extern struct net_device *__dev_alloc(const char *name, int *err); |
static inline __deprecated struct net_device *dev_alloc(const char *name, int *err) |
{ |
return __dev_alloc(name, err); |
} |
extern int dev_alloc_name(struct net_device *dev, const char *name); |
extern int dev_open(struct net_device *dev); |
extern int dev_close(struct net_device *dev); |
extern int dev_queue_xmit(struct sk_buff *skb); |
extern int register_netdevice(struct net_device *dev); |
extern int unregister_netdevice(struct net_device *dev); |
extern void free_netdev(struct net_device *dev); |
extern void synchronize_net(void); |
extern int register_netdevice_notifier(struct notifier_block *nb); |
extern int unregister_netdevice_notifier(struct notifier_block *nb); |
extern int call_netdevice_notifiers(unsigned long val, void *v); |
extern int dev_new_index(void); |
extern struct net_device *dev_get_by_index(int ifindex); |
extern struct net_device *__dev_get_by_index(int ifindex); |
extern int dev_restart(struct net_device *dev); |
typedef int gifconf_func_t(struct net_device * dev, char * bufptr, int len); |
extern int register_gifconf(unsigned int family, gifconf_func_t * gifconf); |
static inline int unregister_gifconf(unsigned int family) |
{ |
return register_gifconf(family, 0); |
} |
/* |
* Incoming packets are placed on per-cpu queues so that |
* no locking is needed. |
*/ |
struct softnet_data |
{ |
int throttle; |
int cng_level; |
int avg_blog; |
struct sk_buff_head input_pkt_queue; |
struct list_head poll_list; |
struct net_device *output_queue; |
struct sk_buff *completion_queue; |
struct net_device backlog_dev; /* Sorry. 8) */ |
}; |
DECLARE_PER_CPU(struct softnet_data,softnet_data); |
#define HAVE_NETIF_QUEUE |
static inline void __netif_schedule(struct net_device *dev) |
{ |
if (!test_and_set_bit(__LINK_STATE_SCHED, &dev->state)) { |
unsigned long flags; |
struct softnet_data *sd; |
local_irq_save(flags); |
sd = &__get_cpu_var(softnet_data); |
dev->next_sched = sd->output_queue; |
sd->output_queue = dev; |
raise_softirq_irqoff(NET_TX_SOFTIRQ); |
local_irq_restore(flags); |
} |
} |
static inline void netif_schedule(struct net_device *dev) |
{ |
if (!test_bit(__LINK_STATE_XOFF, &dev->state)) |
__netif_schedule(dev); |
} |
static inline void netif_start_queue(struct net_device *dev) |
{ |
clear_bit(__LINK_STATE_XOFF, &dev->state); |
} |
static inline void netif_wake_queue(struct net_device *dev) |
{ |
if (test_and_clear_bit(__LINK_STATE_XOFF, &dev->state)) |
__netif_schedule(dev); |
} |
static inline void netif_stop_queue(struct net_device *dev) |
{ |
set_bit(__LINK_STATE_XOFF, &dev->state); |
} |
static inline int netif_queue_stopped(const struct net_device *dev) |
{ |
return test_bit(__LINK_STATE_XOFF, &dev->state); |
} |
static inline int netif_running(const struct net_device *dev) |
{ |
return test_bit(__LINK_STATE_START, &dev->state); |
} |
/* Use this variant when it is known for sure that it |
* is executing from interrupt context. |
*/ |
static inline void dev_kfree_skb_irq(struct sk_buff *skb) |
{ |
if (atomic_dec_and_test(&skb->users)) { |
struct softnet_data *sd; |
unsigned long flags; |
local_irq_save(flags); |
sd = &__get_cpu_var(softnet_data); |
skb->next = sd->completion_queue; |
sd->completion_queue = skb; |
raise_softirq_irqoff(NET_TX_SOFTIRQ); |
local_irq_restore(flags); |
} |
} |
/* Use this variant in places where it could be invoked |
* either from interrupt or non-interrupt context. |
*/ |
static inline void dev_kfree_skb_any(struct sk_buff *skb) |
{ |
if (in_irq()) |
dev_kfree_skb_irq(skb); |
else |
dev_kfree_skb(skb); |
} |
#define HAVE_NETIF_RX 1 |
extern int netif_rx(struct sk_buff *skb); |
#define HAVE_NETIF_RECEIVE_SKB 1 |
extern int netif_receive_skb(struct sk_buff *skb); |
extern int dev_ioctl(unsigned int cmd, void *); |
extern int dev_ethtool(struct ifreq *); |
extern unsigned dev_get_flags(const struct net_device *); |
extern int dev_change_flags(struct net_device *, unsigned); |
extern int dev_set_mtu(struct net_device *, int); |
extern void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev); |
extern void dev_init(void); |
extern int netdev_nit; |
/* Post buffer to the network code from _non interrupt_ context. |
* see net/core/dev.c for netif_rx description. |
*/ |
static inline int netif_rx_ni(struct sk_buff *skb) |
{ |
int err = netif_rx(skb); |
if (softirq_pending(smp_processor_id())) |
do_softirq(); |
return err; |
} |
/* Called by rtnetlink.c:rtnl_unlock() */ |
extern void netdev_run_todo(void); |
static inline void dev_put(struct net_device *dev) |
{ |
atomic_dec(&dev->refcnt); |
} |
#define __dev_put(dev) atomic_dec(&(dev)->refcnt) |
#define dev_hold(dev) atomic_inc(&(dev)->refcnt) |
/* Carrier loss detection, dial on demand. The functions netif_carrier_on |
* and _off may be called from IRQ context, but it is caller |
* who is responsible for serialization of these calls. |
*/ |
extern void linkwatch_fire_event(struct net_device *dev); |
static inline int netif_carrier_ok(const struct net_device *dev) |
{ |
return !test_bit(__LINK_STATE_NOCARRIER, &dev->state); |
} |
extern void __netdev_watchdog_up(struct net_device *dev); |
static inline void netif_carrier_on(struct net_device *dev) |
{ |
if (test_and_clear_bit(__LINK_STATE_NOCARRIER, &dev->state)) |
linkwatch_fire_event(dev); |
if (netif_running(dev)) |
__netdev_watchdog_up(dev); |
} |
static inline void netif_carrier_off(struct net_device *dev) |
{ |
if (!test_and_set_bit(__LINK_STATE_NOCARRIER, &dev->state)) |
linkwatch_fire_event(dev); |
} |
/* Hot-plugging. */ |
static inline int netif_device_present(struct net_device *dev) |
{ |
return test_bit(__LINK_STATE_PRESENT, &dev->state); |
} |
static inline void netif_device_detach(struct net_device *dev) |
{ |
if (test_and_clear_bit(__LINK_STATE_PRESENT, &dev->state) && |
netif_running(dev)) { |
netif_stop_queue(dev); |
} |
} |
static inline void netif_device_attach(struct net_device *dev) |
{ |
if (!test_and_set_bit(__LINK_STATE_PRESENT, &dev->state) && |
netif_running(dev)) { |
netif_wake_queue(dev); |
__netdev_watchdog_up(dev); |
} |
} |
/* |
* Network interface message level settings |
*/ |
#define HAVE_NETIF_MSG 1 |
enum { |
NETIF_MSG_DRV = 0x0001, |
NETIF_MSG_PROBE = 0x0002, |
NETIF_MSG_LINK = 0x0004, |
NETIF_MSG_TIMER = 0x0008, |
NETIF_MSG_IFDOWN = 0x0010, |
NETIF_MSG_IFUP = 0x0020, |
NETIF_MSG_RX_ERR = 0x0040, |
NETIF_MSG_TX_ERR = 0x0080, |
NETIF_MSG_TX_QUEUED = 0x0100, |
NETIF_MSG_INTR = 0x0200, |
NETIF_MSG_TX_DONE = 0x0400, |
NETIF_MSG_RX_STATUS = 0x0800, |
NETIF_MSG_PKTDATA = 0x1000, |
NETIF_MSG_HW = 0x2000, |
NETIF_MSG_WOL = 0x4000, |
}; |
#define netif_msg_drv(p) ((p)->msg_enable & NETIF_MSG_DRV) |
#define netif_msg_probe(p) ((p)->msg_enable & NETIF_MSG_PROBE) |
#define netif_msg_link(p) ((p)->msg_enable & NETIF_MSG_LINK) |
#define netif_msg_timer(p) ((p)->msg_enable & NETIF_MSG_TIMER) |
#define netif_msg_ifdown(p) ((p)->msg_enable & NETIF_MSG_IFDOWN) |
#define netif_msg_ifup(p) ((p)->msg_enable & NETIF_MSG_IFUP) |
#define netif_msg_rx_err(p) ((p)->msg_enable & NETIF_MSG_RX_ERR) |
#define netif_msg_tx_err(p) ((p)->msg_enable & NETIF_MSG_TX_ERR) |
#define netif_msg_tx_queued(p) ((p)->msg_enable & NETIF_MSG_TX_QUEUED) |
#define netif_msg_intr(p) ((p)->msg_enable & NETIF_MSG_INTR) |
#define netif_msg_tx_done(p) ((p)->msg_enable & NETIF_MSG_TX_DONE) |
#define netif_msg_rx_status(p) ((p)->msg_enable & NETIF_MSG_RX_STATUS) |
#define netif_msg_pktdata(p) ((p)->msg_enable & NETIF_MSG_PKTDATA) |
#define netif_msg_hw(p) ((p)->msg_enable & NETIF_MSG_HW) |
#define netif_msg_wol(p) ((p)->msg_enable & NETIF_MSG_WOL) |
/* Schedule rx intr now? */ |
static inline int netif_rx_schedule_prep(struct net_device *dev) |
{ |
return netif_running(dev) && |
!test_and_set_bit(__LINK_STATE_RX_SCHED, &dev->state); |
} |
/* Add interface to tail of rx poll list. This assumes that _prep has |
* already been called and returned 1. |
*/ |
static inline void __netif_rx_schedule(struct net_device *dev) |
{ |
unsigned long flags; |
local_irq_save(flags); |
dev_hold(dev); |
list_add_tail(&dev->poll_list, &__get_cpu_var(softnet_data).poll_list); |
if (dev->quota < 0) |
dev->quota += dev->weight; |
else |
dev->quota = dev->weight; |
__raise_softirq_irqoff(NET_RX_SOFTIRQ); |
local_irq_restore(flags); |
} |
/* Try to reschedule poll. Called by irq handler. */ |
static inline void netif_rx_schedule(struct net_device *dev) |
{ |
if (netif_rx_schedule_prep(dev)) |
__netif_rx_schedule(dev); |
} |
/* Try to reschedule poll. Called by dev->poll() after netif_rx_complete(). |
* Do not inline this? |
*/ |
static inline int netif_rx_reschedule(struct net_device *dev, int undo) |
{ |
if (netif_rx_schedule_prep(dev)) { |
unsigned long flags; |
dev->quota += undo; |
local_irq_save(flags); |
list_add_tail(&dev->poll_list, &__get_cpu_var(softnet_data).poll_list); |
__raise_softirq_irqoff(NET_RX_SOFTIRQ); |
local_irq_restore(flags); |
return 1; |
} |
return 0; |
} |
/* Remove interface from poll list: it must be in the poll list |
* on current cpu. This primitive is called by dev->poll(), when |
* it completes the work. The device cannot be out of poll list at this |
* moment, it is BUG(). |
*/ |
static inline void netif_rx_complete(struct net_device *dev) |
{ |
unsigned long flags; |
local_irq_save(flags); |
if (!test_bit(__LINK_STATE_RX_SCHED, &dev->state)) BUG(); |
list_del(&dev->poll_list); |
smp_mb__before_clear_bit(); |
clear_bit(__LINK_STATE_RX_SCHED, &dev->state); |
local_irq_restore(flags); |
} |
static inline void netif_poll_disable(struct net_device *dev) |
{ |
while (test_and_set_bit(__LINK_STATE_RX_SCHED, &dev->state)) { |
/* No hurry. */ |
current->state = TASK_INTERRUPTIBLE; |
schedule_timeout(1); |
} |
} |
static inline void netif_poll_enable(struct net_device *dev) |
{ |
clear_bit(__LINK_STATE_RX_SCHED, &dev->state); |
} |
/* same as netif_rx_complete, except that local_irq_save(flags) |
* has already been issued |
*/ |
static inline void __netif_rx_complete(struct net_device *dev) |
{ |
if (!test_bit(__LINK_STATE_RX_SCHED, &dev->state)) BUG(); |
list_del(&dev->poll_list); |
smp_mb__before_clear_bit(); |
clear_bit(__LINK_STATE_RX_SCHED, &dev->state); |
} |
static inline void netif_tx_disable(struct net_device *dev) |
{ |
spin_lock_bh(&dev->xmit_lock); |
netif_stop_queue(dev); |
spin_unlock_bh(&dev->xmit_lock); |
} |
/* These functions live elsewhere (drivers/net/net_init.c, but related) */ |
extern void ether_setup(struct net_device *dev); |
extern void fddi_setup(struct net_device *dev); |
extern void tr_setup(struct net_device *dev); |
extern void fc_setup(struct net_device *dev); |
extern void fc_freedev(struct net_device *dev); |
/* Support for loadable net-drivers */ |
extern struct net_device *alloc_netdev(int sizeof_priv, const char *name, |
void (*setup)(struct net_device *)); |
extern int register_netdev(struct net_device *dev); |
extern void unregister_netdev(struct net_device *dev); |
/* Functions used for multicast support */ |
extern void dev_mc_upload(struct net_device *dev); |
extern int dev_mc_delete(struct net_device *dev, void *addr, int alen, int all); |
extern int dev_mc_add(struct net_device *dev, void *addr, int alen, int newonly); |
extern void dev_mc_discard(struct net_device *dev); |
extern void dev_set_promiscuity(struct net_device *dev, int inc); |
extern void dev_set_allmulti(struct net_device *dev, int inc); |
extern void netdev_state_change(struct net_device *dev); |
/* Load a device via the kmod */ |
extern void dev_load(const char *name); |
extern void dev_mcast_init(void); |
extern int netdev_register_fc(struct net_device *dev, void (*stimul)(struct net_device *dev)); |
extern void netdev_unregister_fc(int bit); |
extern int netdev_max_backlog; |
extern int weight_p; |
extern unsigned long netdev_fc_xoff; |
extern atomic_t netdev_dropping; |
extern int netdev_set_master(struct net_device *dev, struct net_device *master); |
extern struct sk_buff * skb_checksum_help(struct sk_buff *skb); |
#ifdef CONFIG_NET_FASTROUTE |
extern int netdev_fastroute; |
extern int netdev_fastroute_obstacles; |
extern void dev_clear_fastroute(struct net_device *dev); |
#endif |
#ifdef CONFIG_SYSCTL |
extern char *net_sysctl_strdup(const char *s); |
#endif |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_DEV_H */ |
/shark/trunk/drivers/linuxc26/include/linux/poll.h |
---|
0,0 → 1,101 |
#ifndef _LINUX_POLL_H |
#define _LINUX_POLL_H |
#include <asm/poll.h> |
#ifdef __KERNEL__ |
#include <linux/wait.h> |
#include <linux/string.h> |
#include <linux/mm.h> |
#include <asm/uaccess.h> |
struct poll_table_struct; |
/* |
* structures and helpers for f_op->poll implementations |
*/ |
typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *); |
typedef struct poll_table_struct { |
poll_queue_proc qproc; |
} poll_table; |
static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p) |
{ |
if (p && wait_address) |
p->qproc(filp, wait_address, p); |
} |
static inline void init_poll_funcptr(poll_table *pt, poll_queue_proc qproc) |
{ |
pt->qproc = qproc; |
} |
/* |
* Structures and helpers for sys_poll/sys_poll |
*/ |
struct poll_wqueues { |
poll_table pt; |
struct poll_table_page * table; |
int error; |
}; |
extern void poll_initwait(struct poll_wqueues *pwq); |
extern void poll_freewait(struct poll_wqueues *pwq); |
/* |
* Scaleable version of the fd_set. |
*/ |
typedef struct { |
unsigned long *in, *out, *ex; |
unsigned long *res_in, *res_out, *res_ex; |
} fd_set_bits; |
/* |
* How many longwords for "nr" bits? |
*/ |
#define FDS_BITPERLONG (8*sizeof(long)) |
#define FDS_LONGS(nr) (((nr)+FDS_BITPERLONG-1)/FDS_BITPERLONG) |
#define FDS_BYTES(nr) (FDS_LONGS(nr)*sizeof(long)) |
/* |
* We do a VERIFY_WRITE here even though we are only reading this time: |
* we'll write to it eventually.. |
* |
* Use "unsigned long" accesses to let user-mode fd_set's be long-aligned. |
*/ |
static inline |
int get_fd_set(unsigned long nr, void __user *ufdset, unsigned long *fdset) |
{ |
nr = FDS_BYTES(nr); |
if (ufdset) { |
int error; |
error = verify_area(VERIFY_WRITE, ufdset, nr); |
if (!error && __copy_from_user(fdset, ufdset, nr)) |
error = -EFAULT; |
return error; |
} |
memset(fdset, 0, nr); |
return 0; |
} |
static inline |
void set_fd_set(unsigned long nr, void __user *ufdset, unsigned long *fdset) |
{ |
if (ufdset) |
__copy_to_user(ufdset, fdset, FDS_BYTES(nr)); |
} |
static inline |
void zero_fd_set(unsigned long nr, unsigned long *fdset) |
{ |
memset(fdset, 0, FDS_BYTES(nr)); |
} |
extern int do_select(int n, fd_set_bits *fds, long *timeout); |
#endif /* KERNEL */ |
#endif /* _LINUX_POLL_H */ |
/shark/trunk/drivers/linuxc26/include/linux/netfilter_bridge.h |
---|
0,0 → 1,104 |
#ifndef __LINUX_BRIDGE_NETFILTER_H |
#define __LINUX_BRIDGE_NETFILTER_H |
/* bridge-specific defines for netfilter. |
*/ |
#include <linux/config.h> |
#include <linux/netfilter.h> |
#if defined(__KERNEL__) && defined(CONFIG_BRIDGE_NETFILTER) |
#include <asm/atomic.h> |
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) |
#include <linux/if_ether.h> |
#endif |
#endif |
/* 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 |
#ifdef __KERNEL__ |
enum nf_br_hook_priorities { |
NF_BR_PRI_FIRST = INT_MIN, |
NF_BR_PRI_NAT_DST_BRIDGED = -300, |
NF_BR_PRI_FILTER_BRIDGED = -200, |
NF_BR_PRI_BRNF = 0, |
NF_BR_PRI_NAT_DST_OTHER = 100, |
NF_BR_PRI_FILTER_OTHER = 200, |
NF_BR_PRI_NAT_SRC = 300, |
NF_BR_PRI_LAST = INT_MAX, |
}; |
#ifdef CONFIG_BRIDGE_NETFILTER |
#define BRNF_PKT_TYPE 0x01 |
#define BRNF_BRIDGED_DNAT 0x02 |
#define BRNF_DONT_TAKE_PARENT 0x04 |
#define BRNF_BRIDGED 0x08 |
#define BRNF_NF_BRIDGE_PREROUTING 0x10 |
static inline |
struct nf_bridge_info *nf_bridge_alloc(struct sk_buff *skb) |
{ |
struct nf_bridge_info **nf_bridge = &(skb->nf_bridge); |
if ((*nf_bridge = kmalloc(sizeof(**nf_bridge), GFP_ATOMIC)) != NULL) { |
atomic_set(&(*nf_bridge)->use, 1); |
(*nf_bridge)->mask = 0; |
(*nf_bridge)->physindev = (*nf_bridge)->physoutdev = NULL; |
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) |
(*nf_bridge)->netoutdev = NULL; |
#endif |
} |
return *nf_bridge; |
} |
/* Only used in br_forward.c */ |
static inline |
void nf_bridge_maybe_copy_header(struct sk_buff *skb) |
{ |
if (skb->nf_bridge) { |
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) |
if (skb->protocol == __constant_htons(ETH_P_8021Q)) { |
memcpy(skb->data - 18, skb->nf_bridge->hh, 18); |
skb_push(skb, 4); |
} else |
#endif |
memcpy(skb->data - 16, skb->nf_bridge->hh, 16); |
} |
} |
static inline |
void nf_bridge_save_header(struct sk_buff *skb) |
{ |
int header_size = 16; |
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) |
if (skb->protocol == __constant_htons(ETH_P_8021Q)) |
header_size = 18; |
#endif |
memcpy(skb->nf_bridge->hh, skb->data - header_size, header_size); |
} |
struct bridge_skb_cb { |
union { |
__u32 ipv4; |
} daddr; |
}; |
#endif /* CONFIG_BRIDGE_NETFILTER */ |
#endif /* __KERNEL__ */ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/reiserfs_fs.h |
---|
0,0 → 1,2188 |
/* |
* Copyright 1996, 1997, 1998 Hans Reiser, see reiserfs/README for licensing and copyright details |
*/ |
/* this file has an amazingly stupid |
name, yura please fix it to be |
reiserfs.h, and merge all the rest |
of our .h files that are in this |
directory into it. */ |
#ifndef _LINUX_REISER_FS_H |
#define _LINUX_REISER_FS_H |
#include <linux/types.h> |
#ifdef __KERNEL__ |
#include <linux/slab.h> |
#include <linux/interrupt.h> |
#include <linux/workqueue.h> |
#include <asm/unaligned.h> |
#include <linux/bitops.h> |
#include <linux/proc_fs.h> |
#include <linux/smp_lock.h> |
#include <linux/buffer_head.h> |
#include <linux/reiserfs_fs_i.h> |
#include <linux/reiserfs_fs_sb.h> |
#endif |
/* |
* include/linux/reiser_fs.h |
* |
* Reiser File System constants and structures |
* |
*/ |
/* in reading the #defines, it may help to understand that they employ |
the following abbreviations: |
B = Buffer |
I = Item header |
H = Height within the tree (should be changed to LEV) |
N = Number of the item in the node |
STAT = stat data |
DEH = Directory Entry Header |
EC = Entry Count |
E = Entry number |
UL = Unsigned Long |
BLKH = BLocK Header |
UNFM = UNForMatted node |
DC = Disk Child |
P = Path |
These #defines are named by concatenating these abbreviations, |
where first comes the arguments, and last comes the return value, |
of the macro. |
*/ |
#define USE_INODE_GENERATION_COUNTER |
#define REISERFS_PREALLOCATE |
#define DISPLACE_NEW_PACKING_LOCALITIES |
#define PREALLOCATION_SIZE 9 |
/* n must be power of 2 */ |
#define _ROUND_UP(x,n) (((x)+(n)-1u) & ~((n)-1u)) |
// to be ok for alpha and others we have to align structures to 8 byte |
// boundary. |
// FIXME: do not change 4 by anything else: there is code which relies on that |
#define ROUND_UP(x) _ROUND_UP(x,8LL) |
/* debug levels. Right now, CONFIG_REISERFS_CHECK means print all debug |
** messages. |
*/ |
#define REISERFS_DEBUG_CODE 5 /* extra messages to help find/debug errors */ |
/* assertions handling */ |
/** always check a condition and panic if it's false. */ |
#define RASSERT( cond, format, args... ) \ |
if( !( cond ) ) \ |
reiserfs_panic( 0, "reiserfs[%i]: assertion " #cond " failed at " \ |
__FILE__ ":%i:%s: " format "\n", \ |
in_interrupt() ? -1 : current -> pid, __LINE__ , __FUNCTION__ , ##args ) |
#if defined( CONFIG_REISERFS_CHECK ) |
#define RFALSE( cond, format, args... ) RASSERT( !( cond ), format, ##args ) |
#else |
#define RFALSE( cond, format, args... ) do {;} while( 0 ) |
#endif |
#define CONSTF __attribute__( ( const ) ) |
/* |
* Disk Data Structures |
*/ |
/***************************************************************************/ |
/* SUPER BLOCK */ |
/***************************************************************************/ |
/* |
* Structure of super block on disk, a version of which in RAM is often accessed as REISERFS_SB(s)->s_rs |
* the version in RAM is part of a larger structure containing fields never written to disk. |
*/ |
#define UNSET_HASH 0 // read_super will guess about, what hash names |
// in directories were sorted with |
#define TEA_HASH 1 |
#define YURA_HASH 2 |
#define R5_HASH 3 |
#define DEFAULT_HASH R5_HASH |
struct journal_params { |
__u32 jp_journal_1st_block; /* where does journal start from on its |
* device */ |
__u32 jp_journal_dev; /* journal device st_rdev */ |
__u32 jp_journal_size; /* size of the journal */ |
__u32 jp_journal_trans_max; /* max number of blocks in a transaction. */ |
__u32 jp_journal_magic; /* random value made on fs creation (this |
* was sb_journal_block_count) */ |
__u32 jp_journal_max_batch; /* max number of blocks to batch into a |
* trans */ |
__u32 jp_journal_max_commit_age; /* in seconds, how old can an async |
* commit be */ |
__u32 jp_journal_max_trans_age; /* in seconds, how old can a transaction |
* be */ |
}; |
/* this is the super from 3.5.X, where X >= 10 */ |
struct reiserfs_super_block_v1 |
{ |
__u32 s_block_count; /* blocks count */ |
__u32 s_free_blocks; /* free blocks count */ |
__u32 s_root_block; /* root block number */ |
struct journal_params s_journal; |
__u16 s_blocksize; /* block size */ |
__u16 s_oid_maxsize; /* max size of object id array, see |
* get_objectid() commentary */ |
__u16 s_oid_cursize; /* current size of object id array */ |
__u16 s_umount_state; /* this is set to 1 when filesystem was |
* umounted, to 2 - when not */ |
char s_magic[10]; /* reiserfs magic string indicates that |
* file system is reiserfs: |
* "ReIsErFs" or "ReIsEr2Fs" or "ReIsEr3Fs" */ |
__u16 s_fs_state; /* it is set to used by fsck to mark which |
* phase of rebuilding is done */ |
__u32 s_hash_function_code; /* indicate, what hash function is being use |
* to sort names in a directory*/ |
__u16 s_tree_height; /* height of disk tree */ |
__u16 s_bmap_nr; /* amount of bitmap blocks needed to address |
* each block of file system */ |
__u16 s_version; /* this field is only reliable on filesystem |
* with non-standard journal */ |
__u16 s_reserved_for_journal; /* size in blocks of journal area on main |
* device, we need to keep after |
* making fs with non-standard journal */ |
} __attribute__ ((__packed__)); |
#define SB_SIZE_V1 (sizeof(struct reiserfs_super_block_v1)) |
/* this is the on disk super block */ |
struct reiserfs_super_block |
{ |
struct reiserfs_super_block_v1 s_v1; |
__u32 s_inode_generation; |
__u32 s_flags; /* Right now used only by inode-attributes, if enabled */ |
unsigned char s_uuid[16]; /* filesystem unique identifier */ |
unsigned char s_label[16]; /* filesystem volume label */ |
char s_unused[88] ; /* zero filled by mkreiserfs and |
* reiserfs_convert_objectid_map_v1() |
* so any additions must be updated |
* there as well. */ |
} __attribute__ ((__packed__)); |
#define SB_SIZE (sizeof(struct reiserfs_super_block)) |
#define REISERFS_VERSION_1 0 |
#define REISERFS_VERSION_2 2 |
// on-disk super block fields converted to cpu form |
#define SB_DISK_SUPER_BLOCK(s) (REISERFS_SB(s)->s_rs) |
#define SB_V1_DISK_SUPER_BLOCK(s) (&(SB_DISK_SUPER_BLOCK(s)->s_v1)) |
#define SB_BLOCKSIZE(s) \ |
le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_blocksize)) |
#define SB_BLOCK_COUNT(s) \ |
le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_block_count)) |
#define SB_FREE_BLOCKS(s) \ |
le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_free_blocks)) |
#define SB_REISERFS_MAGIC(s) \ |
(SB_V1_DISK_SUPER_BLOCK(s)->s_magic) |
#define SB_ROOT_BLOCK(s) \ |
le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_root_block)) |
#define SB_TREE_HEIGHT(s) \ |
le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_tree_height)) |
#define SB_REISERFS_STATE(s) \ |
le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_umount_state)) |
#define SB_VERSION(s) le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_version)) |
#define SB_BMAP_NR(s) le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_bmap_nr)) |
#define PUT_SB_BLOCK_COUNT(s, val) \ |
do { SB_V1_DISK_SUPER_BLOCK(s)->s_block_count = cpu_to_le32(val); } while (0) |
#define PUT_SB_FREE_BLOCKS(s, val) \ |
do { SB_V1_DISK_SUPER_BLOCK(s)->s_free_blocks = cpu_to_le32(val); } while (0) |
#define PUT_SB_ROOT_BLOCK(s, val) \ |
do { SB_V1_DISK_SUPER_BLOCK(s)->s_root_block = cpu_to_le32(val); } while (0) |
#define PUT_SB_TREE_HEIGHT(s, val) \ |
do { SB_V1_DISK_SUPER_BLOCK(s)->s_tree_height = cpu_to_le16(val); } while (0) |
#define PUT_SB_REISERFS_STATE(s, val) \ |
do { SB_V1_DISK_SUPER_BLOCK(s)->s_umount_state = cpu_to_le16(val); } while (0) |
#define PUT_SB_VERSION(s, val) \ |
do { SB_V1_DISK_SUPER_BLOCK(s)->s_version = cpu_to_le16(val); } while (0) |
#define PUT_SB_BMAP_NR(s, val) \ |
do { SB_V1_DISK_SUPER_BLOCK(s)->s_bmap_nr = cpu_to_le16 (val); } while (0) |
#define SB_ONDISK_JP(s) (&SB_V1_DISK_SUPER_BLOCK(s)->s_journal) |
#define SB_ONDISK_JOURNAL_SIZE(s) \ |
le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_size)) |
#define SB_ONDISK_JOURNAL_1st_BLOCK(s) \ |
le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_1st_block)) |
#define SB_ONDISK_JOURNAL_DEVICE(s) \ |
le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_dev)) |
#define SB_ONDISK_RESERVED_FOR_JOURNAL(s) \ |
le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_reserved_for_journal)) |
#define is_block_in_log_or_reserved_area(s, block) \ |
block >= SB_JOURNAL_1st_RESERVED_BLOCK(s) \ |
&& block < SB_JOURNAL_1st_RESERVED_BLOCK(s) + \ |
((!is_reiserfs_jr(SB_DISK_SUPER_BLOCK(s)) ? \ |
SB_ONDISK_JOURNAL_SIZE(s) + 1 : SB_ONDISK_RESERVED_FOR_JOURNAL(s))) |
/* used by gcc */ |
#define REISERFS_SUPER_MAGIC 0x52654973 |
/* 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" |
extern const char reiserfs_3_5_magic_string[]; |
extern const char reiserfs_3_6_magic_string[]; |
extern const char reiserfs_jr_magic_string[]; |
int is_reiserfs_3_5 (struct reiserfs_super_block * rs); |
int is_reiserfs_3_6 (struct reiserfs_super_block * rs); |
int is_reiserfs_jr (struct reiserfs_super_block * rs); |
/* ReiserFS leaves the first 64k unused, so that partition labels have |
enough space. If someone wants to write a fancy bootloader that |
needs more than 64k, let us know, and this will be increased in size. |
This number must be larger than than the largest block size on any |
platform, or code will break. -Hans */ |
#define REISERFS_DISK_OFFSET_IN_BYTES (64 * 1024) |
#define REISERFS_FIRST_BLOCK unused_define |
#define REISERFS_JOURNAL_OFFSET_IN_BYTES REISERFS_DISK_OFFSET_IN_BYTES |
/* the spot for the super in versions 3.5 - 3.5.10 (inclusive) */ |
#define REISERFS_OLD_DISK_OFFSET_IN_BYTES (8 * 1024) |
// reiserfs internal error code (used by search_by_key adn fix_nodes)) |
#define CARRY_ON 0 |
#define REPEAT_SEARCH -1 |
#define IO_ERROR -2 |
#define NO_DISK_SPACE -3 |
#define NO_BALANCING_NEEDED (-4) |
#define NO_MORE_UNUSED_CONTIGUOUS_BLOCKS (-5) |
typedef __u32 b_blocknr_t; |
typedef __u32 unp_t; |
struct unfm_nodeinfo { |
unp_t unfm_nodenum; |
unsigned short unfm_freespace; |
}; |
/* there are two formats of keys: 3.5 and 3.6 |
*/ |
#define KEY_FORMAT_3_5 0 |
#define KEY_FORMAT_3_6 1 |
/* there are two stat datas */ |
#define STAT_DATA_V1 0 |
#define STAT_DATA_V2 1 |
static inline struct reiserfs_inode_info *REISERFS_I(struct inode *inode) |
{ |
return container_of(inode, struct reiserfs_inode_info, vfs_inode); |
} |
static inline struct reiserfs_sb_info *REISERFS_SB(const struct super_block *sb) |
{ |
return sb->s_fs_info; |
} |
/** this says about version of key of all items (but stat data) the |
object consists of */ |
#define get_inode_item_key_version( inode ) \ |
((REISERFS_I(inode)->i_flags & i_item_key_version_mask) ? KEY_FORMAT_3_6 : KEY_FORMAT_3_5) |
#define set_inode_item_key_version( inode, version ) \ |
({ if((version)==KEY_FORMAT_3_6) \ |
REISERFS_I(inode)->i_flags |= i_item_key_version_mask; \ |
else \ |
REISERFS_I(inode)->i_flags &= ~i_item_key_version_mask; }) |
#define get_inode_sd_version(inode) \ |
((REISERFS_I(inode)->i_flags & i_stat_data_version_mask) ? STAT_DATA_V2 : STAT_DATA_V1) |
#define set_inode_sd_version(inode, version) \ |
({ if((version)==STAT_DATA_V2) \ |
REISERFS_I(inode)->i_flags |= i_stat_data_version_mask; \ |
else \ |
REISERFS_I(inode)->i_flags &= ~i_stat_data_version_mask; }) |
/* This is an aggressive tail suppression policy, I am hoping it |
improves our benchmarks. The principle behind it is that percentage |
space saving is what matters, not absolute space saving. This is |
non-intuitive, but it helps to understand it if you consider that the |
cost to access 4 blocks is not much more than the cost to access 1 |
block, if you have to do a seek and rotate. A tail risks a |
non-linear disk access that is significant as a percentage of total |
time cost for a 4 block file and saves an amount of space that is |
less significant as a percentage of space, or so goes the hypothesis. |
-Hans */ |
#define STORE_TAIL_IN_UNFM_S1(n_file_size,n_tail_size,n_block_size) \ |
(\ |
(!(n_tail_size)) || \ |
(((n_tail_size) > MAX_DIRECT_ITEM_LEN(n_block_size)) || \ |
( (n_file_size) >= (n_block_size) * 4 ) || \ |
( ( (n_file_size) >= (n_block_size) * 3 ) && \ |
( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size))/4) ) || \ |
( ( (n_file_size) >= (n_block_size) * 2 ) && \ |
( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size))/2) ) || \ |
( ( (n_file_size) >= (n_block_size) ) && \ |
( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size) * 3)/4) ) ) \ |
) |
/* Another strategy for tails, this one means only create a tail if all the |
file would fit into one DIRECT item. |
Primary intention for this one is to increase performance by decreasing |
seeking. |
*/ |
#define STORE_TAIL_IN_UNFM_S2(n_file_size,n_tail_size,n_block_size) \ |
(\ |
(!(n_tail_size)) || \ |
(((n_file_size) > MAX_DIRECT_ITEM_LEN(n_block_size)) ) \ |
) |
/* |
* values for s_umount_state field |
*/ |
#define REISERFS_VALID_FS 1 |
#define REISERFS_ERROR_FS 2 |
// |
// there are 5 item types currently |
// |
#define TYPE_STAT_DATA 0 |
#define TYPE_INDIRECT 1 |
#define TYPE_DIRECT 2 |
#define TYPE_DIRENTRY 3 |
#define TYPE_MAXTYPE 3 |
#define TYPE_ANY 15 // FIXME: comment is required |
/***************************************************************************/ |
/* KEY & ITEM HEAD */ |
/***************************************************************************/ |
// |
// directories use this key as well as old files |
// |
struct offset_v1 { |
__u32 k_offset; |
__u32 k_uniqueness; |
} __attribute__ ((__packed__)); |
struct offset_v2 { |
#ifdef __LITTLE_ENDIAN |
/* little endian version */ |
__u64 k_offset:60; |
__u64 k_type: 4; |
#else |
/* big endian version */ |
__u64 k_type: 4; |
__u64 k_offset:60; |
#endif |
} __attribute__ ((__packed__)); |
#ifndef __LITTLE_ENDIAN |
typedef union { |
struct offset_v2 offset_v2; |
__u64 linear; |
} __attribute__ ((__packed__)) offset_v2_esafe_overlay; |
static inline __u16 offset_v2_k_type( const struct offset_v2 *v2 ) |
{ |
offset_v2_esafe_overlay tmp = *(const offset_v2_esafe_overlay *)v2; |
tmp.linear = le64_to_cpu( tmp.linear ); |
return (tmp.offset_v2.k_type <= TYPE_MAXTYPE)?tmp.offset_v2.k_type:TYPE_ANY; |
} |
static inline void set_offset_v2_k_type( struct offset_v2 *v2, int type ) |
{ |
offset_v2_esafe_overlay *tmp = (offset_v2_esafe_overlay *)v2; |
tmp->linear = le64_to_cpu(tmp->linear); |
tmp->offset_v2.k_type = type; |
tmp->linear = cpu_to_le64(tmp->linear); |
} |
static inline loff_t offset_v2_k_offset( const struct offset_v2 *v2 ) |
{ |
offset_v2_esafe_overlay tmp = *(const offset_v2_esafe_overlay *)v2; |
tmp.linear = le64_to_cpu( tmp.linear ); |
return tmp.offset_v2.k_offset; |
} |
static inline void set_offset_v2_k_offset( struct offset_v2 *v2, loff_t offset ){ |
offset_v2_esafe_overlay *tmp = (offset_v2_esafe_overlay *)v2; |
tmp->linear = le64_to_cpu(tmp->linear); |
tmp->offset_v2.k_offset = offset; |
tmp->linear = cpu_to_le64(tmp->linear); |
} |
#else |
# define offset_v2_k_type(v2) ((v2)->k_type) |
# define set_offset_v2_k_type(v2,val) (offset_v2_k_type(v2) = (val)) |
# define offset_v2_k_offset(v2) ((v2)->k_offset) |
# define set_offset_v2_k_offset(v2,val) (offset_v2_k_offset(v2) = (val)) |
#endif |
/* Key of an item determines its location in the S+tree, and |
is composed of 4 components */ |
struct key { |
__u32 k_dir_id; /* packing locality: by default parent |
directory object id */ |
__u32 k_objectid; /* object identifier */ |
union { |
struct offset_v1 k_offset_v1; |
struct offset_v2 k_offset_v2; |
} __attribute__ ((__packed__)) u; |
} __attribute__ ((__packed__)); |
struct cpu_key { |
struct key on_disk_key; |
int version; |
int key_length; /* 3 in all cases but direct2indirect and |
indirect2direct conversion */ |
}; |
/* Our function for comparing keys can compare keys of different |
lengths. It takes as a parameter the length of the keys it is to |
compare. These defines are used in determining what is to be passed |
to it as that parameter. */ |
#define REISERFS_FULL_KEY_LEN 4 |
#define REISERFS_SHORT_KEY_LEN 2 |
/* The result of the key compare */ |
#define FIRST_GREATER 1 |
#define SECOND_GREATER -1 |
#define KEYS_IDENTICAL 0 |
#define KEY_FOUND 1 |
#define KEY_NOT_FOUND 0 |
#define KEY_SIZE (sizeof(struct key)) |
#define SHORT_KEY_SIZE (sizeof (__u32) + sizeof (__u32)) |
/* return values for search_by_key and clones */ |
#define ITEM_FOUND 1 |
#define ITEM_NOT_FOUND 0 |
#define ENTRY_FOUND 1 |
#define ENTRY_NOT_FOUND 0 |
#define DIRECTORY_NOT_FOUND -1 |
#define REGULAR_FILE_FOUND -2 |
#define DIRECTORY_FOUND -3 |
#define BYTE_FOUND 1 |
#define BYTE_NOT_FOUND 0 |
#define FILE_NOT_FOUND -1 |
#define POSITION_FOUND 1 |
#define POSITION_NOT_FOUND 0 |
// return values for reiserfs_find_entry and search_by_entry_key |
#define NAME_FOUND 1 |
#define NAME_NOT_FOUND 0 |
#define GOTO_PREVIOUS_ITEM 2 |
#define NAME_FOUND_INVISIBLE 3 |
/* Everything in the filesystem is stored as a set of items. The |
item head contains the key of the item, its free space (for |
indirect items) and specifies the location of the item itself |
within the block. */ |
struct item_head |
{ |
/* Everything in the tree is found by searching for it based on |
* its key.*/ |
struct key ih_key; |
union { |
/* The free space in the last unformatted node of an |
indirect item if this is an indirect item. This |
equals 0xFFFF iff this is a direct item or stat data |
item. Note that the key, not this field, is used to |
determine the item type, and thus which field this |
union contains. */ |
__u16 ih_free_space_reserved; |
/* Iff this is a directory item, this field equals the |
number of directory entries in the directory item. */ |
__u16 ih_entry_count; |
} __attribute__ ((__packed__)) u; |
__u16 ih_item_len; /* total size of the item body */ |
__u16 ih_item_location; /* an offset to the item body |
* within the block */ |
__u16 ih_version; /* 0 for all old items, 2 for new |
ones. Highest bit is set by fsck |
temporary, cleaned after all |
done */ |
} __attribute__ ((__packed__)); |
/* size of item header */ |
#define IH_SIZE (sizeof(struct item_head)) |
#define ih_free_space(ih) le16_to_cpu((ih)->u.ih_free_space_reserved) |
#define ih_version(ih) le16_to_cpu((ih)->ih_version) |
#define ih_entry_count(ih) le16_to_cpu((ih)->u.ih_entry_count) |
#define ih_location(ih) le16_to_cpu((ih)->ih_item_location) |
#define ih_item_len(ih) le16_to_cpu((ih)->ih_item_len) |
#define put_ih_free_space(ih, val) do { (ih)->u.ih_free_space_reserved = cpu_to_le16(val); } while(0) |
#define put_ih_version(ih, val) do { (ih)->ih_version = cpu_to_le16(val); } while (0) |
#define put_ih_entry_count(ih, val) do { (ih)->u.ih_entry_count = cpu_to_le16(val); } while (0) |
#define put_ih_location(ih, val) do { (ih)->ih_item_location = cpu_to_le16(val); } while (0) |
#define put_ih_item_len(ih, val) do { (ih)->ih_item_len = cpu_to_le16(val); } while (0) |
#define unreachable_item(ih) (ih_version(ih) & (1 << 15)) |
#define get_ih_free_space(ih) (ih_version (ih) == KEY_FORMAT_3_6 ? 0 : ih_free_space (ih)) |
#define set_ih_free_space(ih,val) put_ih_free_space((ih), ((ih_version(ih) == KEY_FORMAT_3_6) ? 0 : (val))) |
/* these operate on indirect items, where you've got an array of ints |
** at a possibly unaligned location. These are a noop on ia32 |
** |
** p is the array of __u32, i is the index into the array, v is the value |
** to store there. |
*/ |
#define get_block_num(p, i) le32_to_cpu(get_unaligned((p) + (i))) |
#define put_block_num(p, i, v) put_unaligned(cpu_to_le32(v), (p) + (i)) |
// |
// in old version uniqueness field shows key type |
// |
#define V1_SD_UNIQUENESS 0 |
#define V1_INDIRECT_UNIQUENESS 0xfffffffe |
#define V1_DIRECT_UNIQUENESS 0xffffffff |
#define V1_DIRENTRY_UNIQUENESS 500 |
#define V1_ANY_UNIQUENESS 555 // FIXME: comment is required |
extern void reiserfs_warning (const char * fmt, ...); |
/* __attribute__( ( format ( printf, 1, 2 ) ) ); */ |
// |
// here are conversion routines |
// |
static inline int uniqueness2type (__u32 uniqueness) CONSTF; |
static inline int uniqueness2type (__u32 uniqueness) |
{ |
switch ((int)uniqueness) { |
case V1_SD_UNIQUENESS: return TYPE_STAT_DATA; |
case V1_INDIRECT_UNIQUENESS: return TYPE_INDIRECT; |
case V1_DIRECT_UNIQUENESS: return TYPE_DIRECT; |
case V1_DIRENTRY_UNIQUENESS: return TYPE_DIRENTRY; |
default: |
reiserfs_warning( "vs-500: unknown uniqueness %d\n", uniqueness); |
case V1_ANY_UNIQUENESS: |
return TYPE_ANY; |
} |
} |
static inline __u32 type2uniqueness (int type) CONSTF; |
static inline __u32 type2uniqueness (int type) |
{ |
switch (type) { |
case TYPE_STAT_DATA: return V1_SD_UNIQUENESS; |
case TYPE_INDIRECT: return V1_INDIRECT_UNIQUENESS; |
case TYPE_DIRECT: return V1_DIRECT_UNIQUENESS; |
case TYPE_DIRENTRY: return V1_DIRENTRY_UNIQUENESS; |
default: |
reiserfs_warning( "vs-501: unknown type %d\n", type); |
case TYPE_ANY: |
return V1_ANY_UNIQUENESS; |
} |
} |
// |
// key is pointer to on disk key which is stored in le, result is cpu, |
// there is no way to get version of object from key, so, provide |
// version to these defines |
// |
static inline loff_t le_key_k_offset (int version, const struct key * key) |
{ |
return (version == KEY_FORMAT_3_5) ? |
le32_to_cpu( key->u.k_offset_v1.k_offset ) : |
offset_v2_k_offset( &(key->u.k_offset_v2) ); |
} |
static inline loff_t le_ih_k_offset (const struct item_head * ih) |
{ |
return le_key_k_offset (ih_version (ih), &(ih->ih_key)); |
} |
static inline loff_t le_key_k_type (int version, const struct key * key) |
{ |
return (version == KEY_FORMAT_3_5) ? |
uniqueness2type( le32_to_cpu( key->u.k_offset_v1.k_uniqueness)) : |
offset_v2_k_type( &(key->u.k_offset_v2) ); |
} |
static inline loff_t le_ih_k_type (const struct item_head * ih) |
{ |
return le_key_k_type (ih_version (ih), &(ih->ih_key)); |
} |
static inline void set_le_key_k_offset (int version, struct key * key, loff_t offset) |
{ |
(version == KEY_FORMAT_3_5) ? |
(key->u.k_offset_v1.k_offset = cpu_to_le32 (offset)) : /* jdm check */ |
(set_offset_v2_k_offset( &(key->u.k_offset_v2), offset )); |
} |
static inline void set_le_ih_k_offset (struct item_head * ih, loff_t offset) |
{ |
set_le_key_k_offset (ih_version (ih), &(ih->ih_key), offset); |
} |
static inline void set_le_key_k_type (int version, struct key * key, int type) |
{ |
(version == KEY_FORMAT_3_5) ? |
(key->u.k_offset_v1.k_uniqueness = cpu_to_le32(type2uniqueness(type))): |
(set_offset_v2_k_type( &(key->u.k_offset_v2), type )); |
} |
static inline void set_le_ih_k_type (struct item_head * ih, int type) |
{ |
set_le_key_k_type (ih_version (ih), &(ih->ih_key), type); |
} |
#define is_direntry_le_key(version,key) (le_key_k_type (version, key) == TYPE_DIRENTRY) |
#define is_direct_le_key(version,key) (le_key_k_type (version, key) == TYPE_DIRECT) |
#define is_indirect_le_key(version,key) (le_key_k_type (version, key) == TYPE_INDIRECT) |
#define is_statdata_le_key(version,key) (le_key_k_type (version, key) == TYPE_STAT_DATA) |
// |
// item header has version. |
// |
#define is_direntry_le_ih(ih) is_direntry_le_key (ih_version (ih), &((ih)->ih_key)) |
#define is_direct_le_ih(ih) is_direct_le_key (ih_version (ih), &((ih)->ih_key)) |
#define is_indirect_le_ih(ih) is_indirect_le_key (ih_version(ih), &((ih)->ih_key)) |
#define is_statdata_le_ih(ih) is_statdata_le_key (ih_version (ih), &((ih)->ih_key)) |
// |
// key is pointer to cpu key, result is cpu |
// |
static inline loff_t cpu_key_k_offset (const struct cpu_key * key) |
{ |
return (key->version == KEY_FORMAT_3_5) ? |
key->on_disk_key.u.k_offset_v1.k_offset : |
key->on_disk_key.u.k_offset_v2.k_offset; |
} |
static inline loff_t cpu_key_k_type (const struct cpu_key * key) |
{ |
return (key->version == KEY_FORMAT_3_5) ? |
uniqueness2type (key->on_disk_key.u.k_offset_v1.k_uniqueness) : |
key->on_disk_key.u.k_offset_v2.k_type; |
} |
static inline void set_cpu_key_k_offset (struct cpu_key * key, loff_t offset) |
{ |
(key->version == KEY_FORMAT_3_5) ? |
(key->on_disk_key.u.k_offset_v1.k_offset = offset) : |
(key->on_disk_key.u.k_offset_v2.k_offset = offset); |
} |
static inline void set_cpu_key_k_type (struct cpu_key * key, int type) |
{ |
(key->version == KEY_FORMAT_3_5) ? |
(key->on_disk_key.u.k_offset_v1.k_uniqueness = type2uniqueness (type)): |
(key->on_disk_key.u.k_offset_v2.k_type = type); |
} |
static inline void cpu_key_k_offset_dec (struct cpu_key * key) |
{ |
if (key->version == KEY_FORMAT_3_5) |
key->on_disk_key.u.k_offset_v1.k_offset --; |
else |
key->on_disk_key.u.k_offset_v2.k_offset --; |
} |
#define is_direntry_cpu_key(key) (cpu_key_k_type (key) == TYPE_DIRENTRY) |
#define is_direct_cpu_key(key) (cpu_key_k_type (key) == TYPE_DIRECT) |
#define is_indirect_cpu_key(key) (cpu_key_k_type (key) == TYPE_INDIRECT) |
#define is_statdata_cpu_key(key) (cpu_key_k_type (key) == TYPE_STAT_DATA) |
/* are these used ? */ |
#define is_direntry_cpu_ih(ih) (is_direntry_cpu_key (&((ih)->ih_key))) |
#define is_direct_cpu_ih(ih) (is_direct_cpu_key (&((ih)->ih_key))) |
#define is_indirect_cpu_ih(ih) (is_indirect_cpu_key (&((ih)->ih_key))) |
#define is_statdata_cpu_ih(ih) (is_statdata_cpu_key (&((ih)->ih_key))) |
#define I_K_KEY_IN_ITEM(p_s_ih, p_s_key, n_blocksize) \ |
( ! COMP_SHORT_KEYS(p_s_ih, p_s_key) && \ |
I_OFF_BYTE_IN_ITEM(p_s_ih, k_offset (p_s_key), n_blocksize) ) |
/* maximal length of item */ |
#define MAX_ITEM_LEN(block_size) (block_size - BLKH_SIZE - IH_SIZE) |
#define MIN_ITEM_LEN 1 |
/* object identifier for root dir */ |
#define REISERFS_ROOT_OBJECTID 2 |
#define REISERFS_ROOT_PARENT_OBJECTID 1 |
extern struct key root_key; |
/* |
* Picture represents a leaf of the S+tree |
* ______________________________________________________ |
* | | Array of | | | |
* |Block | Object-Item | F r e e | Objects- | |
* | head | Headers | S p a c e | Items | |
* |______|_______________|___________________|___________| |
*/ |
/* Header of a disk block. More precisely, header of a formatted leaf |
or internal node, and not the header of an unformatted node. */ |
struct block_head { |
__u16 blk_level; /* Level of a block in the tree. */ |
__u16 blk_nr_item; /* Number of keys/items in a block. */ |
__u16 blk_free_space; /* Block free space in bytes. */ |
__u16 blk_reserved; |
/* dump this in v4/planA */ |
struct key blk_right_delim_key; /* kept only for compatibility */ |
}; |
#define BLKH_SIZE (sizeof(struct block_head)) |
#define blkh_level(p_blkh) (le16_to_cpu((p_blkh)->blk_level)) |
#define blkh_nr_item(p_blkh) (le16_to_cpu((p_blkh)->blk_nr_item)) |
#define blkh_free_space(p_blkh) (le16_to_cpu((p_blkh)->blk_free_space)) |
#define blkh_reserved(p_blkh) (le16_to_cpu((p_blkh)->blk_reserved)) |
#define set_blkh_level(p_blkh,val) ((p_blkh)->blk_level = cpu_to_le16(val)) |
#define set_blkh_nr_item(p_blkh,val) ((p_blkh)->blk_nr_item = cpu_to_le16(val)) |
#define set_blkh_free_space(p_blkh,val) ((p_blkh)->blk_free_space = cpu_to_le16(val)) |
#define set_blkh_reserved(p_blkh,val) ((p_blkh)->blk_reserved = cpu_to_le16(val)) |
#define blkh_right_delim_key(p_blkh) ((p_blkh)->blk_right_delim_key) |
#define set_blkh_right_delim_key(p_blkh,val) ((p_blkh)->blk_right_delim_key = val) |
/* |
* values for blk_level field of the struct block_head |
*/ |
#define FREE_LEVEL 0 /* when node gets removed from the tree its |
blk_level is set to FREE_LEVEL. It is then |
used to see whether the node is still in the |
tree */ |
#define DISK_LEAF_NODE_LEVEL 1 /* Leaf node level.*/ |
/* Given the buffer head of a formatted node, resolve to the block head of that node. */ |
#define B_BLK_HEAD(p_s_bh) ((struct block_head *)((p_s_bh)->b_data)) |
/* Number of items that are in buffer. */ |
#define B_NR_ITEMS(p_s_bh) (blkh_nr_item(B_BLK_HEAD(p_s_bh))) |
#define B_LEVEL(p_s_bh) (blkh_level(B_BLK_HEAD(p_s_bh))) |
#define B_FREE_SPACE(p_s_bh) (blkh_free_space(B_BLK_HEAD(p_s_bh))) |
#define PUT_B_NR_ITEMS(p_s_bh,val) do { set_blkh_nr_item(B_BLK_HEAD(p_s_bh),val); } while (0) |
#define PUT_B_LEVEL(p_s_bh,val) do { set_blkh_level(B_BLK_HEAD(p_s_bh),val); } while (0) |
#define PUT_B_FREE_SPACE(p_s_bh,val) do { set_blkh_free_space(B_BLK_HEAD(p_s_bh),val); } while (0) |
/* Get right delimiting key. -- little endian */ |
#define B_PRIGHT_DELIM_KEY(p_s_bh) (&(blk_right_delim_key(B_BLK_HEAD(p_s_bh)) |
/* Does the buffer contain a disk leaf. */ |
#define B_IS_ITEMS_LEVEL(p_s_bh) (B_LEVEL(p_s_bh) == DISK_LEAF_NODE_LEVEL) |
/* Does the buffer contain a disk internal node */ |
#define B_IS_KEYS_LEVEL(p_s_bh) (B_LEVEL(p_s_bh) > DISK_LEAF_NODE_LEVEL \ |
&& B_LEVEL(p_s_bh) <= MAX_HEIGHT) |
/***************************************************************************/ |
/* STAT DATA */ |
/***************************************************************************/ |
// |
// old stat data is 32 bytes long. We are going to distinguish new one by |
// different size |
// |
struct stat_data_v1 |
{ |
__u16 sd_mode; /* file type, permissions */ |
__u16 sd_nlink; /* number of hard links */ |
__u16 sd_uid; /* owner */ |
__u16 sd_gid; /* group */ |
__u32 sd_size; /* file size */ |
__u32 sd_atime; /* time of last access */ |
__u32 sd_mtime; /* time file was last modified */ |
__u32 sd_ctime; /* time inode (stat data) was last changed (except changes to sd_atime and sd_mtime) */ |
union { |
__u32 sd_rdev; |
__u32 sd_blocks; /* number of blocks file uses */ |
} __attribute__ ((__packed__)) u; |
__u32 sd_first_direct_byte; /* first byte of file which is stored |
in a direct item: except that if it |
equals 1 it is a symlink and if it |
equals ~(__u32)0 there is no |
direct item. The existence of this |
field really grates on me. Let's |
replace it with a macro based on |
sd_size and our tail suppression |
policy. Someday. -Hans */ |
} __attribute__ ((__packed__)); |
#define SD_V1_SIZE (sizeof(struct stat_data_v1)) |
#define stat_data_v1(ih) (ih_version (ih) == KEY_FORMAT_3_5) |
#define sd_v1_mode(sdp) (le16_to_cpu((sdp)->sd_mode)) |
#define set_sd_v1_mode(sdp,v) ((sdp)->sd_mode = cpu_to_le16(v)) |
#define sd_v1_nlink(sdp) (le16_to_cpu((sdp)->sd_nlink)) |
#define set_sd_v1_nlink(sdp,v) ((sdp)->sd_nlink = cpu_to_le16(v)) |
#define sd_v1_uid(sdp) (le16_to_cpu((sdp)->sd_uid)) |
#define set_sd_v1_uid(sdp,v) ((sdp)->sd_uid = cpu_to_le16(v)) |
#define sd_v1_gid(sdp) (le16_to_cpu((sdp)->sd_gid)) |
#define set_sd_v1_gid(sdp,v) ((sdp)->sd_gid = cpu_to_le16(v)) |
#define sd_v1_size(sdp) (le32_to_cpu((sdp)->sd_size)) |
#define set_sd_v1_size(sdp,v) ((sdp)->sd_size = cpu_to_le32(v)) |
#define sd_v1_atime(sdp) (le32_to_cpu((sdp)->sd_atime)) |
#define set_sd_v1_atime(sdp,v) ((sdp)->sd_atime = cpu_to_le32(v)) |
#define sd_v1_mtime(sdp) (le32_to_cpu((sdp)->sd_mtime)) |
#define set_sd_v1_mtime(sdp,v) ((sdp)->sd_mtime = cpu_to_le32(v)) |
#define sd_v1_ctime(sdp) (le32_to_cpu((sdp)->sd_ctime)) |
#define set_sd_v1_ctime(sdp,v) ((sdp)->sd_ctime = cpu_to_le32(v)) |
#define sd_v1_rdev(sdp) (le32_to_cpu((sdp)->u.sd_rdev)) |
#define set_sd_v1_rdev(sdp,v) ((sdp)->u.sd_rdev = cpu_to_le32(v)) |
#define sd_v1_blocks(sdp) (le32_to_cpu((sdp)->u.sd_blocks)) |
#define set_sd_v1_blocks(sdp,v) ((sdp)->u.sd_blocks = cpu_to_le32(v)) |
#define sd_v1_first_direct_byte(sdp) \ |
(le32_to_cpu((sdp)->sd_first_direct_byte)) |
#define set_sd_v1_first_direct_byte(sdp,v) \ |
((sdp)->sd_first_direct_byte = cpu_to_le32(v)) |
#include <linux/ext2_fs.h> |
/* inode flags stored in sd_attrs (nee sd_reserved) */ |
/* we want common flags to have the same values as in ext2, |
so chattr(1) will work without problems */ |
#define REISERFS_IMMUTABLE_FL EXT2_IMMUTABLE_FL |
#define REISERFS_APPEND_FL EXT2_APPEND_FL |
#define REISERFS_SYNC_FL EXT2_SYNC_FL |
#define REISERFS_NOATIME_FL EXT2_NOATIME_FL |
#define REISERFS_NODUMP_FL EXT2_NODUMP_FL |
#define REISERFS_SECRM_FL EXT2_SECRM_FL |
#define REISERFS_UNRM_FL EXT2_UNRM_FL |
#define REISERFS_COMPR_FL EXT2_COMPR_FL |
#define REISERFS_NOTAIL_FL EXT2_NOTAIL_FL |
/* persistent flags that file inherits from the parent directory */ |
#define REISERFS_INHERIT_MASK ( REISERFS_IMMUTABLE_FL | \ |
REISERFS_SYNC_FL | \ |
REISERFS_NOATIME_FL | \ |
REISERFS_NODUMP_FL | \ |
REISERFS_SECRM_FL | \ |
REISERFS_COMPR_FL | \ |
REISERFS_NOTAIL_FL ) |
/* Stat Data on disk (reiserfs version of UFS disk inode minus the |
address blocks) */ |
struct stat_data { |
__u16 sd_mode; /* file type, permissions */ |
__u16 sd_attrs; /* persistent inode flags */ |
__u32 sd_nlink; /* number of hard links */ |
__u64 sd_size; /* file size */ |
__u32 sd_uid; /* owner */ |
__u32 sd_gid; /* group */ |
__u32 sd_atime; /* time of last access */ |
__u32 sd_mtime; /* time file was last modified */ |
__u32 sd_ctime; /* time inode (stat data) was last changed (except changes to sd_atime and sd_mtime) */ |
__u32 sd_blocks; |
union { |
__u32 sd_rdev; |
__u32 sd_generation; |
//__u32 sd_first_direct_byte; |
/* first byte of file which is stored in a |
direct item: except that if it equals 1 |
it is a symlink and if it equals |
~(__u32)0 there is no direct item. The |
existence of this field really grates |
on me. Let's replace it with a macro |
based on sd_size and our tail |
suppression policy? */ |
} __attribute__ ((__packed__)) u; |
} __attribute__ ((__packed__)); |
// |
// this is 44 bytes long |
// |
#define SD_SIZE (sizeof(struct stat_data)) |
#define SD_V2_SIZE SD_SIZE |
#define stat_data_v2(ih) (ih_version (ih) == KEY_FORMAT_3_6) |
#define sd_v2_mode(sdp) (le16_to_cpu((sdp)->sd_mode)) |
#define set_sd_v2_mode(sdp,v) ((sdp)->sd_mode = cpu_to_le16(v)) |
/* sd_reserved */ |
/* set_sd_reserved */ |
#define sd_v2_nlink(sdp) (le32_to_cpu((sdp)->sd_nlink)) |
#define set_sd_v2_nlink(sdp,v) ((sdp)->sd_nlink = cpu_to_le32(v)) |
#define sd_v2_size(sdp) (le64_to_cpu((sdp)->sd_size)) |
#define set_sd_v2_size(sdp,v) ((sdp)->sd_size = cpu_to_le64(v)) |
#define sd_v2_uid(sdp) (le32_to_cpu((sdp)->sd_uid)) |
#define set_sd_v2_uid(sdp,v) ((sdp)->sd_uid = cpu_to_le32(v)) |
#define sd_v2_gid(sdp) (le32_to_cpu((sdp)->sd_gid)) |
#define set_sd_v2_gid(sdp,v) ((sdp)->sd_gid = cpu_to_le32(v)) |
#define sd_v2_atime(sdp) (le32_to_cpu((sdp)->sd_atime)) |
#define set_sd_v2_atime(sdp,v) ((sdp)->sd_atime = cpu_to_le32(v)) |
#define sd_v2_mtime(sdp) (le32_to_cpu((sdp)->sd_mtime)) |
#define set_sd_v2_mtime(sdp,v) ((sdp)->sd_mtime = cpu_to_le32(v)) |
#define sd_v2_ctime(sdp) (le32_to_cpu((sdp)->sd_ctime)) |
#define set_sd_v2_ctime(sdp,v) ((sdp)->sd_ctime = cpu_to_le32(v)) |
#define sd_v2_blocks(sdp) (le32_to_cpu((sdp)->sd_blocks)) |
#define set_sd_v2_blocks(sdp,v) ((sdp)->sd_blocks = cpu_to_le32(v)) |
#define sd_v2_rdev(sdp) (le32_to_cpu((sdp)->u.sd_rdev)) |
#define set_sd_v2_rdev(sdp,v) ((sdp)->u.sd_rdev = cpu_to_le32(v)) |
#define sd_v2_generation(sdp) (le32_to_cpu((sdp)->u.sd_generation)) |
#define set_sd_v2_generation(sdp,v) ((sdp)->u.sd_generation = cpu_to_le32(v)) |
#define sd_v2_attrs(sdp) (le16_to_cpu((sdp)->sd_attrs)) |
#define set_sd_v2_attrs(sdp,v) ((sdp)->sd_attrs = cpu_to_le16(v)) |
/***************************************************************************/ |
/* DIRECTORY STRUCTURE */ |
/***************************************************************************/ |
/* |
Picture represents the structure of directory items |
________________________________________________ |
| Array of | | | | | | |
| directory |N-1| N-2 | .... | 1st |0th| |
| entry headers | | | | | | |
|_______________|___|_____|________|_______|___| |
<---- directory entries ------> |
First directory item has k_offset component 1. We store "." and ".." |
in one item, always, we never split "." and ".." into differing |
items. This makes, among other things, the code for removing |
directories simpler. */ |
#define SD_OFFSET 0 |
#define SD_UNIQUENESS 0 |
#define DOT_OFFSET 1 |
#define DOT_DOT_OFFSET 2 |
#define DIRENTRY_UNIQUENESS 500 |
/* */ |
#define FIRST_ITEM_OFFSET 1 |
/* |
Q: How to get key of object pointed to by entry from entry? |
A: Each directory entry has its header. This header has deh_dir_id and deh_objectid fields, those are key |
of object, entry points to */ |
/* NOT IMPLEMENTED: |
Directory will someday contain stat data of object */ |
struct reiserfs_de_head |
{ |
__u32 deh_offset; /* third component of the directory entry key */ |
__u32 deh_dir_id; /* objectid of the parent directory of the object, that is referenced |
by directory entry */ |
__u32 deh_objectid; /* objectid of the object, that is referenced by directory entry */ |
__u16 deh_location; /* offset of name in the whole item */ |
__u16 deh_state; /* whether 1) entry contains stat data (for future), and 2) whether |
entry is hidden (unlinked) */ |
} __attribute__ ((__packed__)); |
#define DEH_SIZE sizeof(struct reiserfs_de_head) |
#define deh_offset(p_deh) (le32_to_cpu((p_deh)->deh_offset)) |
#define deh_dir_id(p_deh) (le32_to_cpu((p_deh)->deh_dir_id)) |
#define deh_objectid(p_deh) (le32_to_cpu((p_deh)->deh_objectid)) |
#define deh_location(p_deh) (le16_to_cpu((p_deh)->deh_location)) |
#define deh_state(p_deh) (le16_to_cpu((p_deh)->deh_state)) |
#define put_deh_offset(p_deh,v) ((p_deh)->deh_offset = cpu_to_le32((v))) |
#define put_deh_dir_id(p_deh,v) ((p_deh)->deh_dir_id = cpu_to_le32((v))) |
#define put_deh_objectid(p_deh,v) ((p_deh)->deh_objectid = cpu_to_le32((v))) |
#define put_deh_location(p_deh,v) ((p_deh)->deh_location = cpu_to_le16((v))) |
#define put_deh_state(p_deh,v) ((p_deh)->deh_state = cpu_to_le16((v))) |
/* empty directory contains two entries "." and ".." and their headers */ |
#define EMPTY_DIR_SIZE \ |
(DEH_SIZE * 2 + ROUND_UP (strlen (".")) + ROUND_UP (strlen (".."))) |
/* old format directories have this size when empty */ |
#define EMPTY_DIR_SIZE_V1 (DEH_SIZE * 2 + 3) |
#define DEH_Statdata 0 /* not used now */ |
#define DEH_Visible 2 |
/* 64 bit systems (and the S/390) need to be aligned explicitly -jdm */ |
#if BITS_PER_LONG == 64 || defined(__s390__) || defined(__hppa__) |
# define ADDR_UNALIGNED_BITS (3) |
#endif |
/* These are only used to manipulate deh_state. |
* Because of this, we'll use the ext2_ bit routines, |
* since they are little endian */ |
#ifdef ADDR_UNALIGNED_BITS |
# define aligned_address(addr) ((void *)((long)(addr) & ~((1UL << ADDR_UNALIGNED_BITS) - 1))) |
# define unaligned_offset(addr) (((int)((long)(addr) & ((1 << ADDR_UNALIGNED_BITS) - 1))) << 3) |
# define set_bit_unaligned(nr, addr) ext2_set_bit((nr) + unaligned_offset(addr), aligned_address(addr)) |
# define clear_bit_unaligned(nr, addr) ext2_clear_bit((nr) + unaligned_offset(addr), aligned_address(addr)) |
# define test_bit_unaligned(nr, addr) ext2_test_bit((nr) + unaligned_offset(addr), aligned_address(addr)) |
#else |
# define set_bit_unaligned(nr, addr) ext2_set_bit(nr, addr) |
# define clear_bit_unaligned(nr, addr) ext2_clear_bit(nr, addr) |
# define test_bit_unaligned(nr, addr) ext2_test_bit(nr, addr) |
#endif |
#define mark_de_with_sd(deh) set_bit_unaligned (DEH_Statdata, &((deh)->deh_state)) |
#define mark_de_without_sd(deh) clear_bit_unaligned (DEH_Statdata, &((deh)->deh_state)) |
#define mark_de_visible(deh) set_bit_unaligned (DEH_Visible, &((deh)->deh_state)) |
#define mark_de_hidden(deh) clear_bit_unaligned (DEH_Visible, &((deh)->deh_state)) |
#define de_with_sd(deh) test_bit_unaligned (DEH_Statdata, &((deh)->deh_state)) |
#define de_visible(deh) test_bit_unaligned (DEH_Visible, &((deh)->deh_state)) |
#define de_hidden(deh) !test_bit_unaligned (DEH_Visible, &((deh)->deh_state)) |
extern void make_empty_dir_item_v1 (char * body, __u32 dirid, __u32 objid, |
__u32 par_dirid, __u32 par_objid); |
extern void make_empty_dir_item (char * body, __u32 dirid, __u32 objid, |
__u32 par_dirid, __u32 par_objid); |
/* array of the entry headers */ |
/* get item body */ |
#define B_I_PITEM(bh,ih) ( (bh)->b_data + ih_location(ih) ) |
#define B_I_DEH(bh,ih) ((struct reiserfs_de_head *)(B_I_PITEM(bh,ih))) |
/* length of the directory entry in directory item. This define |
calculates length of i-th directory entry using directory entry |
locations from dir entry head. When it calculates length of 0-th |
directory entry, it uses length of whole item in place of entry |
location of the non-existent following entry in the calculation. |
See picture above.*/ |
/* |
#define I_DEH_N_ENTRY_LENGTH(ih,deh,i) \ |
((i) ? (deh_location((deh)-1) - deh_location((deh))) : (ih_item_len((ih)) - deh_location((deh)))) |
*/ |
static inline int entry_length (const struct buffer_head * bh, |
const struct item_head * ih, int pos_in_item) |
{ |
struct reiserfs_de_head * deh; |
deh = B_I_DEH (bh, ih) + pos_in_item; |
if (pos_in_item) |
return deh_location(deh-1) - deh_location(deh); |
return ih_item_len(ih) - deh_location(deh); |
} |
/* number of entries in the directory item, depends on ENTRY_COUNT being at the start of directory dynamic data. */ |
#define I_ENTRY_COUNT(ih) (ih_entry_count((ih))) |
/* name by bh, ih and entry_num */ |
#define B_I_E_NAME(bh,ih,entry_num) ((char *)(bh->b_data + ih_location(ih) + deh_location(B_I_DEH(bh,ih)+(entry_num)))) |
// two entries per block (at least) |
#define REISERFS_MAX_NAME(block_size) 255 |
/* this structure is used for operations on directory entries. It is |
not a disk structure. */ |
/* When reiserfs_find_entry or search_by_entry_key find directory |
entry, they return filled reiserfs_dir_entry structure */ |
struct reiserfs_dir_entry |
{ |
struct buffer_head * de_bh; |
int de_item_num; |
struct item_head * de_ih; |
int de_entry_num; |
struct reiserfs_de_head * de_deh; |
int de_entrylen; |
int de_namelen; |
char * de_name; |
char * de_gen_number_bit_string; |
__u32 de_dir_id; |
__u32 de_objectid; |
struct cpu_key de_entry_key; |
}; |
/* these defines are useful when a particular member of a reiserfs_dir_entry is needed */ |
/* pointer to file name, stored in entry */ |
#define B_I_DEH_ENTRY_FILE_NAME(bh,ih,deh) (B_I_PITEM (bh, ih) + deh_location(deh)) |
/* length of name */ |
#define I_DEH_N_ENTRY_FILE_NAME_LENGTH(ih,deh,entry_num) \ |
(I_DEH_N_ENTRY_LENGTH (ih, deh, entry_num) - (de_with_sd (deh) ? SD_SIZE : 0)) |
/* hash value occupies bits from 7 up to 30 */ |
#define GET_HASH_VALUE(offset) ((offset) & 0x7fffff80LL) |
/* generation number occupies 7 bits starting from 0 up to 6 */ |
#define GET_GENERATION_NUMBER(offset) ((offset) & 0x7fLL) |
#define MAX_GENERATION_NUMBER 127 |
#define SET_GENERATION_NUMBER(offset,gen_number) (GET_HASH_VALUE(offset)|(gen_number)) |
/* |
* Picture represents an internal node of the reiserfs tree |
* ______________________________________________________ |
* | | Array of | Array of | Free | |
* |block | keys | pointers | space | |
* | head | N | N+1 | | |
* |______|_______________|___________________|___________| |
*/ |
/***************************************************************************/ |
/* DISK CHILD */ |
/***************************************************************************/ |
/* Disk child pointer: The pointer from an internal node of the tree |
to a node that is on disk. */ |
struct disk_child { |
__u32 dc_block_number; /* Disk child's block number. */ |
__u16 dc_size; /* Disk child's used space. */ |
__u16 dc_reserved; |
}; |
#define DC_SIZE (sizeof(struct disk_child)) |
#define dc_block_number(dc_p) (le32_to_cpu((dc_p)->dc_block_number)) |
#define dc_size(dc_p) (le16_to_cpu((dc_p)->dc_size)) |
#define put_dc_block_number(dc_p, val) do { (dc_p)->dc_block_number = cpu_to_le32(val); } while(0) |
#define put_dc_size(dc_p, val) do { (dc_p)->dc_size = cpu_to_le16(val); } while(0) |
/* Get disk child by buffer header and position in the tree node. */ |
#define B_N_CHILD(p_s_bh,n_pos) ((struct disk_child *)\ |
((p_s_bh)->b_data+BLKH_SIZE+B_NR_ITEMS(p_s_bh)*KEY_SIZE+DC_SIZE*(n_pos))) |
/* Get disk child number by buffer header and position in the tree node. */ |
#define B_N_CHILD_NUM(p_s_bh,n_pos) (dc_block_number(B_N_CHILD(p_s_bh,n_pos))) |
#define PUT_B_N_CHILD_NUM(p_s_bh,n_pos, val) (put_dc_block_number(B_N_CHILD(p_s_bh,n_pos), val )) |
/* maximal value of field child_size in structure disk_child */ |
/* child size is the combined size of all items and their headers */ |
#define MAX_CHILD_SIZE(bh) ((int)( (bh)->b_size - BLKH_SIZE )) |
/* amount of used space in buffer (not including block head) */ |
#define B_CHILD_SIZE(cur) (MAX_CHILD_SIZE(cur)-(B_FREE_SPACE(cur))) |
/* max and min number of keys in internal node */ |
#define MAX_NR_KEY(bh) ( (MAX_CHILD_SIZE(bh)-DC_SIZE)/(KEY_SIZE+DC_SIZE) ) |
#define MIN_NR_KEY(bh) (MAX_NR_KEY(bh)/2) |
/***************************************************************************/ |
/* PATH STRUCTURES AND DEFINES */ |
/***************************************************************************/ |
/* Search_by_key fills up the path from the root to the leaf as it descends the tree looking for the |
key. It uses reiserfs_bread to try to find buffers in the cache given their block number. If it |
does not find them in the cache it reads them from disk. For each node search_by_key finds using |
reiserfs_bread it then uses bin_search to look through that node. bin_search will find the |
position of the block_number of the next node if it is looking through an internal node. If it |
is looking through a leaf node bin_search will find the position of the item which has key either |
equal to given key, or which is the maximal key less than the given key. */ |
struct path_element { |
struct buffer_head * pe_buffer; /* Pointer to the buffer at the path in the tree. */ |
int pe_position; /* Position in the tree node which is placed in the */ |
/* buffer above. */ |
}; |
#define MAX_HEIGHT 5 /* maximal height of a tree. don't change this without changing JOURNAL_PER_BALANCE_CNT */ |
#define EXTENDED_MAX_HEIGHT 7 /* Must be equals MAX_HEIGHT + FIRST_PATH_ELEMENT_OFFSET */ |
#define FIRST_PATH_ELEMENT_OFFSET 2 /* Must be equal to at least 2. */ |
#define ILLEGAL_PATH_ELEMENT_OFFSET 1 /* Must be equal to FIRST_PATH_ELEMENT_OFFSET - 1 */ |
#define MAX_FEB_SIZE 6 /* this MUST be MAX_HEIGHT + 1. See about FEB below */ |
/* We need to keep track of who the ancestors of nodes are. When we |
perform a search we record which nodes were visited while |
descending the tree looking for the node we searched for. This list |
of nodes is called the path. This information is used while |
performing balancing. Note that this path information may become |
invalid, and this means we must check it when using it to see if it |
is still valid. You'll need to read search_by_key and the comments |
in it, especially about decrement_counters_in_path(), to understand |
this structure. |
Paths make the code so much harder to work with and debug.... An |
enormous number of bugs are due to them, and trying to write or modify |
code that uses them just makes my head hurt. They are based on an |
excessive effort to avoid disturbing the precious VFS code.:-( The |
gods only know how we are going to SMP the code that uses them. |
znodes are the way! */ |
struct path { |
int path_length; /* Length of the array above. */ |
struct path_element path_elements[EXTENDED_MAX_HEIGHT]; /* Array of the path elements. */ |
int pos_in_item; |
}; |
#define pos_in_item(path) ((path)->pos_in_item) |
#define INITIALIZE_PATH(var) \ |
struct path var = {ILLEGAL_PATH_ELEMENT_OFFSET, } |
/* Get path element by path and path position. */ |
#define PATH_OFFSET_PELEMENT(p_s_path,n_offset) ((p_s_path)->path_elements +(n_offset)) |
/* Get buffer header at the path by path and path position. */ |
#define PATH_OFFSET_PBUFFER(p_s_path,n_offset) (PATH_OFFSET_PELEMENT(p_s_path,n_offset)->pe_buffer) |
/* Get position in the element at the path by path and path position. */ |
#define PATH_OFFSET_POSITION(p_s_path,n_offset) (PATH_OFFSET_PELEMENT(p_s_path,n_offset)->pe_position) |
#define PATH_PLAST_BUFFER(p_s_path) (PATH_OFFSET_PBUFFER((p_s_path), (p_s_path)->path_length)) |
/* you know, to the person who didn't |
write this the macro name does not |
at first suggest what it does. |
Maybe POSITION_FROM_PATH_END? Or |
maybe we should just focus on |
dumping paths... -Hans */ |
#define PATH_LAST_POSITION(p_s_path) (PATH_OFFSET_POSITION((p_s_path), (p_s_path)->path_length)) |
#define PATH_PITEM_HEAD(p_s_path) B_N_PITEM_HEAD(PATH_PLAST_BUFFER(p_s_path),PATH_LAST_POSITION(p_s_path)) |
/* in do_balance leaf has h == 0 in contrast with path structure, |
where root has level == 0. That is why we need these defines */ |
#define PATH_H_PBUFFER(p_s_path, h) PATH_OFFSET_PBUFFER (p_s_path, p_s_path->path_length - (h)) /* tb->S[h] */ |
#define PATH_H_PPARENT(path, h) PATH_H_PBUFFER (path, (h) + 1) /* tb->F[h] or tb->S[0]->b_parent */ |
#define PATH_H_POSITION(path, h) PATH_OFFSET_POSITION (path, path->path_length - (h)) |
#define PATH_H_B_ITEM_ORDER(path, h) PATH_H_POSITION(path, h + 1) /* tb->S[h]->b_item_order */ |
#define PATH_H_PATH_OFFSET(p_s_path, n_h) ((p_s_path)->path_length - (n_h)) |
#define get_last_bh(path) PATH_PLAST_BUFFER(path) |
#define get_ih(path) PATH_PITEM_HEAD(path) |
#define get_item_pos(path) PATH_LAST_POSITION(path) |
#define get_item(path) ((void *)B_N_PITEM(PATH_PLAST_BUFFER(path), PATH_LAST_POSITION (path))) |
#define item_moved(ih,path) comp_items(ih, path) |
#define path_changed(ih,path) comp_items (ih, path) |
/***************************************************************************/ |
/* MISC */ |
/***************************************************************************/ |
/* Size of pointer to the unformatted node. */ |
#define UNFM_P_SIZE (sizeof(unp_t)) |
#define UNFM_P_SHIFT 2 |
// in in-core inode key is stored on le form |
#define INODE_PKEY(inode) ((struct key *)(REISERFS_I(inode)->i_key)) |
#define MAX_UL_INT 0xffffffff |
#define MAX_INT 0x7ffffff |
#define MAX_US_INT 0xffff |
// reiserfs version 2 has max offset 60 bits. Version 1 - 32 bit offset |
#define U32_MAX (~(__u32)0) |
static inline loff_t max_reiserfs_offset (struct inode * inode) |
{ |
if (get_inode_item_key_version(inode) == KEY_FORMAT_3_5) |
return (loff_t)U32_MAX; |
return (loff_t)((~(__u64)0) >> 4); |
} |
/*#define MAX_KEY_UNIQUENESS MAX_UL_INT*/ |
#define MAX_KEY_OBJECTID MAX_UL_INT |
#define MAX_B_NUM MAX_UL_INT |
#define MAX_FC_NUM MAX_US_INT |
/* the purpose is to detect overflow of an unsigned short */ |
#define REISERFS_LINK_MAX (MAX_US_INT - 1000) |
/* The following defines are used in reiserfs_insert_item and reiserfs_append_item */ |
#define REISERFS_KERNEL_MEM 0 /* reiserfs kernel memory mode */ |
#define REISERFS_USER_MEM 1 /* reiserfs user memory mode */ |
#define fs_generation(s) (REISERFS_SB(s)->s_generation_counter) |
#define get_generation(s) atomic_read (&fs_generation(s)) |
#define FILESYSTEM_CHANGED_TB(tb) (get_generation((tb)->tb_sb) != (tb)->fs_gen) |
#define fs_changed(gen,s) (gen != get_generation (s)) |
/***************************************************************************/ |
/* FIXATE NODES */ |
/***************************************************************************/ |
#define VI_TYPE_LEFT_MERGEABLE 1 |
#define VI_TYPE_RIGHT_MERGEABLE 2 |
/* To make any changes in the tree we always first find node, that |
contains item to be changed/deleted or place to insert a new |
item. We call this node S. To do balancing we need to decide what |
we will shift to left/right neighbor, or to a new node, where new |
item will be etc. To make this analysis simpler we build virtual |
node. Virtual node is an array of items, that will replace items of |
node S. (For instance if we are going to delete an item, virtual |
node does not contain it). Virtual node keeps information about |
item sizes and types, mergeability of first and last items, sizes |
of all entries in directory item. We use this array of items when |
calculating what we can shift to neighbors and how many nodes we |
have to have if we do not any shiftings, if we shift to left/right |
neighbor or to both. */ |
struct virtual_item |
{ |
int vi_index; // index in the array of item operations |
unsigned short vi_type; // left/right mergeability |
unsigned short vi_item_len; /* length of item that it will have after balancing */ |
struct item_head * vi_ih; |
const char * vi_item; // body of item (old or new) |
const void * vi_new_data; // 0 always but paste mode |
void * vi_uarea; // item specific area |
}; |
struct virtual_node |
{ |
char * vn_free_ptr; /* this is a pointer to the free space in the buffer */ |
unsigned short vn_nr_item; /* number of items in virtual node */ |
short vn_size; /* size of node , that node would have if it has unlimited size and no balancing is performed */ |
short vn_mode; /* mode of balancing (paste, insert, delete, cut) */ |
short vn_affected_item_num; |
short vn_pos_in_item; |
struct item_head * vn_ins_ih; /* item header of inserted item, 0 for other modes */ |
const void * vn_data; |
struct virtual_item * vn_vi; /* array of items (including a new one, excluding item to be deleted) */ |
}; |
/* used by directory items when creating virtual nodes */ |
struct direntry_uarea { |
int flags; |
__u16 entry_count; |
__u16 entry_sizes[1]; |
} __attribute__ ((__packed__)) ; |
/***************************************************************************/ |
/* TREE BALANCE */ |
/***************************************************************************/ |
/* This temporary structure is used in tree balance algorithms, and |
constructed as we go to the extent that its various parts are |
needed. It contains arrays of nodes that can potentially be |
involved in the balancing of node S, and parameters that define how |
each of the nodes must be balanced. Note that in these algorithms |
for balancing the worst case is to need to balance the current node |
S and the left and right neighbors and all of their parents plus |
create a new node. We implement S1 balancing for the leaf nodes |
and S0 balancing for the internal nodes (S1 and S0 are defined in |
our papers.)*/ |
#define MAX_FREE_BLOCK 7 /* size of the array of buffers to free at end of do_balance */ |
/* maximum number of FEB blocknrs on a single level */ |
#define MAX_AMOUNT_NEEDED 2 |
/* someday somebody will prefix every field in this struct with tb_ */ |
struct tree_balance |
{ |
int tb_mode; |
int need_balance_dirty; |
struct super_block * tb_sb; |
struct reiserfs_transaction_handle *transaction_handle ; |
struct path * tb_path; |
struct buffer_head * L[MAX_HEIGHT]; /* array of left neighbors of nodes in the path */ |
struct buffer_head * R[MAX_HEIGHT]; /* array of right neighbors of nodes in the path*/ |
struct buffer_head * FL[MAX_HEIGHT]; /* array of fathers of the left neighbors */ |
struct buffer_head * FR[MAX_HEIGHT]; /* array of fathers of the right neighbors */ |
struct buffer_head * CFL[MAX_HEIGHT]; /* array of common parents of center node and its left neighbor */ |
struct buffer_head * CFR[MAX_HEIGHT]; /* array of common parents of center node and its right neighbor */ |
struct buffer_head * FEB[MAX_FEB_SIZE]; /* array of empty buffers. Number of buffers in array equals |
cur_blknum. */ |
struct buffer_head * used[MAX_FEB_SIZE]; |
struct buffer_head * thrown[MAX_FEB_SIZE]; |
int lnum[MAX_HEIGHT]; /* array of number of items which must be |
shifted to the left in order to balance the |
current node; for leaves includes item that |
will be partially shifted; for internal |
nodes, it is the number of child pointers |
rather than items. It includes the new item |
being created. The code sometimes subtracts |
one to get the number of wholly shifted |
items for other purposes. */ |
int rnum[MAX_HEIGHT]; /* substitute right for left in comment above */ |
int lkey[MAX_HEIGHT]; /* array indexed by height h mapping the key delimiting L[h] and |
S[h] to its item number within the node CFL[h] */ |
int rkey[MAX_HEIGHT]; /* substitute r for l in comment above */ |
int insert_size[MAX_HEIGHT]; /* the number of bytes by we are trying to add or remove from |
S[h]. A negative value means removing. */ |
int blknum[MAX_HEIGHT]; /* number of nodes that will replace node S[h] after |
balancing on the level h of the tree. If 0 then S is |
being deleted, if 1 then S is remaining and no new nodes |
are being created, if 2 or 3 then 1 or 2 new nodes is |
being created */ |
/* fields that are used only for balancing leaves of the tree */ |
int cur_blknum; /* number of empty blocks having been already allocated */ |
int s0num; /* number of items that fall into left most node when S[0] splits */ |
int s1num; /* number of items that fall into first new node when S[0] splits */ |
int s2num; /* number of items that fall into second new node when S[0] splits */ |
int lbytes; /* number of bytes which can flow to the left neighbor from the left */ |
/* most liquid item that cannot be shifted from S[0] entirely */ |
/* if -1 then nothing will be partially shifted */ |
int rbytes; /* number of bytes which will flow to the right neighbor from the right */ |
/* most liquid item that cannot be shifted from S[0] entirely */ |
/* if -1 then nothing will be partially shifted */ |
int s1bytes; /* number of bytes which flow to the first new node when S[0] splits */ |
/* note: if S[0] splits into 3 nodes, then items do not need to be cut */ |
int s2bytes; |
struct buffer_head * buf_to_free[MAX_FREE_BLOCK]; /* buffers which are to be freed after do_balance finishes by unfix_nodes */ |
char * vn_buf; /* kmalloced memory. Used to create |
virtual node and keep map of |
dirtied bitmap blocks */ |
int vn_buf_size; /* size of the vn_buf */ |
struct virtual_node * tb_vn; /* VN starts after bitmap of bitmap blocks */ |
int fs_gen; /* saved value of `reiserfs_generation' counter |
see FILESYSTEM_CHANGED() macro in reiserfs_fs.h */ |
#ifdef DISPLACE_NEW_PACKING_LOCALITIES |
struct key key; /* key pointer, to pass to block allocator or |
another low-level subsystem */ |
#endif |
} ; |
/* These are modes of balancing */ |
/* When inserting an item. */ |
#define M_INSERT 'i' |
/* When inserting into (directories only) or appending onto an already |
existant item. */ |
#define M_PASTE 'p' |
/* When deleting an item. */ |
#define M_DELETE 'd' |
/* When truncating an item or removing an entry from a (directory) item. */ |
#define M_CUT 'c' |
/* used when balancing on leaf level skipped (in reiserfsck) */ |
#define M_INTERNAL 'n' |
/* When further balancing is not needed, then do_balance does not need |
to be called. */ |
#define M_SKIP_BALANCING 's' |
#define M_CONVERT 'v' |
/* modes of leaf_move_items */ |
#define LEAF_FROM_S_TO_L 0 |
#define LEAF_FROM_S_TO_R 1 |
#define LEAF_FROM_R_TO_L 2 |
#define LEAF_FROM_L_TO_R 3 |
#define LEAF_FROM_S_TO_SNEW 4 |
#define FIRST_TO_LAST 0 |
#define LAST_TO_FIRST 1 |
/* used in do_balance for passing parent of node information that has |
been gotten from tb struct */ |
struct buffer_info { |
struct tree_balance * tb; |
struct buffer_head * bi_bh; |
struct buffer_head * bi_parent; |
int bi_position; |
}; |
/* there are 4 types of items: stat data, directory item, indirect, direct. |
+-------------------+------------+--------------+------------+ |
| | k_offset | k_uniqueness | mergeable? | |
+-------------------+------------+--------------+------------+ |
| stat data | 0 | 0 | no | |
+-------------------+------------+--------------+------------+ |
| 1st directory item| DOT_OFFSET |DIRENTRY_UNIQUENESS| no | |
| non 1st directory | hash value | | yes | |
| item | | | | |
+-------------------+------------+--------------+------------+ |
| indirect item | offset + 1 |TYPE_INDIRECT | if this is not the first indirect item of the object |
+-------------------+------------+--------------+------------+ |
| direct item | offset + 1 |TYPE_DIRECT | if not this is not the first direct item of the object |
+-------------------+------------+--------------+------------+ |
*/ |
struct item_operations { |
int (*bytes_number) (struct item_head * ih, int block_size); |
void (*decrement_key) (struct cpu_key *); |
int (*is_left_mergeable) (struct key * ih, unsigned long bsize); |
void (*print_item) (struct item_head *, char * item); |
void (*check_item) (struct item_head *, char * item); |
int (*create_vi) (struct virtual_node * vn, struct virtual_item * vi, |
int is_affected, int insert_size); |
int (*check_left) (struct virtual_item * vi, int free, |
int start_skip, int end_skip); |
int (*check_right) (struct virtual_item * vi, int free); |
int (*part_size) (struct virtual_item * vi, int from, int to); |
int (*unit_num) (struct virtual_item * vi); |
void (*print_vi) (struct virtual_item * vi); |
}; |
extern struct item_operations stat_data_ops, indirect_ops, direct_ops, |
direntry_ops; |
extern struct item_operations * item_ops [TYPE_ANY + 1]; |
#define op_bytes_number(ih,bsize) item_ops[le_ih_k_type (ih)]->bytes_number (ih, bsize) |
#define op_is_left_mergeable(key,bsize) item_ops[le_key_k_type (le_key_version (key), key)]->is_left_mergeable (key, bsize) |
#define op_print_item(ih,item) item_ops[le_ih_k_type (ih)]->print_item (ih, item) |
#define op_check_item(ih,item) item_ops[le_ih_k_type (ih)]->check_item (ih, item) |
#define op_create_vi(vn,vi,is_affected,insert_size) item_ops[le_ih_k_type ((vi)->vi_ih)]->create_vi (vn,vi,is_affected,insert_size) |
#define op_check_left(vi,free,start_skip,end_skip) item_ops[(vi)->vi_index]->check_left (vi, free, start_skip, end_skip) |
#define op_check_right(vi,free) item_ops[(vi)->vi_index]->check_right (vi, free) |
#define op_part_size(vi,from,to) item_ops[(vi)->vi_index]->part_size (vi, from, to) |
#define op_unit_num(vi) item_ops[(vi)->vi_index]->unit_num (vi) |
#define op_print_vi(vi) item_ops[(vi)->vi_index]->print_vi (vi) |
#define COMP_KEYS comp_keys |
#define COMP_SHORT_KEYS comp_short_keys |
/*#define keys_of_same_object comp_short_keys*/ |
/* number of blocks pointed to by the indirect item */ |
#define I_UNFM_NUM(p_s_ih) ( ih_item_len(p_s_ih) / UNFM_P_SIZE ) |
/* the used space within the unformatted node corresponding to pos within the item pointed to by ih */ |
#define I_POS_UNFM_SIZE(ih,pos,size) (((pos) == I_UNFM_NUM(ih) - 1 ) ? (size) - ih_free_space(ih) : (size)) |
/* number of bytes contained by the direct item or the unformatted nodes the indirect item points to */ |
/* get the item header */ |
#define B_N_PITEM_HEAD(bh,item_num) ( (struct item_head * )((bh)->b_data + BLKH_SIZE) + (item_num) ) |
/* get key */ |
#define B_N_PDELIM_KEY(bh,item_num) ( (struct key * )((bh)->b_data + BLKH_SIZE) + (item_num) ) |
/* get the key */ |
#define B_N_PKEY(bh,item_num) ( &(B_N_PITEM_HEAD(bh,item_num)->ih_key) ) |
/* get item body */ |
#define B_N_PITEM(bh,item_num) ( (bh)->b_data + ih_location(B_N_PITEM_HEAD((bh),(item_num)))) |
/* get the stat data by the buffer header and the item order */ |
#define B_N_STAT_DATA(bh,nr) \ |
( (struct stat_data *)((bh)->b_data + ih_location(B_N_PITEM_HEAD((bh),(nr))) ) ) |
/* following defines use reiserfs buffer header and item header */ |
/* get stat-data */ |
#define B_I_STAT_DATA(bh, ih) ( (struct stat_data * )((bh)->b_data + ih_location(ih)) ) |
// this is 3976 for size==4096 |
#define MAX_DIRECT_ITEM_LEN(size) ((size) - BLKH_SIZE - 2*IH_SIZE - SD_SIZE - UNFM_P_SIZE) |
/* indirect items consist of entries which contain blocknrs, pos |
indicates which entry, and B_I_POS_UNFM_POINTER resolves to the |
blocknr contained by the entry pos points to */ |
#define B_I_POS_UNFM_POINTER(bh,ih,pos) le32_to_cpu(*(((unp_t *)B_I_PITEM(bh,ih)) + (pos))) |
#define PUT_B_I_POS_UNFM_POINTER(bh,ih,pos, val) do {*(((unp_t *)B_I_PITEM(bh,ih)) + (pos)) = cpu_to_le32(val); } while (0) |
struct reiserfs_iget_args { |
__u32 objectid ; |
__u32 dirid ; |
} ; |
/***************************************************************************/ |
/* FUNCTION DECLARATIONS */ |
/***************************************************************************/ |
/*#ifdef __KERNEL__*/ |
#define get_journal_desc_magic(bh) (bh->b_data + bh->b_size - 12) |
#define journal_trans_half(blocksize) \ |
((blocksize - sizeof (struct reiserfs_journal_desc) + sizeof (__u32) - 12) / sizeof (__u32)) |
/* journal.c see journal.c for all the comments here */ |
/* first block written in a commit. */ |
struct reiserfs_journal_desc { |
__u32 j_trans_id ; /* id of commit */ |
__u32 j_len ; /* length of commit. len +1 is the commit block */ |
__u32 j_mount_id ; /* mount id of this trans*/ |
__u32 j_realblock[1] ; /* real locations for each block */ |
} ; |
#define get_desc_trans_id(d) le32_to_cpu((d)->j_trans_id) |
#define get_desc_trans_len(d) le32_to_cpu((d)->j_len) |
#define get_desc_mount_id(d) le32_to_cpu((d)->j_mount_id) |
#define set_desc_trans_id(d,val) do { (d)->j_trans_id = cpu_to_le32 (val); } while (0) |
#define set_desc_trans_len(d,val) do { (d)->j_len = cpu_to_le32 (val); } while (0) |
#define set_desc_mount_id(d,val) do { (d)->j_mount_id = cpu_to_le32 (val); } while (0) |
/* last block written in a commit */ |
struct reiserfs_journal_commit { |
__u32 j_trans_id ; /* must match j_trans_id from the desc block */ |
__u32 j_len ; /* ditto */ |
__u32 j_realblock[1] ; /* real locations for each block */ |
} ; |
#define get_commit_trans_id(c) le32_to_cpu((c)->j_trans_id) |
#define get_commit_trans_len(c) le32_to_cpu((c)->j_len) |
#define get_commit_mount_id(c) le32_to_cpu((c)->j_mount_id) |
#define set_commit_trans_id(c,val) do { (c)->j_trans_id = cpu_to_le32 (val); } while (0) |
#define set_commit_trans_len(c,val) do { (c)->j_len = cpu_to_le32 (val); } while (0) |
/* this header block gets written whenever a transaction is considered fully flushed, and is more recent than the |
** last fully flushed transaction. fully flushed means all the log blocks and all the real blocks are on disk, |
** and this transaction does not need to be replayed. |
*/ |
struct reiserfs_journal_header { |
__u32 j_last_flush_trans_id ; /* id of last fully flushed transaction */ |
__u32 j_first_unflushed_offset ; /* offset in the log of where to start replay after a crash */ |
__u32 j_mount_id ; |
/* 12 */ struct journal_params jh_journal; |
} ; |
/* biggest tunable defines are right here */ |
#define JOURNAL_BLOCK_COUNT 8192 /* number of blocks in the journal */ |
#define JOURNAL_TRANS_MAX_DEFAULT 1024 /* biggest possible single transaction, don't change for now (8/3/99) */ |
#define JOURNAL_TRANS_MIN_DEFAULT 256 |
#define JOURNAL_MAX_BATCH_DEFAULT 900 /* max blocks to batch into one transaction, don't make this any bigger than 900 */ |
#define JOURNAL_MIN_RATIO 2 |
#define JOURNAL_MAX_COMMIT_AGE 30 |
#define JOURNAL_MAX_TRANS_AGE 30 |
#define JOURNAL_PER_BALANCE_CNT (3 * (MAX_HEIGHT-2) + 9) |
/* both of these can be as low as 1, or as high as you want. The min is the |
** number of 4k bitmap nodes preallocated on mount. New nodes are allocated |
** as needed, and released when transactions are committed. On release, if |
** the current number of nodes is > max, the node is freed, otherwise, |
** it is put on a free list for faster use later. |
*/ |
#define REISERFS_MIN_BITMAP_NODES 10 |
#define REISERFS_MAX_BITMAP_NODES 100 |
#define JBH_HASH_SHIFT 13 /* these are based on journal hash size of 8192 */ |
#define JBH_HASH_MASK 8191 |
#define _jhashfn(sb,block) \ |
(((unsigned long)sb>>L1_CACHE_SHIFT) ^ \ |
(((block)<<(JBH_HASH_SHIFT - 6)) ^ ((block) >> 13) ^ ((block) << (JBH_HASH_SHIFT - 12)))) |
#define journal_hash(t,sb,block) ((t)[_jhashfn((sb),(block)) & JBH_HASH_MASK]) |
/* finds n'th buffer with 0 being the start of this commit. Needs to go away, j_ap_blocks has changed |
** since I created this. One chunk of code in journal.c needs changing before deleting it |
*/ |
#define JOURNAL_BUFFER(j,n) ((j)->j_ap_blocks[((j)->j_start + (n)) % JOURNAL_BLOCK_COUNT]) |
// We need these to make journal.c code more readable |
#define journal_find_get_block(s, block) __find_get_block(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize) |
#define journal_getblk(s, block) __getblk(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize) |
#define journal_bread(s, block) __bread(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize) |
void reiserfs_commit_for_inode(struct inode *) ; |
void reiserfs_update_inode_transaction(struct inode *) ; |
void reiserfs_wait_on_write_block(struct super_block *s) ; |
void reiserfs_block_writes(struct reiserfs_transaction_handle *th) ; |
void reiserfs_allow_writes(struct super_block *s) ; |
void reiserfs_check_lock_depth(char *caller) ; |
void reiserfs_prepare_for_journal(struct super_block *, struct buffer_head *bh, int wait) ; |
void reiserfs_restore_prepared_buffer(struct super_block *, struct buffer_head *bh) ; |
int journal_init(struct super_block *, const char * j_dev_name, int old_format) ; |
int journal_release(struct reiserfs_transaction_handle*, struct super_block *) ; |
int journal_release_error(struct reiserfs_transaction_handle*, struct super_block *) ; |
int journal_end(struct reiserfs_transaction_handle *, struct super_block *, unsigned long) ; |
int journal_end_sync(struct reiserfs_transaction_handle *, struct super_block *, unsigned long) ; |
int journal_mark_dirty_nolog(struct reiserfs_transaction_handle *, struct super_block *, struct buffer_head *bh) ; |
int journal_mark_freed(struct reiserfs_transaction_handle *, struct super_block *, b_blocknr_t blocknr) ; |
int push_journal_writer(char *w) ; |
int pop_journal_writer(int windex) ; |
int journal_transaction_should_end(struct reiserfs_transaction_handle *, int) ; |
int reiserfs_in_journal(struct super_block *p_s_sb, int bmap_nr, int bit_nr, int searchall, b_blocknr_t *next) ; |
int journal_begin(struct reiserfs_transaction_handle *, struct super_block *p_s_sb, unsigned long) ; |
void flush_async_commits(struct super_block *p_s_sb) ; |
int buffer_journaled(const struct buffer_head *bh) ; |
int mark_buffer_journal_new(struct buffer_head *bh) ; |
int reiserfs_add_page_to_flush_list(struct reiserfs_transaction_handle *, |
struct inode *, struct buffer_head *) ; |
int reiserfs_remove_page_from_flush_list(struct reiserfs_transaction_handle *, |
struct inode *) ; |
int reiserfs_allocate_list_bitmaps(struct super_block *s, struct reiserfs_list_bitmap *, int) ; |
/* why is this kerplunked right here? */ |
static inline int reiserfs_buffer_prepared(const struct buffer_head *bh) { |
if (bh && test_bit(BH_JPrepared, &bh->b_state)) |
return 1 ; |
else |
return 0 ; |
} |
/* buffer was journaled, waiting to get to disk */ |
static inline int buffer_journal_dirty(const struct buffer_head *bh) { |
if (bh) |
return test_bit(BH_JDirty_wait, &bh->b_state) ; |
else |
return 0 ; |
} |
static inline int mark_buffer_notjournal_dirty(struct buffer_head *bh) { |
if (bh) |
clear_bit(BH_JDirty_wait, &bh->b_state) ; |
return 0 ; |
} |
static inline int mark_buffer_notjournal_new(struct buffer_head *bh) { |
if (bh) { |
clear_bit(BH_JNew, &bh->b_state) ; |
} |
return 0 ; |
} |
void add_save_link (struct reiserfs_transaction_handle * th, |
struct inode * inode, int truncate); |
void remove_save_link (struct inode * inode, int truncate); |
/* objectid.c */ |
__u32 reiserfs_get_unused_objectid (struct reiserfs_transaction_handle *th); |
void reiserfs_release_objectid (struct reiserfs_transaction_handle *th, __u32 objectid_to_release); |
int reiserfs_convert_objectid_map_v1(struct super_block *) ; |
/* stree.c */ |
int B_IS_IN_TREE(const struct buffer_head *); |
extern inline void copy_short_key (void * to, const void * from); |
extern inline void copy_item_head(struct item_head * p_v_to, |
const struct item_head * p_v_from); |
// first key is in cpu form, second - le |
extern inline int comp_keys (const struct key * le_key, |
const struct cpu_key * cpu_key); |
extern inline int comp_short_keys (const struct key * le_key, |
const struct cpu_key * cpu_key); |
extern inline void le_key2cpu_key (struct cpu_key * to, const struct key * from); |
// both are cpu keys |
extern inline int comp_cpu_keys (const struct cpu_key *, const struct cpu_key *); |
extern inline int comp_short_cpu_keys (const struct cpu_key *, |
const struct cpu_key *); |
extern inline void cpu_key2cpu_key (struct cpu_key *, const struct cpu_key *); |
// both are in le form |
extern inline int comp_le_keys (const struct key *, const struct key *); |
extern inline int comp_short_le_keys (const struct key *, const struct key *); |
// |
// get key version from on disk key - kludge |
// |
static inline int le_key_version (const struct key * key) |
{ |
int type; |
type = offset_v2_k_type( &(key->u.k_offset_v2)); |
if (type != TYPE_DIRECT && type != TYPE_INDIRECT && type != TYPE_DIRENTRY) |
return KEY_FORMAT_3_5; |
return KEY_FORMAT_3_6; |
} |
static inline void copy_key (struct key *to, const struct key *from) |
{ |
memcpy (to, from, KEY_SIZE); |
} |
int comp_items (const struct item_head * stored_ih, const struct path * p_s_path); |
const struct key * get_rkey (const struct path * p_s_chk_path, |
const struct super_block * p_s_sb); |
inline int bin_search (const void * p_v_key, const void * p_v_base, |
int p_n_num, int p_n_width, int * p_n_pos); |
int search_by_key (struct super_block *, const struct cpu_key *, |
struct path *, int); |
#define search_item(s,key,path) search_by_key (s, key, path, DISK_LEAF_NODE_LEVEL) |
int search_for_position_by_key (struct super_block * p_s_sb, |
const struct cpu_key * p_s_cpu_key, |
struct path * p_s_search_path); |
extern inline void decrement_bcount (struct buffer_head * p_s_bh); |
void decrement_counters_in_path (struct path * p_s_search_path); |
void pathrelse (struct path * p_s_search_path); |
int reiserfs_check_path(struct path *p) ; |
void pathrelse_and_restore (struct super_block *s, struct path * p_s_search_path); |
int reiserfs_insert_item (struct reiserfs_transaction_handle *th, |
struct path * path, |
const struct cpu_key * key, |
struct item_head * ih, const char * body); |
int reiserfs_paste_into_item (struct reiserfs_transaction_handle *th, |
struct path * path, |
const struct cpu_key * key, |
const char * body, int paste_size); |
int reiserfs_cut_from_item (struct reiserfs_transaction_handle *th, |
struct path * path, |
struct cpu_key * key, |
struct inode * inode, |
struct page *page, |
loff_t new_file_size); |
int reiserfs_delete_item (struct reiserfs_transaction_handle *th, |
struct path * path, |
const struct cpu_key * key, |
struct inode * inode, |
struct buffer_head * p_s_un_bh); |
void reiserfs_delete_solid_item (struct reiserfs_transaction_handle *th, |
struct key * key); |
void reiserfs_delete_object (struct reiserfs_transaction_handle *th, struct inode * p_s_inode); |
void reiserfs_do_truncate (struct reiserfs_transaction_handle *th, |
struct inode * p_s_inode, struct page *, |
int update_timestamps); |
#define i_block_size(inode) ((inode)->i_sb->s_blocksize) |
#define file_size(inode) ((inode)->i_size) |
#define tail_size(inode) (file_size (inode) & (i_block_size (inode) - 1)) |
#define tail_has_to_be_packed(inode) (have_large_tails ((inode)->i_sb)?\ |
!STORE_TAIL_IN_UNFM_S1(file_size (inode), tail_size(inode), inode->i_sb->s_blocksize):have_small_tails ((inode)->i_sb)?!STORE_TAIL_IN_UNFM_S2(file_size (inode), tail_size(inode), inode->i_sb->s_blocksize):0 ) |
void padd_item (char * item, int total_length, int length); |
/* inode.c */ |
void restart_transaction(struct reiserfs_transaction_handle *th, struct inode *inode, struct path *path); |
void reiserfs_read_locked_inode(struct inode * inode, struct reiserfs_iget_args *args) ; |
int reiserfs_find_actor(struct inode * inode, void *p) ; |
int reiserfs_init_locked_inode(struct inode * inode, void *p) ; |
void reiserfs_delete_inode (struct inode * inode); |
void reiserfs_write_inode (struct inode * inode, int) ; |
struct dentry *reiserfs_get_dentry(struct super_block *, void *) ; |
struct dentry *reiserfs_decode_fh(struct super_block *sb, __u32 *data, |
int len, int fhtype, |
int (*acceptable)(void *contect, struct dentry *de), |
void *context) ; |
int reiserfs_encode_fh( struct dentry *dentry, __u32 *data, int *lenp, |
int connectable ); |
int reiserfs_prepare_write(struct file *, struct page *, unsigned, unsigned) ; |
void reiserfs_truncate_file(struct inode *, int update_timestamps) ; |
void make_cpu_key (struct cpu_key * cpu_key, struct inode * inode, loff_t offset, |
int type, int key_length); |
void make_le_item_head (struct item_head * ih, const struct cpu_key * key, |
int version, |
loff_t offset, int type, int length, int entry_count); |
struct inode * reiserfs_iget (struct super_block * s, |
const struct cpu_key * key); |
int reiserfs_new_inode (struct reiserfs_transaction_handle *th, |
struct inode * dir, int mode, |
const char * symname, loff_t i_size, |
struct dentry *dentry, struct inode *inode); |
int reiserfs_sync_inode (struct reiserfs_transaction_handle *th, struct inode * inode); |
void reiserfs_update_sd (struct reiserfs_transaction_handle *th, struct inode * inode); |
void sd_attrs_to_i_attrs( __u16 sd_attrs, struct inode *inode ); |
void i_attrs_to_sd_attrs( struct inode *inode, __u16 *sd_attrs ); |
/* namei.c */ |
inline void set_de_name_and_namelen (struct reiserfs_dir_entry * de); |
int search_by_entry_key (struct super_block * sb, const struct cpu_key * key, |
struct path * path, |
struct reiserfs_dir_entry * de); |
struct dentry *reiserfs_get_parent(struct dentry *) ; |
/* procfs.c */ |
#if defined( CONFIG_PROC_FS ) && defined( CONFIG_REISERFS_PROC_INFO ) |
#define REISERFS_PROC_INFO |
#else |
#undef REISERFS_PROC_INFO |
#endif |
int reiserfs_proc_info_init( struct super_block *sb ); |
int reiserfs_proc_info_done( struct super_block *sb ); |
struct proc_dir_entry *reiserfs_proc_register_global( char *name, |
read_proc_t *func ); |
void reiserfs_proc_unregister_global( const char *name ); |
int reiserfs_proc_info_global_init( void ); |
int reiserfs_proc_info_global_done( void ); |
int reiserfs_global_version_in_proc( char *buffer, char **start, off_t offset, |
int count, int *eof, void *data ); |
#if defined( REISERFS_PROC_INFO ) |
#define PROC_EXP( e ) e |
#define MAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) |
#define __PINFO( sb ) REISERFS_SB(sb) -> s_proc_info_data |
#define PROC_INFO_MAX( sb, field, value ) \ |
__PINFO( sb ).field = \ |
MAX( REISERFS_SB( sb ) -> s_proc_info_data.field, value ) |
#define PROC_INFO_INC( sb, field ) ( ++ ( __PINFO( sb ).field ) ) |
#define PROC_INFO_ADD( sb, field, val ) ( __PINFO( sb ).field += ( val ) ) |
#define PROC_INFO_BH_STAT( sb, bh, level ) \ |
PROC_INFO_INC( sb, sbk_read_at[ ( level ) ] ); \ |
PROC_INFO_ADD( sb, free_at[ ( level ) ], B_FREE_SPACE( bh ) ); \ |
PROC_INFO_ADD( sb, items_at[ ( level ) ], B_NR_ITEMS( bh ) ) |
#else |
#define PROC_EXP( e ) |
#define VOID_V ( ( void ) 0 ) |
#define PROC_INFO_MAX( sb, field, value ) VOID_V |
#define PROC_INFO_INC( sb, field ) VOID_V |
#define PROC_INFO_ADD( sb, field, val ) VOID_V |
#define PROC_INFO_BH_STAT( p_s_sb, p_s_bh, n_node_level ) VOID_V |
#endif |
/* dir.c */ |
extern struct inode_operations reiserfs_dir_inode_operations; |
extern struct file_operations reiserfs_dir_operations; |
/* tail_conversion.c */ |
int direct2indirect (struct reiserfs_transaction_handle *, struct inode *, struct path *, struct buffer_head *, loff_t); |
int indirect2direct (struct reiserfs_transaction_handle *, struct inode *, struct page *, struct path *, const struct cpu_key *, loff_t, char *); |
void reiserfs_unmap_buffer(struct buffer_head *) ; |
/* file.c */ |
extern struct inode_operations reiserfs_file_inode_operations; |
extern struct file_operations reiserfs_file_operations; |
extern struct address_space_operations reiserfs_address_space_operations ; |
/* fix_nodes.c */ |
#ifdef CONFIG_REISERFS_CHECK |
void * reiserfs_kmalloc (size_t size, int flags, struct super_block * s); |
void reiserfs_kfree (const void * vp, size_t size, struct super_block * s); |
#else |
#define reiserfs_kmalloc(x, y, z) kmalloc(x, y) |
#define reiserfs_kfree(x, y, z) kfree(x) |
#endif |
int fix_nodes (int n_op_mode, struct tree_balance * p_s_tb, |
struct item_head * p_s_ins_ih, const void *); |
void unfix_nodes (struct tree_balance *); |
void free_buffers_in_tb (struct tree_balance * p_s_tb); |
/* prints.c */ |
void reiserfs_panic (struct super_block * s, const char * fmt, ...) |
__attribute__ ( ( noreturn ) );/* __attribute__( ( format ( printf, 2, 3 ) ) ) */ |
void reiserfs_debug (struct super_block *s, int level, const char * fmt, ...); |
/* __attribute__( ( format ( printf, 3, 4 ) ) ); */ |
void print_virtual_node (struct virtual_node * vn); |
void print_indirect_item (struct buffer_head * bh, int item_num); |
void store_print_tb (struct tree_balance * tb); |
void print_cur_tb (char * mes); |
void print_de (struct reiserfs_dir_entry * de); |
void print_bi (struct buffer_info * bi, char * mes); |
#define PRINT_LEAF_ITEMS 1 /* print all items */ |
#define PRINT_DIRECTORY_ITEMS 2 /* print directory items */ |
#define PRINT_DIRECT_ITEMS 4 /* print contents of direct items */ |
void print_block (struct buffer_head * bh, ...); |
void print_path (struct tree_balance * tb, struct path * path); |
void print_bmap (struct super_block * s, int silent); |
void print_bmap_block (int i, char * data, int size, int silent); |
/*void print_super_block (struct super_block * s, char * mes);*/ |
void print_objectid_map (struct super_block * s); |
void print_block_head (struct buffer_head * bh, char * mes); |
void check_leaf (struct buffer_head * bh); |
void check_internal (struct buffer_head * bh); |
void print_statistics (struct super_block * s); |
char * reiserfs_hashname(int code); |
/* lbalance.c */ |
int leaf_move_items (int shift_mode, struct tree_balance * tb, int mov_num, int mov_bytes, struct buffer_head * Snew); |
int leaf_shift_left (struct tree_balance * tb, int shift_num, int shift_bytes); |
int leaf_shift_right (struct tree_balance * tb, int shift_num, int shift_bytes); |
void leaf_delete_items (struct buffer_info * cur_bi, int last_first, int first, int del_num, int del_bytes); |
void leaf_insert_into_buf (struct buffer_info * bi, int before, |
struct item_head * inserted_item_ih, const char * inserted_item_body, int zeros_number); |
void leaf_paste_in_buffer (struct buffer_info * bi, int pasted_item_num, |
int pos_in_item, int paste_size, const char * body, int zeros_number); |
void leaf_cut_from_buffer (struct buffer_info * bi, int cut_item_num, int pos_in_item, |
int cut_size); |
void leaf_paste_entries (struct buffer_head * bh, int item_num, int before, |
int new_entry_count, struct reiserfs_de_head * new_dehs, const char * records, int paste_size); |
/* ibalance.c */ |
int balance_internal (struct tree_balance * , int, int, struct item_head * , |
struct buffer_head **); |
/* do_balance.c */ |
inline void do_balance_mark_leaf_dirty (struct tree_balance * tb, |
struct buffer_head * bh, int flag); |
#define do_balance_mark_internal_dirty do_balance_mark_leaf_dirty |
#define do_balance_mark_sb_dirty do_balance_mark_leaf_dirty |
void do_balance (struct tree_balance * tb, struct item_head * ih, |
const char * body, int flag); |
void reiserfs_invalidate_buffer (struct tree_balance * tb, struct buffer_head * bh); |
int get_left_neighbor_position (struct tree_balance * tb, int h); |
int get_right_neighbor_position (struct tree_balance * tb, int h); |
void replace_key (struct tree_balance * tb, struct buffer_head *, int, struct buffer_head *, int); |
void replace_lkey (struct tree_balance *, int, struct item_head *); |
void replace_rkey (struct tree_balance *, int, struct item_head *); |
void make_empty_node (struct buffer_info *); |
struct buffer_head * get_FEB (struct tree_balance *); |
/* bitmap.c */ |
/* structure contains hints for block allocator, and it is a container for |
* arguments, such as node, search path, transaction_handle, etc. */ |
struct __reiserfs_blocknr_hint { |
struct inode * inode; /* inode passed to allocator, if we allocate unf. nodes */ |
long block; /* file offset, in blocks */ |
struct key key; |
struct path * path; /* search path, used by allocator to deternine search_start by |
* various ways */ |
struct reiserfs_transaction_handle * th; /* transaction handle is needed to log super blocks and |
* bitmap blocks changes */ |
b_blocknr_t beg, end; |
b_blocknr_t search_start; /* a field used to transfer search start value (block number) |
* between different block allocator procedures |
* (determine_search_start() and others) */ |
int prealloc_size; /* is set in determine_prealloc_size() function, used by underlayed |
* function that do actual allocation */ |
int formatted_node:1; /* the allocator uses different polices for getting disk space for |
* formatted/unformatted blocks with/without preallocation */ |
int preallocate:1; |
}; |
typedef struct __reiserfs_blocknr_hint reiserfs_blocknr_hint_t; |
int reiserfs_parse_alloc_options (struct super_block *, char *); |
int is_reusable (struct super_block * s, b_blocknr_t block, int bit_value); |
void reiserfs_free_block (struct reiserfs_transaction_handle *th, b_blocknr_t); |
int reiserfs_allocate_blocknrs(reiserfs_blocknr_hint_t *, b_blocknr_t * , int, int); |
extern inline int reiserfs_new_form_blocknrs (struct tree_balance * tb, |
b_blocknr_t *new_blocknrs, int amount_needed) |
{ |
reiserfs_blocknr_hint_t hint = { |
.th = tb->transaction_handle, |
.path = tb->tb_path, |
.inode = NULL, |
.key = tb->key, |
.block = 0, |
.formatted_node = 1 |
}; |
return reiserfs_allocate_blocknrs(&hint, new_blocknrs, amount_needed, 0); |
} |
extern inline int reiserfs_new_unf_blocknrs (struct reiserfs_transaction_handle *th, |
struct inode *inode, |
b_blocknr_t *new_blocknrs, |
struct path * path, long block) |
{ |
reiserfs_blocknr_hint_t hint = { |
.th = th, |
.path = path, |
.inode = inode, |
.block = block, |
.formatted_node = 0, |
.preallocate = 0 |
}; |
return reiserfs_allocate_blocknrs(&hint, new_blocknrs, 1, 0); |
} |
#ifdef REISERFS_PREALLOCATE |
extern inline int reiserfs_new_unf_blocknrs2(struct reiserfs_transaction_handle *th, |
struct inode * inode, |
b_blocknr_t *new_blocknrs, |
struct path * path, long block) |
{ |
reiserfs_blocknr_hint_t hint = { |
.th = th, |
.path = path, |
.inode = inode, |
.block = block, |
.formatted_node = 0, |
.preallocate = 1 |
}; |
return reiserfs_allocate_blocknrs(&hint, new_blocknrs, 1, 0); |
} |
void reiserfs_discard_prealloc (struct reiserfs_transaction_handle *th, |
struct inode * inode); |
void reiserfs_discard_all_prealloc (struct reiserfs_transaction_handle *th); |
#endif |
void reiserfs_claim_blocks_to_be_allocated( struct super_block *sb, int blocks); |
void reiserfs_release_claimed_blocks( struct super_block *sb, int blocks); |
int reiserfs_can_fit_pages(struct super_block *sb); |
/* hashes.c */ |
__u32 keyed_hash (const signed char *msg, int len); |
__u32 yura_hash (const signed char *msg, int len); |
__u32 r5_hash (const signed char *msg, int len); |
/* the ext2 bit routines adjust for big or little endian as |
** appropriate for the arch, so in our laziness we use them rather |
** than using the bit routines they call more directly. These |
** routines must be used when changing on disk bitmaps. */ |
#define reiserfs_test_and_set_le_bit ext2_set_bit |
#define reiserfs_test_and_clear_le_bit ext2_clear_bit |
#define reiserfs_test_le_bit ext2_test_bit |
#define reiserfs_find_next_zero_le_bit ext2_find_next_zero_bit |
/* sometimes reiserfs_truncate may require to allocate few new blocks |
to perform indirect2direct conversion. People probably used to |
think, that truncate should work without problems on a filesystem |
without free disk space. They may complain that they can not |
truncate due to lack of free disk space. This spare space allows us |
to not worry about it. 500 is probably too much, but it should be |
absolutely safe */ |
#define SPARE_SPACE 500 |
/* prototypes from ioctl.c */ |
int reiserfs_ioctl (struct inode * inode, struct file * filp, |
unsigned int cmd, unsigned long arg); |
int reiserfs_unpack (struct inode * inode, struct file * filp); |
/* 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 EXT2_IOC_GETFLAGS |
#define REISERFS_IOC_SETFLAGS EXT2_IOC_SETFLAGS |
#define REISERFS_IOC_GETVERSION EXT2_IOC_GETVERSION |
#define REISERFS_IOC_SETVERSION EXT2_IOC_SETVERSION |
/* Locking primitives */ |
/* Right now we are still falling back to (un)lock_kernel, but eventually that |
would evolve into real per-fs locks */ |
#define reiserfs_write_lock( sb ) lock_kernel() |
#define reiserfs_write_unlock( sb ) unlock_kernel() |
#endif /* _LINUX_REISER_FS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/acpi_serial.h |
---|
0,0 → 1,107 |
/* |
* linux/include/linux/acpi_serial.h |
* |
* Copyright (C) 2000 Hewlett-Packard Co. |
* Copyright (C) 2000 Khalid Aziz <khalid_aziz@hp.com> |
* |
* Definitions for ACPI defined serial ports (headless console and |
* debug ports) |
* |
*/ |
#include <linux/serial.h> |
extern void setup_serial_acpi(void *); |
#define ACPI_SIG_LEN 4 |
/* ACPI table signatures */ |
#define ACPI_SPCRT_SIGNATURE "SPCR" |
#define ACPI_DBGPT_SIGNATURE "DBGP" |
/* Interface type as defined in ACPI serial port tables */ |
#define ACPI_SERIAL_INTFC_16550 0 |
#define ACPI_SERIAL_INTFC_16450 1 |
/* Interrupt types for ACPI serial port tables */ |
#define ACPI_SERIAL_INT_PCAT 0x01 |
#define ACPI_SERIAL_INT_APIC 0x02 |
#define ACPI_SERIAL_INT_SAPIC 0x04 |
/* Baud rates as defined in ACPI serial port tables */ |
#define ACPI_SERIAL_BAUD_9600 3 |
#define ACPI_SERIAL_BAUD_19200 4 |
#define ACPI_SERIAL_BAUD_57600 6 |
#define ACPI_SERIAL_BAUD_115200 7 |
/* Parity as defined in ACPI serial port tables */ |
#define ACPI_SERIAL_PARITY_NONE 0 |
/* Flow control methods as defined in ACPI serial port tables */ |
#define ACPI_SERIAL_FLOW_DCD 0x01 |
#define ACPI_SERIAL_FLOW_RTS 0x02 |
#define ACPI_SERIAL_FLOW_XON 0x04 |
/* Terminal types as defined in ACPI serial port tables */ |
#define ACPI_SERIAL_TERM_VT100 0 |
#define ACPI_SERIAL_TERM_VT100X 1 |
/* PCI Flags as defined by SPCR table */ |
#define ACPI_SERIAL_PCIFLAG_PNP 0x00000001 |
/* Space ID as defined in base address structure in ACPI serial port tables */ |
#define ACPI_SERIAL_MEM_SPACE 0 |
#define ACPI_SERIAL_IO_SPACE 1 |
#define ACPI_SERIAL_PCICONF_SPACE 2 |
/* |
* Generic Register Address Structure - as defined by Microsoft |
* in http://www.microsoft.com/hwdev/onnow/download/LFreeACPI.doc |
* |
*/ |
typedef struct { |
u8 space_id; |
u8 bit_width; |
u8 bit_offset; |
u8 resv; |
u32 addrl; |
u32 addrh; |
} gen_regaddr; |
/* Space ID for generic register address structure */ |
#define REGADDR_SPACE_SYSMEM 0 |
#define REGADDR_SPACE_SYSIO 1 |
#define REGADDR_SPACE_PCICONFIG 2 |
/* Serial Port Console Redirection and Debug Port Table formats */ |
typedef struct { |
u8 signature[4]; |
u32 length; |
u8 rev; |
u8 chksum; |
u8 oemid[6]; |
u8 oem_tabid[8]; |
u32 oem_rev; |
u8 creator_id[4]; |
u32 creator_rev; |
u8 intfc_type; |
u8 resv1[3]; |
gen_regaddr base_addr; |
u8 int_type; |
u8 irq; |
u8 global_int[4]; |
u8 baud; |
u8 parity; |
u8 stop_bits; |
u8 flow_ctrl; |
u8 termtype; |
u8 language; |
u16 pci_dev_id; |
u16 pci_vendor_id; |
u8 pci_bus; |
u8 pci_dev; |
u8 pci_func; |
u8 pci_flags[4]; |
u8 pci_seg; |
u32 resv2; |
} acpi_ser_t; |
/shark/trunk/drivers/linuxc26/include/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 |
/shark/trunk/drivers/linuxc26/include/linux/user.h |
---|
0,0 → 1,0 |
#include <asm/user.h> |
/shark/trunk/drivers/linuxc26/include/linux/scx200.h |
---|
0,0 → 1,56 |
/* linux/include/linux/scx200.h |
Copyright (c) 2001,2002 Christer Weinigel <wingel@nano-system.com> |
Defines for the National Semiconductor SCx200 Processors |
*/ |
/* Interesting stuff for the National Semiconductor SCx200 CPU */ |
/* F0 PCI Header/Bridge Configuration Registers */ |
#define SCx200_DOCCS_BASE 0x78 /* DOCCS Base Address Register */ |
#define SCx200_DOCCS_CTRL 0x7c /* DOCCS Control Register */ |
/* GPIO Register Block */ |
#define SCx200_GPIO_SIZE 0x2c /* Size of GPIO register block */ |
/* General Configuration Block */ |
#define SCx200_CB_BASE 0x9000 /* Base fixed at 0x9000 according to errata */ |
/* Watchdog Timer */ |
#define SCx200_WDT_OFFSET 0x00 /* offset within configuration block */ |
#define SCx200_WDT_SIZE 0x05 /* size */ |
#define SCx200_WDT_WDTO 0x00 /* Time-Out Register */ |
#define SCx200_WDT_WDCNFG 0x02 /* Configuration Register */ |
#define SCx200_WDT_WDSTS 0x04 /* Status Register */ |
#define SCx200_WDT_WDSTS_WDOVF (1<<0) /* Overflow bit */ |
/* High Resolution Timer */ |
#define SCx200_TIMER_OFFSET 0x08 |
#define SCx200_TIMER_SIZE 0x05 |
/* Clock Generators */ |
#define SCx200_CLOCKGEN_OFFSET 0x10 |
#define SCx200_CLOCKGEN_SIZE 0x10 |
/* Pin Multiplexing and Miscellaneous Configuration Registers */ |
#define SCx200_MISC_OFFSET 0x30 |
#define SCx200_MISC_SIZE 0x10 |
#define SCx200_PMR 0x30 /* Pin Multiplexing Register */ |
#define SCx200_MCR 0x34 /* Miscellaneous Configuration Register */ |
#define SCx200_INTSEL 0x38 /* Interrupt Selection Register */ |
#define SCx200_IID 0x3c /* IA On a Chip Identification Number Reg */ |
#define SCx200_REV 0x3d /* Revision Register */ |
#define SCx200_CBA 0x3e /* Configuration Base Address Register */ |
/* Verify that the configuration block really is there */ |
#define scx200_cb_probe(base) (inw((base) + SCx200_CBA) == (base)) |
/* |
Local variables: |
compile-command: "make -C ../.. bzImage modules" |
c-basic-offset: 8 |
End: |
*/ |
/shark/trunk/drivers/linuxc26/include/linux/capability.h |
---|
0,0 → 1,358 |
/* |
* This is <linux/capability.h> |
* |
* Andrew G. Morgan <morgan@transmeta.com> |
* Alexander Kjeldaas <astor@guardian.no> |
* with help from Aleph1, Roland Buresund and Andrew Main. |
* |
* See here for the libcap library ("POSIX draft" compliance): |
* |
* ftp://linux.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.2/ |
*/ |
#ifndef _LINUX_CAPABILITY_H |
#define _LINUX_CAPABILITY_H |
#include <linux/types.h> |
#include <linux/compiler.h> |
/* 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. */ |
/* XXX - Note, cap_t, is defined by POSIX 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 0x19980330 |
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; |
#ifdef __KERNEL__ |
#include <linux/spinlock.h> |
extern spinlock_t task_capability_lock; |
/* #define STRICT_CAP_T_TYPECHECKS */ |
#ifdef STRICT_CAP_T_TYPECHECKS |
typedef struct kernel_cap_struct { |
__u32 cap; |
} kernel_cap_t; |
#else |
typedef __u32 kernel_cap_t; |
#endif |
#define _USER_CAP_HEADER_SIZE (2*sizeof(__u32)) |
#define _KERNEL_CAP_T_SIZE (sizeof(kernel_cap_t)) |
#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 |
/* Used to decide between falling back on the old suser() or fsuser(). */ |
#define CAP_FS_MASK 0x1f |
/* 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 |
**/ |
/* Transfer any capability in your permitted set to any pid, |
remove any capability in your permitted set from any pid */ |
#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 */ |
/* 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 */ |
#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 */ |
/* Modify cap_bset */ |
#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 configuring the kernel's syslog (printk behaviour) */ |
/* 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 */ |
#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 |
#ifdef __KERNEL__ |
/* |
* Bounding set |
*/ |
extern kernel_cap_t cap_bset; |
/* |
* Internal kernel functions only |
*/ |
#ifdef STRICT_CAP_T_TYPECHECKS |
#define to_cap_t(x) { x } |
#define cap_t(x) (x).cap |
#else |
#define to_cap_t(x) (x) |
#define cap_t(x) (x) |
#endif |
#define CAP_EMPTY_SET to_cap_t(0) |
#define CAP_FULL_SET to_cap_t(~0) |
#define CAP_INIT_EFF_SET to_cap_t(~0 & ~CAP_TO_MASK(CAP_SETPCAP)) |
#define CAP_INIT_INH_SET to_cap_t(0) |
#define CAP_TO_MASK(x) (1 << (x)) |
#define cap_raise(c, flag) (cap_t(c) |= CAP_TO_MASK(flag)) |
#define cap_lower(c, flag) (cap_t(c) &= ~CAP_TO_MASK(flag)) |
#define cap_raised(c, flag) (cap_t(c) & CAP_TO_MASK(flag)) |
static inline kernel_cap_t cap_combine(kernel_cap_t a, kernel_cap_t b) |
{ |
kernel_cap_t dest; |
cap_t(dest) = cap_t(a) | cap_t(b); |
return dest; |
} |
static inline kernel_cap_t cap_intersect(kernel_cap_t a, kernel_cap_t b) |
{ |
kernel_cap_t dest; |
cap_t(dest) = cap_t(a) & cap_t(b); |
return dest; |
} |
static inline kernel_cap_t cap_drop(kernel_cap_t a, kernel_cap_t drop) |
{ |
kernel_cap_t dest; |
cap_t(dest) = cap_t(a) & ~cap_t(drop); |
return dest; |
} |
static inline kernel_cap_t cap_invert(kernel_cap_t c) |
{ |
kernel_cap_t dest; |
cap_t(dest) = ~cap_t(c); |
return dest; |
} |
#define cap_isclear(c) (!cap_t(c)) |
#define cap_issubset(a,set) (!(cap_t(a) & ~cap_t(set))) |
#define cap_clear(c) do { cap_t(c) = 0; } while(0) |
#define cap_set_full(c) do { cap_t(c) = ~0; } while(0) |
#define cap_mask(c,mask) do { cap_t(c) &= cap_t(mask); } while(0) |
#define cap_is_fs_cap(c) (CAP_TO_MASK(c) & CAP_FS_MASK) |
#endif /* __KERNEL__ */ |
#endif /* !_LINUX_CAPABILITY_H */ |
/shark/trunk/drivers/linuxc26/include/linux/soundcard.h |
---|
0,0 → 1,1298 |
#ifndef SOUNDCARD_H |
#define SOUNDCARD_H |
/* |
* 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. |
*/ |
/* |
* 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> |
/* |
* 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 |
*/ |
#if defined(_AIX) || defined(AIX) || defined(sparc) || defined(__sparc__) || defined(HPPA) || defined(PPC) || defined(__mc68000__) |
/* Big endian machines */ |
# define _PATCHKEY(id) (0xfd00|id) |
# define AFMT_S16_NE AFMT_S16_BE |
#else |
# define _PATCHKEY(id) ((id<<8)|0xfd) |
# define AFMT_S16_NE AFMT_S16_LE |
#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(KERNEL) && !defined(INKERNEL) && !defined(_KERNEL)) || defined(USE_SEQ_MACROS) |
/* |
* Some convenience macros to simplify programming of the |
* /dev/sequencer interface |
* |
* These macros define the API which should be used when possible. |
*/ |
#define SEQ_DECLAREBUF() SEQ_USE_EXTBUF() |
void seqbuf_dump(void); /* This function must be provided by programs */ |
extern int OSS_init(int seqfd, int buflen); |
extern void OSS_seqbuf_dump(int fd, unsigned char *buf, int buflen); |
extern void OSS_seq_advbuf(int len, int fd, unsigned char *buf, int buflen); |
extern void OSS_seq_needbuf(int len, int fd, unsigned char *buf, int buflen); |
extern void OSS_patch_caching(int dev, int chn, int patch, |
int fd, unsigned char *buf, int buflen); |
extern void OSS_drum_caching(int dev, int chn, int patch, |
int fd, unsigned char *buf, int buflen); |
extern void OSS_write_patch(int fd, unsigned char *buf, int len); |
extern int OSS_write_patch2(int fd, unsigned char *buf, int len); |
#define SEQ_PM_DEFINES int __foo_bar___ |
#ifdef OSSLIB |
# define SEQ_USE_EXTBUF() \ |
extern unsigned char *_seqbuf; \ |
extern int _seqbuflen;extern int _seqbufptr |
# define SEQ_DEFINEBUF(len) SEQ_USE_EXTBUF();static int _requested_seqbuflen=len |
# define _SEQ_ADVBUF(len) OSS_seq_advbuf(len, seqfd, _seqbuf, _seqbuflen) |
# define _SEQ_NEEDBUF(len) OSS_seq_needbuf(len, seqfd, _seqbuf, _seqbuflen) |
# define SEQ_DUMPBUF() OSS_seqbuf_dump(seqfd, _seqbuf, _seqbuflen) |
# define SEQ_LOAD_GMINSTR(dev, instr) \ |
OSS_patch_caching(dev, -1, instr, seqfd, _seqbuf, _seqbuflen) |
# define SEQ_LOAD_GMDRUM(dev, drum) \ |
OSS_drum_caching(dev, -1, drum, seqfd, _seqbuf, _seqbuflen) |
#else /* !OSSLIB */ |
# define SEQ_LOAD_GMINSTR(dev, instr) |
# define SEQ_LOAD_GMDRUM(dev, drum) |
# define SEQ_USE_EXTBUF() \ |
extern unsigned char _seqbuf[]; \ |
extern int _seqbuflen;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 |
#endif /* !OSSLIB */ |
#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 |
#ifdef OSSLIB |
# define SEQ_PGM_CHANGE(dev, chn, patch) \ |
{OSS_patch_caching(dev, chn, patch, seqfd, _seqbuf, _seqbuflen); \ |
_CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0);} |
#else |
# define SEQ_PGM_CHANGE(dev, chn, patch) \ |
_CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0) |
#endif |
#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 syncronization 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. |
*/ |
#ifdef OSSLIB |
# define SEQ_WRPATCH(patchx, len) \ |
OSS_write_patch(seqfd, (char*)(patchx), len) |
# define SEQ_WRPATCH2(patchx, len) \ |
OSS_write_patch2(seqfd, (char*)(patchx), len) |
#else |
# 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 |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/compiler-gcc2.h |
---|
0,0 → 1,23 |
/* Never include this file directly. Include <linux/compiler.h> instead. */ |
/* These definitions are for GCC v2.x. */ |
/* Somewhere in the middle of the GCC 2.96 development cycle, we implemented |
a mechanism by which the user can annotate likely branch directions and |
expect the blocks to be reordered appropriately. Define __builtin_expect |
to nothing for earlier compilers. */ |
#include <linux/compiler-gcc.h> |
#if __GNUC_MINOR__ < 96 |
# define __builtin_expect(x, expected_value) (x) |
#endif |
#define __attribute_used__ __attribute__((__unused__)) |
/* |
* The attribute `pure' is not implemented in GCC versions earlier |
* than 2.96. |
*/ |
#if __GNUC_MINOR__ >= 96 |
# define __attribute_pure__ __attribute__((pure)) |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/cramfs_fs_sb.h |
---|
0,0 → 1,20 |
#ifndef _CRAMFS_FS_SB |
#define _CRAMFS_FS_SB |
/* |
* cramfs super-block data in memory |
*/ |
struct cramfs_sb_info { |
unsigned long magic; |
unsigned long size; |
unsigned long blocks; |
unsigned long files; |
unsigned long flags; |
}; |
static inline struct cramfs_sb_info *CRAMFS_SB(struct super_block *sb) |
{ |
return sb->s_fs_info; |
} |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/adfs_fs_sb.h |
---|
0,0 → 1,38 |
/* |
* linux/include/linux/adfs_fs_sb.h |
* |
* Copyright (C) 1997-1999 Russell King |
*/ |
#ifndef _ADFS_FS_SB |
#define _ADFS_FS_SB |
/* |
* Forward-declare this |
*/ |
struct adfs_discmap; |
struct adfs_dir_ops; |
/* |
* ADFS file system superblock data in memory |
*/ |
struct adfs_sb_info { |
struct adfs_discmap *s_map; /* bh list containing map */ |
struct adfs_dir_ops *s_dir; /* directory operations */ |
uid_t s_uid; /* owner uid */ |
gid_t s_gid; /* owner gid */ |
umode_t s_owner_mask; /* ADFS owner perm -> unix perm */ |
umode_t s_other_mask; /* ADFS other perm -> unix perm */ |
__u32 s_ids_per_zone; /* max. no ids in one zone */ |
__u32 s_idlen; /* length of ID in map */ |
__u32 s_map_size; /* sector size of a map */ |
unsigned long s_size; /* total size (in blocks) of this fs */ |
signed int s_map2blk; /* shift left by this for map->sector */ |
unsigned int s_log2sharesize;/* log2 share size */ |
unsigned int s_version; /* disc format version */ |
unsigned int s_namelen; /* maximum number of characters in name */ |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/if_arcnet.h |
---|
0,0 → 1,123 |
/* |
* 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/if_ether.h> |
/* |
* These are the defined ARCnet Protocol ID's. |
*/ |
/* 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 |
{ |
uint8_t proto; /* protocol ID field - varies */ |
uint8_t split_flag; /* for use with split packets */ |
uint16_t sequence; /* sequence number */ |
uint8_t payload[0]; /* space remaining in packet (504 bytes)*/ |
}; |
#define RFC1201_HDR_SIZE 4 |
/* |
* The RFC1051-specific components. |
*/ |
struct arc_rfc1051 |
{ |
uint8_t proto; /* ARC_P_RFC1051_ARP/RFC1051_IP */ |
uint8_t 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 |
{ |
uint8_t proto; /* Always ARC_P_ETHER */ |
struct ethhdr eth; /* standard ethernet header (yuck!) */ |
uint8_t payload[0]; /* 493 bytes */ |
}; |
#define ETH_ENCAP_HDR_SIZE 14 |
/* |
* 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 |
{ |
uint8_t 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; |
uint8_t raw[0]; /* 508 bytes */ |
} soft; |
}; |
#endif /* _LINUX_IF_ARCNET_H */ |
/shark/trunk/drivers/linuxc26/include/linux/netfilter.h |
---|
0,0 → 1,170 |
#ifndef __LINUX_NETFILTER_H |
#define __LINUX_NETFILTER_H |
#ifdef __KERNEL__ |
#include <linux/init.h> |
#include <linux/types.h> |
#include <linux/skbuff.h> |
#include <linux/net.h> |
#include <linux/if.h> |
#include <linux/wait.h> |
#include <linux/list.h> |
#endif |
/* 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_MAX_VERDICT NF_REPEAT |
/* Generic cache responses from hook functions. |
<= 0x2000 is used for protocol-flags. */ |
#define NFC_UNKNOWN 0x4000 |
#define NFC_ALTERED 0x8000 |
#ifdef __KERNEL__ |
#include <linux/config.h> |
#ifdef CONFIG_NETFILTER |
extern void netfilter_init(void); |
/* Largest hook number + 1 */ |
#define NF_MAX_HOOKS 8 |
struct sk_buff; |
struct net_device; |
typedef unsigned int nf_hookfn(unsigned int hooknum, |
struct sk_buff **skb, |
const struct net_device *in, |
const struct net_device *out, |
int (*okfn)(struct sk_buff *)); |
struct nf_hook_ops |
{ |
struct list_head list; |
/* User fills in from here down. */ |
nf_hookfn *hook; |
struct module *owner; |
int pf; |
int hooknum; |
/* Hooks are ordered in ascending priority. */ |
int priority; |
}; |
struct nf_sockopt_ops |
{ |
struct list_head list; |
int pf; |
/* Non-inclusive ranges: use 0/0/NULL to never get called. */ |
int set_optmin; |
int set_optmax; |
int (*set)(struct sock *sk, int optval, void *user, unsigned int len); |
int get_optmin; |
int get_optmax; |
int (*get)(struct sock *sk, int optval, void *user, int *len); |
/* Number of users inside set() or get(). */ |
unsigned int use; |
struct task_struct *cleanup_task; |
}; |
/* Each queued (to userspace) skbuff has one of these. */ |
struct nf_info |
{ |
/* The ops struct which sent us to userspace. */ |
struct nf_hook_ops *elem; |
/* If we're sent to userspace, this keeps housekeeping info */ |
int pf; |
unsigned int hook; |
struct net_device *indev, *outdev; |
int (*okfn)(struct sk_buff *); |
}; |
/* Function to register/unregister hook points. */ |
int nf_register_hook(struct nf_hook_ops *reg); |
void nf_unregister_hook(struct nf_hook_ops *reg); |
/* Functions to register get/setsockopt ranges (non-inclusive). You |
need to check permissions yourself! */ |
int nf_register_sockopt(struct nf_sockopt_ops *reg); |
void nf_unregister_sockopt(struct nf_sockopt_ops *reg); |
extern struct list_head nf_hooks[NPROTO][NF_MAX_HOOKS]; |
/* Activate hook; either okfn or kfree_skb called, unless a hook |
returns NF_STOLEN (in which case, it's up to the hook to deal with |
the consequences). |
Returns -ERRNO if packet dropped. Zero means queued, stolen or |
accepted. |
*/ |
/* RR: |
> I don't want nf_hook to return anything because people might forget |
> about async and trust the return value to mean "packet was ok". |
AK: |
Just document it clearly, then you can expect some sense from kernel |
coders :) |
*/ |
/* This is gross, but inline doesn't cut it for avoiding the function |
call in fast path: gcc doesn't inline (needs value tracking?). --RR */ |
#ifdef CONFIG_NETFILTER_DEBUG |
#define NF_HOOK(pf, hook, skb, indev, outdev, okfn) \ |
nf_hook_slow((pf), (hook), (skb), (indev), (outdev), (okfn), INT_MIN) |
#define NF_HOOK_THRESH nf_hook_slow |
#else |
#define NF_HOOK(pf, hook, skb, indev, outdev, okfn) \ |
(list_empty(&nf_hooks[(pf)][(hook)]) \ |
? (okfn)(skb) \ |
: nf_hook_slow((pf), (hook), (skb), (indev), (outdev), (okfn), INT_MIN)) |
#define NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, thresh) \ |
(list_empty(&nf_hooks[(pf)][(hook)]) \ |
? (okfn)(skb) \ |
: nf_hook_slow((pf), (hook), (skb), (indev), (outdev), (okfn), (thresh))) |
#endif |
int nf_hook_slow(int pf, unsigned int hook, struct sk_buff *skb, |
struct net_device *indev, struct net_device *outdev, |
int (*okfn)(struct sk_buff *), int thresh); |
/* Call setsockopt() */ |
int nf_setsockopt(struct sock *sk, int pf, int optval, char *opt, |
int len); |
int nf_getsockopt(struct sock *sk, int pf, int optval, char *opt, |
int *len); |
/* Packet queuing */ |
typedef int (*nf_queue_outfn_t)(struct sk_buff *skb, |
struct nf_info *info, void *data); |
extern int nf_register_queue_handler(int pf, |
nf_queue_outfn_t outfn, void *data); |
extern int nf_unregister_queue_handler(int pf); |
extern void nf_reinject(struct sk_buff *skb, |
struct nf_info *info, |
unsigned int verdict); |
extern void (*ip_ct_attach)(struct sk_buff *, struct nf_ct_info *); |
#ifdef CONFIG_NETFILTER_DEBUG |
extern void nf_dump_skb(int pf, struct sk_buff *skb); |
#endif |
/* FIXME: Before cache is ever used, this must be implemented for real. */ |
extern void nf_invalidate_cache(int pf); |
#else /* !CONFIG_NETFILTER */ |
#define NF_HOOK(pf, hook, skb, indev, outdev, okfn) (okfn)(skb) |
#endif /*CONFIG_NETFILTER*/ |
#endif /*__KERNEL__*/ |
#endif /*__LINUX_NETFILTER_H*/ |
/shark/trunk/drivers/linuxc26/include/linux/namespace.h |
---|
0,0 → 1,42 |
#ifndef _NAMESPACE_H_ |
#define _NAMESPACE_H_ |
#ifdef __KERNEL__ |
#include <linux/mount.h> |
#include <linux/sched.h> |
struct namespace { |
atomic_t count; |
struct vfsmount * root; |
struct list_head list; |
struct rw_semaphore sem; |
}; |
extern void umount_tree(struct vfsmount *); |
extern int copy_namespace(int, struct task_struct *); |
void __put_namespace(struct namespace *namespace); |
static inline void put_namespace(struct namespace *namespace) |
{ |
if (atomic_dec_and_test(&namespace->count)) |
__put_namespace(namespace); |
} |
static inline void exit_namespace(struct task_struct *p) |
{ |
struct namespace *namespace = p->namespace; |
if (namespace) { |
task_lock(p); |
p->namespace = NULL; |
task_unlock(p); |
put_namespace(namespace); |
} |
} |
static inline void get_namespace(struct namespace *namespace) |
{ |
atomic_inc(&namespace->count); |
} |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/vermagic.h |
---|
0,0 → 1,23 |
#include <linux/version.h> |
#include <linux/module.h> |
/* Simply sanity version stamp for modules. */ |
#ifdef CONFIG_SMP |
#define MODULE_VERMAGIC_SMP "SMP " |
#else |
#define MODULE_VERMAGIC_SMP "" |
#endif |
#ifdef CONFIG_PREEMPT |
#define MODULE_VERMAGIC_PREEMPT "preempt " |
#else |
#define MODULE_VERMAGIC_PREEMPT "" |
#endif |
#ifndef MODULE_ARCH_VERMAGIC |
#define MODULE_ARCH_VERMAGIC "" |
#endif |
#define VERMAGIC_STRING \ |
UTS_RELEASE " " \ |
MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT \ |
MODULE_ARCH_VERMAGIC \ |
"gcc-" __stringify(__GNUC__) "." __stringify(__GNUC_MINOR__) |
/shark/trunk/drivers/linuxc26/include/linux/usb_gadgetfs.h |
---|
0,0 → 1,75 |
#include <asm/types.h> |
#include <asm/ioctl.h> |
#include <linux/usb_ch9.h> |
/* |
* Filesystem based user-mode API to USB Gadget controller hardware |
* |
* Almost everything can be done with only read and write operations, |
* on endpoint files found in one directory. They are configured by |
* writing descriptors, and then may be used for normal stream style |
* i/o requests. When ep0 is configured, the device can enumerate; |
* when it's closed, the device disconnects from usb. |
* |
* Configuration and device descriptors get written to /dev/gadget/$CHIP, |
* which may then be used to read usb_gadgetfs_event structs. The driver |
* may activate endpoints as it handles SET_CONFIGURATION setup events, |
* or earlier; writing endpoint descriptors to /dev/gadget/$ENDPOINT |
* then performing data transfers by reading or writing. |
*/ |
/* |
* Events are delivered on the ep0 file descriptor, if the user mode driver |
* reads from this file descriptor after writing the descriptors. Don't |
* stop polling this descriptor, if you write that kind of driver. |
*/ |
enum usb_gadgetfs_event_type { |
GADGETFS_NOP = 0, |
GADGETFS_CONNECT, |
GADGETFS_DISCONNECT, |
GADGETFS_SETUP, |
GADGETFS_SUSPEND, |
// and likely more ! |
}; |
struct usb_gadgetfs_event { |
enum usb_gadgetfs_event_type type; |
union { |
// NOP, DISCONNECT, SUSPEND: nothing |
// ... some hardware can't report disconnection |
// CONNECT: just the speed |
enum usb_device_speed speed; |
// SETUP: packet; DATA phase i/o precedes next event |
// (setup.bmRequestType & USB_DIR_IN) flags direction |
// ... includes SET_CONFIGURATION, SET_INTERFACE |
struct usb_ctrlrequest setup; |
} u; |
}; |
/* endpoint ioctls */ |
/* IN transfers may be reported to the gadget driver as complete |
* when the fifo is loaded, before the host reads the data; |
* OUT transfers may be reported to the host's "client" driver as |
* complete when they're sitting in the FIFO unread. |
* THIS returns how many bytes are "unclaimed" in the endpoint fifo |
* (needed for precise fault handling, when the hardware allows it) |
*/ |
#define GADGETFS_FIFO_STATUS _IO('g',1) |
/* discards any unclaimed data in the fifo. */ |
#define GADGETFS_FIFO_FLUSH _IO('g',2) |
/* resets endpoint halt+toggle; used to implement set_interface. |
* some hardware (like pxa2xx) can't support this. |
*/ |
#define GADGETFS_CLEAR_HALT _IO('g',3) |
/shark/trunk/drivers/linuxc26/include/linux/ftape.h |
---|
0,0 → 1,203 |
#ifndef _FTAPE_H |
#define _FTAPE_H |
/* |
* Copyright (C) 1994-1996 Bas Laarhoven, |
* (C) 1996-1997 Claus-Justus Heine. |
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. |
You should have received a copy of the GNU General Public License |
along with this program; see the file COPYING. If not, write to |
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. |
* |
* $Source: /home/fabio/w/shark/sharkcvs/CVSROOT/shark/drivers/linuxc26/include/linux/ftape.h,v $ |
* $Revision: 1.1 $ |
* $Date: 2004-01-28 15:25:21 $ |
* |
* This file contains global definitions, typedefs and macro's |
* for the QIC-40/80/3010/3020 floppy-tape driver for Linux. |
*/ |
#define FTAPE_VERSION "ftape v3.04d 25/11/97" |
#ifdef __KERNEL__ |
#include <linux/interrupt.h> |
#include <linux/mm.h> |
#endif |
#include <linux/types.h> |
#include <linux/config.h> |
#include <linux/mtio.h> |
#define FT_SECTOR(x) (x+1) /* sector offset into real sector */ |
#define FT_SECTOR_SIZE 1024 |
#define FT_SECTORS_PER_SEGMENT 32 |
#define FT_ECC_SECTORS 3 |
#define FT_SEGMENT_SIZE ((FT_SECTORS_PER_SEGMENT - FT_ECC_SECTORS) * FT_SECTOR_SIZE) |
#define FT_BUFF_SIZE (FT_SECTORS_PER_SEGMENT * FT_SECTOR_SIZE) |
/* |
* bits of the minor device number that define drive selection |
* methods. Could be used one day to access multiple tape |
* drives on the same controller. |
*/ |
#define FTAPE_SEL_A 0 |
#define FTAPE_SEL_B 1 |
#define FTAPE_SEL_C 2 |
#define FTAPE_SEL_D 3 |
#define FTAPE_SEL_MASK 3 |
#define FTAPE_SEL(unit) ((unit) & FTAPE_SEL_MASK) |
#define FTAPE_NO_REWIND 4 /* mask for minor nr */ |
/* the following two may be reported when MTIOCGET is requested ... */ |
typedef union { |
struct { |
__u8 error; |
__u8 command; |
} error; |
long space; |
} ft_drive_error; |
typedef union { |
struct { |
__u8 drive_status; |
__u8 drive_config; |
__u8 tape_status; |
} status; |
long space; |
} ft_drive_status; |
#ifdef __KERNEL__ |
#define FT_RQM_DELAY 12 |
#define FT_MILLISECOND 1 |
#define FT_SECOND 1000 |
#define FT_FOREVER -1 |
#ifndef HZ |
#error "HZ undefined." |
#endif |
#define FT_USPT (1000000/HZ) /* microseconds per tick */ |
/* This defines the number of retries that the driver will allow |
* before giving up (and letting a higher level handle the error). |
*/ |
#ifdef TESTING |
#define FT_SOFT_RETRIES 1 /* number of low level retries */ |
#define FT_RETRIES_ON_ECC_ERROR 3 /* ecc error when correcting segment */ |
#else |
#define FT_SOFT_RETRIES 6 /* number of low level retries (triple) */ |
#define FT_RETRIES_ON_ECC_ERROR 3 /* ecc error when correcting segment */ |
#endif |
#ifndef THE_FTAPE_MAINTAINER |
#define THE_FTAPE_MAINTAINER "the ftape maintainer" |
#endif |
/* Initialize missing configuration parameters. |
*/ |
#ifndef CONFIG_FT_NR_BUFFERS |
# define CONFIG_FT_NR_BUFFERS 3 |
#endif |
#ifndef CONFIG_FT_FDC_THR |
# define CONFIG_FT_FDC_THR 8 |
#endif |
#ifndef CONFIG_FT_FDC_MAX_RATE |
# define CONFIG_FT_FDC_MAX_RATE 2000 |
#endif |
#ifndef CONFIG_FT_FDC_BASE |
# define CONFIG_FT_FDC_BASE 0 |
#endif |
#ifndef CONFIG_FT_FDC_IRQ |
# define CONFIG_FT_FDC_IRQ 0 |
#endif |
#ifndef CONFIG_FT_FDC_DMA |
# define CONFIG_FT_FDC_DMA 0 |
#endif |
/* Turn some booleans into numbers. |
*/ |
#ifdef CONFIG_FT_PROBE_FC10 |
# undef CONFIG_FT_PROBE_FC10 |
# define CONFIG_FT_PROBE_FC10 1 |
#else |
# define CONFIG_FT_PROBE_FC10 0 |
#endif |
#ifdef CONFIG_FT_MACH2 |
# undef CONFIG_FT_MACH2 |
# define CONFIG_FT_MACH2 1 |
#else |
# define CONFIG_FT_MACH2 0 |
#endif |
/* Insert default settings |
*/ |
#if CONFIG_FT_PROBE_FC10 == 1 |
# if CONFIG_FT_FDC_BASE == 0 |
# undef CONFIG_FT_FDC_BASE |
# define CONFIG_FT_FDC_BASE 0x180 |
# endif |
# if CONFIG_FT_FDC_IRQ == 0 |
# undef CONFIG_FT_FDC_IRQ |
# define CONFIG_FT_FDC_IRQ 9 |
# endif |
# if CONFIG_FT_FDC_DMA == 0 |
# undef CONFIG_FT_FDC_DMA |
# define CONFIG_FT_FDC_DMA 3 |
# endif |
#elif CONFIG_FT_MACH2 == 1 /* CONFIG_FT_PROBE_FC10 == 1 */ |
# if CONFIG_FT_FDC_BASE == 0 |
# undef CONFIG_FT_FDC_BASE |
# define CONFIG_FT_FDC_BASE 0x1E0 |
# endif |
# if CONFIG_FT_FDC_IRQ == 0 |
# undef CONFIG_FT_FDC_IRQ |
# define CONFIG_FT_FDC_IRQ 6 |
# endif |
# if CONFIG_FT_FDC_DMA == 0 |
# undef CONFIG_FT_FDC_DMA |
# define CONFIG_FT_FDC_DMA 2 |
# endif |
#elif CONFIG_FT_ALT_FDC == 1 /* CONFIG_FT_MACH2 */ |
# if CONFIG_FT_FDC_BASE == 0 |
# undef CONFIG_FT_FDC_BASE |
# define CONFIG_FT_FDC_BASE 0x370 |
# endif |
# if CONFIG_FT_FDC_IRQ == 0 |
# undef CONFIG_FT_FDC_IRQ |
# define CONFIG_FT_FDC_IRQ 6 |
# endif |
# if CONFIG_FT_FDC_DMA == 0 |
# undef CONFIG_FT_FDC_DMA |
# define CONFIG_FT_FDC_DMA 2 |
# endif |
#else /* CONFIG_FT_ALT_FDC */ |
# if CONFIG_FT_FDC_BASE == 0 |
# undef CONFIG_FT_FDC_BASE |
# define CONFIG_FT_FDC_BASE 0x3f0 |
# endif |
# if CONFIG_FT_FDC_IRQ == 0 |
# undef CONFIG_FT_FDC_IRQ |
# define CONFIG_FT_FDC_IRQ 6 |
# endif |
# if CONFIG_FT_FDC_DMA == 0 |
# undef CONFIG_FT_FDC_DMA |
# define CONFIG_FT_FDC_DMA 2 |
# endif |
#endif /* standard FDC */ |
/* some useful macro's |
*/ |
#define ABS(a) ((a) < 0 ? -(a) : (a)) |
#define NR_ITEMS(x) (int)(sizeof(x)/ sizeof(*x)) |
#endif /* __KERNEL__ */ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/xattr.h |
---|
0,0 → 1,15 |
/* |
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. |
*/ |
#ifndef _LINUX_XATTR_H |
#define _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 */ |
#endif /* _LINUX_XATTR_H */ |
/shark/trunk/drivers/linuxc26/include/linux/radix-tree.h |
---|
0,0 → 1,57 |
/* |
* Copyright (C) 2001 Momchil Velikov |
* Portions Copyright (C) 2001 Christoph Hellwig |
* |
* 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. |
* |
* 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_RADIX_TREE_H |
#define _LINUX_RADIX_TREE_H |
#include <linux/preempt.h> |
struct radix_tree_node; |
struct radix_tree_root { |
unsigned int height; |
int gfp_mask; |
struct radix_tree_node *rnode; |
}; |
#define RADIX_TREE_INIT(mask) {0, (mask), NULL} |
#define RADIX_TREE(name, mask) \ |
struct radix_tree_root name = RADIX_TREE_INIT(mask) |
#define INIT_RADIX_TREE(root, mask) \ |
do { \ |
(root)->height = 0; \ |
(root)->gfp_mask = (mask); \ |
(root)->rnode = NULL; \ |
} while (0) |
extern int radix_tree_insert(struct radix_tree_root *, unsigned long, void *); |
extern void *radix_tree_lookup(struct radix_tree_root *, unsigned long); |
extern void *radix_tree_delete(struct radix_tree_root *, unsigned long); |
extern unsigned int |
radix_tree_gang_lookup(struct radix_tree_root *root, void **results, |
unsigned long first_index, unsigned int max_items); |
int radix_tree_preload(int gfp_mask); |
static inline void radix_tree_preload_end(void) |
{ |
preempt_enable(); |
} |
#endif /* _LINUX_RADIX_TREE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/telephony.h |
---|
0,0 → 1,266 |
/****************************************************************************** |
* |
* 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@redhat.com> |
* 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. |
* |
* Version: $Revision: 1.1 $ |
* |
* $Id: telephony.h,v 1.1 2004-01-28 15:26:48 giacomo Exp $ |
* |
*****************************************************************************/ |
#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 */ |
/shark/trunk/drivers/linuxc26/include/linux/netfilter_ipx.h |
---|
0,0 → 1,14 |
#ifndef __LINUX_IPX_NETFILTER_H |
#define __LINUX_IPX_NETFILTER_H |
/* IPX-specific defines for netfilter. Complete me sometime. |
* (C)1998 Rusty Russell -- This code is GPL. |
*/ |
#include <linux/netfilter.h> |
/* IPX Hooks */ |
#define NF_IPX_INPUT 0 |
#define NF_IPX_FORWARD 1 |
#define NF_IPX_OUTPUT 2 |
#endif /*__LINUX_IPX_NETFILTER_H*/ |
/shark/trunk/drivers/linuxc26/include/linux/rwsem-spinlock.h |
---|
0,0 → 1,65 |
/* rwsem-spinlock.h: fallback C implementation |
* |
* Copyright (c) 2001 David Howells (dhowells@redhat.com). |
* - Derived partially from ideas by Andrea Arcangeli <andrea@suse.de> |
* - Derived also from comments by Linus |
*/ |
#ifndef _LINUX_RWSEM_SPINLOCK_H |
#define _LINUX_RWSEM_SPINLOCK_H |
#ifndef _LINUX_RWSEM_H |
#error "please don't include linux/rwsem-spinlock.h directly, use linux/rwsem.h instead" |
#endif |
#include <linux/spinlock.h> |
#include <linux/list.h> |
#ifdef __KERNEL__ |
#include <linux/types.h> |
struct rwsem_waiter; |
/* |
* the rw-semaphore definition |
* - if activity is 0 then there are no active readers or writers |
* - if activity is +ve then that is the number of active readers |
* - if activity is -1 then there is one active writer |
* - if wait_list is not empty, then there are processes waiting for the semaphore |
*/ |
struct rw_semaphore { |
__s32 activity; |
spinlock_t wait_lock; |
struct list_head wait_list; |
#if RWSEM_DEBUG |
int debug; |
#endif |
}; |
/* |
* initialisation |
*/ |
#if RWSEM_DEBUG |
#define __RWSEM_DEBUG_INIT , 0 |
#else |
#define __RWSEM_DEBUG_INIT /* */ |
#endif |
#define __RWSEM_INITIALIZER(name) \ |
{ 0, SPIN_LOCK_UNLOCKED, LIST_HEAD_INIT((name).wait_list) __RWSEM_DEBUG_INIT } |
#define DECLARE_RWSEM(name) \ |
struct rw_semaphore name = __RWSEM_INITIALIZER(name) |
extern void FASTCALL(init_rwsem(struct rw_semaphore *sem)); |
extern void FASTCALL(__down_read(struct rw_semaphore *sem)); |
extern int FASTCALL(__down_read_trylock(struct rw_semaphore *sem)); |
extern void FASTCALL(__down_write(struct rw_semaphore *sem)); |
extern int FASTCALL(__down_write_trylock(struct rw_semaphore *sem)); |
extern void FASTCALL(__up_read(struct rw_semaphore *sem)); |
extern void FASTCALL(__up_write(struct rw_semaphore *sem)); |
extern void FASTCALL(__downgrade_write(struct rw_semaphore *sem)); |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_RWSEM_SPINLOCK_H */ |
/shark/trunk/drivers/linuxc26/include/linux/radeonfb.h |
---|
0,0 → 1,15 |
#ifndef __LINUX_RADEONFB_H__ |
#define __LINUX_RADEONFB_H__ |
#include <asm/ioctl.h> |
#include <asm/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 |
/shark/trunk/drivers/linuxc26/include/linux/skbuff.h |
---|
0,0 → 1,1221 |
/* |
* Definitions for the 'struct sk_buff' memory handlers. |
* |
* Authors: |
* Alan Cox, <gw4pts@gw4pts.ampr.org> |
* Florian La Roche, <rzsfl@rz.uni-sb.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 _LINUX_SKBUFF_H |
#define _LINUX_SKBUFF_H |
#include <linux/config.h> |
#include <linux/kernel.h> |
#include <linux/compiler.h> |
#include <linux/time.h> |
#include <linux/cache.h> |
#include <asm/atomic.h> |
#include <asm/types.h> |
#include <linux/spinlock.h> |
#include <linux/mm.h> |
#include <linux/highmem.h> |
#include <linux/poll.h> |
#include <linux/net.h> |
#define HAVE_ALLOC_SKB /* For the drivers to know */ |
#define HAVE_ALIGNABLE_SKB /* Ditto 8) */ |
#define SLAB_SKB /* Slabified skbuffs */ |
#define CHECKSUM_NONE 0 |
#define CHECKSUM_HW 1 |
#define CHECKSUM_UNNECESSARY 2 |
#define SKB_DATA_ALIGN(X) (((X) + (SMP_CACHE_BYTES - 1)) & \ |
~(SMP_CACHE_BYTES - 1)) |
#define SKB_MAX_ORDER(X, ORDER) (((PAGE_SIZE << (ORDER)) - (X) - \ |
sizeof(struct skb_shared_info)) & \ |
~(SMP_CACHE_BYTES - 1)) |
#define SKB_MAX_HEAD(X) (SKB_MAX_ORDER((X), 0)) |
#define SKB_MAX_ALLOC (SKB_MAX_ORDER(0, 2)) |
/* A. Checksumming of received packets by device. |
* |
* NONE: device failed to checksum this packet. |
* skb->csum is undefined. |
* |
* UNNECESSARY: device parsed packet and wouldbe verified checksum. |
* skb->csum is undefined. |
* It is bad option, but, unfortunately, many of vendors do this. |
* Apparently with secret goal to sell you new device, when you |
* will add new protocol to your host. F.e. IPv6. 8) |
* |
* HW: the most generic way. Device supplied checksum of _all_ |
* the packet as seen by netif_rx in skb->csum. |
* NOTE: Even if device supports only some protocols, but |
* is able to produce some skb->csum, it MUST use HW, |
* not UNNECESSARY. |
* |
* B. Checksumming on output. |
* |
* NONE: skb is checksummed by protocol or csum is not required. |
* |
* HW: device is required to csum packet as seen by hard_start_xmit |
* from skb->h.raw to the end and to record the checksum |
* at skb->h.raw+skb->csum. |
* |
* Device must show its capabilities in dev->features, set |
* at device setup time. |
* NETIF_F_HW_CSUM - it is clever device, it is able to checksum |
* everything. |
* NETIF_F_NO_CSUM - loopback or reliable single hop media. |
* NETIF_F_IP_CSUM - device is dumb. It is able to csum only |
* TCP/UDP over IPv4. Sigh. Vendors like this |
* way by an unknown reason. Though, see comment above |
* about CHECKSUM_UNNECESSARY. 8) |
* |
* Any questions? No questions, good. --ANK |
*/ |
#ifdef __i386__ |
#define NET_CALLER(arg) (*(((void **)&arg) - 1)) |
#else |
#define NET_CALLER(arg) __builtin_return_address(0) |
#endif |
#ifdef CONFIG_NETFILTER |
struct nf_conntrack { |
atomic_t use; |
void (*destroy)(struct nf_conntrack *); |
}; |
struct nf_ct_info { |
struct nf_conntrack *master; |
}; |
#ifdef CONFIG_BRIDGE_NETFILTER |
struct nf_bridge_info { |
atomic_t use; |
struct net_device *physindev; |
struct net_device *physoutdev; |
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) |
struct net_device *netoutdev; |
#endif |
unsigned int mask; |
unsigned long hh[32 / sizeof(unsigned long)]; |
}; |
#endif |
#endif |
struct sk_buff_head { |
/* These two members must be first. */ |
struct sk_buff *next; |
struct sk_buff *prev; |
__u32 qlen; |
spinlock_t lock; |
}; |
struct sk_buff; |
/* To allow 64K frame to be packed as single skb without frag_list */ |
#define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2) |
typedef struct skb_frag_struct skb_frag_t; |
struct skb_frag_struct { |
struct page *page; |
__u16 page_offset; |
__u16 size; |
}; |
/* This data is invariant across clones and lives at |
* the end of the header data, ie. at skb->end. |
*/ |
struct skb_shared_info { |
atomic_t dataref; |
unsigned int nr_frags; |
unsigned short tso_size; |
unsigned short tso_segs; |
struct sk_buff *frag_list; |
skb_frag_t frags[MAX_SKB_FRAGS]; |
}; |
/** |
* struct sk_buff - socket buffer |
* @next: Next buffer in list |
* @prev: Previous buffer in list |
* @list: List we are on |
* @sk: Socket we are owned by |
* @stamp: Time we arrived |
* @dev: Device we arrived on/are leaving by |
* @real_dev: The real device we are using |
* @h: Transport layer header |
* @nh: Network layer header |
* @mac: Link layer header |
* @dst: FIXME: Describe this field |
* @cb: Control buffer. Free for use by every layer. Put private vars here |
* @len: Length of actual data |
* @data_len: Data length |
* @csum: Checksum |
* @__unused: Dead field, may be reused |
* @cloned: Head may be cloned (check refcnt to be sure) |
* @pkt_type: Packet class |
* @ip_summed: Driver fed us an IP checksum |
* @priority: Packet queueing priority |
* @users: User count - see {datagram,tcp}.c |
* @protocol: Packet protocol from driver |
* @security: Security level of packet |
* @truesize: Buffer size |
* @head: Head of buffer |
* @data: Data head pointer |
* @tail: Tail pointer |
* @end: End pointer |
* @destructor: Destruct function |
* @nfmark: Can be used for communication between hooks |
* @nfcache: Cache info |
* @nfct: Associated connection, if any |
* @nf_debug: Netfilter debugging |
* @nf_bridge: Saved data about a bridged frame - see br_netfilter.c |
* @private: Data which is private to the HIPPI implementation |
* @tc_index: Traffic control index |
*/ |
struct sk_buff { |
/* These two members must be first. */ |
struct sk_buff *next; |
struct sk_buff *prev; |
struct sk_buff_head *list; |
struct sock *sk; |
struct timeval stamp; |
struct net_device *dev; |
struct net_device *real_dev; |
union { |
struct tcphdr *th; |
struct udphdr *uh; |
struct icmphdr *icmph; |
struct igmphdr *igmph; |
struct iphdr *ipiph; |
unsigned char *raw; |
} h; |
union { |
struct iphdr *iph; |
struct ipv6hdr *ipv6h; |
struct arphdr *arph; |
unsigned char *raw; |
} nh; |
union { |
struct ethhdr *ethernet; |
unsigned char *raw; |
} mac; |
struct dst_entry *dst; |
struct sec_path *sp; |
/* |
* This is the control buffer. It is free to use for every |
* layer. Please put your private variables there. If you |
* want to keep them across layers you have to do a skb_clone() |
* first. This is owned by whoever has the skb queued ATM. |
*/ |
char cb[48]; |
unsigned int len, |
data_len, |
csum; |
unsigned char local_df, |
cloned, |
pkt_type, |
ip_summed; |
__u32 priority; |
unsigned short protocol, |
security; |
void (*destructor)(struct sk_buff *skb); |
#ifdef CONFIG_NETFILTER |
unsigned long nfmark; |
__u32 nfcache; |
struct nf_ct_info *nfct; |
#ifdef CONFIG_NETFILTER_DEBUG |
unsigned int nf_debug; |
#endif |
#ifdef CONFIG_BRIDGE_NETFILTER |
struct nf_bridge_info *nf_bridge; |
#endif |
#endif /* CONFIG_NETFILTER */ |
#if defined(CONFIG_HIPPI) |
union { |
__u32 ifield; |
} private; |
#endif |
#ifdef CONFIG_NET_SCHED |
__u32 tc_index; /* traffic control index */ |
#endif |
/* These elements must be at the end, see alloc_skb() for details. */ |
unsigned int truesize; |
atomic_t users; |
unsigned char *head, |
*data, |
*tail, |
*end; |
}; |
#define SK_WMEM_MAX 65535 |
#define SK_RMEM_MAX 65535 |
#ifdef __KERNEL__ |
/* |
* Handling routines are only of interest to the kernel |
*/ |
#include <linux/slab.h> |
#include <asm/system.h> |
extern void __kfree_skb(struct sk_buff *skb); |
extern struct sk_buff *alloc_skb(unsigned int size, int priority); |
extern void kfree_skbmem(struct sk_buff *skb); |
extern struct sk_buff *skb_clone(struct sk_buff *skb, int priority); |
extern struct sk_buff *skb_copy(const struct sk_buff *skb, int priority); |
extern struct sk_buff *pskb_copy(struct sk_buff *skb, int gfp_mask); |
extern int pskb_expand_head(struct sk_buff *skb, |
int nhead, int ntail, int gfp_mask); |
extern struct sk_buff *skb_realloc_headroom(struct sk_buff *skb, |
unsigned int headroom); |
extern struct sk_buff *skb_copy_expand(const struct sk_buff *skb, |
int newheadroom, int newtailroom, |
int priority); |
extern struct sk_buff * skb_pad(struct sk_buff *skb, int pad); |
#define dev_kfree_skb(a) kfree_skb(a) |
extern void skb_over_panic(struct sk_buff *skb, int len, |
void *here); |
extern void skb_under_panic(struct sk_buff *skb, int len, |
void *here); |
/* Internal */ |
#define skb_shinfo(SKB) ((struct skb_shared_info *)((SKB)->end)) |
/** |
* skb_queue_empty - check if a queue is empty |
* @list: queue head |
* |
* Returns true if the queue is empty, false otherwise. |
*/ |
static inline int skb_queue_empty(const struct sk_buff_head *list) |
{ |
return list->next == (struct sk_buff *)list; |
} |
/** |
* skb_get - reference buffer |
* @skb: buffer to reference |
* |
* Makes another reference to a socket buffer and returns a pointer |
* to the buffer. |
*/ |
static inline struct sk_buff *skb_get(struct sk_buff *skb) |
{ |
atomic_inc(&skb->users); |
return skb; |
} |
/* |
* If users == 1, we are the only owner and are can avoid redundant |
* atomic change. |
*/ |
/** |
* kfree_skb - free an sk_buff |
* @skb: buffer to free |
* |
* Drop a reference to the buffer and free it if the usage count has |
* hit zero. |
*/ |
static inline void kfree_skb(struct sk_buff *skb) |
{ |
if (atomic_read(&skb->users) == 1 || atomic_dec_and_test(&skb->users)) |
__kfree_skb(skb); |
} |
/* Use this if you didn't touch the skb state [for fast switching] */ |
static inline void kfree_skb_fast(struct sk_buff *skb) |
{ |
if (atomic_read(&skb->users) == 1 || atomic_dec_and_test(&skb->users)) |
kfree_skbmem(skb); |
} |
/** |
* skb_cloned - is the buffer a clone |
* @skb: buffer to check |
* |
* Returns true if the buffer was generated with skb_clone() and is |
* one of multiple shared copies of the buffer. Cloned buffers are |
* shared data so must not be written to under normal circumstances. |
*/ |
static inline int skb_cloned(const struct sk_buff *skb) |
{ |
return skb->cloned && atomic_read(&skb_shinfo(skb)->dataref) != 1; |
} |
/** |
* skb_shared - is the buffer shared |
* @skb: buffer to check |
* |
* Returns true if more than one person has a reference to this |
* buffer. |
*/ |
static inline int skb_shared(const struct sk_buff *skb) |
{ |
return atomic_read(&skb->users) != 1; |
} |
/** |
* skb_share_check - check if buffer is shared and if so clone it |
* @skb: buffer to check |
* @pri: priority for memory allocation |
* |
* If the buffer is shared the buffer is cloned and the old copy |
* drops a reference. A new clone with a single reference is returned. |
* If the buffer is not shared the original buffer is returned. When |
* being called from interrupt status or with spinlocks held pri must |
* be GFP_ATOMIC. |
* |
* NULL is returned on a memory allocation failure. |
*/ |
static inline struct sk_buff *skb_share_check(struct sk_buff *skb, int pri) |
{ |
might_sleep_if(pri & __GFP_WAIT); |
if (skb_shared(skb)) { |
struct sk_buff *nskb = skb_clone(skb, pri); |
kfree_skb(skb); |
skb = nskb; |
} |
return skb; |
} |
/* |
* Copy shared buffers into a new sk_buff. We effectively do COW on |
* packets to handle cases where we have a local reader and forward |
* and a couple of other messy ones. The normal one is tcpdumping |
* a packet thats being forwarded. |
*/ |
/** |
* skb_unshare - make a copy of a shared buffer |
* @skb: buffer to check |
* @pri: priority for memory allocation |
* |
* If the socket buffer is a clone then this function creates a new |
* copy of the data, drops a reference count on the old copy and returns |
* the new copy with the reference count at 1. If the buffer is not a clone |
* the original buffer is returned. When called with a spinlock held or |
* from interrupt state @pri must be %GFP_ATOMIC |
* |
* %NULL is returned on a memory allocation failure. |
*/ |
static inline struct sk_buff *skb_unshare(struct sk_buff *skb, int pri) |
{ |
might_sleep_if(pri & __GFP_WAIT); |
if (skb_cloned(skb)) { |
struct sk_buff *nskb = skb_copy(skb, pri); |
kfree_skb(skb); /* Free our shared copy */ |
skb = nskb; |
} |
return skb; |
} |
/** |
* skb_peek |
* @list_: list to peek at |
* |
* Peek an &sk_buff. Unlike most other operations you _MUST_ |
* be careful with this one. A peek leaves the buffer on the |
* list and someone else may run off with it. You must hold |
* the appropriate locks or have a private queue to do this. |
* |
* Returns %NULL for an empty list or a pointer to the head element. |
* The reference count is not incremented and the reference is therefore |
* volatile. Use with caution. |
*/ |
static inline struct sk_buff *skb_peek(struct sk_buff_head *list_) |
{ |
struct sk_buff *list = ((struct sk_buff *)list_)->next; |
if (list == (struct sk_buff *)list_) |
list = NULL; |
return list; |
} |
/** |
* skb_peek_tail |
* @list_: list to peek at |
* |
* Peek an &sk_buff. Unlike most other operations you _MUST_ |
* be careful with this one. A peek leaves the buffer on the |
* list and someone else may run off with it. You must hold |
* the appropriate locks or have a private queue to do this. |
* |
* Returns %NULL for an empty list or a pointer to the tail element. |
* The reference count is not incremented and the reference is therefore |
* volatile. Use with caution. |
*/ |
static inline struct sk_buff *skb_peek_tail(struct sk_buff_head *list_) |
{ |
struct sk_buff *list = ((struct sk_buff *)list_)->prev; |
if (list == (struct sk_buff *)list_) |
list = NULL; |
return list; |
} |
/** |
* skb_queue_len - get queue length |
* @list_: list to measure |
* |
* Return the length of an &sk_buff queue. |
*/ |
static inline __u32 skb_queue_len(const struct sk_buff_head *list_) |
{ |
return list_->qlen; |
} |
static inline void skb_queue_head_init(struct sk_buff_head *list) |
{ |
spin_lock_init(&list->lock); |
list->prev = list->next = (struct sk_buff *)list; |
list->qlen = 0; |
} |
/* |
* Insert an sk_buff at the start of a list. |
* |
* The "__skb_xxxx()" functions are the non-atomic ones that |
* can only be called with interrupts disabled. |
*/ |
/** |
* __skb_queue_head - queue a buffer at the list head |
* @list: list to use |
* @newsk: buffer to queue |
* |
* Queue a buffer at the start of a list. This function takes no locks |
* and you must therefore hold required locks before calling it. |
* |
* A buffer cannot be placed on two lists at the same time. |
*/ |
static inline void __skb_queue_head(struct sk_buff_head *list, |
struct sk_buff *newsk) |
{ |
struct sk_buff *prev, *next; |
newsk->list = list; |
list->qlen++; |
prev = (struct sk_buff *)list; |
next = prev->next; |
newsk->next = next; |
newsk->prev = prev; |
next->prev = prev->next = newsk; |
} |
/** |
* skb_queue_head - queue a buffer at the list head |
* @list: list to use |
* @newsk: buffer to queue |
* |
* Queue a buffer at the start of the list. This function takes the |
* list lock and can be used safely with other locking &sk_buff functions |
* safely. |
* |
* A buffer cannot be placed on two lists at the same time. |
*/ |
static inline void skb_queue_head(struct sk_buff_head *list, |
struct sk_buff *newsk) |
{ |
unsigned long flags; |
spin_lock_irqsave(&list->lock, flags); |
__skb_queue_head(list, newsk); |
spin_unlock_irqrestore(&list->lock, flags); |
} |
/** |
* __skb_queue_tail - queue a buffer at the list tail |
* @list: list to use |
* @newsk: buffer to queue |
* |
* Queue a buffer at the end of a list. This function takes no locks |
* and you must therefore hold required locks before calling it. |
* |
* A buffer cannot be placed on two lists at the same time. |
*/ |
static inline void __skb_queue_tail(struct sk_buff_head *list, |
struct sk_buff *newsk) |
{ |
struct sk_buff *prev, *next; |
newsk->list = list; |
list->qlen++; |
next = (struct sk_buff *)list; |
prev = next->prev; |
newsk->next = next; |
newsk->prev = prev; |
next->prev = prev->next = newsk; |
} |
/** |
* skb_queue_tail - queue a buffer at the list tail |
* @list: list to use |
* @newsk: buffer to queue |
* |
* Queue a buffer at the tail of the list. This function takes the |
* list lock and can be used safely with other locking &sk_buff functions |
* safely. |
* |
* A buffer cannot be placed on two lists at the same time. |
*/ |
static inline void skb_queue_tail(struct sk_buff_head *list, |
struct sk_buff *newsk) |
{ |
unsigned long flags; |
spin_lock_irqsave(&list->lock, flags); |
__skb_queue_tail(list, newsk); |
spin_unlock_irqrestore(&list->lock, flags); |
} |
/** |
* __skb_dequeue - remove from the head of the queue |
* @list: list to dequeue from |
* |
* Remove the head of the list. This function does not take any locks |
* so must be used with appropriate locks held only. The head item is |
* returned or %NULL if the list is empty. |
*/ |
static inline struct sk_buff *__skb_dequeue(struct sk_buff_head *list) |
{ |
struct sk_buff *next, *prev, *result; |
prev = (struct sk_buff *) list; |
next = prev->next; |
result = NULL; |
if (next != prev) { |
result = next; |
next = next->next; |
list->qlen--; |
next->prev = prev; |
prev->next = next; |
result->next = result->prev = NULL; |
result->list = NULL; |
} |
return result; |
} |
/** |
* skb_dequeue - remove from the head of the queue |
* @list: list to dequeue from |
* |
* Remove the head of the list. The list lock is taken so the function |
* may be used safely with other locking list functions. The head item is |
* returned or %NULL if the list is empty. |
*/ |
static inline struct sk_buff *skb_dequeue(struct sk_buff_head *list) |
{ |
unsigned long flags; |
struct sk_buff *result; |
spin_lock_irqsave(&list->lock, flags); |
result = __skb_dequeue(list); |
spin_unlock_irqrestore(&list->lock, flags); |
return result; |
} |
/* |
* Insert a packet on a list. |
*/ |
static inline void __skb_insert(struct sk_buff *newsk, |
struct sk_buff *prev, struct sk_buff *next, |
struct sk_buff_head *list) |
{ |
newsk->next = next; |
newsk->prev = prev; |
next->prev = prev->next = newsk; |
newsk->list = list; |
list->qlen++; |
} |
/** |
* skb_insert - insert a buffer |
* @old: buffer to insert before |
* @newsk: buffer to insert |
* |
* Place a packet before a given packet in a list. The list locks are taken |
* and this function is atomic with respect to other list locked calls |
* A buffer cannot be placed on two lists at the same time. |
*/ |
static inline void skb_insert(struct sk_buff *old, struct sk_buff *newsk) |
{ |
unsigned long flags; |
spin_lock_irqsave(&old->list->lock, flags); |
__skb_insert(newsk, old->prev, old, old->list); |
spin_unlock_irqrestore(&old->list->lock, flags); |
} |
/* |
* Place a packet after a given packet in a list. |
*/ |
static inline void __skb_append(struct sk_buff *old, struct sk_buff *newsk) |
{ |
__skb_insert(newsk, old, old->next, old->list); |
} |
/** |
* skb_append - append a buffer |
* @old: buffer to insert after |
* @newsk: buffer to insert |
* |
* Place a packet after a given packet in a list. The list locks are taken |
* and this function is atomic with respect to other list locked calls. |
* A buffer cannot be placed on two lists at the same time. |
*/ |
static inline void skb_append(struct sk_buff *old, struct sk_buff *newsk) |
{ |
unsigned long flags; |
spin_lock_irqsave(&old->list->lock, flags); |
__skb_append(old, newsk); |
spin_unlock_irqrestore(&old->list->lock, flags); |
} |
/* |
* remove sk_buff from list. _Must_ be called atomically, and with |
* the list known.. |
*/ |
static inline void __skb_unlink(struct sk_buff *skb, struct sk_buff_head *list) |
{ |
struct sk_buff *next, *prev; |
list->qlen--; |
next = skb->next; |
prev = skb->prev; |
skb->next = skb->prev = NULL; |
skb->list = NULL; |
next->prev = prev; |
prev->next = next; |
} |
/** |
* skb_unlink - remove a buffer from a list |
* @skb: buffer to remove |
* |
* Place a packet after a given packet in a list. The list locks are taken |
* and this function is atomic with respect to other list locked calls |
* |
* Works even without knowing the list it is sitting on, which can be |
* handy at times. It also means that THE LIST MUST EXIST when you |
* unlink. Thus a list must have its contents unlinked before it is |
* destroyed. |
*/ |
static inline void skb_unlink(struct sk_buff *skb) |
{ |
struct sk_buff_head *list = skb->list; |
if (list) { |
unsigned long flags; |
spin_lock_irqsave(&list->lock, flags); |
if (skb->list == list) |
__skb_unlink(skb, skb->list); |
spin_unlock_irqrestore(&list->lock, flags); |
} |
} |
/* XXX: more streamlined implementation */ |
/** |
* __skb_dequeue_tail - remove from the tail of the queue |
* @list: list to dequeue from |
* |
* Remove the tail of the list. This function does not take any locks |
* so must be used with appropriate locks held only. The tail item is |
* returned or %NULL if the list is empty. |
*/ |
static inline struct sk_buff *__skb_dequeue_tail(struct sk_buff_head *list) |
{ |
struct sk_buff *skb = skb_peek_tail(list); |
if (skb) |
__skb_unlink(skb, list); |
return skb; |
} |
/** |
* skb_dequeue - remove from the head of the queue |
* @list: list to dequeue from |
* |
* Remove the head of the list. The list lock is taken so the function |
* may be used safely with other locking list functions. The tail item is |
* returned or %NULL if the list is empty. |
*/ |
static inline struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list) |
{ |
unsigned long flags; |
struct sk_buff *result; |
spin_lock_irqsave(&list->lock, flags); |
result = __skb_dequeue_tail(list); |
spin_unlock_irqrestore(&list->lock, flags); |
return result; |
} |
static inline int skb_is_nonlinear(const struct sk_buff *skb) |
{ |
return skb->data_len; |
} |
static inline unsigned int skb_headlen(const struct sk_buff *skb) |
{ |
return skb->len - skb->data_len; |
} |
static inline int skb_pagelen(const struct sk_buff *skb) |
{ |
int i, len = 0; |
for (i = (int)skb_shinfo(skb)->nr_frags - 1; i >= 0; i--) |
len += skb_shinfo(skb)->frags[i].size; |
return len + skb_headlen(skb); |
} |
static inline void skb_fill_page_desc(struct sk_buff *skb, int i, struct page *page, int off, int size) |
{ |
skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; |
frag->page = page; |
frag->page_offset = off; |
frag->size = size; |
skb_shinfo(skb)->nr_frags = i+1; |
} |
#define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags) |
#define SKB_FRAG_ASSERT(skb) BUG_ON(skb_shinfo(skb)->frag_list) |
#define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb)) |
/* |
* Add data to an sk_buff |
*/ |
static inline unsigned char *__skb_put(struct sk_buff *skb, unsigned int len) |
{ |
unsigned char *tmp = skb->tail; |
SKB_LINEAR_ASSERT(skb); |
skb->tail += len; |
skb->len += len; |
return tmp; |
} |
/** |
* skb_put - add data to a buffer |
* @skb: buffer to use |
* @len: amount of data to add |
* |
* This function extends the used data area of the buffer. If this would |
* exceed the total buffer size the kernel will panic. A pointer to the |
* first byte of the extra data is returned. |
*/ |
static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len) |
{ |
unsigned char *tmp = skb->tail; |
SKB_LINEAR_ASSERT(skb); |
skb->tail += len; |
skb->len += len; |
if (unlikely(skb->tail>skb->end)) |
skb_over_panic(skb, len, current_text_addr()); |
return tmp; |
} |
static inline unsigned char *__skb_push(struct sk_buff *skb, unsigned int len) |
{ |
skb->data -= len; |
skb->len += len; |
return skb->data; |
} |
/** |
* skb_push - add data to the start of a buffer |
* @skb: buffer to use |
* @len: amount of data to add |
* |
* This function extends the used data area of the buffer at the buffer |
* start. If this would exceed the total buffer headroom the kernel will |
* panic. A pointer to the first byte of the extra data is returned. |
*/ |
static inline unsigned char *skb_push(struct sk_buff *skb, unsigned int len) |
{ |
skb->data -= len; |
skb->len += len; |
if (unlikely(skb->data<skb->head)) |
skb_under_panic(skb, len, current_text_addr()); |
return skb->data; |
} |
static inline char *__skb_pull(struct sk_buff *skb, unsigned int len) |
{ |
skb->len -= len; |
BUG_ON(skb->len < skb->data_len); |
return skb->data += len; |
} |
/** |
* skb_pull - remove data from the start of a buffer |
* @skb: buffer to use |
* @len: amount of data to remove |
* |
* This function removes data from the start of a buffer, returning |
* the memory to the headroom. A pointer to the next data in the buffer |
* is returned. Once the data has been pulled future pushes will overwrite |
* the old data. |
*/ |
static inline unsigned char *skb_pull(struct sk_buff *skb, unsigned int len) |
{ |
return unlikely(len > skb->len) ? NULL : __skb_pull(skb, len); |
} |
extern unsigned char *__pskb_pull_tail(struct sk_buff *skb, int delta); |
static inline char *__pskb_pull(struct sk_buff *skb, unsigned int len) |
{ |
if (len > skb_headlen(skb) && |
!__pskb_pull_tail(skb, len-skb_headlen(skb))) |
return NULL; |
skb->len -= len; |
return skb->data += len; |
} |
static inline unsigned char *pskb_pull(struct sk_buff *skb, unsigned int len) |
{ |
return unlikely(len > skb->len) ? NULL : __pskb_pull(skb, len); |
} |
static inline int pskb_may_pull(struct sk_buff *skb, unsigned int len) |
{ |
if (likely(len <= skb_headlen(skb))) |
return 1; |
if (unlikely(len > skb->len)) |
return 0; |
return __pskb_pull_tail(skb, len-skb_headlen(skb)) != NULL; |
} |
/** |
* skb_headroom - bytes at buffer head |
* @skb: buffer to check |
* |
* Return the number of bytes of free space at the head of an &sk_buff. |
*/ |
static inline int skb_headroom(const struct sk_buff *skb) |
{ |
return skb->data - skb->head; |
} |
/** |
* skb_tailroom - bytes at buffer end |
* @skb: buffer to check |
* |
* Return the number of bytes of free space at the tail of an sk_buff |
*/ |
static inline int skb_tailroom(const struct sk_buff *skb) |
{ |
return skb_is_nonlinear(skb) ? 0 : skb->end - skb->tail; |
} |
/** |
* skb_reserve - adjust headroom |
* @skb: buffer to alter |
* @len: bytes to move |
* |
* Increase the headroom of an empty &sk_buff by reducing the tail |
* room. This is only allowed for an empty buffer. |
*/ |
static inline void skb_reserve(struct sk_buff *skb, unsigned int len) |
{ |
skb->data += len; |
skb->tail += len; |
} |
extern int ___pskb_trim(struct sk_buff *skb, unsigned int len, int realloc); |
static inline void __skb_trim(struct sk_buff *skb, unsigned int len) |
{ |
if (!skb->data_len) { |
skb->len = len; |
skb->tail = skb->data + len; |
} else |
___pskb_trim(skb, len, 0); |
} |
/** |
* skb_trim - remove end from a buffer |
* @skb: buffer to alter |
* @len: new length |
* |
* Cut the length of a buffer down by removing data from the tail. If |
* the buffer is already under the length specified it is not modified. |
*/ |
static inline void skb_trim(struct sk_buff *skb, unsigned int len) |
{ |
if (skb->len > len) |
__skb_trim(skb, len); |
} |
static inline int __pskb_trim(struct sk_buff *skb, unsigned int len) |
{ |
if (!skb->data_len) { |
skb->len = len; |
skb->tail = skb->data+len; |
return 0; |
} |
return ___pskb_trim(skb, len, 1); |
} |
static inline int pskb_trim(struct sk_buff *skb, unsigned int len) |
{ |
return (len < skb->len) ? __pskb_trim(skb, len) : 0; |
} |
/** |
* skb_orphan - orphan a buffer |
* @skb: buffer to orphan |
* |
* If a buffer currently has an owner then we call the owner's |
* destructor function and make the @skb unowned. The buffer continues |
* to exist but is no longer charged to its former owner. |
*/ |
static inline void skb_orphan(struct sk_buff *skb) |
{ |
if (skb->destructor) |
skb->destructor(skb); |
skb->destructor = NULL; |
skb->sk = NULL; |
} |
/** |
* skb_queue_purge - empty a list |
* @list: list to empty |
* |
* Delete all buffers on an &sk_buff list. Each buffer is removed from |
* the list and one reference dropped. This function takes the list |
* lock and is atomic with respect to other list locking functions. |
*/ |
static inline void skb_queue_purge(struct sk_buff_head *list) |
{ |
struct sk_buff *skb; |
while ((skb = skb_dequeue(list)) != NULL) |
kfree_skb(skb); |
} |
/** |
* __skb_queue_purge - empty a list |
* @list: list to empty |
* |
* Delete all buffers on an &sk_buff list. Each buffer is removed from |
* the list and one reference dropped. This function does not take the |
* list lock and the caller must hold the relevant locks to use it. |
*/ |
static inline void __skb_queue_purge(struct sk_buff_head *list) |
{ |
struct sk_buff *skb; |
while ((skb = __skb_dequeue(list)) != NULL) |
kfree_skb(skb); |
} |
/** |
* __dev_alloc_skb - allocate an skbuff for sending |
* @length: length to allocate |
* @gfp_mask: get_free_pages mask, passed to alloc_skb |
* |
* Allocate a new &sk_buff and assign it a usage count of one. The |
* buffer has unspecified headroom built in. Users should allocate |
* the headroom they think they need without accounting for the |
* built in space. The built in space is used for optimisations. |
* |
* %NULL is returned in there is no free memory. |
*/ |
static inline struct sk_buff *__dev_alloc_skb(unsigned int length, |
int gfp_mask) |
{ |
struct sk_buff *skb = alloc_skb(length + 16, gfp_mask); |
if (likely(skb)) |
skb_reserve(skb, 16); |
return skb; |
} |
/** |
* dev_alloc_skb - allocate an skbuff for sending |
* @length: length to allocate |
* |
* Allocate a new &sk_buff and assign it a usage count of one. The |
* buffer has unspecified headroom built in. Users should allocate |
* the headroom they think they need without accounting for the |
* built in space. The built in space is used for optimisations. |
* |
* %NULL is returned in there is no free memory. Although this function |
* allocates memory it can be called from an interrupt. |
*/ |
static inline struct sk_buff *dev_alloc_skb(unsigned int length) |
{ |
return __dev_alloc_skb(length, GFP_ATOMIC); |
} |
/** |
* skb_cow - copy header of skb when it is required |
* @skb: buffer to cow |
* @headroom: needed headroom |
* |
* If the skb passed lacks sufficient headroom or its data part |
* is shared, data is reallocated. If reallocation fails, an error |
* is returned and original skb is not changed. |
* |
* The result is skb with writable area skb->head...skb->tail |
* and at least @headroom of space at head. |
*/ |
static inline int skb_cow(struct sk_buff *skb, unsigned int headroom) |
{ |
int delta = (headroom > 16 ? headroom : 16) - skb_headroom(skb); |
if (delta < 0) |
delta = 0; |
if (delta || skb_cloned(skb)) |
return pskb_expand_head(skb, (delta + 15) & ~15, 0, GFP_ATOMIC); |
return 0; |
} |
/** |
* skb_padto - pad an skbuff up to a minimal size |
* @skb: buffer to pad |
* @len: minimal length |
* |
* Pads up a buffer to ensure the trailing bytes exist and are |
* blanked. If the buffer already contains sufficient data it |
* is untouched. Returns the buffer, which may be a replacement |
* for the original, or NULL for out of memory - in which case |
* the original buffer is still freed. |
*/ |
static inline struct sk_buff *skb_padto(struct sk_buff *skb, unsigned int len) |
{ |
unsigned int size = skb->len; |
if (likely(size >= len)) |
return skb; |
return skb_pad(skb, len-size); |
} |
/** |
* skb_linearize - convert paged skb to linear one |
* @skb: buffer to linarize |
* @gfp: allocation mode |
* |
* If there is no free memory -ENOMEM is returned, otherwise zero |
* is returned and the old skb data released. |
*/ |
extern int __skb_linearize(struct sk_buff *skb, int gfp); |
static inline int __deprecated skb_linearize(struct sk_buff *skb, int gfp) |
{ |
return __skb_linearize(skb, gfp); |
} |
static inline void *kmap_skb_frag(const skb_frag_t *frag) |
{ |
#ifdef CONFIG_HIGHMEM |
BUG_ON(in_irq()); |
local_bh_disable(); |
#endif |
return kmap_atomic(frag->page, KM_SKB_DATA_SOFTIRQ); |
} |
static inline void kunmap_skb_frag(void *vaddr) |
{ |
kunmap_atomic(vaddr, KM_SKB_DATA_SOFTIRQ); |
#ifdef CONFIG_HIGHMEM |
local_bh_enable(); |
#endif |
} |
#define skb_queue_walk(queue, skb) \ |
for (skb = (queue)->next, prefetch(skb->next); \ |
(skb != (struct sk_buff *)(queue)); \ |
skb = skb->next, prefetch(skb->next)) |
extern struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, |
int noblock, int *err); |
extern unsigned int datagram_poll(struct file *file, struct socket *sock, |
struct poll_table_struct *wait); |
extern int skb_copy_datagram(const struct sk_buff *from, |
int offset, char *to, int size); |
extern int skb_copy_datagram_iovec(const struct sk_buff *from, |
int offset, struct iovec *to, |
int size); |
extern int skb_copy_and_csum_datagram(const struct sk_buff *skb, |
int offset, u8 *to, int len, |
unsigned int *csump); |
extern int skb_copy_and_csum_datagram_iovec(const |
struct sk_buff *skb, |
int hlen, |
struct iovec *iov); |
extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); |
extern unsigned int skb_checksum(const struct sk_buff *skb, int offset, |
int len, unsigned int csum); |
extern int skb_copy_bits(const struct sk_buff *skb, int offset, |
void *to, int len); |
extern unsigned int skb_copy_and_csum_bits(const struct sk_buff *skb, |
int offset, u8 *to, int len, |
unsigned int csum); |
extern void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to); |
extern void skb_init(void); |
extern void skb_add_mtu(int mtu); |
#ifdef CONFIG_NETFILTER |
static inline void nf_conntrack_put(struct nf_ct_info *nfct) |
{ |
if (nfct && atomic_dec_and_test(&nfct->master->use)) |
nfct->master->destroy(nfct->master); |
} |
static inline void nf_conntrack_get(struct nf_ct_info *nfct) |
{ |
if (nfct) |
atomic_inc(&nfct->master->use); |
} |
#ifdef CONFIG_BRIDGE_NETFILTER |
static inline void nf_bridge_put(struct nf_bridge_info *nf_bridge) |
{ |
if (nf_bridge && atomic_dec_and_test(&nf_bridge->use)) |
kfree(nf_bridge); |
} |
static inline void nf_bridge_get(struct nf_bridge_info *nf_bridge) |
{ |
if (nf_bridge) |
atomic_inc(&nf_bridge->use); |
} |
#endif |
#endif |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_SKBUFF_H */ |
/shark/trunk/drivers/linuxc26/include/linux/sdla_x25.h |
---|
0,0 → 1,772 |
/***************************************************************************** |
* sdla_x25.h Sangoma X.25 firmware API definitions. |
* |
* Author: Nenad Corbic <ncorbic@sangoma.com> |
* |
* 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. |
* ============================================================================ |
* Feb 28, 2000 Nenad Corbic Updated for socket based x25api |
* Dec 13, 1996 Gene Kozin Initial version |
*****************************************************************************/ |
#ifndef _SDLA_X25_H |
#define _SDLA_X25_H |
/*---------------------------------------------------------------------------- |
* Notes: |
* ------ |
* 1. All structures defined in this file are byte-alined. |
* Compiler Platform |
* -------- -------- |
* GNU C Linux |
* |
*/ |
#ifndef PACKED |
# define PACKED __attribute__((packed)) |
#endif /* PACKED */ |
/****** CONSTANTS DEFINITIONS ***********************************************/ |
#define X25_MAX_CHAN 255 /* max number of open X.25 circuits */ |
#define X25_MAX_DATA 1024 /* max length of X.25 data buffer */ |
/* |
* X.25 shared memory layout. |
*/ |
#define X25_MBOX_OFFS 0x16B0 /* general mailbox block */ |
#define X25_RXMBOX_OFFS 0x1AD0 /* receive mailbox */ |
#define X25_STATUS_OFFS 0x1EF0 /* X.25 status structure */ |
#define X25_MB_VECTOR 0xE000 /* S514 mailbox window vecotr */ |
#define X25_MISC_HDLC_BITS 0x1F00 /*X.25 miscallaneous HDLC bits */ |
/* code levels */ |
#define HDLC_LEVEL 0x01 |
#define X25_LEVEL 0x02 |
#define X25_AND_HDLC_LEVEL 0x03 |
#define DO_HDLC_LEVEL_ERROR_CHECKING 0x04 |
/****** DATA STRUCTURES *****************************************************/ |
/*---------------------------------------------------------------------------- |
* X.25 Command Block. |
*/ |
typedef struct X25Cmd |
{ |
unsigned char command PACKED; /* command code */ |
unsigned short length PACKED; /* transfer data length */ |
unsigned char result PACKED; /* return code */ |
unsigned char pf PACKED; /* P/F bit */ |
unsigned short lcn PACKED; /* logical channel */ |
unsigned char qdm PACKED; /* Q/D/M bits */ |
unsigned char cause PACKED; /* cause field */ |
unsigned char diagn PACKED; /* diagnostics */ |
unsigned char pktType PACKED; /* packet type */ |
unsigned char resrv[4] PACKED; /* reserved */ |
} TX25Cmd; |
/* |
* Defines for the 'command' field. |
*/ |
/*----- General commands --------------*/ |
#define X25_SET_GLOBAL_VARS 0x0B /* set global variables */ |
#define X25_READ_MODEM_STATUS 0x0C /* read modem status */ |
#define X25_READ_CODE_VERSION 0x15 /* read firmware version number */ |
#define X25_TRACE_CONFIGURE 0x14 /* configure trace facility */ |
#define X25_READ_TRACE_DATA 0x16 /* read trace data */ |
#define X25_SET_INTERRUPT_MODE 0x17 /* set interrupt generation mode */ |
#define X25_READ_INTERRUPT_MODE 0x18 /* read interrupt generation mode */ |
/*----- HDLC-level commands -----------*/ |
#define X25_HDLC_LINK_CONFIGURE 0x01 /* configure HDLC link level */ |
#define X25_HDLC_LINK_OPEN 0x02 /* open HDLC link */ |
#define X25_HDLC_LINK_CLOSE 0x03 /* close HDLC link */ |
#define X25_HDLC_LINK_SETUP 0x04 /* set up HDLC link */ |
#define X25_HDLC_LINK_DISC 0x05 /* disconnect DHLC link */ |
#define X25_HDLC_LINK_STATUS 0x06 /* read DHLC link status */ |
#define X25_HDLC_READ_STATS 0x07 /* read operational statistics */ |
#define X25_HDLC_FLUSH_STATS 0x08 /* flush operational statistics */ |
#define X25_HDLC_READ_COMM_ERR 0x09 /* read error statistics */ |
#define X25_HDLC_FLUSH_COMM_ERR 0x0A /* flush error statistics */ |
#define X25_HDLC_FLUSH_BUFFERS 0x0D /* flush HDLC-level data buffers */ |
#define X25_HDLC_SPRVS_CNT_STAT 0x0F /* read surervisory count status */ |
#define X25_HDLC_SEND_UI_FRAME 0x10 /* send unnumbered information frame */ |
#define X25_HDLC_WRITE 0x11 /* send HDLC information frame */ |
#define X25_HDLC_READ 0x21 /* read HDLC information frame */ |
#define X25_HDLC_READ_CONFIG 0x12 /* read HDLC configuration */ |
#define X25_HDLC_SET_CONFIG 0x13 /* set HDLC configuration */ |
#define SET_PROTOCOL_LEVEL 0x1F /* set protocol level */ |
/*----- X.25-level commands -----------*/ |
#define X25_READ 0x22 /* read X.25 packet */ |
#define X25_WRITE 0x23 /* send X.25 packet */ |
#define X25_PLACE_CALL 0x30 /* place a call on SVC */ |
#define X25_ACCEPT_CALL 0x31 /* accept incomming call */ |
#define X25_CLEAR_CALL 0x32 /* clear call */ |
#define X25_CLEAR_CONFRM 0x33 /* send clear confirmation packet */ |
#define X25_RESET 0x34 /* send reset request packet */ |
#define X25_RESET_CONFRM 0x35 /* send reset confirmation packet */ |
#define X25_RESTART 0x36 /* send restart request packet */ |
#define X25_RESTART_CONFRM 0x37 /* send restart confirmation packet */ |
#define X25_INTERRUPT 0x38 /* send interrupt request packet */ |
#define X25_INTERRUPT_CONFRM 0x39 /* send interrupt confirmation pkt */ |
#define X25_REGISTRATION_RQST 0x3A /* send registration request packet */ |
#define X25_REGISTRATION_CONFRM 0x3B /* send registration confirmation */ |
#define X25_IS_DATA_AVAILABLE 0x40 /* querry receive queue */ |
#define X25_INCOMMING_CALL_CTL 0x41 /* select incomming call options */ |
#define X25_CONFIGURE_PVC 0x42 /* configure PVC */ |
#define X25_GET_ACTIVE_CHANNELS 0x43 /* get a list of active circuits */ |
#define X25_READ_CHANNEL_CONFIG 0x44 /* read virt. circuit configuration */ |
#define X25_FLUSH_DATA_BUFFERS 0x45 /* flush X.25-level data buffers */ |
#define X25_READ_HISTORY_TABLE 0x46 /* read asynchronous event log */ |
#define X25_HISTORY_TABLE_CTL 0x47 /* control asynchronous event log */ |
#define X25_GET_TX_D_BIT_STATUS 0x48 /* is packet with D-bit acknowleged */ |
#define X25_READ_STATISTICS 0x49 /* read X.25-level statistics */ |
#define X25_FLUSH_STATISTICS 0x4A /* flush X.25-level statistics */ |
#define X25_READ_CONFIGURATION 0x50 /* read HDLC & X.25 configuration */ |
#define X25_SET_CONFIGURATION 0x51 /* set HDLC & X.25 configuration */ |
/* |
* Defines for the 'result' field. |
*/ |
/*----- General results ---------------*/ |
#define X25RES_OK 0x00 |
#define X25RES_ERROR 0x01 |
#define X25RES_LINK_NOT_IN_ABM 0x02 /* link is not in ABM mode */ |
#define X25RES_LINK_CLOSED 0x03 |
#define X25RES_INVAL_LENGTH 0x04 |
#define X25RES_INVAL_CMD 0x05 |
#define X25RES_UNNUMBERED_FRAME 0x06 /* unnunbered frame received */ |
#define X25RES_FRM_REJECT_MODE 0x07 /* link is in Frame Reject mode */ |
#define X25RES_MODEM_FAILURE 0x08 /* DCD and/or CTS dropped */ |
#define X25RES_N2_RETRY_LIMIT 0x09 /* N2 retry limit has been exceeded */ |
#define X25RES_INVAL_LCN 0x30 /* invalid logical channel number */ |
#define X25RES_INVAL_STATE 0x31 /* channel is not in data xfer mode */ |
#define X25RES_INVAL_DATA_LEN 0x32 /* invalid data length */ |
#define X25RES_NOT_READY 0x33 /* no data available / buffers full */ |
#define X25RES_NETWORK_DOWN 0x34 |
#define X25RES_CHANNEL_IN_USE 0x35 /* there is data queued on this LCN */ |
#define X25RES_REGST_NOT_SUPPRT 0x36 /* registration not supported */ |
#define X25RES_INVAL_FORMAT 0x37 /* invalid packet format */ |
#define X25RES_D_BIT_NOT_SUPPRT 0x38 /* D-bit pragmatics not supported */ |
#define X25RES_FACIL_NOT_SUPPRT 0x39 /* Call facility not supported */ |
#define X25RES_INVAL_CALL_ARG 0x3A /* errorneous call arguments */ |
#define X25RES_INVAL_CALL_DATA 0x3B /* errorneous call user data */ |
#define X25RES_ASYNC_PACKET 0x40 /* asynchronous packet received */ |
#define X25RES_PROTO_VIOLATION 0x41 /* protocol violation occurred */ |
#define X25RES_PKT_TIMEOUT 0x42 /* X.25 packet time out */ |
#define X25RES_PKT_RETRY_LIMIT 0x43 /* X.25 packet retry limit exceeded */ |
/*----- Command-dependent results -----*/ |
#define X25RES_LINK_DISC 0x00 /* HDLC_LINK_STATUS */ |
#define X25RES_LINK_IN_ABM 0x01 /* HDLC_LINK_STATUS */ |
#define X25RES_NO_DATA 0x01 /* HDLC_READ/READ_TRACE_DATA*/ |
#define X25RES_TRACE_INACTIVE 0x02 /* READ_TRACE_DATA */ |
#define X25RES_LINK_IS_OPEN 0x01 /* HDLC_LINK_OPEN */ |
#define X25RES_LINK_IS_DISC 0x02 /* HDLC_LINK_DISC */ |
#define X25RES_LINK_IS_CLOSED 0x03 /* HDLC_LINK_CLOSE */ |
#define X25RES_INVAL_PARAM 0x31 /* INCOMMING_CALL_CTL */ |
#define X25RES_INVAL_CONFIG 0x35 /* REGISTR_RQST/CONFRM */ |
/* |
* Defines for the 'qdm_bits' field. |
*/ |
#define X25CMD_Q_BIT_MASK 0x04 |
#define X25CMD_D_BIT_MASK 0x02 |
#define X25CMD_M_BIT_MASK 0x01 |
/* |
* Defines for the 'pkt_type' field. |
*/ |
/*----- Asynchronous events ------*/ |
#define ASE_CLEAR_RQST 0x02 |
#define ASE_RESET_RQST 0x04 |
#define ASE_RESTART_RQST 0x08 |
#define ASE_INTERRUPT 0x10 |
#define ASE_DTE_REGISTR_RQST 0x20 |
#define ASE_CALL_RQST 0x30 |
#define ASE_CALL_ACCEPTED 0x31 |
#define ASE_CLEAR_CONFRM 0x32 |
#define ASE_RESET_CONFRM 0x33 |
#define ASE_RESTART_CONFRM 0x34 |
#define ASE_INTERRUPT_CONFRM 0x35 |
#define ASE_DCE_REGISTR_CONFRM 0x36 |
#define ASE_DIAGNOSTIC 0x37 |
#define ASE_CALL_AUTO_CLEAR 0x38 |
#define AUTO_RESPONSE_FLAG 0x80 |
/*----- Time-Out events ----------*/ |
#define TOE_RESTART_RQST 0x03 |
#define TOE_CALL_RQST 0x05 |
#define TOE_CLEAR_RQST 0x08 |
#define TOE_RESET_RQST 0x0A |
/*----- Protocol Violation events */ |
#define PVE_CLEAR_RQST 0x32 |
#define PVE_RESET_RQST 0x33 |
#define PVE_RESTART_RQST 0x34 |
#define PVE_DIAGNOSTIC 0x37 |
#define INTR_ON_RX_FRAME 0x01 |
#define INTR_ON_TX_FRAME 0x02 |
#define INTR_ON_MODEM_STATUS_CHANGE 0x04 |
#define INTR_ON_COMMAND_COMPLETE 0x08 |
#define INTR_ON_X25_ASY_TRANSACTION 0x10 |
#define INTR_ON_TIMER 0x40 |
#define DIRECT_RX_INTR_USAGE 0x80 |
#define NO_INTR_PENDING 0x00 |
#define RX_INTR_PENDING 0x01 |
#define TX_INTR_PENDING 0x02 |
#define MODEM_INTR_PENDING 0x04 |
#define COMMAND_COMPLETE_INTR_PENDING 0x08 |
#define X25_ASY_TRANS_INTR_PENDING 0x10 |
#define TIMER_INTR_PENDING 0x40 |
/*---------------------------------------------------------------------------- |
* X.25 Mailbox. |
* This structure is located at offsets X25_MBOX_OFFS and X25_RXMBOX_OFFS |
* into shared memory window. |
*/ |
typedef struct X25Mbox |
{ |
unsigned char opflag PACKED; /* 00h: execution flag */ |
TX25Cmd cmd PACKED; /* 01h: command block */ |
unsigned char data[1] PACKED; /* 10h: data buffer */ |
} TX25Mbox; |
/*---------------------------------------------------------------------------- |
* X.25 Time Stamp Structure. |
*/ |
typedef struct X25TimeStamp |
{ |
unsigned char month PACKED; |
unsigned char date PACKED; |
unsigned char sec PACKED; |
unsigned char min PACKED; |
unsigned char hour PACKED; |
} TX25TimeStamp; |
/*---------------------------------------------------------------------------- |
* X.25 Status Block. |
* This structure is located at offset X25_STATUS_OFF into shared memory |
* window. |
*/ |
typedef struct X25Status |
{ |
unsigned short pvc_map PACKED; /* 00h: PVC map */ |
unsigned short icc_map PACKED; /* 02h: Incomming Chan. map */ |
unsigned short twc_map PACKED; /* 04h: Two-way Cnan. map */ |
unsigned short ogc_map PACKED; /* 06h: Outgoing Chan. map */ |
TX25TimeStamp tstamp PACKED; /* 08h: timestamp (BCD) */ |
unsigned char iflags PACKED; /* 0Dh: interrupt flags */ |
unsigned char imask PACKED; /* 0Eh: interrupt mask */ |
unsigned char resrv PACKED; /* 0Eh: */ |
unsigned char gflags PACKED; /* 10h: misc. HDLC/X25 flags */ |
unsigned char cflags[X25_MAX_CHAN] PACKED; /* channel status bytes */ |
} TX25Status; |
/* |
* Bitmasks for the 'iflags' field. |
*/ |
#define X25_RX_INTR 0x01 /* receive interrupt */ |
#define X25_TX_INTR 0x02 /* transmit interrupt */ |
#define X25_MODEM_INTR 0x04 /* modem status interrupt (CTS/DCD) */ |
#define X25_EVENT_INTR 0x10 /* asyncronous event encountered */ |
#define X25_CMD_INTR 0x08 /* interface command complete */ |
/* |
* Bitmasks for the 'gflags' field. |
*/ |
#define X25_HDLC_ABM 0x01 /* HDLC is in ABM mode */ |
#define X25_RX_READY 0x02 /* X.25 data available */ |
#define X25_TRACE_READY 0x08 /* trace data available */ |
#define X25_EVENT_IND 0x20 /* asynchronous event indicator */ |
#define X25_TX_READY 0x40 /* space is available in Tx buf.*/ |
/* |
* Bitmasks for the 'cflags' field. |
*/ |
#define X25_XFER_MODE 0x80 /* channel is in data transfer mode */ |
#define X25_TXWIN_OPEN 0x40 /* transmit window open */ |
#define X25_RXBUF_MASK 0x3F /* number of data buffers available */ |
/***************************************************************************** |
* Following definitions structurize contents of the TX25Mbox.data field for |
* different X.25 interface commands. |
****************************************************************************/ |
/* --------------------------------------------------------------------------- |
* X25_SET_GLOBAL_VARS Command. |
*/ |
typedef struct X25GlobalVars |
{ |
unsigned char resrv PACKED; /* 00h: reserved */ |
unsigned char dtrCtl PACKED; /* 01h: DTR control code */ |
unsigned char resErr PACKED; /* 01h: '1' - reset modem error */ |
} TX25GlobalVars; |
/* |
* Defines for the 'dtrCtl' field. |
*/ |
#define X25_RAISE_DTR 0x01 |
#define X25_DROP_DTR 0x02 |
/* --------------------------------------------------------------------------- |
* X25_READ_MODEM_STATUS Command. |
*/ |
typedef struct X25ModemStatus |
{ |
unsigned char status PACKED; /* 00h: modem status */ |
} TX25ModemStatus; |
/* |
* Defines for the 'status' field. |
*/ |
#define X25_CTS_MASK 0x20 |
#define X25_DCD_MASK 0x08 |
/* --------------------------------------------------------------------------- |
* X25_HDLC_LINK_STATUS Command. |
*/ |
typedef struct X25LinkStatus |
{ |
unsigned char txQueued PACKED; /* 00h: queued Tx I-frames*/ |
unsigned char rxQueued PACKED; /* 01h: queued Rx I-frames*/ |
unsigned char station PACKED; /* 02h: DTE/DCE config. */ |
unsigned char reserved PACKED; /* 03h: reserved */ |
unsigned char sfTally PACKED; /* 04h: supervisory frame tally */ |
} TX25LinkStatus; |
/* |
* Defines for the 'station' field. |
*/ |
#define X25_STATION_DTE 0x01 /* station configured as DTE */ |
#define X25_STATION_DCE 0x02 /* station configured as DCE */ |
/* --------------------------------------------------------------------------- |
* X25_HDLC_READ_STATS Command. |
*/ |
typedef struct HdlcStats |
{ /* a number of ... */ |
unsigned short rxIFrames PACKED; /* 00h: ready Rx I-frames */ |
unsigned short rxNoseq PACKED; /* 02h: frms out-of-sequence */ |
unsigned short rxNodata PACKED; /* 04h: I-frms without data */ |
unsigned short rxDiscarded PACKED; /* 06h: discarded frames */ |
unsigned short rxTooLong PACKED; /* 08h: frames too long */ |
unsigned short rxBadAddr PACKED; /* 0Ah: frms with inval.addr*/ |
unsigned short txAcked PACKED; /* 0Ch: acknowledged I-frms */ |
unsigned short txRetransm PACKED; /* 0Eh: re-transmit. I-frms */ |
unsigned short t1Timeout PACKED; /* 10h: T1 timeouts */ |
unsigned short rxSABM PACKED; /* 12h: received SABM frames */ |
unsigned short rxDISC PACKED; /* 14h: received DISC frames */ |
unsigned short rxDM PACKED; /* 16h: received DM frames */ |
unsigned short rxFRMR PACKED; /* 18h: FRMR frames received */ |
unsigned short txSABM PACKED; /* 1Ah: transm. SABM frames*/ |
unsigned short txDISC PACKED; /* 1Ch: transm. DISC frames*/ |
unsigned short txDM PACKED; /* 1Eh: transm. DM frames */ |
unsigned short txFRMR PACKED; /* 20h: transm. FRMR frames*/ |
} THdlcStats; |
/* --------------------------------------------------------------------------- |
* X25_HDLC_READ_COMM_ERR Command. |
*/ |
typedef struct HdlcCommErr |
{ /* a number of ... */ |
unsigned char rxOverrun PACKED; /* 00h: Rx overrun errors */ |
unsigned char rxBadCrc PACKED; /* 01h: Rx CRC errors */ |
unsigned char rxAborted PACKED; /* 02h: Rx aborted frames */ |
unsigned char rxDropped PACKED; /* 03h: frames lost */ |
unsigned char txAborted PACKED; /* 04h: Tx aborted frames */ |
unsigned char txUnderrun PACKED; /* 05h: Tx underrun errors */ |
unsigned char txMissIntr PACKED; /* 06h: missed underrun ints */ |
unsigned char reserved PACKED; /* 07h: reserved */ |
unsigned char droppedDCD PACKED; /* 08h: times DCD dropped */ |
unsigned char droppedCTS PACKED; /* 09h: times CTS dropped */ |
} THdlcCommErr; |
/* --------------------------------------------------------------------------- |
* X25_SET_CONFIGURATION & X25_READ_CONFIGURATION Commands. |
*/ |
typedef struct X25Config |
{ |
unsigned char baudRate PACKED; /* 00h: */ |
unsigned char t1 PACKED; /* 01h: */ |
unsigned char t2 PACKED; /* 02h: */ |
unsigned char n2 PACKED; /* 03h: */ |
unsigned short hdlcMTU PACKED; /* 04h: */ |
unsigned char hdlcWindow PACKED; /* 06h: */ |
unsigned char t4 PACKED; /* 07h: */ |
unsigned char autoModem PACKED; /* 08h: */ |
unsigned char autoHdlc PACKED; /* 09h: */ |
unsigned char hdlcOptions PACKED; /* 0Ah: */ |
unsigned char station PACKED; /* 0Bh: */ |
unsigned char pktWindow PACKED; /* 0Ch: */ |
unsigned short defPktSize PACKED; /* 0Dh: */ |
unsigned short pktMTU PACKED; /* 0Fh: */ |
unsigned short loPVC PACKED; /* 11h: */ |
unsigned short hiPVC PACKED; /* 13h: */ |
unsigned short loIncommingSVC PACKED; /* 15h: */ |
unsigned short hiIncommingSVC PACKED; /* 17h: */ |
unsigned short loTwoWaySVC PACKED; /* 19h: */ |
unsigned short hiTwoWaySVC PACKED; /* 1Bh: */ |
unsigned short loOutgoingSVC PACKED; /* 1Dh: */ |
unsigned short hiOutgoingSVC PACKED; /* 1Fh: */ |
unsigned short options PACKED; /* 21h: */ |
unsigned char responseOpt PACKED; /* 23h: */ |
unsigned short facil1 PACKED; /* 24h: */ |
unsigned short facil2 PACKED; /* 26h: */ |
unsigned short ccittFacil PACKED; /* 28h: */ |
unsigned short otherFacil PACKED; /* 2Ah: */ |
unsigned short ccittCompat PACKED; /* 2Ch: */ |
unsigned char t10t20 PACKED; /* 2Eh: */ |
unsigned char t11t21 PACKED; /* 2Fh: */ |
unsigned char t12t22 PACKED; /* 30h: */ |
unsigned char t13t23 PACKED; /* 31h: */ |
unsigned char t16t26 PACKED; /* 32H: */ |
unsigned char t28 PACKED; /* 33h: */ |
unsigned char r10r20 PACKED; /* 34h: */ |
unsigned char r12r22 PACKED; /* 35h: */ |
unsigned char r13r23 PACKED; /* 36h: */ |
} TX25Config; |
/* --------------------------------------------------------------------------- |
* X25_READ_CHANNEL_CONFIG Command. |
*/ |
typedef struct X25ChanAlloc /*----- Channel allocation -*/ |
{ |
unsigned short loPVC PACKED; /* 00h: lowest PVC number */ |
unsigned short hiPVC PACKED; /* 02h: highest PVC number */ |
unsigned short loIncommingSVC PACKED; /* 04h: lowest incoming SVC */ |
unsigned short hiIncommingSVC PACKED; /* 06h: highest incoming SVC */ |
unsigned short loTwoWaySVC PACKED; /* 08h: lowest two-way SVC */ |
unsigned short hiTwoWaySVC PACKED; /* 0Ah: highest two-way SVC */ |
unsigned short loOutgoingSVC PACKED; /* 0Ch: lowest outgoing SVC */ |
unsigned short hiOutgoingSVC PACKED; /* 0Eh: highest outgoing SVC */ |
} TX25ChanAlloc; |
typedef struct X25ChanCfg /*------ Channel configuration -----*/ |
{ |
unsigned char type PACKED; /* 00h: channel type */ |
unsigned char txConf PACKED; /* 01h: Tx packet and window sizes */ |
unsigned char rxConf PACKED; /* 01h: Rx packet and window sizes */ |
} TX25ChanCfg; |
/* |
* Defines for the 'type' field. |
*/ |
#define X25_PVC 0x01 /* PVC */ |
#define X25_SVC_IN 0x03 /* Incoming SVC */ |
#define X25_SVC_TWOWAY 0x07 /* Two-way SVC */ |
#define X25_SVC_OUT 0x0B /* Outgoing SVC */ |
/*---------------------------------------------------------------------------- |
* X25_READ_STATISTICS Command. |
*/ |
typedef struct X25Stats |
{ /* number of packets Tx/Rx'ed */ |
unsigned short txRestartRqst PACKED; /* 00h: Restart Request */ |
unsigned short rxRestartRqst PACKED; /* 02h: Restart Request */ |
unsigned short txRestartConf PACKED; /* 04h: Restart Confirmation */ |
unsigned short rxRestartConf PACKED; /* 06h: Restart Confirmation */ |
unsigned short txResetRqst PACKED; /* 08h: Reset Request */ |
unsigned short rxResetRqst PACKED; /* 0Ah: Reset Request */ |
unsigned short txResetConf PACKED; /* 0Ch: Reset Confirmation */ |
unsigned short rxResetConf PACKED; /* 0Eh: Reset Confirmation */ |
unsigned short txCallRequest PACKED; /* 10h: Call Request */ |
unsigned short rxCallRequest PACKED; /* 12h: Call Request */ |
unsigned short txCallAccept PACKED; /* 14h: Call Accept */ |
unsigned short rxCallAccept PACKED; /* 16h: Call Accept */ |
unsigned short txClearRqst PACKED; /* 18h: Clear Request */ |
unsigned short rxClearRqst PACKED; /* 1Ah: Clear Request */ |
unsigned short txClearConf PACKED; /* 1Ch: Clear Confirmation */ |
unsigned short rxClearConf PACKED; /* 1Eh: Clear Confirmation */ |
unsigned short txDiagnostic PACKED; /* 20h: Diagnostic */ |
unsigned short rxDiagnostic PACKED; /* 22h: Diagnostic */ |
unsigned short txRegRqst PACKED; /* 24h: Registration Request */ |
unsigned short rxRegRqst PACKED; /* 26h: Registration Request */ |
unsigned short txRegConf PACKED; /* 28h: Registration Confirm.*/ |
unsigned short rxRegConf PACKED; /* 2Ah: Registration Confirm.*/ |
unsigned short txInterrupt PACKED; /* 2Ch: Interrupt */ |
unsigned short rxInterrupt PACKED; /* 2Eh: Interrupt */ |
unsigned short txIntrConf PACKED; /* 30h: Interrupt Confirm. */ |
unsigned short rxIntrConf PACKED; /* 32h: Interrupt Confirm. */ |
unsigned short txData PACKED; /* 34h: Data */ |
unsigned short rxData PACKED; /* 36h: Data */ |
unsigned short txRR PACKED; /* 38h: RR */ |
unsigned short rxRR PACKED; /* 3Ah: RR */ |
unsigned short txRNR PACKED; /* 3Ch: RNR */ |
unsigned short rxRNR PACKED; /* 3Eh: RNR */ |
} TX25Stats; |
/*---------------------------------------------------------------------------- |
* X25_READ_HISTORY_TABLE Command. |
*/ |
typedef struct X25EventLog |
{ |
unsigned char type PACKED; /* 00h: transaction type */ |
unsigned short lcn PACKED; /* 01h: logical channel num */ |
unsigned char packet PACKED; /* 03h: async packet type */ |
unsigned char cause PACKED; /* 04h: X.25 cause field */ |
unsigned char diag PACKED; /* 05h: X.25 diag field */ |
TX25TimeStamp ts PACKED; /* 06h: time stamp */ |
} TX25EventLog; |
/* |
* Defines for the 'type' field. |
*/ |
#define X25LOG_INCOMMING 0x00 |
#define X25LOG_APPLICATION 0x01 |
#define X25LOG_AUTOMATIC 0x02 |
#define X25LOG_ERROR 0x04 |
#define X25LOG_TIMEOUT 0x08 |
#define X25LOG_RECOVERY 0x10 |
/* |
* Defines for the 'packet' field. |
*/ |
#define X25LOG_CALL_RQST 0x0B |
#define X25LOG_CALL_ACCEPTED 0x0F |
#define X25LOG_CLEAR_RQST 0x13 |
#define X25LOG_CLEAR_CONFRM 0x17 |
#define X25LOG_RESET_RQST 0x1B |
#define X25LOG_RESET_CONFRM 0x1F |
#define X25LOG_RESTART_RQST 0xFB |
#define X25LOG_RESTART_COMFRM 0xFF |
#define X25LOG_DIAGNOSTIC 0xF1 |
#define X25LOG_DTE_REG_RQST 0xF3 |
#define X25LOG_DTE_REG_COMFRM 0xF7 |
/* --------------------------------------------------------------------------- |
* X25_TRACE_CONFIGURE Command. |
*/ |
typedef struct X25TraceCfg |
{ |
unsigned char flags PACKED; /* 00h: trace configuration flags */ |
unsigned char timeout PACKED; /* 01h: timeout for trace delay mode*/ |
} TX25TraceCfg; |
/* |
* Defines for the 'flags' field. |
*/ |
#define X25_TRC_ENABLE 0x01 /* bit0: '1' - trace enabled */ |
#define X25_TRC_TIMESTAMP 0x02 /* bit1: '1' - time stamping enabled*/ |
#define X25_TRC_DELAY 0x04 /* bit2: '1' - trace delay enabled */ |
#define X25_TRC_DATA 0x08 /* bit3: '1' - trace data packets */ |
#define X25_TRC_SUPERVISORY 0x10 /* bit4: '1' - trace suprvisory pkts*/ |
#define X25_TRC_ASYNCHRONOUS 0x20 /* bit5: '1' - trace asynch. packets*/ |
#define X25_TRC_HDLC 0x40 /* bit6: '1' - trace all packets */ |
#define X25_TRC_READ 0x80 /* bit7: '1' - get current config. */ |
/* --------------------------------------------------------------------------- |
* X25_READ_TRACE_DATA Command. |
*/ |
typedef struct X25Trace /*----- Trace data structure -------*/ |
{ |
unsigned short length PACKED; /* 00h: trace data length */ |
unsigned char type PACKED; /* 02h: trace type */ |
unsigned char lost_cnt PACKED; /* 03h: N of traces lost */ |
TX25TimeStamp tstamp PACKED; /* 04h: mon/date/sec/min/hour */ |
unsigned short millisec PACKED; /* 09h: ms time stamp */ |
unsigned char data[0] PACKED; /* 0Bh: traced frame */ |
} TX25Trace; |
/* |
* Defines for the 'type' field. |
*/ |
#define X25_TRC_TYPE_MASK 0x0F /* bits 0..3: trace type */ |
#define X25_TRC_TYPE_RX_FRAME 0x00 /* received frame trace */ |
#define X25_TRC_TYPE_TX_FRAME 0x01 /* transmitted frame */ |
#define X25_TRC_TYPE_ERR_FRAME 0x02 /* error frame */ |
#define X25_TRC_ERROR_MASK 0xF0 /* bits 4..7: error code */ |
#define X25_TRCERR_RX_ABORT 0x10 /* receive abort error */ |
#define X25_TRCERR_RX_BADCRC 0x20 /* receive CRC error */ |
#define X25_TRCERR_RX_OVERRUN 0x30 /* receiver overrun error */ |
#define X25_TRCERR_RX_TOO_LONG 0x40 /* excessive frame length error */ |
#define X25_TRCERR_TX_ABORT 0x70 /* aborted frame transmittion error */ |
#define X25_TRCERR_TX_UNDERRUN 0x80 /* transmit underrun error */ |
/***************************************************************************** |
* Following definitions describe HDLC frame and X.25 packet formats. |
****************************************************************************/ |
typedef struct HDLCFrame /*----- DHLC Frame Format ----------*/ |
{ |
unsigned char addr PACKED; /* address field */ |
unsigned char cntl PACKED; /* control field */ |
unsigned char data[0] PACKED; |
} THDLCFrame; |
typedef struct X25Pkt /*----- X.25 Paket Format ----------*/ |
{ |
unsigned char lcn_hi PACKED; /* 4 MSB of Logical Channel Number */ |
unsigned char lcn_lo PACKED; /* 8 LSB of Logical Channel Number */ |
unsigned char type PACKED; |
unsigned char data[0] PACKED; |
} TX25Pkt; |
/* |
* Defines for the 'lcn_hi' field. |
*/ |
#define X25_Q_BIT_MASK 0x80 /* Data Qualifier Bit mask */ |
#define X25_D_BIT_MASK 0x40 /* Delivery Confirmation Bit mask */ |
#define X25_M_BITS_MASK 0x30 /* Modulo Bits mask */ |
#define X25_LCN_MSB_MASK 0x0F /* LCN most significant bits mask */ |
/* |
* Defines for the 'type' field. |
*/ |
#define X25PKT_DATA 0x01 /* Data packet mask */ |
#define X25PKT_SUPERVISORY 0x02 /* Supervisory packet mask */ |
#define X25PKT_CALL_RQST 0x0B /* Call Request/Incoming */ |
#define X25PKT_CALL_ACCEPTED 0x0F /* Call Accepted/Connected */ |
#define X25PKT_CLEAR_RQST 0x13 /* Clear Request/Indication */ |
#define X25PKT_CLEAR_CONFRM 0x17 /* Clear Confirmation */ |
#define X25PKT_RESET_RQST 0x1B /* Reset Request/Indication */ |
#define X25PKT_RESET_CONFRM 0x1F /* Reset Confirmation */ |
#define X25PKT_RESTART_RQST 0xFB /* Restart Request/Indication */ |
#define X25PKT_RESTART_CONFRM 0xFF /* Restart Confirmation */ |
#define X25PKT_INTERRUPT 0x23 /* Interrupt */ |
#define X25PKT_INTERRUPT_CONFRM 0x27 /* Interrupt Confirmation */ |
#define X25PKT_DIAGNOSTIC 0xF1 /* Diagnostic */ |
#define X25PKT_REGISTR_RQST 0xF3 /* Registration Request */ |
#define X25PKT_REGISTR_CONFRM 0xF7 /* Registration Confirmation */ |
#define X25PKT_RR_MASKED 0x01 /* Receive Ready packet after masking */ |
#define X25PKT_RNR_MASKED 0x05 /* Receive Not Ready after masking */ |
typedef struct { |
TX25Cmd cmd PACKED; |
char data[X25_MAX_DATA] PACKED; |
} mbox_cmd_t; |
typedef struct { |
unsigned char qdm PACKED; /* Q/D/M bits */ |
unsigned char cause PACKED; /* cause field */ |
unsigned char diagn PACKED; /* diagnostics */ |
unsigned char pktType PACKED; |
unsigned short length PACKED; |
unsigned char result PACKED; |
unsigned short lcn PACKED; |
char reserved[7] PACKED; |
}x25api_hdr_t; |
typedef struct { |
x25api_hdr_t hdr PACKED; |
char data[X25_MAX_DATA] PACKED; |
}x25api_t; |
/* |
* XPIPEMON Definitions |
*/ |
/* valid ip_protocol for UDP management */ |
#define UDPMGMT_UDP_PROTOCOL 0x11 |
#define UDPMGMT_XPIPE_SIGNATURE "XLINK8ND" |
#define UDPMGMT_DRVRSTATS_SIGNATURE "DRVSTATS" |
/* values for request/reply byte */ |
#define UDPMGMT_REQUEST 0x01 |
#define UDPMGMT_REPLY 0x02 |
#define UDP_OFFSET 12 |
typedef struct { |
unsigned char opp_flag PACKED; /* the opp flag */ |
unsigned char command PACKED; /* command code */ |
unsigned short length PACKED; /* transfer data length */ |
unsigned char result PACKED; /* return code */ |
unsigned char pf PACKED; /* P/F bit */ |
unsigned short lcn PACKED; /* logical channel */ |
unsigned char qdm PACKED; /* Q/D/M bits */ |
unsigned char cause PACKED; /* cause field */ |
unsigned char diagn PACKED; /* diagnostics */ |
unsigned char pktType PACKED; /* packet type */ |
unsigned char resrv[4] PACKED; /* reserved */ |
} cblock_t; |
typedef struct { |
ip_pkt_t ip_pkt PACKED; |
udp_pkt_t udp_pkt PACKED; |
wp_mgmt_t wp_mgmt PACKED; |
cblock_t cblock PACKED; |
unsigned char data[4080] PACKED; |
} x25_udp_pkt_t; |
typedef struct read_hdlc_stat { |
unsigned short inf_frames_rx_ok PACKED; |
unsigned short inf_frames_rx_out_of_seq PACKED; |
unsigned short inf_frames_rx_no_data PACKED; |
unsigned short inf_frames_rx_dropped PACKED; |
unsigned short inf_frames_rx_data_too_long PACKED; |
unsigned short inf_frames_rx_invalid_addr PACKED; |
unsigned short inf_frames_tx_ok PACKED; |
unsigned short inf_frames_tx_retransmit PACKED; |
unsigned short T1_timeouts PACKED; |
unsigned short SABM_frames_rx PACKED; |
unsigned short DISC_frames_rx PACKED; |
unsigned short DM_frames_rx PACKED; |
unsigned short FRMR_frames_rx PACKED; |
unsigned short SABM_frames_tx PACKED; |
unsigned short DISC_frames_tx PACKED; |
unsigned short DM_frames_tx PACKED; |
unsigned short FRMR_frames_tx PACKED; |
} read_hdlc_stat_t; |
typedef struct read_comms_err_stats{ |
unsigned char overrun_err_rx PACKED; |
unsigned char CRC_err PACKED; |
unsigned char abort_frames_rx PACKED; |
unsigned char frames_dropped_buf_full PACKED; |
unsigned char abort_frames_tx PACKED; |
unsigned char transmit_underruns PACKED; |
unsigned char missed_tx_underruns_intr PACKED; |
unsigned char reserved PACKED; |
unsigned char DCD_drop PACKED; |
unsigned char CTS_drop PACKED; |
} read_comms_err_stats_t; |
typedef struct trace_data { |
unsigned short length PACKED; |
unsigned char type PACKED; |
unsigned char trace_dropped PACKED; |
unsigned char reserved[5] PACKED; |
unsigned short timestamp PACKED; |
unsigned char data PACKED; |
} trace_data_t; |
enum {UDP_XPIPE_TYPE}; |
#define XPIPE_ENABLE_TRACING 0x14 |
#define XPIPE_DISABLE_TRACING 0x14 |
#define XPIPE_GET_TRACE_INFO 0x16 |
#define XPIPE_FT1_READ_STATUS 0x74 |
#define XPIPE_DRIVER_STAT_IFSEND 0x75 |
#define XPIPE_DRIVER_STAT_INTR 0x76 |
#define XPIPE_DRIVER_STAT_GEN 0x77 |
#define XPIPE_FLUSH_DRIVER_STATS 0x78 |
#define XPIPE_ROUTER_UP_TIME 0x79 |
#define XPIPE_SET_FT1_MODE 0x81 |
#define XPIPE_FT1_STATUS_CTRL 0x80 |
/* error messages */ |
#define NO_BUFFS_OR_CLOSED_WIN 0x33 |
#define DATA_LENGTH_TOO_BIG 0x32 |
#define NO_DATA_AVAILABLE 0x33 |
#define Z80_TIMEOUT_ERROR 0x0a |
#define NO_BUFFS 0x08 |
/* Trace options */ |
#define TRACE_DEFAULT 0x03 |
#define TRACE_SUPERVISOR_FRMS 0x10 |
#define TRACE_ASYNC_FRMS 0x20 |
#define TRACE_ALL_HDLC_FRMS 0x40 |
#define TRACE_DATA_FRMS 0x08 |
#endif /* _SDLA_X25_H */ |
/shark/trunk/drivers/linuxc26/include/linux/tpqic02.h |
---|
0,0 → 1,738 |
/* $Id: tpqic02.h,v 1.1 2004-01-28 15:26:51 giacomo Exp $ |
* |
* Include file for QIC-02 driver for Linux. |
* |
* Copyright (c) 1992--1995 by H. H. Bergman. All rights reserved. |
* |
* ******* USER CONFIG SECTION BELOW (Near line 70) ******* |
*/ |
#ifndef _LINUX_TPQIC02_H |
#define _LINUX_TPQIC02_H |
#include <linux/config.h> |
#if defined(CONFIG_QIC02_TAPE) || defined(CONFIG_QIC02_TAPE_MODULE) |
/* need to have QIC02_TAPE_DRIVE and QIC02_TAPE_IFC expand to something */ |
#include <linux/mtio.h> |
/* Make QIC02_TAPE_IFC expand to something. |
* |
* The only difference between WANGTEK and EVEREX is in the |
* handling of the DMA channel 3. |
* Note that the driver maps EVEREX to WANGTEK internally for speed |
* reasons. Externally WANGTEK==1, EVEREX==2, ARCHIVE==3. |
* These must correspond to the values used in qic02config(1). |
* |
* Support for Mountain controllers was added by Erik Jacobson |
* and severely hacked by me. -- hhb |
* |
* Support for Emerald controllers by Alan Bain <afrb2@chiark.chu.cam.ac.uk> |
* with more hacks by me. -- hhb |
*/ |
#define WANGTEK 1 /* don't know about Wangtek QIC-36 */ |
#define EVEREX (WANGTEK+1) /* I heard *some* of these are identical */ |
#define EVEREX_811V EVEREX /* With TEAC MT 2ST 45D */ |
#define EVEREX_831V EVEREX |
#define ARCHIVE 3 |
#define ARCHIVE_SC400 ARCHIVE /* rumoured to be from the pre-SMD-age */ |
#define ARCHIVE_SC402 ARCHIVE /* don't know much about SC400 */ |
#define ARCHIVE_SC499 ARCHIVE /* SC402 and SC499R should be identical */ |
#define MOUNTAIN 5 /* Mountain Computer Interface */ |
#define EMERALD 6 /* Emerald Interface card */ |
#define QIC02_TAPE_PORT_RANGE 8 /* number of IO locations to reserve */ |
/*********** START OF USER CONFIGURABLE SECTION ************/ |
/* Tape configuration: Select DRIVE, IFC, PORT, IRQ and DMA below. |
* Runtime (re)configuration is not supported yet. |
* |
* Tape drive configuration: (MT_IS* constants are defined in mtio.h) |
* |
* QIC02_TAPE_DRIVE = MT_ISWT5150 |
* - Wangtek 5150, format: up to QIC-150. |
* QIC02_TAPE_DRIVE = MT_ISQIC02_ALL_FEATURES |
* - Enables some optional QIC02 commands that some drives may lack. |
* It is provided so you can check which are supported by your drive. |
* Refer to tpqic02.h for others. |
* |
* Supported interface cards: QIC02_TAPE_IFC = |
* WANGTEK, |
* ARCHIVE_SC402, ARCHIVE_SC499. (both same programming interface) |
* |
* Make sure you have the I/O ports/DMA channels |
* and IRQ stuff configured properly! |
* NOTE: There may be other device drivers using the same major |
* number. This must be avoided. Check for timer.h conflicts too. |
* |
* If you have an EVEREX EV-831 card and you are using DMA channel 3, |
* you will probably have to ``#define QIC02_TAPE_DMA3_FIX'' below. |
*/ |
/* CONFIG_QIC02_DYNCONF can be defined in autoconf.h, by `make config' */ |
/*** #undef CONFIG_QIC02_DYNCONF ***/ |
#ifndef CONFIG_QIC02_DYNCONF |
#define QIC02_TAPE_DRIVE MT_ISQIC02_ALL_FEATURES /* drive type */ |
/* #define QIC02_TAPE_DRIVE MT_ISWT5150 */ |
/* #define QIC02_TAPE_DRIVE MT_ISARCHIVE_5945L2 */ |
/* #define QIC02_TAPE_DRIVE MT_ISTEAC_MT2ST */ |
/* #define QIC02_TAPE_DRIVE MT_ISARCHIVE_2150L */ |
/* #define QIC02_TAPE_DRIVE MT_ISARCHIVESC499 */ |
/* Either WANGTEK, ARCHIVE or MOUNTAIN. Not EVEREX. |
* If you have an EVEREX, use WANGTEK and try the DMA3_FIX below. |
*/ |
#define QIC02_TAPE_IFC WANGTEK /* interface card type */ |
/* #define QIC02_TAPE_IFC ARCHIVE */ |
/* #define QIC02_TAPE_IFC MOUNTAIN */ |
#define QIC02_TAPE_PORT 0x300 /* controller port address */ |
#define QIC02_TAPE_IRQ 5 /* For IRQ2, use 9 here, others normal. */ |
#define QIC02_TAPE_DMA 1 /* either 1 or 3, because 2 is used by the floppy */ |
/* If DMA3 doesn't work, but DMA1 does, and you have a |
* Wangtek/Everex card, you can try #define-ing the flag |
* below. Note that you should also change the DACK jumper |
* for Wangtek/Everex cards when changing the DMA channel. |
*/ |
#undef QIC02_TAPE_DMA3_FIX |
/************ END OF USER CONFIGURABLE SECTION *************/ |
/* I put the stuff above in config.in, but a few recompiles, to |
* verify different configurations, and several days later I decided |
* to change it back again. |
*/ |
/* NOTE: TP_HAVE_DENS should distinguish between available densities (?) |
* NOTE: Drive select is not implemented -- I have only one tape streamer, |
* so I'm unable and unmotivated to test and implement that. ;-) ;-) |
*/ |
#if QIC02_TAPE_DRIVE == MT_ISWT5150 |
#define TP_HAVE_DENS 1 |
#define TP_HAVE_BSF 0 /* nope */ |
#define TP_HAVE_FSR 0 /* nope */ |
#define TP_HAVE_BSR 0 /* nope */ |
#define TP_HAVE_EOD 0 /* most of the time */ |
#define TP_HAVE_SEEK 0 |
#define TP_HAVE_TELL 0 |
#define TP_HAVE_RAS1 1 |
#define TP_HAVE_RAS2 1 |
#elif QIC02_TAPE_DRIVE == MT_ISARCHIVESC499 /* Archive SC-499 QIC-36 controller */ |
#define TP_HAVE_DENS 1 /* can do set density (QIC-11 / QIC-24) */ |
#define TP_HAVE_BSF 0 |
#define TP_HAVE_FSR 1 /* can skip one block forwards */ |
#define TP_HAVE_BSR 1 /* can skip one block backwards */ |
#define TP_HAVE_EOD 1 /* can seek to end of recorded data */ |
#define TP_HAVE_SEEK 0 |
#define TP_HAVE_TELL 0 |
#define TP_HAVE_RAS1 1 /* can run selftest 1 */ |
#define TP_HAVE_RAS2 1 /* can run selftest 2 */ |
/* These last two selftests shouldn't be used yet! */ |
#elif (QIC02_TAPE_DRIVE == MT_ISARCHIVE_2060L) || (QIC02_TAPE_DRIVE == MT_ISARCHIVE_2150L) |
#define TP_HAVE_DENS 1 /* can do set density (QIC-24 / QIC-120 / QIC-150) */ |
#define TP_HAVE_BSF 0 |
#define TP_HAVE_FSR 1 /* can skip one block forwards */ |
#define TP_HAVE_BSR 1 /* can skip one block backwards */ |
#define TP_HAVE_EOD 1 /* can seek to end of recorded data */ |
#define TP_HAVE_TELL 1 /* can read current block address */ |
#define TP_HAVE_SEEK 1 /* can seek to block */ |
#define TP_HAVE_RAS1 1 /* can run selftest 1 */ |
#define TP_HAVE_RAS2 1 /* can run selftest 2 */ |
/* These last two selftests shouldn't be used yet! */ |
#elif QIC02_TAPE_DRIVE == MT_ISARCHIVE_5945L2 |
/* can anyone verify this entry?? */ |
#define TP_HAVE_DENS 1 /* can do set density?? (QIC-24??) */ |
#define TP_HAVE_BSF 0 |
#define TP_HAVE_FSR 1 /* can skip one block forwards */ |
#define TP_HAVE_BSR 1 /* can skip one block backwards */ |
#define TP_HAVE_EOD 1 /* can seek to end of recorded data */ |
#define TP_HAVE_TELL 1 /* can read current block address */ |
#define TP_HAVE_SEEK 1 /* can seek to block */ |
#define TP_HAVE_RAS1 1 /* can run selftest 1 */ |
#define TP_HAVE_RAS2 1 /* can run selftest 2 */ |
/* These last two selftests shouldn't be used yet! */ |
#elif QIC02_TAPE_DRIVE == MT_ISTEAC_MT2ST |
/* can anyone verify this entry?? */ |
#define TP_HAVE_DENS 0 /* cannot do set density?? (QIC-150?) */ |
#define TP_HAVE_BSF 0 |
#define TP_HAVE_FSR 1 /* can skip one block forwards */ |
#define TP_HAVE_BSR 1 /* can skip one block backwards */ |
#define TP_HAVE_EOD 1 /* can seek to end of recorded data */ |
#define TP_HAVE_SEEK 1 /* can seek to block */ |
#define TP_HAVE_TELL 1 /* can read current block address */ |
#define TP_HAVE_RAS1 1 /* can run selftest 1 */ |
#define TP_HAVE_RAS2 1 /* can run selftest 2 */ |
/* These last two selftests shouldn't be used yet! */ |
#elif QIC02_TAPE_DRIVE == MT_ISQIC02_ALL_FEATURES |
#define TP_HAVE_DENS 1 /* can do set density */ |
#define TP_HAVE_BSF 1 /* can search filemark backwards */ |
#define TP_HAVE_FSR 1 /* can skip one block forwards */ |
#define TP_HAVE_BSR 1 /* can skip one block backwards */ |
#define TP_HAVE_EOD 1 /* can seek to end of recorded data */ |
#define TP_HAVE_SEEK 1 /* seek to block address */ |
#define TP_HAVE_TELL 1 /* tell current block address */ |
#define TP_HAVE_RAS1 1 /* can run selftest 1 */ |
#define TP_HAVE_RAS2 1 /* can run selftest 2 */ |
/* These last two selftests shouldn't be used yet! */ |
#else |
#error No QIC-02 tape drive type defined! |
/* If your drive is not listed above, first try the 'ALL_FEATURES', |
* to see what commands are supported, then create your own entry in |
* the list above. You may want to mail it to me, so that I can include |
* it in the next release. |
*/ |
#endif |
#endif /* !CONFIG_QIC02_DYNCONF */ |
/* WANGTEK interface card specifics */ |
#define WT_QIC02_STAT_PORT (QIC02_TAPE_PORT) |
#define WT_QIC02_CTL_PORT (QIC02_TAPE_PORT) |
#define WT_QIC02_CMD_PORT (QIC02_TAPE_PORT+1) |
#define WT_QIC02_DATA_PORT (QIC02_TAPE_PORT+1) |
/* status register bits (Active LOW!) */ |
#define WT_QIC02_STAT_POLARITY 0 |
#define WT_QIC02_STAT_READY 0x01 |
#define WT_QIC02_STAT_EXCEPTION 0x02 |
#define WT_QIC02_STAT_MASK (WT_QIC02_STAT_READY|WT_QIC02_STAT_EXCEPTION) |
#define WT_QIC02_STAT_RESETMASK 0x07 |
#define WT_QIC02_STAT_RESETVAL (WT_QIC02_STAT_RESETMASK & ~WT_QIC02_STAT_EXCEPTION) |
/* controller register (QIC02_CTL_PORT) bits */ |
#define WT_QIC02_CTL_RESET 0x02 |
#define WT_QIC02_CTL_REQUEST 0x04 |
#define WT_CTL_ONLINE 0x01 |
#define WT_CTL_CMDOFF 0xC0 |
#define WT_CTL_DMA3 0x10 /* enable dma chan3 */ |
#define WT_CTL_DMA1 0x08 /* enable dma chan1 or chan2 */ |
/* EMERALD interface card specifics |
* Much like Wangtek, only different polarity and bit locations |
*/ |
#define EMR_QIC02_STAT_PORT (QIC02_TAPE_PORT) |
#define EMR_QIC02_CTL_PORT (QIC02_TAPE_PORT) |
#define EMR_QIC02_CMD_PORT (QIC02_TAPE_PORT+1) |
#define EMR_QIC02_DATA_PORT (QIC02_TAPE_PORT+1) |
/* status register bits (Active High!) */ |
#define EMR_QIC02_STAT_POLARITY 1 |
#define EMR_QIC02_STAT_READY 0x01 |
#define EMR_QIC02_STAT_EXCEPTION 0x02 |
#define EMR_QIC02_STAT_MASK (EMR_QIC02_STAT_READY|EMR_QIC02_STAT_EXCEPTION) |
#define EMR_QIC02_STAT_RESETMASK 0x07 |
#define EMR_QIC02_STAT_RESETVAL (EMR_QIC02_STAT_RESETMASK & ~EMR_QIC02_STAT_EXCEPTION) |
/* controller register (QIC02_CTL_PORT) bits */ |
#define EMR_QIC02_CTL_RESET 0x02 |
#define EMR_QIC02_CTL_REQUEST 0x04 |
#define EMR_CTL_ONLINE 0x01 |
#define EMR_CTL_CMDOFF 0xC0 |
#define EMR_CTL_DMA3 0x10 /* enable dma chan3 */ |
#define EMR_CTL_DMA1 0x08 /* enable dma chan1 or chan2 */ |
/* ARCHIVE interface card specifics */ |
#define AR_QIC02_STAT_PORT (QIC02_TAPE_PORT+1) |
#define AR_QIC02_CTL_PORT (QIC02_TAPE_PORT+1) |
#define AR_QIC02_CMD_PORT (QIC02_TAPE_PORT) |
#define AR_QIC02_DATA_PORT (QIC02_TAPE_PORT) |
#define AR_START_DMA_PORT (QIC02_TAPE_PORT+2) |
#define AR_RESET_DMA_PORT (QIC02_TAPE_PORT+3) |
/* STAT port bits */ |
#define AR_QIC02_STAT_POLARITY 0 |
#define AR_STAT_IRQF 0x80 /* active high, interrupt request flag */ |
#define AR_QIC02_STAT_READY 0x40 /* active low */ |
#define AR_QIC02_STAT_EXCEPTION 0x20 /* active low */ |
#define AR_QIC02_STAT_MASK (AR_QIC02_STAT_READY|AR_QIC02_STAT_EXCEPTION) |
#define AR_STAT_DMADONE 0x10 /* active high, DMA done */ |
#define AR_STAT_DIRC 0x08 /* active high, direction */ |
#define AR_QIC02_STAT_RESETMASK 0x70 /* check RDY,EXC,DMADONE */ |
#define AR_QIC02_STAT_RESETVAL ((AR_QIC02_STAT_RESETMASK & ~AR_STAT_IRQF & ~AR_QIC02_STAT_EXCEPTION) | AR_STAT_DMADONE) |
/* CTL port bits */ |
#define AR_QIC02_CTL_RESET 0x80 /* drive reset */ |
#define AR_QIC02_CTL_REQUEST 0x40 /* notify of new command */ |
#define AR_CTL_IEN 0x20 /* interrupt enable */ |
#define AR_CTL_DNIEN 0x10 /* done-interrupt enable */ |
/* Note: All of these bits are cleared automatically when writing to |
* AR_RESET_DMA_PORT. So AR_CTL_IEN and AR_CTL_DNIEN must be |
* reprogrammed before the write to AR_START_DMA_PORT. |
*/ |
/* MOUNTAIN interface specifics */ |
#define MTN_QIC02_STAT_PORT (QIC02_TAPE_PORT+1) |
#define MTN_QIC02_CTL_PORT (QIC02_TAPE_PORT+1) |
#define MTN_QIC02_CMD_PORT (QIC02_TAPE_PORT) |
#define MTN_QIC02_DATA_PORT (QIC02_TAPE_PORT) |
#define MTN_W_SELECT_DMA_PORT (QIC02_TAPE_PORT+2) |
#define MTN_R_DESELECT_DMA_PORT (QIC02_TAPE_PORT+2) |
#define MTN_W_DMA_WRITE_PORT (QIC02_TAPE_PORT+3) |
/* STAT port bits */ |
#define MTN_QIC02_STAT_POLARITY 0 |
#define MTN_QIC02_STAT_READY 0x02 /* active low */ |
#define MTN_QIC02_STAT_EXCEPTION 0x04 /* active low */ |
#define MTN_QIC02_STAT_MASK (MTN_QIC02_STAT_READY|MTN_QIC02_STAT_EXCEPTION) |
#define MTN_STAT_DMADONE 0x01 /* active high, DMA done */ |
#define MTN_QIC02_STAT_RESETMASK 0x07 /* check RDY,EXC,DMADONE */ |
#define MTN_QIC02_STAT_RESETVAL ((MTN_QIC02_STAT_RESETMASK & ~MTN_QIC02_STAT_EXCEPTION) | MTN_STAT_DMADONE) |
/* CTL port bits */ |
#define MTN_QIC02_CTL_RESET_NOT 0x80 /* drive reset, active low */ |
#define MTN_QIC02_CTL_RESET 0x80 /* Fodder #definition to keep gcc happy */ |
#define MTN_QIC02_CTL_ONLINE 0x40 /* Put drive on line */ |
#define MTN_QIC02_CTL_REQUEST 0x20 /* notify of new command */ |
#define MTN_QIC02_CTL_IRQ_DRIVER 0x10 /* Enable IRQ tristate driver */ |
#define MTN_QIC02_CTL_DMA_DRIVER 0x08 /* Enable DMA tristate driver */ |
#define MTN_CTL_EXC_IEN 0x04 /* Exception interrupt enable */ |
#define MTN_CTL_RDY_IEN 0x02 /* Ready interrupt enable */ |
#define MTN_CTL_DNIEN 0x01 /* done-interrupt enable */ |
#define MTN_CTL_ONLINE (MTN_QIC02_CTL_RESET_NOT | MTN_QIC02_CTL_IRQ_DRIVER | MTN_QIC02_CTL_DMA_DRIVER) |
#ifndef CONFIG_QIC02_DYNCONF |
# define QIC02_TAPE_DEBUG (qic02_tape_debug) |
# if QIC02_TAPE_IFC == WANGTEK |
# define QIC02_STAT_POLARITY WT_QIC02_STAT_POLARITY |
# define QIC02_STAT_PORT WT_QIC02_STAT_PORT |
# define QIC02_CTL_PORT WT_QIC02_CTL_PORT |
# define QIC02_CMD_PORT WT_QIC02_CMD_PORT |
# define QIC02_DATA_PORT WT_QIC02_DATA_PORT |
# define QIC02_STAT_READY WT_QIC02_STAT_READY |
# define QIC02_STAT_EXCEPTION WT_QIC02_STAT_EXCEPTION |
# define QIC02_STAT_MASK WT_QIC02_STAT_MASK |
# define QIC02_STAT_RESETMASK WT_QIC02_STAT_RESETMASK |
# define QIC02_STAT_RESETVAL WT_QIC02_STAT_RESETVAL |
# define QIC02_CTL_RESET WT_QIC02_CTL_RESET |
# define QIC02_CTL_REQUEST WT_QIC02_CTL_REQUEST |
# if QIC02_TAPE_DMA == 3 |
# ifdef QIC02_TAPE_DMA3_FIX |
# define WT_CTL_DMA WT_CTL_DMA1 |
# else |
# define WT_CTL_DMA WT_CTL_DMA3 |
# endif |
# elif QIC02_TAPE_DMA == 1 |
# define WT_CTL_DMA WT_CTL_DMA1 |
# else |
# error Unsupported or incorrect DMA configuration. |
# endif |
# elif QIC02_TAPE_IFC == EMERALD |
# define QIC02_STAT_POLARITY EMR_QIC02_STAT_POLARITY |
# define QIC02_STAT_PORT EMR_QIC02_STAT_PORT |
# define QIC02_CTL_PORT EMR_QIC02_CTL_PORT |
# define QIC02_CMD_PORT EMR_QIC02_CMD_PORT |
# define QIC02_DATA_PORT EMR_QIC02_DATA_PORT |
# define QIC02_STAT_READY EMR_QIC02_STAT_READY |
# define QIC02_STAT_EXCEPTION EMR_QIC02_STAT_EXCEPTION |
# define QIC02_STAT_MASK EMR_QIC02_STAT_MASK |
# define QIC02_STAT_RESETMASK EMR_QIC02_STAT_RESETMASK |
# define QIC02_STAT_RESETVAL EMR_QIC02_STAT_RESETVAL |
# define QIC02_CTL_RESET EMR_QIC02_CTL_RESET |
# define QIC02_CTL_REQUEST EMR_QIC02_CTL_REQUEST |
# if QIC02_TAPE_DMA == 3 |
# ifdef QIC02_TAPE_DMA3_FIX |
# define EMR_CTL_DMA EMR_CTL_DMA1 |
# else |
# define EMR_CTL_DMA EMR_CTL_DMA3 |
# endif |
# elif QIC02_TAPE_DMA == 1 |
# define EMR_CTL_DMA EMR_CTL_DMA1 |
# else |
# error Unsupported or incorrect DMA configuration. |
# endif |
# elif QIC02_TAPE_IFC == ARCHIVE |
# define QIC02_STAT_POLARITY AR_QIC02_STAT_POLARITY |
# define QIC02_STAT_PORT AR_QIC02_STAT_PORT |
# define QIC02_CTL_PORT AR_QIC02_CTL_PORT |
# define QIC02_CMD_PORT AR_QIC02_CMD_PORT |
# define QIC02_DATA_PORT AR_QIC02_DATA_PORT |
# define QIC02_STAT_READY AR_QIC02_STAT_READY |
# define QIC02_STAT_EXCEPTION AR_QIC02_STAT_EXCEPTION |
# define QIC02_STAT_MASK AR_QIC02_STAT_MASK |
# define QIC02_STAT_RESETMASK AR_QIC02_STAT_RESETMASK |
# define QIC02_STAT_RESETVAL AR_QIC02_STAT_RESETVAL |
# define QIC02_CTL_RESET AR_QIC02_CTL_RESET |
# define QIC02_CTL_REQUEST AR_QIC02_CTL_REQUEST |
# if QIC02_TAPE_DMA > 3 /* channel 2 is used by the floppy driver */ |
# error DMA channels other than 1 and 3 are not supported. |
# endif |
# elif QIC02_TAPE_IFC == MOUNTAIN |
# define QIC02_STAT_POLARITY MTN_QIC02_STAT_POLARITY |
# define QIC02_STAT_PORT MTN_QIC02_STAT_PORT |
# define QIC02_CTL_PORT MTN_QIC02_CTL_PORT |
# define QIC02_CMD_PORT MTN_QIC02_CMD_PORT |
# define QIC02_DATA_PORT MTN_QIC02_DATA_PORT |
# define QIC02_STAT_READY MTN_QIC02_STAT_READY |
# define QIC02_STAT_EXCEPTION MTN_QIC02_STAT_EXCEPTION |
# define QIC02_STAT_MASK MTN_QIC02_STAT_MASK |
# define QIC02_STAT_RESETMASK MTN_QIC02_STAT_RESETMASK |
# define QIC02_STAT_RESETVAL MTN_QIC02_STAT_RESETVAL |
# define QIC02_CTL_RESET MTN_QIC02_CTL_RESET |
# define QIC02_CTL_REQUEST MTN_QIC02_CTL_REQUEST |
# if QIC02_TAPE_DMA > 3 /* channel 2 is used by the floppy driver */ |
# error DMA channels other than 1 and 3 are not supported. |
# endif |
# else |
# error No valid interface card specified! |
# endif /* QIC02_TAPE_IFC */ |
/* An ugly hack to make sure WT_CTL_DMA is defined even for the |
* static, non-Wangtek case. The alternative was even worse. |
*/ |
# ifndef WT_CTL_DMA |
# define WT_CTL_DMA WT_CTL_DMA1 |
# endif |
/*******************/ |
#else /* !CONFIG_QIC02_DYNCONF */ |
/* Now the runtime config version, using variables instead of constants. |
* |
* qic02_tape_dynconf is R/O for the kernel, set from userspace. |
* qic02_tape_ccb is private to the driver, R/W. |
*/ |
# define QIC02_TAPE_DRIVE (qic02_tape_dynconf.mt_type) |
# define QIC02_TAPE_IFC (qic02_tape_ccb.ifc_type) |
# define QIC02_TAPE_IRQ (qic02_tape_dynconf.irqnr) |
# define QIC02_TAPE_DMA (qic02_tape_dynconf.dmanr) |
# define QIC02_TAPE_PORT (qic02_tape_dynconf.port) |
# define WT_CTL_DMA (qic02_tape_ccb.dma_enable_value) |
# define QIC02_TAPE_DEBUG (qic02_tape_dynconf.debug) |
# define QIC02_STAT_PORT (qic02_tape_ccb.port_stat) |
# define QIC02_CTL_PORT (qic02_tape_ccb.port_ctl) |
# define QIC02_CMD_PORT (qic02_tape_ccb.port_cmd) |
# define QIC02_DATA_PORT (qic02_tape_ccb.port_data) |
# define QIC02_STAT_POLARITY (qic02_tape_ccb.stat_polarity) |
# define QIC02_STAT_READY (qic02_tape_ccb.stat_ready) |
# define QIC02_STAT_EXCEPTION (qic02_tape_ccb.stat_exception) |
# define QIC02_STAT_MASK (qic02_tape_ccb.stat_mask) |
# define QIC02_STAT_RESETMASK (qic02_tape_ccb.stat_resetmask) |
# define QIC02_STAT_RESETVAL (qic02_tape_ccb.stat_resetval) |
# define QIC02_CTL_RESET (qic02_tape_ccb.ctl_reset) |
# define QIC02_CTL_REQUEST (qic02_tape_ccb.ctl_request) |
# define TP_HAVE_DENS (qic02_tape_dynconf.have_dens) |
# define TP_HAVE_BSF (qic02_tape_dynconf.have_bsf) |
# define TP_HAVE_FSR (qic02_tape_dynconf.have_fsr) |
# define TP_HAVE_BSR (qic02_tape_dynconf.have_bsr) |
# define TP_HAVE_EOD (qic02_tape_dynconf.have_eod) |
# define TP_HAVE_SEEK (qic02_tape_dynconf.have_seek) |
# define TP_HAVE_TELL (qic02_tape_dynconf.have_tell) |
# define TP_HAVE_RAS1 (qic02_tape_dynconf.have_ras1) |
# define TP_HAVE_RAS2 (qic02_tape_dynconf.have_ras2) |
#endif /* CONFIG_QIC02_DYNCONF */ |
/* "Vendor Unique" codes */ |
/* Archive seek & tell stuff */ |
#define AR_QCMDV_TELL_BLK 0xAE /* read current block address */ |
#define AR_QCMDV_SEEK_BLK 0xAD /* seek to specific block */ |
#define AR_SEEK_BUF_SIZE 3 /* address is 3 bytes */ |
/* |
* Misc common stuff |
*/ |
/* Standard QIC-02 commands -- rev F. All QIC-02 drives must support these */ |
#define QCMD_SEL_1 0x01 /* select drive 1 */ |
#define QCMD_SEL_2 0x02 /* select drive 2 */ |
#define QCMD_SEL_3 0x04 /* select drive 3 */ |
#define QCMD_SEL_4 0x08 /* select drive 4 */ |
#define QCMD_REWIND 0x21 /* rewind tape */ |
#define QCMD_ERASE 0x22 /* erase tape */ |
#define QCMD_RETEN 0x24 /* retension tape */ |
#define QCMD_WRT_DATA 0x40 /* write data */ |
#define QCMD_WRT_FM 0x60 /* write file mark */ |
#define QCMD_RD_DATA 0x80 /* read data */ |
#define QCMD_RD_FM 0xA0 /* read file mark (forward direction) */ |
#define QCMD_RD_STAT 0xC0 /* read status */ |
/* Other (optional/vendor unique) commands */ |
/* Density commands are only valid when TP_BOM is set! */ |
#define QCMD_DENS_11 0x26 /* QIC-11 */ |
#define QCMD_DENS_24 0x27 /* QIC-24: 9 track 60MB */ |
#define QCMD_DENS_120 0x28 /* QIC-120: 15 track 120MB */ |
#define QCMD_DENS_150 0x29 /* QIC-150: 18 track 150MB */ |
#define QCMD_DENS_300 0x2A /* QIC-300/QIC-2100 */ |
#define QCMD_DENS_600 0x2B /* QIC-600/QIC-2200 */ |
/* don't know about QIC-1000 and QIC-1350 */ |
#define QCMD_WRTNU_DATA 0x40 /* write data, no underruns, insert filler. */ |
#define QCMD_SPACE_FWD 0x81 /* skip next block */ |
#define QCMD_SPACE_BCK 0x89 /* move tape head one block back -- very useful! */ |
#define QCMD_RD_FM_BCK 0xA8 /* read filemark (backwards) */ |
#define QCMD_SEEK_EOD 0xA3 /* skip to EOD */ |
#define QCMD_RD_STAT_X1 0xC1 /* read extended status 1 */ |
#define QCMD_RD_STAT_X2 0xC4 /* read extended status 2 */ |
#define QCMD_RD_STAT_X3 0xE0 /* read extended status 3 */ |
#define QCMD_SELF_TST1 0xC2 /* run self test 1 (nondestructive) */ |
#define QCMD_SELF_TST2 0xCA /* run self test 2 (destructive) */ |
/* Optional, QFA (Quick File Access) commands. |
* Not all drives support this, but those that do could use these commands |
* to implement semi-non-sequential access. `mt fsf` would benefit from this. |
* QFA divides the tape into 2 partitions, a data and a directory partition, |
* causing some incompatibility problems wrt std QIC-02 data exchange. |
* It would be useful to cache the directory info, but that might be tricky |
* to do in kernel-space. [Size constraints.] |
* Refer to the QIC-02 specs, appendix A for more information. |
* I have no idea how other *nix variants implement QFA. |
* I have no idea which drives support QFA and which don't. |
*/ |
#define QFA_ENABLE 0x2D /* enter QFA mode, give @ BOT only */ |
#define QFA_DATA 0x20 /* select data partition */ |
#define QFA_DIR 0x23 /* select directory partition */ |
#define QFA_RD_POS 0xCF /* read position+status bytes */ |
#define QFA_SEEK_EOD 0xA1 /* seek EOD within current partition */ |
#define QFA_SEEK_BLK 0xAF /* seek to a block within current partition */ |
/* |
* Debugging flags |
*/ |
#define TPQD_SENSE_TEXT 0x0001 |
#define TPQD_SENSE_CNTS 0x0002 |
#define TPQD_REWIND 0x0004 |
#define TPQD_TERM_CYCLE 0x0008 |
#define TPQD_IOCTLS 0x0010 |
#define TPQD_DMAX 0x0020 |
#define TPQD_BLKSZ 0x0040 |
#define TPQD_MISC 0x0080 |
#define TPQD_DEBUG 0x0100 |
#define TPQD_DIAGS 0x1000 |
#define TPQD_ALWAYS 0x8000 |
#define TPQD_DEFAULT_FLAGS 0x00fc |
#define TPQDBG(f) ((QIC02_TAPE_DEBUG) & (TPQD_##f)) |
/* Minor device codes for tapes: |
* |7|6|5|4|3|2|1|0| |
* | \ | / \ | / |_____ 1=rewind on close, 0=no rewind on close |
* | \|/ |_________ Density: 000=none, 001=QIC-11, 010=24, 011=120, |
* | | 100=QIC-150, 101..111 reserved. |
* | |_______________ Reserved for unit numbers. |
* |___________________ Reserved for diagnostics during debugging. |
*/ |
#define TP_REWCLOSE(d) ((d)&1) /* rewind bit */ |
/* rewind is only done if data has been transferred */ |
#define TP_DENS(d) (((d) >> 1) & 0x07) /* tape density */ |
#define TP_UNIT(d) (((d) >> 4) & 0x07) /* unit number */ |
/* print excessive diagnostics */ |
#define TP_DIAGS(dev) (QIC02_TAPE_DEBUG & TPQD_DIAGS) |
/* status codes returned by a WTS_RDSTAT call */ |
struct tpstatus { /* sizeof(short)==2), LSB first */ |
unsigned short exs; /* Drive exception flags */ |
unsigned short dec; /* data error count: nr of blocks rewritten/soft read errors */ |
unsigned short urc; /* underrun count: nr of times streaming was interrupted */ |
}; |
#define TPSTATSIZE sizeof(struct tpstatus) |
/* defines for tpstatus.exs -- taken from 386BSD wt driver */ |
#define TP_POR 0x100 /* Power on or reset occurred */ |
#define TP_EOR 0x200 /* REServed for end of RECORDED media */ |
#define TP_PAR 0x400 /* REServed for bus parity */ |
#define TP_BOM 0x800 /* Beginning of media */ |
#define TP_MBD 0x1000 /* Marginal block detected */ |
#define TP_NDT 0x2000 /* No data detected */ |
#define TP_ILL 0x4000 /* Illegal command */ |
#define TP_ST1 0x8000 /* Status byte 1 flag */ |
#define TP_FIL 0x01 /* File mark detected */ |
#define TP_BNL 0x02 /* Bad block not located */ |
#define TP_UDA 0x04 /* Unrecoverable data error */ |
#define TP_EOM 0x08 /* End of media */ |
#define TP_WRP 0x10 /* Write protected cartridge */ |
#define TP_USL 0x20 /* Unselected drive */ |
#define TP_CNI 0x40 /* Cartridge not in place */ |
#define TP_ST0 0x80 /* Status byte 0 flag */ |
#define REPORT_ERR0 (TP_CNI|TP_USL|TP_WRP|TP_EOM|TP_UDA|TP_BNL|TP_FIL) |
#define REPORT_ERR1 (TP_ILL|TP_NDT|TP_MBD|TP_PAR) |
/* exception numbers */ |
#define EXC_UNKNOWN 0 /* (extra) Unknown exception code */ |
#define EXC_NDRV 1 /* No drive */ |
#define EXC_NCART 2 /* No cartridge */ |
#define EXC_WP 3 /* Write protected */ |
#define EXC_EOM 4 /* EOM */ |
#define EXC_RWA 5 /* read/write abort */ |
#define EXC_XBAD 6 /* read error, bad block transferred */ |
#define EXC_XFILLER 7 /* read error, filler block transferred */ |
#define EXC_NDT 8 /* read error, no data */ |
#define EXC_NDTEOM 9 /* read error, no data & EOM */ |
#define EXC_NDTBOM 10 /* read error, no data & BOM */ |
#define EXC_FM 11 /* Read a filemark */ |
#define EXC_ILL 12 /* Illegal command */ |
#define EXC_POR 13 /* Power on/reset */ |
#define EXC_MARGINAL 14 /* Marginal block detected */ |
#define EXC_EOR 15 /* (extra, for SEEKEOD) End Of Recorded data reached */ |
#define EXC_BOM 16 /* (extra) BOM reached */ |
#define TAPE_NOTIFY_TIMEOUT 1000000 |
/* internal function return codes */ |
#define TE_OK 0 /* everything is fine */ |
#define TE_EX 1 /* exception detected */ |
#define TE_ERR 2 /* some error */ |
#define TE_NS 3 /* can't read status */ |
#define TE_TIM 4 /* timed out */ |
#define TE_DEAD 5 /* tape drive doesn't respond */ |
#define TE_END 6 /******** Archive hack *****/ |
/* timeout timer values -- check these! */ |
#define TIM_S (4*HZ) /* 4 seconds (normal cmds) */ |
#define TIM_M (30*HZ) /* 30 seconds (write FM) */ |
#define TIM_R (8*60*HZ) /* 8 minutes (retensioning) */ |
#define TIM_F (2*3600*HZ) /* est. 1.2hr for full tape read/write+2 retens */ |
#define TIMERON(t) mod_timer(&tp_timer, jiffies + (t)) |
#define TIMEROFF del_timer_sync(&tp_timer); |
#define TIMERCONT add_timer(&tp_timer); |
typedef char flag; |
#define NO 0 /* NO must be 0 */ |
#define YES 1 /* YES must be != 0 */ |
#ifdef TDEBUG |
# define TPQDEB(s) s |
# define TPQPUTS(s) tpqputs(s) |
#else |
# define TPQDEB(s) |
# define TPQPUTS(s) |
#endif |
/* NR_BLK_BUF is a `tuneable parameter'. If you're really low on |
* kernel space, you could decrease it to 1, or if you got a very |
* slow machine, you could increase it up to 127 blocks. Less kernel |
* buffer blocks result in more context-switching. |
*/ |
#define NR_BLK_BUF 20 /* max 127 blocks */ |
#define TAPE_BLKSIZE 512 /* streamer tape block size (fixed) */ |
#define TPQBUF_SIZE (TAPE_BLKSIZE*NR_BLK_BUF) /* buffer size */ |
#define BLOCKS_BEYOND_EW 2 /* nr of blocks after Early Warning hole */ |
#define BOGUS_IRQ 32009 |
/* This is internal data, filled in based on the ifc_type field given |
* by the user. Everex is mapped to Wangtek with a different |
* `dma_enable_value', if dmanr==3. |
*/ |
struct qic02_ccb { |
long ifc_type; |
unsigned short port_stat; /* Status port address */ |
unsigned short port_ctl; /* Control port address */ |
unsigned short port_cmd; /* Command port address */ |
unsigned short port_data; /* Data port address */ |
/* status register bits */ |
unsigned short stat_polarity; /* invert status bits or not */ |
unsigned short stat_ready; /* drive ready */ |
unsigned short stat_exception; /* drive signals exception */ |
unsigned short stat_mask; |
unsigned short stat_resetmask; |
unsigned short stat_resetval; |
/* control register bits */ |
unsigned short ctl_reset; /* reset drive */ |
unsigned short ctl_request; /* latch command */ |
/* This is used to change the DMA3 behaviour */ |
unsigned short dma_enable_value; |
}; |
#if MODULE |
static int qic02_tape_init(void); |
#else |
extern int qic02_tape_init(void); /* for mem.c */ |
#endif |
#endif /* CONFIG_QIC02_TAPE */ |
#endif /* _LINUX_TPQIC02_H */ |
/shark/trunk/drivers/linuxc26/include/linux/i2c-dev.h |
---|
0,0 → 1,46 |
/* |
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., 675 Mass Ave, Cambridge, MA 02139, USA. |
*/ |
/* $Id: i2c-dev.h,v 1.1 2004-01-28 15:25:28 giacomo Exp $ */ |
#ifndef _LINUX_I2C_DEV_H |
#define _LINUX_I2C_DEV_H |
#include <linux/types.h> |
/* Some IOCTL commands are defined in <linux/i2c.h> */ |
/* Note: 10-bit addresses are NOT supported! */ |
/* 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 */ |
}; |
#endif /* _LINUX_I2C_DEV_H */ |
/shark/trunk/drivers/linuxc26/include/linux/qnxtypes.h |
---|
0,0 → 1,29 |
/* |
* Name : qnxtypes.h |
* Author : Richard Frowijn |
* Function : standard qnx types |
* Version : 1.0.2 |
* Last modified : 2000-01-06 |
* |
* History : 22-03-1998 created |
* |
*/ |
#ifndef _QNX4TYPES_H |
#define _QNX4TYPES_H |
typedef __u16 qnx4_nxtnt_t; |
typedef __u8 qnx4_ftype_t; |
typedef struct { |
__u32 xtnt_blk; |
__u32 xtnt_size; |
} qnx4_xtnt_t; |
typedef __u16 qnx4_mode_t; |
typedef __u16 qnx4_muid_t; |
typedef __u16 qnx4_mgid_t; |
typedef __u32 qnx4_off_t; |
typedef __u16 qnx4_nlink_t; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/uio.h |
---|
0,0 → 1,57 |
#ifndef __LINUX_UIO_H |
#define __LINUX_UIO_H |
#include <linux/compiler.h> |
#include <linux/types.h> |
/* |
* 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. |
*/ |
/* A word of warning: Our uio structure will clash with the C library one (which is now obsolete). Remove the C |
library one from sys/uio.h if you have a very old library set */ |
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 |
#if 0 |
#define UIO_MAXIOV 16 /* Maximum iovec's in one operation |
16 matches BSD */ |
/* Beg pardon: BSD has 1024 --ANK */ |
#endif |
/* |
* Total number of bytes covered by an iovec. |
* |
* NOTE that it is not safe to use this function until all the iovec's |
* segment lengths have been validated. Because the individual lengths can |
* overflow a size_t when added together. |
*/ |
static inline size_t iov_length(const struct iovec *iov, unsigned long nr_segs) |
{ |
unsigned long seg; |
size_t ret = 0; |
for (seg = 0; seg < nr_segs; seg++) |
ret += iov[seg].iov_len; |
return ret; |
} |
unsigned long iov_shorten(struct iovec *iov, unsigned long nr_segs, size_t to); |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/netfilter_ipv4.h |
---|
0,0 → 1,86 |
#ifndef __LINUX_IP_NETFILTER_H |
#define __LINUX_IP_NETFILTER_H |
/* IPv4-specific defines for netfilter. |
* (C)1998 Rusty Russell -- This code is GPL. |
*/ |
#include <linux/config.h> |
#include <linux/netfilter.h> |
/* 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 |
enum nf_ip_hook_priorities { |
NF_IP_PRI_FIRST = INT_MIN, |
NF_IP_PRI_CONNTRACK = -200, |
NF_IP_PRI_BRIDGE_SABOTAGE_FORWARD = -175, |
NF_IP_PRI_MANGLE = -150, |
NF_IP_PRI_NAT_DST = -100, |
NF_IP_PRI_BRIDGE_SABOTAGE_LOCAL_OUT = -50, |
NF_IP_PRI_FILTER = 0, |
NF_IP_PRI_NAT_SRC = 100, |
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 |
#ifdef __KERNEL__ |
#ifdef CONFIG_NETFILTER_DEBUG |
void nf_debug_ip_local_deliver(struct sk_buff *skb); |
void nf_debug_ip_loopback_xmit(struct sk_buff *newskb); |
void nf_debug_ip_finish_output2(struct sk_buff *skb); |
#endif /*CONFIG_NETFILTER_DEBUG*/ |
extern int ip_route_me_harder(struct sk_buff **pskb); |
/* Call this before modifying an existing IP packet: ensures it is |
modifiable and linear to the point you care about (writable_len). |
Returns true or false. */ |
extern int skb_ip_make_writable(struct sk_buff **pskb, |
unsigned int writable_len); |
#endif /*__KERNEL__*/ |
#endif /*__LINUX_IP_NETFILTER_H*/ |
/shark/trunk/drivers/linuxc26/include/linux/devfs_fs.h |
---|
0,0 → 1,43 |
#ifndef _LINUX_DEVFS_FS_H |
#define _LINUX_DEVFS_FS_H |
#include <linux/ioctl.h> |
#define DEVFSD_PROTOCOL_REVISION_KERNEL 5 |
#define DEVFSD_IOCTL_BASE 'd' |
/* These are the various ioctls */ |
#define DEVFSDIOC_GET_PROTO_REV _IOR(DEVFSD_IOCTL_BASE, 0, int) |
#define DEVFSDIOC_SET_EVENT_MASK _IOW(DEVFSD_IOCTL_BASE, 2, int) |
#define DEVFSDIOC_RELEASE_EVENT_QUEUE _IOW(DEVFSD_IOCTL_BASE, 3, int) |
#define DEVFSDIOC_SET_DEBUG_MASK _IOW(DEVFSD_IOCTL_BASE, 4, int) |
#define DEVFSD_NOTIFY_REGISTERED 0 |
#define DEVFSD_NOTIFY_UNREGISTERED 1 |
#define DEVFSD_NOTIFY_ASYNC_OPEN 2 |
#define DEVFSD_NOTIFY_CLOSE 3 |
#define DEVFSD_NOTIFY_LOOKUP 4 |
#define DEVFSD_NOTIFY_CHANGE 5 |
#define DEVFSD_NOTIFY_CREATE 6 |
#define DEVFSD_NOTIFY_DELETE 7 |
#define DEVFS_PATHLEN 1024 /* Never change this otherwise the |
binary interface will change */ |
struct devfsd_notify_struct |
{ /* Use native C types to ensure same types in kernel and user space */ |
unsigned int type; /* DEVFSD_NOTIFY_* value */ |
unsigned int mode; /* Mode of the inode or device entry */ |
unsigned int major; /* Major number of device entry */ |
unsigned int minor; /* Minor number of device entry */ |
unsigned int uid; /* Uid of process, inode or device entry */ |
unsigned int gid; /* Gid of process, inode or device entry */ |
unsigned int overrun_count; /* Number of lost events */ |
unsigned int namelen; /* Number of characters not including '\0' */ |
/* The device name MUST come last */ |
char devname[DEVFS_PATHLEN]; /* This will be '\0' terminated */ |
}; |
#endif /* _LINUX_DEVFS_FS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/meye.h |
---|
0,0 → 1,59 |
/* |
* 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_VIDIOCPRIVATE+0, struct meye_params) |
/* set the extended parameters */ |
#define MEYEIOC_S_PARAMS _IOW ('v', BASE_VIDIOCPRIVATE+1, struct meye_params) |
/* queue a buffer for mjpeg capture */ |
#define MEYEIOC_QBUF_CAPT _IOW ('v', BASE_VIDIOCPRIVATE+2, int) |
/* sync a previously queued mjpeg buffer */ |
#define MEYEIOC_SYNC _IOWR('v', BASE_VIDIOCPRIVATE+3, int) |
/* get a still uncompressed snapshot */ |
#define MEYEIOC_STILLCAPT _IO ('v', BASE_VIDIOCPRIVATE+4) |
/* get a jpeg compressed snapshot */ |
#define MEYEIOC_STILLJCAPT _IOR ('v', BASE_VIDIOCPRIVATE+5, int) |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/cdk.h |
---|
0,0 → 1,486 |
/*****************************************************************************/ |
/* |
* cdk.h -- CDK interface definitions. |
* |
* Copyright (C) 1996-1998 Stallion Technologies (support@stallion.oz.au). |
* Copyright (C) 1994-1996 Greg Ungerer. |
* |
* 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 _CDK_H |
#define _CDK_H |
/*****************************************************************************/ |
#pragma pack(2) |
/* |
* The following set of definitions is used to communicate with the |
* shared memory interface of the Stallion intelligent multiport serial |
* boards. The definitions in this file are taken directly from the |
* document titled "Generic Stackable Interface, Downloader and |
* Communications Development Kit". |
*/ |
/* |
* Define the set of important shared memory addresses. These are |
* required to initialize the board and get things started. All of these |
* addresses are relative to the start of the shared memory. |
*/ |
#define CDK_SIGADDR 0x200 |
#define CDK_FEATADDR 0x280 |
#define CDK_CDKADDR 0x300 |
#define CDK_RDYADDR 0x262 |
#define CDK_ALIVEMARKER 13 |
/* |
* On hardware power up the ROMs located on the EasyConnection 8/64 will |
* fill out the following signature information into shared memory. This |
* way the host system can quickly determine that the board is present |
* and is operational. |
*/ |
typedef struct cdkecpsig { |
unsigned long magic; |
unsigned short romver; |
unsigned short cputype; |
unsigned char panelid[8]; |
} cdkecpsig_t; |
#define ECP_MAGIC 0x21504345 |
/* |
* On hardware power up the ROMs located on the ONboard, Stallion and |
* Brumbys will fill out the following signature information into shared |
* memory. This way the host system can quickly determine that the board |
* is present and is operational. |
*/ |
typedef struct cdkonbsig { |
unsigned short magic0; |
unsigned short magic1; |
unsigned short magic2; |
unsigned short magic3; |
unsigned short romver; |
unsigned short memoff; |
unsigned short memseg; |
unsigned short amask0; |
unsigned short pic; |
unsigned short status; |
unsigned short btype; |
unsigned short clkticks; |
unsigned short clkspeed; |
unsigned short amask1; |
unsigned short amask2; |
} cdkonbsig_t; |
#define ONB_MAGIC0 0xf2a7 |
#define ONB_MAGIC1 0xa149 |
#define ONB_MAGIC2 0x6352 |
#define ONB_MAGIC3 0xf121 |
/* |
* Define the feature area structure. The feature area is the set of |
* startup parameters used by the slave image when it starts executing. |
* They allow for the specification of buffer sizes, debug trace, etc. |
*/ |
typedef struct cdkfeature { |
unsigned long debug; |
unsigned long banner; |
unsigned long etype; |
unsigned long nrdevs; |
unsigned long brdspec; |
unsigned long txrqsize; |
unsigned long rxrqsize; |
unsigned long flags; |
} cdkfeature_t; |
#define ETYP_DDK 0 |
#define ETYP_CDK 1 |
/* |
* Define the CDK header structure. This is the info that the slave |
* environment sets up after it has been downloaded and started. It |
* essentially provides a memory map for the shared memory interface. |
*/ |
typedef struct cdkhdr { |
unsigned short command; |
unsigned short status; |
unsigned short port; |
unsigned short mode; |
unsigned long cmd_buf[14]; |
unsigned short alive_cnt; |
unsigned short intrpt_mode; |
unsigned char intrpt_id[8]; |
unsigned char ver_release; |
unsigned char ver_modification; |
unsigned char ver_fix; |
unsigned char deadman_restart; |
unsigned short deadman; |
unsigned short nrdevs; |
unsigned long memp; |
unsigned long hostp; |
unsigned long slavep; |
unsigned char hostreq; |
unsigned char slavereq; |
unsigned char cmd_reserved[30]; |
} cdkhdr_t; |
#define MODE_DDK 0 |
#define MODE_CDK 1 |
#define IMD_INTR 0x0 |
#define IMD_PPINTR 0x1 |
#define IMD_POLL 0xff |
/* |
* Define the memory mapping structure. This structure is pointed to by |
* the memp field in the stlcdkhdr struct. As many as these structures |
* as required are layed out in shared memory to define how the rest of |
* shared memory is divided up. There will be one for each port. |
*/ |
typedef struct cdkmem { |
unsigned short dtype; |
unsigned long offset; |
} cdkmem_t; |
#define TYP_UNDEFINED 0x0 |
#define TYP_ASYNCTRL 0x1 |
#define TYP_ASYNC 0x20 |
#define TYP_PARALLEL 0x40 |
#define TYP_SYNCX21 0x60 |
/*****************************************************************************/ |
/* |
* Following is a set of defines and structures used to actually deal |
* with the serial ports on the board. Firstly is the set of commands |
* that can be applied to ports. |
*/ |
#define ASYCMD (((unsigned long) 'a') << 8) |
#define A_NULL (ASYCMD | 0) |
#define A_FLUSH (ASYCMD | 1) |
#define A_BREAK (ASYCMD | 2) |
#define A_GETPORT (ASYCMD | 3) |
#define A_SETPORT (ASYCMD | 4) |
#define A_SETPORTF (ASYCMD | 5) |
#define A_SETPORTFTX (ASYCMD | 6) |
#define A_SETPORTFRX (ASYCMD | 7) |
#define A_GETSIGNALS (ASYCMD | 8) |
#define A_SETSIGNALS (ASYCMD | 9) |
#define A_SETSIGNALSF (ASYCMD | 10) |
#define A_SETSIGNALSFTX (ASYCMD | 11) |
#define A_SETSIGNALSFRX (ASYCMD | 12) |
#define A_GETNOTIFY (ASYCMD | 13) |
#define A_SETNOTIFY (ASYCMD | 14) |
#define A_NOTIFY (ASYCMD | 15) |
#define A_PORTCTRL (ASYCMD | 16) |
#define A_GETSTATS (ASYCMD | 17) |
#define A_RQSTATE (ASYCMD | 18) |
#define A_FLOWSTATE (ASYCMD | 19) |
#define A_CLEARSTATS (ASYCMD | 20) |
/* |
* Define those arguments used for simple commands. |
*/ |
#define FLUSHRX 0x1 |
#define FLUSHTX 0x2 |
#define BREAKON -1 |
#define BREAKOFF -2 |
/* |
* Define the port setting structure, and all those defines that go along |
* with it. Basically this structure defines the characteristics of this |
* port: baud rate, chars, parity, input/output char cooking etc. |
*/ |
typedef struct asyport { |
unsigned long baudout; |
unsigned long baudin; |
unsigned long iflag; |
unsigned long oflag; |
unsigned long lflag; |
unsigned long pflag; |
unsigned long flow; |
unsigned long spare1; |
unsigned short vtime; |
unsigned short vmin; |
unsigned short txlo; |
unsigned short txhi; |
unsigned short rxlo; |
unsigned short rxhi; |
unsigned short rxhog; |
unsigned short spare2; |
unsigned char csize; |
unsigned char stopbs; |
unsigned char parity; |
unsigned char stopin; |
unsigned char startin; |
unsigned char stopout; |
unsigned char startout; |
unsigned char parmark; |
unsigned char brkmark; |
unsigned char cc[11]; |
} asyport_t; |
#define PT_STOP1 0x0 |
#define PT_STOP15 0x1 |
#define PT_STOP2 0x2 |
#define PT_NOPARITY 0x0 |
#define PT_ODDPARITY 0x1 |
#define PT_EVENPARITY 0x2 |
#define PT_MARKPARITY 0x3 |
#define PT_SPACEPARITY 0x4 |
#define F_NONE 0x0 |
#define F_IXON 0x1 |
#define F_IXOFF 0x2 |
#define F_IXANY 0x4 |
#define F_IOXANY 0x8 |
#define F_RTSFLOW 0x10 |
#define F_CTSFLOW 0x20 |
#define F_DTRFLOW 0x40 |
#define F_DCDFLOW 0x80 |
#define F_DSROFLOW 0x100 |
#define F_DSRIFLOW 0x200 |
#define FI_NORX 0x1 |
#define FI_RAW 0x2 |
#define FI_ISTRIP 0x4 |
#define FI_UCLC 0x8 |
#define FI_INLCR 0x10 |
#define FI_ICRNL 0x20 |
#define FI_IGNCR 0x40 |
#define FI_IGNBREAK 0x80 |
#define FI_DSCRDBREAK 0x100 |
#define FI_1MARKBREAK 0x200 |
#define FI_2MARKBREAK 0x400 |
#define FI_XCHNGBREAK 0x800 |
#define FI_IGNRXERRS 0x1000 |
#define FI_DSCDRXERRS 0x2000 |
#define FI_1MARKRXERRS 0x4000 |
#define FI_2MARKRXERRS 0x8000 |
#define FI_XCHNGRXERRS 0x10000 |
#define FI_DSCRDNULL 0x20000 |
#define FO_OLCUC 0x1 |
#define FO_ONLCR 0x2 |
#define FO_OOCRNL 0x4 |
#define FO_ONOCR 0x8 |
#define FO_ONLRET 0x10 |
#define FO_ONL 0x20 |
#define FO_OBS 0x40 |
#define FO_OVT 0x80 |
#define FO_OFF 0x100 |
#define FO_OTAB1 0x200 |
#define FO_OTAB2 0x400 |
#define FO_OTAB3 0x800 |
#define FO_OCR1 0x1000 |
#define FO_OCR2 0x2000 |
#define FO_OCR3 0x4000 |
#define FO_OFILL 0x8000 |
#define FO_ODELL 0x10000 |
#define P_RTSLOCK 0x1 |
#define P_CTSLOCK 0x2 |
#define P_MAPRTS 0x4 |
#define P_MAPCTS 0x8 |
#define P_LOOPBACK 0x10 |
#define P_DTRFOLLOW 0x20 |
#define P_FAKEDCD 0x40 |
#define P_RXIMIN 0x10000 |
#define P_RXITIME 0x20000 |
#define P_RXTHOLD 0x40000 |
/* |
* Define a structure to communicate serial port signal and data state |
* information. |
*/ |
typedef struct asysigs { |
unsigned long data; |
unsigned long signal; |
unsigned long sigvalue; |
} asysigs_t; |
#define DT_TXBUSY 0x1 |
#define DT_TXEMPTY 0x2 |
#define DT_TXLOW 0x4 |
#define DT_TXHIGH 0x8 |
#define DT_TXFULL 0x10 |
#define DT_TXHOG 0x20 |
#define DT_TXFLOWED 0x40 |
#define DT_TXBREAK 0x80 |
#define DT_RXBUSY 0x100 |
#define DT_RXEMPTY 0x200 |
#define DT_RXLOW 0x400 |
#define DT_RXHIGH 0x800 |
#define DT_RXFULL 0x1000 |
#define DT_RXHOG 0x2000 |
#define DT_RXFLOWED 0x4000 |
#define DT_RXBREAK 0x8000 |
#define SG_DTR 0x1 |
#define SG_DCD 0x2 |
#define SG_RTS 0x4 |
#define SG_CTS 0x8 |
#define SG_DSR 0x10 |
#define SG_RI 0x20 |
/* |
* Define the notification setting structure. This is used to tell the |
* port what events we want to be informed about. Fields here use the |
* same defines as for the asysigs structure above. |
*/ |
typedef struct asynotify { |
unsigned long ctrl; |
unsigned long data; |
unsigned long signal; |
unsigned long sigvalue; |
} asynotify_t; |
/* |
* Define the port control structure. It is used to do fine grain |
* control operations on the port. |
*/ |
typedef struct { |
unsigned long rxctrl; |
unsigned long txctrl; |
char rximdch; |
char tximdch; |
char spare1; |
char spare2; |
} asyctrl_t; |
#define CT_ENABLE 0x1 |
#define CT_DISABLE 0x2 |
#define CT_STOP 0x4 |
#define CT_START 0x8 |
#define CT_STARTFLOW 0x10 |
#define CT_STOPFLOW 0x20 |
#define CT_SENDCHR 0x40 |
/* |
* Define the stats structure kept for each port. This is a useful set |
* of data collected for each port on the slave. The A_GETSTATS command |
* is used to retrieve this data from the slave. |
*/ |
typedef struct asystats { |
unsigned long opens; |
unsigned long txchars; |
unsigned long rxchars; |
unsigned long txringq; |
unsigned long rxringq; |
unsigned long txmsgs; |
unsigned long rxmsgs; |
unsigned long txflushes; |
unsigned long rxflushes; |
unsigned long overruns; |
unsigned long framing; |
unsigned long parity; |
unsigned long ringover; |
unsigned long lost; |
unsigned long rxstart; |
unsigned long rxstop; |
unsigned long txstart; |
unsigned long txstop; |
unsigned long dcdcnt; |
unsigned long dtrcnt; |
unsigned long ctscnt; |
unsigned long rtscnt; |
unsigned long dsrcnt; |
unsigned long ricnt; |
unsigned long txbreaks; |
unsigned long rxbreaks; |
unsigned long signals; |
unsigned long state; |
unsigned long hwid; |
} asystats_t; |
/*****************************************************************************/ |
/* |
* All command and control communication with a device on the slave is |
* via a control block in shared memory. Each device has its own control |
* block, defined by the following structure. The control block allows |
* the host to open, close and control the device on the slave. |
*/ |
typedef struct cdkctrl { |
unsigned char open; |
unsigned char close; |
unsigned long openarg; |
unsigned long closearg; |
unsigned long cmd; |
unsigned long status; |
unsigned long args[32]; |
} cdkctrl_t; |
/* |
* Each device on the slave passes data to and from the host via a ring |
* queue in shared memory. Define a ring queue structure to hold the |
* vital information about each ring queue. Two ring queues will be |
* allocated for each port, one for receive data and one for transmit |
* data. |
*/ |
typedef struct cdkasyrq { |
unsigned long offset; |
unsigned short size; |
unsigned short head; |
unsigned short tail; |
} cdkasyrq_t; |
/* |
* Each asynchronous port is defined in shared memory by the following |
* structure. It contains a control block to command a device, and also |
* the necessary data channel information as well. |
*/ |
typedef struct cdkasy { |
cdkctrl_t ctrl; |
unsigned short notify; |
asynotify_t changed; |
unsigned short receive; |
cdkasyrq_t rxq; |
unsigned short transmit; |
cdkasyrq_t txq; |
} cdkasy_t; |
#pragma pack() |
/*****************************************************************************/ |
/* |
* Define the set of ioctls used by the driver to do special things |
* to the board. These include interrupting it, and initializing |
* the driver after board startup and shutdown. |
*/ |
#include <linux/ioctl.h> |
#define STL_BINTR _IO('s',20) |
#define STL_BSTART _IO('s',21) |
#define STL_BSTOP _IO('s',22) |
#define STL_BRESET _IO('s',23) |
/* |
* Define a set of ioctl extensions, used to get at special stuff. |
*/ |
#define STL_GETPFLAG _IO('s',80) |
#define STL_SETPFLAG _IO('s',81) |
/*****************************************************************************/ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/cramfs_fs.h |
---|
0,0 → 1,98 |
#ifndef __CRAMFS_H |
#define __CRAMFS_H |
#ifndef __KERNEL__ |
typedef unsigned char u8; |
typedef unsigned short u16; |
typedef unsigned int u32; |
#endif |
#define CRAMFS_MAGIC 0x28cd3d45 /* some random number */ |
#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 ) |
/* Uncompression interfaces to the underlying zlib */ |
int cramfs_uncompress_block(void *dst, int dstlen, void *src, int srclen); |
int cramfs_uncompress_init(void); |
int cramfs_uncompress_exit(void); |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/concap.h |
---|
0,0 → 1,112 |
/* $Id: concap.h,v 1.1 2004-01-28 15:25:03 giacomo Exp $ |
* |
* Copyright 1997 by Henner Eisen <eis@baty.hanse.de> |
* |
* This software may be used and distributed according to the terms |
* of the GNU General Public License, incorporated herein by reference. |
*/ |
#ifndef _LINUX_CONCAP_H |
#define _LINUX_CONCAP_H |
#ifdef __KERNEL__ |
#include <linux/skbuff.h> |
#include <linux/netdevice.h> |
/* Stuff to support encapsulation protocols genericly. The encapsulation |
protocol is processed at the uppermost layer of the network interface. |
Based on a ideas developed in a 'synchronous device' thread in the |
linux-x25 mailing list contributed by Alan Cox, Thomasz Motylewski |
and Jonathan Naylor. |
For more documetation on this refer to Documentation/isdn/README.concap |
*/ |
struct concap_proto_ops; |
struct concap_device_ops; |
/* this manages all data needed by the encapsulation protocol |
*/ |
struct concap_proto{ |
struct net_device *net_dev; /* net device using our service */ |
struct concap_device_ops *dops; /* callbacks provided by device */ |
struct concap_proto_ops *pops; /* callbacks provided by us */ |
int flags; |
void *proto_data; /* protocol specific private data, to |
be accessed via *pops methods only*/ |
/* |
: |
whatever |
: |
*/ |
}; |
/* Operations to be supported by the net device. Called by the encapsulation |
* protocol entity. No receive method is offered because the encapsulation |
* protocol directly calls netif_rx(). |
*/ |
struct concap_device_ops{ |
/* to request data is submitted by device*/ |
int (*data_req)(struct concap_proto *, struct sk_buff *); |
/* Control methods must be set to NULL by devices which do not |
support connection control.*/ |
/* to request a connection is set up */ |
int (*connect_req)(struct concap_proto *); |
/* to request a connection is released */ |
int (*disconn_req)(struct concap_proto *); |
}; |
/* Operations to be supported by the encapsulation protocol. Called by |
* device driver. |
*/ |
struct concap_proto_ops{ |
/* create a new encapsulation protocol instance of same type */ |
struct concap_proto * (*proto_new) (void); |
/* delete encapsulation protocol instance and free all its resources. |
cprot may no loger be referenced after calling this */ |
void (*proto_del)(struct concap_proto *cprot); |
/* initialize the protocol's data. To be called at interface startup |
or when the device driver resets the interface. All services of the |
encapsulation protocol may be used after this*/ |
int (*restart)(struct concap_proto *cprot, |
struct net_device *ndev, |
struct concap_device_ops *dops); |
/* inactivate an encapsulation protocol instance. The encapsulation |
protocol may not call any *dops methods after this. */ |
int (*close)(struct concap_proto *cprot); |
/* process a frame handed down to us by upper layer */ |
int (*encap_and_xmit)(struct concap_proto *cprot, struct sk_buff *skb); |
/* to be called for each data entity received from lower layer*/ |
int (*data_ind)(struct concap_proto *cprot, struct sk_buff *skb); |
/* to be called when a connection was set up/down. |
Protocols that don't process these primitives might fill in |
dummy methods here */ |
int (*connect_ind)(struct concap_proto *cprot); |
int (*disconn_ind)(struct concap_proto *cprot); |
/* |
Some network device support functions, like net_header(), rebuild_header(), |
and others, that depend solely on the encapsulation protocol, might |
be provided here, too. The net device would just fill them in its |
corresponding fields when it is opened. |
*/ |
}; |
/* dummy restart/close/connect/reset/disconn methods |
*/ |
extern int concap_nop(struct concap_proto *cprot); |
/* dummy submit method |
*/ |
extern int concap_drop_skb(struct concap_proto *cprot, struct sk_buff *skb); |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/ipsec.h |
---|
0,0 → 1,46 |
#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 |
}; |
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 */ |
/shark/trunk/drivers/linuxc26/include/linux/moduleparam.h |
---|
0,0 → 1,146 |
#ifndef _LINUX_MODULE_PARAMS_H |
#define _LINUX_MODULE_PARAMS_H |
/* (C) Copyright 2001, 2002 Rusty Russell IBM Corporation */ |
#include <linux/init.h> |
#include <linux/stringify.h> |
#include <linux/kernel.h> |
/* You can override this manually, but generally this should match the |
module name. */ |
#ifdef MODULE |
#define MODULE_PARAM_PREFIX /* empty */ |
#else |
#define MODULE_PARAM_PREFIX __stringify(KBUILD_MODNAME) "." |
#endif |
struct kernel_param; |
/* Returns 0, or -errno. arg is in kp->arg. */ |
typedef int (*param_set_fn)(const char *val, struct kernel_param *kp); |
/* Returns length written or -errno. Buffer is 4k (ie. be short!) */ |
typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp); |
struct kernel_param { |
const char *name; |
unsigned int perm; |
param_set_fn set; |
param_get_fn get; |
void *arg; |
}; |
/* Special one for strings we want to copy into */ |
struct kparam_string { |
unsigned int maxlen; |
char *string; |
}; |
/* Special one for arrays */ |
struct kparam_array |
{ |
unsigned int max; |
unsigned int *num; |
param_set_fn set; |
param_get_fn get; |
unsigned int elemsize; |
void *elem; |
}; |
/* This is the fundamental function for registering boot/module |
parameters. perm sets the visibility in driverfs: 000 means it's |
not there, read bits mean it's readable, write bits mean it's |
writable. */ |
#define __module_param_call(prefix, name, set, get, arg, perm) \ |
static char __param_str_##name[] __initdata = prefix #name; \ |
static struct kernel_param const __param_##name \ |
__attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \ |
= { __param_str_##name, perm, set, get, arg } |
#define module_param_call(name, set, get, arg, perm) \ |
__module_param_call(MODULE_PARAM_PREFIX, name, set, get, arg, perm) |
/* Helper functions: type is byte, short, ushort, int, uint, long, |
ulong, charp, bool or invbool, or XXX if you define param_get_XXX, |
param_set_XXX and param_check_XXX. */ |
#define module_param_named(name, value, type, perm) \ |
param_check_##type(name, &(value)); \ |
module_param_call(name, param_set_##type, param_get_##type, &value, perm) |
#define module_param(name, type, perm) \ |
module_param_named(name, name, type, perm) |
/* Actually copy string: maxlen param is usually sizeof(string). */ |
#define module_param_string(name, string, len, perm) \ |
static struct kparam_string __param_string_##name __initdata \ |
= { len, string }; \ |
module_param_call(name, param_set_copystring, param_get_charp, \ |
&__param_string_##name, perm) |
/* Called on module insert or kernel boot */ |
extern int parse_args(const char *name, |
char *args, |
struct kernel_param *params, |
unsigned num, |
int (*unknown)(char *param, char *val)); |
/* All the helper functions */ |
/* The macros to do compile-time type checking stolen from Jakub |
Jelinek, who IIRC came up with this idea for the 2.4 module init code. */ |
#define __param_check(name, p, type) \ |
static inline type *__check_##name(void) { return(p); } |
extern int param_set_short(const char *val, struct kernel_param *kp); |
extern int param_get_short(char *buffer, struct kernel_param *kp); |
#define param_check_short(name, p) __param_check(name, p, short) |
extern int param_set_ushort(const char *val, struct kernel_param *kp); |
extern int param_get_ushort(char *buffer, struct kernel_param *kp); |
#define param_check_ushort(name, p) __param_check(name, p, unsigned short) |
extern int param_set_int(const char *val, struct kernel_param *kp); |
extern int param_get_int(char *buffer, struct kernel_param *kp); |
#define param_check_int(name, p) __param_check(name, p, int) |
extern int param_set_uint(const char *val, struct kernel_param *kp); |
extern int param_get_uint(char *buffer, struct kernel_param *kp); |
#define param_check_uint(name, p) __param_check(name, p, unsigned int) |
extern int param_set_long(const char *val, struct kernel_param *kp); |
extern int param_get_long(char *buffer, struct kernel_param *kp); |
#define param_check_long(name, p) __param_check(name, p, long) |
extern int param_set_ulong(const char *val, struct kernel_param *kp); |
extern int param_get_ulong(char *buffer, struct kernel_param *kp); |
#define param_check_ulong(name, p) __param_check(name, p, unsigned long) |
extern int param_set_charp(const char *val, struct kernel_param *kp); |
extern int param_get_charp(char *buffer, struct kernel_param *kp); |
#define param_check_charp(name, p) __param_check(name, p, char *) |
extern int param_set_bool(const char *val, struct kernel_param *kp); |
extern int param_get_bool(char *buffer, struct kernel_param *kp); |
#define param_check_bool(name, p) __param_check(name, p, int) |
extern int param_set_invbool(const char *val, struct kernel_param *kp); |
extern int param_get_invbool(char *buffer, struct kernel_param *kp); |
#define param_check_invbool(name, p) __param_check(name, p, int) |
/* Comma-separated array: num is set to number they actually specified. */ |
#define module_param_array(name, type, num, perm) \ |
static struct kparam_array __param_arr_##name \ |
= { ARRAY_SIZE(name), &num, param_set_##type, param_get_##type, \ |
sizeof(name[0]), name }; \ |
module_param_call(name, param_array_set, param_array_get, \ |
&__param_arr_##name, perm) |
extern int param_array_set(const char *val, struct kernel_param *kp); |
extern int param_array_get(char *buffer, struct kernel_param *kp); |
extern int param_set_copystring(const char *val, struct kernel_param *kp); |
int param_array(const char *name, |
const char *val, |
unsigned int min, unsigned int max, |
void *elem, int elemsize, |
int (*set)(const char *, struct kernel_param *kp), |
int *num); |
#endif /* _LINUX_MODULE_PARAM_TYPES_H */ |
/shark/trunk/drivers/linuxc26/include/linux/if_fc.h |
---|
0,0 → 1,50 |
/* |
* 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 |
#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 */ |
__u16 ethertype; /* ether type field */ |
}; |
#endif /* _LINUX_IF_FC_H */ |
/shark/trunk/drivers/linuxc26/include/linux/mtio.h |
---|
0,0 → 1,379 |
/* |
* 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> |
#include <linux/qic117.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 */ |
/* 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 |
struct mt_tape_info { |
long t_type; /* device type id (mt_type) */ |
char *t_name; /* descriptive name */ |
}; |
#define MT_TAPE_INFO { \ |
{MT_ISUNKNOWN, "Unknown type of tape device"}, \ |
{MT_ISQIC02, "Generic QIC-02 tape streamer"}, \ |
{MT_ISWT5150, "Wangtek 5150, QIC-150"}, \ |
{MT_ISARCHIVE_5945L2, "Archive 5945L-2"}, \ |
{MT_ISCMSJ500, "CMS Jumbo 500"}, \ |
{MT_ISTDC3610, "Tandberg TDC 3610, QIC-24"}, \ |
{MT_ISARCHIVE_VP60I, "Archive VP60i, QIC-02"}, \ |
{MT_ISARCHIVE_2150L, "Archive Viper 2150L"}, \ |
{MT_ISARCHIVE_2060L, "Archive Viper 2060L"}, \ |
{MT_ISARCHIVESC499, "Archive SC-499 QIC-36 controller"}, \ |
{MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"}, \ |
{MT_ISWT5099EEN24, "Wangtek 5099-een24, 60MB"}, \ |
{MT_ISTEAC_MT2ST, "Teac MT-2ST 155mb data cassette drive"}, \ |
{MT_ISEVEREX_FT40A, "Everex FT40A, QIC-40"}, \ |
{MT_ISONSTREAM_SC, "OnStream SC-, DI-, DP-, or USB tape drive"}, \ |
{MT_ISSCSI1, "Generic SCSI-1 tape"}, \ |
{MT_ISSCSI2, "Generic SCSI-2 tape"}, \ |
{0, NULL} \ |
} |
/* structure for MTIOCPOS - mag tape get position command */ |
struct mtpos { |
long mt_blkno; /* current block number */ |
}; |
/* structure for MTIOCGETCONFIG/MTIOCSETCONFIG primarily intended |
* as an interim solution for QIC-02 until DDI is fully implemented. |
*/ |
struct mtconfiginfo { |
long mt_type; /* drive type */ |
long ifc_type; /* interface card type */ |
unsigned short irqnr; /* IRQ number to use */ |
unsigned short dmanr; /* DMA channel to use */ |
unsigned short port; /* IO port base address */ |
unsigned long debug; /* debugging flags */ |
unsigned have_dens:1; |
unsigned have_bsf:1; |
unsigned have_fsr:1; |
unsigned have_bsr:1; |
unsigned have_eod:1; |
unsigned have_seek:1; |
unsigned have_tell:1; |
unsigned have_ras1:1; |
unsigned have_ras2:1; |
unsigned have_ras3:1; |
unsigned have_qfa:1; |
unsigned pad1:5; |
char reserved[10]; |
}; |
/* structure for MTIOCVOLINFO, query information about the volume |
* currently positioned at (zftape) |
*/ |
struct mtvolinfo { |
unsigned int mt_volno; /* vol-number */ |
unsigned int mt_blksz; /* blocksize used when recording */ |
unsigned int mt_rawsize; /* raw tape space consumed, in kb */ |
unsigned int mt_size; /* volume size after decompression, in kb */ |
unsigned int mt_cmpr:1; /* this volume has been compressed */ |
}; |
/* raw access to a floppy drive, read and write an arbitrary segment. |
* For ftape/zftape to support formatting etc. |
*/ |
#define MT_FT_RD_SINGLE 0 |
#define MT_FT_RD_AHEAD 1 |
#define MT_FT_WR_ASYNC 0 /* start tape only when all buffers are full */ |
#define MT_FT_WR_MULTI 1 /* start tape, continue until buffers are empty */ |
#define MT_FT_WR_SINGLE 2 /* write a single segment and stop afterwards */ |
#define MT_FT_WR_DELETE 3 /* write deleted data marks, one segment at time */ |
struct mtftseg |
{ |
unsigned mt_segno; /* the segment to read or write */ |
unsigned mt_mode; /* modes for read/write (sync/async etc.) */ |
int mt_result; /* result of r/w request, not of the ioctl */ |
void *mt_data; /* User space buffer: must be 29kb */ |
}; |
/* get tape capacity (ftape/zftape) |
*/ |
struct mttapesize { |
unsigned long mt_capacity; /* entire, uncompressed capacity |
* of a cartridge |
*/ |
unsigned long mt_used; /* what has been used so far, raw |
* uncompressed amount |
*/ |
}; |
/* possible values of the ftfmt_op field |
*/ |
#define FTFMT_SET_PARMS 1 /* set software parms */ |
#define FTFMT_GET_PARMS 2 /* get software parms */ |
#define FTFMT_FORMAT_TRACK 3 /* start formatting a tape track */ |
#define FTFMT_STATUS 4 /* monitor formatting a tape track */ |
#define FTFMT_VERIFY 5 /* verify the given segment */ |
struct ftfmtparms { |
unsigned char ft_qicstd; /* QIC-40/QIC-80/QIC-3010/QIC-3020 */ |
unsigned char ft_fmtcode; /* Refer to the QIC specs */ |
unsigned char ft_fhm; /* floppy head max */ |
unsigned char ft_ftm; /* floppy track max */ |
unsigned short ft_spt; /* segments per track */ |
unsigned short ft_tpc; /* tracks per cartridge */ |
}; |
struct ftfmttrack { |
unsigned int ft_track; /* track to format */ |
unsigned char ft_gap3; /* size of gap3, for FORMAT_TRK */ |
}; |
struct ftfmtstatus { |
unsigned int ft_segment; /* segment currently being formatted */ |
}; |
struct ftfmtverify { |
unsigned int ft_segment; /* segment to verify */ |
unsigned long ft_bsm; /* bsm as result of VERIFY cmd */ |
}; |
struct mtftformat { |
unsigned int fmt_op; /* operation to perform */ |
union fmt_arg { |
struct ftfmtparms fmt_parms; /* format parameters */ |
struct ftfmttrack fmt_track; /* ctrl while formatting */ |
struct ftfmtstatus fmt_status; |
struct ftfmtverify fmt_verify; /* for verifying */ |
} fmt_arg; |
}; |
struct mtftcmd { |
unsigned int ft_wait_before; /* timeout to wait for drive to get ready |
* before command is sent. Milliseconds |
*/ |
qic117_cmd_t ft_cmd; /* command to send */ |
unsigned char ft_parm_cnt; /* zero: no parm is sent. */ |
unsigned char ft_parms[3]; /* parameter(s) to send to |
* the drive. The parms are nibbles |
* driver sends cmd + 2 step pulses */ |
unsigned int ft_result_bits; /* if non zero, number of bits |
* returned by the tape drive |
*/ |
unsigned int ft_result; /* the result returned by the tape drive*/ |
unsigned int ft_wait_after; /* timeout to wait for drive to get ready |
* after command is sent. 0: don't wait */ |
int ft_status; /* status returned by ready wait |
* undefined if timeout was 0. |
*/ |
int ft_error; /* error code if error status was set by |
* command |
*/ |
}; |
/* 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 */ |
/* The next two are used by the QIC-02 driver for runtime reconfiguration. |
* See tpqic02.h for struct mtconfiginfo. |
*/ |
#define MTIOCGETCONFIG _IOR('m', 4, struct mtconfiginfo) /* get tape config */ |
#define MTIOCSETCONFIG _IOW('m', 5, struct mtconfiginfo) /* set tape config */ |
/* the next six are used by the floppy ftape drivers and its frontends |
* sorry, but MTIOCTOP commands are write only. |
*/ |
#define MTIOCRDFTSEG _IOWR('m', 6, struct mtftseg) /* read a segment */ |
#define MTIOCWRFTSEG _IOWR('m', 7, struct mtftseg) /* write a segment */ |
#define MTIOCVOLINFO _IOR('m', 8, struct mtvolinfo) /* info about volume */ |
#define MTIOCGETSIZE _IOR('m', 9, struct mttapesize)/* get cartridge size*/ |
#define MTIOCFTFORMAT _IOWR('m', 10, struct mtftformat) /* format ftape */ |
#define MTIOCFTCMD _IOWR('m', 11, struct mtftcmd) /* send QIC-117 cmd */ |
/* 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 |
/* 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 */ |
/shark/trunk/drivers/linuxc26/include/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 */ |
/* --------------------------------------------------------------------- */ |
/shark/trunk/drivers/linuxc26/include/linux/pagemap.h |
---|
0,0 → 1,236 |
#ifndef _LINUX_PAGEMAP_H |
#define _LINUX_PAGEMAP_H |
/* |
* Copyright 1995 Linus Torvalds |
*/ |
#include <linux/mm.h> |
#include <linux/fs.h> |
#include <linux/list.h> |
#include <linux/highmem.h> |
#include <linux/pagemap.h> |
#include <asm/uaccess.h> |
#include <linux/gfp.h> |
/* |
* Bits in mapping->flags. The lower __GFP_BITS_SHIFT bits are the page |
* allocation mode flags. |
*/ |
#define AS_EIO (__GFP_BITS_SHIFT + 0) /* IO error on async write */ |
#define AS_ENOSPC (__GFP_BITS_SHIFT + 1) /* ENOSPC on async write */ |
static inline int mapping_gfp_mask(struct address_space * mapping) |
{ |
return mapping->flags & __GFP_BITS_MASK; |
} |
/* |
* This is non-atomic. Only to be used before the mapping is activated. |
* Probably needs a barrier... |
*/ |
static inline void mapping_set_gfp_mask(struct address_space *m, int mask) |
{ |
m->flags = (m->flags & ~__GFP_BITS_MASK) | mask; |
} |
/* |
* The page cache can done in larger chunks than |
* one page, because it allows for more efficient |
* throughput (it can then be mapped into user |
* space in smaller chunks for same flexibility). |
* |
* Or rather, it _will_ be done in larger chunks. |
*/ |
#define PAGE_CACHE_SHIFT PAGE_SHIFT |
#define PAGE_CACHE_SIZE PAGE_SIZE |
#define PAGE_CACHE_MASK PAGE_MASK |
#define PAGE_CACHE_ALIGN(addr) (((addr)+PAGE_CACHE_SIZE-1)&PAGE_CACHE_MASK) |
#define page_cache_get(page) get_page(page) |
#define page_cache_release(page) put_page(page) |
void release_pages(struct page **pages, int nr, int cold); |
static inline struct page *page_cache_alloc(struct address_space *x) |
{ |
return alloc_pages(mapping_gfp_mask(x), 0); |
} |
static inline struct page *page_cache_alloc_cold(struct address_space *x) |
{ |
return alloc_pages(mapping_gfp_mask(x)|__GFP_COLD, 0); |
} |
typedef int filler_t(void *, struct page *); |
extern struct page * find_get_page(struct address_space *mapping, |
unsigned long index); |
extern struct page * find_lock_page(struct address_space *mapping, |
unsigned long index); |
extern struct page * find_trylock_page(struct address_space *mapping, |
unsigned long index); |
extern struct page * find_or_create_page(struct address_space *mapping, |
unsigned long index, unsigned int gfp_mask); |
extern unsigned int find_get_pages(struct address_space *mapping, |
pgoff_t start, unsigned int nr_pages, |
struct page **pages); |
/* |
* Returns locked page at given index in given cache, creating it if needed. |
*/ |
static inline struct page *grab_cache_page(struct address_space *mapping, unsigned long index) |
{ |
return find_or_create_page(mapping, index, mapping_gfp_mask(mapping)); |
} |
extern struct page * grab_cache_page_nowait(struct address_space *mapping, |
unsigned long index); |
extern struct page * read_cache_page(struct address_space *mapping, |
unsigned long index, filler_t *filler, |
void *data); |
extern int read_cache_pages(struct address_space *mapping, |
struct list_head *pages, filler_t *filler, void *data); |
int add_to_page_cache(struct page *page, struct address_space *mapping, |
unsigned long index, int gfp_mask); |
int add_to_page_cache_lru(struct page *page, struct address_space *mapping, |
unsigned long index, int gfp_mask); |
extern void remove_from_page_cache(struct page *page); |
extern void __remove_from_page_cache(struct page *page); |
extern atomic_t nr_pagecache; |
#ifdef CONFIG_SMP |
#define PAGECACHE_ACCT_THRESHOLD max(16, NR_CPUS * 2) |
DECLARE_PER_CPU(long, nr_pagecache_local); |
/* |
* pagecache_acct implements approximate accounting for pagecache. |
* vm_enough_memory() do not need high accuracy. Writers will keep |
* an offset in their per-cpu arena and will spill that into the |
* global count whenever the absolute value of the local count |
* exceeds the counter's threshold. |
* |
* MUST be protected from preemption. |
* current protection is mapping->page_lock. |
*/ |
static inline void pagecache_acct(int count) |
{ |
long *local; |
local = &__get_cpu_var(nr_pagecache_local); |
*local += count; |
if (*local > PAGECACHE_ACCT_THRESHOLD || *local < -PAGECACHE_ACCT_THRESHOLD) { |
atomic_add(*local, &nr_pagecache); |
*local = 0; |
} |
} |
#else |
static inline void pagecache_acct(int count) |
{ |
atomic_add(count, &nr_pagecache); |
} |
#endif |
static inline unsigned long get_page_cache_size(void) |
{ |
return atomic_read(&nr_pagecache); |
} |
static inline void ___add_to_page_cache(struct page *page, |
struct address_space *mapping, unsigned long index) |
{ |
list_add(&page->list, &mapping->clean_pages); |
page->mapping = mapping; |
page->index = index; |
mapping->nrpages++; |
pagecache_acct(1); |
} |
extern void FASTCALL(__lock_page(struct page *page)); |
extern void FASTCALL(unlock_page(struct page *page)); |
static inline void lock_page(struct page *page) |
{ |
if (TestSetPageLocked(page)) |
__lock_page(page); |
} |
/* |
* This is exported only for wait_on_page_locked/wait_on_page_writeback. |
* Never use this directly! |
*/ |
extern void FASTCALL(wait_on_page_bit(struct page *page, int bit_nr)); |
/* |
* Wait for a page to be unlocked. |
* |
* This must be called with the caller "holding" the page, |
* ie with increased "page->count" so that the page won't |
* go away during the wait.. |
*/ |
static inline void wait_on_page_locked(struct page *page) |
{ |
if (PageLocked(page)) |
wait_on_page_bit(page, PG_locked); |
} |
/* |
* Wait for a page to complete writeback |
*/ |
static inline void wait_on_page_writeback(struct page *page) |
{ |
if (PageWriteback(page)) |
wait_on_page_bit(page, PG_writeback); |
} |
extern void end_page_writeback(struct page *page); |
/* |
* Fault a userspace page into pagetables. Return non-zero on a fault. |
* |
* This assumes that two userspace pages are always sufficient. That's |
* not true if PAGE_CACHE_SIZE > PAGE_SIZE. |
*/ |
static inline int fault_in_pages_writeable(char __user *uaddr, int size) |
{ |
int ret; |
/* |
* Writing zeroes into userspace here is OK, because we know that if |
* the zero gets there, we'll be overwriting it. |
*/ |
ret = __put_user(0, uaddr); |
if (ret == 0) { |
char __user *end = uaddr + size - 1; |
/* |
* If the page was already mapped, this will get a cache miss |
* for sure, so try to avoid doing it. |
*/ |
if (((unsigned long)uaddr & PAGE_MASK) != |
((unsigned long)end & PAGE_MASK)) |
ret = __put_user(0, end); |
} |
return ret; |
} |
static inline void fault_in_pages_readable(const char __user *uaddr, int size) |
{ |
volatile char c; |
int ret; |
ret = __get_user(c, (char *)uaddr); |
if (ret == 0) { |
const char __user *end = uaddr + size - 1; |
if (((unsigned long)uaddr & PAGE_MASK) != |
((unsigned long)end & PAGE_MASK)) |
__get_user(c, (char *)end); |
} |
} |
#endif /* _LINUX_PAGEMAP_H */ |
/shark/trunk/drivers/linuxc26/include/linux/ioport.h |
---|
0,0 → 1,122 |
/* |
* ioport.h Definitions of routines for detecting, reserving and |
* allocating system resources. |
* |
* Authors: Linus Torvalds |
*/ |
#ifndef _LINUX_IOPORT_H |
#define _LINUX_IOPORT_H |
#include <linux/compiler.h> |
/* |
* Resources are tree-like, allowing |
* nesting etc.. |
*/ |
struct resource { |
const char *name; |
unsigned long start, end; |
unsigned long flags; |
struct resource *parent, *sibling, *child; |
}; |
struct resource_list { |
struct resource_list *next; |
struct resource *res; |
struct pci_dev *dev; |
}; |
/* |
* IO resources have these defined flags. |
*/ |
#define IORESOURCE_BITS 0x000000ff /* Bus-specific bits */ |
#define IORESOURCE_IO 0x00000100 /* Resource type */ |
#define IORESOURCE_MEM 0x00000200 |
#define IORESOURCE_IRQ 0x00000400 |
#define IORESOURCE_DMA 0x00000800 |
#define IORESOURCE_PREFETCH 0x00001000 /* No side effects */ |
#define IORESOURCE_READONLY 0x00002000 |
#define IORESOURCE_CACHEABLE 0x00004000 |
#define IORESOURCE_RANGELENGTH 0x00008000 |
#define IORESOURCE_SHADOWABLE 0x00010000 |
#define IORESOURCE_BUS_HAS_VGA 0x00080000 |
#define IORESOURCE_DISABLED 0x10000000 |
#define IORESOURCE_UNSET 0x20000000 |
#define IORESOURCE_AUTO 0x40000000 |
#define IORESOURCE_BUSY 0x80000000 /* Driver has marked this resource busy */ |
/* ISA PnP IRQ specific bits (IORESOURCE_BITS) */ |
#define IORESOURCE_IRQ_HIGHEDGE (1<<0) |
#define IORESOURCE_IRQ_LOWEDGE (1<<1) |
#define IORESOURCE_IRQ_HIGHLEVEL (1<<2) |
#define IORESOURCE_IRQ_LOWLEVEL (1<<3) |
/* ISA PnP DMA specific bits (IORESOURCE_BITS) */ |
#define IORESOURCE_DMA_TYPE_MASK (3<<0) |
#define IORESOURCE_DMA_8BIT (0<<0) |
#define IORESOURCE_DMA_8AND16BIT (1<<0) |
#define IORESOURCE_DMA_16BIT (2<<0) |
#define IORESOURCE_DMA_MASTER (1<<2) |
#define IORESOURCE_DMA_BYTE (1<<3) |
#define IORESOURCE_DMA_WORD (1<<4) |
#define IORESOURCE_DMA_SPEED_MASK (3<<6) |
#define IORESOURCE_DMA_COMPATIBLE (0<<6) |
#define IORESOURCE_DMA_TYPEA (1<<6) |
#define IORESOURCE_DMA_TYPEB (2<<6) |
#define IORESOURCE_DMA_TYPEF (3<<6) |
/* ISA PnP memory I/O specific bits (IORESOURCE_BITS) */ |
#define IORESOURCE_MEM_WRITEABLE (1<<0) /* dup: IORESOURCE_READONLY */ |
#define IORESOURCE_MEM_CACHEABLE (1<<1) /* dup: IORESOURCE_CACHEABLE */ |
#define IORESOURCE_MEM_RANGELENGTH (1<<2) /* dup: IORESOURCE_RANGELENGTH */ |
#define IORESOURCE_MEM_TYPE_MASK (3<<3) |
#define IORESOURCE_MEM_8BIT (0<<3) |
#define IORESOURCE_MEM_16BIT (1<<3) |
#define IORESOURCE_MEM_8AND16BIT (2<<3) |
#define IORESOURCE_MEM_32BIT (3<<3) |
#define IORESOURCE_MEM_SHADOWABLE (1<<5) /* dup: IORESOURCE_SHADOWABLE */ |
#define IORESOURCE_MEM_EXPANSIONROM (1<<6) |
/* PC/ISA/whatever - the normal PC address spaces: IO and memory */ |
extern struct resource ioport_resource; |
extern struct resource iomem_resource; |
extern int get_resource_list(struct resource *, char *buf, int size); |
extern int request_resource(struct resource *root, struct resource *new); |
extern struct resource * ____request_resource(struct resource *root, struct resource *new); |
extern int release_resource(struct resource *new); |
extern int insert_resource(struct resource *parent, struct resource *new); |
extern int allocate_resource(struct resource *root, struct resource *new, |
unsigned long size, |
unsigned long min, unsigned long max, |
unsigned long align, |
void (*alignf)(void *, struct resource *, |
unsigned long, unsigned long), |
void *alignf_data); |
/* Convenience shorthand with allocation */ |
#define request_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name)) |
#define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name)) |
#define rename_region(region, newname) do { (region)->name = (newname); } while (0) |
extern struct resource * __request_region(struct resource *, unsigned long start, unsigned long n, const char *name); |
/* Compatibility cruft */ |
#define release_region(start,n) __release_region(&ioport_resource, (start), (n)) |
#define check_mem_region(start,n) __check_region(&iomem_resource, (start), (n)) |
#define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n)) |
extern int __check_region(struct resource *, unsigned long, unsigned long); |
extern void __release_region(struct resource *, unsigned long, unsigned long); |
static inline int __deprecated check_region(unsigned long s, unsigned long n) |
{ |
return __check_region(&ioport_resource, s, n); |
} |
#endif /* _LINUX_IOPORT_H */ |
/shark/trunk/drivers/linuxc26/include/linux/isdnif.h |
---|
0,0 → 1,533 |
/* $Id: isdnif.h,v 1.1 2004-01-28 15:25:45 giacomo 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 __ISDNIF_H__ |
#define __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 */ |
#ifdef __KERNEL__ |
#include <linux/config.h> |
#include <linux/skbuff.h> |
/***************************************************************************/ |
/* Extensions made by Werner Cornelius (werner@ikt.de) */ |
/* */ |
/* The proceed command holds a incoming call in a state to leave processes */ |
/* enough time to check whether ist should be accepted. */ |
/* The PROT_IO Command extends the interface to make protocol dependent */ |
/* features available (call diversion, call waiting...). */ |
/* */ |
/* The PROT_IO Command is executed with the desired driver id and the arg */ |
/* parameter coded as follows: */ |
/* The lower 8 bits of arg contain the desired protocol from ISDN_PTYPE */ |
/* definitions. The upper 24 bits represent the protocol specific cmd/stat.*/ |
/* Any additional data is protocol and command specific. */ |
/* This mechanism also applies to the statcallb callback STAT_PROT. */ |
/* */ |
/* This suggested extension permits an easy expansion of protocol specific */ |
/* handling. Extensions may be added at any time without changing the HL */ |
/* driver code and not getting conflicts without certifications. */ |
/* The well known CAPI 2.0 interface handles such extensions in a similar */ |
/* way. Perhaps a protocol specific module may be added and separately */ |
/* loaded and linked to the basic isdn module for handling. */ |
/***************************************************************************/ |
/*****************/ |
/* DSS1 commands */ |
/*****************/ |
#define DSS1_CMD_INVOKE ((0x00 << 8) | ISDN_PTYPE_EURO) /* invoke a supplementary service */ |
#define DSS1_CMD_INVOKE_ABORT ((0x01 << 8) | ISDN_PTYPE_EURO) /* abort a invoke cmd */ |
/*******************************/ |
/* DSS1 Status callback values */ |
/*******************************/ |
#define DSS1_STAT_INVOKE_RES ((0x80 << 8) | ISDN_PTYPE_EURO) /* Result for invocation */ |
#define DSS1_STAT_INVOKE_ERR ((0x81 << 8) | ISDN_PTYPE_EURO) /* Error Return for invocation */ |
#define DSS1_STAT_INVOKE_BRD ((0x82 << 8) | ISDN_PTYPE_EURO) /* Deliver invoke broadcast info */ |
/*********************************************************************/ |
/* structures for DSS1 commands and callback */ |
/* */ |
/* An action is invoked by sending a DSS1_CMD_INVOKE. The ll_id, proc*/ |
/* timeout, datalen and data fields must be set before calling. */ |
/* */ |
/* The return value is a positive hl_id value also delivered in the */ |
/* hl_id field. A value of zero signals no more left hl_id capacitys.*/ |
/* A negative return value signals errors in LL. So if the return */ |
/* value is <= 0 no action in LL will be taken -> request ignored */ |
/* */ |
/* The timeout field must be filled with a positive value specifying */ |
/* the amount of time the INVOKED process waits for a reaction from */ |
/* the network. */ |
/* If a response (either error or result) is received during this */ |
/* intervall, a reporting callback is initiated and the process will */ |
/* be deleted, the hl identifier will be freed. */ |
/* If no response is received during the specified intervall, a error*/ |
/* callback is initiated with timeout set to -1 and a datalen set */ |
/* to 0. */ |
/* If timeout is set to a value <= 0 during INVOCATION the process is*/ |
/* immediately deleted after sending the data. No callback occurs ! */ |
/* */ |
/* A currently waiting process may be aborted with INVOKE_ABORT. No */ |
/* callback will occur when a process has been aborted. */ |
/* */ |
/* Broadcast invoke frames from the network are reported via the */ |
/* STAT_INVOKE_BRD callback. The ll_id is set to 0, the other fields */ |
/* are supplied by the network and not by the HL. */ |
/*********************************************************************/ |
/*****************/ |
/* NI1 commands */ |
/*****************/ |
#define NI1_CMD_INVOKE ((0x00 << 8) | ISDN_PTYPE_NI1) /* invoke a supplementary service */ |
#define NI1_CMD_INVOKE_ABORT ((0x01 << 8) | ISDN_PTYPE_NI1) /* abort a invoke cmd */ |
/*******************************/ |
/* NI1 Status callback values */ |
/*******************************/ |
#define NI1_STAT_INVOKE_RES ((0x80 << 8) | ISDN_PTYPE_NI1) /* Result for invocation */ |
#define NI1_STAT_INVOKE_ERR ((0x81 << 8) | ISDN_PTYPE_NI1) /* Error Return for invocation */ |
#define NI1_STAT_INVOKE_BRD ((0x82 << 8) | ISDN_PTYPE_NI1) /* Deliver invoke broadcast info */ |
typedef struct |
{ ulong ll_id; /* ID supplied by LL when executing */ |
/* a command and returned by HL for */ |
/* INVOKE_RES and INVOKE_ERR */ |
int hl_id; /* ID supplied by HL when called */ |
/* for executing a cmd and delivered */ |
/* for results and errors */ |
/* must be supplied by LL when aborting*/ |
int proc; /* invoke procedure used by CMD_INVOKE */ |
/* returned by callback and broadcast */ |
int timeout; /* timeout for INVOKE CMD in ms */ |
/* -1 in stat callback when timed out */ |
/* error value when error callback */ |
int datalen; /* length of cmd or stat data */ |
u_char *data;/* pointer to data delivered or send */ |
} isdn_cmd_stat; |
/* |
* Commands from linklevel to lowlevel |
* |
*/ |
#define ISDN_CMD_IOCTL 0 /* Perform ioctl */ |
#define ISDN_CMD_DIAL 1 /* Dial out */ |
#define ISDN_CMD_ACCEPTD 2 /* Accept an incoming call on D-Chan. */ |
#define ISDN_CMD_ACCEPTB 3 /* Request B-Channel connect. */ |
#define ISDN_CMD_HANGUP 4 /* Hangup */ |
#define ISDN_CMD_CLREAZ 5 /* Clear EAZ(s) of channel */ |
#define ISDN_CMD_SETEAZ 6 /* Set EAZ(s) of channel */ |
#define ISDN_CMD_SETL2 10 /* Set B-Chan. Layer2-Parameter */ |
#define ISDN_CMD_SETL3 12 /* Set B-Chan. Layer3-Parameter */ |
#define ISDN_CMD_PROCEED 18 /* Proceed with call establishment */ |
#define ISDN_CMD_ALERT 19 /* Alert after Proceeding */ |
#define ISDN_CMD_REDIR 20 /* Redir a incoming call */ |
#define ISDN_CMD_PROT_IO 21 /* Protocol specific commands */ |
#define CAPI_PUT_MESSAGE 22 /* CAPI message send down or up */ |
#define ISDN_CMD_FAXCMD 23 /* FAX commands to HL-driver */ |
#define ISDN_CMD_AUDIO 24 /* DSP, DTMF, ... settings */ |
/* |
* Status-Values delivered from lowlevel to linklevel via |
* statcallb(). |
* |
*/ |
#define ISDN_STAT_STAVAIL 256 /* Raw status-data available */ |
#define ISDN_STAT_ICALL 257 /* Incoming call detected */ |
#define ISDN_STAT_RUN 258 /* Signal protocol-code is running */ |
#define ISDN_STAT_STOP 259 /* Signal halt of protocol-code */ |
#define ISDN_STAT_DCONN 260 /* Signal D-Channel connect */ |
#define ISDN_STAT_BCONN 261 /* Signal B-Channel connect */ |
#define ISDN_STAT_DHUP 262 /* Signal D-Channel disconnect */ |
#define ISDN_STAT_BHUP 263 /* Signal B-Channel disconnect */ |
#define ISDN_STAT_CINF 264 /* Charge-Info */ |
#define ISDN_STAT_LOAD 265 /* Signal new lowlevel-driver is loaded */ |
#define ISDN_STAT_UNLOAD 266 /* Signal unload of lowlevel-driver */ |
#define ISDN_STAT_BSENT 267 /* Signal packet sent */ |
#define ISDN_STAT_ADDCH 269 /* Add more Channels */ |
#define ISDN_STAT_CAUSE 270 /* Cause-Message */ |
#define ISDN_STAT_ICALLW 271 /* Incoming call without B-chan waiting */ |
#define ISDN_STAT_REDIR 272 /* Redir result */ |
#define ISDN_STAT_PROT 273 /* protocol IO specific callback */ |
#define ISDN_STAT_DISPLAY 274 /* deliver a received display message */ |
#define ISDN_STAT_FAXIND 276 /* FAX indications from HL-driver */ |
#define ISDN_STAT_AUDIO 277 /* DTMF, DSP indications */ |
#define ISDN_STAT_DISCH 278 /* Disable/Enable channel usage */ |
/* |
* Audio commands |
*/ |
#define ISDN_AUDIO_SETDD 0 /* Set DTMF detection */ |
#define ISDN_AUDIO_DTMF 1 /* Rx/Tx DTMF */ |
/* |
* Values for feature-field of interface-struct. |
*/ |
/* Layer 2 */ |
#define ISDN_FEATURE_L2_X75I (0x0001 << ISDN_PROTO_L2_X75I) |
#define ISDN_FEATURE_L2_X75UI (0x0001 << ISDN_PROTO_L2_X75UI) |
#define ISDN_FEATURE_L2_X75BUI (0x0001 << ISDN_PROTO_L2_X75BUI) |
#define ISDN_FEATURE_L2_HDLC (0x0001 << ISDN_PROTO_L2_HDLC) |
#define ISDN_FEATURE_L2_TRANS (0x0001 << ISDN_PROTO_L2_TRANS) |
#define ISDN_FEATURE_L2_X25DTE (0x0001 << ISDN_PROTO_L2_X25DTE) |
#define ISDN_FEATURE_L2_X25DCE (0x0001 << ISDN_PROTO_L2_X25DCE) |
#define ISDN_FEATURE_L2_V11096 (0x0001 << ISDN_PROTO_L2_V11096) |
#define ISDN_FEATURE_L2_V11019 (0x0001 << ISDN_PROTO_L2_V11019) |
#define ISDN_FEATURE_L2_V11038 (0x0001 << ISDN_PROTO_L2_V11038) |
#define ISDN_FEATURE_L2_MODEM (0x0001 << ISDN_PROTO_L2_MODEM) |
#define ISDN_FEATURE_L2_FAX (0x0001 << ISDN_PROTO_L2_FAX) |
#define ISDN_FEATURE_L2_HDLC_56K (0x0001 << ISDN_PROTO_L2_HDLC_56K) |
#define ISDN_FEATURE_L2_MASK (0x0FFFF) /* Max. 16 protocols */ |
#define ISDN_FEATURE_L2_SHIFT (0) |
/* Layer 3 */ |
#define ISDN_FEATURE_L3_TRANS (0x10000 << ISDN_PROTO_L3_TRANS) |
#define ISDN_FEATURE_L3_TRANSDSP (0x10000 << ISDN_PROTO_L3_TRANSDSP) |
#define ISDN_FEATURE_L3_FCLASS2 (0x10000 << ISDN_PROTO_L3_FCLASS2) |
#define ISDN_FEATURE_L3_FCLASS1 (0x10000 << ISDN_PROTO_L3_FCLASS1) |
#define ISDN_FEATURE_L3_MASK (0x0FF0000) /* Max. 8 Protocols */ |
#define ISDN_FEATURE_L3_SHIFT (16) |
/* Signaling */ |
#define ISDN_FEATURE_P_UNKNOWN (0x1000000 << ISDN_PTYPE_UNKNOWN) |
#define ISDN_FEATURE_P_1TR6 (0x1000000 << ISDN_PTYPE_1TR6) |
#define ISDN_FEATURE_P_EURO (0x1000000 << ISDN_PTYPE_EURO) |
#define ISDN_FEATURE_P_NI1 (0x1000000 << ISDN_PTYPE_NI1) |
#define ISDN_FEATURE_P_MASK (0x0FF000000) /* Max. 8 Protocols */ |
#define ISDN_FEATURE_P_SHIFT (24) |
typedef struct setup_parm { |
unsigned char phone[32]; /* Remote Phone-Number */ |
unsigned char eazmsn[32]; /* Local EAZ or MSN */ |
unsigned char si1; /* Service Indicator 1 */ |
unsigned char si2; /* Service Indicator 2 */ |
unsigned char plan; /* Numbering plan */ |
unsigned char screen; /* Screening info */ |
} setup_parm; |
/* T.30 Fax G3 */ |
#define FAXIDLEN 21 |
typedef struct T30_s { |
/* session parameters */ |
__u8 resolution __attribute__ ((packed)); |
__u8 rate __attribute__ ((packed)); |
__u8 width __attribute__ ((packed)); |
__u8 length __attribute__ ((packed)); |
__u8 compression __attribute__ ((packed)); |
__u8 ecm __attribute__ ((packed)); |
__u8 binary __attribute__ ((packed)); |
__u8 scantime __attribute__ ((packed)); |
__u8 id[FAXIDLEN] __attribute__ ((packed)); |
/* additional parameters */ |
__u8 phase __attribute__ ((packed)); |
__u8 direction __attribute__ ((packed)); |
__u8 code __attribute__ ((packed)); |
__u8 badlin __attribute__ ((packed)); |
__u8 badmul __attribute__ ((packed)); |
__u8 bor __attribute__ ((packed)); |
__u8 fet __attribute__ ((packed)); |
__u8 pollid[FAXIDLEN] __attribute__ ((packed)); |
__u8 cq __attribute__ ((packed)); |
__u8 cr __attribute__ ((packed)); |
__u8 ctcrty __attribute__ ((packed)); |
__u8 minsp __attribute__ ((packed)); |
__u8 phcto __attribute__ ((packed)); |
__u8 rel __attribute__ ((packed)); |
__u8 nbc __attribute__ ((packed)); |
/* remote station parameters */ |
__u8 r_resolution __attribute__ ((packed)); |
__u8 r_rate __attribute__ ((packed)); |
__u8 r_width __attribute__ ((packed)); |
__u8 r_length __attribute__ ((packed)); |
__u8 r_compression __attribute__ ((packed)); |
__u8 r_ecm __attribute__ ((packed)); |
__u8 r_binary __attribute__ ((packed)); |
__u8 r_scantime __attribute__ ((packed)); |
__u8 r_id[FAXIDLEN] __attribute__ ((packed)); |
__u8 r_code __attribute__ ((packed)); |
} T30_s; |
#define ISDN_TTY_FAX_CONN_IN 0 |
#define ISDN_TTY_FAX_CONN_OUT 1 |
#define ISDN_TTY_FAX_FCON 0 |
#define ISDN_TTY_FAX_DIS 1 |
#define ISDN_TTY_FAX_FTT 2 |
#define ISDN_TTY_FAX_MCF 3 |
#define ISDN_TTY_FAX_DCS 4 |
#define ISDN_TTY_FAX_TRAIN_OK 5 |
#define ISDN_TTY_FAX_EOP 6 |
#define ISDN_TTY_FAX_EOM 7 |
#define ISDN_TTY_FAX_MPS 8 |
#define ISDN_TTY_FAX_DTC 9 |
#define ISDN_TTY_FAX_RID 10 |
#define ISDN_TTY_FAX_HNG 11 |
#define ISDN_TTY_FAX_DT 12 |
#define ISDN_TTY_FAX_FCON_I 13 |
#define ISDN_TTY_FAX_DR 14 |
#define ISDN_TTY_FAX_ET 15 |
#define ISDN_TTY_FAX_CFR 16 |
#define ISDN_TTY_FAX_PTS 17 |
#define ISDN_TTY_FAX_SENT 18 |
#define ISDN_FAX_PHASE_IDLE 0 |
#define ISDN_FAX_PHASE_A 1 |
#define ISDN_FAX_PHASE_B 2 |
#define ISDN_FAX_PHASE_C 3 |
#define ISDN_FAX_PHASE_D 4 |
#define ISDN_FAX_PHASE_E 5 |
#define ISDN_FAX_CLASS1_FAE 0 |
#define ISDN_FAX_CLASS1_FTS 1 |
#define ISDN_FAX_CLASS1_FRS 2 |
#define ISDN_FAX_CLASS1_FTM 3 |
#define ISDN_FAX_CLASS1_FRM 4 |
#define ISDN_FAX_CLASS1_FTH 5 |
#define ISDN_FAX_CLASS1_FRH 6 |
#define ISDN_FAX_CLASS1_CTRL 7 |
#define ISDN_FAX_CLASS1_OK 0 |
#define ISDN_FAX_CLASS1_CONNECT 1 |
#define ISDN_FAX_CLASS1_NOCARR 2 |
#define ISDN_FAX_CLASS1_ERROR 3 |
#define ISDN_FAX_CLASS1_FCERROR 4 |
#define ISDN_FAX_CLASS1_QUERY 5 |
typedef struct { |
__u8 cmd; |
__u8 subcmd; |
__u8 para[50]; |
} aux_s; |
#define AT_COMMAND 0 |
#define AT_EQ_VALUE 1 |
#define AT_QUERY 2 |
#define AT_EQ_QUERY 3 |
/* CAPI structs */ |
/* this is compatible to the old union size */ |
#define MAX_CAPI_PARA_LEN 50 |
typedef struct { |
/* Header */ |
__u16 Length; |
__u16 ApplId; |
__u8 Command; |
__u8 Subcommand; |
__u16 Messagenumber; |
/* Parameter */ |
union { |
__u32 Controller; |
__u32 PLCI; |
__u32 NCCI; |
} adr; |
__u8 para[MAX_CAPI_PARA_LEN]; |
} capi_msg; |
/* |
* Structure for exchanging above infos |
* |
*/ |
typedef struct { |
int driver; /* Lowlevel-Driver-ID */ |
int command; /* Command or Status (see above) */ |
ulong arg; /* Additional Data */ |
union { |
ulong errcode; /* Type of error with STAT_L1ERR */ |
int length; /* Amount of bytes sent with STAT_BSENT */ |
u_char num[50]; /* Additional Data */ |
setup_parm setup;/* For SETUP msg */ |
capi_msg cmsg; /* For CAPI like messages */ |
char display[85];/* display message data */ |
isdn_cmd_stat isdn_io; /* ISDN IO-parameter/result */ |
aux_s aux; /* for modem commands/indications */ |
T30_s *fax; /* Pointer to ttys fax struct */ |
ulong userdata; /* User Data */ |
} parm; |
} isdn_ctrl; |
#define dss1_io isdn_io |
#define ni1_io isdn_io |
/* |
* The interface-struct itself (initialized at load-time of lowlevel-driver) |
* |
* See Documentation/isdn/INTERFACE for a description, how the communication |
* between the ISDN subsystem and its drivers is done. |
* |
*/ |
typedef struct { |
struct module *owner; |
/* Number of channels supported by this driver |
*/ |
int channels; |
/* |
* Maximum Size of transmit/receive-buffer this driver supports. |
*/ |
int maxbufsize; |
/* Feature-Flags for this driver. |
* See defines ISDN_FEATURE_... for Values |
*/ |
unsigned long features; |
/* |
* Needed for calculating |
* dev->hard_header_len = linklayer header + hl_hdrlen; |
* Drivers, not supporting sk_buff's should set this to 0. |
*/ |
unsigned short hl_hdrlen; |
/* |
* Receive-Callback using sk_buff's |
* Parameters: |
* int Driver-ID |
* int local channel-number (0 ...) |
* struct sk_buff *skb received Data |
*/ |
void (*rcvcallb_skb)(int, int, struct sk_buff *); |
/* Status-Callback |
* Parameters: |
* isdn_ctrl* |
* driver = Driver ID. |
* command = One of above ISDN_STAT_... constants. |
* arg = depending on status-type. |
* num = depending on status-type. |
*/ |
int (*statcallb)(isdn_ctrl*); |
/* Send command |
* Parameters: |
* isdn_ctrl* |
* driver = Driver ID. |
* command = One of above ISDN_CMD_... constants. |
* arg = depending on command. |
* num = depending on command. |
*/ |
int (*command)(isdn_ctrl*); |
/* |
* Send data using sk_buff's |
* Parameters: |
* int driverId |
* int local channel-number (0...) |
* int Flag: Need ACK for this packet. |
* struct sk_buff *skb Data to send |
*/ |
int (*writebuf_skb) (int, int, int, struct sk_buff *); |
/* Send raw D-Channel-Commands |
* Parameters: |
* u_char pointer data |
* int length of data |
* int Flag: 0 = Call form Kernel-Space (use memcpy, |
* no schedule allowed) |
* 1 = Data is in User-Space (use memcpy_fromfs, |
* may schedule) |
* int driverId |
* int local channel-number (0 ...) |
*/ |
int (*writecmd)(const u_char*, int, int, int, int); |
/* Read raw Status replies |
* u_char pointer data (volatile) |
* int length of buffer |
* int Flag: 0 = Call form Kernel-Space (use memcpy, |
* no schedule allowed) |
* 1 = Data is in User-Space (use memcpy_fromfs, |
* may schedule) |
* int driverId |
* int local channel-number (0 ...) |
*/ |
int (*readstat)(u_char*, int, int, int, int); |
char id[20]; |
} isdn_if; |
/* |
* Function which must be called by lowlevel-driver at loadtime with |
* the following fields of above struct set: |
* |
* channels Number of channels that will be supported. |
* hl_hdrlen Space to preserve in sk_buff's when sending. Drivers, not |
* supporting sk_buff's should set this to 0. |
* command Address of Command-Handler. |
* features Bitwise coded Features of this driver. (use ISDN_FEATURE_...) |
* writebuf_skb Address of Skbuff-Send-Handler. |
* writecmd " " D-Channel " which accepts raw D-Ch-Commands. |
* readstat " " D-Channel " which delivers raw Status-Data. |
* |
* The linklevel-driver fills the following fields: |
* |
* channels Driver-ID assigned to this driver. (Must be used on all |
* subsequent callbacks. |
* rcvcallb_skb Address of handler for received Skbuff's. |
* statcallb " " " for status-changes. |
* |
*/ |
extern int register_isdn(isdn_if*); |
#include <asm/uaccess.h> |
#endif /* __KERNEL__ */ |
#endif /* __ISDNIF_H__ */ |
/shark/trunk/drivers/linuxc26/include/linux/gfp.h |
---|
0,0 → 1,99 |
#ifndef __LINUX_GFP_H |
#define __LINUX_GFP_H |
#include <linux/mmzone.h> |
#include <linux/stddef.h> |
#include <linux/linkage.h> |
/* |
* GFP bitmasks.. |
*/ |
/* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low two bits) */ |
#define __GFP_DMA 0x01 |
#define __GFP_HIGHMEM 0x02 |
/* |
* Action modifiers - doesn't change the zoning |
* |
* __GFP_REPEAT: Try hard to allocate the memory, but the allocation attempt |
* _might_ fail. This depends upon the particular VM implementation. |
* |
* __GFP_NOFAIL: The VM implementation _must_ retry infinitely: the caller |
* cannot handle allocation failures. |
* |
* __GFP_NORETRY: The VM implementation must not retry indefinitely. |
*/ |
#define __GFP_WAIT 0x10 /* Can wait and reschedule? */ |
#define __GFP_HIGH 0x20 /* Should access emergency pools? */ |
#define __GFP_IO 0x40 /* Can start physical IO? */ |
#define __GFP_FS 0x80 /* Can call down to low-level FS? */ |
#define __GFP_COLD 0x100 /* Cache-cold page required */ |
#define __GFP_NOWARN 0x200 /* Suppress page allocation failure warning */ |
#define __GFP_REPEAT 0x400 /* Retry the allocation. Might fail */ |
#define __GFP_NOFAIL 0x800 /* Retry for ever. Cannot fail */ |
#define __GFP_NORETRY 0x1000 /* Do not retry. Might fail */ |
#define __GFP_NO_GROW 0x2000 /* Slab internal usage */ |
#define __GFP_BITS_SHIFT 16 /* Room for 16 __GFP_FOO bits */ |
#define __GFP_BITS_MASK ((1 << __GFP_BITS_SHIFT) - 1) |
#define GFP_ATOMIC (__GFP_HIGH) |
#define GFP_NOIO (__GFP_WAIT) |
#define GFP_NOFS (__GFP_WAIT | __GFP_IO) |
#define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS) |
#define GFP_USER (__GFP_WAIT | __GFP_IO | __GFP_FS) |
#define GFP_HIGHUSER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HIGHMEM) |
/* Flag - indicates that the buffer will be suitable for DMA. Ignored on some |
platforms, used as appropriate on others */ |
#define GFP_DMA __GFP_DMA |
/* |
* There is only one page-allocator function, and two main namespaces to |
* it. The alloc_page*() variants return 'struct page *' and as such |
* can allocate highmem pages, the *get*page*() variants return |
* virtual kernel addresses to the allocated page(s). |
*/ |
/* |
* We get the zone list from the current node and the gfp_mask. |
* This zone list contains a maximum of MAXNODES*MAX_NR_ZONES zones. |
* |
* For the normal case of non-DISCONTIGMEM systems the NODE_DATA() gets |
* optimized to &contig_page_data at compile-time. |
*/ |
extern struct page * FASTCALL(__alloc_pages(unsigned int, unsigned int, struct zonelist *)); |
static inline struct page * alloc_pages_node(int nid, unsigned int gfp_mask, unsigned int order) |
{ |
if (unlikely(order >= MAX_ORDER)) |
return NULL; |
return __alloc_pages(gfp_mask, order, NODE_DATA(nid)->node_zonelists + (gfp_mask & GFP_ZONEMASK)); |
} |
#define alloc_pages(gfp_mask, order) \ |
alloc_pages_node(numa_node_id(), gfp_mask, order) |
#define alloc_page(gfp_mask) \ |
alloc_pages_node(numa_node_id(), gfp_mask, 0) |
extern unsigned long FASTCALL(__get_free_pages(unsigned int gfp_mask, unsigned int order)); |
extern unsigned long FASTCALL(get_zeroed_page(unsigned int gfp_mask)); |
#define __get_free_page(gfp_mask) \ |
__get_free_pages((gfp_mask),0) |
#define __get_dma_pages(gfp_mask, order) \ |
__get_free_pages((gfp_mask) | GFP_DMA,(order)) |
extern void FASTCALL(__free_pages(struct page *page, unsigned int order)); |
extern void FASTCALL(free_pages(unsigned long addr, unsigned int order)); |
extern void FASTCALL(free_hot_page(struct page *page)); |
extern void FASTCALL(free_cold_page(struct page *page)); |
#define __free_page(page) __free_pages((page), 0) |
#define free_page(addr) free_pages((addr),0) |
void page_alloc_init(void); |
#endif /* __LINUX_GFP_H */ |
/shark/trunk/drivers/linuxc26/include/linux/ftape-vendors.h |
---|
0,0 → 1,137 |
#ifndef _FTAPE_VENDORS_H |
#define _FTAPE_VENDORS_H |
/* |
* Copyright (C) 1993-1996 Bas Laarhoven, |
* (C) 1996-1997 Claus-Justus Heine. |
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. |
You should have received a copy of the GNU General Public License |
along with this program; see the file COPYING. If not, write to |
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. |
* |
* $Source: /home/fabio/w/shark/sharkcvs/CVSROOT/shark/drivers/linuxc26/include/linux/ftape-vendors.h,v $ |
* $Revision: 1.1 $ |
* $Date: 2004-01-28 15:25:21 $ |
* |
* This file contains the supported drive types with their |
* QIC-117 spec. vendor code and drive dependent configuration |
* information. |
*/ |
typedef enum { |
unknown_wake_up = 0, |
no_wake_up, |
wake_up_colorado, |
wake_up_mountain, |
wake_up_insight, |
} wake_up_types; |
typedef struct { |
wake_up_types wake_up; /* see wake_up_types */ |
char *name; /* Text describing the drive */ |
} wakeup_method; |
/* Note: order of entries in WAKEUP_METHODS must be so that a variable |
* of type wake_up_types can be used as an index in the array. |
*/ |
#define WAKEUP_METHODS { \ |
{ unknown_wake_up, "Unknown" }, \ |
{ no_wake_up, "None" }, \ |
{ wake_up_colorado, "Colorado" }, \ |
{ wake_up_mountain, "Mountain" }, \ |
{ wake_up_insight, "Motor-on" }, \ |
} |
typedef struct { |
unsigned int vendor_id; /* vendor id from drive */ |
int speed; /* maximum tape transport speed (ips) */ |
wake_up_types wake_up; /* see wake_up_types */ |
char *name; /* Text describing the drive */ |
} vendor_struct; |
#define UNKNOWN_VENDOR (-1) |
#define QIC117_VENDORS { \ |
/* see _vendor_struct */ \ |
{ 0x00000, 82, wake_up_colorado, "Colorado DJ-10 (old)" }, \ |
{ 0x00047, 90, wake_up_colorado, "Colorado DJ-10/DJ-20" }, \ |
{ 0x011c2, 84, wake_up_colorado, "Colorado 700" }, \ |
{ 0x011c3, 90, wake_up_colorado, "Colorado 1400" }, \ |
{ 0x011c4, 84, wake_up_colorado, "Colorado DJ-10/DJ-20 (new)" }, \ |
{ 0x011c5, 84, wake_up_colorado, "HP Colorado T1000" }, \ |
{ 0x011c6, 90, wake_up_colorado, "HP Colorado T3000" }, \ |
{ 0x00005, 45, wake_up_mountain, "Archive 5580i" }, \ |
{ 0x10005, 50, wake_up_insight, "Insight 80Mb, Irwin 80SX" }, \ |
{ 0x00140, 74, wake_up_mountain, "Archive S.Hornet [Identity/Escom]" }, \ |
{ 0x00146, 72, wake_up_mountain, "Archive 31250Q [Escom]" }, \ |
{ 0x0014a, 100, wake_up_mountain, "Archive XL9250i [Conner/Escom]" }, \ |
{ 0x0014c, 98, wake_up_mountain, "Conner C250MQT" }, \ |
{ 0x0014e, 80, wake_up_mountain, "Conner C250MQ" }, \ |
{ 0x00150, 80, wake_up_mountain, "Conner TSM420R/TST800R" }, \ |
{ 0x00152, 80, wake_up_mountain, "Conner TSM850R" }, \ |
{ 0x00156, 80, wake_up_mountain, "Conner TSM850R/1700R/TST3200R" }, \ |
{ 0x00180, 0, wake_up_mountain, "Summit SE 150" }, \ |
{ 0x00181, 85, wake_up_mountain, "Summit SE 250, Mountain FS8000" }, \ |
{ 0x001c1, 82, no_wake_up, "Wangtek 3040F" }, \ |
{ 0x001c8, 64, no_wake_up, "Wangtek 3080F" }, \ |
{ 0x001c8, 64, wake_up_colorado, "Wangtek 3080F" }, \ |
{ 0x001ca, 67, no_wake_up, "Wangtek 3080F (new)" }, \ |
{ 0x001cc, 77, wake_up_colorado, "Wangtek 3200 / Teac 700" }, \ |
{ 0x001cd, 75, wake_up_colorado, "Reveal TB1400" }, \ |
{ 0x00380, 85, wake_up_colorado, "Exabyte Eagle-96" }, \ |
{ 0x00381, 85, wake_up_colorado, "Exabyte Eagle TR-3" }, \ |
{ 0x00382, 85, wake_up_colorado, "Exabyte Eagle TR-3" }, \ |
{ 0x003ce, 77, wake_up_colorado, "Teac 800" }, \ |
{ 0x003cf, 0, wake_up_colorado, "Teac FT3010TR" }, \ |
{ 0x08880, 64, no_wake_up, "Iomega 250, Ditto 800" }, \ |
{ 0x08880, 64, wake_up_colorado, "Iomega 250, Ditto 800" }, \ |
{ 0x08880, 64, wake_up_insight, "Iomega 250, Ditto 800" }, \ |
{ 0x08881, 80, wake_up_colorado, "Iomega 700" }, \ |
{ 0x08882, 80, wake_up_colorado, "Iomega 3200" }, \ |
{ 0x08883, 80, wake_up_colorado, "Iomega DITTO 2GB" }, \ |
{ 0x00021, 70, no_wake_up, "AIWA CT-803" }, \ |
{ 0x004c0, 80, no_wake_up, "AIWA TD-S1600" }, \ |
{ 0x00021, 0, wake_up_mountain, "COREtape QIC80" }, \ |
{ 0x00441, 0, wake_up_mountain, "ComByte DoublePlay" }, \ |
{ 0x00481, 127, wake_up_mountain, "PERTEC MyTape 800" }, \ |
{ 0x00483, 130, wake_up_mountain, "PERTEC MyTape 3200" }, \ |
{ UNKNOWN_VENDOR, 0, no_wake_up, "unknown" } \ |
} |
#define QIC117_MAKE_CODES { \ |
{ 0, "Unassigned" }, \ |
{ 1, "Alloy Computer Products" }, \ |
{ 2, "3M" }, \ |
{ 3, "Tandberg Data" }, \ |
{ 4, "Colorado" }, \ |
{ 5, "Archive/Conner" }, \ |
{ 6, "Mountain/Summit Memory Systems" }, \ |
{ 7, "Wangtek/Rexon/Tecmar" }, \ |
{ 8, "Sony" }, \ |
{ 9, "Cipher Data Products" }, \ |
{ 10, "Irwin Magnetic Systems" }, \ |
{ 11, "Braemar" }, \ |
{ 12, "Verbatim" }, \ |
{ 13, "Core International" }, \ |
{ 14, "Exabyte" }, \ |
{ 15, "Teac" }, \ |
{ 16, "Gigatek" }, \ |
{ 17, "ComByte" }, \ |
{ 18, "PERTEC Memories" }, \ |
{ 19, "Aiwa" }, \ |
{ 71, "Colorado" }, \ |
{ 546, "Iomega Inc" }, \ |
} |
#endif /* _FTAPE_VENDORS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/dqblk_xfs.h |
---|
0,0 → 1,150 |
/* |
* Copyright (c) 1995-2001 Silicon Graphics, Inc. All Rights Reserved. |
* |
* 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. |
* |
* Further, this software is distributed without any warranty that it is |
* free of the rightful claim of any third person regarding infringement |
* or the like. Any license provided herein, whether implied or |
* otherwise, applies only to this software file. Patent licenses, if |
* any, provided herein do not apply to combinations of this program with |
* other software, or any other product whatsoever. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this program; if not, write the Free Software |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, |
* USA. |
* |
* Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, |
* Mountain View, CA 94043, or: |
* |
* http://www.sgi.com |
* |
* For further information regarding this notice, see: |
* |
* http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ |
*/ |
#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 Q_XQUOTAON XQM_CMD(0x1) /* enable accounting/enforcement */ |
#define Q_XQUOTAOFF XQM_CMD(0x2) /* disable accounting/enforcement */ |
#define Q_XGETQUOTA XQM_CMD(0x3) /* get disk limits and usage */ |
#define Q_XSETQLIM XQM_CMD(0x4) /* set disk limits */ |
#define Q_XGETQSTAT XQM_CMD(0x5) /* get quota subsystem status */ |
#define Q_XQUOTARM XQM_CMD(0x6) /* free disk space used by 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; /* XFS_{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) |
/* |
* Various flags related to quotactl(2). Only relevant to XFS filesystems. |
*/ |
#define XFS_QUOTA_UDQ_ACCT (1<<0) /* user quota accounting */ |
#define XFS_QUOTA_UDQ_ENFD (1<<1) /* user quota limits enforcement */ |
#define XFS_QUOTA_GDQ_ACCT (1<<2) /* group quota accounting */ |
#define XFS_QUOTA_GDQ_ENFD (1<<3) /* group quota limits enforcement */ |
#define XFS_USER_QUOTA (1<<0) /* user quota type */ |
#define XFS_PROJ_QUOTA (1<<1) /* (IRIX) project quota type */ |
#define XFS_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 infomation 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 infomation 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; /* XFS_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 */ |
/shark/trunk/drivers/linuxc26/include/linux/netfilter_decnet.h |
---|
0,0 → 1,59 |
#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> |
/* 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 |
/* 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))) |
#define DNRMG_L1_GROUP 0x01 |
#define DNRMG_L2_GROUP 0x02 |
#endif /*__LINUX_DECNET_NETFILTER_H*/ |
/shark/trunk/drivers/linuxc26/include/linux/upd4990a.h |
---|
0,0 → 1,140 |
/* |
* Constant and architecture independent procedures |
* for NEC uPD4990A serial I/O real-time clock. |
* |
* Copyright 2001 TAKAI Kousuke <tak@kmc.kyoto-u.ac.jp> |
* Kyoto University Microcomputer Club (KMC). |
* |
* References: |
* uPD4990A serial I/O real-time clock users' manual (Japanese) |
* No. S12828JJ4V0UM00 (4th revision), NEC Corporation, 1999. |
*/ |
#ifndef _LINUX_uPD4990A_H |
#define _LINUX_uPD4990A_H |
#include <asm/byteorder.h> |
#include <asm/upd4990a.h> |
/* Serial commands (4 bits) */ |
#define UPD4990A_REGISTER_HOLD (0x0) |
#define UPD4990A_REGISTER_SHIFT (0x1) |
#define UPD4990A_TIME_SET_AND_COUNTER_HOLD (0x2) |
#define UPD4990A_TIME_READ (0x3) |
#define UPD4990A_TP_64HZ (0x4) |
#define UPD4990A_TP_256HZ (0x5) |
#define UPD4990A_TP_2048HZ (0x6) |
#define UPD4990A_TP_4096HZ (0x7) |
#define UPD4990A_TP_1S (0x8) |
#define UPD4990A_TP_10S (0x9) |
#define UPD4990A_TP_30S (0xA) |
#define UPD4990A_TP_60S (0xB) |
#define UPD4990A_INTERRUPT_RESET (0xC) |
#define UPD4990A_INTERRUPT_TIMER_START (0xD) |
#define UPD4990A_INTERRUPT_TIMER_STOP (0xE) |
#define UPD4990A_TEST_MODE_SET (0xF) |
/* Parallel commands (3 bits) |
0-6 are same with serial commands. */ |
#define UPD4990A_PAR_SERIAL_MODE 7 |
#ifndef UPD4990A_DELAY |
# include <linux/delay.h> |
# define UPD4990A_DELAY(usec) udelay((usec)) |
#endif |
#ifndef UPD4990A_OUTPUT_DATA |
# define UPD4990A_OUTPUT_DATA(bit) \ |
do { \ |
UPD4990A_OUTPUT_DATA_CLK((bit), 0); \ |
UPD4990A_DELAY(1); /* t-DSU */ \ |
UPD4990A_OUTPUT_DATA_CLK((bit), 1); \ |
UPD4990A_DELAY(1); /* t-DHLD */ \ |
} while (0) |
#endif |
static __inline__ void upd4990a_serial_command(int command) |
{ |
UPD4990A_OUTPUT_DATA(command >> 0); |
UPD4990A_OUTPUT_DATA(command >> 1); |
UPD4990A_OUTPUT_DATA(command >> 2); |
UPD4990A_OUTPUT_DATA(command >> 3); |
UPD4990A_DELAY(1); /* t-HLD */ |
UPD4990A_OUTPUT_STROBE(1); |
UPD4990A_DELAY(1); /* t-STB & t-d1 */ |
UPD4990A_OUTPUT_STROBE(0); |
/* 19 microseconds extra delay is needed |
iff previous mode is TIME READ command */ |
} |
struct upd4990a_raw_data { |
u8 sec; /* BCD */ |
u8 min; /* BCD */ |
u8 hour; /* BCD */ |
u8 mday; /* BCD */ |
#if defined __LITTLE_ENDIAN_BITFIELD |
unsigned wday :4; /* 0-6 */ |
unsigned mon :4; /* 1-based */ |
#elif defined __BIG_ENDIAN_BITFIELD |
unsigned mon :4; /* 1-based */ |
unsigned wday :4; /* 0-6 */ |
#else |
# error Unknown bitfield endian! |
#endif |
u8 year; /* BCD */ |
}; |
static __inline__ void upd4990a_get_time(struct upd4990a_raw_data *buf, |
int leave_register_hold) |
{ |
int byte; |
upd4990a_serial_command(UPD4990A_TIME_READ); |
upd4990a_serial_command(UPD4990A_REGISTER_SHIFT); |
UPD4990A_DELAY(19); /* t-d2 - t-d1 */ |
for (byte = 0; byte < 6; byte++) { |
u8 tmp; |
int bit; |
for (tmp = 0, bit = 0; bit < 8; bit++) { |
tmp = (tmp | (UPD4990A_READ_DATA() << 8)) >> 1; |
UPD4990A_OUTPUT_CLK(1); |
UPD4990A_DELAY(1); |
UPD4990A_OUTPUT_CLK(0); |
UPD4990A_DELAY(1); |
} |
((u8 *) buf)[byte] = tmp; |
} |
/* The uPD4990A users' manual says that we should issue `Register |
Hold' command after each data retrieval, or next `Time Read' |
command may not work correctly. */ |
if (!leave_register_hold) |
upd4990a_serial_command(UPD4990A_REGISTER_HOLD); |
} |
static __inline__ void upd4990a_set_time(const struct upd4990a_raw_data *data, |
int time_set_only) |
{ |
int byte; |
if (!time_set_only) |
upd4990a_serial_command(UPD4990A_REGISTER_SHIFT); |
for (byte = 0; byte < 6; byte++) { |
int bit; |
u8 tmp = ((const u8 *) data)[byte]; |
for (bit = 0; bit < 8; bit++, tmp >>= 1) |
UPD4990A_OUTPUT_DATA(tmp); |
} |
upd4990a_serial_command(UPD4990A_TIME_SET_AND_COUNTER_HOLD); |
/* Release counter hold and start the clock. */ |
if (!time_set_only) |
upd4990a_serial_command(UPD4990A_REGISTER_HOLD); |
} |
#endif /* _LINUX_uPD4990A_H */ |
/shark/trunk/drivers/linuxc26/include/linux/kernel.h |
---|
0,0 → 1,237 |
#ifndef _LINUX_KERNEL_H |
#define _LINUX_KERNEL_H |
/* |
* 'kernel.h' contains some often-used function prototypes etc |
*/ |
#ifdef __KERNEL__ |
#include <linuxcomp.h> |
#include <linux/linkage.h> |
#include <linux/stddef.h> |
#include <linux/types.h> |
#include <linux/compiler.h> |
#include <asm/byteorder.h> |
#include <asm/bug.h> |
#define INT_MAX ((int)(~0U>>1)) |
#define INT_MIN (-INT_MAX - 1) |
#define UINT_MAX (~0U) |
#define LONG_MAX ((long)(~0UL>>1)) |
#define LONG_MIN (-LONG_MAX - 1) |
#define ULONG_MAX (~0UL) |
#define STACK_MAGIC 0xdeadbeef |
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) |
#define ALIGN(x,a) (((x)+(a)-1)&~((a)-1)) |
#define KERN_EMERG "<0>" /* system is unusable */ |
#define KERN_ALERT "<1>" /* action must be taken immediately */ |
#define KERN_CRIT "<2>" /* critical conditions */ |
#define KERN_ERR "<3>" /* error conditions */ |
#define KERN_WARNING "<4>" /* warning conditions */ |
#define KERN_NOTICE "<5>" /* normal but significant condition */ |
#define KERN_INFO "<6>" /* informational */ |
#define KERN_DEBUG "<7>" /* debug-level messages */ |
extern int console_printk[]; |
#define console_loglevel (console_printk[0]) |
#define default_message_loglevel (console_printk[1]) |
#define minimum_console_loglevel (console_printk[2]) |
#define default_console_loglevel (console_printk[3]) |
struct completion; |
#ifdef CONFIG_DEBUG_SPINLOCK_SLEEP |
void __might_sleep(char *file, int line); |
#define might_sleep() __might_sleep(__FILE__, __LINE__) |
#define might_sleep_if(cond) do { if (unlikely(cond)) might_sleep(); } while (0) |
#else |
#define might_sleep() do {} while(0) |
#define might_sleep_if(cond) do {} while (0) |
#endif |
extern struct notifier_block *panic_notifier_list; |
NORET_TYPE void panic(const char * fmt, ...) |
__attribute__ ((NORET_AND format (printf, 1, 2))); |
asmlinkage NORET_TYPE void do_exit(long error_code) |
ATTRIB_NORET; |
NORET_TYPE void complete_and_exit(struct completion *, long) |
ATTRIB_NORET; |
extern int abs(int); |
extern unsigned long simple_strtoul(const char *,char **,unsigned int); |
extern long simple_strtol(const char *,char **,unsigned int); |
extern unsigned long long simple_strtoull(const char *,char **,unsigned int); |
extern long long simple_strtoll(const char *,char **,unsigned int); |
extern int sprintf(char * buf, const char * fmt, ...) |
__attribute__ ((format (printf, 2, 3))); |
extern int vsprintf(char *buf, const char *, va_list); |
extern int snprintf(char * buf, size_t size, const char * fmt, ...) |
__attribute__ ((format (printf, 3, 4))); |
extern int vsnprintf(char *buf, size_t size, const char *fmt, va_list args); |
extern int sscanf(const char *, const char *, ...) |
__attribute__ ((format (scanf,2,3))); |
extern int vsscanf(const char *, const char *, va_list); |
extern int get_option(char **str, int *pint); |
extern char *get_options(const char *str, int nints, int *ints); |
extern unsigned long long memparse(char *ptr, char **retptr); |
extern int kernel_text_address(unsigned long addr); |
extern int session_of_pgrp(int pgrp); |
asmlinkage int printk(const char * fmt, ...) |
__attribute__ ((format (printf, 1, 2))); |
static inline void console_silent(void) |
{ |
console_loglevel = 0; |
} |
static inline void console_verbose(void) |
{ |
if (console_loglevel) |
console_loglevel = 15; |
} |
extern void bust_spinlocks(int yes); |
extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */ |
extern int panic_on_oops; |
extern int system_running; |
extern int tainted; |
extern const char *print_tainted(void); |
#define TAINT_PROPRIETARY_MODULE (1<<0) |
#define TAINT_FORCED_MODULE (1<<1) |
#define TAINT_UNSAFE_SMP (1<<2) |
#define TAINT_FORCED_RMMOD (1<<3) |
extern void dump_stack(void); |
#ifdef DEBUG |
#define pr_debug(fmt,arg...) \ |
printk(KERN_DEBUG fmt,##arg) |
#else |
#define pr_debug(fmt,arg...) \ |
do { } while (0) |
#endif |
#define pr_info(fmt,arg...) \ |
printk(KERN_INFO fmt,##arg) |
/* |
* Display an IP address in readable format. |
*/ |
#define NIPQUAD(addr) \ |
((unsigned char *)&addr)[0], \ |
((unsigned char *)&addr)[1], \ |
((unsigned char *)&addr)[2], \ |
((unsigned char *)&addr)[3] |
#define NIP6(addr) \ |
ntohs((addr).s6_addr16[0]), \ |
ntohs((addr).s6_addr16[1]), \ |
ntohs((addr).s6_addr16[2]), \ |
ntohs((addr).s6_addr16[3]), \ |
ntohs((addr).s6_addr16[4]), \ |
ntohs((addr).s6_addr16[5]), \ |
ntohs((addr).s6_addr16[6]), \ |
ntohs((addr).s6_addr16[7]) |
#if defined(__LITTLE_ENDIAN) |
#define HIPQUAD(addr) \ |
((unsigned char *)&addr)[3], \ |
((unsigned char *)&addr)[2], \ |
((unsigned char *)&addr)[1], \ |
((unsigned char *)&addr)[0] |
#elif defined(__BIG_ENDIAN) |
#define HIPQUAD NIPQUAD |
#else |
#error "Please fix asm/byteorder.h" |
#endif /* __LITTLE_ENDIAN */ |
/* |
* min()/max() macros that also do |
* strict type-checking.. See the |
* "unnecessary" pointer comparison. |
*/ |
#define min(x,y) ({ \ |
const typeof(x) _x = (x); \ |
const typeof(y) _y = (y); \ |
(void) (&_x == &_y); \ |
_x < _y ? _x : _y; }) |
#define max(x,y) ({ \ |
const typeof(x) _x = (x); \ |
const typeof(y) _y = (y); \ |
(void) (&_x == &_y); \ |
_x > _y ? _x : _y; }) |
/* |
* ..and if you can't take the strict |
* types, you can specify one yourself. |
* |
* Or not use min/max at all, of course. |
*/ |
#define min_t(type,x,y) \ |
({ type __x = (x); type __y = (y); __x < __y ? __x: __y; }) |
#define max_t(type,x,y) \ |
({ type __x = (x); type __y = (y); __x > __y ? __x: __y; }) |
/** |
* container_of - cast a member of a structure out to the containing structure |
* |
* @ptr: the pointer to the member. |
* @type: the type of the container struct this is embedded in. |
* @member: the name of the member within the struct. |
* |
*/ |
#define container_of(ptr, type, member) ({ \ |
const typeof( ((type *)0)->member ) *__mptr = (ptr); \ |
(type *)( (char *)__mptr - offsetof(type,member) );}) |
/* |
* Check at compile time that something is of a particular type. |
* Always evaluates to 1 so you may use it easily in comparisons. |
*/ |
#define typecheck(type,x) \ |
({ type __dummy; \ |
typeof(x) __dummy2; \ |
(void)(&__dummy == &__dummy2); \ |
1; \ |
}) |
#endif /* __KERNEL__ */ |
#define SI_LOAD_SHIFT 16 |
struct sysinfo { |
long uptime; /* Seconds since boot */ |
unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ |
unsigned long totalram; /* Total usable main memory size */ |
unsigned long freeram; /* Available memory size */ |
unsigned long sharedram; /* Amount of shared memory */ |
unsigned long bufferram; /* Memory used by buffers */ |
unsigned long totalswap; /* Total swap space size */ |
unsigned long freeswap; /* swap space still available */ |
unsigned short procs; /* Number of current processes */ |
unsigned short pad; /* explicit padding for m68k */ |
unsigned long totalhigh; /* Total high memory size */ |
unsigned long freehigh; /* Available high memory size */ |
unsigned int mem_unit; /* Memory unit size in bytes */ |
char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */ |
}; |
extern void BUILD_BUG(void); |
#define BUILD_BUG_ON(condition) do { if (condition) BUILD_BUG(); } while(0) |
/* Trap pasters of __FUNCTION__ at compile-time */ |
#if __GNUC__ > 2 || __GNUC_MINOR__ >= 95 |
#define __FUNCTION__ (__func__) |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/if_wanpipe.h |
---|
0,0 → 1,124 |
/***************************************************************************** |
* if_wanpipe.h Header file for the Sangoma AF_WANPIPE Socket |
* |
* Author: Nenad Corbic |
* |
* Copyright: (c) 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. |
* ============================================================================ |
* |
* Jan 28, 2000 Nenad Corbic Initial Version |
* |
*****************************************************************************/ |
#ifndef __LINUX_IF_WAN_PACKET_H |
#define __LINUX_IF_WAN_PACKET_H |
struct wan_sockaddr_ll |
{ |
unsigned short sll_family; |
unsigned short sll_protocol; |
int sll_ifindex; |
unsigned short sll_hatype; |
unsigned char sll_pkttype; |
unsigned char sll_halen; |
unsigned char sll_addr[8]; |
unsigned char sll_device[14]; |
unsigned char sll_card[14]; |
}; |
typedef struct |
{ |
unsigned char free; |
unsigned char state_sk; |
int rcvbuf; |
int sndbuf; |
int rmem; |
int wmem; |
int sk_count; |
unsigned char bound; |
char name[14]; |
unsigned char d_state; |
unsigned char svc; |
unsigned short lcn; |
unsigned char mbox; |
unsigned char cmd_busy; |
unsigned char command; |
unsigned poll; |
unsigned poll_cnt; |
int rblock; |
} wan_debug_hdr_t; |
#define MAX_NUM_DEBUG 10 |
#define X25_PROT 0x16 |
#define PVC_PROT 0x17 |
typedef struct |
{ |
wan_debug_hdr_t debug[MAX_NUM_DEBUG]; |
}wan_debug_t; |
#define SIOC_WANPIPE_GET_CALL_DATA (SIOCPROTOPRIVATE + 0) |
#define SIOC_WANPIPE_SET_CALL_DATA (SIOCPROTOPRIVATE + 1) |
#define SIOC_WANPIPE_ACCEPT_CALL (SIOCPROTOPRIVATE + 2) |
#define SIOC_WANPIPE_CLEAR_CALL (SIOCPROTOPRIVATE + 3) |
#define SIOC_WANPIPE_RESET_CALL (SIOCPROTOPRIVATE + 4) |
#define SIOC_WANPIPE_DEBUG (SIOCPROTOPRIVATE + 5) |
#define SIOC_WANPIPE_SET_NONBLOCK (SIOCPROTOPRIVATE + 6) |
#define SIOC_WANPIPE_CHECK_TX (SIOCPROTOPRIVATE + 7) |
#define SIOC_WANPIPE_SOCK_STATE (SIOCPROTOPRIVATE + 8) |
/* Packet types */ |
#define WAN_PACKET_HOST 0 /* To us */ |
#define WAN_PACKET_BROADCAST 1 /* To all */ |
#define WAN_PACKET_MULTICAST 2 /* To group */ |
#define WAN_PACKET_OTHERHOST 3 /* To someone else */ |
#define WAN_PACKET_OUTGOING 4 /* Outgoing of any type */ |
/* These ones are invisible by user level */ |
#define WAN_PACKET_LOOPBACK 5 /* MC/BRD frame looped back */ |
#define WAN_PACKET_FASTROUTE 6 /* Fastrouted frame */ |
/* X25 specific */ |
#define WAN_PACKET_DATA 7 |
#define WAN_PACKET_CMD 8 |
#define WAN_PACKET_ASYNC 9 |
#define WAN_PACKET_ERR 10 |
/* Packet socket options */ |
#define WAN_PACKET_ADD_MEMBERSHIP 1 |
#define WAN_PACKET_DROP_MEMBERSHIP 2 |
#define WAN_PACKET_MR_MULTICAST 0 |
#define WAN_PACKET_MR_PROMISC 1 |
#define WAN_PACKET_MR_ALLMULTI 2 |
#ifdef __KERNEL__ |
/* Private wanpipe socket structures. */ |
struct wanpipe_opt |
{ |
void *mbox; /* Mail box */ |
void *card; /* Card bouded to */ |
struct net_device *dev; /* Bounded device */ |
unsigned short lcn; /* Binded LCN */ |
unsigned char svc; /* 0=pvc, 1=svc */ |
unsigned char timer; /* flag for delayed transmit*/ |
struct timer_list tx_timer; |
unsigned poll_cnt; |
unsigned char force; /* Used to force sock release */ |
atomic_t packet_sent; |
unsigned short num; |
}; |
#define wp_sk(__sk) ((struct wanpipe_opt *)(__sk)->sk_protinfo) |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/nvram.h |
---|
0,0 → 1,27 |
#ifndef _LINUX_NVRAM_H |
#define _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) |
#ifdef __KERNEL__ |
/* __foo is foo without grabbing the rtc_lock - get it yourself */ |
extern unsigned char __nvram_read_byte(int i); |
extern unsigned char nvram_read_byte(int i); |
extern void __nvram_write_byte(unsigned char c, int i); |
extern void nvram_write_byte(unsigned char c, int i); |
extern int __nvram_check_checksum(void); |
extern int nvram_check_checksum(void); |
extern void __nvram_set_checksum(void); |
extern void nvram_set_checksum(void); |
#endif |
#endif /* _LINUX_NVRAM_H */ |
/shark/trunk/drivers/linuxc26/include/linux/compiler-gcc3.h |
---|
0,0 → 1,22 |
/* Never include this file directly. Include <linux/compiler.h> instead. */ |
/* These definitions are for GCC v3.x. */ |
#include <linux/compiler-gcc.h> |
#if __GNUC_MINOR__ >= 1 |
# define inline __inline__ __attribute__((always_inline)) |
# define __inline__ __inline__ __attribute__((always_inline)) |
# define __inline __inline__ __attribute__((always_inline)) |
#endif |
#if __GNUC_MINOR__ > 0 |
# define __deprecated __attribute__((deprecated)) |
#endif |
#if __GNUC_MINOR__ >= 3 |
# define __attribute_used__ __attribute__((__used__)) |
#else |
# define __attribute_used__ __attribute__((__unused__)) |
#endif |
#define __attribute_pure__ __attribute__((pure)) |
/shark/trunk/drivers/linuxc26/include/linux/err.h |
---|
0,0 → 1,29 |
#ifndef _LINUX_ERR_H |
#define _LINUX_ERR_H |
#include <asm/errno.h> |
/* |
* Kernel pointers have redundant information, so we can use a |
* scheme where we can return either an error code or a dentry |
* pointer with the same return value. |
* |
* This should be a per-architecture thing, to allow different |
* error and pointer decisions. |
*/ |
static inline void *ERR_PTR(long error) |
{ |
return (void *) error; |
} |
static inline long PTR_ERR(const void *ptr) |
{ |
return (long) ptr; |
} |
static inline long IS_ERR(const void *ptr) |
{ |
return (unsigned long)ptr > (unsigned long)-1000L; |
} |
#endif /* _LINUX_ERR_H */ |
/shark/trunk/drivers/linuxc26/include/linux/udf_fs_sb.h |
---|
0,0 → 1,118 |
/* |
* udf_fs_sb.h |
* |
* This include file is for the Linux kernel/module. |
* |
* CONTACTS |
* E-mail regarding any portion of the Linux UDF file system should be |
* directed to the development team mailing list (run by majordomo): |
* linux_udf@hpesjro.fc.hp.com |
* |
* 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_SB_H |
#define _UDF_FS_SB_H 1 |
#pragma pack(1) |
#define UDF_MAX_BLOCK_LOADED 8 |
#define UDF_TYPE1_MAP15 0x1511U |
#define UDF_VIRTUAL_MAP15 0x1512U |
#define UDF_VIRTUAL_MAP20 0x2012U |
#define UDF_SPARABLE_MAP15 0x1522U |
struct udf_sparing_data |
{ |
__u16 s_packet_len; |
struct buffer_head *s_spar_map[4]; |
}; |
struct udf_virtual_data |
{ |
__u32 s_num_entries; |
__u16 s_start_offset; |
}; |
struct udf_bitmap |
{ |
__u32 s_extLength; |
__u32 s_extPosition; |
__u16 s_nr_groups; |
struct buffer_head **s_block_bitmap; |
}; |
struct udf_part_map |
{ |
union |
{ |
struct udf_bitmap *s_bitmap; |
struct inode *s_table; |
} s_uspace; |
union |
{ |
struct udf_bitmap *s_bitmap; |
struct inode *s_table; |
} s_fspace; |
__u32 s_partition_root; |
__u32 s_partition_len; |
__u16 s_partition_type; |
__u16 s_partition_num; |
union |
{ |
struct udf_sparing_data s_sparing; |
struct udf_virtual_data s_virtual; |
} s_type_specific; |
__u32 (*s_partition_func)(struct super_block *, __u32, __u16, __u32); |
__u16 s_volumeseqnum; |
__u16 s_partition_flags; |
}; |
#pragma pack() |
struct udf_sb_info |
{ |
struct udf_part_map *s_partmaps; |
__u8 s_volident[32]; |
/* Overall info */ |
__u16 s_partitions; |
__u16 s_partition; |
/* Sector headers */ |
__s32 s_session; |
__u32 s_anchor[4]; |
__u32 s_lastblock; |
struct buffer_head *s_lvidbh; |
/* Default permissions */ |
mode_t s_umask; |
gid_t s_gid; |
uid_t s_uid; |
/* Root Info */ |
struct timespec s_recordtime; |
/* Fileset Info */ |
__u16 s_serialnum; |
/* highest UDF revision we have recorded to this media */ |
__u16 s_udfrev; |
/* Miscellaneous flags */ |
__u32 s_flags; |
/* Encoding info */ |
struct nls_table *s_nls_map; |
/* VAT inode */ |
struct inode *s_vat; |
}; |
#endif /* _UDF_FS_SB_H */ |
/shark/trunk/drivers/linuxc26/include/linux/atalk.h |
---|
0,0 → 1,216 |
#ifndef __LINUX_ATALK_H__ |
#define __LINUX_ATALK_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 { |
__u16 s_net; |
__u8 s_node; |
}; |
struct sockaddr_at { |
sa_family_t sat_family; |
__u8 sat_port; |
struct atalk_addr sat_addr; |
char sat_zero[8]; |
}; |
struct atalk_netrange { |
__u8 nr_phase; |
__u16 nr_firstnet; |
__u16 nr_lastnet; |
}; |
struct atalk_route { |
struct net_device *dev; |
struct atalk_addr target; |
struct atalk_addr gateway; |
int flags; |
struct atalk_route *next; |
}; |
/** |
* struct atalk_iface - AppleTalk Interface |
* @dev - Network device associated with this interface |
* @address - Our address |
* @status - What are we doing? |
* @nets - Associated direct netrange |
* @next - next element in the list of interfaces |
*/ |
struct atalk_iface { |
struct net_device *dev; |
struct atalk_addr address; |
int status; |
#define ATIF_PROBE 1 /* Probing for an address */ |
#define ATIF_PROBE_FAIL 2 /* Probe collided */ |
struct atalk_netrange nets; |
struct atalk_iface *next; |
}; |
struct atalk_sock { |
unsigned short dest_net; |
unsigned short src_net; |
unsigned char dest_node; |
unsigned char src_node; |
unsigned char dest_port; |
unsigned char src_port; |
}; |
#ifdef __KERNEL__ |
#include <asm/byteorder.h> |
struct ddpehdr { |
#ifdef __LITTLE_ENDIAN_BITFIELD |
__u16 deh_len:10, |
deh_hops:4, |
deh_pad:2; |
#else |
__u16 deh_pad:2, |
deh_hops:4, |
deh_len:10; |
#endif |
__u16 deh_sum; |
__u16 deh_dnet; |
__u16 deh_snet; |
__u8 deh_dnode; |
__u8 deh_snode; |
__u8 deh_dport; |
__u8 deh_sport; |
/* And netatalk apps expect to stick the type in themselves */ |
}; |
static __inline__ struct ddpehdr *ddp_hdr(struct sk_buff *skb) |
{ |
return (struct ddpehdr *)skb->h.raw; |
} |
/* |
* Don't drop the struct into the struct above. You'll get some |
* surprise padding. |
*/ |
struct ddpebits { |
#ifdef __LITTLE_ENDIAN_BITFIELD |
__u16 deh_len:10, |
deh_hops:4, |
deh_pad:2; |
#else |
__u16 deh_pad:2, |
deh_hops:4, |
deh_len:10; |
#endif |
}; |
/* Short form header */ |
struct ddpshdr { |
#ifdef __LITTLE_ENDIAN_BITFIELD |
__u16 dsh_len:10, |
dsh_pad:6; |
#else |
__u16 dsh_pad:6, |
dsh_len:10; |
#endif |
__u8 dsh_dport; |
__u8 dsh_sport; |
/* And netatalk apps expect to stick the type in themselves */ |
}; |
/* AppleTalk AARP headers */ |
struct elapaarp { |
__u16 hw_type; |
#define AARP_HW_TYPE_ETHERNET 1 |
#define AARP_HW_TYPE_TOKENRING 2 |
__u16 pa_type; |
__u8 hw_len; |
__u8 pa_len; |
#define AARP_PA_ALEN 4 |
__u16 function; |
#define AARP_REQUEST 1 |
#define AARP_REPLY 2 |
#define AARP_PROBE 3 |
__u8 hw_src[ETH_ALEN] __attribute__ ((packed)); |
__u8 pa_src_zero __attribute__ ((packed)); |
__u16 pa_src_net __attribute__ ((packed)); |
__u8 pa_src_node __attribute__ ((packed)); |
__u8 hw_dst[ETH_ALEN] __attribute__ ((packed)); |
__u8 pa_dst_zero __attribute__ ((packed)); |
__u16 pa_dst_net __attribute__ ((packed)); |
__u8 pa_dst_node __attribute__ ((packed)); |
}; |
static __inline__ struct elapaarp *aarp_hdr(struct sk_buff *skb) |
{ |
return (struct elapaarp *)skb->h.raw; |
} |
/* Not specified - how long till we drop a resolved entry */ |
#define AARP_EXPIRY_TIME (5 * 60 * HZ) |
/* Size of hash table */ |
#define AARP_HASH_SIZE 16 |
/* Fast retransmission timer when resolving */ |
#define AARP_TICK_TIME (HZ / 5) |
/* Send 10 requests then give up (2 seconds) */ |
#define AARP_RETRANSMIT_LIMIT 10 |
/* |
* Some value bigger than total retransmit time + a bit for last reply to |
* appear and to stop continual requests |
*/ |
#define AARP_RESOLVE_TIME (10 * HZ) |
extern struct datalink_proto *ddp_dl, *aarp_dl; |
extern void aarp_proto_init(void); |
/* Inter module exports */ |
/* Give a device find its atif control structure */ |
static inline struct atalk_iface *atalk_find_dev(struct net_device *dev) |
{ |
return dev->atalk_ptr; |
} |
extern struct atalk_addr *atalk_find_dev_addr(struct net_device *dev); |
extern struct net_device *atrtr_get_dev(struct atalk_addr *sa); |
extern int aarp_send_ddp(struct net_device *dev, |
struct sk_buff *skb, |
struct atalk_addr *sa, void *hwaddr); |
extern void aarp_send_probe(struct net_device *dev, |
struct atalk_addr *addr); |
extern void aarp_device_down(struct net_device *dev); |
#ifdef MODULE |
extern void aarp_cleanup_module(void); |
#endif /* MODULE */ |
#define at_sk(__sk) ((struct atalk_sock *)(__sk)->sk_protinfo) |
extern struct hlist_head atalk_sockets; |
extern rwlock_t atalk_sockets_lock; |
extern struct atalk_route *atalk_routes; |
extern rwlock_t atalk_routes_lock; |
extern struct atalk_iface *atalk_interfaces; |
extern rwlock_t atalk_interfaces_lock; |
extern struct atalk_route atrtr_default; |
extern int atalk_proc_init(void); |
extern void atalk_proc_exit(void); |
#endif /* __KERNEL__ */ |
#endif /* __LINUX_ATALK_H__ */ |
/shark/trunk/drivers/linuxc26/include/linux/irq_cpustat.h |
---|
0,0 → 1,36 |
#ifndef __irq_cpustat_h |
#define __irq_cpustat_h |
/* |
* Contains default mappings for irq_cpustat_t, used by almost every |
* architecture. Some arch (like s390) have per cpu hardware pages and |
* they define their own mappings for irq_stat. |
* |
* Keith Owens <kaos@ocs.com.au> July 2000. |
*/ |
#include <linux/config.h> |
/* |
* Simple wrappers reducing source bloat. Define all irq_stat fields |
* here, even ones that are arch dependent. That way we get common |
* definitions instead of differing sets for each arch. |
*/ |
#ifndef __ARCH_IRQ_STAT |
extern irq_cpustat_t irq_stat[]; /* defined in asm/hardirq.h */ |
#ifdef CONFIG_SMP |
#define __IRQ_STAT(cpu, member) (irq_stat[cpu].member) |
#else |
#define __IRQ_STAT(cpu, member) ((void)(cpu), irq_stat[0].member) |
#endif |
#endif |
/* arch independent irq_stat fields */ |
#define softirq_pending(cpu) __IRQ_STAT((cpu), __softirq_pending) |
#define local_softirq_pending() softirq_pending(smp_processor_id()) |
/* arch dependent irq_stat fields */ |
#define nmi_count(cpu) __IRQ_STAT((cpu), __nmi_count) /* i386 */ |
#endif /* __irq_cpustat_h */ |
/shark/trunk/drivers/linuxc26/include/linux/bfs_fs.h |
---|
0,0 → 1,79 |
/* |
* 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 |
#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 2 |
#define BFS_VREG 1 |
/* BFS inode layout on disk */ |
struct bfs_inode { |
__u16 i_ino; |
__u16 i_unused; |
__u32 i_sblock; |
__u32 i_eblock; |
__u32 i_eoffset; |
__u32 i_vtype; |
__u32 i_mode; |
__s32 i_uid; |
__s32 i_gid; |
__u32 i_nlink; |
__u32 i_atime; |
__u32 i_mtime; |
__u32 i_ctime; |
__u32 i_padding[4]; |
}; |
#define BFS_NAMELEN 14 |
#define BFS_DIRENT_SIZE 16 |
#define BFS_DIRS_PER_BLOCK 32 |
struct bfs_dirent { |
__u16 ino; |
char name[BFS_NAMELEN]; |
}; |
/* BFS superblock layout on disk */ |
struct bfs_super_block { |
__u32 s_magic; |
__u32 s_start; |
__u32 s_end; |
__s32 s_from; |
__s32 s_to; |
__s32 s_bfrom; |
__s32 s_bto; |
char s_fsname[6]; |
char s_volume[6]; |
__u32 s_padding[118]; |
}; |
#define BFS_NZFILESIZE(ip) \ |
(((ip)->i_eoffset + 1) - (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 : ((ip)->i_eblock + 1) - (ip)->i_sblock) |
#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_UNCLEAN(bfs_sb, sb) \ |
((bfs_sb->s_from != -1) && (bfs_sb->s_to != -1) && !(sb->s_flags & MS_RDONLY)) |
#endif /* _LINUX_BFS_FS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/wanpipe.h |
---|
0,0 → 1,492 |
/***************************************************************************** |
* wanpipe.h WANPIPE(tm) Multiprotocol WAN Link Driver. |
* User-level API definitions. |
* |
* Author: Nenad Corbic <ncorbic@sangoma.com> |
* Gideon Hack |
* |
* 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. |
* ============================================================================ |
* Nov 3, 2000 Nenad Corbic Added config_id to sdla_t structure. |
* Used to determine the protocol running. |
* Jul 13, 2000 Nenad Corbic Added SyncPPP Support |
* Feb 24, 2000 Nenad Corbic Added support for x25api driver |
* Oct 04, 1999 Nenad Corbic New CHDLC and FRAME RELAY code, SMP support |
* Jun 02, 1999 Gideon Hack Added 'update_call_count' for Cisco HDLC |
* support |
* Jun 26, 1998 David Fong Added 'ip_mode' in sdla_t.u.p for dynamic IP |
* routing mode configuration |
* Jun 12, 1998 David Fong Added Cisco HDLC union member in sdla_t |
* Dec 08, 1997 Jaspreet Singh Added 'authenticator' in union of 'sdla_t' |
* Nov 26, 1997 Jaspreet Singh Added 'load_sharing' structure. Also added |
* 'devs_struct','dev_to_devtint_next' to 'sdla_t' |
* Nov 24, 1997 Jaspreet Singh Added 'irq_dis_if_send_count', |
* 'irq_dis_poll_count' to 'sdla_t'. |
* Nov 06, 1997 Jaspreet Singh Added a define called 'INTR_TEST_MODE' |
* Oct 20, 1997 Jaspreet Singh Added 'buff_intr_mode_unbusy' and |
* 'dlci_intr_mode_unbusy' to 'sdla_t' |
* Oct 18, 1997 Jaspreet Singh Added structure to maintain global driver |
* statistics. |
* Jan 15, 1997 Gene Kozin Version 3.1.0 |
* o added UDP management stuff |
* Jan 02, 1997 Gene Kozin Version 3.0.0 |
*****************************************************************************/ |
#ifndef _WANPIPE_H |
#define _WANPIPE_H |
#include <linux/wanrouter.h> |
/* Defines */ |
#ifndef PACKED |
#define PACKED __attribute__((packed)) |
#endif |
#define WANPIPE_MAGIC 0x414C4453L /* signature: 'SDLA' reversed */ |
/* IOCTL numbers (up to 16) */ |
#define WANPIPE_DUMP (ROUTER_USER+0) /* dump adapter's memory */ |
#define WANPIPE_EXEC (ROUTER_USER+1) /* execute firmware command */ |
#define TRACE_ALL 0x00 |
#define TRACE_PROT 0x01 |
#define TRACE_DATA 0x02 |
/* values for request/reply byte */ |
#define UDPMGMT_REQUEST 0x01 |
#define UDPMGMT_REPLY 0x02 |
#define UDP_OFFSET 12 |
#define MAX_CMD_BUFF 10 |
#define MAX_X25_LCN 255 /* Maximum number of x25 channels */ |
#define MAX_LCN_NUM 4095 /* Maximum lcn number */ |
#define MAX_FT1_RETRY 100 |
#ifndef AF_WANPIPE |
#define AF_WANPIPE 25 |
#ifndef PF_WANPIPE |
#define PF_WANPIPE AF_WANPIPE |
#endif |
#endif |
#define TX_TIMEOUT 5*HZ |
/* General Critical Flags */ |
#define SEND_CRIT 0x00 |
#define PERI_CRIT 0x01 |
/* Chdlc and PPP polling critical flag */ |
#define POLL_CRIT 0x03 |
/* Frame Relay Tx IRQ send critical flag */ |
#define SEND_TXIRQ_CRIT 0x02 |
/* Frame Relay ARP critical flag */ |
#define ARP_CRIT 0x03 |
/* Bit maps for dynamic interface configuration |
* DYN_OPT_ON : turns this option on/off |
* DEV_DOWN : device was shutdown by the driver not |
* by user |
*/ |
#define DYN_OPT_ON 0x00 |
#define DEV_DOWN 0x01 |
/* |
* Data structures for IOCTL calls. |
*/ |
typedef struct sdla_dump /* WANPIPE_DUMP */ |
{ |
unsigned long magic; /* for verification */ |
unsigned long offset; /* absolute adapter memory address */ |
unsigned long length; /* block length */ |
void* ptr; /* -> buffer */ |
} sdla_dump_t; |
typedef struct sdla_exec /* WANPIPE_EXEC */ |
{ |
unsigned long magic; /* for verification */ |
void* cmd; /* -> command structure */ |
void* data; /* -> data buffer */ |
} sdla_exec_t; |
/* UDP management stuff */ |
typedef struct wum_header |
{ |
unsigned char signature[8]; /* 00h: signature */ |
unsigned char type; /* 08h: request/reply */ |
unsigned char command; /* 09h: commnand */ |
unsigned char reserved[6]; /* 0Ah: reserved */ |
} wum_header_t; |
/************************************************************************* |
Data Structure for global statistics |
*************************************************************************/ |
typedef struct global_stats |
{ |
unsigned long isr_entry; |
unsigned long isr_already_critical; |
unsigned long isr_rx; |
unsigned long isr_tx; |
unsigned long isr_intr_test; |
unsigned long isr_spurious; |
unsigned long isr_enable_tx_int; |
unsigned long rx_intr_corrupt_rx_bfr; |
unsigned long rx_intr_on_orphaned_DLCI; |
unsigned long rx_intr_dev_not_started; |
unsigned long tx_intr_dev_not_started; |
unsigned long poll_entry; |
unsigned long poll_already_critical; |
unsigned long poll_processed; |
unsigned long poll_tbusy_bad_status; |
unsigned long poll_host_disable_irq; |
unsigned long poll_host_enable_irq; |
} global_stats_t; |
typedef struct{ |
unsigned short udp_src_port PACKED; |
unsigned short udp_dst_port PACKED; |
unsigned short udp_length PACKED; |
unsigned short udp_checksum PACKED; |
} udp_pkt_t; |
typedef struct { |
unsigned char ver_inet_hdr_length PACKED; |
unsigned char service_type PACKED; |
unsigned short total_length PACKED; |
unsigned short identifier PACKED; |
unsigned short flags_frag_offset PACKED; |
unsigned char ttl PACKED; |
unsigned char protocol PACKED; |
unsigned short hdr_checksum PACKED; |
unsigned long ip_src_address PACKED; |
unsigned long ip_dst_address PACKED; |
} ip_pkt_t; |
typedef struct { |
unsigned char signature[8] PACKED; |
unsigned char request_reply PACKED; |
unsigned char id PACKED; |
unsigned char reserved[6] PACKED; |
} wp_mgmt_t; |
/************************************************************************* |
Data Structure for if_send statistics |
*************************************************************************/ |
typedef struct if_send_stat{ |
unsigned long if_send_entry; |
unsigned long if_send_skb_null; |
unsigned long if_send_broadcast; |
unsigned long if_send_multicast; |
unsigned long if_send_critical_ISR; |
unsigned long if_send_critical_non_ISR; |
unsigned long if_send_tbusy; |
unsigned long if_send_tbusy_timeout; |
unsigned long if_send_PIPE_request; |
unsigned long if_send_wan_disconnected; |
unsigned long if_send_dlci_disconnected; |
unsigned long if_send_no_bfrs; |
unsigned long if_send_adptr_bfrs_full; |
unsigned long if_send_bfr_passed_to_adptr; |
unsigned long if_send_protocol_error; |
unsigned long if_send_bfr_not_passed_to_adptr; |
unsigned long if_send_tx_int_enabled; |
unsigned long if_send_consec_send_fail; |
} if_send_stat_t; |
typedef struct rx_intr_stat{ |
unsigned long rx_intr_no_socket; |
unsigned long rx_intr_dev_not_started; |
unsigned long rx_intr_PIPE_request; |
unsigned long rx_intr_bfr_not_passed_to_stack; |
unsigned long rx_intr_bfr_passed_to_stack; |
} rx_intr_stat_t; |
typedef struct pipe_mgmt_stat{ |
unsigned long UDP_PIPE_mgmt_kmalloc_err; |
unsigned long UDP_PIPE_mgmt_direction_err; |
unsigned long UDP_PIPE_mgmt_adptr_type_err; |
unsigned long UDP_PIPE_mgmt_adptr_cmnd_OK; |
unsigned long UDP_PIPE_mgmt_adptr_cmnd_timeout; |
unsigned long UDP_PIPE_mgmt_adptr_send_passed; |
unsigned long UDP_PIPE_mgmt_adptr_send_failed; |
unsigned long UDP_PIPE_mgmt_not_passed_to_stack; |
unsigned long UDP_PIPE_mgmt_passed_to_stack; |
unsigned long UDP_PIPE_mgmt_no_socket; |
unsigned long UDP_PIPE_mgmt_passed_to_adptr; |
} pipe_mgmt_stat_t; |
typedef struct { |
struct sk_buff *skb; |
} bh_data_t, cmd_data_t; |
#define MAX_LGTH_UDP_MGNT_PKT 2000 |
/* This is used for interrupt testing */ |
#define INTR_TEST_MODE 0x02 |
#define WUM_SIGNATURE_L 0x50495046 |
#define WUM_SIGNATURE_H 0x444E3845 |
#define WUM_KILL 0x50 |
#define WUM_EXEC 0x51 |
#define WANPIPE 0x00 |
#define API 0x01 |
#define BRIDGE 0x02 |
#define BRIDGE_NODE 0x03 |
#ifdef __KERNEL__ |
/****** Kernel Interface ****************************************************/ |
#include <linux/sdladrv.h> /* SDLA support module API definitions */ |
#include <linux/sdlasfm.h> /* SDLA firmware module definitions */ |
#include <linux/workqueue.h> |
#include <linux/serial.h> |
#include <linux/serialP.h> |
#include <linux/serial_reg.h> |
#include <asm/serial.h> |
#include <linux/tty.h> |
#include <linux/tty_driver.h> |
#include <linux/tty_flip.h> |
#define is_digit(ch) (((ch)>=(unsigned)'0'&&(ch)<=(unsigned)'9')?1:0) |
#define is_alpha(ch) ((((ch)>=(unsigned)'a'&&(ch)<=(unsigned)'z')||\ |
((ch)>=(unsigned)'A'&&(ch)<=(unsigned)'Z'))?1:0) |
#define is_hex_digit(ch) ((((ch)>=(unsigned)'0'&&(ch)<=(unsigned)'9')||\ |
((ch)>=(unsigned)'a'&&(ch)<=(unsigned)'f')||\ |
((ch)>=(unsigned)'A'&&(ch)<=(unsigned)'F'))?1:0) |
/****** Data Structures *****************************************************/ |
/* Adapter Data Space. |
* This structure is needed because we handle multiple cards, otherwise |
* static data would do it. |
*/ |
typedef struct sdla |
{ |
char devname[WAN_DRVNAME_SZ+1]; /* card name */ |
sdlahw_t hw; /* hardware configuration */ |
struct wan_device wandev; /* WAN device data space */ |
unsigned open_cnt; /* number of open interfaces */ |
unsigned long state_tick; /* link state timestamp */ |
unsigned intr_mode; /* Type of Interrupt Mode */ |
char in_isr; /* interrupt-in-service flag */ |
char buff_int_mode_unbusy; /* flag for carrying out dev_tint */ |
char dlci_int_mode_unbusy; /* flag for carrying out dev_tint */ |
long configured; /* flag for previous configurations */ |
unsigned short irq_dis_if_send_count; /* Disabling irqs in if_send*/ |
unsigned short irq_dis_poll_count; /* Disabling irqs in poll routine*/ |
unsigned short force_enable_irq; |
char TracingEnabled; /* flag for enabling trace */ |
global_stats_t statistics; /* global statistics */ |
void* mbox; /* -> mailbox */ |
void* rxmb; /* -> receive mailbox */ |
void* flags; /* -> adapter status flags */ |
void (*isr)(struct sdla* card); /* interrupt service routine */ |
void (*poll)(struct sdla* card); /* polling routine */ |
int (*exec)(struct sdla* card, void* u_cmd, void* u_data); |
/* Used by the listen() system call */ |
/* Wanpipe Socket Interface */ |
int (*func) (struct sk_buff *, struct sock *); |
struct sock *sk; |
/* Shutdown function */ |
void (*disable_comm) (struct sdla *card); |
/* Secondary Port Device: Piggibacking */ |
struct sdla *next; |
/* TTY driver variables */ |
unsigned char tty_opt; |
struct tty_struct *tty; |
unsigned int tty_minor; |
unsigned int tty_open; |
unsigned char *tty_buf; |
unsigned char *tty_rx; |
struct work_struct tty_work; |
union |
{ |
struct |
{ /****** X.25 specific data **********/ |
u32 lo_pvc; |
u32 hi_pvc; |
u32 lo_svc; |
u32 hi_svc; |
struct net_device *svc_to_dev_map[MAX_X25_LCN]; |
struct net_device *pvc_to_dev_map[MAX_X25_LCN]; |
struct net_device *tx_dev; |
struct net_device *cmd_dev; |
u32 no_dev; |
volatile u8 *hdlc_buf_status; |
u32 tx_interrupts_pending; |
u16 timer_int_enabled; |
struct net_device *poll_device; |
atomic_t command_busy; |
u16 udp_pkt_lgth; |
u32 udp_type; |
u8 udp_pkt_src; |
u32 udp_lcn; |
struct net_device *udp_dev; |
s8 udp_pkt_data[MAX_LGTH_UDP_MGNT_PKT]; |
u8 LAPB_hdlc; /* Option to turn off X25 and run only LAPB */ |
u8 logging; /* Option to log call messages */ |
u8 oob_on_modem; /* Option to send modem status to the api */ |
u16 num_of_ch; /* Number of channels configured by the user */ |
struct work_struct x25_poll_work; |
struct timer_list x25_timer; |
} x; |
struct |
{ /****** frame relay specific data ***/ |
void* rxmb_base; /* -> first Rx buffer */ |
void* rxmb_last; /* -> last Rx buffer */ |
unsigned rx_base; /* S508 receive buffer base */ |
unsigned rx_top; /* S508 receive buffer end */ |
unsigned short node_dlci[100]; |
unsigned short dlci_num; |
struct net_device *dlci_to_dev_map[991 + 1]; |
unsigned tx_interrupts_pending; |
unsigned short timer_int_enabled; |
unsigned short udp_pkt_lgth; |
int udp_type; |
char udp_pkt_src; |
unsigned udp_dlci; |
char udp_pkt_data[MAX_LGTH_UDP_MGNT_PKT]; |
void* trc_el_base; /* first trace element */ |
void* trc_el_last; /* last trace element */ |
void *curr_trc_el; /* current trace element */ |
unsigned short trc_bfr_space; /* trace buffer space */ |
unsigned char update_comms_stats; |
struct net_device *arp_dev; |
spinlock_t if_send_lock; |
} f; |
struct /****** PPP-specific data ***********/ |
{ |
char if_name[WAN_IFNAME_SZ+1]; /* interface name */ |
void* txbuf; /* -> current Tx buffer */ |
void* txbuf_base; /* -> first Tx buffer */ |
void* txbuf_last; /* -> last Tx buffer */ |
void* rxbuf_base; /* -> first Rx buffer */ |
void* rxbuf_last; /* -> last Rx buffer */ |
unsigned rx_base; /* S508 receive buffer base */ |
unsigned rx_top; /* S508 receive buffer end */ |
char ip_mode; /* STATIC/HOST/PEER IP Mode */ |
char authenticator; /* Authenticator for PAP/CHAP */ |
unsigned char comm_enabled; /* Is comm enabled or not */ |
unsigned char peer_route; /* Process Peer Route */ |
unsigned long *txbuf_next; /* Next Tx buffer to use */ |
unsigned long *rxbuf_next; /* Next Rx buffer to use */ |
} p; |
struct /* Cisco HDLC-specific data */ |
{ |
char if_name[WAN_IFNAME_SZ+1]; /* interface name */ |
unsigned char comm_port;/* Communication Port O or 1 */ |
unsigned char usedby; /* Used by WANPIPE or API */ |
void* rxmb; /* Receive mail box */ |
void* flags; /* flags */ |
void* tx_status; /* Tx status element */ |
void* rx_status; /* Rx status element */ |
void* txbuf; /* -> current Tx buffer */ |
void* txbuf_base; /* -> first Tx buffer */ |
void* txbuf_last; /* -> last Tx buffer */ |
void* rxbuf_base; /* -> first Rx buffer */ |
void* rxbuf_last; /* -> last Rx buffer */ |
unsigned rx_base; /* S508 receive buffer base */ |
unsigned rx_top; /* S508 receive buffer end */ |
unsigned char receive_only; /* high speed receivers */ |
unsigned short protocol_options; |
unsigned short kpalv_tx; /* Tx kpalv timer */ |
unsigned short kpalv_rx; /* Rx kpalv timer */ |
unsigned short kpalv_err; /* Error tolerance */ |
unsigned short slarp_timer; /* SLARP req timer */ |
unsigned state; /* state of the link */ |
unsigned char api_status; |
unsigned char update_call_count; |
unsigned short api_options; /* for async config */ |
unsigned char async_mode; |
unsigned short tx_bits_per_char; |
unsigned short rx_bits_per_char; |
unsigned short stop_bits; |
unsigned short parity; |
unsigned short break_timer; |
unsigned short inter_char_timer; |
unsigned short rx_complete_length; |
unsigned short xon_char; |
unsigned short xoff_char; |
unsigned char comm_enabled; /* Is comm enabled or not */ |
unsigned char backup; |
} c; |
struct |
{ |
void* tx_status; /* Tx status element */ |
void* rx_status; /* Rx status element */ |
void* trace_status; /* Trace status element */ |
void* txbuf; /* -> current Tx buffer */ |
void* txbuf_base; /* -> first Tx buffer */ |
void* txbuf_last; /* -> last Tx buffer */ |
void* rxbuf_base; /* -> first Rx buffer */ |
void* rxbuf_last; /* -> last Rx buffer */ |
void* tracebuf; /* -> current Trace buffer */ |
void* tracebuf_base; /* -> current Trace buffer */ |
void* tracebuf_last; /* -> current Trace buffer */ |
unsigned rx_base; /* receive buffer base */ |
unsigned rx_end; /* receive buffer end */ |
unsigned trace_base; /* trace buffer base */ |
unsigned trace_end; /* trace buffer end */ |
} h; |
} u; |
} sdla_t; |
/****** Public Functions ****************************************************/ |
void wanpipe_open (sdla_t* card); /* wpmain.c */ |
void wanpipe_close (sdla_t* card); /* wpmain.c */ |
void wanpipe_set_state (sdla_t* card, int state); /* wpmain.c */ |
int wpx_init (sdla_t* card, wandev_conf_t* conf); /* wpx.c */ |
int wpf_init (sdla_t* card, wandev_conf_t* conf); /* wpf.c */ |
int wpp_init (sdla_t* card, wandev_conf_t* conf); /* wpp.c */ |
int wpc_init (sdla_t* card, wandev_conf_t* conf); /* Cisco HDLC */ |
int bsc_init (sdla_t* card, wandev_conf_t* conf); /* BSC streaming */ |
int hdlc_init(sdla_t* card, wandev_conf_t* conf); /* HDLC support */ |
int wpft1_init (sdla_t* card, wandev_conf_t* conf); /* FT1 Config support */ |
int wsppp_init (sdla_t* card, wandev_conf_t* conf); /* Sync PPP on top of RAW CHDLC */ |
extern sdla_t * wanpipe_find_card(char *); |
extern sdla_t * wanpipe_find_card_num (int); |
extern void wanpipe_queue_work (struct work_struct *); |
extern void wanpipe_mark_bh (void); |
extern void wakeup_sk_bh(struct net_device *dev); |
extern int change_dev_flags(struct net_device *dev, unsigned flags); |
extern unsigned long get_ip_address(struct net_device *dev, int option); |
extern void add_gateway(sdla_t *card, struct net_device *dev); |
#endif /* __KERNEL__ */ |
#endif /* _WANPIPE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/videodev.h |
---|
0,0 → 1,438 |
#ifndef __LINUX_VIDEODEV_H |
#define __LINUX_VIDEODEV_H |
#include <linux/types.h> |
#include <linux/version.h> |
#include <linux/device.h> |
#define HAVE_V4L2 1 |
#include <linux/videodev2.h> |
#ifdef __KERNEL__ |
#include <linux/poll.h> |
#include <linux/mm.h> |
struct video_device |
{ |
/* device info */ |
struct device *dev; |
char name[32]; |
int type; /* v4l1 */ |
int type2; /* v4l2 */ |
int hardware; |
int minor; |
/* device ops + callbacks */ |
struct file_operations *fops; |
void (*release)(struct video_device *vfd); |
#if 1 /* to be removed in 2.7.x */ |
/* obsolete -- fops->owner is used instead */ |
struct module *owner; |
/* dev->driver_data will be used instead some day. |
* Use the video_{get|set}_drvdata() helper functions, |
* so the switch over will be transparent for you. |
* Or use {pci|usb}_{get|set}_drvdata() directly. */ |
void *priv; |
#endif |
/* for videodev.c intenal usage -- please don't touch */ |
int users; /* video_exclusive_{open|close} ... */ |
struct semaphore lock; /* ... helper function uses these */ |
char devfs_name[64]; /* devfs */ |
struct class_device class_dev; /* sysfs */ |
}; |
#define VIDEO_MAJOR 81 |
#define VFL_TYPE_GRABBER 0 |
#define VFL_TYPE_VBI 1 |
#define VFL_TYPE_RADIO 2 |
#define VFL_TYPE_VTX 3 |
extern int video_register_device(struct video_device *, int type, int nr); |
extern void video_unregister_device(struct video_device *); |
extern struct video_device* video_devdata(struct file*); |
#define to_video_device(cd) container_of(cd, struct video_device, class_dev) |
static inline void |
video_device_create_file(struct video_device *vfd, |
struct class_device_attribute *attr) |
{ |
class_device_create_file(&vfd->class_dev, attr); |
} |
static inline void |
video_device_remove_file(struct video_device *vfd, |
struct class_device_attribute *attr) |
{ |
class_device_remove_file(&vfd->class_dev, attr); |
} |
/* helper functions to alloc / release struct video_device, the |
later can be used for video_device->release() */ |
struct video_device *video_device_alloc(void); |
void video_device_release(struct video_device *vfd); |
/* helper functions to access driver private data. */ |
static inline void *video_get_drvdata(struct video_device *dev) |
{ |
return dev->priv; |
} |
static inline void video_set_drvdata(struct video_device *dev, void *data) |
{ |
dev->priv = data; |
} |
extern int video_exclusive_open(struct inode *inode, struct file *file); |
extern int video_exclusive_release(struct inode *inode, struct file *file); |
extern int video_usercopy(struct inode *inode, struct file *file, |
unsigned int cmd, unsigned long arg, |
int (*func)(struct inode *inode, struct file *file, |
unsigned int cmd, void *arg)); |
#endif /* __KERNEL__ */ |
#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 */ |
struct video_capability |
{ |
char name[32]; |
int type; |
int channels; /* Num channels */ |
int audios; /* Num audio devices */ |
int maxwidth; /* Supported width */ |
int maxheight; /* And height */ |
int minwidth; /* Supported width */ |
int minheight; /* And height */ |
}; |
struct video_channel |
{ |
int channel; |
char name[32]; |
int tuners; |
__u32 flags; |
#define VIDEO_VC_TUNER 1 /* Channel has a tuner */ |
#define VIDEO_VC_AUDIO 2 /* Channel has audio */ |
__u16 type; |
#define VIDEO_TYPE_TV 1 |
#define VIDEO_TYPE_CAMERA 2 |
__u16 norm; /* Norm set by channel */ |
}; |
struct video_tuner |
{ |
int tuner; |
char name[32]; |
unsigned long rangelow, rangehigh; /* Tuner range */ |
__u32 flags; |
#define VIDEO_TUNER_PAL 1 |
#define VIDEO_TUNER_NTSC 2 |
#define VIDEO_TUNER_SECAM 4 |
#define VIDEO_TUNER_LOW 8 /* Uses KHz not MHz */ |
#define VIDEO_TUNER_NORM 16 /* Tuner can set norm */ |
#define VIDEO_TUNER_STEREO_ON 128 /* Tuner is seeing stereo */ |
#define VIDEO_TUNER_RDS_ON 256 /* Tuner is seeing an RDS datastream */ |
#define VIDEO_TUNER_MBS_ON 512 /* Tuner is seeing an MBS datastream */ |
__u16 mode; /* PAL/NTSC/SECAM/OTHER */ |
#define VIDEO_MODE_PAL 0 |
#define VIDEO_MODE_NTSC 1 |
#define VIDEO_MODE_SECAM 2 |
#define VIDEO_MODE_AUTO 3 |
__u16 signal; /* Signal strength 16bit scale */ |
}; |
struct video_picture |
{ |
__u16 brightness; |
__u16 hue; |
__u16 colour; |
__u16 contrast; |
__u16 whiteness; /* Black and white only */ |
__u16 depth; /* Capture depth */ |
__u16 palette; /* Palette in use */ |
#define VIDEO_PALETTE_GREY 1 /* Linear greyscale */ |
#define VIDEO_PALETTE_HI240 2 /* High 240 cube (BT848) */ |
#define VIDEO_PALETTE_RGB565 3 /* 565 16 bit RGB */ |
#define VIDEO_PALETTE_RGB24 4 /* 24bit RGB */ |
#define VIDEO_PALETTE_RGB32 5 /* 32bit RGB */ |
#define VIDEO_PALETTE_RGB555 6 /* 555 15bit RGB */ |
#define VIDEO_PALETTE_YUV422 7 /* YUV422 capture */ |
#define VIDEO_PALETTE_YUYV 8 |
#define VIDEO_PALETTE_UYVY 9 /* The great thing about standards is ... */ |
#define VIDEO_PALETTE_YUV420 10 |
#define VIDEO_PALETTE_YUV411 11 /* YUV411 capture */ |
#define VIDEO_PALETTE_RAW 12 /* RAW capture (BT848) */ |
#define VIDEO_PALETTE_YUV422P 13 /* YUV 4:2:2 Planar */ |
#define VIDEO_PALETTE_YUV411P 14 /* YUV 4:1:1 Planar */ |
#define VIDEO_PALETTE_YUV420P 15 /* YUV 4:2:0 Planar */ |
#define VIDEO_PALETTE_YUV410P 16 /* YUV 4:1:0 Planar */ |
#define VIDEO_PALETTE_PLANAR 13 /* start of planar entries */ |
#define VIDEO_PALETTE_COMPONENT 7 /* start of component entries */ |
}; |
struct video_audio |
{ |
int audio; /* Audio channel */ |
__u16 volume; /* If settable */ |
__u16 bass, treble; |
__u32 flags; |
#define VIDEO_AUDIO_MUTE 1 |
#define VIDEO_AUDIO_MUTABLE 2 |
#define VIDEO_AUDIO_VOLUME 4 |
#define VIDEO_AUDIO_BASS 8 |
#define VIDEO_AUDIO_TREBLE 16 |
#define VIDEO_AUDIO_BALANCE 32 |
char name[16]; |
#define VIDEO_SOUND_MONO 1 |
#define VIDEO_SOUND_STEREO 2 |
#define VIDEO_SOUND_LANG1 4 |
#define VIDEO_SOUND_LANG2 8 |
__u16 mode; |
__u16 balance; /* Stereo balance */ |
__u16 step; /* Step actual volume uses */ |
}; |
struct video_clip |
{ |
__s32 x,y; |
__s32 width, height; |
struct video_clip *next; /* For user use/driver use only */ |
}; |
struct video_window |
{ |
__u32 x,y; /* Position of window */ |
__u32 width,height; /* Its size */ |
__u32 chromakey; |
__u32 flags; |
struct video_clip *clips; /* Set only */ |
int clipcount; |
#define VIDEO_WINDOW_INTERLACE 1 |
#define VIDEO_WINDOW_CHROMAKEY 16 /* Overlay by chromakey */ |
#define VIDEO_CLIP_BITMAP -1 |
/* bitmap is 1024x625, a '1' bit represents a clipped pixel */ |
#define VIDEO_CLIPMAP_SIZE (128 * 625) |
}; |
struct video_capture |
{ |
__u32 x,y; /* Offsets into image */ |
__u32 width, height; /* Area to capture */ |
__u16 decimation; /* Decimation divider */ |
__u16 flags; /* Flags for capture */ |
#define VIDEO_CAPTURE_ODD 0 /* Temporal */ |
#define VIDEO_CAPTURE_EVEN 1 |
}; |
struct video_buffer |
{ |
void *base; |
int height,width; |
int depth; |
int bytesperline; |
}; |
struct video_mmap |
{ |
unsigned int frame; /* Frame (0 - n) for double buffer */ |
int height,width; |
unsigned int format; /* should be VIDEO_PALETTE_* */ |
}; |
struct video_key |
{ |
__u8 key[8]; |
__u32 flags; |
}; |
#define VIDEO_MAX_FRAME 32 |
struct video_mbuf |
{ |
int size; /* Total memory to map */ |
int frames; /* Frames */ |
int offsets[VIDEO_MAX_FRAME]; |
}; |
#define VIDEO_NO_UNIT (-1) |
struct video_unit |
{ |
int video; /* Video minor */ |
int vbi; /* VBI minor */ |
int radio; /* Radio minor */ |
int audio; /* Audio minor */ |
int teletext; /* Teletext minor */ |
}; |
struct vbi_format { |
__u32 sampling_rate; /* in Hz */ |
__u32 samples_per_line; |
__u32 sample_format; /* VIDEO_PALETTE_RAW only (1 byte) */ |
__s32 start[2]; /* starting line for each frame */ |
__u32 count[2]; /* count of lines for each frame */ |
__u32 flags; |
#define VBI_UNSYNC 1 /* can distingues between top/bottom field */ |
#define VBI_INTERLACED 2 /* lines are interlaced */ |
}; |
/* video_info is biased towards hardware mpeg encode/decode */ |
/* but it could apply generically to any hardware compressor/decompressor */ |
struct video_info |
{ |
__u32 frame_count; /* frames output since decode/encode began */ |
__u32 h_size; /* current unscaled horizontal size */ |
__u32 v_size; /* current unscaled veritcal size */ |
__u32 smpte_timecode; /* current SMPTE timecode (for current GOP) */ |
__u32 picture_type; /* current picture type */ |
__u32 temporal_reference; /* current temporal reference */ |
__u8 user_data[256]; /* user data last found in compressed stream */ |
/* user_data[0] contains user data flags, user_data[1] has count */ |
}; |
/* generic structure for setting playback modes */ |
struct video_play_mode |
{ |
int mode; |
int p1; |
int p2; |
}; |
/* for loading microcode / fpga programming */ |
struct video_code |
{ |
char loadwhat[16]; /* name or tag of file being passed */ |
int datasize; |
__u8 *data; |
}; |
#define VIDIOCGCAP _IOR('v',1,struct video_capability) /* Get capabilities */ |
#define VIDIOCGCHAN _IOWR('v',2,struct video_channel) /* Get channel info (sources) */ |
#define VIDIOCSCHAN _IOW('v',3,struct video_channel) /* Set channel */ |
#define VIDIOCGTUNER _IOWR('v',4,struct video_tuner) /* Get tuner abilities */ |
#define VIDIOCSTUNER _IOW('v',5,struct video_tuner) /* Tune the tuner for the current channel */ |
#define VIDIOCGPICT _IOR('v',6,struct video_picture) /* Get picture properties */ |
#define VIDIOCSPICT _IOW('v',7,struct video_picture) /* Set picture properties */ |
#define VIDIOCCAPTURE _IOW('v',8,int) /* Start, end capture */ |
#define VIDIOCGWIN _IOR('v',9, struct video_window) /* Get the video overlay window */ |
#define VIDIOCSWIN _IOW('v',10, struct video_window) /* Set the video overlay window - passes clip list for hardware smarts , chromakey etc */ |
#define VIDIOCGFBUF _IOR('v',11, struct video_buffer) /* Get frame buffer */ |
#define VIDIOCSFBUF _IOW('v',12, struct video_buffer) /* Set frame buffer - root only */ |
#define VIDIOCKEY _IOR('v',13, struct video_key) /* Video key event - to dev 255 is to all - cuts capture on all DMA windows with this key (0xFFFFFFFF == all) */ |
#define VIDIOCGFREQ _IOR('v',14, unsigned long) /* Set tuner */ |
#define VIDIOCSFREQ _IOW('v',15, unsigned long) /* Set tuner */ |
#define VIDIOCGAUDIO _IOR('v',16, struct video_audio) /* Get audio info */ |
#define VIDIOCSAUDIO _IOW('v',17, struct video_audio) /* Audio source, mute etc */ |
#define VIDIOCSYNC _IOW('v',18, int) /* Sync with mmap grabbing */ |
#define VIDIOCMCAPTURE _IOW('v',19, struct video_mmap) /* Grab frames */ |
#define VIDIOCGMBUF _IOR('v',20, struct video_mbuf) /* Memory map buffer info */ |
#define VIDIOCGUNIT _IOR('v',21, struct video_unit) /* Get attached units */ |
#define VIDIOCGCAPTURE _IOR('v',22, struct video_capture) /* Get subcapture */ |
#define VIDIOCSCAPTURE _IOW('v',23, struct video_capture) /* Set subcapture */ |
#define VIDIOCSPLAYMODE _IOW('v',24, struct video_play_mode) /* Set output video mode/feature */ |
#define VIDIOCSWRITEMODE _IOW('v',25, int) /* Set write mode */ |
#define VIDIOCGPLAYINFO _IOR('v',26, struct video_info) /* Get current playback info from hardware */ |
#define VIDIOCSMICROCODE _IOW('v',27, struct video_code) /* Load microcode into hardware */ |
#define VIDIOCGVBIFMT _IOR('v',28, struct vbi_format) /* Get VBI information */ |
#define VIDIOCSVBIFMT _IOW('v',29, struct vbi_format) /* Set VBI information */ |
#define BASE_VIDIOCPRIVATE 192 /* 192-255 are private */ |
/* VIDIOCSWRITEMODE */ |
#define VID_WRITE_MPEG_AUD 0 |
#define VID_WRITE_MPEG_VID 1 |
#define VID_WRITE_OSD 2 |
#define VID_WRITE_TTX 3 |
#define VID_WRITE_CC 4 |
#define VID_WRITE_MJPEG 5 |
/* VIDIOCSPLAYMODE */ |
#define VID_PLAY_VID_OUT_MODE 0 |
/* p1: = VIDEO_MODE_PAL, VIDEO_MODE_NTSC, etc ... */ |
#define VID_PLAY_GENLOCK 1 |
/* p1: 0 = OFF, 1 = ON */ |
/* p2: GENLOCK FINE DELAY value */ |
#define VID_PLAY_NORMAL 2 |
#define VID_PLAY_PAUSE 3 |
#define VID_PLAY_SINGLE_FRAME 4 |
#define VID_PLAY_FAST_FORWARD 5 |
#define VID_PLAY_SLOW_MOTION 6 |
#define VID_PLAY_IMMEDIATE_NORMAL 7 |
#define VID_PLAY_SWITCH_CHANNELS 8 |
#define VID_PLAY_FREEZE_FRAME 9 |
#define VID_PLAY_STILL_MODE 10 |
#define VID_PLAY_MASTER_MODE 11 |
/* p1: see below */ |
#define VID_PLAY_MASTER_NONE 1 |
#define VID_PLAY_MASTER_VIDEO 2 |
#define VID_PLAY_MASTER_AUDIO 3 |
#define VID_PLAY_ACTIVE_SCANLINES 12 |
/* p1 = first active; p2 = last active */ |
#define VID_PLAY_RESET 13 |
#define VID_PLAY_END_MARK 14 |
#define VID_HARDWARE_BT848 1 |
#define VID_HARDWARE_QCAM_BW 2 |
#define VID_HARDWARE_PMS 3 |
#define VID_HARDWARE_QCAM_C 4 |
#define VID_HARDWARE_PSEUDO 5 |
#define VID_HARDWARE_SAA5249 6 |
#define VID_HARDWARE_AZTECH 7 |
#define VID_HARDWARE_SF16MI 8 |
#define VID_HARDWARE_RTRACK 9 |
#define VID_HARDWARE_ZOLTRIX 10 |
#define VID_HARDWARE_SAA7146 11 |
#define VID_HARDWARE_VIDEUM 12 /* Reserved for Winnov videum */ |
#define VID_HARDWARE_RTRACK2 13 |
#define VID_HARDWARE_PERMEDIA2 14 /* Reserved for Permedia2 */ |
#define VID_HARDWARE_RIVA128 15 /* Reserved for RIVA 128 */ |
#define VID_HARDWARE_PLANB 16 /* PowerMac motherboard video-in */ |
#define VID_HARDWARE_BROADWAY 17 /* Broadway project */ |
#define VID_HARDWARE_GEMTEK 18 |
#define VID_HARDWARE_TYPHOON 19 |
#define VID_HARDWARE_VINO 20 /* SGI Indy Vino */ |
#define VID_HARDWARE_CADET 21 /* Cadet radio */ |
#define VID_HARDWARE_TRUST 22 /* Trust FM Radio */ |
#define VID_HARDWARE_TERRATEC 23 /* TerraTec ActiveRadio */ |
#define VID_HARDWARE_CPIA 24 |
#define VID_HARDWARE_ZR36120 25 /* Zoran ZR36120/ZR36125 */ |
#define VID_HARDWARE_ZR36067 26 /* Zoran ZR36067/36060 */ |
#define VID_HARDWARE_OV511 27 |
#define VID_HARDWARE_ZR356700 28 /* Zoran 36700 series */ |
#define VID_HARDWARE_W9966 29 |
#define VID_HARDWARE_SE401 30 /* SE401 USB webcams */ |
#define VID_HARDWARE_PWC 31 /* Philips webcams */ |
#define VID_HARDWARE_MEYE 32 /* Sony Vaio MotionEye cameras */ |
#define VID_HARDWARE_CPIA2 33 |
#define VID_HARDWARE_VICAM 34 |
#define VID_HARDWARE_SF16FMR2 35 |
#endif /* __LINUX_VIDEODEV_H */ |
/* |
* Local variables: |
* c-basic-offset: 8 |
* End: |
*/ |
/shark/trunk/drivers/linuxc26/include/linux/atmlec.h |
---|
0,0 → 1,88 |
/* |
* |
* ATM Lan Emulation Daemon vs. driver interface |
* |
* carnil@cs.tut.fi |
* |
*/ |
#ifndef _ATMLEC_H_ |
#define _ATMLEC_H_ |
#include <linux/atmapi.h> |
#include <linux/atmioc.h> |
#include <linux/atm.h> |
#include <linux/if_ether.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 |
/* From the total of MAX_LEC_ITF, last NUM_TR_DEVS are reserved for Token Ring. |
* E.g. if MAX_LEC_ITF = 48 and NUM_TR_DEVS = 8, then lec0-lec39 are for |
* Ethernet ELANs and lec40-lec47 are for Token Ring ELANS. |
*/ |
#define NUM_TR_DEVS 8 |
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 { |
uint16_t lec_id; /* requestor lec_id */ |
uint32_t 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 */ |
} content; /* zeppelin, returned by kernel. Used only when proxying */ |
} __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_ */ |
/shark/trunk/drivers/linuxc26/include/linux/unistd.h |
---|
0,0 → 1,11 |
#ifndef _LINUX_UNISTD_H_ |
#define _LINUX_UNISTD_H_ |
extern int errno; |
/* |
* Include machine specific syscallX macros |
*/ |
#include <asm/unistd.h> |
#endif /* _LINUX_UNISTD_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/compiler.h |
---|
0,0 → 1,91 |
#ifndef __LINUX_COMPILER_H |
#define __LINUX_COMPILER_H |
#ifdef __CHECKER__ |
# define __user __attribute__((noderef, address_space(1))) |
# define __kernel /* default address space */ |
#else |
# define __user |
# define __kernel |
#endif |
#ifndef __ASSEMBLY__ |
#if __GNUC__ > 3 |
# include <linux/compiler-gcc+.h> /* catch-all for GCC 4, 5, etc. */ |
#elif __GNUC__ == 3 |
# include <linux/compiler-gcc3.h> |
#elif __GNUC__ == 2 |
# include <linux/compiler-gcc2.h> |
#else |
# error Sorry, your compiler is too old/not recognized. |
#endif |
#endif |
/* Intel compiler defines __GNUC__. So we will overwrite implementations |
* coming from above header files here |
*/ |
#ifdef __INTEL_COMPILER |
# include <linux/compiler-intel.h> |
#endif |
/* |
* Generic compiler-dependent macros required for kernel |
* build go below this comment. Actual compiler/compiler version |
* specific implementations come from the above header files |
*/ |
#define likely(x) __builtin_expect(!!(x), 1) |
#define unlikely(x) __builtin_expect(!!(x), 0) |
/* |
* Allow us to mark functions as 'deprecated' and have gcc emit a nice |
* warning for each use, in hopes of speeding the functions removal. |
* Usage is: |
* int __deprecated foo(void) |
*/ |
#ifndef __deprecated |
# define __deprecated /* unimplemented */ |
#endif |
/* |
* Allow us to avoid 'defined but not used' warnings on functions and data, |
* as well as force them to be emitted to the assembly file. |
* |
* As of gcc 3.3, static functions that are not marked with attribute((used)) |
* may be elided from the assembly file. As of gcc 3.3, static data not so |
* marked will not be elided, but this may change in a future gcc version. |
* |
* In prior versions of gcc, such functions and data would be emitted, but |
* would be warned about except with attribute((unused)). |
*/ |
#ifndef __attribute_used__ |
# define __attribute_used__ /* unimplemented */ |
#endif |
/* |
* From the GCC manual: |
* |
* Many functions have no effects except the return value and their |
* return value depends only on the parameters and/or global |
* variables. Such a function can be subject to common subexpression |
* elimination and loop optimization just as an arithmetic operator |
* would be. |
* [...] |
*/ |
#ifndef __attribute_pure__ |
# define __attribute_pure__ /* unimplemented */ |
#endif |
/* Optimization barrier */ |
#ifndef barrier |
# define barrier() __memory_barrier() |
#endif |
#ifndef RELOC_HIDE |
# define RELOC_HIDE(ptr, off) \ |
({ unsigned long __ptr; \ |
__ptr = (unsigned long) (ptr); \ |
(typeof(ptr)) (__ptr + (off)); }) |
#endif |
#endif /* __LINUX_COMPILER_H */ |
/shark/trunk/drivers/linuxc26/include/linux/tcp_diag.h |
---|
0,0 → 1,116 |
#ifndef _TCP_DIAG_H_ |
#define _TCP_DIAG_H_ 1 |
/* Just some random number */ |
#define TCPDIAG_GETSOCK 18 |
/* Socket identity */ |
struct tcpdiag_sockid |
{ |
__u16 tcpdiag_sport; |
__u16 tcpdiag_dport; |
__u32 tcpdiag_src[4]; |
__u32 tcpdiag_dst[4]; |
__u32 tcpdiag_if; |
__u32 tcpdiag_cookie[2]; |
#define TCPDIAG_NOCOOKIE (~0U) |
}; |
/* Request structure */ |
struct tcpdiagreq |
{ |
__u8 tcpdiag_family; /* Family of addresses. */ |
__u8 tcpdiag_src_len; |
__u8 tcpdiag_dst_len; |
__u8 tcpdiag_ext; /* Query extended information */ |
struct tcpdiag_sockid id; |
__u32 tcpdiag_states; /* States to dump */ |
__u32 tcpdiag_dbs; /* Tables to dump (NI) */ |
}; |
enum |
{ |
TCPDIAG_REQ_NONE, |
TCPDIAG_REQ_BYTECODE, |
}; |
#define TCPDIAG_REQ_MAX TCPDIAG_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 tcpdiag_bc_op |
{ |
unsigned char code; |
unsigned char yes; |
unsigned short no; |
}; |
enum |
{ |
TCPDIAG_BC_NOP, |
TCPDIAG_BC_JMP, |
TCPDIAG_BC_S_GE, |
TCPDIAG_BC_S_LE, |
TCPDIAG_BC_D_GE, |
TCPDIAG_BC_D_LE, |
TCPDIAG_BC_AUTO, |
TCPDIAG_BC_S_COND, |
TCPDIAG_BC_D_COND, |
}; |
struct tcpdiag_hostcond |
{ |
__u8 family; |
__u8 prefix_len; |
int port; |
__u32 addr[0]; |
}; |
/* Base info structure. It contains socket identity (addrs/ports/cookie) |
* and, alas, the information shown by netstat. */ |
struct tcpdiagmsg |
{ |
__u8 tcpdiag_family; |
__u8 tcpdiag_state; |
__u8 tcpdiag_timer; |
__u8 tcpdiag_retrans; |
struct tcpdiag_sockid id; |
__u32 tcpdiag_expires; |
__u32 tcpdiag_rqueue; |
__u32 tcpdiag_wqueue; |
__u32 tcpdiag_uid; |
__u32 tcpdiag_inode; |
}; |
/* Extensions */ |
enum |
{ |
TCPDIAG_NONE, |
TCPDIAG_MEMINFO, |
TCPDIAG_INFO, |
}; |
#define TCPDIAG_MAX TCPDIAG_INFO |
/* TCPDIAG_MEM */ |
struct tcpdiag_meminfo |
{ |
__u32 tcpdiag_rmem; |
__u32 tcpdiag_wmem; |
__u32 tcpdiag_fmem; |
__u32 tcpdiag_tmem; |
}; |
#endif /* _TCP_DIAG_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/sockios.h |
---|
0,0 → 1,137 |
/* |
* 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, <bir7@leland.Stanford.Edu> |
* 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 |
/* 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 */ |
#define SIOCGIFDIVERT 0x8944 /* Frame diversion support */ |
#define SIOCSIFDIVERT 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 */ |
/* 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 */ |
/* 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 */ |
/shark/trunk/drivers/linuxc26/include/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 |
/shark/trunk/drivers/linuxc26/include/linux/utsname.h |
---|
0,0 → 1,36 |
#ifndef _LINUX_UTSNAME_H |
#define _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[65]; |
char nodename[65]; |
char release[65]; |
char version[65]; |
char machine[65]; |
char domainname[65]; |
}; |
extern struct new_utsname system_utsname; |
extern struct rw_semaphore uts_sem; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/preempt.h |
---|
0,0 → 1,60 |
#ifndef __LINUX_PREEMPT_H |
#define __LINUX_PREEMPT_H |
/* |
* include/linux/preempt.h - macros for accessing and manipulating |
* preempt_count (used for kernel preemption, interrupt count, etc.) |
*/ |
#include <linux/config.h> |
#define preempt_count() (current_thread_info()->preempt_count) |
#define inc_preempt_count() \ |
do { \ |
preempt_count()++; \ |
} while (0) |
#define dec_preempt_count() \ |
do { \ |
preempt_count()--; \ |
} while (0) |
#ifdef CONFIG_PREEMPT |
extern void preempt_schedule(void); |
#define preempt_disable() \ |
do { \ |
inc_preempt_count(); \ |
barrier(); \ |
} while (0) |
#define preempt_enable_no_resched() \ |
do { \ |
barrier(); \ |
dec_preempt_count(); \ |
} while (0) |
#define preempt_check_resched() \ |
do { \ |
if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \ |
preempt_schedule(); \ |
} while (0) |
#define preempt_enable() \ |
do { \ |
preempt_enable_no_resched(); \ |
preempt_check_resched(); \ |
} while (0) |
#else |
#define preempt_disable() do { } while (0) |
#define preempt_enable_no_resched() do { } while (0) |
#define preempt_enable() do { } while (0) |
#define preempt_check_resched() do { } while (0) |
#endif |
#endif /* __LINUX_PREEMPT_H */ |
/shark/trunk/drivers/linuxc26/include/linux/agp_backend.h |
---|
0,0 → 1,118 |
/* |
* AGPGART backend specific includes. Not for userspace consumption. |
* |
* Copyright (C) 2002-2003 Dave Jones |
* 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 _AGP_BACKEND_H |
#define _AGP_BACKEND_H 1 |
#ifdef __KERNEL__ |
#ifndef TRUE |
#define TRUE 1 |
#endif |
#ifndef FALSE |
#define FALSE 0 |
#endif |
enum chipset_type { |
NOT_SUPPORTED, |
SUPPORTED, |
}; |
struct agp_version { |
u16 major; |
u16 minor; |
}; |
struct agp_kern_info { |
struct agp_version version; |
struct pci_dev *device; |
enum chipset_type chipset; |
unsigned long mode; |
off_t aper_base; |
size_t aper_size; |
int max_memory; /* In pages */ |
int current_memory; |
int cant_use_aperture; |
unsigned long page_mask; |
struct vm_operations_struct *vm_ops; |
}; |
/* |
* The agp_memory structure has information about the block of agp memory |
* allocated. A caller may manipulate the next and prev pointers to link |
* each allocated item into a list. These pointers are ignored by the backend. |
* Everything else should never be written to, but the caller may read any of |
* the items to detrimine the status of this block of agp memory. |
*/ |
struct agp_memory { |
int key; |
struct agp_memory *next; |
struct agp_memory *prev; |
size_t page_count; |
int num_scratch_pages; |
unsigned long *memory; |
off_t pg_start; |
u32 type; |
u32 physical; |
u8 is_bound; |
u8 is_flushed; |
}; |
#define AGP_NORMAL_MEMORY 0 |
extern void agp_free_memory(struct agp_memory *); |
extern struct agp_memory *agp_allocate_memory(size_t, u32); |
extern int agp_copy_info(struct agp_kern_info *); |
extern int agp_bind_memory(struct agp_memory *, off_t); |
extern int agp_unbind_memory(struct agp_memory *); |
extern void agp_enable(u32); |
extern int agp_backend_acquire(void); |
extern void agp_backend_release(void); |
/* |
* Interface between drm and agp code. When agp initializes, it makes |
* the below structure available via inter_module_register(), drm might |
* use it. Keith Owens <kaos@ocs.com.au> 28 Oct 2000. |
*/ |
typedef struct { |
void (*free_memory)(struct agp_memory *); |
struct agp_memory * (*allocate_memory)(size_t, u32); |
int (*bind_memory)(struct agp_memory *, off_t); |
int (*unbind_memory)(struct agp_memory *); |
void (*enable)(u32); |
int (*acquire)(void); |
void (*release)(void); |
int (*copy_info)(struct agp_kern_info *); |
} drm_agp_t; |
extern const drm_agp_t *drm_agp_p; |
#endif /* __KERNEL__ */ |
#endif /* _AGP_BACKEND_H */ |
/shark/trunk/drivers/linuxc26/include/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 <asm/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 |
/shark/trunk/drivers/linuxc26/include/linux/errno.h |
---|
0,0 → 1,28 |
#ifndef _LINUX_ERRNO_H |
#define _LINUX_ERRNO_H |
#include <asm/errno.h> |
#ifdef __KERNEL__ |
/* Should never be seen by user programs */ |
#define ERESTARTSYS 512 |
#define ERESTARTNOINTR 513 |
#define ERESTARTNOHAND 514 /* restart if no handler.. */ |
#define ENOIOCTLCMD 515 /* No ioctl command */ |
#define ERESTART_RESTARTBLOCK 516 /* restart by calling sys_restart_syscall */ |
/* Defined for the NFSv3 protocol */ |
#define EBADHANDLE 521 /* Illegal NFS file handle */ |
#define ENOTSYNC 522 /* Update synchronization mismatch */ |
#define EBADCOOKIE 523 /* Cookie is stale */ |
#define ENOTSUPP 524 /* Operation is not supported */ |
#define ETOOSMALL 525 /* Buffer or request is too small */ |
#define ESERVERFAULT 526 /* An untranslatable error occurred */ |
#define EBADTYPE 527 /* Type not supported by server */ |
#define EJUKEBOX 528 /* Request initiated, but will not complete before timeout */ |
#define EIOCBQUEUED 529 /* iocb queued, will get completion event */ |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/coda_linux.h |
---|
0,0 → 1,102 |
/* |
* Coda File System, Linux Kernel module |
* |
* Original version, adapted from cfs_mach.c, (C) Carnegie Mellon University |
* Linux modifications (C) 1996, Peter J. Braam |
* Rewritten for Linux 2.1 (C) 1997 Carnegie Mellon University |
* |
* Carnegie Mellon University encourages users of this software to |
* contribute improvements to the Coda project. |
*/ |
#ifndef _LINUX_CODA_FS |
#define _LINUX_CODA_FS |
#include <linux/kernel.h> |
#include <linux/param.h> |
#include <linux/mm.h> |
#include <linux/vmalloc.h> |
#include <linux/slab.h> |
#include <linux/wait.h> |
#include <linux/types.h> |
#include <linux/fs.h> |
#include <linux/coda_fs_i.h> |
/* operations */ |
extern struct inode_operations coda_dir_inode_operations; |
extern struct inode_operations coda_file_inode_operations; |
extern struct inode_operations coda_ioctl_inode_operations; |
extern struct address_space_operations coda_file_aops; |
extern struct address_space_operations coda_symlink_aops; |
extern struct file_operations coda_dir_operations; |
extern struct file_operations coda_file_operations; |
extern struct file_operations coda_ioctl_operations; |
/* operations shared over more than one file */ |
int coda_open(struct inode *i, struct file *f); |
int coda_flush(struct file *f); |
int coda_release(struct inode *i, struct file *f); |
int coda_permission(struct inode *inode, int mask, struct nameidata *nd); |
int coda_revalidate_inode(struct dentry *); |
int coda_getattr(struct vfsmount *, struct dentry *, struct kstat *); |
int coda_setattr(struct dentry *, struct iattr *); |
/* global variables */ |
extern int coda_fake_statfs; |
/* this file: heloers */ |
static __inline__ struct CodaFid *coda_i2f(struct inode *); |
static __inline__ char *coda_i2s(struct inode *); |
static __inline__ void coda_flag_inode(struct inode *, int flag); |
char *coda_f2s(struct CodaFid *f); |
int coda_isroot(struct inode *i); |
int coda_iscontrol(const char *name, size_t length); |
void coda_vattr_to_iattr(struct inode *, struct coda_vattr *); |
void coda_iattr_to_vattr(struct iattr *, struct coda_vattr *); |
unsigned short coda_flags_to_cflags(unsigned short); |
/* sysctl.h */ |
void coda_sysctl_init(void); |
void coda_sysctl_clean(void); |
#define CODA_ALLOC(ptr, cast, size) do { \ |
if (size < PAGE_SIZE) \ |
ptr = (cast)kmalloc((unsigned long) size, GFP_KERNEL); \ |
else \ |
ptr = (cast)vmalloc((unsigned long) size); \ |
if (!ptr) \ |
printk("kernel malloc returns 0 at %s:%d\n", __FILE__, __LINE__); \ |
else memset( ptr, 0, size ); \ |
} while (0) |
#define CODA_FREE(ptr,size) \ |
do { if (size < PAGE_SIZE) kfree((ptr)); else vfree((ptr)); } while (0) |
/* inode to cnode access functions */ |
static inline struct coda_inode_info *ITOC(struct inode *inode) |
{ |
return list_entry(inode, struct coda_inode_info, vfs_inode); |
} |
static __inline__ struct CodaFid *coda_i2f(struct inode *inode) |
{ |
return &(ITOC(inode)->c_fid); |
} |
static __inline__ char *coda_i2s(struct inode *inode) |
{ |
return coda_f2s(&(ITOC(inode)->c_fid)); |
} |
/* this will not zap the inode away */ |
static __inline__ void coda_flag_inode(struct inode *inode, int flag) |
{ |
ITOC(inode)->c_flags |= flag; |
} |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/net.h |
---|
0,0 → 1,251 |
/* |
* 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, <bir7@leland.Stanford.Edu> |
* 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_NET_H |
#define _LINUX_NET_H |
#include <linux/config.h> |
#include <linux/wait.h> |
#include <linux/stringify.h> |
struct poll_table_struct; |
struct inode; |
#define NPROTO 32 /* should be enough for now.. */ |
#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) */ |
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 */ |
#ifdef __KERNEL__ |
#define SOCK_ASYNC_NOSPACE 0 |
#define SOCK_ASYNC_WAITDATA 1 |
#define SOCK_NOSPACE 2 |
/** |
* struct socket - general BSD socket |
* @state - socket state (%SS_CONNECTED, etc) |
* @flags - socket flags (%SOCK_ASYNC_NOSPACE, etc) |
* @ops - protocol specific socket operations |
* @fasync_list - Asynchronous wake up list |
* @file - File back pointer for gc |
* @sk - internal networking protocol agnostic socket representation |
* @wait - wait queue for several uses |
* @type - socket type (%SOCK_STREAM, etc) |
* @passcred - credentials (used only in Unix Sockets (aka PF_LOCAL)) |
*/ |
struct socket { |
socket_state state; |
unsigned long flags; |
struct proto_ops *ops; |
struct fasync_struct *fasync_list; |
struct file *file; |
struct sock *sk; |
wait_queue_head_t wait; |
short type; |
unsigned char passcred; |
}; |
struct vm_area_struct; |
struct page; |
struct kiocb; |
struct sockaddr; |
struct msghdr; |
struct module; |
struct proto_ops { |
int family; |
struct module *owner; |
int (*release) (struct socket *sock); |
int (*bind) (struct socket *sock, |
struct sockaddr *myaddr, |
int sockaddr_len); |
int (*connect) (struct socket *sock, |
struct sockaddr *vaddr, |
int sockaddr_len, int flags); |
int (*socketpair)(struct socket *sock1, |
struct socket *sock2); |
int (*accept) (struct socket *sock, |
struct socket *newsock, int flags); |
int (*getname) (struct socket *sock, |
struct sockaddr *addr, |
int *sockaddr_len, int peer); |
unsigned int (*poll) (struct file *file, struct socket *sock, |
struct poll_table_struct *wait); |
int (*ioctl) (struct socket *sock, unsigned int cmd, |
unsigned long arg); |
int (*listen) (struct socket *sock, int len); |
int (*shutdown) (struct socket *sock, int flags); |
int (*setsockopt)(struct socket *sock, int level, |
int optname, char __user *optval, int optlen); |
int (*getsockopt)(struct socket *sock, int level, |
int optname, char __user *optval, int __user *optlen); |
int (*sendmsg) (struct kiocb *iocb, struct socket *sock, |
struct msghdr *m, int total_len); |
int (*recvmsg) (struct kiocb *iocb, struct socket *sock, |
struct msghdr *m, int total_len, |
int flags); |
int (*mmap) (struct file *file, struct socket *sock, |
struct vm_area_struct * vma); |
ssize_t (*sendpage) (struct socket *sock, struct page *page, |
int offset, size_t size, int flags); |
}; |
struct net_proto_family { |
int family; |
int (*create)(struct socket *sock, int protocol); |
/* These are counters for the number of different methods of |
each we support */ |
short authentication; |
short encryption; |
short encrypt_net; |
struct module *owner; |
}; |
struct iovec; |
extern int sock_wake_async(struct socket *sk, int how, int band); |
extern int sock_register(struct net_proto_family *fam); |
extern int sock_unregister(int family); |
extern struct socket *sock_alloc(void); |
extern int sock_create(int family, int type, int proto, |
struct socket **res); |
extern void sock_release(struct socket *sock); |
extern int sock_sendmsg(struct socket *sock, struct msghdr *msg, |
int len); |
extern int sock_recvmsg(struct socket *sock, struct msghdr *msg, |
int size, int flags); |
extern int sock_readv_writev(int type, struct inode *inode, |
struct file *file, |
const struct iovec *iov, long count, |
long size); |
extern int sock_map_fd(struct socket *sock); |
extern struct socket *sockfd_lookup(int fd, int *err); |
#define sockfd_put(sock) fput(sock->file) |
extern int net_ratelimit(void); |
extern unsigned long net_random(void); |
extern void net_srandom(unsigned long); |
#ifndef CONFIG_SMP |
#define SOCKOPS_WRAPPED(name) name |
#define SOCKOPS_WRAP(name, fam) |
#else |
#define SOCKOPS_WRAPPED(name) __unlocked_##name |
#define SOCKCALL_WRAP(name, call, parms, args) \ |
static int __lock_##name##_##call parms \ |
{ \ |
int ret; \ |
lock_kernel(); \ |
ret = __unlocked_##name##_ops.call args ;\ |
unlock_kernel(); \ |
return ret; \ |
} |
#define SOCKCALL_UWRAP(name, call, parms, args) \ |
static unsigned int __lock_##name##_##call parms \ |
{ \ |
int ret; \ |
lock_kernel(); \ |
ret = __unlocked_##name##_ops.call args ;\ |
unlock_kernel(); \ |
return ret; \ |
} |
#define SOCKOPS_WRAP(name, fam) \ |
SOCKCALL_WRAP(name, release, (struct socket *sock), (sock)) \ |
SOCKCALL_WRAP(name, bind, (struct socket *sock, struct sockaddr *uaddr, int addr_len), \ |
(sock, uaddr, addr_len)) \ |
SOCKCALL_WRAP(name, connect, (struct socket *sock, struct sockaddr * uaddr, \ |
int addr_len, int flags), \ |
(sock, uaddr, addr_len, flags)) \ |
SOCKCALL_WRAP(name, socketpair, (struct socket *sock1, struct socket *sock2), \ |
(sock1, sock2)) \ |
SOCKCALL_WRAP(name, accept, (struct socket *sock, struct socket *newsock, \ |
int flags), (sock, newsock, flags)) \ |
SOCKCALL_WRAP(name, getname, (struct socket *sock, struct sockaddr *uaddr, \ |
int *addr_len, int peer), (sock, uaddr, addr_len, peer)) \ |
SOCKCALL_UWRAP(name, poll, (struct file *file, struct socket *sock, struct poll_table_struct *wait), \ |
(file, sock, wait)) \ |
SOCKCALL_WRAP(name, ioctl, (struct socket *sock, unsigned int cmd, \ |
unsigned long arg), (sock, cmd, arg)) \ |
SOCKCALL_WRAP(name, listen, (struct socket *sock, int len), (sock, len)) \ |
SOCKCALL_WRAP(name, shutdown, (struct socket *sock, int flags), (sock, flags)) \ |
SOCKCALL_WRAP(name, setsockopt, (struct socket *sock, int level, int optname, \ |
char *optval, int optlen), (sock, level, optname, optval, optlen)) \ |
SOCKCALL_WRAP(name, getsockopt, (struct socket *sock, int level, int optname, \ |
char *optval, int *optlen), (sock, level, optname, optval, optlen)) \ |
SOCKCALL_WRAP(name, sendmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, int len), \ |
(iocb, sock, m, len)) \ |
SOCKCALL_WRAP(name, recvmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, int len, int flags), \ |
(iocb, sock, m, len, flags)) \ |
SOCKCALL_WRAP(name, mmap, (struct file *file, struct socket *sock, struct vm_area_struct *vma), \ |
(file, sock, vma)) \ |
\ |
static struct proto_ops name##_ops = { \ |
.family = fam, \ |
.owner = THIS_MODULE, \ |
.release = __lock_##name##_release, \ |
.bind = __lock_##name##_bind, \ |
.connect = __lock_##name##_connect, \ |
.socketpair = __lock_##name##_socketpair, \ |
.accept = __lock_##name##_accept, \ |
.getname = __lock_##name##_getname, \ |
.poll = __lock_##name##_poll, \ |
.ioctl = __lock_##name##_ioctl, \ |
.listen = __lock_##name##_listen, \ |
.shutdown = __lock_##name##_shutdown, \ |
.setsockopt = __lock_##name##_setsockopt, \ |
.getsockopt = __lock_##name##_getsockopt, \ |
.sendmsg = __lock_##name##_sendmsg, \ |
.recvmsg = __lock_##name##_recvmsg, \ |
.mmap = __lock_##name##_mmap, \ |
}; |
#endif |
#define MODULE_ALIAS_NETPROTO(proto) \ |
MODULE_ALIAS("net-pf-" __stringify(proto)) |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_NET_H */ |
/shark/trunk/drivers/linuxc26/include/linux/apm_bios.h |
---|
0,0 → 1,217 |
#ifndef _LINUX_APM_H |
#define _LINUX_APM_H |
/* |
* 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. |
*/ |
typedef unsigned short apm_event_t; |
typedef unsigned short apm_eventinfo_t; |
#ifdef __KERNEL__ |
#define APM_CS (GDT_ENTRY_APMBIOS_BASE * 8) |
#define APM_CS_16 (APM_CS + 8) |
#define APM_DS (APM_CS_16 + 8) |
struct apm_bios_info { |
unsigned short version; |
unsigned short cseg; |
unsigned long offset; |
unsigned short cseg_16; |
unsigned short dseg; |
unsigned short flags; |
unsigned short cseg_len; |
unsigned short cseg_16_len; |
unsigned short dseg_len; |
}; |
/* Results of APM Installation Check */ |
#define APM_16_BIT_SUPPORT 0x0001 |
#define APM_32_BIT_SUPPORT 0x0002 |
#define APM_IDLE_SLOWS_CLOCK 0x0004 |
#define APM_BIOS_DISABLED 0x0008 |
#define APM_BIOS_DISENGAGED 0x0010 |
/* |
* Data for APM that is persistent across module unload/load |
*/ |
struct apm_info { |
struct apm_bios_info bios; |
unsigned short connection_version; |
int get_power_status_broken; |
int get_power_status_swabinminutes; |
int allow_ints; |
int realmode_power_off; |
int disabled; |
}; |
/* |
* The APM function codes |
*/ |
#define APM_FUNC_INST_CHECK 0x5300 |
#define APM_FUNC_REAL_CONN 0x5301 |
#define APM_FUNC_16BIT_CONN 0x5302 |
#define APM_FUNC_32BIT_CONN 0x5303 |
#define APM_FUNC_DISCONN 0x5304 |
#define APM_FUNC_IDLE 0x5305 |
#define APM_FUNC_BUSY 0x5306 |
#define APM_FUNC_SET_STATE 0x5307 |
#define APM_FUNC_ENABLE_PM 0x5308 |
#define APM_FUNC_RESTORE_BIOS 0x5309 |
#define APM_FUNC_GET_STATUS 0x530a |
#define APM_FUNC_GET_EVENT 0x530b |
#define APM_FUNC_GET_STATE 0x530c |
#define APM_FUNC_ENABLE_DEV_PM 0x530d |
#define APM_FUNC_VERSION 0x530e |
#define APM_FUNC_ENGAGE_PM 0x530f |
#define APM_FUNC_GET_CAP 0x5310 |
#define APM_FUNC_RESUME_TIMER 0x5311 |
#define APM_FUNC_RESUME_ON_RING 0x5312 |
#define APM_FUNC_TIMER 0x5313 |
/* |
* Function code for APM_FUNC_RESUME_TIMER |
*/ |
#define APM_FUNC_DISABLE_TIMER 0 |
#define APM_FUNC_GET_TIMER 1 |
#define APM_FUNC_SET_TIMER 2 |
/* |
* Function code for APM_FUNC_RESUME_ON_RING |
*/ |
#define APM_FUNC_DISABLE_RING 0 |
#define APM_FUNC_ENABLE_RING 1 |
#define APM_FUNC_GET_RING 2 |
/* |
* Function code for APM_FUNC_TIMER_STATUS |
*/ |
#define APM_FUNC_TIMER_DISABLE 0 |
#define APM_FUNC_TIMER_ENABLE 1 |
#define APM_FUNC_TIMER_GET 2 |
/* |
* in arch/i386/kernel/setup.c |
*/ |
extern struct apm_info apm_info; |
#endif /* __KERNEL__ */ |
/* |
* 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 |
#ifdef __KERNEL__ |
/* |
* This is the "All Devices" ID communicated to the BIOS |
*/ |
#define APM_DEVICE_BALL ((apm_info.connection_version > 0x0100) ? \ |
APM_DEVICE_ALL : APM_DEVICE_OLD_ALL) |
#endif |
/* |
* 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 /* LINUX_APM_H */ |
/shark/trunk/drivers/linuxc26/include/linux/atmbr2684.h |
---|
0,0 → 1,101 |
#ifndef _LINUX_ATMBR2684_H |
#define _LINUX_ATMBR2684_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 */ |
/* |
* 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 */ |
/* |
* 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_* */ |
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 { |
__u32 prefix; /* network byte order */ |
__u32 netmask; /* 0 = disable filter */ |
}; |
struct br2684_filter_set { |
struct br2684_if_spec ifspec; |
struct br2684_filter filter; |
}; |
#define BR2684_SETFILT _IOW( 'a', ATMIOC_BACKEND + 0, \ |
struct br2684_filter_set) |
#endif /* _LINUX_ATMBR2684_H */ |
/shark/trunk/drivers/linuxc26/include/linux/hdreg.h |
---|
0,0 → 1,722 |
#ifndef _LINUX_HDREG_H |
#define _LINUX_HDREG_H |
/* |
* This file contains some defines for the AT-hd-controller. |
* Various sources. |
*/ |
/* ide.c has its own port definitions in "ide.h" */ |
#define HD_IRQ 14 |
/* Hd controller regs. Ref: IBM AT Bios-listing */ |
#define HD_DATA 0x1f0 /* _CTL when writing */ |
#define HD_ERROR 0x1f1 /* see err-bits */ |
#define HD_NSECTOR 0x1f2 /* nr of sectors to read/write */ |
#define HD_SECTOR 0x1f3 /* starting sector */ |
#define HD_LCYL 0x1f4 /* starting cylinder */ |
#define HD_HCYL 0x1f5 /* high byte of starting cyl */ |
#define HD_CURRENT 0x1f6 /* 101dhhhh , d=drive, hhhh=head */ |
#define HD_STATUS 0x1f7 /* see status-bits */ |
#define HD_FEATURE HD_ERROR /* same io address, read=error, write=feature */ |
#define HD_PRECOMP HD_FEATURE /* obsolete use of this port - predates IDE */ |
#define HD_COMMAND HD_STATUS /* same io address, read=status, write=cmd */ |
#define HD_CMD 0x3f6 /* used for resets */ |
#define HD_ALTSTATUS 0x3f6 /* same as HD_STATUS but doesn't clear irq */ |
/* remainder is shared between hd.c, ide.c, ide-cd.c, and the hdparm utility */ |
/* Bits of HD_STATUS */ |
#define ERR_STAT 0x01 |
#define INDEX_STAT 0x02 |
#define ECC_STAT 0x04 /* Corrected error */ |
#define DRQ_STAT 0x08 |
#define SEEK_STAT 0x10 |
#define SRV_STAT 0x10 |
#define WRERR_STAT 0x20 |
#define READY_STAT 0x40 |
#define BUSY_STAT 0x80 |
/* Bits for HD_ERROR */ |
#define MARK_ERR 0x01 /* Bad address mark */ |
#define TRK0_ERR 0x02 /* couldn't find track 0 */ |
#define ABRT_ERR 0x04 /* Command aborted */ |
#define MCR_ERR 0x08 /* media change request */ |
#define ID_ERR 0x10 /* ID field not found */ |
#define MC_ERR 0x20 /* media changed */ |
#define ECC_ERR 0x40 /* Uncorrectable ECC error */ |
#define BBD_ERR 0x80 /* pre-EIDE meaning: block marked bad */ |
#define ICRC_ERR 0x80 /* new meaning: CRC error during transfer */ |
/* Bits of HD_NSECTOR */ |
#define CD 0x01 |
#define IO 0x02 |
#define REL 0x04 |
#define TAG_MASK 0xf8 |
/* |
* 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_INVALID -1 |
#define IDE_DRIVE_TASK_NO_DATA 0 |
#define IDE_DRIVE_TASK_SET_XFER 1 |
#define IDE_DRIVE_TASK_IN 2 |
#define IDE_DRIVE_TASK_OUT 3 |
#define IDE_DRIVE_TASK_RAW_WRITE 4 |
/* |
* Define standard taskfile in/out register |
*/ |
#define IDE_TASKFILE_STD_OUT_FLAGS 0xFE |
#define IDE_TASKFILE_STD_IN_FLAGS 0xFE |
#define IDE_HOB_STD_OUT_FLAGS 0x3C |
#define IDE_HOB_STD_IN_FLAGS 0x3C |
typedef unsigned char task_ioreg_t; |
typedef unsigned long sata_ioreg_t; |
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 { |
task_ioreg_t io_ports[8]; |
task_ioreg_t hob_ports[8]; |
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 { |
task_ioreg_t command; |
task_ioreg_t sector_number; |
task_ioreg_t feature; |
task_ioreg_t sector_count; |
}; |
typedef struct hd_drive_task_hdr { |
task_ioreg_t data; |
task_ioreg_t feature; |
task_ioreg_t sector_count; |
task_ioreg_t sector_number; |
task_ioreg_t low_cylinder; |
task_ioreg_t high_cylinder; |
task_ioreg_t device_head; |
task_ioreg_t command; |
} task_struct_t; |
typedef struct hd_drive_hob_hdr { |
task_ioreg_t data; |
task_ioreg_t feature; |
task_ioreg_t sector_count; |
task_ioreg_t sector_number; |
task_ioreg_t low_cylinder; |
task_ioreg_t high_cylinder; |
task_ioreg_t device_head; |
task_ioreg_t control; |
} hob_struct_t; |
#define TASKFILE_INVALID 0x7fff |
#define TASKFILE_48 0x8000 |
#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 |
#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 |
/* 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_XFER 0x03 /* Set transfer mode */ |
# define XFER_UDMA_7 0x47 /* 0100|0111 */ |
# define XFER_UDMA_6 0x46 /* 0100|0110 */ |
# define XFER_UDMA_5 0x45 /* 0100|0101 */ |
# define XFER_UDMA_4 0x44 /* 0100|0100 */ |
# define XFER_UDMA_3 0x43 /* 0100|0011 */ |
# define XFER_UDMA_2 0x42 /* 0100|0010 */ |
# define XFER_UDMA_1 0x41 /* 0100|0001 */ |
# define XFER_UDMA_0 0x40 /* 0100|0000 */ |
# define XFER_MW_DMA_2 0x22 /* 0010|0010 */ |
# define XFER_MW_DMA_1 0x21 /* 0010|0001 */ |
# define XFER_MW_DMA_0 0x20 /* 0010|0000 */ |
# define XFER_SW_DMA_2 0x12 /* 0001|0010 */ |
# define XFER_SW_DMA_1 0x11 /* 0001|0001 */ |
# define XFER_SW_DMA_0 0x10 /* 0001|0000 */ |
# define XFER_PIO_4 0x0C /* 0000|1100 */ |
# define XFER_PIO_3 0x0B /* 0000|1011 */ |
# define XFER_PIO_2 0x0A /* 0000|1010 */ |
# define XFER_PIO_1 0x09 /* 0000|1001 */ |
# define XFER_PIO_0 0x08 /* 0000|1000 */ |
# define XFER_PIO_SLOW 0x00 /* 0000|0000 */ |
#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 Lenght 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 |
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 */ |
#define HDIO_SCAN_HWIF 0x0328 /* register and (re)scan interface */ |
#define HDIO_SET_NICE 0x0329 /* set nice flags */ |
#define HDIO_UNREGISTER_HWIF 0x032a /* unregister interface */ |
#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 */ |
#define HDIO_SET_IDE_SCSI 0x0338 |
#define HDIO_SET_SCSI_IDE 0x0339 |
#define __NEW_HD_DRIVE_ID |
/* |
* 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 |
*/ |
/* HDIO_GET_IDENTITY currently returns only words 0 through 70 */ |
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 |
*/ |
}; |
/* |
* 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_0 (2) /* when sure that it won't affect us */ |
#define IDE_NICE_1 (3) /* when probably won't affect us much */ |
#define IDE_NICE_2 (4) /* when we know it's on our expense */ |
#endif /* _LINUX_HDREG_H */ |
/shark/trunk/drivers/linuxc26/include/linux/ppp-comp.h |
---|
0,0 → 1,207 |
/* |
* ppp-comp.h - Definitions for doing PPP packet compression. |
* |
* Copyright (c) 1994 The Australian National University. |
* All rights reserved. |
* |
* 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. The Australian National University |
* makes no representations about the suitability of this software for |
* any purpose. |
* |
* IN NO EVENT SHALL THE AUSTRALIAN NATIONAL UNIVERSITY 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 |
* THE AUSTRALIAN NATIONAL UNIVERSITY HAVE BEEN ADVISED OF THE POSSIBILITY |
* OF SUCH DAMAGE. |
* |
* THE AUSTRALIAN NATIONAL UNIVERSITY 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 THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO |
* OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, |
* OR MODIFICATIONS. |
* |
* $Id: ppp-comp.h,v 1.1 2004-01-28 15:26:21 giacomo Exp $ |
*/ |
/* |
* ==FILEVERSION 980319== |
* |
* NOTE TO MAINTAINERS: |
* If you modify this file at all, please set the above date. |
* ppp-comp.h is shipped with a PPP distribution as well as with the kernel; |
* if everyone increases the FILEVERSION number above, then scripts |
* can do the right thing when deciding whether to install a new ppp-comp.h |
* file. Don't change the format of that line otherwise, so the |
* installation script can recognize it. |
*/ |
#ifndef _NET_PPP_COMP_H |
#define _NET_PPP_COMP_H |
struct module; |
/* |
* The following symbols control whether we include code for |
* various compression methods. |
*/ |
#ifndef DO_BSD_COMPRESS |
#define DO_BSD_COMPRESS 1 /* by default, include BSD-Compress */ |
#endif |
#ifndef DO_DEFLATE |
#define DO_DEFLATE 1 /* by default, include Deflate */ |
#endif |
#define DO_PREDICTOR_1 0 |
#define DO_PREDICTOR_2 0 |
/* |
* Structure giving methods for compression/decompression. |
*/ |
struct compressor { |
int compress_proto; /* CCP compression protocol number */ |
/* Allocate space for a compressor (transmit side) */ |
void *(*comp_alloc) (unsigned char *options, int opt_len); |
/* Free space used by a compressor */ |
void (*comp_free) (void *state); |
/* Initialize a compressor */ |
int (*comp_init) (void *state, unsigned char *options, |
int opt_len, int unit, int opthdr, int debug); |
/* Reset a compressor */ |
void (*comp_reset) (void *state); |
/* Compress a packet */ |
int (*compress) (void *state, unsigned char *rptr, |
unsigned char *obuf, int isize, int osize); |
/* Return compression statistics */ |
void (*comp_stat) (void *state, struct compstat *stats); |
/* Allocate space for a decompressor (receive side) */ |
void *(*decomp_alloc) (unsigned char *options, int opt_len); |
/* Free space used by a decompressor */ |
void (*decomp_free) (void *state); |
/* Initialize a decompressor */ |
int (*decomp_init) (void *state, unsigned char *options, |
int opt_len, int unit, int opthdr, int mru, |
int debug); |
/* Reset a decompressor */ |
void (*decomp_reset) (void *state); |
/* Decompress a packet. */ |
int (*decompress) (void *state, unsigned char *ibuf, int isize, |
unsigned char *obuf, int osize); |
/* Update state for an incompressible packet received */ |
void (*incomp) (void *state, unsigned char *ibuf, int icnt); |
/* Return decompression statistics */ |
void (*decomp_stat) (void *state, struct compstat *stats); |
/* Used in locking compressor modules */ |
struct module *owner; |
}; |
/* |
* The return value from decompress routine is the length of the |
* decompressed packet if successful, otherwise DECOMP_ERROR |
* or DECOMP_FATALERROR if an error occurred. |
* |
* We need to make this distinction so that we can disable certain |
* useful functionality, namely sending a CCP reset-request as a result |
* of an error detected after decompression. This is to avoid infringing |
* a patent held by Motorola. |
* Don't you just lurve software patents. |
*/ |
#define DECOMP_ERROR -1 /* error detected before decomp. */ |
#define DECOMP_FATALERROR -2 /* error detected after decomp. */ |
/* |
* 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 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 */ |
#ifdef __KERNEL__ |
extern int ppp_register_compressor(struct compressor *); |
extern void ppp_unregister_compressor(struct compressor *); |
#endif /* __KERNEL__ */ |
#endif /* _NET_PPP_COMP_H */ |
/shark/trunk/drivers/linuxc26/include/linux/swapops.h |
---|
0,0 → 1,70 |
/* |
* swapcache pages are stored in the swapper_space radix tree. We want to |
* get good packing density in that tree, so the index should be dense in |
* the low-order bits. |
* |
* We arrange the `type' and `offset' fields so that `type' is at the five |
* high-order bits of the smp_entry_t and `offset' is right-aligned in the |
* remaining bits. |
* |
* swp_entry_t's are *never* stored anywhere in their arch-dependent format. |
*/ |
#define SWP_TYPE_SHIFT(e) (sizeof(e.val) * 8 - MAX_SWAPFILES_SHIFT) |
#define SWP_OFFSET_MASK(e) ((1UL << SWP_TYPE_SHIFT(e)) - 1) |
/* |
* Store a type+offset into a swp_entry_t in an arch-independent format |
*/ |
static inline swp_entry_t swp_entry(unsigned type, pgoff_t offset) |
{ |
swp_entry_t ret; |
ret.val = ((unsigned long)type << SWP_TYPE_SHIFT(ret)) | |
(offset & SWP_OFFSET_MASK(ret)); |
return ret; |
} |
/* |
* Extract the `type' field from a swp_entry_t. The swp_entry_t is in |
* arch-independent format |
*/ |
static inline unsigned swp_type(swp_entry_t entry) |
{ |
return (entry.val >> SWP_TYPE_SHIFT(entry)) & |
((1 << MAX_SWAPFILES_SHIFT) - 1); |
} |
/* |
* Extract the `offset' field from a swp_entry_t. The swp_entry_t is in |
* arch-independent format |
*/ |
static inline pgoff_t swp_offset(swp_entry_t entry) |
{ |
return entry.val & SWP_OFFSET_MASK(entry); |
} |
/* |
* Convert the arch-dependent pte representation of a swp_entry_t into an |
* arch-independent swp_entry_t. |
*/ |
static inline swp_entry_t pte_to_swp_entry(pte_t pte) |
{ |
swp_entry_t arch_entry; |
BUG_ON(pte_file(pte)); |
arch_entry = __pte_to_swp_entry(pte); |
return swp_entry(__swp_type(arch_entry), __swp_offset(arch_entry)); |
} |
/* |
* Convert the arch-independent representation of a swp_entry_t into the |
* arch-dependent pte representation. |
*/ |
static inline pte_t swp_entry_to_pte(swp_entry_t entry) |
{ |
swp_entry_t arch_entry; |
arch_entry = __swp_entry(swp_type(entry), swp_offset(entry)); |
BUG_ON(pte_file(__swp_entry_to_pte(arch_entry))); |
return __swp_entry_to_pte(arch_entry); |
} |
/shark/trunk/drivers/linuxc26/include/linux/ncp_fs_sb.h |
---|
0,0 → 1,157 |
/* |
* ncp_fs_sb.h |
* |
* Copyright (C) 1995, 1996 by Volker Lendecke |
* |
*/ |
#ifndef _NCP_FS_SB |
#define _NCP_FS_SB |
#include <linux/types.h> |
#include <linux/ncp_mount.h> |
#include <linux/net.h> |
#ifdef __KERNEL__ |
#include <linux/workqueue.h> |
#define NCP_DEFAULT_OPTIONS 0 /* 2 for packet signatures */ |
struct sock; |
struct ncp_server { |
struct ncp_mount_data_kernel m; /* Nearly all of the mount data is of |
interest for us later, so we store |
it completely. */ |
__u8 name_space[NCP_NUMBER_OF_VOLUMES + 2]; |
struct file *ncp_filp; /* File pointer to ncp socket */ |
struct socket *ncp_sock;/* ncp socket */ |
struct file *info_filp; |
struct socket *info_sock; |
u8 sequence; |
u8 task; |
u16 connection; /* Remote connection number */ |
u8 completion; /* Status message from server */ |
u8 conn_status; /* Bit 4 = 1 ==> Server going down, no |
requests allowed anymore. |
Bit 0 = 1 ==> Server is down. */ |
int buffer_size; /* Negotiated bufsize */ |
int reply_size; /* Size of last reply */ |
int packet_size; |
unsigned char *packet; /* Here we prepare requests and |
receive replies */ |
int lock; /* To prevent mismatch in protocols. */ |
struct semaphore sem; |
int current_size; /* for packet preparation */ |
int has_subfunction; |
int ncp_reply_size; |
int root_setuped; |
/* info for packet signing */ |
int sign_wanted; /* 1=Server needs signed packets */ |
int sign_active; /* 0=don't do signing, 1=do */ |
char sign_root[8]; /* generated from password and encr. key */ |
char sign_last[16]; |
/* Authentication info: NDS or BINDERY, username */ |
struct { |
int auth_type; |
size_t object_name_len; |
void* object_name; |
int object_type; |
} auth; |
/* Password info */ |
struct { |
size_t len; |
void* data; |
} priv; |
/* nls info: codepage for volume and charset for I/O */ |
struct nls_table *nls_vol; |
struct nls_table *nls_io; |
/* maximum age in jiffies */ |
int dentry_ttl; |
/* miscellaneous */ |
unsigned int flags; |
spinlock_t requests_lock; /* Lock accesses to tx.requests, tx.creq and rcv.creq when STREAM mode */ |
void (*data_ready)(struct sock* sk, int len); |
void (*error_report)(struct sock* sk); |
void (*write_space)(struct sock* sk); /* STREAM mode only */ |
struct { |
struct work_struct tq; /* STREAM/DGRAM: data/error ready */ |
struct ncp_request_reply* creq; /* STREAM/DGRAM: awaiting reply from this request */ |
struct semaphore creq_sem; /* DGRAM only: lock accesses to rcv.creq */ |
unsigned int state; /* STREAM only: receiver state */ |
struct { |
__u32 magic __attribute__((packed)); |
__u32 len __attribute__((packed)); |
__u16 type __attribute__((packed)); |
__u16 p1 __attribute__((packed)); |
__u16 p2 __attribute__((packed)); |
__u16 p3 __attribute__((packed)); |
__u16 type2 __attribute__((packed)); |
} buf; /* STREAM only: temporary buffer */ |
unsigned char* ptr; /* STREAM only: pointer to data */ |
size_t len; /* STREAM only: length of data to receive */ |
} rcv; |
struct { |
struct list_head requests; /* STREAM only: queued requests */ |
struct work_struct tq; /* STREAM only: transmitter ready */ |
struct ncp_request_reply* creq; /* STREAM only: currently transmitted entry */ |
} tx; |
struct timer_list timeout_tm; /* DGRAM only: timeout timer */ |
struct work_struct timeout_tq; /* DGRAM only: associated queue, we run timers from process context */ |
int timeout_last; /* DGRAM only: current timeout length */ |
int timeout_retries; /* DGRAM only: retries left */ |
struct { |
size_t len; |
__u8 data[128]; |
} unexpected_packet; |
}; |
extern void ncp_tcp_rcv_proc(void *server); |
extern void ncp_tcp_tx_proc(void *server); |
extern void ncpdgram_rcv_proc(void *server); |
extern void ncpdgram_timeout_proc(void *server); |
extern void ncpdgram_timeout_call(unsigned long server); |
extern void ncp_tcp_data_ready(struct sock* sk, int len); |
extern void ncp_tcp_write_space(struct sock* sk); |
extern void ncp_tcp_error_report(struct sock* sk); |
#define NCP_FLAG_UTF8 1 |
#define NCP_CLR_FLAG(server, flag) ((server)->flags &= ~(flag)) |
#define NCP_SET_FLAG(server, flag) ((server)->flags |= (flag)) |
#define NCP_IS_FLAG(server, flag) ((server)->flags & (flag)) |
static inline int ncp_conn_valid(struct ncp_server *server) |
{ |
return ((server->conn_status & 0x11) == 0); |
} |
static inline void ncp_invalidate_conn(struct ncp_server *server) |
{ |
server->conn_status |= 0x01; |
} |
#endif /* __KERNEL__ */ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/nfs4_mount.h |
---|
0,0 → 1,70 |
#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* 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* host_addr; /* 1 */ |
/* Transport protocol to use */ |
int proto; /* 1 */ |
/* Pseudo-flavours to use for authentication. See RFC2623 */ |
int auth_flavourlen; /* 1 */ |
int *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_FLAGMASK 0xFFFF |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/ac97_codec.h |
---|
0,0 → 1,318 |
#ifndef _AC97_CODEC_H_ |
#define _AC97_CODEC_H_ |
#include <linux/types.h> |
#include <linux/soundcard.h> |
/* AC97 1.0 */ |
#define AC97_RESET 0x0000 // |
#define AC97_MASTER_VOL_STEREO 0x0002 // Line Out |
#define AC97_HEADPHONE_VOL 0x0004 // |
#define AC97_MASTER_VOL_MONO 0x0006 // TAD Output |
#define AC97_MASTER_TONE 0x0008 // |
#define AC97_PCBEEP_VOL 0x000a // none |
#define AC97_PHONE_VOL 0x000c // TAD Input (mono) |
#define AC97_MIC_VOL 0x000e // MIC Input (mono) |
#define AC97_LINEIN_VOL 0x0010 // Line Input (stereo) |
#define AC97_CD_VOL 0x0012 // CD Input (stereo) |
#define AC97_VIDEO_VOL 0x0014 // none |
#define AC97_AUX_VOL 0x0016 // Aux Input (stereo) |
#define AC97_PCMOUT_VOL 0x0018 // Wave Output (stereo) |
#define AC97_RECORD_SELECT 0x001a // |
#define AC97_RECORD_GAIN 0x001c |
#define AC97_RECORD_GAIN_MIC 0x001e |
#define AC97_GENERAL_PURPOSE 0x0020 |
#define AC97_3D_CONTROL 0x0022 |
#define AC97_MODEM_RATE 0x0024 |
#define AC97_POWER_CONTROL 0x0026 |
/* AC'97 2.0 */ |
#define AC97_EXTENDED_ID 0x0028 /* Extended Audio ID */ |
#define AC97_EXTENDED_STATUS 0x002A /* Extended Audio Status */ |
#define AC97_PCM_FRONT_DAC_RATE 0x002C /* PCM Front DAC Rate */ |
#define AC97_PCM_SURR_DAC_RATE 0x002E /* PCM Surround DAC Rate */ |
#define AC97_PCM_LFE_DAC_RATE 0x0030 /* PCM LFE DAC Rate */ |
#define AC97_PCM_LR_ADC_RATE 0x0032 /* PCM LR ADC Rate */ |
#define AC97_PCM_MIC_ADC_RATE 0x0034 /* PCM MIC ADC Rate */ |
#define AC97_CENTER_LFE_MASTER 0x0036 /* Center + LFE Master Volume */ |
#define AC97_SURROUND_MASTER 0x0038 /* Surround (Rear) Master Volume */ |
#define AC97_RESERVED_3A 0x003A /* Reserved in AC '97 < 2.2 */ |
/* AC'97 2.2 */ |
#define AC97_SPDIF_CONTROL 0x003A /* S/PDIF Control */ |
/* range 0x3c-0x58 - MODEM */ |
#define AC97_EXTENDED_MODEM_ID 0x003C |
#define AC97_EXTEND_MODEM_STAT 0x003E |
#define AC97_LINE1_RATE 0x0040 |
#define AC97_LINE2_RATE 0x0042 |
#define AC97_HANDSET_RATE 0x0044 |
#define AC97_LINE1_LEVEL 0x0046 |
#define AC97_LINE2_LEVEL 0x0048 |
#define AC97_HANDSET_LEVEL 0x004A |
#define AC97_GPIO_CONFIG 0x004C |
#define AC97_GPIO_POLARITY 0x004E |
#define AC97_GPIO_STICKY 0x0050 |
#define AC97_GPIO_WAKE_UP 0x0052 |
#define AC97_GPIO_STATUS 0x0054 |
#define AC97_MISC_MODEM_STAT 0x0056 |
#define AC97_RESERVED_58 0x0058 |
/* registers 0x005a - 0x007a are vendor reserved */ |
#define AC97_VENDOR_ID1 0x007c |
#define AC97_VENDOR_ID2 0x007e |
/* volume control bit defines */ |
#define AC97_MUTE 0x8000 |
#define AC97_MICBOOST 0x0040 |
#define AC97_LEFTVOL 0x3f00 |
#define AC97_RIGHTVOL 0x003f |
/* record mux defines */ |
#define AC97_RECMUX_MIC 0x0000 |
#define AC97_RECMUX_CD 0x0101 |
#define AC97_RECMUX_VIDEO 0x0202 |
#define AC97_RECMUX_AUX 0x0303 |
#define AC97_RECMUX_LINE 0x0404 |
#define AC97_RECMUX_STEREO_MIX 0x0505 |
#define AC97_RECMUX_MONO_MIX 0x0606 |
#define AC97_RECMUX_PHONE 0x0707 |
/* general purpose register bit defines */ |
#define AC97_GP_LPBK 0x0080 /* Loopback mode */ |
#define AC97_GP_MS 0x0100 /* Mic Select 0=Mic1, 1=Mic2 */ |
#define AC97_GP_MIX 0x0200 /* Mono output select 0=Mix, 1=Mic */ |
#define AC97_GP_RLBK 0x0400 /* Remote Loopback - Modem line codec */ |
#define AC97_GP_LLBK 0x0800 /* Local Loopback - Modem Line codec */ |
#define AC97_GP_LD 0x1000 /* Loudness 1=on */ |
#define AC97_GP_3D 0x2000 /* 3D Enhancement 1=on */ |
#define AC97_GP_ST 0x4000 /* Stereo Enhancement 1=on */ |
#define AC97_GP_POP 0x8000 /* Pcm Out Path, 0=pre 3D, 1=post 3D */ |
/* extended audio status and control bit defines */ |
#define AC97_EA_VRA 0x0001 /* Variable bit rate enable bit */ |
#define AC97_EA_DRA 0x0002 /* Double-rate audio enable bit */ |
#define AC97_EA_SPDIF 0x0004 /* S/PDIF Enable bit */ |
#define AC97_EA_VRM 0x0008 /* Variable bit rate for MIC enable bit */ |
#define AC97_EA_CDAC 0x0040 /* PCM Center DAC is ready (Read only) */ |
#define AC97_EA_SDAC 0x0040 /* PCM Surround DACs are ready (Read only) */ |
#define AC97_EA_LDAC 0x0080 /* PCM LFE DAC is ready (Read only) */ |
#define AC97_EA_MDAC 0x0100 /* MIC ADC is ready (Read only) */ |
#define AC97_EA_SPCV 0x0400 /* S/PDIF configuration valid (Read only) */ |
#define AC97_EA_PRI 0x0800 /* Turns the PCM Center DAC off */ |
#define AC97_EA_PRJ 0x1000 /* Turns the PCM Surround DACs off */ |
#define AC97_EA_PRK 0x2000 /* Turns the PCM LFE DAC off */ |
#define AC97_EA_PRL 0x4000 /* Turns the MIC ADC off */ |
#define AC97_EA_SLOT_MASK 0xffcf /* Mask for slot assignment bits */ |
#define AC97_EA_SPSA_3_4 0x0000 /* Slot assigned to 3 & 4 */ |
#define AC97_EA_SPSA_7_8 0x0010 /* Slot assigned to 7 & 8 */ |
#define AC97_EA_SPSA_6_9 0x0020 /* Slot assigned to 6 & 9 */ |
#define AC97_EA_SPSA_10_11 0x0030 /* Slot assigned to 10 & 11 */ |
/* S/PDIF control bit defines */ |
#define AC97_SC_PRO 0x0001 /* Professional status */ |
#define AC97_SC_NAUDIO 0x0002 /* Non audio stream */ |
#define AC97_SC_COPY 0x0004 /* Copyright status */ |
#define AC97_SC_PRE 0x0008 /* Preemphasis status */ |
#define AC97_SC_CC_MASK 0x07f0 /* Category Code mask */ |
#define AC97_SC_L 0x0800 /* Generation Level status */ |
#define AC97_SC_SPSR_MASK 0xcfff /* S/PDIF Sample Rate bits */ |
#define AC97_SC_SPSR_44K 0x0000 /* Use 44.1kHz Sample rate */ |
#define AC97_SC_SPSR_48K 0x2000 /* Use 48kHz Sample rate */ |
#define AC97_SC_SPSR_32K 0x3000 /* Use 32kHz Sample rate */ |
#define AC97_SC_DRS 0x4000 /* Double Rate S/PDIF */ |
#define AC97_SC_V 0x8000 /* Validity status */ |
/* powerdown control and status bit defines */ |
/* status */ |
#define AC97_PWR_MDM 0x0010 /* Modem section ready */ |
#define AC97_PWR_REF 0x0008 /* Vref nominal */ |
#define AC97_PWR_ANL 0x0004 /* Analog section ready */ |
#define AC97_PWR_DAC 0x0002 /* DAC section ready */ |
#define AC97_PWR_ADC 0x0001 /* ADC section ready */ |
/* control */ |
#define AC97_PWR_PR0 0x0100 /* ADC and Mux powerdown */ |
#define AC97_PWR_PR1 0x0200 /* DAC powerdown */ |
#define AC97_PWR_PR2 0x0400 /* Output mixer powerdown (Vref on) */ |
#define AC97_PWR_PR3 0x0800 /* Output mixer powerdown (Vref off) */ |
#define AC97_PWR_PR4 0x1000 /* AC-link powerdown */ |
#define AC97_PWR_PR5 0x2000 /* Internal Clk disable */ |
#define AC97_PWR_PR6 0x4000 /* HP amp powerdown */ |
#define AC97_PWR_PR7 0x8000 /* Modem off - if supported */ |
/* extended audio ID register bit defines */ |
#define AC97_EXTID_VRA 0x0001 |
#define AC97_EXTID_DRA 0x0002 |
#define AC97_EXTID_SPDIF 0x0004 |
#define AC97_EXTID_VRM 0x0008 |
#define AC97_EXTID_DSA0 0x0010 |
#define AC97_EXTID_DSA1 0x0020 |
#define AC97_EXTID_CDAC 0x0040 |
#define AC97_EXTID_SDAC 0x0080 |
#define AC97_EXTID_LDAC 0x0100 |
#define AC97_EXTID_AMAP 0x0200 |
#define AC97_EXTID_REV0 0x0400 |
#define AC97_EXTID_REV1 0x0800 |
#define AC97_EXTID_ID0 0x4000 |
#define AC97_EXTID_ID1 0x8000 |
/* extended status register bit defines */ |
#define AC97_EXTSTAT_VRA 0x0001 |
#define AC97_EXTSTAT_DRA 0x0002 |
#define AC97_EXTSTAT_SPDIF 0x0004 |
#define AC97_EXTSTAT_VRM 0x0008 |
#define AC97_EXTSTAT_SPSA0 0x0010 |
#define AC97_EXTSTAT_SPSA1 0x0020 |
#define AC97_EXTSTAT_CDAC 0x0040 |
#define AC97_EXTSTAT_SDAC 0x0080 |
#define AC97_EXTSTAT_LDAC 0x0100 |
#define AC97_EXTSTAT_MADC 0x0200 |
#define AC97_EXTSTAT_SPCV 0x0400 |
#define AC97_EXTSTAT_PRI 0x0800 |
#define AC97_EXTSTAT_PRJ 0x1000 |
#define AC97_EXTSTAT_PRK 0x2000 |
#define AC97_EXTSTAT_PRL 0x4000 |
/* useful power states */ |
#define AC97_PWR_D0 0x0000 /* everything on */ |
#define AC97_PWR_D1 AC97_PWR_PR0|AC97_PWR_PR1|AC97_PWR_PR4 |
#define AC97_PWR_D2 AC97_PWR_PR0|AC97_PWR_PR1|AC97_PWR_PR2|AC97_PWR_PR3|AC97_PWR_PR4 |
#define AC97_PWR_D3 AC97_PWR_PR0|AC97_PWR_PR1|AC97_PWR_PR2|AC97_PWR_PR3|AC97_PWR_PR4 |
#define AC97_PWR_ANLOFF AC97_PWR_PR2|AC97_PWR_PR3 /* analog section off */ |
/* Total number of defined registers. */ |
#define AC97_REG_CNT 64 |
/* OSS interface to the ac97s.. */ |
#define AC97_STEREO_MASK (SOUND_MASK_VOLUME|SOUND_MASK_PCM|\ |
SOUND_MASK_LINE|SOUND_MASK_CD|\ |
SOUND_MASK_ALTPCM|SOUND_MASK_IGAIN|\ |
SOUND_MASK_LINE1|SOUND_MASK_VIDEO) |
#define AC97_SUPPORTED_MASK (AC97_STEREO_MASK | \ |
SOUND_MASK_BASS|SOUND_MASK_TREBLE|\ |
SOUND_MASK_SPEAKER|SOUND_MASK_MIC|\ |
SOUND_MASK_PHONEIN|SOUND_MASK_PHONEOUT) |
#define AC97_RECORD_MASK (SOUND_MASK_MIC|\ |
SOUND_MASK_CD|SOUND_MASK_IGAIN|SOUND_MASK_VIDEO|\ |
SOUND_MASK_LINE1| SOUND_MASK_LINE|\ |
SOUND_MASK_PHONEIN) |
/* original check is not good enough in case FOO is greater than |
* SOUND_MIXER_NRDEVICES because the supported_mixers has exactly |
* SOUND_MIXER_NRDEVICES elements. |
* before matching the given mixer against the bitmask in supported_mixers we |
* check if mixer number exceeds maximum allowed size which is as mentioned |
* above SOUND_MIXER_NRDEVICES */ |
#define supported_mixer(CODEC,FOO) ((FOO >= 0) && \ |
(FOO < SOUND_MIXER_NRDEVICES) && \ |
(CODEC)->supported_mixers & (1<<FOO) ) |
struct ac97_codec { |
/* Linked list of codecs */ |
struct list_head list; |
/* AC97 controller connected with */ |
void *private_data; |
char *name; |
int id; |
int dev_mixer; |
int type; |
u32 model; |
int modem:1; |
struct ac97_ops *codec_ops; |
/* controller specific lower leverl ac97 accessing routines. |
must be re-entrant safe */ |
u16 (*codec_read) (struct ac97_codec *codec, u8 reg); |
void (*codec_write) (struct ac97_codec *codec, u8 reg, u16 val); |
/* Wait for codec-ready. Ok to sleep here. */ |
void (*codec_wait) (struct ac97_codec *codec); |
/* callback used by helper drivers for interesting ac97 setups */ |
void (*codec_unregister) (struct ac97_codec *codec); |
struct ac97_driver *driver; |
void *driver_private; /* Private data for the driver */ |
spinlock_t lock; |
/* OSS mixer masks */ |
int modcnt; |
int supported_mixers; |
int stereo_mixers; |
int record_sources; |
/* Property flags */ |
int flags; |
int bit_resolution; |
/* OSS mixer interface */ |
int (*read_mixer) (struct ac97_codec *codec, int oss_channel); |
void (*write_mixer)(struct ac97_codec *codec, int oss_channel, |
unsigned int left, unsigned int right); |
int (*recmask_io) (struct ac97_codec *codec, int rw, int mask); |
int (*mixer_ioctl)(struct ac97_codec *codec, unsigned int cmd, unsigned long arg); |
/* saved OSS mixer states */ |
unsigned int mixer_state[SOUND_MIXER_NRDEVICES]; |
/* Software Modem interface */ |
int (*modem_ioctl)(struct ac97_codec *codec, unsigned int cmd, unsigned long arg); |
}; |
/* |
* Operation structures for each known AC97 chip |
*/ |
struct ac97_ops |
{ |
/* Initialise */ |
int (*init)(struct ac97_codec *c); |
/* Amplifier control */ |
int (*amplifier)(struct ac97_codec *codec, int on); |
/* Digital mode control */ |
int (*digital)(struct ac97_codec *codec, int slots, int rate, int mode); |
#define AUDIO_DIGITAL 0x8000 |
#define AUDIO_PRO 0x4000 |
#define AUDIO_DRS 0x2000 |
#define AUDIO_CCMASK 0x003F |
#define AC97_DELUDED_MODEM 1 /* Audio codec reports its a modem */ |
#define AC97_NO_PCM_VOLUME 2 /* Volume control is missing */ |
}; |
extern int ac97_read_proc (char *page_out, char **start, off_t off, |
int count, int *eof, void *data); |
extern int ac97_probe_codec(struct ac97_codec *); |
extern unsigned int ac97_set_adc_rate(struct ac97_codec *codec, unsigned int rate); |
extern unsigned int ac97_set_dac_rate(struct ac97_codec *codec, unsigned int rate); |
extern int ac97_save_state(struct ac97_codec *codec); |
extern int ac97_restore_state(struct ac97_codec *codec); |
extern struct ac97_codec *ac97_alloc_codec(void); |
extern void ac97_release_codec(struct ac97_codec *codec); |
struct ac97_driver { |
struct list_head list; |
char *name; |
u32 codec_id; |
u32 codec_mask; |
int (*probe) (struct ac97_codec *codec, struct ac97_driver *driver); |
void (*remove) (struct ac97_codec *codec, struct ac97_driver *driver); |
}; |
extern int ac97_register_driver(struct ac97_driver *driver); |
extern void ac97_unregister_driver(struct ac97_driver *driver); |
#endif /* _AC97_CODEC_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/smb_mount.h |
---|
0,0 → 1,62 |
/* |
* smb_mount.h |
* |
* Copyright (C) 1995, 1996 by Paal-Kr. Engstad and Volker Lendecke |
* Copyright (C) 1997 by Volker Lendecke |
* |
*/ |
#ifndef _LINUX_SMB_MOUNT_H |
#define _LINUX_SMB_MOUNT_H |
#include <linux/types.h> |
#define SMB_MOUNT_VERSION 6 |
struct smb_mount_data { |
int version; |
__kernel_uid_t mounted_uid; /* Who may umount() this filesystem? */ |
__kernel_uid_t uid; |
__kernel_gid_t gid; |
__kernel_mode_t file_mode; |
__kernel_mode_t dir_mode; |
}; |
#ifdef __KERNEL__ |
/* "vers" in big-endian */ |
#define SMB_MOUNT_ASCII 0x76657273 |
#define SMB_MOUNT_OLDVERSION 6 |
#undef SMB_MOUNT_VERSION |
#define SMB_MOUNT_VERSION 7 |
/* flags */ |
#define SMB_MOUNT_WIN95 0x0001 /* Win 95 server */ |
#define SMB_MOUNT_OLDATTR 0x0002 /* Use core getattr (Win 95 speedup) */ |
#define SMB_MOUNT_DIRATTR 0x0004 /* Use find_first for getattr */ |
#define SMB_MOUNT_CASE 0x0008 /* Be case sensitive */ |
#define SMB_MOUNT_UNICODE 0x0010 /* Server talks unicode */ |
struct smb_mount_data_kernel { |
int version; |
uid_t mounted_uid; /* Who may umount() this filesystem? */ |
uid_t uid; |
gid_t gid; |
mode_t file_mode; |
mode_t dir_mode; |
u32 flags; |
/* maximum age in jiffies (inode, dentry and dircache) */ |
int ttl; |
struct smb_nls_codepage codepage; |
}; |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/page-flags.h |
---|
0,0 → 1,292 |
/* |
* Macros for manipulating and testing page->flags |
*/ |
#ifndef PAGE_FLAGS_H |
#define PAGE_FLAGS_H |
#include <linux/percpu.h> |
#include <linux/cache.h> |
#include <asm/pgtable.h> |
/* |
* Various page->flags bits: |
* |
* PG_reserved is set for special pages, which can never be swapped out. Some |
* of them might not even exist (eg empty_bad_page)... |
* |
* The PG_private bitflag is set if page->private contains a valid value. |
* |
* During disk I/O, PG_locked is used. This bit is set before I/O and |
* reset when I/O completes. page_waitqueue(page) is a wait queue of all tasks |
* waiting for the I/O on this page to complete. |
* |
* PG_uptodate tells whether the page's contents is valid. When a read |
* completes, the page becomes uptodate, unless a disk I/O error happened. |
* |
* For choosing which pages to swap out, inode pages carry a PG_referenced bit, |
* which is set any time the system accesses that page through the (mapping, |
* index) hash table. This referenced bit, together with the referenced bit |
* in the page tables, is used to manipulate page->age and move the page across |
* the active, inactive_dirty and inactive_clean lists. |
* |
* Note that the referenced bit, the page->lru list_head and the active, |
* inactive_dirty and inactive_clean lists are protected by the |
* zone->lru_lock, and *NOT* by the usual PG_locked bit! |
* |
* PG_error is set to indicate that an I/O error occurred on this page. |
* |
* PG_arch_1 is an architecture specific page state bit. The generic code |
* guarantees that this bit is cleared for a page when it first is entered into |
* the page cache. |
* |
* PG_highmem pages are not permanently mapped into the kernel virtual address |
* space, they need to be kmapped separately for doing IO on the pages. The |
* struct page (these bits with information) are always mapped into kernel |
* address space... |
*/ |
/* |
* Don't use the *_dontuse flags. Use the macros. Otherwise you'll break |
* locked- and dirty-page accounting. The top eight bits of page->flags are |
* used for page->zone, so putting flag bits there doesn't work. |
*/ |
#define PG_locked 0 /* Page is locked. Don't touch. */ |
#define PG_error 1 |
#define PG_referenced 2 |
#define PG_uptodate 3 |
#define PG_dirty 4 |
#define PG_lru 5 |
#define PG_active 6 |
#define PG_slab 7 /* slab debug (Suparna wants this) */ |
#define PG_highmem 8 |
#define PG_checked 9 /* kill me in 2.5.<early>. */ |
#define PG_arch_1 10 |
#define PG_reserved 11 |
#define PG_private 12 /* Has something at ->private */ |
#define PG_writeback 13 /* Page is under writeback */ |
#define PG_nosave 14 /* Used for system suspend/resume */ |
#define PG_chainlock 15 /* lock bit for ->pte_chain */ |
#define PG_direct 16 /* ->pte_chain points directly at pte */ |
#define PG_mappedtodisk 17 /* Has blocks allocated on-disk */ |
#define PG_reclaim 18 /* To be reclaimed asap */ |
#define PG_compound 19 /* Part of a compound page */ |
/* |
* Global page accounting. One instance per CPU. Only unsigned longs are |
* allowed. |
*/ |
struct page_state { |
unsigned long nr_dirty; /* Dirty writeable pages */ |
unsigned long nr_writeback; /* Pages under writeback */ |
unsigned long nr_unstable; /* NFS unstable pages */ |
unsigned long nr_page_table_pages;/* Pages used for pagetables */ |
unsigned long nr_mapped; /* mapped into pagetables */ |
unsigned long nr_slab; /* In slab */ |
#define GET_PAGE_STATE_LAST nr_slab |
/* |
* The below are zeroed by get_page_state(). Use get_full_page_state() |
* to add up all these. |
*/ |
unsigned long pgpgin; /* Disk reads */ |
unsigned long pgpgout; /* Disk writes */ |
unsigned long pswpin; /* swap reads */ |
unsigned long pswpout; /* swap writes */ |
unsigned long pgalloc; /* page allocations */ |
unsigned long pgfree; /* page freeings */ |
unsigned long pgactivate; /* pages moved inactive->active */ |
unsigned long pgdeactivate; /* pages moved active->inactive */ |
unsigned long pgfault; /* faults (major+minor) */ |
unsigned long pgmajfault; /* faults (major only) */ |
unsigned long pgscan; /* pages scanned by page reclaim */ |
unsigned long pgrefill; /* inspected in refill_inactive_zone */ |
unsigned long pgsteal; /* total pages reclaimed */ |
unsigned long pginodesteal; /* pages reclaimed via inode freeing */ |
unsigned long kswapd_steal; /* pages reclaimed by kswapd */ |
unsigned long kswapd_inodesteal;/* reclaimed via kswapd inode freeing */ |
unsigned long pageoutrun; /* kswapd's calls to page reclaim */ |
unsigned long allocstall; /* direct reclaim calls */ |
unsigned long pgrotated; /* pages rotated to tail of the LRU */ |
} ____cacheline_aligned; |
DECLARE_PER_CPU(struct page_state, page_states); |
extern void get_page_state(struct page_state *ret); |
extern void get_full_page_state(struct page_state *ret); |
#define mod_page_state(member, delta) \ |
do { \ |
unsigned long flags; \ |
local_irq_save(flags); \ |
__get_cpu_var(page_states).member += (delta); \ |
local_irq_restore(flags); \ |
} while (0) |
#define inc_page_state(member) mod_page_state(member, 1UL) |
#define dec_page_state(member) mod_page_state(member, 0UL - 1) |
#define sub_page_state(member,delta) mod_page_state(member, 0UL - (delta)) |
/* |
* Manipulation of page state flags |
*/ |
#define PageLocked(page) \ |
test_bit(PG_locked, &(page)->flags) |
#define SetPageLocked(page) \ |
set_bit(PG_locked, &(page)->flags) |
#define TestSetPageLocked(page) \ |
test_and_set_bit(PG_locked, &(page)->flags) |
#define ClearPageLocked(page) \ |
clear_bit(PG_locked, &(page)->flags) |
#define TestClearPageLocked(page) \ |
test_and_clear_bit(PG_locked, &(page)->flags) |
#define PageError(page) test_bit(PG_error, &(page)->flags) |
#define SetPageError(page) set_bit(PG_error, &(page)->flags) |
#define ClearPageError(page) clear_bit(PG_error, &(page)->flags) |
#define PageReferenced(page) test_bit(PG_referenced, &(page)->flags) |
#define SetPageReferenced(page) set_bit(PG_referenced, &(page)->flags) |
#define ClearPageReferenced(page) clear_bit(PG_referenced, &(page)->flags) |
#define TestClearPageReferenced(page) test_and_clear_bit(PG_referenced, &(page)->flags) |
#ifndef arch_set_page_uptodate |
#define arch_set_page_uptodate(page) do { } while (0) |
#endif |
#define PageUptodate(page) test_bit(PG_uptodate, &(page)->flags) |
#define SetPageUptodate(page) \ |
do { \ |
arch_set_page_uptodate(page); \ |
set_bit(PG_uptodate, &(page)->flags); \ |
} while (0) |
#define ClearPageUptodate(page) clear_bit(PG_uptodate, &(page)->flags) |
#define PageDirty(page) test_bit(PG_dirty, &(page)->flags) |
#define SetPageDirty(page) set_bit(PG_dirty, &(page)->flags) |
#define TestSetPageDirty(page) test_and_set_bit(PG_dirty, &(page)->flags) |
#define ClearPageDirty(page) clear_bit(PG_dirty, &(page)->flags) |
#define TestClearPageDirty(page) test_and_clear_bit(PG_dirty, &(page)->flags) |
#define SetPageLRU(page) set_bit(PG_lru, &(page)->flags) |
#define PageLRU(page) test_bit(PG_lru, &(page)->flags) |
#define TestSetPageLRU(page) test_and_set_bit(PG_lru, &(page)->flags) |
#define TestClearPageLRU(page) test_and_clear_bit(PG_lru, &(page)->flags) |
#define PageActive(page) test_bit(PG_active, &(page)->flags) |
#define SetPageActive(page) set_bit(PG_active, &(page)->flags) |
#define ClearPageActive(page) clear_bit(PG_active, &(page)->flags) |
#define TestClearPageActive(page) test_and_clear_bit(PG_active, &(page)->flags) |
#define TestSetPageActive(page) test_and_set_bit(PG_active, &(page)->flags) |
#define PageSlab(page) test_bit(PG_slab, &(page)->flags) |
#define SetPageSlab(page) set_bit(PG_slab, &(page)->flags) |
#define ClearPageSlab(page) clear_bit(PG_slab, &(page)->flags) |
#define TestClearPageSlab(page) test_and_clear_bit(PG_slab, &(page)->flags) |
#define TestSetPageSlab(page) test_and_set_bit(PG_slab, &(page)->flags) |
#ifdef CONFIG_HIGHMEM |
#define PageHighMem(page) test_bit(PG_highmem, &(page)->flags) |
#else |
#define PageHighMem(page) 0 /* needed to optimize away at compile time */ |
#endif |
#define PageChecked(page) test_bit(PG_checked, &(page)->flags) |
#define SetPageChecked(page) set_bit(PG_checked, &(page)->flags) |
#define ClearPageChecked(page) clear_bit(PG_checked, &(page)->flags) |
#define PageReserved(page) test_bit(PG_reserved, &(page)->flags) |
#define SetPageReserved(page) set_bit(PG_reserved, &(page)->flags) |
#define ClearPageReserved(page) clear_bit(PG_reserved, &(page)->flags) |
#define SetPagePrivate(page) set_bit(PG_private, &(page)->flags) |
#define ClearPagePrivate(page) clear_bit(PG_private, &(page)->flags) |
#define PagePrivate(page) test_bit(PG_private, &(page)->flags) |
#define PageWriteback(page) test_bit(PG_writeback, &(page)->flags) |
#define SetPageWriteback(page) \ |
do { \ |
if (!test_and_set_bit(PG_writeback, \ |
&(page)->flags)) \ |
inc_page_state(nr_writeback); \ |
} while (0) |
#define TestSetPageWriteback(page) \ |
({ \ |
int ret; \ |
ret = test_and_set_bit(PG_writeback, \ |
&(page)->flags); \ |
if (!ret) \ |
inc_page_state(nr_writeback); \ |
ret; \ |
}) |
#define ClearPageWriteback(page) \ |
do { \ |
if (test_and_clear_bit(PG_writeback, \ |
&(page)->flags)) \ |
dec_page_state(nr_writeback); \ |
} while (0) |
#define TestClearPageWriteback(page) \ |
({ \ |
int ret; \ |
ret = test_and_clear_bit(PG_writeback, \ |
&(page)->flags); \ |
if (ret) \ |
dec_page_state(nr_writeback); \ |
ret; \ |
}) |
#define PageNosave(page) test_bit(PG_nosave, &(page)->flags) |
#define SetPageNosave(page) set_bit(PG_nosave, &(page)->flags) |
#define TestSetPageNosave(page) test_and_set_bit(PG_nosave, &(page)->flags) |
#define ClearPageNosave(page) clear_bit(PG_nosave, &(page)->flags) |
#define TestClearPageNosave(page) test_and_clear_bit(PG_nosave, &(page)->flags) |
#define PageDirect(page) test_bit(PG_direct, &(page)->flags) |
#define SetPageDirect(page) set_bit(PG_direct, &(page)->flags) |
#define TestSetPageDirect(page) test_and_set_bit(PG_direct, &(page)->flags) |
#define ClearPageDirect(page) clear_bit(PG_direct, &(page)->flags) |
#define TestClearPageDirect(page) test_and_clear_bit(PG_direct, &(page)->flags) |
#define PageMappedToDisk(page) test_bit(PG_mappedtodisk, &(page)->flags) |
#define SetPageMappedToDisk(page) set_bit(PG_mappedtodisk, &(page)->flags) |
#define ClearPageMappedToDisk(page) clear_bit(PG_mappedtodisk, &(page)->flags) |
#define PageReclaim(page) test_bit(PG_reclaim, &(page)->flags) |
#define SetPageReclaim(page) set_bit(PG_reclaim, &(page)->flags) |
#define ClearPageReclaim(page) clear_bit(PG_reclaim, &(page)->flags) |
#define TestClearPageReclaim(page) test_and_clear_bit(PG_reclaim, &(page)->flags) |
#define PageCompound(page) test_bit(PG_compound, &(page)->flags) |
#define SetPageCompound(page) set_bit(PG_compound, &(page)->flags) |
#define ClearPageCompound(page) clear_bit(PG_compound, &(page)->flags) |
/* |
* The PageSwapCache predicate doesn't use a PG_flag at this time, |
* but it may again do so one day. |
*/ |
#ifdef CONFIG_SWAP |
extern struct address_space swapper_space; |
#define PageSwapCache(page) ((page)->mapping == &swapper_space) |
#else |
#define PageSwapCache(page) 0 |
#endif |
struct page; /* forward declaration */ |
int test_clear_page_dirty(struct page *page); |
static inline void clear_page_dirty(struct page *page) |
{ |
test_clear_page_dirty(page); |
} |
#endif /* PAGE_FLAGS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/font.h |
---|
0,0 → 1,53 |
/* |
* font.h -- `Soft' font definitions |
* |
* Created 1995 by Geert Uytterhoeven |
* |
* 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. |
*/ |
#ifndef _VIDEO_FONT_H |
#define _VIDEO_FONT_H |
#include <linux/types.h> |
struct font_desc { |
int idx; |
char *name; |
int width, height; |
void *data; |
int pref; |
}; |
#define VGA8x8_IDX 0 |
#define VGA8x16_IDX 1 |
#define PEARL8x8_IDX 2 |
#define VGA6x11_IDX 3 |
#define SUN8x16_IDX 4 |
#define SUN12x22_IDX 5 |
#define ACORN8x8_IDX 6 |
#define MINI4x6_IDX 7 |
extern struct font_desc font_vga_8x8, |
font_vga_8x16, |
font_pearl_8x8, |
font_vga_6x11, |
font_sun_8x16, |
font_sun_12x22, |
font_acorn_8x8, |
font_mini_4x6; |
/* Find a font with a specific name */ |
extern struct font_desc *find_font(char *name); |
/* Get the default font for a specific screen size */ |
extern struct font_desc *get_default_font(int xres, int yres); |
/* Max. length for the name of a predefined font */ |
#define MAX_FONT_NAME 32 |
#endif /* _VIDEO_FONT_H */ |
/shark/trunk/drivers/linuxc26/include/linux/zutil.h |
---|
0,0 → 1,119 |
/* zutil.h -- internal interface and configuration of the compression library |
* Copyright (C) 1995-1998 Jean-loup Gailly. |
* For conditions of distribution and use, see copyright notice in zlib.h |
*/ |
/* WARNING: this file should *not* be used by applications. It is |
part of the implementation of the compression library and is |
subject to change. Applications should only use zlib.h. |
*/ |
/* @(#) $Id: zutil.h,v 1.1 2004-01-28 15:27:06 giacomo Exp $ */ |
#ifndef _Z_UTIL_H |
#define _Z_UTIL_H |
#include <linux/zlib.h> |
#include <linux/string.h> |
#include <linux/errno.h> |
#include <linux/kernel.h> |
typedef unsigned char uch; |
typedef unsigned short ush; |
typedef unsigned long ulg; |
/* common constants */ |
#ifndef DEF_WBITS |
# define DEF_WBITS MAX_WBITS |
#endif |
/* default windowBits for decompression. MAX_WBITS is for compression only */ |
#if MAX_MEM_LEVEL >= 8 |
# define DEF_MEM_LEVEL 8 |
#else |
# define DEF_MEM_LEVEL MAX_MEM_LEVEL |
#endif |
/* default memLevel */ |
#define STORED_BLOCK 0 |
#define STATIC_TREES 1 |
#define DYN_TREES 2 |
/* The three kinds of block type */ |
#define MIN_MATCH 3 |
#define MAX_MATCH 258 |
/* The minimum and maximum match lengths */ |
#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ |
/* target dependencies */ |
/* Common defaults */ |
#ifndef OS_CODE |
# define OS_CODE 0x03 /* assume Unix */ |
#endif |
/* functions */ |
typedef uLong (*check_func) (uLong check, const Byte *buf, |
uInt len); |
/* checksum functions */ |
#define BASE 65521L /* largest prime smaller than 65536 */ |
#define NMAX 5552 |
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ |
#define DO1(buf,i) {s1 += buf[i]; s2 += s1;} |
#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); |
#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); |
#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); |
#define DO16(buf) DO8(buf,0); DO8(buf,8); |
/* ========================================================================= */ |
/* |
Update a running Adler-32 checksum with the bytes buf[0..len-1] and |
return the updated checksum. If buf is NULL, this function returns |
the required initial value for the checksum. |
An Adler-32 checksum is almost as reliable as a CRC32 but can be computed |
much faster. Usage example: |
uLong adler = adler32(0L, NULL, 0); |
while (read_buffer(buffer, length) != EOF) { |
adler = adler32(adler, buffer, length); |
} |
if (adler != original_adler) error(); |
*/ |
static inline uLong zlib_adler32(uLong adler, |
const Byte *buf, |
uInt len) |
{ |
unsigned long s1 = adler & 0xffff; |
unsigned long s2 = (adler >> 16) & 0xffff; |
int k; |
if (buf == NULL) return 1L; |
while (len > 0) { |
k = len < NMAX ? len : NMAX; |
len -= k; |
while (k >= 16) { |
DO16(buf); |
buf += 16; |
k -= 16; |
} |
if (k != 0) do { |
s1 += *buf++; |
s2 += s1; |
} while (--k); |
s1 %= BASE; |
s2 %= BASE; |
} |
return (s2 << 16) | s1; |
} |
#endif /* _Z_UTIL_H */ |
/shark/trunk/drivers/linuxc26/include/linux/modsetver.h |
---|
0,0 → 1,10 |
/* Symbol versioning nastiness. */ |
#define __SYMBOL_VERSION(x) __ver_ ## x |
#define __VERSIONED_SYMBOL2(x,v) x ## _R ## v |
#define __VERSIONED_SYMBOL1(x,v) __VERSIONED_SYMBOL2(x,v) |
#define __VERSIONED_SYMBOL(x) __VERSIONED_SYMBOL1(x,__SYMBOL_VERSION(x)) |
#ifndef _set_ver |
#define _set_ver(x) __VERSIONED_SYMBOL(x) |
#endif |
/shark/trunk/drivers/linuxc26/include/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 |
/shark/trunk/drivers/linuxc26/include/linux/fs_struct.h |
---|
0,0 → 1,28 |
#ifndef _LINUX_FS_STRUCT_H |
#define _LINUX_FS_STRUCT_H |
struct dentry; |
struct vfsmount; |
struct fs_struct { |
atomic_t count; |
rwlock_t lock; |
int umask; |
struct dentry * root, * pwd, * altroot; |
struct vfsmount * rootmnt, * pwdmnt, * altrootmnt; |
}; |
#define INIT_FS { \ |
.count = ATOMIC_INIT(1), \ |
.lock = RW_LOCK_UNLOCKED, \ |
.umask = 0022, \ |
} |
extern void exit_fs(struct task_struct *); |
extern void set_fs_altroot(void); |
extern void set_fs_root(struct fs_struct *, struct vfsmount *, struct dentry *); |
extern void set_fs_pwd(struct fs_struct *, struct vfsmount *, struct dentry *); |
extern struct fs_struct *copy_fs_struct(struct fs_struct *); |
extern void put_fs_struct(struct fs_struct *); |
#endif /* _LINUX_FS_STRUCT_H */ |
/shark/trunk/drivers/linuxc26/include/linux/sysdev.h |
---|
0,0 → 1,94 |
/** |
* System devices follow a slightly different driver model. |
* They don't need to do dynammic driver binding, can't be probed, |
* and don't reside on any type of peripheral bus. |
* So, we represent and treat them a little differently. |
* |
* We still have a notion of a driver for a system device, because we still |
* want to perform basic operations on these devices. |
* |
* We also support auxillary drivers binding to devices of a certain class. |
* |
* This allows configurable drivers to register themselves for devices of |
* a certain type. And, it allows class definitions to reside in generic |
* code while arch-specific code can register specific drivers. |
* |
* Auxillary drivers registered with a NULL cls are registered as drivers |
* for all system devices, and get notification calls for each device. |
*/ |
#ifndef _SYSDEV_H_ |
#define _SYSDEV_H_ |
#include <linux/kobject.h> |
struct sys_device; |
struct sysdev_class { |
struct list_head drivers; |
/* Default operations for these types of devices */ |
int (*shutdown)(struct sys_device *); |
int (*suspend)(struct sys_device *, u32 state); |
int (*resume)(struct sys_device *); |
struct kset kset; |
}; |
extern int sysdev_class_register(struct sysdev_class *); |
extern void sysdev_class_unregister(struct sysdev_class *); |
/** |
* Auxillary system device drivers. |
*/ |
struct sysdev_driver { |
struct list_head entry; |
int (*add)(struct sys_device *); |
int (*remove)(struct sys_device *); |
int (*shutdown)(struct sys_device *); |
int (*suspend)(struct sys_device *, u32 state); |
int (*resume)(struct sys_device *); |
}; |
extern int sysdev_driver_register(struct sysdev_class *, struct sysdev_driver *); |
extern void sysdev_driver_unregister(struct sysdev_class *, struct sysdev_driver *); |
/** |
* sys_devices can be simplified a lot from regular devices, because they're |
* simply not as versatile. |
*/ |
struct sys_device { |
u32 id; |
struct sysdev_class * cls; |
struct kobject kobj; |
}; |
extern int sys_device_register(struct sys_device *); |
extern void sys_device_unregister(struct sys_device *); |
struct sysdev_attribute { |
struct attribute attr; |
ssize_t (*show)(struct sys_device *, char *); |
ssize_t (*store)(struct sys_device *, const char *, size_t); |
}; |
#define SYSDEV_ATTR(_name,_mode,_show,_store) \ |
struct sysdev_attribute attr_##_name = { \ |
.attr = {.name = __stringify(_name), .mode = _mode }, \ |
.show = _show, \ |
.store = _store, \ |
}; |
extern int sysdev_create_file(struct sys_device *, struct sysdev_attribute *); |
extern void sysdev_remove_file(struct sys_device *, struct sysdev_attribute *); |
#endif /* _SYSDEV_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/sdla_chdlc.h |
---|
0,0 → 1,813 |
/************************************************************************* |
sdla_chdlc.h Sangoma Cisco HDLC firmware API definitions |
Author: Gideon Hack |
Nenad Corbic <ncorbic@sangoma.com> |
Copyright: (c) 1995-2000 Sangoma Technologies Inc. |
This program is free software; you can redistribute it and/or |
modify it under the term 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. |
=========================================================================== |
Oct 04, 1999 Nenad Corbic Updated API support |
Jun 02, 1999 Gideon Hack Changes for S514 usage. |
Oct 28, 1998 Jaspreet Singh Made changes for Dual Port CHDLC. |
Jun 11, 1998 David Fong Initial version. |
=========================================================================== |
Organization |
- Compatibility notes |
- Constants defining the shared memory control block (mailbox) |
- Interface commands |
- Return code from interface commands |
- Constants for the commands (structures for casting data) |
- UDP Management constants and structures |
*************************************************************************/ |
#ifndef _SDLA_CHDLC_H |
# define _SDLC_CHDLC_H |
/*------------------------------------------------------------------------ |
Notes: |
All structres defined in this file are byte-aligned. |
Compiler Platform |
------------------------ |
GNU C Linux |
------------------------------------------------------------------------*/ |
#ifndef PACKED |
#define PACKED __attribute__((packed)) |
#endif /* PACKED */ |
/* ---------------------------------------------------------------------------- |
* Constants defining the shared memory control block (mailbox) |
* --------------------------------------------------------------------------*/ |
#define PRI_BASE_ADDR_MB_STRUCT 0xE000 /* the base address of the mailbox structure on the adapter */ |
#define SEC_BASE_ADDR_MB_STRUCT 0xE800 /* the base address of the mailbox structure on the adapter */ |
#define SIZEOF_MB_DATA_BFR 2032 /* the size of the actual mailbox data area */ |
#define NUMBER_MB_RESERVED_BYTES 0x0B /* the number of reserved bytes in the mailbox header area */ |
#define MIN_LGTH_CHDLC_DATA_CFG 300 /* min length of the CHDLC data field (for configuration purposes) */ |
#define PRI_MAX_NO_DATA_BYTES_IN_FRAME 15354 /* PRIMARY - max length of the CHDLC data field */ |
typedef struct { |
unsigned char opp_flag PACKED; /* the opp flag */ |
unsigned char command PACKED; /* the user command */ |
unsigned short buffer_length PACKED; /* the data length */ |
unsigned char return_code PACKED; /* the return code */ |
unsigned char MB_reserved[NUMBER_MB_RESERVED_BYTES] PACKED; /* reserved for later */ |
unsigned char data[SIZEOF_MB_DATA_BFR] PACKED; /* the data area */ |
} CHDLC_MAILBOX_STRUCT; |
typedef struct { |
pid_t pid_num PACKED; |
CHDLC_MAILBOX_STRUCT cmdarea PACKED; |
} CMDBLOCK_STRUCT; |
/* ---------------------------------------------------------------------------- |
* Interface commands |
* --------------------------------------------------------------------------*/ |
/* global interface commands */ |
#define READ_GLOBAL_EXCEPTION_CONDITION 0x01 |
#define SET_GLOBAL_CONFIGURATION 0x02 |
#define READ_GLOBAL_CONFIGURATION 0x03 |
#define READ_GLOBAL_STATISTICS 0x04 |
#define FLUSH_GLOBAL_STATISTICS 0x05 |
#define SET_MODEM_STATUS 0x06 /* set status of DTR or RTS */ |
#define READ_MODEM_STATUS 0x07 /* read status of CTS and DCD */ |
#define READ_COMMS_ERROR_STATS 0x08 |
#define FLUSH_COMMS_ERROR_STATS 0x09 |
#define SET_TRACE_CONFIGURATION 0x0A /* set the line trace config */ |
#define READ_TRACE_CONFIGURATION 0x0B /* read the line trace config */ |
#define READ_TRACE_STATISTICS 0x0C /* read the trace statistics */ |
#define FLUSH_TRACE_STATISTICS 0x0D /* flush the trace statistics */ |
#define FT1_MONITOR_STATUS_CTRL 0x1C /* set the status of the S508/FT1 monitoring */ |
#define SET_FT1_CONFIGURATION 0x18 /* set the FT1 configuration */ |
#define READ_FT1_CONFIGURATION 0x19 /* read the FT1 configuration */ |
#define TRANSMIT_ASYNC_DATA_TO_FT1 0x1A /* output asynchronous data to the FT1 */ |
#define RECEIVE_ASYNC_DATA_FROM_FT1 0x1B /* receive asynchronous data from the FT1 */ |
#define FT1_MONITOR_STATUS_CTRL 0x1C /* set the status of the FT1 monitoring */ |
#define READ_FT1_OPERATIONAL_STATS 0x1D /* read the S508/FT1 operational statistics */ |
#define SET_FT1_MODE 0x1E /* set the operational mode of the S508/FT1 module */ |
/* CHDLC-level interface commands */ |
#define READ_CHDLC_CODE_VERSION 0x20 |
#define READ_CHDLC_EXCEPTION_CONDITION 0x21 /* read exception condition from the adapter */ |
#define SET_CHDLC_CONFIGURATION 0x22 |
#define READ_CHDLC_CONFIGURATION 0x23 |
#define ENABLE_CHDLC_COMMUNICATIONS 0x24 |
#define DISABLE_CHDLC_COMMUNICATIONS 0x25 |
#define READ_CHDLC_LINK_STATUS 0x26 |
#define READ_CHDLC_OPERATIONAL_STATS 0x27 |
#define FLUSH_CHDLC_OPERATIONAL_STATS 0x28 |
#define SET_CHDLC_INTERRUPT_TRIGGERS 0x30 /* set application interrupt triggers */ |
#define READ_CHDLC_INTERRUPT_TRIGGERS 0x31 /* read application interrupt trigger configuration */ |
/* Special UDP drivers management commands */ |
#define CPIPE_ENABLE_TRACING 0x50 |
#define CPIPE_DISABLE_TRACING 0x51 |
#define CPIPE_GET_TRACE_INFO 0x52 |
#define CPIPE_GET_IBA_DATA 0x53 |
#define CPIPE_FT1_READ_STATUS 0x54 |
#define CPIPE_DRIVER_STAT_IFSEND 0x55 |
#define CPIPE_DRIVER_STAT_INTR 0x56 |
#define CPIPE_DRIVER_STAT_GEN 0x57 |
#define CPIPE_FLUSH_DRIVER_STATS 0x58 |
#define CPIPE_ROUTER_UP_TIME 0x59 |
/* Driver specific commands for API */ |
#define CHDLC_READ_TRACE_DATA 0xE4 /* read trace data */ |
#define TRACE_ALL 0x00 |
#define TRACE_PROT 0x01 |
#define TRACE_DATA 0x02 |
#define DISCARD_RX_ERROR_FRAMES 0x0001 |
/* ---------------------------------------------------------------------------- |
* Return codes from interface commands |
* --------------------------------------------------------------------------*/ |
#define COMMAND_OK 0x00 |
/* return codes from global interface commands */ |
#define NO_GLOBAL_EXCEP_COND_TO_REPORT 0x01 /* there is no CHDLC exception condition to report */ |
#define LGTH_GLOBAL_CFG_DATA_INVALID 0x01 /* the length of the passed global configuration data is invalid */ |
#define LGTH_TRACE_CFG_DATA_INVALID 0x01 /* the length of the passed trace configuration data is invalid */ |
#define IRQ_TIMEOUT_VALUE_INVALID 0x02 /* an invalid application IRQ timeout value was selected */ |
#define TRACE_CONFIG_INVALID 0x02 /* the passed line trace configuration is invalid */ |
#define ADAPTER_OPERATING_FREQ_INVALID 0x03 /* an invalid adapter operating frequency was selected */ |
#define TRC_DEAC_TMR_INVALID 0x03 /* the trace deactivation timer is invalid */ |
#define S508_FT1_ADPTR_NOT_PRESENT 0x0C /* the S508/FT1 adapter is not present */ |
#define INVALID_FT1_STATUS_SELECTION 0x0D /* the S508/FT1 status selection is invalid */ |
#define FT1_OP_STATS_NOT_ENABLED 0x0D /* the FT1 operational statistics have not been enabled */ |
#define FT1_OP_STATS_NOT_AVAILABLE 0x0E /* the FT1 operational statistics are not currently available */ |
#define S508_FT1_MODE_SELECTION_BUSY 0x0E /* the S508/FT1 adapter is busy selecting the operational mode */ |
/* return codes from command READ_GLOBAL_EXCEPTION_CONDITION */ |
#define EXCEP_MODEM_STATUS_CHANGE 0x10 /* a modem status change occurred */ |
#define EXCEP_TRC_DISABLED 0x11 /* the trace has been disabled */ |
#define EXCEP_IRQ_TIMEOUT 0x12 /* IRQ timeout */ |
/* return codes from CHDLC-level interface commands */ |
#define NO_CHDLC_EXCEP_COND_TO_REPORT 0x21 /* there is no CHDLC exception condition to report */ |
#define CHDLC_COMMS_DISABLED 0x21 /* communications are not currently enabled */ |
#define CHDLC_COMMS_ENABLED 0x21 /* communications are currently enabled */ |
#define DISABLE_CHDLC_COMMS_BEFORE_CFG 0x21 /* CHDLC communications must be disabled before setting the configuration */ |
#define ENABLE_CHDLC_COMMS_BEFORE_CONN 0x21 /* communications must be enabled before using the CHDLC_CONNECT conmmand */ |
#define CHDLC_CFG_BEFORE_COMMS_ENABLED 0x22 /* perform a SET_CHDLC_CONFIGURATION before enabling comms */ |
#define LGTH_CHDLC_CFG_DATA_INVALID 0x22 /* the length of the passed CHDLC configuration data is invalid */ |
#define LGTH_INT_TRIGGERS_DATA_INVALID 0x22 /* the length of the passed interrupt trigger data is invalid */ |
#define INVALID_IRQ_SELECTED 0x23 /* in invalid IRQ was selected in the SET_CHDLC_INTERRUPT_TRIGGERS */ |
#define INVALID_CHDLC_CFG_DATA 0x23 /* the passed CHDLC configuration data is invalid */ |
#define IRQ_TMR_VALUE_INVALID 0x24 /* an invalid application IRQ timer value was selected */ |
#define LARGER_PERCENT_TX_BFR_REQUIRED 0x24 /* a larger Tx buffer percentage is required */ |
#define LARGER_PERCENT_RX_BFR_REQUIRED 0x25 /* a larger Rx buffer percentage is required */ |
#define S514_BOTH_PORTS_SAME_CLK_MODE 0x26 /* S514 - both ports must have same clock mode */ |
#define INVALID_CMND_HDLC_STREAM_MODE 0x4E /* the CHDLC interface command is invalid for HDLC streaming mode */ |
#define INVALID_CHDLC_COMMAND 0x4F /* the defined CHDLC interface command is invalid */ |
/* return codes from command READ_CHDLC_EXCEPTION_CONDITION */ |
#define EXCEP_LINK_ACTIVE 0x30 /* the CHDLC link has become active */ |
#define EXCEP_LINK_INACTIVE_MODEM 0x31 /* the CHDLC link has become inactive (modem status) */ |
#define EXCEP_LINK_INACTIVE_KPALV 0x32 /* the CHDLC link has become inactive (keepalive status) */ |
#define EXCEP_IP_ADDRESS_DISCOVERED 0x33 /* the IP address has been discovered */ |
#define EXCEP_LOOPBACK_CONDITION 0x34 /* a loopback condition has occurred */ |
/* return code from command CHDLC_SEND_WAIT and CHDLC_SEND_NO_WAIT */ |
#define LINK_DISCONNECTED 0x21 |
#define NO_TX_BFRS_AVAIL 0x24 |
/* ---------------------------------------------------------------------------- |
* Constants for the SET_GLOBAL_CONFIGURATION/READ_GLOBAL_CONFIGURATION commands |
* --------------------------------------------------------------------------*/ |
/* the global configuration structure */ |
typedef struct { |
unsigned short adapter_config_options PACKED; /* adapter config options */ |
unsigned short app_IRQ_timeout PACKED; /* application IRQ timeout */ |
unsigned long adapter_operating_frequency PACKED; /* adapter operating frequency */ |
} GLOBAL_CONFIGURATION_STRUCT; |
/* settings for the 'app_IRQ_timeout' */ |
#define MAX_APP_IRQ_TIMEOUT_VALUE 5000 /* the maximum permitted IRQ timeout */ |
/* ---------------------------------------------------------------------------- |
* Constants for the READ_GLOBAL_STATISTICS command |
* --------------------------------------------------------------------------*/ |
/* the global statistics structure */ |
typedef struct { |
unsigned short app_IRQ_timeout_count PACKED; |
} GLOBAL_STATS_STRUCT; |
/* ---------------------------------------------------------------------------- |
* Constants for the READ_COMMS_ERROR_STATS command |
* --------------------------------------------------------------------------*/ |
/* the communications error statistics structure */ |
typedef struct { |
unsigned short Rx_overrun_err_count PACKED; |
unsigned short CRC_err_count PACKED; /* receiver CRC error count */ |
unsigned short Rx_abort_count PACKED; /* abort frames recvd count */ |
unsigned short Rx_dis_pri_bfrs_full_count PACKED;/* receiver disabled */ |
unsigned short comms_err_stat_reserved_1 PACKED;/* reserved for later */ |
unsigned short sec_Tx_abort_msd_Tx_int_count PACKED; /* secondary - abort frames transmitted count (missed Tx interrupt) */ |
unsigned short missed_Tx_und_int_count PACKED; /* missed tx underrun interrupt count */ |
unsigned short sec_Tx_abort_count PACKED; /*secondary-abort frames tx count */ |
unsigned short DCD_state_change_count PACKED; /* DCD state change */ |
unsigned short CTS_state_change_count PACKED; /* CTS state change */ |
} COMMS_ERROR_STATS_STRUCT; |
/* ---------------------------------------------------------------------------- |
* Constants used for line tracing |
* --------------------------------------------------------------------------*/ |
/* the trace configuration structure (SET_TRACE_CONFIGURATION/READ_TRACE_CONFIGURATION commands) */ |
typedef struct { |
unsigned char trace_config PACKED; /* trace configuration */ |
unsigned short trace_deactivation_timer PACKED; /* trace deactivation timer */ |
unsigned long ptr_trace_stat_el_cfg_struct PACKED; /* a pointer to the line trace element configuration structure */ |
} LINE_TRACE_CONFIG_STRUCT; |
/* 'trace_config' bit settings */ |
#define TRACE_INACTIVE 0x00 /* trace is inactive */ |
#define TRACE_ACTIVE 0x01 /* trace is active */ |
#define TRACE_DELAY_MODE 0x04 /* operate the trace in delay mode */ |
#define TRACE_DATA_FRAMES 0x08 /* trace Data frames */ |
#define TRACE_SLARP_FRAMES 0x10 /* trace SLARP frames */ |
#define TRACE_CDP_FRAMES 0x20 /* trace CDP frames */ |
/* the line trace status element configuration structure */ |
typedef struct { |
unsigned short number_trace_status_elements PACKED; /* number of line trace elements */ |
unsigned long base_addr_trace_status_elements PACKED; /* base address of the trace element list */ |
unsigned long next_trace_element_to_use PACKED; /* pointer to the next trace element to be used */ |
unsigned long base_addr_trace_buffer PACKED; /* base address of the trace data buffer */ |
unsigned long end_addr_trace_buffer PACKED; /* end address of the trace data buffer */ |
} TRACE_STATUS_EL_CFG_STRUCT; |
/* the line trace status element structure */ |
typedef struct { |
unsigned char opp_flag PACKED; /* opp flag */ |
unsigned short trace_length PACKED; /* trace length */ |
unsigned char trace_type PACKED; /* trace type */ |
unsigned short trace_time_stamp PACKED; /* time stamp */ |
unsigned short trace_reserved_1 PACKED; /* reserved for later use */ |
unsigned long trace_reserved_2 PACKED; /* reserved for later use */ |
unsigned long ptr_data_bfr PACKED; /* ptr to the trace data buffer */ |
} TRACE_STATUS_ELEMENT_STRUCT; |
/* "trace_type" bit settings */ |
#define TRACE_INCOMING 0x00 |
#define TRACE_OUTGOINGING 0x01 |
#define TRACE_INCOMING_ABORTED 0x10 |
#define TRACE_INCOMING_CRC_ERROR 0x20 |
#define TRACE_INCOMING_OVERRUN_ERROR 0x40 |
/* the line trace statistics structure */ |
typedef struct { |
unsigned long frames_traced_count PACKED; /* number of frames traced */ |
unsigned long trc_frms_not_recorded_count PACKED; /* number of trace frames discarded */ |
} LINE_TRACE_STATS_STRUCT; |
/* ---------------------------------------------------------------------------- |
* Constants for the FT1_MONITOR_STATUS_CTRL command |
* --------------------------------------------------------------------------*/ |
#define DISABLE_FT1_STATUS_STATISTICS 0x00 /* disable the FT1 status and statistics monitoring */ |
#define ENABLE_READ_FT1_STATUS 0x01 /* read the FT1 operational status */ |
#define ENABLE_READ_FT1_OP_STATS 0x02 /* read the FT1 operational statistics */ |
#define FLUSH_FT1_OP_STATS 0x04 /* flush the FT1 operational statistics */ |
/* ---------------------------------------------------------------------------- |
* Constants for the SET_CHDLC_CONFIGURATION command |
* --------------------------------------------------------------------------*/ |
/* the CHDLC configuration structure */ |
typedef struct { |
unsigned long baud_rate PACKED; /* the baud rate */ |
unsigned short line_config_options PACKED; /* line configuration options */ |
unsigned short modem_config_options PACKED; /* modem configration options */ |
unsigned short modem_status_timer PACKED; /* timer for monitoring modem status changes */ |
unsigned short CHDLC_API_options PACKED; /* CHDLC API options */ |
unsigned short CHDLC_protocol_options PACKED; /* CHDLC protocol options */ |
unsigned short percent_data_buffer_for_Tx PACKED; /* percentage data buffering used for Tx */ |
unsigned short CHDLC_statistics_options PACKED; /* CHDLC operational statistics options */ |
unsigned short max_CHDLC_data_field_length PACKED; /* the maximum length of the CHDLC Data field */ |
unsigned short transmit_keepalive_timer PACKED; /* the transmit keepalive timer */ |
unsigned short receive_keepalive_timer PACKED; /* the receive keepalive timer */ |
unsigned short keepalive_error_tolerance PACKED; /* the receive keepalive error tolerance */ |
unsigned short SLARP_request_timer PACKED; /* the SLARP request timer */ |
unsigned long IP_address PACKED; /* the IP address */ |
unsigned long IP_netmask PACKED; /* the IP netmask */ |
unsigned long ptr_shared_mem_info_struct PACKED; /* a pointer to the shared memory area information structure */ |
unsigned long ptr_CHDLC_Tx_stat_el_cfg_struct PACKED; /* a pointer to the transmit status element configuration structure */ |
unsigned long ptr_CHDLC_Rx_stat_el_cfg_struct PACKED; /* a pointer to the receive status element configuration structure */ |
} CHDLC_CONFIGURATION_STRUCT; |
/* settings for the 'line_config_options' */ |
#define INTERFACE_LEVEL_V35 0x0000 /* V.35 interface level */ |
#define INTERFACE_LEVEL_RS232 0x0001 /* RS-232 interface level */ |
/* settings for the 'modem_config_options' */ |
#define DONT_RAISE_DTR_RTS_ON_EN_COMMS 0x0001 |
/* don't automatically raise DTR and RTS when performing an |
ENABLE_CHDLC_COMMUNICATIONS command */ |
#define DONT_REPORT_CHG_IN_MODEM_STAT 0x0002 |
/* don't report changes in modem status to the application */ |
/* bit settings for the 'CHDLC_protocol_options' byte */ |
#define IGNORE_DCD_FOR_LINK_STAT 0x0001 |
/* ignore DCD in determining the CHDLC link status */ |
#define IGNORE_CTS_FOR_LINK_STAT 0x0002 |
/* ignore CTS in determining the CHDLC link status */ |
#define IGNORE_KPALV_FOR_LINK_STAT 0x0004 |
/* ignore keepalive frames in determining the CHDLC link status */ |
#define SINGLE_TX_BUFFER 0x4000 |
/* configure a single transmit buffer */ |
#define HDLC_STREAMING_MODE 0x8000 |
/* settings for the 'CHDLC_statistics_options' */ |
#define CHDLC_TX_DATA_BYTE_COUNT_STAT 0x0001 |
/* record the number of Data bytes transmitted */ |
#define CHDLC_RX_DATA_BYTE_COUNT_STAT 0x0002 |
/* record the number of Data bytes received */ |
#define CHDLC_TX_THROUGHPUT_STAT 0x0004 |
/* compute the Data frame transmit throughput */ |
#define CHDLC_RX_THROUGHPUT_STAT 0x0008 |
/* compute the Data frame receive throughput */ |
/* permitted minimum and maximum values for setting the CHDLC configuration */ |
#define PRI_MAX_BAUD_RATE_S508 2666666 /* PRIMARY - maximum baud rate (S508) */ |
#define SEC_MAX_BAUD_RATE_S508 258064 /* SECONDARY - maximum baud rate (S508) */ |
#define PRI_MAX_BAUD_RATE_S514 2750000 /* PRIMARY - maximum baud rate (S508) */ |
#define SEC_MAX_BAUD_RATE_S514 515625 /* SECONDARY - maximum baud rate (S508) */ |
#define MIN_MODEM_TIMER 0 /* minimum modem status timer */ |
#define MAX_MODEM_TIMER 5000 /* maximum modem status timer */ |
#define SEC_MAX_NO_DATA_BYTES_IN_FRAME 2048 /* SECONDARY - max length of the CHDLC data field */ |
#define MIN_Tx_KPALV_TIMER 0 /* minimum transmit keepalive timer */ |
#define MAX_Tx_KPALV_TIMER 60000 /* maximum transmit keepalive timer */ |
#define DEFAULT_Tx_KPALV_TIMER 10000 /* default transmit keepalive timer */ |
#define MIN_Rx_KPALV_TIMER 10 /* minimum receive keepalive timer */ |
#define MAX_Rx_KPALV_TIMER 60000 /* maximum receive keepalive timer */ |
#define DEFAULT_Rx_KPALV_TIMER 10000 /* default receive keepalive timer */ |
#define MIN_KPALV_ERR_TOL 1 /* min kpalv error tolerance count */ |
#define MAX_KPALV_ERR_TOL 20 /* max kpalv error tolerance count */ |
#define DEFAULT_KPALV_ERR_TOL 3 /* default value */ |
#define MIN_SLARP_REQ_TIMER 0 /* min transmit SLARP Request timer */ |
#define MAX_SLARP_REQ_TIMER 60000 /* max transmit SLARP Request timer */ |
#define DEFAULT_SLARP_REQ_TIMER 0 /* default value -- no SLARP */ |
/* ---------------------------------------------------------------------------- |
* Constants for the READ_CHDLC_LINK_STATUS command |
* --------------------------------------------------------------------------*/ |
/* the CHDLC status structure */ |
typedef struct { |
unsigned char CHDLC_link_status PACKED; /* CHDLC link status */ |
unsigned char no_Data_frms_for_app PACKED; /* number of Data frames available for the application */ |
unsigned char receiver_status PACKED; /* enabled/disabled */ |
unsigned char SLARP_state PACKED; /* internal SLARP state */ |
} CHDLC_LINK_STATUS_STRUCT; |
/* settings for the 'CHDLC_link_status' variable */ |
#define CHDLC_LINK_INACTIVE 0x00 /* the CHDLC link is inactive */ |
#define CHDLC_LINK_ACTIVE 0x01 /* the CHDLC link is active */ |
/* ---------------------------------------------------------------------------- |
* Constants for the READ_CHDLC_OPERATIONAL_STATS command |
* --------------------------------------------------------------------------*/ |
/* the CHDLC operational statistics structure */ |
typedef struct { |
/* Data frame transmission statistics */ |
unsigned long Data_frames_Tx_count PACKED; /* # of frames transmitted */ |
unsigned long Data_bytes_Tx_count PACKED; /* # of bytes transmitted */ |
unsigned long Data_Tx_throughput PACKED; /* transmit throughput */ |
unsigned long no_ms_for_Data_Tx_thruput_comp PACKED; /* millisecond time used for the Tx throughput computation */ |
unsigned long Tx_Data_discard_lgth_err_count PACKED; /* number of Data frames discarded (length error) */ |
unsigned long reserved_Data_frm_Tx_stat1 PACKED; /* reserved for later */ |
unsigned long reserved_Data_frm_Tx_stat2 PACKED; /* reserved for later */ |
unsigned long reserved_Data_frm_Tx_stat3 PACKED; /* reserved for later */ |
/* Data frame reception statistics */ |
unsigned long Data_frames_Rx_count PACKED; /* number of frames received */ |
unsigned long Data_bytes_Rx_count PACKED; /* number of bytes received */ |
unsigned long Data_Rx_throughput PACKED; /* receive throughput */ |
unsigned long no_ms_for_Data_Rx_thruput_comp PACKED; /* millisecond time used for the Rx throughput computation */ |
unsigned long Rx_Data_discard_short_count PACKED; /* received Data frames discarded (too short) */ |
unsigned long Rx_Data_discard_long_count PACKED; /* received Data frames discarded (too long) */ |
unsigned long Rx_Data_discard_inactive_count PACKED; /* received Data frames discarded (link inactive) */ |
unsigned long reserved_Data_frm_Rx_stat1 PACKED; /* reserved for later */ |
/* SLARP frame transmission/reception statistics */ |
unsigned long CHDLC_SLARP_REQ_Tx_count PACKED; /* number of SLARP Request frames transmitted */ |
unsigned long CHDLC_SLARP_REQ_Rx_count PACKED; /* number of SLARP Request frames received */ |
unsigned long CHDLC_SLARP_REPLY_Tx_count PACKED; /* number of SLARP Reply frames transmitted */ |
unsigned long CHDLC_SLARP_REPLY_Rx_count PACKED; /* number of SLARP Reply frames received */ |
unsigned long CHDLC_SLARP_KPALV_Tx_count PACKED; /* number of SLARP keepalive frames transmitted */ |
unsigned long CHDLC_SLARP_KPALV_Rx_count PACKED; /* number of SLARP keepalive frames received */ |
unsigned long reserved_SLARP_stat1 PACKED; /* reserved for later */ |
unsigned long reserved_SLARP_stat2 PACKED; /* reserved for later */ |
/* CDP frame transmission/reception statistics */ |
unsigned long CHDLC_CDP_Tx_count PACKED; /* number of CDP frames transmitted */ |
unsigned long CHDLC_CDP_Rx_count PACKED; /* number of CDP frames received */ |
unsigned long reserved_CDP_stat1 PACKED; /* reserved for later */ |
unsigned long reserved_CDP_stat2 PACKED; /* reserved for later */ |
unsigned long reserved_CDP_stat3 PACKED; /* reserved for later */ |
unsigned long reserved_CDP_stat4 PACKED; /* reserved for later */ |
unsigned long reserved_CDP_stat5 PACKED; /* reserved for later */ |
unsigned long reserved_CDP_stat6 PACKED; /* reserved for later */ |
/* Incoming frames with a format error statistics */ |
unsigned short Rx_frm_incomp_CHDLC_hdr_count PACKED; /* frames received of with incomplete Cisco HDLC header */ |
unsigned short Rx_frms_too_long_count PACKED; /* frames received of excessive length count */ |
unsigned short Rx_invalid_CHDLC_addr_count PACKED; /* frames received with an invalid CHDLC address count */ |
unsigned short Rx_invalid_CHDLC_ctrl_count PACKED; /* frames received with an invalid CHDLC control field count */ |
unsigned short Rx_invalid_CHDLC_type_count PACKED; /* frames received of an invalid CHDLC frame type count */ |
unsigned short Rx_SLARP_invalid_code_count PACKED; /* SLARP frame received with an invalid packet code */ |
unsigned short Rx_SLARP_Reply_bad_IP_addr PACKED; /* SLARP Reply received - bad IP address */ |
unsigned short Rx_SLARP_Reply_bad_netmask PACKED; /* SLARP Reply received - bad netmask */ |
unsigned long reserved_frm_format_err1 PACKED; /* reserved for later */ |
unsigned long reserved_frm_format_err2 PACKED; /* reserved for later */ |
unsigned long reserved_frm_format_err3 PACKED; /* reserved for later */ |
unsigned long reserved_frm_format_err4 PACKED; /* reserved for later */ |
/* CHDLC timeout/retry statistics */ |
unsigned short SLARP_Rx_keepalive_TO_count PACKED; /* timeout count for incoming SLARP frames */ |
unsigned short SLARP_Request_TO_count PACKED; /* timeout count for SLARP Request frames */ |
unsigned long To_retry_reserved_stat1 PACKED; /* reserved for later */ |
unsigned long To_retry_reserved_stat2 PACKED; /* reserved for later */ |
unsigned long To_retry_reserved_stat3 PACKED; /* reserved for later */ |
/* CHDLC link active/inactive and loopback statistics */ |
unsigned short link_active_count PACKED; /* number of times that the link went active */ |
unsigned short link_inactive_modem_count PACKED; /* number of times that the link went inactive (modem failure) */ |
unsigned short link_inactive_keepalive_count PACKED; /* number of times that the link went inactive (keepalive failure) */ |
unsigned short link_looped_count PACKED; /* link looped count */ |
unsigned long link_status_reserved_stat1 PACKED; /* reserved for later use */ |
unsigned long link_status_reserved_stat2 PACKED; /* reserved for later use */ |
/* miscellaneous statistics */ |
unsigned long reserved_misc_stat1 PACKED; /* reserved for later */ |
unsigned long reserved_misc_stat2 PACKED; /* reserved for later */ |
unsigned long reserved_misc_stat3 PACKED; /* reserved for later */ |
unsigned long reserved_misc_stat4 PACKED; /* reserved for later */ |
} CHDLC_OPERATIONAL_STATS_STRUCT; |
/* ---------------------------------------------------------------------------- |
* Constants for using application interrupts |
* --------------------------------------------------------------------------*/ |
/* the structure used for the SET_CHDLC_INTERRUPT_TRIGGERS/READ_CHDLC_INTERRUPT_TRIGGERS command */ |
typedef struct { |
unsigned char CHDLC_interrupt_triggers PACKED; /* CHDLC interrupt trigger configuration */ |
unsigned char IRQ PACKED; /* IRQ to be used */ |
unsigned short interrupt_timer PACKED; /* interrupt timer */ |
unsigned short misc_interrupt_bits PACKED; /* miscellaneous bits */ |
} CHDLC_INT_TRIGGERS_STRUCT; |
/* 'CHDLC_interrupt_triggers' bit settings */ |
#define APP_INT_ON_RX_FRAME 0x01 /* interrupt on Data frame reception */ |
#define APP_INT_ON_TX_FRAME 0x02 /* interrupt when an Data frame may be transmitted */ |
#define APP_INT_ON_COMMAND_COMPLETE 0x04 /* interrupt when an interface command is complete */ |
#define APP_INT_ON_TIMER 0x08 /* interrupt on a defined millisecond timeout */ |
#define APP_INT_ON_GLOBAL_EXCEP_COND 0x10 /* interrupt on a global exception condition */ |
#define APP_INT_ON_CHDLC_EXCEP_COND 0x20 /* interrupt on an CHDLC exception condition */ |
#define APP_INT_ON_TRACE_DATA_AVAIL 0x80 /* interrupt when trace data is available */ |
/* interrupt types indicated at 'interrupt_type' byte of the INTERRUPT_INFORMATION_STRUCT */ |
#define NO_APP_INTS_PEND 0x00 /* no interrups are pending */ |
#define RX_APP_INT_PEND 0x01 /* a receive interrupt is pending */ |
#define TX_APP_INT_PEND 0x02 /* a transmit interrupt is pending */ |
#define COMMAND_COMPLETE_APP_INT_PEND 0x04 /* a 'command complete' interrupt is pending */ |
#define TIMER_APP_INT_PEND 0x08 /* a timer interrupt is pending */ |
#define GLOBAL_EXCEP_COND_APP_INT_PEND 0x10 /* a global exception condition interrupt is pending */ |
#define CHDLC_EXCEP_COND_APP_INT_PEND 0x20 /* an CHDLC exception condition interrupt is pending */ |
#define TRACE_DATA_AVAIL_APP_INT_PEND 0x80 /* a trace data available interrupt is pending */ |
/* modem status changes */ |
#define DCD_HIGH 0x08 |
#define CTS_HIGH 0x20 |
/* ---------------------------------------------------------------------------- |
* Constants for Data frame transmission |
* --------------------------------------------------------------------------*/ |
/* the Data frame transmit status element configuration structure */ |
typedef struct { |
unsigned short number_Tx_status_elements PACKED; /* number of transmit status elements */ |
unsigned long base_addr_Tx_status_elements PACKED; /* base address of the transmit element list */ |
unsigned long next_Tx_status_element_to_use PACKED; /* pointer to the next transmit element to be used */ |
} CHDLC_TX_STATUS_EL_CFG_STRUCT; |
/* the Data frame transmit status element structure */ |
typedef struct { |
unsigned char opp_flag PACKED; /* opp flag */ |
unsigned short frame_length PACKED; /* length of the frame to be transmitted */ |
unsigned char reserved_1 PACKED; /* reserved for internal use */ |
unsigned long reserved_2 PACKED; /* reserved for internal use */ |
unsigned long reserved_3 PACKED; /* reserved for internal use */ |
unsigned long ptr_data_bfr PACKED; /* pointer to the data area */ |
} CHDLC_DATA_TX_STATUS_EL_STRUCT; |
/* ---------------------------------------------------------------------------- |
* Constants for Data frame reception |
* --------------------------------------------------------------------------*/ |
/* the Data frame receive status element configuration structure */ |
typedef struct { |
unsigned short number_Rx_status_elements PACKED; /* number of receive status elements */ |
unsigned long base_addr_Rx_status_elements PACKED; /* base address of the receive element list */ |
unsigned long next_Rx_status_element_to_use PACKED; /* pointer to the next receive element to be used */ |
unsigned long base_addr_Rx_buffer PACKED; /* base address of the receive data buffer */ |
unsigned long end_addr_Rx_buffer PACKED; /* end address of the receive data buffer */ |
} CHDLC_RX_STATUS_EL_CFG_STRUCT; |
/* the Data frame receive status element structure */ |
typedef struct { |
unsigned char opp_flag PACKED; /* opp flag */ |
unsigned short frame_length PACKED; /* length of the received frame */ |
unsigned char error_flag PACKED; /* frame errors (HDLC_STREAMING_MODE)*/ |
unsigned short time_stamp PACKED; /* receive time stamp (HDLC_STREAMING_MODE) */ |
unsigned long reserved_1 PACKED; /* reserved for internal use */ |
unsigned short reserved_2 PACKED; /* reserved for internal use */ |
unsigned long ptr_data_bfr PACKED; /* pointer to the data area */ |
} CHDLC_DATA_RX_STATUS_EL_STRUCT; |
/* ---------------------------------------------------------------------------- |
* Constants defining the shared memory information area |
* --------------------------------------------------------------------------*/ |
/* the global information structure */ |
typedef struct { |
unsigned char global_status PACKED; /* global status */ |
unsigned char modem_status PACKED; /* current modem status */ |
unsigned char global_excep_conditions PACKED; /* global exception conditions */ |
unsigned char glob_info_reserved[5] PACKED; /* reserved */ |
unsigned char codename[4] PACKED; /* Firmware name */ |
unsigned char codeversion[4] PACKED; /* Firmware version */ |
} GLOBAL_INFORMATION_STRUCT; |
/* the CHDLC information structure */ |
typedef struct { |
unsigned char CHDLC_status PACKED; /* CHDLC status */ |
unsigned char CHDLC_excep_conditions PACKED; /* CHDLC exception conditions */ |
unsigned char CHDLC_info_reserved[14] PACKED; /* reserved */ |
} CHDLC_INFORMATION_STRUCT; |
/* the interrupt information structure */ |
typedef struct { |
unsigned char interrupt_type PACKED; /* type of interrupt triggered */ |
unsigned char interrupt_permission PACKED; /* interrupt permission mask */ |
unsigned char int_info_reserved[14] PACKED; /* reserved */ |
} INTERRUPT_INFORMATION_STRUCT; |
/* the S508/FT1 information structure */ |
typedef struct { |
unsigned char parallel_port_A_input PACKED; /* input - parallel port A */ |
unsigned char parallel_port_B_input PACKED; /* input - parallel port B */ |
unsigned char FT1_info_reserved[14] PACKED; /* reserved */ |
} FT1_INFORMATION_STRUCT; |
/* the shared memory area information structure */ |
typedef struct { |
GLOBAL_INFORMATION_STRUCT global_info_struct PACKED; /* the global information structure */ |
CHDLC_INFORMATION_STRUCT CHDLC_info_struct PACKED; /* the CHDLC information structure */ |
INTERRUPT_INFORMATION_STRUCT interrupt_info_struct PACKED; /* the interrupt information structure */ |
FT1_INFORMATION_STRUCT FT1_info_struct PACKED; /* the S508/FT1 information structure */ |
} SHARED_MEMORY_INFO_STRUCT; |
/* ---------------------------------------------------------------------------- |
* UDP Management constants and structures |
* --------------------------------------------------------------------------*/ |
/* The embedded control block for UDP mgmt |
This is essentially a mailbox structure, without the large data field */ |
typedef struct { |
unsigned char opp_flag PACKED; /* the opp flag */ |
unsigned char command PACKED; /* the user command */ |
unsigned short buffer_length PACKED; /* the data length */ |
unsigned char return_code PACKED; /* the return code */ |
unsigned char MB_reserved[NUMBER_MB_RESERVED_BYTES] PACKED; /* reserved for later */ |
} cblock_t; |
/* UDP management packet layout (data area of ip packet) */ |
/* |
typedef struct { |
unsigned char signature[8] PACKED; |
unsigned char request_reply PACKED; |
unsigned char id PACKED; |
unsigned char reserved[6] PACKED; |
cblock_t cblock PACKED; |
unsigned char num_frames PACKED; |
unsigned char ismoredata PACKED; |
unsigned char data[SIZEOF_MB_DATA_BFR] PACKED; |
} udp_management_packet_t; |
*/ |
typedef struct { |
unsigned char num_frames PACKED; |
unsigned char ismoredata PACKED; |
} trace_info_t; |
typedef struct { |
ip_pkt_t ip_pkt PACKED; |
udp_pkt_t udp_pkt PACKED; |
wp_mgmt_t wp_mgmt PACKED; |
cblock_t cblock PACKED; |
trace_info_t trace_info PACKED; |
unsigned char data[SIZEOF_MB_DATA_BFR] PACKED; |
} chdlc_udp_pkt_t; |
typedef struct ft1_exec_cmd{ |
unsigned char command PACKED; /* the user command */ |
unsigned short buffer_length PACKED; /* the data length */ |
unsigned char return_code PACKED; /* the return code */ |
unsigned char MB_reserved[NUMBER_MB_RESERVED_BYTES] PACKED; |
} ft1_exec_cmd_t; |
typedef struct { |
unsigned char opp_flag PACKED; |
ft1_exec_cmd_t cmd PACKED; |
unsigned char data[SIZEOF_MB_DATA_BFR] PACKED; |
} ft1_exec_t; |
#define UDPMGMT_SIGNATURE "CTPIPEAB" |
/* UDP/IP packet (for UDP management) layout */ |
/* |
typedef struct { |
unsigned char reserved[2] PACKED; |
unsigned short ip_length PACKED; |
unsigned char reserved2[4] PACKED; |
unsigned char ip_ttl PACKED; |
unsigned char ip_protocol PACKED; |
unsigned short ip_checksum PACKED; |
unsigned long ip_src_address PACKED; |
unsigned long ip_dst_address PACKED; |
unsigned short udp_src_port PACKED; |
unsigned short udp_dst_port PACKED; |
unsigned short udp_length PACKED; |
unsigned short udp_checksum PACKED; |
udp_management_packet_t um_packet PACKED; |
} ip_packet_t; |
*/ |
/* valid ip_protocol for UDP management */ |
#define UDPMGMT_UDP_PROTOCOL 0x11 |
typedef struct { |
unsigned char status PACKED; |
unsigned char data_avail PACKED; |
unsigned short real_length PACKED; |
unsigned short time_stamp PACKED; |
unsigned char data[1] PACKED; |
} trace_pkt_t; |
typedef struct { |
unsigned char error_flag PACKED; |
unsigned short time_stamp PACKED; |
unsigned char reserved[13] PACKED; |
} api_rx_hdr_t; |
typedef struct { |
api_rx_hdr_t api_rx_hdr PACKED; |
void * data PACKED; |
} api_rx_element_t; |
typedef struct { |
unsigned char attr PACKED; |
unsigned char reserved[15] PACKED; |
} api_tx_hdr_t; |
typedef struct { |
api_tx_hdr_t api_tx_hdr PACKED; |
void * data PACKED; |
} api_tx_element_t; |
/* ---------------------------------------------------------------------------- |
* Constants for the SET_FT1_CONFIGURATION/READ_FT1_CONFIGURATION command |
* --------------------------------------------------------------------------*/ |
/* the FT1 configuration structure */ |
typedef struct { |
unsigned short framing_mode; |
unsigned short encoding_mode; |
unsigned short line_build_out; |
unsigned short channel_base; |
unsigned short baud_rate_kbps; /* the baud rate (in kbps) */ |
unsigned short clock_mode; |
} ft1_config_t; |
/* settings for the 'framing_mode' */ |
#define ESF_FRAMING 0x00 /* ESF framing */ |
#define D4_FRAMING 0x01 /* D4 framing */ |
/* settings for the 'encoding_mode' */ |
#define B8ZS_ENCODING 0x00 /* B8ZS encoding */ |
#define AMI_ENCODING 0x01 /* AMI encoding */ |
/* settings for the 'line_build_out' */ |
#define LN_BLD_CSU_0dB_DSX1_0_to_133 0x00 /* set build out to CSU (0db) or DSX-1 (0-133ft) */ |
#define LN_BLD_DSX1_133_to_266 0x01 /* set build out DSX-1 (133-266ft) */ |
#define LN_BLD_DSX1_266_to_399 0x02 /* set build out DSX-1 (266-399ft) */ |
#define LN_BLD_DSX1_399_to_533 0x03 /* set build out DSX-1 (399-533ft) */ |
#define LN_BLD_DSX1_533_to_655 0x04 /* set build out DSX-1 (533-655ft) */ |
#define LN_BLD_CSU_NEG_7dB 0x05 /* set build out to CSU (-7.5db) */ |
#define LN_BLD_CSU_NEG_15dB 0x06 /* set build out to CSU (-15db) */ |
#define LN_BLD_CSU_NEG_22dB 0x07 /* set build out to CSU (-22.5db) */ |
/* settings for the 'channel_base' */ |
#define MIN_CHANNEL_BASE_VALUE 1 /* the minimum permitted channel base value */ |
#define MAX_CHANNEL_BASE_VALUE 24 /* the maximum permitted channel base value */ |
/* settings for the 'baud_rate_kbps' */ |
#define MIN_BAUD_RATE_KBPS 0 /* the minimum permitted baud rate (kbps) */ |
#define MAX_BAUD_RATE_KBPS 1536 /* the maximum permitted baud rate (kbps) */ |
#define BAUD_RATE_FT1_AUTO_CONFIG 0xFFFF /* the baud rate used to trigger an automatic FT1 configuration */ |
/* settings for the 'clock_mode' */ |
#define CLOCK_MODE_NORMAL 0x00 /* clock mode set to normal (slave) */ |
#define CLOCK_MODE_MASTER 0x01 /* clock mode set to master */ |
#define BAUD_RATE_FT1_AUTO_CONFIG 0xFFFF |
#define AUTO_FT1_CONFIG_NOT_COMPLETE 0x08 |
#define AUTO_FT1_CFG_FAIL_OP_MODE 0x0C |
#define AUTO_FT1_CFG_FAIL_INVALID_LINE 0x0D |
#ifdef _MSC_ |
# pragma pack() |
#endif |
#endif /* _SDLA_CHDLC_H */ |
/shark/trunk/drivers/linuxc26/include/linux/nfs_page.h |
---|
0,0 → 1,129 |
/* |
* linux/include/linux/nfs_page.h |
* |
* Copyright (C) 2000 Trond Myklebust |
* |
* NFS page cache wrapper. |
*/ |
#ifndef _LINUX_NFS_PAGE_H |
#define _LINUX_NFS_PAGE_H |
#include <linux/list.h> |
#include <linux/pagemap.h> |
#include <linux/wait.h> |
#include <linux/nfs_fs_sb.h> |
#include <linux/sunrpc/auth.h> |
#include <linux/nfs_xdr.h> |
/* |
* Valid flags for a dirty buffer |
*/ |
#define PG_BUSY 0 |
struct nfs_page { |
struct list_head wb_list, /* Defines state of page: */ |
*wb_list_head; /* read/write/commit */ |
struct file *wb_file; |
struct inode *wb_inode; |
struct rpc_cred *wb_cred; |
struct nfs4_state *wb_state; |
struct page *wb_page; /* page to read in/write out */ |
wait_queue_head_t wb_wait; /* wait queue */ |
unsigned long wb_index; /* Offset >> PAGE_CACHE_SHIFT */ |
unsigned int wb_offset, /* Offset & ~PAGE_CACHE_MASK */ |
wb_pgbase, /* Start of page data */ |
wb_bytes, /* Length of request */ |
wb_count; /* reference count */ |
unsigned long wb_flags; |
struct nfs_writeverf wb_verf; /* Commit cookie */ |
}; |
#define NFS_WBACK_BUSY(req) (test_bit(PG_BUSY,&(req)->wb_flags)) |
extern struct nfs_page *nfs_create_request(struct file *, struct inode *, |
struct page *, |
unsigned int, unsigned int); |
extern void nfs_clear_request(struct nfs_page *req); |
extern void nfs_release_request(struct nfs_page *req); |
extern void nfs_list_add_request(struct nfs_page *, struct list_head *); |
extern int nfs_scan_list(struct list_head *, struct list_head *, |
struct file *, unsigned long, unsigned int); |
extern int nfs_coalesce_requests(struct list_head *, struct list_head *, |
unsigned int); |
extern int nfs_wait_on_request(struct nfs_page *); |
extern spinlock_t nfs_wreq_lock; |
/* |
* Lock the page of an asynchronous request without incrementing the wb_count |
*/ |
static inline int |
nfs_lock_request_dontget(struct nfs_page *req) |
{ |
if (test_and_set_bit(PG_BUSY, &req->wb_flags)) |
return 0; |
return 1; |
} |
/* |
* Lock the page of an asynchronous request |
*/ |
static inline int |
nfs_lock_request(struct nfs_page *req) |
{ |
if (test_and_set_bit(PG_BUSY, &req->wb_flags)) |
return 0; |
req->wb_count++; |
return 1; |
} |
static inline void |
nfs_unlock_request(struct nfs_page *req) |
{ |
if (!NFS_WBACK_BUSY(req)) { |
printk(KERN_ERR "NFS: Invalid unlock attempted\n"); |
BUG(); |
} |
smp_mb__before_clear_bit(); |
clear_bit(PG_BUSY, &req->wb_flags); |
smp_mb__after_clear_bit(); |
if (waitqueue_active(&req->wb_wait)) |
wake_up_all(&req->wb_wait); |
nfs_release_request(req); |
} |
/** |
* nfs_list_remove_request - Remove a request from its wb_list |
* @req: request |
*/ |
static inline void |
nfs_list_remove_request(struct nfs_page *req) |
{ |
if (list_empty(&req->wb_list)) |
return; |
if (!NFS_WBACK_BUSY(req)) { |
printk(KERN_ERR "NFS: unlocked request attempted removed from list!\n"); |
BUG(); |
} |
list_del_init(&req->wb_list); |
req->wb_list_head = NULL; |
} |
static inline struct nfs_page * |
nfs_list_entry(struct list_head *head) |
{ |
return list_entry(head, struct nfs_page, wb_list); |
} |
static inline |
loff_t req_offset(struct nfs_page *req) |
{ |
return (((loff_t)req->wb_index) << PAGE_CACHE_SHIFT) + req->wb_offset; |
} |
#endif /* _LINUX_NFS_PAGE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/rmap-locking.h |
---|
0,0 → 1,23 |
/* |
* include/linux/rmap-locking.h |
* |
* Locking primitives for exclusive access to a page's reverse-mapping |
* pte chain. |
*/ |
#include <linux/slab.h> |
struct pte_chain; |
extern kmem_cache_t *pte_chain_cache; |
#define pte_chain_lock(page) bit_spin_lock(PG_chainlock, &page->flags) |
#define pte_chain_unlock(page) bit_spin_unlock(PG_chainlock, &page->flags) |
struct pte_chain *pte_chain_alloc(int gfp_flags); |
void __pte_chain_free(struct pte_chain *pte_chain); |
static inline void pte_chain_free(struct pte_chain *pte_chain) |
{ |
if (pte_chain) |
__pte_chain_free(pte_chain); |
} |
/shark/trunk/drivers/linuxc26/include/linux/nfs.h |
---|
0,0 → 1,154 |
/* |
* 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 _LINUX_NFS_H |
#define _LINUX_NFS_H |
#include <linux/sunrpc/msg_prot.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_PORT 627 |
/* |
* 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_READDIR_NOSPC = 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 */ |
NFSERR_REPLAY_ME = 10049 /* 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 |
}; |
#if defined(__KERNEL__) |
/* |
* This is the kernel NFS client file handle representation |
*/ |
#define NFS_MAXFHSIZE 128 |
struct nfs_fh { |
unsigned short size; |
unsigned char data[NFS_MAXFHSIZE]; |
}; |
/* |
* This is really a general kernel constant, but since nothing like |
* this is defined in the kernel headers, I have to do it here. |
*/ |
#define NFS_OFFSET_MAX ((__s64)((~(__u64)0) >> 1)) |
enum nfs3_stable_how { |
NFS_UNSTABLE = 0, |
NFS_DATA_SYNC = 1, |
NFS_FILE_SYNC = 2 |
}; |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_NFS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/quota.h |
---|
0,0 → 1,328 |
/* |
* 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. |
* |
* Version: $Id: quota.h,v 1.1 2004-01-28 15:26:24 giacomo Exp $ |
*/ |
#ifndef _LINUX_QUOTA_ |
#define _LINUX_QUOTA_ |
#include <linux/errno.h> |
#include <linux/types.h> |
#include <linux/spinlock.h> |
#define __DQUOT_VERSION__ "dquot_6.5.1" |
#define __DQUOT_NUM_VERSION__ 6*10000+5*100+1 |
typedef __kernel_uid32_t qid_t; /* Type in which we store ids in memory */ |
typedef __u64 qsize_t; /* Type in which we store sizes */ |
extern spinlock_t dq_list_lock; |
extern spinlock_t dq_data_lock; |
/* Size of blocks in which are counted size limits */ |
#define QUOTABLOCK_BITS 10 |
#define QUOTABLOCK_SIZE (1 << QUOTABLOCK_BITS) |
/* Conversion routines from and to quota blocks */ |
#define qb2kb(x) ((x) << (QUOTABLOCK_BITS-10)) |
#define kb2qb(x) ((x) >> (QUOTABLOCK_BITS-10)) |
#define toqb(x) (((x) + QUOTABLOCK_SIZE - 1) >> QUOTABLOCK_BITS) |
#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 structure used for communication with userspace via quotactl |
* Following flags are used to specify which fields are valid |
*/ |
#define QIF_BLIMITS 1 |
#define QIF_SPACE 2 |
#define QIF_ILIMITS 4 |
#define QIF_INODES 8 |
#define QIF_BTIME 16 |
#define QIF_ITIME 32 |
#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; |
}; |
#ifdef __KERNEL__ |
#include <linux/dqblk_xfs.h> |
#include <linux/dqblk_v1.h> |
#include <linux/dqblk_v2.h> |
/* |
* Data for one user/group kept in memory |
*/ |
struct mem_dqblk { |
__u32 dqb_bhardlimit; /* absolute limit on disk blks alloc */ |
__u32 dqb_bsoftlimit; /* preferred limit on disk blks */ |
qsize_t dqb_curspace; /* current used space */ |
__u32 dqb_ihardlimit; /* absolute limit on allocated inodes */ |
__u32 dqb_isoftlimit; /* preferred inode limit */ |
__u32 dqb_curinodes; /* current # allocated inodes */ |
time_t dqb_btime; /* time limit for excessive disk use */ |
time_t dqb_itime; /* time limit for excessive inode use */ |
}; |
/* |
* Data for one quotafile kept in memory |
*/ |
struct quota_format_type; |
struct mem_dqinfo { |
struct quota_format_type *dqi_format; |
unsigned long dqi_flags; |
unsigned int dqi_bgrace; |
unsigned int dqi_igrace; |
union { |
struct v1_mem_dqinfo v1_i; |
struct v2_mem_dqinfo v2_i; |
} u; |
}; |
#define DQF_MASK 0xffff /* Mask for format specific flags */ |
#define DQF_INFO_DIRTY_B 16 |
#define DQF_ANY_DQUOT_DIRTY_B 17 |
#define DQF_INFO_DIRTY (1 << DQF_INFO_DIRTY_B) /* Is info dirty? */ |
#define DQF_ANY_DQUOT_DIRTY (1 << DQF_ANY_DQUOT_DIRTY_B) /* Is any dquot dirty? */ |
extern inline void mark_info_dirty(struct mem_dqinfo *info) |
{ |
set_bit(DQF_INFO_DIRTY_B, &info->dqi_flags); |
} |
#define info_dirty(info) test_bit(DQF_INFO_DIRTY_B, &(info)->dqi_flags) |
#define info_any_dquot_dirty(info) test_bit(DQF_ANY_DQUOT_DIRTY_B, &(info)->dqi_flags) |
#define info_any_dirty(info) (info_dirty(info) || info_any_dquot_dirty(info)) |
#define sb_dqopt(sb) (&(sb)->s_dquot) |
struct dqstats { |
int lookups; |
int drops; |
int reads; |
int writes; |
int cache_hits; |
int allocated_dquots; |
int free_dquots; |
int syncs; |
}; |
extern struct dqstats dqstats; |
#define NR_DQHASH 43 /* Just an arbitrary number */ |
#define DQ_MOD_B 0 |
#define DQ_BLKS_B 1 |
#define DQ_INODES_B 2 |
#define DQ_FAKE_B 3 |
#define DQ_MOD (1 << DQ_MOD_B) /* dquot modified since read */ |
#define DQ_BLKS (1 << DQ_BLKS_B) /* uid/gid has been warned about blk limit */ |
#define DQ_INODES (1 << DQ_INODES_B) /* uid/gid has been warned about inode limit */ |
#define DQ_FAKE (1 << DQ_FAKE_B) /* no limits only usage */ |
struct dquot { |
struct list_head dq_hash; /* Hash list in memory */ |
struct list_head dq_inuse; /* List of all quotas */ |
struct list_head dq_free; /* Free list element */ |
struct semaphore dq_lock; /* dquot IO lock */ |
atomic_t dq_count; /* Use count */ |
/* fields after this point are cleared when invalidating */ |
struct super_block *dq_sb; /* superblock this applies to */ |
unsigned int dq_id; /* ID this applies to (uid, gid) */ |
loff_t dq_off; /* Offset of dquot on disk */ |
unsigned long dq_flags; /* See DQ_* */ |
short dq_type; /* Type of quota */ |
struct mem_dqblk dq_dqb; /* Diskquota usage */ |
}; |
#define NODQUOT (struct dquot *)NULL |
#define QUOTA_OK 0 |
#define NO_QUOTA 1 |
/* Operations which must be implemented by each quota format */ |
struct quota_format_ops { |
int (*check_quota_file)(struct super_block *sb, int type); /* Detect whether file is in our format */ |
int (*read_file_info)(struct super_block *sb, int type); /* Read main info about file - called on quotaon() */ |
int (*write_file_info)(struct super_block *sb, int type); /* Write main info about file */ |
int (*free_file_info)(struct super_block *sb, int type); /* Called on quotaoff() */ |
int (*read_dqblk)(struct dquot *dquot); /* Read structure for one user */ |
int (*commit_dqblk)(struct dquot *dquot); /* Write (or delete) structure for one user */ |
}; |
/* Operations working with dquots */ |
struct dquot_operations { |
void (*initialize) (struct inode *, int); |
void (*drop) (struct inode *); |
int (*alloc_space) (struct inode *, qsize_t, int); |
int (*alloc_inode) (const struct inode *, unsigned long); |
void (*free_space) (struct inode *, qsize_t); |
void (*free_inode) (const struct inode *, unsigned long); |
int (*transfer) (struct inode *, struct iattr *); |
int (*sync_dquot) (struct dquot *); |
}; |
/* Operations handling requests from userspace */ |
struct quotactl_ops { |
int (*quota_on)(struct super_block *, int, int, char *); |
int (*quota_off)(struct super_block *, int); |
int (*quota_sync)(struct super_block *, int); |
int (*get_info)(struct super_block *, int, struct if_dqinfo *); |
int (*set_info)(struct super_block *, int, struct if_dqinfo *); |
int (*get_dqblk)(struct super_block *, int, qid_t, struct if_dqblk *); |
int (*set_dqblk)(struct super_block *, int, qid_t, struct if_dqblk *); |
int (*get_xstate)(struct super_block *, struct fs_quota_stat *); |
int (*set_xstate)(struct super_block *, unsigned int, int); |
int (*get_xquota)(struct super_block *, int, qid_t, struct fs_disk_quota *); |
int (*set_xquota)(struct super_block *, int, qid_t, struct fs_disk_quota *); |
}; |
struct quota_format_type { |
int qf_fmt_id; /* Quota format id */ |
struct quota_format_ops *qf_ops; /* Operations of format */ |
struct module *qf_owner; /* Module implementing quota format */ |
struct quota_format_type *qf_next; |
}; |
#define DQUOT_USR_ENABLED 0x01 /* User diskquotas enabled */ |
#define DQUOT_GRP_ENABLED 0x02 /* Group diskquotas enabled */ |
struct quota_info { |
unsigned int flags; /* Flags for diskquotas on this device */ |
struct semaphore dqio_sem; /* lock device while I/O in progress */ |
struct semaphore dqonoff_sem; /* Serialize quotaon & quotaoff */ |
struct rw_semaphore dqptr_sem; /* serialize ops using quota_info struct, pointers from inode to dquots */ |
struct file *files[MAXQUOTAS]; /* fp's to quotafiles */ |
struct mem_dqinfo info[MAXQUOTAS]; /* Information for each quota type */ |
struct quota_format_ops *ops[MAXQUOTAS]; /* Operations for each type */ |
}; |
/* Inline would be better but we need to dereference super_block which is not defined yet */ |
#define mark_dquot_dirty(dquot) do {\ |
set_bit(DQF_ANY_DQUOT_DIRTY_B, &(sb_dqopt((dquot)->dq_sb)->info[(dquot)->dq_type].dqi_flags));\ |
set_bit(DQ_MOD_B, &(dquot)->dq_flags);\ |
} while (0) |
#define dquot_dirty(dquot) test_bit(DQ_MOD_B, &(dquot)->dq_flags) |
#define sb_has_quota_enabled(sb, type) ((type)==USRQUOTA ? \ |
(sb_dqopt(sb)->flags & DQUOT_USR_ENABLED) : (sb_dqopt(sb)->flags & DQUOT_GRP_ENABLED)) |
#define sb_any_quota_enabled(sb) (sb_has_quota_enabled(sb, USRQUOTA) | \ |
sb_has_quota_enabled(sb, GRPQUOTA)) |
int register_quota_format(struct quota_format_type *fmt); |
void unregister_quota_format(struct quota_format_type *fmt); |
void init_dquot_operations(struct dquot_operations *fsdqops); |
struct quota_module_name { |
int qm_fmt_id; |
char *qm_mod_name; |
}; |
#define INIT_QUOTA_MODULE_NAMES {\ |
{QFMT_VFS_OLD, "quota_v1"},\ |
{QFMT_VFS_V0, "quota_v2"},\ |
{0, NULL}} |
#else |
# /* nodep */ include <sys/cdefs.h> |
__BEGIN_DECLS |
long quotactl __P ((unsigned int, const char *, int, caddr_t)); |
__END_DECLS |
#endif /* __KERNEL__ */ |
#endif /* _QUOTA_ */ |
/shark/trunk/drivers/linuxc26/include/linux/vfs.h |
---|
0,0 → 1,6 |
#ifndef _LINUX_VFS_H |
#define _LINUX_VFS_H |
#include <linux/statfs.h> |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/tty_ldisc.h |
---|
0,0 → 1,144 |
#ifndef _LINUX_TTY_LDISC_H |
#define _LINUX_TTY_LDISC_H |
/* |
* This structure defines the interface between the tty line discipline |
* implementation and the tty routines. The following routines can be |
* defined; unless noted otherwise, they are optional, and can be |
* filled in with a null pointer. |
* |
* int (*open)(struct tty_struct *); |
* |
* This function is called when the line discipline is associated |
* with the tty. The line discipline can use this as an |
* opportunity to initialize any state needed by the ldisc routines. |
* |
* void (*close)(struct tty_struct *); |
* |
* This function is called when the line discipline is being |
* shutdown, either because the tty is being closed or because |
* the tty is being changed to use a new line discipline |
* |
* void (*flush_buffer)(struct tty_struct *tty); |
* |
* This function instructs the line discipline to clear its |
* buffers of any input characters it may have queued to be |
* delivered to the user mode process. |
* |
* ssize_t (*chars_in_buffer)(struct tty_struct *tty); |
* |
* This function returns the number of input characters the line |
* discipline may have queued up to be delivered to the user mode |
* process. |
* |
* ssize_t (*read)(struct tty_struct * tty, struct file * file, |
* unsigned char * buf, size_t nr); |
* |
* This function is called when the user requests to read from |
* the tty. The line discipline will return whatever characters |
* it has buffered up for the user. If this function is not |
* defined, the user will receive an EIO error. |
* |
* ssize_t (*write)(struct tty_struct * tty, struct file * file, |
* const unsigned char * buf, size_t nr); |
* |
* This function is called when the user requests to write to the |
* tty. The line discipline will deliver the characters to the |
* low-level tty device for transmission, optionally performing |
* some processing on the characters first. If this function is |
* not defined, the user will receive an EIO error. |
* |
* int (*ioctl)(struct tty_struct * tty, struct file * file, |
* unsigned int cmd, unsigned long arg); |
* |
* This function is called when the user requests an ioctl which |
* is not handled by the tty layer or the low-level tty driver. |
* It is intended for ioctls which affect line discpline |
* operation. Note that the search order for ioctls is (1) tty |
* layer, (2) tty low-level driver, (3) line discpline. So a |
* low-level driver can "grab" an ioctl request before the line |
* discpline has a chance to see it. |
* |
* void (*set_termios)(struct tty_struct *tty, struct termios * old); |
* |
* This function notifies the line discpline that a change has |
* been made to the termios structure. |
* |
* int (*poll)(struct tty_struct * tty, struct file * file, |
* poll_table *wait); |
* |
* This function is called when a user attempts to select/poll on a |
* tty device. It is solely the responsibility of the line |
* discipline to handle poll requests. |
* |
* void (*receive_buf)(struct tty_struct *, const unsigned char *cp, |
* char *fp, int count); |
* |
* This function is called by the low-level tty driver to send |
* characters received by the hardware to the line discpline for |
* processing. <cp> is a pointer to the buffer of input |
* character received by the device. <fp> is a pointer to a |
* pointer of flag bytes which indicate whether a character was |
* received with a parity error, etc. |
* |
* int (*receive_room)(struct tty_struct *); |
* |
* This function is called by the low-level tty driver to |
* determine how many characters the line discpline can accept. |
* The low-level driver must not send more characters than was |
* indicated by receive_room, or the line discpline may drop |
* those characters. |
* |
* void (*write_wakeup)(struct tty_struct *); |
* |
* This function is called by the low-level tty driver to signal |
* that line discpline should try to send more characters to the |
* low-level driver for transmission. If the line discpline does |
* not have any more data to send, it can just return. |
*/ |
#include <linux/fs.h> |
#include <linux/wait.h> |
struct tty_ldisc { |
int magic; |
char *name; |
int num; |
int flags; |
/* |
* The following routines are called from above. |
*/ |
int (*open)(struct tty_struct *); |
void (*close)(struct tty_struct *); |
void (*flush_buffer)(struct tty_struct *tty); |
ssize_t (*chars_in_buffer)(struct tty_struct *tty); |
ssize_t (*read)(struct tty_struct * tty, struct file * file, |
unsigned char * buf, size_t nr); |
ssize_t (*write)(struct tty_struct * tty, struct file * file, |
const unsigned char * buf, size_t nr); |
int (*ioctl)(struct tty_struct * tty, struct file * file, |
unsigned int cmd, unsigned long arg); |
void (*set_termios)(struct tty_struct *tty, struct termios * old); |
unsigned int (*poll)(struct tty_struct *, struct file *, |
struct poll_table_struct *); |
/* |
* The following routines are called from below. |
*/ |
void (*receive_buf)(struct tty_struct *, const unsigned char *cp, |
char *fp, int count); |
int (*receive_room)(struct tty_struct *); |
void (*write_wakeup)(struct tty_struct *); |
struct module *owner; |
}; |
#define TTY_LDISC_MAGIC 0x5403 |
#define LDISC_FLAG_DEFINED 0x00000001 |
#define MODULE_ALIAS_LDISC(ldisc) \ |
MODULE_ALIAS("tty-ldisc-" __stringify(ldisc)) |
#endif /* _LINUX_TTY_LDISC_H */ |
/shark/trunk/drivers/linuxc26/include/linux/ppp.h |
---|
0,0 → 1,4 |
/* |
* Back compatibility for a while. |
*/ |
#include <linux/if_ppp.h> |
/shark/trunk/drivers/linuxc26/include/linux/devfs_fs_kernel.h |
---|
0,0 → 1,58 |
#ifndef _LINUX_DEVFS_FS_KERNEL_H |
#define _LINUX_DEVFS_FS_KERNEL_H |
#include <linux/fs.h> |
#include <linux/config.h> |
#include <linux/spinlock.h> |
#include <linux/types.h> |
#include <asm/semaphore.h> |
#define DEVFS_SUPER_MAGIC 0x1373 |
#ifdef CONFIG_DEVFS_FS |
extern int devfs_mk_bdev(dev_t dev, umode_t mode, const char *fmt, ...) |
__attribute__((format (printf, 3, 4))); |
extern int devfs_mk_cdev(dev_t dev, umode_t mode, const char *fmt, ...) |
__attribute__((format (printf, 3, 4))); |
extern int devfs_mk_symlink(const char *name, const char *link); |
extern int devfs_mk_dir(const char *fmt, ...) |
__attribute__((format (printf, 1, 2))); |
extern void devfs_remove(const char *fmt, ...) |
__attribute__((format (printf, 1, 2))); |
extern int devfs_register_tape(const char *name); |
extern void devfs_unregister_tape(int num); |
extern void mount_devfs_fs(void); |
#else /* CONFIG_DEVFS_FS */ |
static inline int devfs_mk_bdev(dev_t dev, umode_t mode, const char *fmt, ...) |
{ |
return 0; |
} |
static inline int devfs_mk_cdev(dev_t dev, umode_t mode, const char *fmt, ...) |
{ |
return 0; |
} |
static inline int devfs_mk_symlink (const char *name, const char *link) |
{ |
return 0; |
} |
static inline int devfs_mk_dir(const char *fmt, ...) |
{ |
return 0; |
} |
static inline void devfs_remove(const char *fmt, ...) |
{ |
} |
static inline int devfs_register_tape (const char *name) |
{ |
return -1; |
} |
static inline void devfs_unregister_tape(int num) |
{ |
} |
static inline void mount_devfs_fs (void) |
{ |
return; |
} |
#endif /* CONFIG_DEVFS_FS */ |
#endif /* _LINUX_DEVFS_FS_KERNEL_H */ |
/shark/trunk/drivers/linuxc26/include/linux/param.h |
---|
0,0 → 1,6 |
#ifndef _LINUX_PARAM_H |
#define _LINUX_PARAM_H |
#include <asm/param.h> |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/cycx_x25.h |
---|
0,0 → 1,125 |
#ifndef _CYCX_X25_H |
#define _CYCX_X25_H |
/* |
* cycx_x25.h Cyclom X.25 firmware API definitions. |
* |
* Author: Arnaldo Carvalho de Melo <acme@conectiva.com.br> |
* |
* Copyright: (c) 1998-2003 Arnaldo Carvalho de Melo |
* |
* Based on sdla_x25.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. |
* ============================================================================ |
* 2000/04/02 acme dprintk and cycx_debug |
* 1999/01/03 acme judicious use of data types |
* 1999/01/02 acme #define X25_ACK_N3 0x4411 |
* 1998/12/28 acme cleanup: lot'o'things removed |
* commands listed, |
* TX25Cmd & TX25Config structs |
* typedef'ed |
*/ |
#ifndef PACKED |
#define PACKED __attribute__((packed)) |
#endif |
/* X.25 shared memory layout. */ |
#define X25_MBOX_OFFS 0x300 /* general mailbox block */ |
#define X25_RXMBOX_OFFS 0x340 /* receive mailbox */ |
/* Debug */ |
#define dprintk(level, format, a...) if (cycx_debug >= level) printk(format, ##a) |
extern unsigned int cycx_debug; |
/* Data Structures */ |
/* X.25 Command Block. */ |
struct cycx_x25_cmd { |
u16 command PACKED; |
u16 link PACKED; /* values: 0 or 1 */ |
u16 len PACKED; /* values: 0 thru 0x205 (517) */ |
u32 buf PACKED; |
}; |
/* Defines for the 'command' field. */ |
#define X25_CONNECT_REQUEST 0x4401 |
#define X25_CONNECT_RESPONSE 0x4402 |
#define X25_DISCONNECT_REQUEST 0x4403 |
#define X25_DISCONNECT_RESPONSE 0x4404 |
#define X25_DATA_REQUEST 0x4405 |
#define X25_ACK_TO_VC 0x4406 |
#define X25_INTERRUPT_RESPONSE 0x4407 |
#define X25_CONFIG 0x4408 |
#define X25_CONNECT_INDICATION 0x4409 |
#define X25_CONNECT_CONFIRM 0x440A |
#define X25_DISCONNECT_INDICATION 0x440B |
#define X25_DISCONNECT_CONFIRM 0x440C |
#define X25_DATA_INDICATION 0x440E |
#define X25_INTERRUPT_INDICATION 0x440F |
#define X25_ACK_FROM_VC 0x4410 |
#define X25_ACK_N3 0x4411 |
#define X25_CONNECT_COLLISION 0x4413 |
#define X25_N3WIN 0x4414 |
#define X25_LINE_ON 0x4415 |
#define X25_LINE_OFF 0x4416 |
#define X25_RESET_REQUEST 0x4417 |
#define X25_LOG 0x4500 |
#define X25_STATISTIC 0x4600 |
#define X25_TRACE 0x4700 |
#define X25_N2TRACEXC 0x4702 |
#define X25_N3TRACEXC 0x4703 |
/** |
* struct cycx_x25_config - cyclom2x x25 firmware configuration |
* @link - link number |
* @speed - line speed |
* @clock - internal/external |
* @n2 - # of level 2 retransm.(values: 1 thru FF) |
* @n2win - level 2 window (values: 1 thru 7) |
* @n3win - level 3 window (values: 1 thru 7) |
* @nvc - # of logical channels (values: 1 thru 64) |
* @pktlen - level 3 packet lenght - log base 2 of size |
* @locaddr - my address |
* @remaddr - remote address |
* @t1 - time, in seconds |
* @t2 - time, in seconds |
* @t21 - time, in seconds |
* @npvc - # of permanent virt. circuits (1 thru nvc) |
* @t23 - time, in seconds |
* @flags - see dosx25.doc, in portuguese, for details |
*/ |
struct cycx_x25_config { |
u8 link PACKED; |
u8 speed PACKED; |
u8 clock PACKED; |
u8 n2 PACKED; |
u8 n2win PACKED; |
u8 n3win PACKED; |
u8 nvc PACKED; |
u8 pktlen PACKED; |
u8 locaddr PACKED; |
u8 remaddr PACKED; |
u16 t1 PACKED; |
u16 t2 PACKED; |
u8 t21 PACKED; |
u8 npvc PACKED; |
u8 t23 PACKED; |
u8 flags PACKED; |
}; |
struct cycx_x25_stats { |
u16 rx_crc_errors PACKED; |
u16 rx_over_errors PACKED; |
u16 n2_tx_frames PACKED; |
u16 n2_rx_frames PACKED; |
u16 tx_timeouts PACKED; |
u16 rx_timeouts PACKED; |
u16 n3_tx_packets PACKED; |
u16 n3_rx_packets PACKED; |
u16 tx_aborts PACKED; |
u16 rx_aborts PACKED; |
}; |
#endif /* _CYCX_X25_H */ |
/shark/trunk/drivers/linuxc26/include/linux/pnpbios.h |
---|
0,0 → 1,156 |
/* |
* Include file for the interface to a PnP BIOS |
* |
* Original BIOS code (C) 1998 Christian Schmidt (chr.schmidt@tu-bs.de) |
* PnP handler parts (c) 1998 Tom Lees <tom@lpsg.demon.co.uk> |
* Minor reorganizations by David Hinds <dahinds@users.sourceforge.net> |
* |
* 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. |
* |
* 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_PNPBIOS_H |
#define _LINUX_PNPBIOS_H |
#ifdef __KERNEL__ |
#include <linux/types.h> |
#include <linux/pnp.h> |
/* |
* Return codes |
*/ |
#define PNP_SUCCESS 0x00 |
#define PNP_NOT_SET_STATICALLY 0x7f |
#define PNP_UNKNOWN_FUNCTION 0x81 |
#define PNP_FUNCTION_NOT_SUPPORTED 0x82 |
#define PNP_INVALID_HANDLE 0x83 |
#define PNP_BAD_PARAMETER 0x84 |
#define PNP_SET_FAILED 0x85 |
#define PNP_EVENTS_NOT_PENDING 0x86 |
#define PNP_SYSTEM_NOT_DOCKED 0x87 |
#define PNP_NO_ISA_PNP_CARDS 0x88 |
#define PNP_UNABLE_TO_DETERMINE_DOCK_CAPABILITIES 0x89 |
#define PNP_CONFIG_CHANGE_FAILED_NO_BATTERY 0x8a |
#define PNP_CONFIG_CHANGE_FAILED_RESOURCE_CONFLICT 0x8b |
#define PNP_BUFFER_TOO_SMALL 0x8c |
#define PNP_USE_ESCD_SUPPORT 0x8d |
#define PNP_MESSAGE_NOT_SUPPORTED 0x8e |
#define PNP_HARDWARE_ERROR 0x8f |
#define ESCD_SUCCESS 0x00 |
#define ESCD_IO_ERROR_READING 0x55 |
#define ESCD_INVALID 0x56 |
#define ESCD_BUFFER_TOO_SMALL 0x59 |
#define ESCD_NVRAM_TOO_SMALL 0x5a |
#define ESCD_FUNCTION_NOT_SUPPORTED 0x81 |
/* |
* Events that can be received by "get event" |
*/ |
#define PNPEV_ABOUT_TO_CHANGE_CONFIG 0x0001 |
#define PNPEV_DOCK_CHANGED 0x0002 |
#define PNPEV_SYSTEM_DEVICE_CHANGED 0x0003 |
#define PNPEV_CONFIG_CHANGED_FAILED 0x0004 |
#define PNPEV_UNKNOWN_SYSTEM_EVENT 0xffff |
/* 0x8000 through 0xfffe are OEM defined */ |
/* |
* Messages that should be sent through "send message" |
*/ |
#define PNPMSG_OK 0x00 |
#define PNPMSG_ABORT 0x01 |
#define PNPMSG_UNDOCK_DEFAULT_ACTION 0x40 |
#define PNPMSG_POWER_OFF 0x41 |
#define PNPMSG_PNP_OS_ACTIVE 0x42 |
#define PNPMSG_PNP_OS_INACTIVE 0x43 |
/* |
* Plug and Play BIOS flags |
*/ |
#define PNPBIOS_NO_DISABLE 0x0001 |
#define PNPBIOS_NO_CONFIG 0x0002 |
#define PNPBIOS_OUTPUT 0x0004 |
#define PNPBIOS_INPUT 0x0008 |
#define PNPBIOS_BOOTABLE 0x0010 |
#define PNPBIOS_DOCK 0x0020 |
#define PNPBIOS_REMOVABLE 0x0040 |
#define pnpbios_is_static(x) (((x)->flags & 0x0100) == 0x0000) |
#define pnpbios_is_dynamic(x) ((x)->flags & 0x0080) |
/* |
* Function Parameters |
*/ |
#define PNPMODE_STATIC 1 |
#define PNPMODE_DYNAMIC 0 |
/* 0x8000 through 0xffff are OEM defined */ |
#pragma pack(1) |
struct pnp_dev_node_info { |
__u16 no_nodes; |
__u16 max_node_size; |
}; |
struct pnp_docking_station_info { |
__u32 location_id; |
__u32 serial; |
__u16 capabilities; |
}; |
struct pnp_isa_config_struc { |
__u8 revision; |
__u8 no_csns; |
__u16 isa_rd_data_port; |
__u16 reserved; |
}; |
struct escd_info_struc { |
__u16 min_escd_write_size; |
__u16 escd_size; |
__u32 nv_storage_base; |
}; |
struct pnp_bios_node { |
__u16 size; |
__u8 handle; |
__u32 eisa_id; |
__u8 type_code[3]; |
__u16 flags; |
__u8 data[0]; |
}; |
#pragma pack() |
#ifdef CONFIG_PNPBIOS |
/* non-exported */ |
extern struct pnp_dev_node_info node_info; |
extern int pnp_bios_dev_node_info (struct pnp_dev_node_info *data); |
extern int pnp_bios_get_dev_node (u8 *nodenum, char config, struct pnp_bios_node *data); |
extern int pnp_bios_set_dev_node (u8 nodenum, char config, struct pnp_bios_node *data); |
extern int pnp_bios_get_stat_res (char *info); |
extern int pnp_bios_isapnp_config (struct pnp_isa_config_struc *data); |
extern int pnp_bios_escd_info (struct escd_info_struc *data); |
extern int pnp_bios_read_escd (char *data, u32 nvram_base); |
extern int pnp_bios_dock_station_info(struct pnp_docking_station_info *data); |
#if needed |
extern int pnp_bios_get_event (u16 *message); |
extern int pnp_bios_send_message (u16 message); |
extern int pnp_bios_set_stat_res (char *info); |
extern int pnp_bios_apm_id_table (char *table, u16 *size); |
extern int pnp_bios_write_escd (char *data, u32 nvram_base); |
#endif |
#endif /* CONFIG_PNPBIOS */ |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_PNPBIOS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/if_bridge.h |
---|
0,0 → 1,110 |
/* |
* Linux ethernet bridge |
* |
* Authors: |
* Lennert Buytenhek <buytenh@gnu.org> |
* |
* $Id: if_bridge.h,v 1.1 2004-01-28 15:25:32 giacomo Exp $ |
* |
* 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_BRIDGE_H |
#define _LINUX_IF_BRIDGE_H |
#include <linux/types.h> |
#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; |
__u32 unused; |
}; |
#ifdef __KERNEL__ |
#include <linux/netdevice.h> |
struct net_bridge; |
struct net_bridge_port; |
extern void brioctl_set(int (*ioctl_hook)(unsigned long)); |
extern int (*br_handle_frame_hook)(struct sk_buff *skb); |
extern int (*br_should_route_hook)(struct sk_buff **pskb); |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/circ_buf.h |
---|
0,0 → 1,32 |
#ifndef _LINUX_CIRC_BUF_H |
#define _LINUX_CIRC_BUF_H 1 |
struct circ_buf { |
char *buf; |
int head; |
int tail; |
}; |
/* Return count in buffer. */ |
#define CIRC_CNT(head,tail,size) (((head) - (tail)) & ((size)-1)) |
/* Return space available, 0..size-1. We always leave one free char |
as a completely full buffer has head == tail, which is the same as |
empty. */ |
#define CIRC_SPACE(head,tail,size) CIRC_CNT((tail),((head)+1),(size)) |
/* Return count up to the end of the buffer. Carefully avoid |
accessing head and tail more than once, so they can change |
underneath us without returning inconsistent results. */ |
#define CIRC_CNT_TO_END(head,tail,size) \ |
({int end = (size) - (tail); \ |
int n = ((head) + end) & ((size)-1); \ |
n < end ? n : end;}) |
/* Return space available up to the end of the buffer. */ |
#define CIRC_SPACE_TO_END(head,tail,size) \ |
({int end = (size) - 1 - (head); \ |
int n = (end + (tail)) & ((size)-1); \ |
n <= end ? n : end+1;}) |
#endif /* _LINUX_CIRC_BUF_H */ |
/shark/trunk/drivers/linuxc26/include/linux/kobject.h |
---|
0,0 → 1,224 |
/* |
* kobject.h - generic kernel object infrastructure. |
* |
* Copyright (c) 2002-2003 Patrick Mochel |
* Copyright (c) 2002-2003 Open Source Development Labs |
* |
* This file is released under the GPLv2. |
* |
* |
* Please read Documentation/kobject.txt before using the kobject |
* interface, ESPECIALLY the parts about reference counts and object |
* destructors. |
*/ |
#if defined(__KERNEL__) && !defined(_KOBJECT_H_) |
#define _KOBJECT_H_ |
#include <linux/types.h> |
#include <linux/list.h> |
#include <linux/sysfs.h> |
#include <linux/rwsem.h> |
#include <asm/atomic.h> |
#define KOBJ_NAME_LEN 20 |
struct kobject { |
char * k_name; |
char name[KOBJ_NAME_LEN]; |
atomic_t refcount; |
struct list_head entry; |
struct kobject * parent; |
struct kset * kset; |
struct kobj_type * ktype; |
struct dentry * dentry; |
}; |
extern int kobject_set_name(struct kobject *, const char *, ...) |
__attribute__((format(printf,2,3))); |
static inline char * kobject_name(struct kobject * kobj) |
{ |
return kobj->k_name; |
} |
extern void kobject_init(struct kobject *); |
extern void kobject_cleanup(struct kobject *); |
extern int kobject_add(struct kobject *); |
extern void kobject_del(struct kobject *); |
extern void kobject_rename(struct kobject *, char *new_name); |
extern int kobject_register(struct kobject *); |
extern void kobject_unregister(struct kobject *); |
extern struct kobject * kobject_get(struct kobject *); |
extern void kobject_put(struct kobject *); |
struct kobj_type { |
void (*release)(struct kobject *); |
struct sysfs_ops * sysfs_ops; |
struct attribute ** default_attrs; |
}; |
/** |
* kset - a set of kobjects of a specific type, belonging |
* to a specific subsystem. |
* |
* All kobjects of a kset should be embedded in an identical |
* type. This type may have a descriptor, which the kset points |
* to. This allows there to exist sets of objects of the same |
* type in different subsystems. |
* |
* A subsystem does not have to be a list of only one type |
* of object; multiple ksets can belong to one subsystem. All |
* ksets of a subsystem share the subsystem's lock. |
* |
* Each kset can support hotplugging; if it does, it will be given |
* the opportunity to filter out specific kobjects from being |
* reported, as well as to add its own "data" elements to the |
* environment being passed to the hotplug helper. |
*/ |
struct kset_hotplug_ops { |
int (*filter)(struct kset *kset, struct kobject *kobj); |
char *(*name)(struct kset *kset, struct kobject *kobj); |
int (*hotplug)(struct kset *kset, struct kobject *kobj, char **envp, |
int num_envp, char *buffer, int buffer_size); |
}; |
struct kset { |
struct subsystem * subsys; |
struct kobj_type * ktype; |
struct list_head list; |
struct kobject kobj; |
struct kset_hotplug_ops * hotplug_ops; |
}; |
extern void kset_init(struct kset * k); |
extern int kset_add(struct kset * k); |
extern int kset_register(struct kset * k); |
extern void kset_unregister(struct kset * k); |
static inline struct kset * to_kset(struct kobject * kobj) |
{ |
return kobj ? container_of(kobj,struct kset,kobj) : NULL; |
} |
static inline struct kset * kset_get(struct kset * k) |
{ |
return k ? to_kset(kobject_get(&k->kobj)) : NULL; |
} |
static inline void kset_put(struct kset * k) |
{ |
kobject_put(&k->kobj); |
} |
static inline struct kobj_type * get_ktype(struct kobject * k) |
{ |
if (k->kset && k->kset->ktype) |
return k->kset->ktype; |
else |
return k->ktype; |
} |
extern struct kobject * kset_find_obj(struct kset *, const char *); |
/** |
* Use this when initializing an embedded kset with no other |
* fields to initialize. |
*/ |
#define set_kset_name(str) .kset = { .kobj = { .name = str } } |
struct subsystem { |
struct kset kset; |
struct rw_semaphore rwsem; |
}; |
#define decl_subsys(_name,_type,_hotplug_ops) \ |
struct subsystem _name##_subsys = { \ |
.kset = { \ |
.kobj = { .name = __stringify(_name) }, \ |
.ktype = _type, \ |
.hotplug_ops =_hotplug_ops, \ |
} \ |
} |
/** |
* Helpers for setting the kset of registered objects. |
* Often, a registered object belongs to a kset embedded in a |
* subsystem. These do no magic, just make the resulting code |
* easier to follow. |
*/ |
/** |
* kobj_set_kset_s(obj,subsys) - set kset for embedded kobject. |
* @obj: ptr to some object type. |
* @subsys: a subsystem object (not a ptr). |
* |
* Can be used for any object type with an embedded ->kobj. |
*/ |
#define kobj_set_kset_s(obj,subsys) \ |
(obj)->kobj.kset = &(subsys).kset |
/** |
* kset_set_kset_s(obj,subsys) - set kset for embedded kset. |
* @obj: ptr to some object type. |
* @subsys: a subsystem object (not a ptr). |
* |
* Can be used for any object type with an embedded ->kset. |
* Sets the kset of @obj's embedded kobject (via its embedded |
* kset) to @subsys.kset. This makes @obj a member of that |
* kset. |
*/ |
#define kset_set_kset_s(obj,subsys) \ |
(obj)->kset.kobj.kset = &(subsys).kset |
/** |
* subsys_set_kset(obj,subsys) - set kset for subsystem |
* @obj: ptr to some object type. |
* @subsys: a subsystem object (not a ptr). |
* |
* Can be used for any object type with an embedded ->subsys. |
* Sets the kset of @obj's kobject to @subsys.kset. This makes |
* the object a member of that kset. |
*/ |
#define subsys_set_kset(obj,_subsys) \ |
(obj)->subsys.kset.kobj.kset = &(_subsys).kset |
extern void subsystem_init(struct subsystem *); |
extern int subsystem_register(struct subsystem *); |
extern void subsystem_unregister(struct subsystem *); |
static inline struct subsystem * subsys_get(struct subsystem * s) |
{ |
return s ? container_of(kset_get(&s->kset),struct subsystem,kset) : NULL; |
} |
static inline void subsys_put(struct subsystem * s) |
{ |
kset_put(&s->kset); |
} |
struct subsys_attribute { |
struct attribute attr; |
ssize_t (*show)(struct subsystem *, char *); |
ssize_t (*store)(struct subsystem *, const char *, size_t); |
}; |
extern int subsys_create_file(struct subsystem * , struct subsys_attribute *); |
extern void subsys_remove_file(struct subsystem * , struct subsys_attribute *); |
#endif /* _KOBJECT_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/fadvise.h |
---|
0,0 → 1,11 |
#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. */ |
#define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ |
#define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ |
#endif /* FADVISE_H_INCLUDED */ |
/shark/trunk/drivers/linuxc26/include/linux/vt_buffer.h |
---|
0,0 → 1,64 |
/* |
* include/linux/vt_buffer.h -- Access to VT screen buffer |
* |
* (c) 1998 Martin Mares <mj@ucw.cz> |
* |
* This is a set of macros and functions which are used in the |
* console driver and related code to access the screen buffer. |
* In most cases the console works with simple in-memory buffer, |
* but when handling hardware text mode consoles, we store |
* the foreground console directly in video memory. |
*/ |
#ifndef _LINUX_VT_BUFFER_H_ |
#define _LINUX_VT_BUFFER_H_ |
#include <linux/config.h> |
#if defined(CONFIG_VGA_CONSOLE) || defined(CONFIG_MDA_CONSOLE) |
#include <asm/vga.h> |
#endif |
#ifndef VT_BUF_HAVE_RW |
#define scr_writew(val, addr) (*(addr) = (val)) |
#define scr_readw(addr) (*(addr)) |
#define scr_memcpyw(d, s, c) memcpy(d, s, c) |
#define scr_memmovew(d, s, c) memmove(d, s, c) |
#define VT_BUF_HAVE_MEMCPYW |
#define VT_BUF_HAVE_MEMMOVEW |
#endif |
#ifndef VT_BUF_HAVE_MEMSETW |
static inline void scr_memsetw(u16 *s, u16 c, unsigned int count) |
{ |
count /= 2; |
while (count--) |
scr_writew(c, s++); |
} |
#endif |
#ifndef VT_BUF_HAVE_MEMCPYW |
static inline void scr_memcpyw(u16 *d, const u16 *s, unsigned int count) |
{ |
count /= 2; |
while (count--) |
scr_writew(scr_readw(s++), d++); |
} |
#endif |
#ifndef VT_BUF_HAVE_MEMMOVEW |
static inline void scr_memmovew(u16 *d, const u16 *s, unsigned int count) |
{ |
if (d < s) |
scr_memcpyw(d, s, count); |
else { |
count /= 2; |
d += count; |
s += count; |
while (count--) |
scr_writew(scr_readw(--s), --d); |
} |
} |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/nmi.h |
---|
0,0 → 1,22 |
/* |
* linux/include/linux/nmi.h |
*/ |
#ifndef LINUX_NMI_H |
#define LINUX_NMI_H |
#include <asm/irq.h> |
/** |
* touch_nmi_watchdog - restart NMI watchdog timeout. |
* |
* If the architecture supports the NMI watchdog, touch_nmi_watchdog() |
* may be used to reset the timeout - for code which intentionally |
* disables interrupts for a long time. This call is stateless. |
*/ |
#ifdef ARCH_HAS_NMI_WATCHDOG |
extern void touch_nmi_watchdog(void); |
#else |
# define touch_nmi_watchdog() do { } while(0) |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/compiler-intel.h |
---|
0,0 → 1,24 |
/* Never include this file directly. Include <linux/compiler.h> instead. */ |
#ifdef __ECC |
/* Some compiler specific definitions are overwritten here |
* for Intel ECC compiler |
*/ |
#include <asm/intrinsics.h> |
/* Intel ECC compiler doesn't support gcc specific asm stmts. |
* It uses intrinsics to do the equivalent things. |
*/ |
#undef barrier |
#undef RELOC_HIDE |
#define barrier() __memory_barrier() |
#define RELOC_HIDE(ptr, off) \ |
({ unsigned long __ptr; \ |
__ptr = (unsigned long) (ptr); \ |
(typeof(ptr)) (__ptr + (off)); }) |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/init_task.h |
---|
0,0 → 1,115 |
#ifndef _LINUX__INIT_TASK_H |
#define _LINUX__INIT_TASK_H |
#include <linux/file.h> |
#define INIT_FILES \ |
{ \ |
.count = ATOMIC_INIT(1), \ |
.file_lock = SPIN_LOCK_UNLOCKED, \ |
.max_fds = NR_OPEN_DEFAULT, \ |
.max_fdset = __FD_SETSIZE, \ |
.next_fd = 0, \ |
.fd = &init_files.fd_array[0], \ |
.close_on_exec = &init_files.close_on_exec_init, \ |
.open_fds = &init_files.open_fds_init, \ |
.close_on_exec_init = { { 0, } }, \ |
.open_fds_init = { { 0, } }, \ |
.fd_array = { NULL, } \ |
} |
#define INIT_KIOCTX(name, which_mm) \ |
{ \ |
.users = ATOMIC_INIT(1), \ |
.dead = 0, \ |
.mm = &which_mm, \ |
.user_id = 0, \ |
.next = NULL, \ |
.wait = __WAIT_QUEUE_HEAD_INITIALIZER(name.wait), \ |
.ctx_lock = SPIN_LOCK_UNLOCKED, \ |
.reqs_active = 0U, \ |
.max_reqs = ~0U, \ |
} |
#define INIT_MM(name) \ |
{ \ |
.mm_rb = RB_ROOT, \ |
.pgd = swapper_pg_dir, \ |
.mm_users = ATOMIC_INIT(2), \ |
.mm_count = ATOMIC_INIT(1), \ |
.mmap_sem = __RWSEM_INITIALIZER(name.mmap_sem), \ |
.page_table_lock = SPIN_LOCK_UNLOCKED, \ |
.mmlist = LIST_HEAD_INIT(name.mmlist), \ |
.default_kioctx = INIT_KIOCTX(name.default_kioctx, name), \ |
} |
#define INIT_SIGNALS(sig) { \ |
.count = ATOMIC_INIT(1), \ |
.shared_pending = { \ |
.list = LIST_HEAD_INIT(sig.shared_pending.list), \ |
.signal = {{0}}}, \ |
} |
#define INIT_SIGHAND(sighand) { \ |
.count = ATOMIC_INIT(1), \ |
.action = { {{0,}}, }, \ |
.siglock = SPIN_LOCK_UNLOCKED, \ |
} |
/* |
* INIT_TASK is used to set up the first task table, touch at |
* your own risk!. Base=0, limit=0x1fffff (=2MB) |
*/ |
#define INIT_TASK(tsk) \ |
{ \ |
.state = 0, \ |
.thread_info = &init_thread_info, \ |
.usage = ATOMIC_INIT(2), \ |
.flags = 0, \ |
.lock_depth = -1, \ |
.prio = MAX_PRIO-20, \ |
.static_prio = MAX_PRIO-20, \ |
.policy = SCHED_NORMAL, \ |
.cpus_allowed = CPU_MASK_ALL, \ |
.mm = NULL, \ |
.active_mm = &init_mm, \ |
.run_list = LIST_HEAD_INIT(tsk.run_list), \ |
.time_slice = HZ, \ |
.tasks = LIST_HEAD_INIT(tsk.tasks), \ |
.ptrace_children= LIST_HEAD_INIT(tsk.ptrace_children), \ |
.ptrace_list = LIST_HEAD_INIT(tsk.ptrace_list), \ |
.real_parent = &tsk, \ |
.parent = &tsk, \ |
.children = LIST_HEAD_INIT(tsk.children), \ |
.sibling = LIST_HEAD_INIT(tsk.sibling), \ |
.group_leader = &tsk, \ |
.wait_chldexit = __WAIT_QUEUE_HEAD_INITIALIZER(tsk.wait_chldexit),\ |
.real_timer = { \ |
.function = it_real_fn \ |
}, \ |
.cap_effective = CAP_INIT_EFF_SET, \ |
.cap_inheritable = CAP_INIT_INH_SET, \ |
.cap_permitted = CAP_FULL_SET, \ |
.keep_capabilities = 0, \ |
.rlim = INIT_RLIMITS, \ |
.user = INIT_USER, \ |
.comm = "swapper", \ |
.thread = INIT_THREAD, \ |
.fs = &init_fs, \ |
.files = &init_files, \ |
.signal = &init_signals, \ |
.sighand = &init_sighand, \ |
.pending = { \ |
.list = LIST_HEAD_INIT(tsk.pending.list), \ |
.signal = {{0}}}, \ |
.blocked = {{0}}, \ |
.posix_timers = LIST_HEAD_INIT(tsk.posix_timers), \ |
.alloc_lock = SPIN_LOCK_UNLOCKED, \ |
.proc_lock = SPIN_LOCK_UNLOCKED, \ |
.switch_lock = SPIN_LOCK_UNLOCKED, \ |
.journal_info = NULL, \ |
} |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/usb.h |
---|
0,0 → 1,1048 |
#ifndef __LINUX_USB_H |
#define __LINUX_USB_H |
#include <linux/mod_devicetable.h> |
#include <linux/usb_ch9.h> |
#define USB_MAJOR 180 |
#ifdef __KERNEL__ |
#include <linux/config.h> |
#include <linux/errno.h> /* for -ENODEV */ |
#include <linux/delay.h> /* for mdelay() */ |
#include <linux/interrupt.h> /* for in_interrupt() */ |
#include <linux/list.h> /* for struct list_head */ |
#include <linux/device.h> /* for struct device */ |
#include <linux/fs.h> /* for struct file_operations */ |
#include <linux/completion.h> /* for struct completion */ |
#include <linux/sched.h> /* for current && schedule_timeout */ |
static __inline__ void wait_ms(unsigned int ms) |
{ |
if(!in_interrupt()) { |
current->state = TASK_UNINTERRUPTIBLE; |
schedule_timeout(1 + ms * HZ / 1000); |
} |
else |
mdelay(ms); |
} |
struct usb_device; |
/*-------------------------------------------------------------------------*/ |
/* |
* Host-side wrappers for standard USB descriptors ... these are parsed |
* from the data provided by devices. Parsing turns them from a flat |
* sequence of descriptors into a hierarchy: |
* |
* - devices have one (usually) or more configs; |
* - configs have one (often) or more interfaces; |
* - interfaces have one (usually) or more settings; |
* - each interface setting has zero or (usually) more endpoints. |
* |
* And there might be other descriptors mixed in with those. |
* |
* Devices may also have class-specific or vendor-specific descriptors. |
*/ |
/* host-side wrapper for parsed endpoint descriptors */ |
struct usb_host_endpoint { |
struct usb_endpoint_descriptor desc; |
unsigned char *extra; /* Extra descriptors */ |
int extralen; |
}; |
/* host-side wrapper for one interface setting's parsed descriptors */ |
struct usb_host_interface { |
struct usb_interface_descriptor desc; |
/* array of desc.bNumEndpoint endpoints associated with this |
* interface setting. these will be in no particular order. |
*/ |
struct usb_host_endpoint *endpoint; |
unsigned char *extra; /* Extra descriptors */ |
int extralen; |
}; |
/** |
* struct usb_interface - what usb device drivers talk to |
* @altsetting: array of interface descriptors, one for each alternate |
* setting that may be selected. Each one includes a set of |
* endpoint configurations and will be in numberic order, |
* 0..num_altsetting. |
* @num_altsetting: number of altsettings defined. |
* @act_altsetting: index of current altsetting. this number is always |
* less than num_altsetting. after the device is configured, each |
* interface uses its default setting of zero. |
* @driver: the USB driver that is bound to this interface. |
* @minor: the minor number assigned to this interface, if this |
* interface is bound to a driver that uses the USB major number. |
* If this interface does not use the USB major, this field should |
* be unused. The driver should set this value in the probe() |
* function of the driver, after it has been assigned a minor |
* number from the USB core by calling usb_register_dev(). |
* @dev: driver model's view of this device |
* @class_dev: driver model's class view of this device. |
* |
* USB device drivers attach to interfaces on a physical device. Each |
* interface encapsulates a single high level function, such as feeding |
* an audio stream to a speaker or reporting a change in a volume control. |
* Many USB devices only have one interface. The protocol used to talk to |
* an interface's endpoints can be defined in a usb "class" specification, |
* or by a product's vendor. The (default) control endpoint is part of |
* every interface, but is never listed among the interface's descriptors. |
* |
* The driver that is bound to the interface can use standard driver model |
* calls such as dev_get_drvdata() on the dev member of this structure. |
* |
* Each interface may have alternate settings. The initial configuration |
* of a device sets the first of these, but the device driver can change |
* that setting using usb_set_interface(). Alternate settings are often |
* used to control the the use of periodic endpoints, such as by having |
* different endpoints use different amounts of reserved USB bandwidth. |
* All standards-conformant USB devices that use isochronous endpoints |
* will use them in non-default settings. |
*/ |
struct usb_interface { |
/* array of alternate settings for this interface. |
* these will be in numeric order, 0..num_altsettting |
*/ |
struct usb_host_interface *altsetting; |
unsigned act_altsetting; /* active alternate setting */ |
unsigned num_altsetting; /* number of alternate settings */ |
struct usb_driver *driver; /* driver */ |
int minor; /* minor number this interface is bound to */ |
struct device dev; /* interface specific device info */ |
struct class_device *class_dev; |
}; |
#define to_usb_interface(d) container_of(d, struct usb_interface, dev) |
#define interface_to_usbdev(intf) \ |
container_of(intf->dev.parent, struct usb_device, dev) |
static inline void *usb_get_intfdata (struct usb_interface *intf) |
{ |
return dev_get_drvdata (&intf->dev); |
} |
static inline void usb_set_intfdata (struct usb_interface *intf, void *data) |
{ |
dev_set_drvdata(&intf->dev, data); |
} |
/* this maximum is arbitrary */ |
#define USB_MAXINTERFACES 32 |
/* USB_DT_CONFIG: Configuration descriptor information. |
* |
* USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the |
* descriptor type is different. Highspeed-capable devices can look |
* different depending on what speed they're currently running. Only |
* devices with a USB_DT_DEVICE_QUALIFIER have an OTHER_SPEED_CONFIG. |
*/ |
struct usb_host_config { |
struct usb_config_descriptor desc; |
/* the interfaces associated with this configuration |
* these will be in numeric order, 0..desc.bNumInterfaces |
*/ |
struct usb_interface *interface[USB_MAXINTERFACES]; |
unsigned char *extra; /* Extra descriptors */ |
int extralen; |
}; |
// FIXME remove; exported only for drivers/usb/misc/auserwald.c |
// prefer usb_device->epnum[0..31] |
extern struct usb_endpoint_descriptor * |
usb_epnum_to_ep_desc(struct usb_device *dev, unsigned epnum); |
int __usb_get_extra_descriptor(char *buffer, unsigned size, |
unsigned char type, void **ptr); |
#define usb_get_extra_descriptor(ifpoint,type,ptr)\ |
__usb_get_extra_descriptor((ifpoint)->extra,(ifpoint)->extralen,\ |
type,(void**)ptr) |
/* -------------------------------------------------------------------------- */ |
struct usb_operations; |
/* USB device number allocation bitmap */ |
struct usb_devmap { |
unsigned long devicemap[128 / (8*sizeof(unsigned long))]; |
}; |
/* |
* Allocated per bus (tree of devices) we have: |
*/ |
struct usb_bus { |
struct device *controller; /* host/master side hardware */ |
int busnum; /* Bus number (in order of reg) */ |
char *bus_name; /* stable id (PCI slot_name etc) */ |
int devnum_next; /* Next open device number in round-robin allocation */ |
struct usb_devmap devmap; /* device address allocation map */ |
struct usb_operations *op; /* Operations (specific to the HC) */ |
struct usb_device *root_hub; /* Root hub */ |
struct list_head bus_list; /* list of busses */ |
void *hcpriv; /* Host Controller private data */ |
int bandwidth_allocated; /* on this bus: how much of the time |
* reserved for periodic (intr/iso) |
* requests is used, on average? |
* Units: microseconds/frame. |
* Limits: Full/low speed reserve 90%, |
* while high speed reserves 80%. |
*/ |
int bandwidth_int_reqs; /* number of Interrupt requests */ |
int bandwidth_isoc_reqs; /* number of Isoc. requests */ |
struct dentry *usbfs_dentry; /* usbfs dentry entry for the bus */ |
struct dentry *usbdevfs_dentry; /* usbdevfs dentry entry for the bus */ |
struct class_device class_dev; /* class device for this bus */ |
void (*release)(struct usb_bus *bus); /* function to destroy this bus's memory */ |
}; |
#define to_usb_bus(d) container_of(d, struct usb_bus, class_dev) |
/* -------------------------------------------------------------------------- */ |
/* This is arbitrary. |
* From USB 2.0 spec Table 11-13, offset 7, a hub can |
* have up to 255 ports. The most yet reported is 10. |
*/ |
#define USB_MAXCHILDREN (16) |
struct usb_tt; |
struct usb_device { |
int devnum; /* Address on USB bus */ |
char devpath [16]; /* Use in messages: /port/port/... */ |
enum usb_device_state state; /* configured, not attached, etc */ |
enum usb_device_speed speed; /* high/full/low (or error) */ |
struct usb_tt *tt; /* low/full speed dev, highspeed hub */ |
int ttport; /* device port on that tt hub */ |
struct semaphore serialize; |
unsigned int toggle[2]; /* one bit for each endpoint ([0] = IN, [1] = OUT) */ |
unsigned int halted[2]; /* endpoint halts; one bit per endpoint # & direction; */ |
/* [0] = IN, [1] = OUT */ |
int epmaxpacketin[16]; /* INput endpoint specific maximums */ |
int epmaxpacketout[16]; /* OUTput endpoint specific maximums */ |
struct usb_device *parent; /* our hub, unless we're the root */ |
struct usb_bus *bus; /* Bus we're part of */ |
struct device dev; /* Generic device interface */ |
struct usb_device_descriptor descriptor;/* Descriptor */ |
struct usb_host_config *config; /* All of the configs */ |
struct usb_host_config *actconfig;/* the active configuration */ |
char **rawdescriptors; /* Raw descriptors for each config */ |
int have_langid; /* whether string_langid is valid yet */ |
int string_langid; /* language ID for strings */ |
void *hcpriv; /* Host Controller private data */ |
struct list_head filelist; |
struct dentry *usbfs_dentry; /* usbfs dentry entry for the device */ |
struct dentry *usbdevfs_dentry; /* usbdevfs dentry entry for the device */ |
/* |
* Child devices - these can be either new devices |
* (if this is a hub device), or different instances |
* of this same device. |
* |
* Each instance needs its own set of data structures. |
*/ |
int maxchild; /* Number of ports if hub */ |
struct usb_device *children[USB_MAXCHILDREN]; |
}; |
#define to_usb_device(d) container_of(d, struct usb_device, dev) |
extern struct usb_device *usb_alloc_dev(struct usb_device *parent, struct usb_bus *); |
extern struct usb_device *usb_get_dev(struct usb_device *dev); |
extern void usb_put_dev(struct usb_device *dev); |
/* mostly for devices emulating SCSI over USB */ |
extern int usb_reset_device(struct usb_device *dev); |
extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id); |
/* for drivers using iso endpoints */ |
extern int usb_get_current_frame_number (struct usb_device *usb_dev); |
/* used these for multi-interface device registration */ |
extern int usb_driver_claim_interface(struct usb_driver *driver, |
struct usb_interface *iface, void* priv); |
extern int usb_interface_claimed(struct usb_interface *iface); |
extern void usb_driver_release_interface(struct usb_driver *driver, |
struct usb_interface *iface); |
const struct usb_device_id *usb_match_id(struct usb_interface *interface, |
const struct usb_device_id *id); |
extern struct usb_interface *usb_find_interface(struct usb_driver *drv, int minor); |
extern struct usb_interface *usb_ifnum_to_if(struct usb_device *dev, unsigned ifnum); |
/** |
* usb_make_path - returns stable device path in the usb tree |
* @dev: the device whose path is being constructed |
* @buf: where to put the string |
* @size: how big is "buf"? |
* |
* Returns length of the string (> 0) or negative if size was too small. |
* |
* This identifier is intended to be "stable", reflecting physical paths in |
* hardware such as physical bus addresses for host controllers or ports on |
* USB hubs. That makes it stay the same until systems are physically |
* reconfigured, by re-cabling a tree of USB devices or by moving USB host |
* controllers. Adding and removing devices, including virtual root hubs |
* in host controller driver modules, does not change these path identifers; |
* neither does rebooting or re-enumerating. These are more useful identifiers |
* than changeable ("unstable") ones like bus numbers or device addresses. |
* |
* With a partial exception for devices connected to USB 2.0 root hubs, these |
* identifiers are also predictable. So long as the device tree isn't changed, |
* plugging any USB device into a given hub port always gives it the same path. |
* Because of the use of "companion" controllers, devices connected to ports on |
* USB 2.0 root hubs (EHCI host controllers) will get one path ID if they are |
* high speed, and a different one if they are full or low speed. |
*/ |
static inline int usb_make_path (struct usb_device *dev, char *buf, size_t size) |
{ |
int actual; |
actual = snprintf (buf, size, "usb-%s-%s", dev->bus->bus_name, dev->devpath); |
return (actual >= (int)size) ? -1 : actual; |
} |
/*-------------------------------------------------------------------------*/ |
#define USB_DEVICE_ID_MATCH_DEVICE (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT) |
#define USB_DEVICE_ID_MATCH_DEV_RANGE (USB_DEVICE_ID_MATCH_DEV_LO | USB_DEVICE_ID_MATCH_DEV_HI) |
#define USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION (USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_DEV_RANGE) |
#define USB_DEVICE_ID_MATCH_DEV_INFO \ |
(USB_DEVICE_ID_MATCH_DEV_CLASS | USB_DEVICE_ID_MATCH_DEV_SUBCLASS | USB_DEVICE_ID_MATCH_DEV_PROTOCOL) |
#define USB_DEVICE_ID_MATCH_INT_INFO \ |
(USB_DEVICE_ID_MATCH_INT_CLASS | USB_DEVICE_ID_MATCH_INT_SUBCLASS | USB_DEVICE_ID_MATCH_INT_PROTOCOL) |
/** |
* USB_DEVICE - macro used to describe a specific usb device |
* @vend: the 16 bit USB Vendor ID |
* @prod: the 16 bit USB Product ID |
* |
* This macro is used to create a struct usb_device_id that matches a |
* specific device. |
*/ |
#define USB_DEVICE(vend,prod) \ |
.match_flags = USB_DEVICE_ID_MATCH_DEVICE, .idVendor = (vend), .idProduct = (prod) |
/** |
* USB_DEVICE_VER - macro used to describe a specific usb device with a version range |
* @vend: the 16 bit USB Vendor ID |
* @prod: the 16 bit USB Product ID |
* @lo: the bcdDevice_lo value |
* @hi: the bcdDevice_hi value |
* |
* This macro is used to create a struct usb_device_id that matches a |
* specific device, with a version range. |
*/ |
#define USB_DEVICE_VER(vend,prod,lo,hi) \ |
.match_flags = USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, .idVendor = (vend), .idProduct = (prod), .bcdDevice_lo = (lo), .bcdDevice_hi = (hi) |
/** |
* USB_DEVICE_INFO - macro used to describe a class of usb devices |
* @cl: bDeviceClass value |
* @sc: bDeviceSubClass value |
* @pr: bDeviceProtocol value |
* |
* This macro is used to create a struct usb_device_id that matches a |
* specific class of devices. |
*/ |
#define USB_DEVICE_INFO(cl,sc,pr) \ |
.match_flags = USB_DEVICE_ID_MATCH_DEV_INFO, .bDeviceClass = (cl), .bDeviceSubClass = (sc), .bDeviceProtocol = (pr) |
/** |
* USB_INTERFACE_INFO - macro used to describe a class of usb interfaces |
* @cl: bInterfaceClass value |
* @sc: bInterfaceSubClass value |
* @pr: bInterfaceProtocol value |
* |
* This macro is used to create a struct usb_device_id that matches a |
* specific class of interfaces. |
*/ |
#define USB_INTERFACE_INFO(cl,sc,pr) \ |
.match_flags = USB_DEVICE_ID_MATCH_INT_INFO, .bInterfaceClass = (cl), .bInterfaceSubClass = (sc), .bInterfaceProtocol = (pr) |
/* -------------------------------------------------------------------------- */ |
/** |
* struct usb_driver - identifies USB driver to usbcore |
* @owner: Pointer to the module owner of this driver; initialize |
* it using THIS_MODULE. |
* @name: The driver name should be unique among USB drivers, |
* and should normally be the same as the module name. |
* @probe: Called to see if the driver is willing to manage a particular |
* interface on a device. If it is, probe returns zero and uses |
* dev_set_drvdata() to associate driver-specific data with the |
* interface. It may also use usb_set_interface() to specify the |
* appropriate altsetting. If unwilling to manage the interface, |
* return a negative errno value. |
* @disconnect: Called when the interface is no longer accessible, usually |
* because its device has been (or is being) disconnected or the |
* driver module is being unloaded. |
* @ioctl: Used for drivers that want to talk to userspace through |
* the "usbfs" filesystem. This lets devices provide ways to |
* expose information to user space regardless of where they |
* do (or don't) show up otherwise in the filesystem. |
* @suspend: Called when the device is going to be suspended by the system. |
* @resume: Called when the device is being resumed by the system. |
* @id_table: USB drivers use ID table to support hotplugging. |
* Export this with MODULE_DEVICE_TABLE(usb,...). This must be set |
* or your driver's probe function will never get called. |
* @driver: the driver model core driver structure. |
* @serialize: a semaphore used to serialize access to this driver. Used |
* in the probe and disconnect functions. Only the USB core should use |
* this lock. |
* |
* USB drivers must provide a name, probe() and disconnect() methods, |
* and an id_table. Other driver fields are optional. |
* |
* The id_table is used in hotplugging. It holds a set of descriptors, |
* and specialized data may be associated with each entry. That table |
* is used by both user and kernel mode hotplugging support. |
* |
* The probe() and disconnect() methods are called in a context where |
* they can sleep, but they should avoid abusing the privilege. Most |
* work to connect to a device should be done when the device is opened, |
* and undone at the last close. The disconnect code needs to address |
* concurrency issues with respect to open() and close() methods, as |
* well as forcing all pending I/O requests to complete (by unlinking |
* them as necessary, and blocking until the unlinks complete). |
*/ |
struct usb_driver { |
struct module *owner; |
const char *name; |
int (*probe) (struct usb_interface *intf, |
const struct usb_device_id *id); |
void (*disconnect) (struct usb_interface *intf); |
int (*ioctl) (struct usb_interface *intf, unsigned int code, void *buf); |
int (*suspend) (struct usb_interface *intf, u32 state); |
int (*resume) (struct usb_interface *intf); |
const struct usb_device_id *id_table; |
struct device_driver driver; |
struct semaphore serialize; |
}; |
#define to_usb_driver(d) container_of(d, struct usb_driver, driver) |
extern struct bus_type usb_bus_type; |
/** |
* struct usb_class_driver - identifies a USB driver that wants to use the USB major number |
* @name: devfs name for this driver. Will also be used by the driver |
* class code to create a usb class device. |
* @fops: pointer to the struct file_operations of this driver. |
* @mode: the mode for the devfs file to be created for this driver. |
* @minor_base: the start of the minor range for this driver. |
* |
* This structure is used for the usb_register_dev() and |
* usb_unregister_dev() functions, to consolodate a number of the |
* paramaters used for them. |
*/ |
struct usb_class_driver { |
char *name; |
struct file_operations *fops; |
mode_t mode; |
int minor_base; |
}; |
/* |
* use these in module_init()/module_exit() |
* and don't forget MODULE_DEVICE_TABLE(usb, ...) |
*/ |
extern int usb_register(struct usb_driver *); |
extern void usb_deregister(struct usb_driver *); |
extern int usb_register_dev(struct usb_interface *intf, |
struct usb_class_driver *class_driver); |
extern void usb_deregister_dev(struct usb_interface *intf, |
struct usb_class_driver *class_driver); |
extern int usb_disabled(void); |
/* -------------------------------------------------------------------------- */ |
/* |
* URB support, for asynchronous request completions |
*/ |
/* |
* urb->transfer_flags: |
*/ |
#define URB_SHORT_NOT_OK 0x0001 /* report short reads as errors */ |
#define URB_ISO_ASAP 0x0002 /* iso-only, urb->start_frame ignored */ |
#define URB_NO_TRANSFER_DMA_MAP 0x0004 /* urb->transfer_dma valid on submit */ |
#define URB_NO_SETUP_DMA_MAP 0x0008 /* urb->setup_dma valid on submit */ |
#define URB_ASYNC_UNLINK 0x0010 /* usb_unlink_urb() returns asap */ |
#define URB_NO_FSBR 0x0020 /* UHCI-specific */ |
#define URB_ZERO_PACKET 0x0040 /* Finish bulk OUTs with short packet */ |
#define URB_NO_INTERRUPT 0x0080 /* HINT: no non-error interrupt needed */ |
struct usb_iso_packet_descriptor { |
unsigned int offset; |
unsigned int length; /* expected length */ |
unsigned int actual_length; |
unsigned int status; |
}; |
struct urb; |
struct pt_regs; |
typedef void (*usb_complete_t)(struct urb *, struct pt_regs *); |
/** |
* struct urb - USB Request Block |
* @urb_list: For use by current owner of the URB. |
* @pipe: Holds endpoint number, direction, type, and more. |
* Create these values with the eight macros available; |
* usb_{snd,rcv}TYPEpipe(dev,endpoint), where the type is "ctrl" |
* (control), "bulk", "int" (interrupt), or "iso" (isochronous). |
* For example usb_sndbulkpipe() or usb_rcvintpipe(). Endpoint |
* numbers range from zero to fifteen. Note that "in" endpoint two |
* is a different endpoint (and pipe) from "out" endpoint two. |
* The current configuration controls the existence, type, and |
* maximum packet size of any given endpoint. |
* @dev: Identifies the USB device to perform the request. |
* @status: This is read in non-iso completion functions to get the |
* status of the particular request. ISO requests only use it |
* to tell whether the URB was unlinked; detailed status for |
* each frame is in the fields of the iso_frame-desc. |
* @transfer_flags: A variety of flags may be used to affect how URB |
* submission, unlinking, or operation are handled. Different |
* kinds of URB can use different flags. |
* @transfer_buffer: This identifies the buffer to (or from) which |
* the I/O request will be performed (unless URB_NO_TRANSFER_DMA_MAP |
* is set). This buffer must be suitable for DMA; allocate it with |
* kmalloc() or equivalent. For transfers to "in" endpoints, contents |
* of this buffer will be modified. This buffer is used for data |
* phases of control transfers. |
* @transfer_dma: When transfer_flags includes URB_NO_TRANSFER_DMA_MAP, |
* the device driver is saying that it provided this DMA address, |
* which the host controller driver should use in preference to the |
* transfer_buffer. |
* @transfer_buffer_length: How big is transfer_buffer. The transfer may |
* be broken up into chunks according to the current maximum packet |
* size for the endpoint, which is a function of the configuration |
* and is encoded in the pipe. When the length is zero, neither |
* transfer_buffer nor transfer_dma is used. |
* @actual_length: This is read in non-iso completion functions, and |
* it tells how many bytes (out of transfer_buffer_length) were |
* transferred. It will normally be the same as requested, unless |
* either an error was reported or a short read was performed. |
* The URB_SHORT_NOT_OK transfer flag may be used to make such |
* short reads be reported as errors. |
* @setup_packet: Only used for control transfers, this points to eight bytes |
* of setup data. Control transfers always start by sending this data |
* to the device. Then transfer_buffer is read or written, if needed. |
* @setup_dma: For control transfers with URB_NO_SETUP_DMA_MAP set, the |
* device driver has provided this DMA address for the setup packet. |
* The host controller driver should use this in preference to |
* setup_packet. |
* @start_frame: Returns the initial frame for interrupt or isochronous |
* transfers. |
* @number_of_packets: Lists the number of ISO transfer buffers. |
* @interval: Specifies the polling interval for interrupt or isochronous |
* transfers. The units are frames (milliseconds) for for full and low |
* speed devices, and microframes (1/8 millisecond) for highspeed ones. |
* @error_count: Returns the number of ISO transfers that reported errors. |
* @context: For use in completion functions. This normally points to |
* request-specific driver context. |
* @complete: Completion handler. This URB is passed as the parameter to the |
* completion function. The completion function may then do what |
* it likes with the URB, including resubmitting or freeing it. |
* @iso_frame_desc: Used to provide arrays of ISO transfer buffers and to |
* collect the transfer status for each buffer. |
* @timeout: If set to zero, the urb will never timeout. Otherwise this is |
* the time in jiffies that this urb will timeout in. |
* |
* This structure identifies USB transfer requests. URBs must be allocated by |
* calling usb_alloc_urb() and freed with a call to usb_free_urb(). |
* Initialization may be done using various usb_fill_*_urb() functions. URBs |
* are submitted using usb_submit_urb(), and pending requests may be canceled |
* using usb_unlink_urb(). |
* |
* Data Transfer Buffers: |
* |
* Normally drivers provide I/O buffers allocated with kmalloc() or otherwise |
* taken from the general page pool. That is provided by transfer_buffer |
* (control requests also use setup_packet), and host controller drivers |
* perform a dma mapping (and unmapping) for each buffer transferred. Those |
* mapping operations can be expensive on some platforms (perhaps using a dma |
* bounce buffer or talking to an IOMMU), |
* although they're cheap on commodity x86 and ppc hardware. |
* |
* Alternatively, drivers may pass the URB_NO_xxx_DMA_MAP transfer flags, |
* which tell the host controller driver that no such mapping is needed since |
* the device driver is DMA-aware. For example, a device driver might |
* allocate a DMA buffer with usb_buffer_alloc() or call usb_buffer_map(). |
* When these transfer flags are provided, host controller drivers will |
* attempt to use the dma addresses found in the transfer_dma and/or |
* setup_dma fields rather than determining a dma address themselves. (Note |
* that transfer_buffer and setup_packet must still be set because not all |
* host controllers use DMA, nor do virtual root hubs). |
* |
* Initialization: |
* |
* All URBs submitted must initialize dev, pipe, |
* transfer_flags (may be zero), complete, timeout (may be zero). |
* The URB_ASYNC_UNLINK transfer flag affects later invocations of |
* the usb_unlink_urb() routine. |
* |
* All URBs must also initialize |
* transfer_buffer and transfer_buffer_length. They may provide the |
* URB_SHORT_NOT_OK transfer flag, indicating that short reads are |
* to be treated as errors; that flag is invalid for write requests. |
* |
* Bulk URBs may |
* use the URB_ZERO_PACKET transfer flag, indicating that bulk OUT transfers |
* should always terminate with a short packet, even if it means adding an |
* extra zero length packet. |
* |
* Control URBs must provide a setup_packet. The setup_packet and |
* transfer_buffer may each be mapped for DMA or not, independently of |
* the other. The transfer_flags bits URB_NO_TRANSFER_DMA_MAP and |
* URB_NO_SETUP_DMA_MAP indicate which buffers have already been mapped. |
* URB_NO_SETUP_DMA_MAP is ignored for non-control URBs. |
* |
* Interrupt UBS must provide an interval, saying how often (in milliseconds |
* or, for highspeed devices, 125 microsecond units) |
* to poll for transfers. After the URB has been submitted, the interval |
* and start_frame fields reflect how the transfer was actually scheduled. |
* The polling interval may be more frequent than requested. |
* For example, some controllers have a maximum interval of 32 microseconds, |
* while others support intervals of up to 1024 microseconds. |
* Isochronous URBs also have transfer intervals. (Note that for isochronous |
* endpoints, as well as high speed interrupt endpoints, the encoding of |
* the transfer interval in the endpoint descriptor is logarithmic.) |
* |
* Isochronous URBs normally use the URB_ISO_ASAP transfer flag, telling |
* the host controller to schedule the transfer as soon as bandwidth |
* utilization allows, and then set start_frame to reflect the actual frame |
* selected during submission. Otherwise drivers must specify the start_frame |
* and handle the case where the transfer can't begin then. However, drivers |
* won't know how bandwidth is currently allocated, and while they can |
* find the current frame using usb_get_current_frame_number () they can't |
* know the range for that frame number. (Ranges for frame counter values |
* are HC-specific, and can go from 256 to 65536 frames from "now".) |
* |
* Isochronous URBs have a different data transfer model, in part because |
* the quality of service is only "best effort". Callers provide specially |
* allocated URBs, with number_of_packets worth of iso_frame_desc structures |
* at the end. Each such packet is an individual ISO transfer. Isochronous |
* URBs are normally queued, submitted by drivers to arrange that |
* transfers are at least double buffered, and then explicitly resubmitted |
* in completion handlers, so |
* that data (such as audio or video) streams at as constant a rate as the |
* host controller scheduler can support. |
* |
* Completion Callbacks: |
* |
* The completion callback is made in_interrupt(), and one of the first |
* things that a completion handler should do is check the status field. |
* The status field is provided for all URBs. It is used to report |
* unlinked URBs, and status for all non-ISO transfers. It should not |
* be examined before the URB is returned to the completion handler. |
* |
* The context field is normally used to link URBs back to the relevant |
* driver or request state. |
* |
* When completion callback is invoked for non-isochronous URBs, the |
* actual_length field tells how many bytes were transferred. |
* |
* ISO transfer status is reported in the status and actual_length fields |
* of the iso_frame_desc array, and the number of errors is reported in |
* error_count. Completion callbacks for ISO transfers will normally |
* (re)submit URBs to ensure a constant transfer rate. |
*/ |
struct urb |
{ |
/* private, usb core and host controller only fields in the urb */ |
spinlock_t lock; /* lock for the URB */ |
atomic_t count; /* reference count of the URB */ |
void *hcpriv; /* private data for host controller */ |
struct list_head urb_list; /* list pointer to all active urbs */ |
int bandwidth; /* bandwidth for INT/ISO request */ |
/* public, documented fields in the urb that can be used by drivers */ |
struct usb_device *dev; /* (in) pointer to associated device */ |
unsigned int pipe; /* (in) pipe information */ |
int status; /* (return) non-ISO status */ |
unsigned int transfer_flags; /* (in) URB_SHORT_NOT_OK | ...*/ |
void *transfer_buffer; /* (in) associated data buffer */ |
dma_addr_t transfer_dma; /* (in) dma addr for transfer_buffer */ |
int transfer_buffer_length; /* (in) data buffer length */ |
int actual_length; /* (return) actual transfer length */ |
unsigned char *setup_packet; /* (in) setup packet (control only) */ |
dma_addr_t setup_dma; /* (in) dma addr for setup_packet */ |
int start_frame; /* (modify) start frame (INT/ISO) */ |
int number_of_packets; /* (in) number of ISO packets */ |
int interval; /* (in) transfer interval (INT/ISO) */ |
int error_count; /* (return) number of ISO errors */ |
int timeout; /* (in) timeout, in jiffies */ |
void *context; /* (in) context for completion */ |
usb_complete_t complete; /* (in) completion routine */ |
struct usb_iso_packet_descriptor iso_frame_desc[0]; /* (in) ISO ONLY */ |
}; |
/* -------------------------------------------------------------------------- */ |
/** |
* usb_fill_control_urb - initializes a control urb |
* @urb: pointer to the urb to initialize. |
* @dev: pointer to the struct usb_device for this urb. |
* @pipe: the endpoint pipe |
* @setup_packet: pointer to the setup_packet buffer |
* @transfer_buffer: pointer to the transfer buffer |
* @buffer_length: length of the transfer buffer |
* @complete: pointer to the usb_complete_t function |
* @context: what to set the urb context to. |
* |
* Initializes a control urb with the proper information needed to submit |
* it to a device. |
*/ |
static inline void usb_fill_control_urb (struct urb *urb, |
struct usb_device *dev, |
unsigned int pipe, |
unsigned char *setup_packet, |
void *transfer_buffer, |
int buffer_length, |
usb_complete_t complete, |
void *context) |
{ |
spin_lock_init(&urb->lock); |
urb->dev = dev; |
urb->pipe = pipe; |
urb->setup_packet = setup_packet; |
urb->transfer_buffer = transfer_buffer; |
urb->transfer_buffer_length = buffer_length; |
urb->complete = complete; |
urb->context = context; |
} |
/** |
* usb_fill_bulk_urb - macro to help initialize a bulk urb |
* @urb: pointer to the urb to initialize. |
* @dev: pointer to the struct usb_device for this urb. |
* @pipe: the endpoint pipe |
* @transfer_buffer: pointer to the transfer buffer |
* @buffer_length: length of the transfer buffer |
* @complete: pointer to the usb_complete_t function |
* @context: what to set the urb context to. |
* |
* Initializes a bulk urb with the proper information needed to submit it |
* to a device. |
*/ |
static inline void usb_fill_bulk_urb (struct urb *urb, |
struct usb_device *dev, |
unsigned int pipe, |
void *transfer_buffer, |
int buffer_length, |
usb_complete_t complete, |
void *context) |
{ |
spin_lock_init(&urb->lock); |
urb->dev = dev; |
urb->pipe = pipe; |
urb->transfer_buffer = transfer_buffer; |
urb->transfer_buffer_length = buffer_length; |
urb->complete = complete; |
urb->context = context; |
} |
/** |
* usb_fill_int_urb - macro to help initialize a interrupt urb |
* @urb: pointer to the urb to initialize. |
* @dev: pointer to the struct usb_device for this urb. |
* @pipe: the endpoint pipe |
* @transfer_buffer: pointer to the transfer buffer |
* @buffer_length: length of the transfer buffer |
* @complete: pointer to the usb_complete_t function |
* @context: what to set the urb context to. |
* @interval: what to set the urb interval to, encoded like |
* the endpoint descriptor's bInterval value. |
* |
* Initializes a interrupt urb with the proper information needed to submit |
* it to a device. |
* Note that high speed interrupt endpoints use a logarithmic encoding of |
* the endpoint interval, and express polling intervals in microframes |
* (eight per millisecond) rather than in frames (one per millisecond). |
*/ |
static inline void usb_fill_int_urb (struct urb *urb, |
struct usb_device *dev, |
unsigned int pipe, |
void *transfer_buffer, |
int buffer_length, |
usb_complete_t complete, |
void *context, |
int interval) |
{ |
spin_lock_init(&urb->lock); |
urb->dev = dev; |
urb->pipe = pipe; |
urb->transfer_buffer = transfer_buffer; |
urb->transfer_buffer_length = buffer_length; |
urb->complete = complete; |
urb->context = context; |
if (dev->speed == USB_SPEED_HIGH) |
urb->interval = 1 << (interval - 1); |
else |
urb->interval = interval; |
urb->start_frame = -1; |
} |
extern void usb_init_urb(struct urb *urb); |
extern struct urb *usb_alloc_urb(int iso_packets, int mem_flags); |
extern void usb_free_urb(struct urb *urb); |
#define usb_put_urb usb_free_urb |
extern struct urb *usb_get_urb(struct urb *urb); |
extern int usb_submit_urb(struct urb *urb, int mem_flags); |
extern int usb_unlink_urb(struct urb *urb); |
#define HAVE_USB_BUFFERS |
void *usb_buffer_alloc (struct usb_device *dev, size_t size, |
int mem_flags, dma_addr_t *dma); |
void usb_buffer_free (struct usb_device *dev, size_t size, |
void *addr, dma_addr_t dma); |
struct urb *usb_buffer_map (struct urb *urb); |
void usb_buffer_dmasync (struct urb *urb); |
void usb_buffer_unmap (struct urb *urb); |
struct scatterlist; |
int usb_buffer_map_sg (struct usb_device *dev, unsigned pipe, |
struct scatterlist *sg, int nents); |
void usb_buffer_dmasync_sg (struct usb_device *dev, unsigned pipe, |
struct scatterlist *sg, int n_hw_ents); |
void usb_buffer_unmap_sg (struct usb_device *dev, unsigned pipe, |
struct scatterlist *sg, int n_hw_ents); |
/*-------------------------------------------------------------------* |
* SYNCHRONOUS CALL SUPPORT * |
*-------------------------------------------------------------------*/ |
extern int usb_control_msg(struct usb_device *dev, unsigned int pipe, |
__u8 request, __u8 requesttype, __u16 value, __u16 index, |
void *data, __u16 size, int timeout); |
extern int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, |
void *data, int len, int *actual_length, |
int timeout); |
/* wrappers around usb_control_msg() for the most common standard requests */ |
extern int usb_get_descriptor(struct usb_device *dev, unsigned char desctype, |
unsigned char descindex, void *buf, int size); |
extern int usb_get_device_descriptor(struct usb_device *dev); |
extern int usb_get_status(struct usb_device *dev, |
int type, int target, void *data); |
extern int usb_get_string(struct usb_device *dev, |
unsigned short langid, unsigned char index, void *buf, int size); |
extern int usb_string(struct usb_device *dev, int index, |
char *buf, size_t size); |
/* wrappers that also update important state inside usbcore */ |
extern int usb_clear_halt(struct usb_device *dev, int pipe); |
extern int usb_reset_configuration(struct usb_device *dev); |
extern int usb_set_configuration(struct usb_device *dev, int configuration); |
extern int usb_set_interface(struct usb_device *dev, int ifnum, int alternate); |
/* |
* timeouts, in seconds, used for sending/receiving control messages |
* they typically complete within a few frames (msec) after they're issued |
* USB identifies 5 second timeouts, maybe more in a few cases, and a few |
* slow devices (like some MGE Ellipse UPSes) actually push that limit. |
*/ |
#define USB_CTRL_GET_TIMEOUT 5 |
#define USB_CTRL_SET_TIMEOUT 5 |
/** |
* struct usb_sg_request - support for scatter/gather I/O |
* @status: zero indicates success, else negative errno |
* @bytes: counts bytes transferred. |
* |
* These requests are initialized using usb_sg_init(), and then are used |
* as request handles passed to usb_sg_wait() or usb_sg_cancel(). Most |
* members of the request object aren't for driver access. |
* |
* The status and bytecount values are valid only after usb_sg_wait() |
* returns. If the status is zero, then the bytecount matches the total |
* from the request. |
* |
* After an error completion, drivers may need to clear a halt condition |
* on the endpoint. |
*/ |
struct usb_sg_request { |
int status; |
size_t bytes; |
/* |
* members below are private to usbcore, |
* and are not provided for driver access! |
*/ |
spinlock_t lock; |
struct usb_device *dev; |
int pipe; |
struct scatterlist *sg; |
int nents; |
int entries; |
struct urb **urbs; |
int count; |
struct completion complete; |
}; |
int usb_sg_init ( |
struct usb_sg_request *io, |
struct usb_device *dev, |
unsigned pipe, |
unsigned period, |
struct scatterlist *sg, |
int nents, |
size_t length, |
int mem_flags |
); |
void usb_sg_cancel (struct usb_sg_request *io); |
void usb_sg_wait (struct usb_sg_request *io); |
/* -------------------------------------------------------------------------- */ |
/* |
* Calling this entity a "pipe" is glorifying it. A USB pipe |
* is something embarrassingly simple: it basically consists |
* of the following information: |
* - device number (7 bits) |
* - endpoint number (4 bits) |
* - current Data0/1 state (1 bit) [Historical; now gone] |
* - direction (1 bit) |
* - speed (1 bit) [Historical and specific to USB 1.1; now gone.] |
* - max packet size (2 bits: 8, 16, 32 or 64) [Historical; now gone.] |
* - pipe type (2 bits: control, interrupt, bulk, isochronous) |
* |
* That's 18 bits. Really. Nothing more. And the USB people have |
* documented these eighteen bits as some kind of glorious |
* virtual data structure. |
* |
* Let's not fall in that trap. We'll just encode it as a simple |
* unsigned int. The encoding is: |
* |
* - max size: bits 0-1 [Historical; now gone.] |
* - direction: bit 7 (0 = Host-to-Device [Out], |
* 1 = Device-to-Host [In] ... |
* like endpoint bEndpointAddress) |
* - device: bits 8-14 ... bit positions known to uhci-hcd |
* - endpoint: bits 15-18 ... bit positions known to uhci-hcd |
* - Data0/1: bit 19 [Historical; now gone. ] |
* - lowspeed: bit 26 [Historical; now gone. ] |
* - pipe type: bits 30-31 (00 = isochronous, 01 = interrupt, |
* 10 = control, 11 = bulk) |
* |
* Why? Because it's arbitrary, and whatever encoding we select is really |
* up to us. This one happens to share a lot of bit positions with the UHCI |
* specification, so that much of the uhci driver can just mask the bits |
* appropriately. |
*/ |
/* NOTE: these are not the standard USB_ENDPOINT_XFER_* values!! */ |
#define PIPE_ISOCHRONOUS 0 |
#define PIPE_INTERRUPT 1 |
#define PIPE_CONTROL 2 |
#define PIPE_BULK 3 |
#define usb_maxpacket(dev, pipe, out) (out \ |
? (dev)->epmaxpacketout[usb_pipeendpoint(pipe)] \ |
: (dev)->epmaxpacketin [usb_pipeendpoint(pipe)] ) |
#define usb_pipein(pipe) ((pipe) & USB_DIR_IN) |
#define usb_pipeout(pipe) (!usb_pipein(pipe)) |
#define usb_pipedevice(pipe) (((pipe) >> 8) & 0x7f) |
#define usb_pipeendpoint(pipe) (((pipe) >> 15) & 0xf) |
#define usb_pipetype(pipe) (((pipe) >> 30) & 3) |
#define usb_pipeisoc(pipe) (usb_pipetype((pipe)) == PIPE_ISOCHRONOUS) |
#define usb_pipeint(pipe) (usb_pipetype((pipe)) == PIPE_INTERRUPT) |
#define usb_pipecontrol(pipe) (usb_pipetype((pipe)) == PIPE_CONTROL) |
#define usb_pipebulk(pipe) (usb_pipetype((pipe)) == PIPE_BULK) |
/* The D0/D1 toggle bits ... USE WITH CAUTION (they're almost hcd-internal) */ |
#define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> (ep)) & 1) |
#define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << (ep))) |
#define usb_settoggle(dev, ep, out, bit) ((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << (ep))) | ((bit) << (ep))) |
/* Endpoint halt control/status ... likewise USE WITH CAUTION */ |
#define usb_endpoint_running(dev, ep, out) ((dev)->halted[out] &= ~(1 << (ep))) |
#define usb_endpoint_halted(dev, ep, out) ((dev)->halted[out] & (1 << (ep))) |
static inline unsigned int __create_pipe(struct usb_device *dev, unsigned int endpoint) |
{ |
return (dev->devnum << 8) | (endpoint << 15); |
} |
/* Create various pipes... */ |
#define usb_sndctrlpipe(dev,endpoint) ((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint)) |
#define usb_rcvctrlpipe(dev,endpoint) ((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN) |
#define usb_sndisocpipe(dev,endpoint) ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint)) |
#define usb_rcvisocpipe(dev,endpoint) ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN) |
#define usb_sndbulkpipe(dev,endpoint) ((PIPE_BULK << 30) | __create_pipe(dev,endpoint)) |
#define usb_rcvbulkpipe(dev,endpoint) ((PIPE_BULK << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN) |
#define usb_sndintpipe(dev,endpoint) ((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint)) |
#define usb_rcvintpipe(dev,endpoint) ((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN) |
/* -------------------------------------------------------------------------- */ |
/* |
* Debugging and troubleshooting/diagnostic helpers. |
*/ |
void usb_show_device_descriptor(struct usb_device_descriptor *); |
void usb_show_config_descriptor(struct usb_config_descriptor *); |
void usb_show_interface_descriptor(struct usb_interface_descriptor *); |
void usb_show_endpoint_descriptor(struct usb_endpoint_descriptor *); |
void usb_show_device(struct usb_device *); |
void usb_show_string(struct usb_device *dev, char *id, int index); |
#ifdef DEBUG |
#define dbg(format, arg...) printk(KERN_DEBUG "%s: " format "\n" , __FILE__ , ## arg) |
#else |
#define dbg(format, arg...) do {} while (0) |
#endif |
#define err(format, arg...) printk(KERN_ERR "%s: " format "\n" , __FILE__ , ## arg) |
#define info(format, arg...) printk(KERN_INFO "%s: " format "\n" , __FILE__ , ## arg) |
#define warn(format, arg...) printk(KERN_WARNING "%s: " format "\n" , __FILE__ , ## arg) |
#endif /* __KERNEL__ */ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/dma-mapping.h |
---|
0,0 → 1,17 |
#ifndef _ASM_LINUX_DMA_MAPPING_H |
#define _ASM_LINUX_DMA_MAPPING_H |
/* These definitions mirror those in pci.h, so they can be used |
* interchangeably with their PCI_ counterparts */ |
enum dma_data_direction { |
DMA_BIDIRECTIONAL = 0, |
DMA_TO_DEVICE = 1, |
DMA_FROM_DEVICE = 2, |
DMA_NONE = 3, |
}; |
#include <asm/dma-mapping.h> |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/buffer_head.h |
---|
0,0 → 1,292 |
/* |
* include/linux/buffer_head.h |
* |
* Everything to do with buffer_heads. |
*/ |
#ifndef _LINUX_BUFFER_HEAD_H |
#define _LINUX_BUFFER_HEAD_H |
#include <linux/types.h> |
#include <linux/fs.h> |
#include <linux/linkage.h> |
#include <linux/wait.h> |
#include <asm/atomic.h> |
enum bh_state_bits { |
BH_Uptodate, /* Contains valid data */ |
BH_Dirty, /* Is dirty */ |
BH_Lock, /* Is locked */ |
BH_Req, /* Has been submitted for I/O */ |
BH_Mapped, /* Has a disk mapping */ |
BH_New, /* Disk mapping was newly created by get_block */ |
BH_Async_Read, /* Is under end_buffer_async_read I/O */ |
BH_Async_Write, /* Is under end_buffer_async_write I/O */ |
BH_Delay, /* Buffer is not yet allocated on disk */ |
BH_Boundary, /* Block is followed by a discontiguity */ |
BH_Write_EIO, /* I/O error on write */ |
BH_PrivateStart,/* not a state bit, but the first bit available |
* for private allocation by other entities |
*/ |
}; |
#define MAX_BUF_PER_PAGE (PAGE_CACHE_SIZE / 512) |
struct page; |
struct buffer_head; |
struct address_space; |
typedef void (bh_end_io_t)(struct buffer_head *bh, int uptodate); |
/* |
* Keep related fields in common cachelines. The most commonly accessed |
* field (b_state) goes at the start so the compiler does not generate |
* indexed addressing for it. |
*/ |
struct buffer_head { |
/* First cache line: */ |
unsigned long b_state; /* buffer state bitmap (see above) */ |
atomic_t b_count; /* users using this block */ |
struct buffer_head *b_this_page;/* circular list of page's buffers */ |
struct page *b_page; /* the page this bh is mapped to */ |
sector_t b_blocknr; /* block number */ |
u32 b_size; /* block size */ |
char *b_data; /* pointer to data block */ |
struct block_device *b_bdev; |
bh_end_io_t *b_end_io; /* I/O completion */ |
void *b_private; /* reserved for b_end_io */ |
struct list_head b_assoc_buffers; /* associated with another mapping */ |
}; |
/* |
* Debug |
*/ |
void __buffer_error(char *file, int line); |
#define buffer_error() __buffer_error(__FILE__, __LINE__) |
/* |
* macro tricks to expand the set_buffer_foo(), clear_buffer_foo() |
* and buffer_foo() functions. |
*/ |
#define BUFFER_FNS(bit, name) \ |
static inline void set_buffer_##name(struct buffer_head *bh) \ |
{ \ |
set_bit(BH_##bit, &(bh)->b_state); \ |
} \ |
static inline void clear_buffer_##name(struct buffer_head *bh) \ |
{ \ |
clear_bit(BH_##bit, &(bh)->b_state); \ |
} \ |
static inline int buffer_##name(struct buffer_head *bh) \ |
{ \ |
return test_bit(BH_##bit, &(bh)->b_state); \ |
} |
/* |
* test_set_buffer_foo() and test_clear_buffer_foo() |
*/ |
#define TAS_BUFFER_FNS(bit, name) \ |
static inline int test_set_buffer_##name(struct buffer_head *bh) \ |
{ \ |
return test_and_set_bit(BH_##bit, &(bh)->b_state); \ |
} \ |
static inline int test_clear_buffer_##name(struct buffer_head *bh) \ |
{ \ |
return test_and_clear_bit(BH_##bit, &(bh)->b_state); \ |
} \ |
/* |
* Emit the buffer bitops functions. Note that there are also functions |
* of the form "mark_buffer_foo()". These are higher-level functions which |
* do something in addition to setting a b_state bit. |
*/ |
BUFFER_FNS(Uptodate, uptodate) |
BUFFER_FNS(Dirty, dirty) |
TAS_BUFFER_FNS(Dirty, dirty) |
BUFFER_FNS(Lock, locked) |
TAS_BUFFER_FNS(Lock, locked) |
BUFFER_FNS(Req, req) |
TAS_BUFFER_FNS(Req, req) |
BUFFER_FNS(Mapped, mapped) |
BUFFER_FNS(New, new) |
BUFFER_FNS(Async_Read, async_read) |
BUFFER_FNS(Async_Write, async_write) |
BUFFER_FNS(Delay, delay) |
BUFFER_FNS(Boundary, boundary) |
BUFFER_FNS(Write_EIO,write_io_error) |
#define bh_offset(bh) ((unsigned long)(bh)->b_data & ~PAGE_MASK) |
#define touch_buffer(bh) mark_page_accessed(bh->b_page) |
/* If we *know* page->private refers to buffer_heads */ |
#define page_buffers(page) \ |
({ \ |
if (!PagePrivate(page)) \ |
BUG(); \ |
((struct buffer_head *)(page)->private); \ |
}) |
#define page_has_buffers(page) PagePrivate(page) |
/* |
* Declarations |
*/ |
void FASTCALL(mark_buffer_dirty(struct buffer_head *bh)); |
void init_buffer(struct buffer_head *, bh_end_io_t *, void *); |
void set_bh_page(struct buffer_head *bh, |
struct page *page, unsigned long offset); |
int try_to_free_buffers(struct page *); |
void create_empty_buffers(struct page *, unsigned long, |
unsigned long b_state); |
void end_buffer_read_sync(struct buffer_head *bh, int uptodate); |
void end_buffer_write_sync(struct buffer_head *bh, int uptodate); |
void end_buffer_async_write(struct buffer_head *bh, int uptodate); |
/* Things to do with buffers at mapping->private_list */ |
void buffer_insert_list(spinlock_t *lock, |
struct buffer_head *, struct list_head *); |
void mark_buffer_dirty_inode(struct buffer_head *bh, struct inode *inode); |
int inode_has_buffers(struct inode *); |
void invalidate_inode_buffers(struct inode *); |
int remove_inode_buffers(struct inode *inode); |
int fsync_buffers_list(spinlock_t *lock, struct list_head *); |
int sync_mapping_buffers(struct address_space *mapping); |
void unmap_underlying_metadata(struct block_device *bdev, sector_t block); |
void mark_buffer_async_read(struct buffer_head *bh); |
void mark_buffer_async_write(struct buffer_head *bh); |
void invalidate_bdev(struct block_device *, int); |
int sync_blockdev(struct block_device *bdev); |
void __wait_on_buffer(struct buffer_head *); |
wait_queue_head_t *bh_waitq_head(struct buffer_head *bh); |
void wake_up_buffer(struct buffer_head *bh); |
int fsync_bdev(struct block_device *); |
int fsync_super(struct super_block *); |
int fsync_no_super(struct block_device *); |
struct buffer_head *__find_get_block(struct block_device *, sector_t, int); |
struct buffer_head * __getblk(struct block_device *, sector_t, int); |
void __brelse(struct buffer_head *); |
void __bforget(struct buffer_head *); |
void __breadahead(struct block_device *, sector_t block, int size); |
struct buffer_head *__bread(struct block_device *, sector_t block, int size); |
struct buffer_head *alloc_buffer_head(int gfp_flags); |
void free_buffer_head(struct buffer_head * bh); |
void FASTCALL(unlock_buffer(struct buffer_head *bh)); |
void ll_rw_block(int, int, struct buffer_head * bh[]); |
void sync_dirty_buffer(struct buffer_head *bh); |
int submit_bh(int, struct buffer_head *); |
void write_boundary_block(struct block_device *bdev, |
sector_t bblock, unsigned blocksize); |
extern int buffer_heads_over_limit; |
/* |
* Generic address_space_operations implementations for buffer_head-backed |
* address_spaces. |
*/ |
int try_to_release_page(struct page * page, int gfp_mask); |
int block_invalidatepage(struct page *page, unsigned long offset); |
int block_write_full_page(struct page *page, get_block_t *get_block, |
struct writeback_control *wbc); |
int block_read_full_page(struct page*, get_block_t*); |
int block_prepare_write(struct page*, unsigned, unsigned, get_block_t*); |
int cont_prepare_write(struct page*, unsigned, unsigned, get_block_t*, |
loff_t *); |
int generic_cont_expand(struct inode *inode, loff_t size) ; |
int block_commit_write(struct page *page, unsigned from, unsigned to); |
int block_sync_page(struct page *); |
sector_t generic_block_bmap(struct address_space *, sector_t, get_block_t *); |
int generic_commit_write(struct file *, struct page *, unsigned, unsigned); |
int block_truncate_page(struct address_space *, loff_t, get_block_t *); |
int file_fsync(struct file *, struct dentry *, int); |
int nobh_prepare_write(struct page*, unsigned, unsigned, get_block_t*); |
int nobh_commit_write(struct file *, struct page *, unsigned, unsigned); |
int nobh_truncate_page(struct address_space *, loff_t); |
#define OSYNC_METADATA (1<<0) |
#define OSYNC_DATA (1<<1) |
#define OSYNC_INODE (1<<2) |
int generic_osync_inode(struct inode *, int); |
/* |
* inline definitions |
*/ |
static inline void get_bh(struct buffer_head *bh) |
{ |
atomic_inc(&bh->b_count); |
} |
static inline void put_bh(struct buffer_head *bh) |
{ |
smp_mb__before_atomic_dec(); |
atomic_dec(&bh->b_count); |
} |
static inline void brelse(struct buffer_head *bh) |
{ |
if (bh) |
__brelse(bh); |
} |
static inline void bforget(struct buffer_head *bh) |
{ |
if (bh) |
__bforget(bh); |
} |
static inline struct buffer_head * |
sb_bread(struct super_block *sb, sector_t block) |
{ |
return __bread(sb->s_bdev, block, sb->s_blocksize); |
} |
static inline void |
sb_breadahead(struct super_block *sb, sector_t block) |
{ |
__breadahead(sb->s_bdev, block, sb->s_blocksize); |
} |
static inline struct buffer_head * |
sb_getblk(struct super_block *sb, sector_t block) |
{ |
return __getblk(sb->s_bdev, block, sb->s_blocksize); |
} |
static inline struct buffer_head * |
sb_find_get_block(struct super_block *sb, sector_t block) |
{ |
return __find_get_block(sb->s_bdev, block, sb->s_blocksize); |
} |
static inline void |
map_bh(struct buffer_head *bh, struct super_block *sb, sector_t block) |
{ |
set_buffer_mapped(bh); |
bh->b_bdev = sb->s_bdev; |
bh->b_blocknr = block; |
} |
/* |
* Calling wait_on_buffer() for a zero-ref buffer is illegal, so we call into |
* __wait_on_buffer() just to trip a debug check. Because debug code in inline |
* functions is bloaty. |
*/ |
static inline void wait_on_buffer(struct buffer_head *bh) |
{ |
if (buffer_locked(bh) || atomic_read(&bh->b_count) == 0) |
__wait_on_buffer(bh); |
} |
static inline void lock_buffer(struct buffer_head *bh) |
{ |
while (test_set_buffer_locked(bh)) |
__wait_on_buffer(bh); |
} |
#endif /* _LINUX_BUFFER_HEAD_H */ |
/shark/trunk/drivers/linuxc26/include/linux/nubus.h |
---|
0,0 → 1,334 |
/* |
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 LINUX_NUBUS_H |
#define LINUX_NUBUS_H |
#ifdef __KERNEL__ |
#include <asm/nubus.h> |
#endif |
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> |
* 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_CABLETRON = 0x0001, |
NUBUS_DRSW_SONIC_LC = 0x0001, |
NUBUS_DRSW_KINETICS = 0x0103, |
NUBUS_DRSW_ASANTE = 0x0104, |
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_HRVC = 0x0013, /* Mac II High Res 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_JET = 0x0029, /* Jet framebuffer (DuoDock) */ |
NUBUS_DRHW_APPLE_VALKYRIE = 0x002e, |
NUBUS_DRHW_THUNDER24 = 0x02cb, /* SuperMac Thunder/24 */ |
/* 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_SONIC_NB = 0x0118, |
NUBUS_DRHW_SONIC_LC = 0x0119, |
/* NUBUS_CAT_COMMUNICATIONS */ |
NUBUS_DRHW_DOVEFAX = 0x0100, |
}; |
/* 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; |
}; |
struct nubus_board { |
struct nubus_board* next; |
struct nubus_dev* first_dev; |
/* Only 9-E actually exist, though 0-8 are also theoretically |
possible, and 0 is a special case which represents the |
motherboard and onboard peripherals (Ethernet, video) */ |
int slot; |
/* For slot 0, this is bogus. */ |
char name[64]; |
/* Format block */ |
unsigned char* fblock; |
/* Root directory (does *not* always equal fblock + doffset!) */ |
unsigned char* directory; |
unsigned long slot_addr; |
/* Offset to root directory (sometimes) */ |
unsigned long doffset; |
/* Length over which to compute the crc */ |
unsigned long rom_length; |
/* Completely useless most of the time */ |
unsigned long crc; |
unsigned char rev; |
unsigned char format; |
unsigned char lanes; |
}; |
struct nubus_dev { |
/* Next link in device list */ |
struct nubus_dev* next; |
/* Directory entry in /proc/bus/nubus */ |
struct proc_dir_entry* procdir; |
/* The functional resource ID of this device */ |
unsigned char resid; |
/* These are mostly here for convenience; we could always read |
them from the ROMs if we wanted to */ |
unsigned short category; |
unsigned short type; |
unsigned short dr_sw; |
unsigned short dr_hw; |
/* This is the device's name rather than the board's. |
Sometimes they are different. Usually the board name is |
more correct. */ |
char name[64]; |
/* MacOS driver (I kid you not) */ |
unsigned char* driver; |
/* Actually this is an offset */ |
unsigned long iobase; |
unsigned long iosize; |
unsigned char flags, hwdevid; |
/* Functional directory */ |
unsigned char* directory; |
/* Much of our info comes from here */ |
struct nubus_board* board; |
}; |
/* This is all NuBus devices (used to find devices later on) */ |
extern struct nubus_dev* nubus_devices; |
/* This is all NuBus cards */ |
extern struct nubus_board* nubus_boards; |
/* Generic NuBus interface functions, modelled after the PCI interface */ |
void nubus_scan_bus(void); |
extern void nubus_proc_init(void); |
int get_nubus_list(char *buf); |
int nubus_proc_attach_device(struct nubus_dev *dev); |
int nubus_proc_detach_device(struct nubus_dev *dev); |
/* If we need more precision we can add some more of these */ |
struct nubus_dev* nubus_find_device(unsigned short category, |
unsigned short type, |
unsigned short dr_hw, |
unsigned short dr_sw, |
const struct nubus_dev* from); |
struct nubus_dev* nubus_find_type(unsigned short category, |
unsigned short type, |
const struct nubus_dev* from); |
/* Might have more than one device in a slot, you know... */ |
struct nubus_dev* nubus_find_slot(unsigned int slot, |
const struct nubus_dev* from); |
/* These are somewhat more NuBus-specific. They all return 0 for |
success and -1 for failure, as you'd expect. */ |
/* The root directory which contains the board and functional |
directories */ |
int nubus_get_root_dir(const struct nubus_board* board, |
struct nubus_dir* dir); |
/* The board directory */ |
int nubus_get_board_dir(const struct nubus_board* board, |
struct nubus_dir* dir); |
/* The functional directory */ |
int nubus_get_func_dir(const struct nubus_dev* dev, |
struct nubus_dir* dir); |
/* These work on any directory gotten via the above */ |
int nubus_readdir(struct nubus_dir* dir, |
struct nubus_dirent* ent); |
int nubus_find_rsrc(struct nubus_dir* dir, |
unsigned char rsrc_type, |
struct nubus_dirent* ent); |
int nubus_rewinddir(struct nubus_dir* dir); |
/* Things to do with directory entries */ |
int nubus_get_subdir(const struct nubus_dirent* ent, |
struct nubus_dir* dir); |
void nubus_get_rsrc_mem(void* dest, |
const struct nubus_dirent *dirent, |
int len); |
void nubus_get_rsrc_str(void* dest, |
const struct nubus_dirent *dirent, |
int maxlen); |
/* 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 /* LINUX_NUBUS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/istallion.h |
---|
0,0 → 1,138 |
/*****************************************************************************/ |
/* |
* istallion.h -- stallion intelligent multiport serial driver. |
* |
* Copyright (C) 1996-1998 Stallion Technologies (support@stallion.oz.au). |
* Copyright (C) 1994-1996 Greg Ungerer. |
* |
* 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. |
*/ |
#include <linux/version.h> |
/*****************************************************************************/ |
#ifndef _ISTALLION_H |
#define _ISTALLION_H |
/*****************************************************************************/ |
/* |
* Define important driver constants here. |
*/ |
#define STL_MAXBRDS 4 |
#define STL_MAXPANELS 4 |
#define STL_MAXPORTS 64 |
#define STL_MAXCHANS (STL_MAXPORTS + 1) |
#define STL_MAXDEVS (STL_MAXBRDS * STL_MAXPORTS) |
/* |
* Define a set of structures to hold all the board/panel/port info |
* for our ports. These will be dynamically allocated as required at |
* driver initialization time. |
*/ |
/* |
* Port and board structures to hold status info about each object. |
* The board structure contains pointers to structures for each port |
* connected to it. Panels are not distinguished here, since |
* communication with the slave board will always be on a per port |
* basis. |
*/ |
typedef struct { |
unsigned long magic; |
int portnr; |
int panelnr; |
int brdnr; |
unsigned long state; |
int devnr; |
int flags; |
int baud_base; |
int custom_divisor; |
int close_delay; |
int closing_wait; |
int refcount; |
int openwaitcnt; |
int rc; |
int argsize; |
void *argp; |
unsigned int rxmarkmsk; |
struct tty_struct *tty; |
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)) |
struct wait_queue *open_wait; |
struct wait_queue *close_wait; |
struct wait_queue *raw_wait; |
#else |
wait_queue_head_t open_wait; |
wait_queue_head_t close_wait; |
wait_queue_head_t raw_wait; |
#endif |
struct work_struct tqhangup; |
asysigs_t asig; |
unsigned long addr; |
unsigned long rxoffset; |
unsigned long txoffset; |
unsigned long sigs; |
unsigned long pflag; |
unsigned int rxsize; |
unsigned int txsize; |
unsigned char reqbit; |
unsigned char portidx; |
unsigned char portbit; |
} stliport_t; |
/* |
* Use a structure of function pointers to do board level operations. |
* These include, enable/disable, paging shared memory, interrupting, etc. |
*/ |
typedef struct stlibrd { |
unsigned long magic; |
int brdnr; |
int brdtype; |
int state; |
int nrpanels; |
int nrports; |
int nrdevs; |
unsigned int iobase; |
int iosize; |
unsigned long memaddr; |
void *membase; |
int memsize; |
int pagesize; |
int hostoffset; |
int slaveoffset; |
int bitsize; |
int enabval; |
int panels[STL_MAXPANELS]; |
int panelids[STL_MAXPANELS]; |
void (*init)(struct stlibrd *brdp); |
void (*enable)(struct stlibrd *brdp); |
void (*reenable)(struct stlibrd *brdp); |
void (*disable)(struct stlibrd *brdp); |
char *(*getmemptr)(struct stlibrd *brdp, unsigned long offset, int line); |
void (*intr)(struct stlibrd *brdp); |
void (*reset)(struct stlibrd *brdp); |
stliport_t *ports[STL_MAXPORTS]; |
} stlibrd_t; |
/* |
* Define MAGIC numbers used for above structures. |
*/ |
#define STLI_PORTMAGIC 0xe671c7a1 |
#define STLI_BOARDMAGIC 0x4bc6c825 |
/*****************************************************************************/ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/netfilter_ipv6.h |
---|
0,0 → 1,67 |
#ifndef __LINUX_IP6_NETFILTER_H |
#define __LINUX_IP6_NETFILTER_H |
/* 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^) |
*/ |
#include <linux/netfilter.h> |
/* 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 |
enum nf_ip6_hook_priorities { |
NF_IP6_PRI_FIRST = INT_MIN, |
NF_IP6_PRI_CONNTRACK = -200, |
NF_IP6_PRI_MANGLE = -150, |
NF_IP6_PRI_NAT_DST = -100, |
NF_IP6_PRI_FILTER = 0, |
NF_IP6_PRI_NAT_SRC = 100, |
NF_IP6_PRI_LAST = INT_MAX, |
}; |
#endif /*__LINUX_IP6_NETFILTER_H*/ |
/shark/trunk/drivers/linuxc26/include/linux/pmu.h |
---|
0,0 → 1,240 |
/* |
* 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. |
*/ |
#include <linux/config.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) |
#ifdef __KERNEL__ |
extern int find_via_pmu(void); |
extern int pmu_request(struct adb_request *req, |
void (*done)(struct adb_request *), int nbytes, ...); |
extern void pmu_poll(void); |
extern void pmu_poll_adb(void); /* For use by xmon */ |
extern void pmu_wait_complete(struct adb_request *req); |
/* For use before switching interrupts off for a long time; |
* warning: not stackable |
*/ |
extern void pmu_suspend(void); |
extern void pmu_resume(void); |
extern void pmu_enable_irled(int on); |
extern void pmu_restart(void); |
extern void pmu_shutdown(void); |
extern void pmu_unlock(void); |
extern int pmu_present(void); |
extern int pmu_get_model(void); |
extern int pmu_i2c_combined_read(int bus, int addr, int subaddr, u8* data, int len); |
extern int pmu_i2c_stdsub_write(int bus, int addr, int subaddr, u8* data, int len); |
extern int pmu_i2c_simple_read(int bus, int addr, u8* data, int len); |
extern int pmu_i2c_simple_write(int bus, int addr, u8* data, int len); |
#ifdef CONFIG_PMAC_PBOOK |
/* |
* Stuff for putting the powerbook to sleep and waking it again. |
* |
*/ |
#include <linux/list.h> |
struct pmu_sleep_notifier |
{ |
int (*notifier_call)(struct pmu_sleep_notifier *self, int when); |
int priority; |
struct list_head list; |
}; |
/* Code values for calling sleep/wakeup handlers |
* |
* Note: If a sleep request got cancelled, all drivers will get |
* the PBOOK_SLEEP_REJECT, even those who didn't get the PBOOK_SLEEP_REQUEST. |
*/ |
#define PBOOK_SLEEP_REQUEST 1 |
#define PBOOK_SLEEP_NOW 2 |
#define PBOOK_SLEEP_REJECT 3 |
#define PBOOK_WAKE 4 |
/* Result codes returned by the notifiers */ |
#define PBOOK_SLEEP_OK 0 |
#define PBOOK_SLEEP_REFUSE -1 |
/* priority levels in notifiers */ |
#define SLEEP_LEVEL_VIDEO 100 /* Video driver (first wake) */ |
#define SLEEP_LEVEL_MEDIABAY 90 /* Media bay driver */ |
#define SLEEP_LEVEL_BLOCK 80 /* IDE, SCSI */ |
#define SLEEP_LEVEL_NET 70 /* bmac, gmac */ |
#define SLEEP_LEVEL_MISC 60 /* Anything else */ |
#define SLEEP_LEVEL_USERLAND 55 /* Reserved for apm_emu */ |
#define SLEEP_LEVEL_ADB 50 /* ADB (async) */ |
#define SLEEP_LEVEL_SOUND 40 /* Sound driver (blocking) */ |
/* special register notifier functions */ |
int pmu_register_sleep_notifier(struct pmu_sleep_notifier* notifier); |
int pmu_unregister_sleep_notifier(struct pmu_sleep_notifier* notifier); |
#define PMU_MAX_BATTERIES 2 |
/* values for pmu_power_flags */ |
#define PMU_PWR_AC_PRESENT 0x00000001 |
/* values for pmu_battery_info.flags */ |
#define PMU_BATT_PRESENT 0x00000001 |
#define PMU_BATT_CHARGING 0x00000002 |
#define PMU_BATT_TYPE_MASK 0x000000f0 |
#define PMU_BATT_TYPE_SMART 0x00000010 /* Smart battery */ |
#define PMU_BATT_TYPE_HOOPER 0x00000020 /* 3400/3500 */ |
#define PMU_BATT_TYPE_COMET 0x00000030 /* 2400 */ |
struct pmu_battery_info |
{ |
unsigned int flags; |
unsigned int charge; /* current charge */ |
unsigned int max_charge; /* maximum charge */ |
signed int current; /* current, positive if charging */ |
unsigned int voltage; /* voltage */ |
unsigned int time_remaining; /* remaining time */ |
}; |
extern int pmu_battery_count; |
extern struct pmu_battery_info pmu_batteries[PMU_MAX_BATTERIES]; |
extern unsigned int pmu_power_flags; |
#endif /* CONFIG_PMAC_PBOOK */ |
#endif /* __KERNEL__ */ |
/shark/trunk/drivers/linuxc26/include/linux/i2c-algo-pcf.h |
---|
0,0 → 1,49 |
/* ------------------------------------------------------------------------- */ |
/* adap-pcf.h i2c driver algorithms for PCF8584 adapters */ |
/* ------------------------------------------------------------------------- */ |
/* Copyright (C) 1995-97 Simon G. Vogl |
1998-99 Hans Berglund |
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. */ |
/* ------------------------------------------------------------------------- */ |
/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even |
Frodo Looijaard <frodol@dds.nl> */ |
/* $Id: i2c-algo-pcf.h,v 1.1 2004-01-28 15:25:28 giacomo Exp $ */ |
#ifndef _LINUX_I2C_ALGO_PCF_H |
#define _LINUX_I2C_ALGO_PCF_H |
struct i2c_algo_pcf_data { |
void *data; /* private data for lolevel routines */ |
void (*setpcf) (void *data, int ctl, int val); |
int (*getpcf) (void *data, int ctl); |
int (*getown) (void *data); |
int (*getclock) (void *data); |
void (*waitforpin) (void); |
/* local settings */ |
int udelay; |
int mdelay; |
int timeout; |
}; |
#define I2C_PCF_ADAP_MAX 16 |
int i2c_pcf_add_bus(struct i2c_adapter *); |
int i2c_pcf_del_bus(struct i2c_adapter *); |
#endif /* _LINUX_I2C_ALGO_PCF_H */ |
/shark/trunk/drivers/linuxc26/include/linux/types.h |
---|
0,0 → 1,158 |
#ifndef _LINUX_TYPES_H |
#define _LINUX_TYPES_H |
#ifdef __KERNEL__ |
#include <linux/config.h> |
#define BITS_TO_LONGS(bits) \ |
(((bits)+BITS_PER_LONG-1)/BITS_PER_LONG) |
#define DECLARE_BITMAP(name,bits) \ |
unsigned long name[BITS_TO_LONGS(bits)] |
#define CLEAR_BITMAP(name,bits) \ |
memset(name, 0, BITS_TO_LONGS(bits)*sizeof(unsigned long)) |
#endif |
#include <linux/posix_types.h> |
#include <asm/types.h> |
#ifndef __KERNEL_STRICT_NAMES |
typedef __u32 __kernel_dev_t; |
typedef __kernel_fd_set fd_set; |
typedef __kernel_dev_t dev_t; |
typedef __kernel_ino_t ino_t; |
typedef __kernel_mode_t mode_t; |
typedef __kernel_nlink_t nlink_t; |
typedef __kernel_off_t off_t; |
typedef __kernel_pid_t pid_t; |
typedef __kernel_daddr_t daddr_t; |
typedef __kernel_key_t key_t; |
typedef __kernel_suseconds_t suseconds_t; |
typedef __kernel_timer_t timer_t; |
typedef __kernel_clockid_t clockid_t; |
#ifdef __KERNEL__ |
typedef __kernel_uid32_t uid_t; |
typedef __kernel_gid32_t gid_t; |
typedef __kernel_uid16_t uid16_t; |
typedef __kernel_gid16_t gid16_t; |
#ifdef CONFIG_UID16 |
/* This is defined by include/asm-{arch}/posix_types.h */ |
typedef __kernel_old_uid_t old_uid_t; |
typedef __kernel_old_gid_t old_gid_t; |
#endif /* CONFIG_UID16 */ |
/* libc5 includes this file to define uid_t, thus uid_t can never change |
* when it is included by non-kernel code |
*/ |
#else |
typedef __kernel_uid_t uid_t; |
typedef __kernel_gid_t gid_t; |
#endif /* __KERNEL__ */ |
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) |
typedef __kernel_loff_t loff_t; |
#endif |
/* |
* The following typedefs are also protected by individual ifdefs for |
* historical reasons: |
*/ |
#ifndef _SIZE_T |
#define _SIZE_T |
typedef __kernel_size_t size_t; |
#endif |
#ifndef _SSIZE_T |
#define _SSIZE_T |
typedef __kernel_ssize_t ssize_t; |
#endif |
#ifndef _PTRDIFF_T |
#define _PTRDIFF_T |
typedef __kernel_ptrdiff_t ptrdiff_t; |
#endif |
#ifndef _TIME_T |
#define _TIME_T |
typedef __kernel_time_t time_t; |
#endif |
#ifndef _CLOCK_T |
#define _CLOCK_T |
typedef __kernel_clock_t clock_t; |
#endif |
#ifndef _CADDR_T |
#define _CADDR_T |
typedef __kernel_caddr_t caddr_t; |
#endif |
/* bsd */ |
typedef unsigned char u_char; |
typedef unsigned short u_short; |
typedef unsigned int u_int; |
typedef unsigned long u_long; |
/* sysv */ |
typedef unsigned char unchar; |
typedef unsigned short ushort; |
typedef unsigned int uint; |
typedef unsigned long ulong; |
#ifndef __BIT_TYPES_DEFINED__ |
#define __BIT_TYPES_DEFINED__ |
typedef __u8 u_int8_t; |
typedef __s8 int8_t; |
typedef __u16 u_int16_t; |
typedef __s16 int16_t; |
typedef __u32 u_int32_t; |
typedef __s32 int32_t; |
#endif /* !(__BIT_TYPES_DEFINED__) */ |
typedef __u8 uint8_t; |
typedef __u16 uint16_t; |
typedef __u32 uint32_t; |
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) |
typedef __u64 uint64_t; |
typedef __u64 u_int64_t; |
typedef __s64 int64_t; |
#endif |
/* |
* The type used for indexing onto a disc or disc partition. |
* If required, asm/types.h can override it and define |
* HAVE_SECTOR_T |
*/ |
#ifndef HAVE_SECTOR_T |
typedef unsigned long sector_t; |
#endif |
/* |
* The type of an index into the pagecache. Use a #define so asm/types.h |
* can override it. |
*/ |
#ifndef pgoff_t |
#define pgoff_t unsigned long |
#endif |
#endif /* __KERNEL_STRICT_NAMES */ |
/* |
* Below are truly Linux-specific types that should never collide with |
* any application/library that wants linux/types.h. |
*/ |
struct ustat { |
__kernel_daddr_t f_tfree; |
__kernel_ino_t f_tinode; |
char f_fname[6]; |
char f_fpack[6]; |
}; |
#endif /* _LINUX_TYPES_H */ |
/shark/trunk/drivers/linuxc26/include/linux/compiler-gcc.h |
---|
0,0 → 1,17 |
/* Never include this file directly. Include <linux/compiler.h> instead. */ |
/* |
* Common definitions for all gcc versions go here. |
*/ |
/* Optimization barrier */ |
/* The "volatile" is due to gcc bugs */ |
#define barrier() __asm__ __volatile__("": : :"memory") |
/* This macro obfuscates arithmetic on a variable address so that gcc |
shouldn't recognize the original var, and make assumptions about it */ |
#define RELOC_HIDE(ptr, off) \ |
({ unsigned long __ptr; \ |
__asm__ ("" : "=g"(__ptr) : "0"(ptr)); \ |
(typeof(ptr)) (__ptr + (off)); }) |
/shark/trunk/drivers/linuxc26/include/linux/coda_fs_i.h |
---|
0,0 → 1,55 |
/* |
* coda_fs_i.h |
* |
* Copyright (C) 1998 Carnegie Mellon University |
* |
*/ |
#ifndef _LINUX_CODA_FS_I |
#define _LINUX_CODA_FS_I |
#ifdef __KERNEL__ |
#include <linux/types.h> |
#include <linux/list.h> |
#include <linux/coda.h> |
/* |
* coda fs inode data |
*/ |
struct coda_inode_info { |
struct CodaFid c_fid; /* Coda identifier */ |
u_short c_flags; /* flags (see below) */ |
struct list_head c_cilist; /* list of all coda inodes */ |
unsigned int c_mapcount; /* nr of times this inode is mapped */ |
unsigned int c_cached_epoch; /* epoch for cached permissions */ |
vuid_t c_uid; /* fsuid for cached permissions */ |
unsigned int c_cached_perm; /* cached access permissions */ |
struct inode vfs_inode; |
}; |
/* |
* coda fs file private data |
*/ |
#define CODA_MAGIC 0xC0DAC0DA |
struct coda_file_info { |
int cfi_magic; /* magic number */ |
struct file *cfi_container; /* container file for this cnode */ |
unsigned int cfi_mapcount; /* nr of times this file is mapped */ |
}; |
#define CODA_FTOC(file) ((struct coda_file_info *)((file)->private_data)) |
/* flags */ |
#define C_VATTR 0x1 /* Validity of vattr in inode */ |
#define C_FLUSH 0x2 /* used after a flush */ |
#define C_DYING 0x4 /* from venus (which died) */ |
#define C_PURGE 0x8 |
int coda_cnode_make(struct inode **, struct CodaFid *, struct super_block *); |
struct inode *coda_iget(struct super_block *sb, struct CodaFid *fid, struct coda_vattr *attr); |
int coda_cnode_makectl(struct inode **inode, struct super_block *sb); |
struct inode *coda_fid_to_inode(struct CodaFid *fid, struct super_block *sb); |
void coda_replace_fid(struct inode *, struct CodaFid *, struct CodaFid *); |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/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 |
/shark/trunk/drivers/linuxc26/include/linux/firmware.h |
---|
0,0 → 1,19 |
#ifndef _LINUX_FIRMWARE_H |
#define _LINUX_FIRMWARE_H |
#include <linux/module.h> |
#include <linux/types.h> |
#define FIRMWARE_NAME_MAX 30 |
struct firmware { |
size_t size; |
u8 *data; |
}; |
int request_firmware(const struct firmware **fw, const char *name, |
struct device *device); |
int request_firmware_nowait( |
struct module *module, |
const char *name, struct device *device, void *context, |
void (*cont)(const struct firmware *fw, void *context)); |
void release_firmware(const struct firmware *fw); |
void register_firmware(const char *name, const u8 *data, size_t size); |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/minix_fs.h |
---|
0,0 → 1,85 |
#ifndef _LINUX_MINIX_FS_H |
#define _LINUX_MINIX_FS_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_SUPER_MAGIC 0x137F /* original minix fs */ |
#define MINIX_SUPER_MAGIC2 0x138F /* minix fs, 30 char names */ |
#define MINIX2_SUPER_MAGIC 0x2468 /* minix V2 fs */ |
#define MINIX2_SUPER_MAGIC2 0x2478 /* minix V2 fs, 30 char names */ |
#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))) |
#define MINIX2_INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct minix2_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; |
}; |
struct minix_dir_entry { |
__u16 inode; |
char name[0]; |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/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 (ntohl(0x01000000)) |
#define aHIDDEN (__constant_ntohl(0x02000000)) |
#define aSYSTEM (__constant_ntohl(0x04000000)) |
#define aEXECUTE (ntohl(0x08000000)) |
#define aDIR (ntohl(0x10000000)) |
#define aARCH (ntohl(0x20000000)) |
#define aSHARED (ntohl(0x80000000)) |
#define aDONTSUBALLOCATE (ntohl(1L<<(11+8))) |
#define aTRANSACTIONAL (ntohl(1L<<(12+8))) |
#define aPURGE (ntohl(1L<<(16-8))) |
#define aRENAMEINHIBIT (ntohl(1L<<(17-8))) |
#define aDELETEINHIBIT (ntohl(1L<<(18-8))) |
#define aDONTCOMPRESS (nothl(1L<<(27-24))) |
#endif /* _NCP_NO */ |
/shark/trunk/drivers/linuxc26/include/linux/hpfs_fs_sb.h |
---|
0,0 → 1,39 |
#ifndef _HPFS_FS_SB |
#define _HPFS_FS_SB |
struct hpfs_sb_info { |
ino_t sb_root; /* inode number of root dir */ |
unsigned sb_fs_size; /* file system size, sectors */ |
unsigned sb_bitmaps; /* sector number of bitmap list */ |
unsigned sb_dirband_start; /* directory band start sector */ |
unsigned sb_dirband_size; /* directory band size, dnodes */ |
unsigned sb_dmap; /* sector number of dnode bit map */ |
unsigned sb_n_free; /* free blocks for statfs, or -1 */ |
unsigned sb_n_free_dnodes; /* free dnodes for statfs, or -1 */ |
uid_t sb_uid; /* uid from mount options */ |
gid_t sb_gid; /* gid from mount options */ |
umode_t sb_mode; /* mode from mount options */ |
unsigned sb_conv : 2; /* crlf->newline hackery */ |
unsigned sb_eas : 2; /* eas: 0-ignore, 1-ro, 2-rw */ |
unsigned sb_err : 2; /* on errs: 0-cont, 1-ro, 2-panic */ |
unsigned sb_chk : 2; /* checks: 0-no, 1-normal, 2-strict */ |
unsigned sb_lowercase : 1; /* downcase filenames hackery */ |
unsigned sb_was_error : 1; /* there was an error, set dirty flag */ |
unsigned sb_chkdsk : 2; /* chkdsk: 0-no, 1-on errs, 2-allways */ |
unsigned sb_rd_fnode : 2; /* read fnode 0-no 1-dirs 2-all */ |
unsigned sb_rd_inode : 2; /* lookup tells read_inode: 1-read fnode |
2-don't read fnode, file |
3-don't read fnode, direcotry */ |
wait_queue_head_t sb_iget_q; |
unsigned char *sb_cp_table; /* code page tables: */ |
/* 128 bytes uppercasing table & */ |
/* 128 bytes lowercasing table */ |
unsigned *sb_bmp_dir; /* main bitmap directory */ |
unsigned sb_c_bitmap; /* current bitmap */ |
struct semaphore hpfs_creation_de; /* when creating dirents, nobody else |
can alloc blocks */ |
/*unsigned sb_mounting : 1;*/ |
int sb_timeshift; |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/inetdevice.h |
---|
0,0 → 1,181 |
#ifndef _LINUX_INETDEVICE_H |
#define _LINUX_INETDEVICE_H |
#ifdef __KERNEL__ |
struct ipv4_devconf |
{ |
int accept_redirects; |
int send_redirects; |
int secure_redirects; |
int shared_media; |
int accept_source_route; |
int rp_filter; |
int proxy_arp; |
int bootp_relay; |
int log_martians; |
int forwarding; |
int mc_forwarding; |
int tag; |
int arp_filter; |
int medium_id; |
int no_xfrm; |
int no_policy; |
void *sysctl; |
}; |
extern struct ipv4_devconf ipv4_devconf; |
struct in_device |
{ |
struct net_device *dev; |
atomic_t refcnt; |
rwlock_t lock; |
int dead; |
struct in_ifaddr *ifa_list; /* IP ifaddr chain */ |
struct ip_mc_list *mc_list; /* IP multicast filter chain */ |
rwlock_t mc_lock; /* for mc_tomb */ |
struct ip_mc_list *mc_tomb; |
unsigned long mr_v1_seen; |
unsigned long mr_v2_seen; |
unsigned long mr_maxdelay; |
unsigned char mr_qrv; |
unsigned char mr_gq_running; |
unsigned char mr_ifc_count; |
struct timer_list mr_gq_timer; /* general query timer */ |
struct timer_list mr_ifc_timer; /* interface change timer */ |
struct neigh_parms *arp_parms; |
struct ipv4_devconf cnf; |
}; |
#define IN_DEV_FORWARD(in_dev) ((in_dev)->cnf.forwarding) |
#define IN_DEV_MFORWARD(in_dev) (ipv4_devconf.mc_forwarding && (in_dev)->cnf.mc_forwarding) |
#define IN_DEV_RPFILTER(in_dev) (ipv4_devconf.rp_filter && (in_dev)->cnf.rp_filter) |
#define IN_DEV_SOURCE_ROUTE(in_dev) (ipv4_devconf.accept_source_route && (in_dev)->cnf.accept_source_route) |
#define IN_DEV_BOOTP_RELAY(in_dev) (ipv4_devconf.bootp_relay && (in_dev)->cnf.bootp_relay) |
#define IN_DEV_LOG_MARTIANS(in_dev) (ipv4_devconf.log_martians || (in_dev)->cnf.log_martians) |
#define IN_DEV_PROXY_ARP(in_dev) (ipv4_devconf.proxy_arp || (in_dev)->cnf.proxy_arp) |
#define IN_DEV_SHARED_MEDIA(in_dev) (ipv4_devconf.shared_media || (in_dev)->cnf.shared_media) |
#define IN_DEV_TX_REDIRECTS(in_dev) (ipv4_devconf.send_redirects || (in_dev)->cnf.send_redirects) |
#define IN_DEV_SEC_REDIRECTS(in_dev) (ipv4_devconf.secure_redirects || (in_dev)->cnf.secure_redirects) |
#define IN_DEV_IDTAG(in_dev) ((in_dev)->cnf.tag) |
#define IN_DEV_MEDIUM_ID(in_dev) ((in_dev)->cnf.medium_id) |
#define IN_DEV_RX_REDIRECTS(in_dev) \ |
((IN_DEV_FORWARD(in_dev) && \ |
(ipv4_devconf.accept_redirects && (in_dev)->cnf.accept_redirects)) \ |
|| (!IN_DEV_FORWARD(in_dev) && \ |
(ipv4_devconf.accept_redirects || (in_dev)->cnf.accept_redirects))) |
#define IN_DEV_ARPFILTER(in_dev) (ipv4_devconf.arp_filter || (in_dev)->cnf.arp_filter) |
struct in_ifaddr |
{ |
struct in_ifaddr *ifa_next; |
struct in_device *ifa_dev; |
u32 ifa_local; |
u32 ifa_address; |
u32 ifa_mask; |
u32 ifa_broadcast; |
u32 ifa_anycast; |
unsigned char ifa_scope; |
unsigned char ifa_flags; |
unsigned char ifa_prefixlen; |
char ifa_label[IFNAMSIZ]; |
}; |
extern int register_inetaddr_notifier(struct notifier_block *nb); |
extern int unregister_inetaddr_notifier(struct notifier_block *nb); |
extern struct net_device *ip_dev_find(u32 addr); |
extern int inet_addr_onlink(struct in_device *in_dev, u32 a, u32 b); |
extern int devinet_ioctl(unsigned int cmd, void *); |
extern void devinet_init(void); |
extern struct in_device *inetdev_init(struct net_device *dev); |
extern struct in_device *inetdev_by_index(int); |
extern u32 inet_select_addr(const struct net_device *dev, u32 dst, int scope); |
extern struct in_ifaddr *inet_ifa_byprefix(struct in_device *in_dev, u32 prefix, u32 mask); |
extern void inet_forward_change(void); |
static __inline__ int inet_ifa_match(u32 addr, struct in_ifaddr *ifa) |
{ |
return !((addr^ifa->ifa_address)&ifa->ifa_mask); |
} |
/* |
* Check if a mask is acceptable. |
*/ |
static __inline__ int bad_mask(u32 mask, u32 addr) |
{ |
if (addr & (mask = ~mask)) |
return 1; |
mask = ntohl(mask); |
if (mask & (mask+1)) |
return 1; |
return 0; |
} |
#define for_primary_ifa(in_dev) { struct in_ifaddr *ifa; \ |
for (ifa = (in_dev)->ifa_list; ifa && !(ifa->ifa_flags&IFA_F_SECONDARY); ifa = ifa->ifa_next) |
#define for_ifa(in_dev) { struct in_ifaddr *ifa; \ |
for (ifa = (in_dev)->ifa_list; ifa; ifa = ifa->ifa_next) |
#define endfor_ifa(in_dev) } |
extern rwlock_t inetdev_lock; |
static __inline__ struct in_device * |
in_dev_get(const struct net_device *dev) |
{ |
struct in_device *in_dev; |
read_lock(&inetdev_lock); |
in_dev = dev->ip_ptr; |
if (in_dev) |
atomic_inc(&in_dev->refcnt); |
read_unlock(&inetdev_lock); |
return in_dev; |
} |
static __inline__ struct in_device * |
__in_dev_get(const struct net_device *dev) |
{ |
return (struct in_device*)dev->ip_ptr; |
} |
extern void in_dev_finish_destroy(struct in_device *idev); |
static __inline__ void |
in_dev_put(struct in_device *idev) |
{ |
if (atomic_dec_and_test(&idev->refcnt)) |
in_dev_finish_destroy(idev); |
} |
#define __in_dev_put(idev) atomic_dec(&(idev)->refcnt) |
#define in_dev_hold(idev) atomic_inc(&(idev)->refcnt) |
#endif /* __KERNEL__ */ |
static __inline__ __u32 inet_make_mask(int logmask) |
{ |
if (logmask) |
return htonl(~((1<<(32-logmask))-1)); |
return 0; |
} |
static __inline__ int inet_mask_len(__u32 mask) |
{ |
if (!(mask = ntohl(mask))) |
return 0; |
return 32 - ffz(~mask); |
} |
#endif /* _LINUX_INETDEVICE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/root_dev.h |
---|
0,0 → 1,21 |
#ifndef _ROOT_DEV_H_ |
#define _ROOT_DEV_H_ |
#include <linux/major.h> |
enum { |
Root_NFS = MKDEV(UNNAMED_MAJOR, 255), |
Root_RAM0 = MKDEV(RAMDISK_MAJOR, 0), |
Root_RAM1 = MKDEV(RAMDISK_MAJOR, 1), |
Root_FD0 = MKDEV(FLOPPY_MAJOR, 0), |
Root_HDA1 = MKDEV(IDE0_MAJOR, 1), |
Root_HDA2 = MKDEV(IDE0_MAJOR, 2), |
Root_SDA1 = MKDEV(SCSI_DISK0_MAJOR, 1), |
Root_SDA2 = MKDEV(SCSI_DISK0_MAJOR, 2), |
Root_HDC1 = MKDEV(IDE1_MAJOR, 1), |
Root_SR0 = MKDEV(SCSI_CDROM_MAJOR, 0), |
}; |
extern dev_t ROOT_DEV; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/hdlcdrv.h |
---|
0,0 → 1,378 |
/* |
* 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 _HDLCDRV_H |
#define _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) |
/* -------------------------------------------------------------------- */ |
#ifdef __KERNEL__ |
#include <linux/netdevice.h> |
#include <linux/if.h> |
#include <linux/spinlock.h> |
#define HDLCDRV_MAGIC 0x5ac6e778 |
#define HDLCDRV_HDLCBUFFER 32 /* should be a power of 2 for speed reasons */ |
#define HDLCDRV_BITBUFFER 256 /* should be a power of 2 for speed reasons */ |
#undef HDLCDRV_LOOPBACK /* define for HDLC debugging purposes */ |
#define HDLCDRV_DEBUG |
/* maximum packet length, excluding CRC */ |
#define HDLCDRV_MAXFLEN 400 |
struct hdlcdrv_hdlcbuffer { |
spinlock_t lock; |
unsigned rd, wr; |
unsigned short buf[HDLCDRV_HDLCBUFFER]; |
}; |
#ifdef HDLCDRV_DEBUG |
struct hdlcdrv_bitbuffer { |
unsigned int rd; |
unsigned int wr; |
unsigned int shreg; |
unsigned char buffer[HDLCDRV_BITBUFFER]; |
}; |
static inline void hdlcdrv_add_bitbuffer(struct hdlcdrv_bitbuffer *buf, |
unsigned int bit) |
{ |
unsigned char new; |
new = buf->shreg & 1; |
buf->shreg >>= 1; |
buf->shreg |= (!!bit) << 7; |
if (new) { |
buf->buffer[buf->wr] = buf->shreg; |
buf->wr = (buf->wr+1) % sizeof(buf->buffer); |
buf->shreg = 0x80; |
} |
} |
static inline void hdlcdrv_add_bitbuffer_word(struct hdlcdrv_bitbuffer *buf, |
unsigned int bits) |
{ |
buf->buffer[buf->wr] = bits & 0xff; |
buf->wr = (buf->wr+1) % sizeof(buf->buffer); |
buf->buffer[buf->wr] = (bits >> 8) & 0xff; |
buf->wr = (buf->wr+1) % sizeof(buf->buffer); |
} |
#endif /* HDLCDRV_DEBUG */ |
/* -------------------------------------------------------------------- */ |
/* |
* Information that need to be kept for each driver. |
*/ |
struct hdlcdrv_ops { |
/* |
* first some informations needed by the hdlcdrv routines |
*/ |
const char *drvname; |
const char *drvinfo; |
/* |
* the routines called by the hdlcdrv routines |
*/ |
int (*open)(struct net_device *); |
int (*close)(struct net_device *); |
int (*ioctl)(struct net_device *, struct ifreq *, |
struct hdlcdrv_ioctl *, int); |
}; |
struct hdlcdrv_state { |
int magic; |
int opened; |
const struct hdlcdrv_ops *ops; |
struct { |
int bitrate; |
} par; |
struct hdlcdrv_pttoutput { |
int dma2; |
int seriobase; |
int pariobase; |
int midiiobase; |
unsigned int flags; |
} ptt_out; |
struct hdlcdrv_channel_params ch_params; |
struct hdlcdrv_hdlcrx { |
struct hdlcdrv_hdlcbuffer hbuf; |
long in_hdlc_rx; |
/* 0 = sync hunt, != 0 receiving */ |
int rx_state; |
unsigned int bitstream; |
unsigned int bitbuf; |
int numbits; |
unsigned char dcd; |
int len; |
unsigned char *bp; |
unsigned char buffer[HDLCDRV_MAXFLEN+2]; |
} hdlcrx; |
struct hdlcdrv_hdlctx { |
struct hdlcdrv_hdlcbuffer hbuf; |
long in_hdlc_tx; |
/* |
* 0 = send flags |
* 1 = send txtail (flags) |
* 2 = send packet |
*/ |
int tx_state; |
int numflags; |
unsigned int bitstream; |
unsigned char ptt; |
int calibrate; |
int slotcnt; |
unsigned int bitbuf; |
int numbits; |
int len; |
unsigned char *bp; |
unsigned char buffer[HDLCDRV_MAXFLEN+2]; |
} hdlctx; |
#ifdef HDLCDRV_DEBUG |
struct hdlcdrv_bitbuffer bitbuf_channel; |
struct hdlcdrv_bitbuffer bitbuf_hdlc; |
#endif /* HDLCDRV_DEBUG */ |
struct net_device_stats stats; |
int ptt_keyed; |
/* queued skb for transmission */ |
struct sk_buff *skb; |
}; |
/* -------------------------------------------------------------------- */ |
static inline int hdlcdrv_hbuf_full(struct hdlcdrv_hdlcbuffer *hb) |
{ |
unsigned long flags; |
int ret; |
spin_lock_irqsave(&hb->lock, flags); |
ret = !((HDLCDRV_HDLCBUFFER - 1 + hb->rd - hb->wr) % HDLCDRV_HDLCBUFFER); |
spin_unlock_irqrestore(&hb->lock, flags); |
return ret; |
} |
/* -------------------------------------------------------------------- */ |
static inline int hdlcdrv_hbuf_empty(struct hdlcdrv_hdlcbuffer *hb) |
{ |
unsigned long flags; |
int ret; |
spin_lock_irqsave(&hb->lock, flags); |
ret = (hb->rd == hb->wr); |
spin_unlock_irqrestore(&hb->lock, flags); |
return ret; |
} |
/* -------------------------------------------------------------------- */ |
static inline unsigned short hdlcdrv_hbuf_get(struct hdlcdrv_hdlcbuffer *hb) |
{ |
unsigned long flags; |
unsigned short val; |
unsigned newr; |
spin_lock_irqsave(&hb->lock, flags); |
if (hb->rd == hb->wr) |
val = 0; |
else { |
newr = (hb->rd+1) % HDLCDRV_HDLCBUFFER; |
val = hb->buf[hb->rd]; |
hb->rd = newr; |
} |
spin_unlock_irqrestore(&hb->lock, flags); |
return val; |
} |
/* -------------------------------------------------------------------- */ |
static inline void hdlcdrv_hbuf_put(struct hdlcdrv_hdlcbuffer *hb, |
unsigned short val) |
{ |
unsigned newp; |
unsigned long flags; |
spin_lock_irqsave(&hb->lock, flags); |
newp = (hb->wr+1) % HDLCDRV_HDLCBUFFER; |
if (newp != hb->rd) { |
hb->buf[hb->wr] = val & 0xffff; |
hb->wr = newp; |
} |
spin_unlock_irqrestore(&hb->lock, flags); |
} |
/* -------------------------------------------------------------------- */ |
static inline void hdlcdrv_putbits(struct hdlcdrv_state *s, unsigned int bits) |
{ |
hdlcdrv_hbuf_put(&s->hdlcrx.hbuf, bits); |
} |
static inline unsigned int hdlcdrv_getbits(struct hdlcdrv_state *s) |
{ |
unsigned int ret; |
if (hdlcdrv_hbuf_empty(&s->hdlctx.hbuf)) { |
if (s->hdlctx.calibrate > 0) |
s->hdlctx.calibrate--; |
else |
s->hdlctx.ptt = 0; |
ret = 0; |
} else |
ret = hdlcdrv_hbuf_get(&s->hdlctx.hbuf); |
#ifdef HDLCDRV_LOOPBACK |
hdlcdrv_hbuf_put(&s->hdlcrx.hbuf, ret); |
#endif /* HDLCDRV_LOOPBACK */ |
return ret; |
} |
static inline void hdlcdrv_channelbit(struct hdlcdrv_state *s, unsigned int bit) |
{ |
#ifdef HDLCDRV_DEBUG |
hdlcdrv_add_bitbuffer(&s->bitbuf_channel, bit); |
#endif /* HDLCDRV_DEBUG */ |
} |
static inline void hdlcdrv_setdcd(struct hdlcdrv_state *s, int dcd) |
{ |
s->hdlcrx.dcd = !!dcd; |
} |
static inline int hdlcdrv_ptt(struct hdlcdrv_state *s) |
{ |
return s->hdlctx.ptt || (s->hdlctx.calibrate > 0); |
} |
/* -------------------------------------------------------------------- */ |
void hdlcdrv_receiver(struct net_device *, struct hdlcdrv_state *); |
void hdlcdrv_transmitter(struct net_device *, struct hdlcdrv_state *); |
void hdlcdrv_arbitrate(struct net_device *, struct hdlcdrv_state *); |
struct net_device *hdlcdrv_register(const struct hdlcdrv_ops *ops, |
unsigned int privsize, const char *ifname, |
unsigned int baseaddr, unsigned int irq, |
unsigned int dma); |
void hdlcdrv_unregister(struct net_device *dev); |
/* -------------------------------------------------------------------- */ |
#endif /* __KERNEL__ */ |
/* -------------------------------------------------------------------- */ |
#endif /* _HDLCDRV_H */ |
/* -------------------------------------------------------------------- */ |
/shark/trunk/drivers/linuxc26/include/linux/fb.h |
---|
0,0 → 1,580 |
#ifndef _LINUX_FB_H |
#define _LINUX_FB_H |
#include <linux/tty.h> |
#include <linux/workqueue.h> |
#include <asm/types.h> |
#include <asm/io.h> |
/* Definitions of frame buffers */ |
#define FB_MAJOR 29 |
#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 |
#define FBIO_CURSOR _IOWR('F', 0x08, struct fb_cursor) |
/* 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 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_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_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_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_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 */ |
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; /* Type of acceleration available */ |
__u16 reserved[3]; /* 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. This implies |
* big-endian byte order if bits_per_pixel is greater than 8. |
*/ |
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_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_ACCELF_TEXT 1 /* text mode acceleration */ |
#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_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 */ |
#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 Graylevels instead of colors */ |
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; /* acceleration flags (hints) */ |
/* 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 reserved[5]; /* 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 |
struct fb_monspecs { |
__u32 hfmin; /* hfreq lower limit (Hz) */ |
__u32 hfmax; /* hfreq upper limit (Hz) */ |
__u16 vfmin; /* vfreq lower limit (Hz) */ |
__u16 vfmax; /* vfreq upper limit (Hz) */ |
__u32 dclkmin; /* pixelclock lower limit (Hz) */ |
__u32 dclkmax; /* pixelclock upper limit (Hz) */ |
unsigned gtf : 1; /* supports GTF */ |
unsigned dpms : 1; /* supports DPMS */ |
}; |
#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_SETCUR 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 */ |
char *mask; /* cursor mask bits */ |
struct fbcurpos hot; /* cursor hot spot */ |
struct fb_image image; /* Cursor image */ |
}; |
#define FB_PIXMAP_DEFAULT 1 /* used internally by fbcon */ |
#define FB_PIXMAP_SYSTEM 2 /* memory is in system RAM */ |
#define FB_PIXMAP_IO 4 /* memory is iomapped */ |
#define FB_PIXMAP_SYNC 256 /* set if GPU can DMA */ |
struct fb_pixmap { |
__u8 *addr; /* pointer to memory */ |
__u32 size; /* size of buffer in bytes */ |
__u32 offset; /* current offset to buffer */ |
__u32 buf_align; /* byte alignment of each bitmap */ |
__u32 scan_align; /* alignment per scanline */ |
__u32 flags; /* see FB_PIXMAP_* */ |
/* access methods */ |
void (*outbuf)(u8 *dst, u8 *addr, unsigned int size); |
u8 (*inbuf) (u8 *addr); |
spinlock_t lock; /* spinlock */ |
atomic_t count; |
}; |
#ifdef __KERNEL__ |
#include <linux/fs.h> |
#include <linux/init.h> |
struct fb_info; |
struct vm_area_struct; |
struct file; |
/* |
* Frame buffer operations |
*/ |
struct fb_ops { |
/* open/release and usage marking */ |
struct module *owner; |
int (*fb_open)(struct fb_info *info, int user); |
int (*fb_release)(struct fb_info *info, int user); |
/* For framebuffers with strange non linear layouts */ |
ssize_t (*fb_read)(struct file *file, char *buf, size_t count, loff_t *ppos); |
ssize_t (*fb_write)(struct file *file, const char *buf, size_t count, loff_t *ppos); |
/* checks var and creates a par based on it */ |
int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info); |
/* set the video mode according to par */ |
int (*fb_set_par)(struct fb_info *info); |
/* set color register */ |
int (*fb_setcolreg)(unsigned regno, unsigned red, unsigned green, |
unsigned blue, unsigned transp, struct fb_info *info); |
/* blank display */ |
int (*fb_blank)(int blank, struct fb_info *info); |
/* pan display */ |
int (*fb_pan_display)(struct fb_var_screeninfo *var, struct fb_info *info); |
/* draws a rectangle */ |
void (*fb_fillrect)(struct fb_info *info, const struct fb_fillrect *rect); |
/* Copy data from area to another */ |
void (*fb_copyarea)(struct fb_info *info,const struct fb_copyarea *region); |
/* Draws a image to the display */ |
void (*fb_imageblit)(struct fb_info *info, const struct fb_image *image); |
/* Draws cursor */ |
int (*fb_cursor)(struct fb_info *info, struct fb_cursor *cursor); |
/* Rotates the display */ |
void (*fb_rotate)(struct fb_info *info, int angle); |
/* wait for blit idle, optional */ |
int (*fb_sync)(struct fb_info *info); |
/* perform fb specific ioctl (optional) */ |
int (*fb_ioctl)(struct inode *inode, struct file *file, unsigned int cmd, |
unsigned long arg, struct fb_info *info); |
/* perform fb specific mmap */ |
int (*fb_mmap)(struct fb_info *info, struct file *file, struct vm_area_struct *vma); |
}; |
struct fb_info { |
int node; |
int flags; |
int open; /* Has this been open already ? */ |
#define FBINFO_FLAG_MODULE 1 /* Low-level driver is a module */ |
struct fb_var_screeninfo var; /* Current var */ |
struct fb_fix_screeninfo fix; /* Current fix */ |
struct fb_monspecs monspecs; /* Current Monitor specs */ |
struct fb_cursor cursor; /* Current cursor */ |
struct work_struct queue; /* Framebuffer event queue */ |
struct fb_pixmap pixmap; /* Current pixmap */ |
struct fb_cmap cmap; /* Current cmap */ |
struct fb_ops *fbops; |
char *screen_base; /* Virtual address */ |
struct vc_data *display_fg; /* Console visible on this display */ |
int currcon; /* Current VC. */ |
void *pseudo_palette; /* Fake palette of 16 colors */ |
/* From here on everything is device dependent */ |
void *par; |
}; |
#ifdef MODULE |
#define FBINFO_FLAG_DEFAULT FBINFO_FLAG_MODULE |
#else |
#define FBINFO_FLAG_DEFAULT 0 |
#endif |
#if defined(__sparc__) |
/* We map all of our framebuffers such that big-endian accesses |
* are what we want, so the following is sufficient. |
*/ |
#define fb_readb sbus_readb |
#define fb_readw sbus_readw |
#define fb_readl sbus_readl |
#define fb_readq sbus_readq |
#define fb_writeb sbus_writeb |
#define fb_writew sbus_writew |
#define fb_writel sbus_writel |
#define fb_writeq sbus_writeq |
#define fb_memset sbus_memset_io |
#elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__) || defined(__hppa__) |
#define fb_readb __raw_readb |
#define fb_readw __raw_readw |
#define fb_readl __raw_readl |
#define fb_readq __raw_readq |
#define fb_writeb __raw_writeb |
#define fb_writew __raw_writew |
#define fb_writel __raw_writel |
#define fb_writeq __raw_writeq |
#define fb_memset memset_io |
#else |
#define fb_readb(addr) (*(volatile u8 *) (addr)) |
#define fb_readw(addr) (*(volatile u16 *) (addr)) |
#define fb_readl(addr) (*(volatile u32 *) (addr)) |
#define fb_readq(addr) (*(volatile u64 *) (addr)) |
#define fb_writeb(b,addr) (*(volatile u8 *) (addr) = (b)) |
#define fb_writew(b,addr) (*(volatile u16 *) (addr) = (b)) |
#define fb_writel(b,addr) (*(volatile u32 *) (addr) = (b)) |
#define fb_writeq(b,addr) (*(volatile u64 *) (addr) = (b)) |
#define fb_memset memset |
#endif |
/* |
* `Generic' versions of the frame buffer device operations |
*/ |
extern int fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var); |
extern int fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var); |
extern int fb_blank(struct fb_info *info, int blank); |
extern int soft_cursor(struct fb_info *info, struct fb_cursor *cursor); |
extern void cfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect); |
extern void cfb_copyarea(struct fb_info *info, const struct fb_copyarea *area); |
extern void cfb_imageblit(struct fb_info *info, const struct fb_image *image); |
/* drivers/video/fbmem.c */ |
extern int register_framebuffer(struct fb_info *fb_info); |
extern int unregister_framebuffer(struct fb_info *fb_info); |
extern int fb_prepare_logo(struct fb_info *fb_info); |
extern int fb_show_logo(struct fb_info *fb_info); |
extern u32 fb_get_buffer_offset(struct fb_info *info, u32 size); |
extern void move_buf_unaligned(struct fb_info *info, u8 *dst, u8 *src, u32 d_pitch, |
u32 height, u32 mask, u32 shift_high, u32 shift_low, |
u32 mod, u32 idx); |
extern void move_buf_aligned(struct fb_info *info, u8 *dst, u8 *src, u32 d_pitch, |
u32 s_pitch, u32 height); |
extern struct fb_info *registered_fb[FB_MAX]; |
extern int num_registered_fb; |
/* drivers/video/fbmon.c */ |
#define FB_MAXTIMINGS 0 |
#define FB_VSYNCTIMINGS 1 |
#define FB_HSYNCTIMINGS 2 |
#define FB_DCLKTIMINGS 3 |
#define FB_IGNOREMON 0x100 |
extern int fbmon_valid_timings(u_int pixclock, u_int htotal, u_int vtotal, |
const struct fb_info *fb_info); |
extern int fbmon_dpms(const struct fb_info *fb_info); |
extern int fb_get_mode(int flags, u32 val, struct fb_var_screeninfo *var, |
struct fb_info *info); |
extern int fb_validate_mode(struct fb_var_screeninfo *var, |
struct fb_info *info); |
extern int parse_edid(unsigned char *edid, struct fb_var_screeninfo *var); |
extern int fb_get_monitor_limits(unsigned char *edid, struct fb_monspecs *specs); |
extern struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize); |
extern void fb_destroy_modedb(struct fb_videomode *modedb); |
extern void show_edid(unsigned char *edid); |
/* drivers/video/modedb.c */ |
#define VESA_MODEDB_SIZE 34 |
extern const struct fb_videomode vesa_modes[]; |
/* drivers/video/fbcmap.c */ |
extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp); |
extern void fb_dealloc_cmap(struct fb_cmap *cmap); |
extern int fb_copy_cmap(struct fb_cmap *from, struct fb_cmap *to, |
int fsfromto); |
extern int fb_set_cmap(struct fb_cmap *cmap, int kspc, struct fb_info *fb_info); |
extern struct fb_cmap *fb_default_cmap(int len); |
extern void fb_invert_cmaps(void); |
struct fb_videomode { |
const char *name; /* optional */ |
u32 refresh; /* optional */ |
u32 xres; |
u32 yres; |
u32 pixclock; |
u32 left_margin; |
u32 right_margin; |
u32 upper_margin; |
u32 lower_margin; |
u32 hsync_len; |
u32 vsync_len; |
u32 sync; |
u32 vmode; |
}; |
#ifdef MODULE |
static inline int fb_find_mode(struct fb_var_screeninfo *var, |
struct fb_info *info, const char *mode_option, |
const struct fb_videomode *db, |
unsigned int dbsize, |
const struct fb_videomode *default_mode, |
unsigned int default_bpp) |
{ |
extern int __fb_try_mode(struct fb_var_screeninfo *var, |
struct fb_info *info, |
const struct fb_videomode *mode, |
unsigned int bpp); |
/* |
* FIXME: How to make the compiler optimize vga640x400 away if |
* default_mode is non-NULL? |
*/ |
static const struct fb_videomode vga640x400 = { |
/* 640x400 @ 70 Hz, 31.5 kHz hsync */ |
NULL, 70, 640, 400, 39721, 40, 24, 39, 9, 96, 2, |
0, FB_VMODE_NONINTERLACED |
}; |
if (!default_mode) |
default_mode = &vga640x400; |
if (!default_bpp) |
default_bpp = 8; |
return __fb_try_mode(var, info, default_mode, default_bpp); |
} |
#else |
extern int __init fb_find_mode(struct fb_var_screeninfo *var, |
struct fb_info *info, const char *mode_option, |
const struct fb_videomode *db, |
unsigned int dbsize, |
const struct fb_videomode *default_mode, |
unsigned int default_bpp); |
#endif |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_FB_H */ |
/shark/trunk/drivers/linuxc26/include/linux/quotaio_v1.h |
---|
0,0 → 1,33 |
#ifndef _LINUX_QUOTAIO_V1_H |
#define _LINUX_QUOTAIO_V1_H |
#include <linux/types.h> |
/* |
* The following constants define the amount of time given a user |
* before the soft limits are treated as hard limits (usually resulting |
* in an allocation failure). The timer is started when the user crosses |
* their soft limit, it is reset when they go below their soft limit. |
*/ |
#define MAX_IQ_TIME 604800 /* (7*24*60*60) 1 week */ |
#define MAX_DQ_TIME 604800 /* (7*24*60*60) 1 week */ |
/* |
* The following structure defines the format of the disk quota file |
* (as it appears on disk) - the file is an array of these structures |
* indexed by user or group number. |
*/ |
struct v1_disk_dqblk { |
__u32 dqb_bhardlimit; /* absolute limit on disk blks alloc */ |
__u32 dqb_bsoftlimit; /* preferred limit on disk blks */ |
__u32 dqb_curblocks; /* current block count */ |
__u32 dqb_ihardlimit; /* absolute limit on allocated inodes */ |
__u32 dqb_isoftlimit; /* preferred inode limit */ |
__u32 dqb_curinodes; /* current # allocated inodes */ |
time_t dqb_btime; /* time limit for excessive disk use */ |
time_t dqb_itime; /* time limit for excessive inode use */ |
}; |
#define v1_dqoff(UID) ((loff_t)((UID) * sizeof (struct v1_disk_dqblk))) |
#endif /* _LINUX_QUOTAIO_V1_H */ |
/shark/trunk/drivers/linuxc26/include/linux/scx200_gpio.h |
---|
0,0 → 1,98 |
#include <linux/spinlock.h> |
u32 scx200_gpio_configure(int index, u32 set, u32 clear); |
void scx200_gpio_dump(unsigned index); |
extern unsigned scx200_gpio_base; |
extern spinlock_t scx200_gpio_lock; |
extern long scx200_gpio_shadow[2]; |
#define scx200_gpio_present() (scx200_gpio_base!=0) |
/* Definitions to make sure I do the same thing in all functions */ |
#define __SCx200_GPIO_BANK unsigned bank = index>>5 |
#define __SCx200_GPIO_IOADDR unsigned short ioaddr = scx200_gpio_base+0x10*bank |
#define __SCx200_GPIO_SHADOW long *shadow = scx200_gpio_shadow+bank |
#define __SCx200_GPIO_INDEX index &= 31 |
#define __SCx200_GPIO_OUT __asm__ __volatile__("outsl":"=mS" (shadow):"d" (ioaddr), "0" (shadow)) |
/* returns the value of the GPIO pin */ |
static inline int scx200_gpio_get(int index) { |
__SCx200_GPIO_BANK; |
__SCx200_GPIO_IOADDR + 0x04; |
__SCx200_GPIO_INDEX; |
return (inl(ioaddr) & (1<<index)) ? 1 : 0; |
} |
/* return the value driven on the GPIO signal (the value that will be |
driven if the GPIO is configured as an output, it might not be the |
state of the GPIO right now if the GPIO is configured as an input) */ |
static inline int scx200_gpio_current(int index) { |
__SCx200_GPIO_BANK; |
__SCx200_GPIO_INDEX; |
return (scx200_gpio_shadow[bank] & (1<<index)) ? 1 : 0; |
} |
/* drive the GPIO signal high */ |
static inline void scx200_gpio_set_high(int index) { |
__SCx200_GPIO_BANK; |
__SCx200_GPIO_IOADDR; |
__SCx200_GPIO_SHADOW; |
__SCx200_GPIO_INDEX; |
set_bit(index, shadow); |
__SCx200_GPIO_OUT; |
} |
/* drive the GPIO signal low */ |
static inline void scx200_gpio_set_low(int index) { |
__SCx200_GPIO_BANK; |
__SCx200_GPIO_IOADDR; |
__SCx200_GPIO_SHADOW; |
__SCx200_GPIO_INDEX; |
clear_bit(index, shadow); |
__SCx200_GPIO_OUT; |
} |
/* drive the GPIO signal to state */ |
static inline void scx200_gpio_set(int index, int state) { |
__SCx200_GPIO_BANK; |
__SCx200_GPIO_IOADDR; |
__SCx200_GPIO_SHADOW; |
__SCx200_GPIO_INDEX; |
if (state) |
set_bit(index, shadow); |
else |
clear_bit(index, shadow); |
__SCx200_GPIO_OUT; |
} |
/* toggle the GPIO signal */ |
static inline void scx200_gpio_change(int index) { |
__SCx200_GPIO_BANK; |
__SCx200_GPIO_IOADDR; |
__SCx200_GPIO_SHADOW; |
__SCx200_GPIO_INDEX; |
change_bit(index, shadow); |
__SCx200_GPIO_OUT; |
} |
#undef __SCx200_GPIO_BANK |
#undef __SCx200_GPIO_IOADDR |
#undef __SCx200_GPIO_SHADOW |
#undef __SCx200_GPIO_INDEX |
#undef __SCx200_GPIO_OUT |
/* |
Local variables: |
compile-command: "make -C ../.. bzImage modules" |
c-basic-offset: 8 |
End: |
*/ |
/shark/trunk/drivers/linuxc26/include/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 */ |
/shark/trunk/drivers/linuxc26/include/linux/ipmi_smi.h |
---|
0,0 → 1,137 |
/* |
* 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_SMI_H |
#define __LINUX_IPMI_SMI_H |
#include <linux/ipmi_msgdefs.h> |
/* This files describes the interface for IPMI system management interface |
drivers to bind into the IPMI message handler. */ |
/* Structure for the low-level drivers. */ |
typedef struct ipmi_smi *ipmi_smi_t; |
/* |
* Messages to/from the lower layer. The smi interface will take one |
* of these to send. After the send has occurred and a response has |
* been received, it will report this same data structure back up to |
* the upper layer. If an error occurs, it should fill in the |
* response with an error code in the completion code location. When |
* asyncronous data is received, one of these is allocated, the |
* data_size is set to zero and the response holds the data from the |
* get message or get event command that the interface initiated. |
* Note that it is the interfaces responsibility to detect |
* asynchronous data and messages and request them from the |
* interface. |
*/ |
struct ipmi_smi_msg |
{ |
struct list_head link; |
long msgid; |
void *user_data; |
/* If 0, add to the end of the queue. If 1, add to the beginning. */ |
int prio; |
int data_size; |
unsigned char data[IPMI_MAX_MSG_LENGTH]; |
int rsp_size; |
unsigned char rsp[IPMI_MAX_MSG_LENGTH]; |
/* Will be called when the system is done with the message |
(presumably to free it). */ |
void (*done)(struct ipmi_smi_msg *msg); |
}; |
struct ipmi_smi_handlers |
{ |
struct module *owner; |
/* Called to enqueue an SMI message to be sent. This |
operation is not allowed to fail. If an error occurs, it |
should report back the error in a received message. It may |
do this in the current call context, since no write locks |
are held when this is run. If the priority is > 0, the |
message will go into a high-priority queue and be sent |
first. Otherwise, it goes into a normal-priority queue. */ |
void (*sender)(void *send_info, |
struct ipmi_smi_msg *msg, |
int priority); |
/* Called by the upper layer to request that we try to get |
events from the BMC we are attached to. */ |
void (*request_events)(void *send_info); |
/* Called when the interface should go into "run to |
completion" mode. If this call sets the value to true, the |
interface should make sure that all messages are flushed |
out and that none are pending, and any new requests are run |
to completion immediately. */ |
void (*set_run_to_completion)(void *send_info, int run_to_completion); |
}; |
/* Add a low-level interface to the IPMI driver. */ |
int ipmi_register_smi(struct ipmi_smi_handlers *handlers, |
void *send_info, |
unsigned char version_major, |
unsigned char version_minor, |
ipmi_smi_t *intf); |
/* |
* Remove a low-level interface from the IPMI driver. This will |
* return an error if the interface is still in use by a user. |
*/ |
int ipmi_unregister_smi(ipmi_smi_t intf); |
/* |
* The lower layer reports received messages through this interface. |
* The data_size should be zero if this is an asyncronous message. If |
* the lower layer gets an error sending a message, it should format |
* an error response in the message response. |
*/ |
void ipmi_smi_msg_received(ipmi_smi_t intf, |
struct ipmi_smi_msg *msg); |
/* The lower layer received a watchdog pre-timeout on interface. */ |
void ipmi_smi_watchdog_pretimeout(ipmi_smi_t intf); |
struct ipmi_smi_msg *ipmi_alloc_smi_msg(void); |
static inline void ipmi_free_smi_msg(struct ipmi_smi_msg *msg) |
{ |
msg->done(msg); |
} |
#endif /* __LINUX_IPMI_SMI_H */ |
/shark/trunk/drivers/linuxc26/include/linux/major.h |
---|
0,0 → 1,163 |
#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 QIC02_TAPE_MAJOR 12 |
#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 GRAPHDEV_MAJOR 29 /* SparcLinux & Linux/68k /dev/fb */ |
#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 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 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 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 RTF_MAJOR 150 |
#define RAW_MAJOR 162 |
#define USB_ACM_MAJOR 166 |
#define USB_ACM_AUX_MAJOR 167 |
#define USB_CHAR_MAJOR 180 |
#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 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 |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/serial_reg.h |
---|
0,0 → 1,282 |
/* |
* 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 |
#define UART_RX 0 /* In: Receive buffer (DLAB=0) */ |
#define UART_TX 0 /* Out: Transmit buffer (DLAB=0) */ |
#define UART_DLL 0 /* Out: Divisor Latch Low (DLAB=1) */ |
#define UART_TRG 0 /* (LCR=BF) FCTR bit 7 selects Rx or Tx |
* In: Fifo count |
* Out: Fifo custom trigger levels |
* XR16C85x only */ |
#define UART_DLM 1 /* Out: Divisor Latch High (DLAB=1) */ |
#define UART_IER 1 /* Out: Interrupt Enable Register */ |
#define UART_FCTR 1 /* (LCR=BF) Feature Control Register |
* XR16C85x only */ |
#define UART_IIR 2 /* In: Interrupt ID Register */ |
#define UART_FCR 2 /* Out: FIFO Control Register */ |
#define UART_EFR 2 /* I/O: Extended Features Register */ |
/* (DLAB=1, 16C660 only) */ |
#define UART_LCR 3 /* Out: Line Control Register */ |
#define UART_MCR 4 /* Out: Modem Control Register */ |
#define UART_LSR 5 /* In: Line Status Register */ |
#define UART_MSR 6 /* In: Modem Status Register */ |
#define UART_SCR 7 /* I/O: Scratch Register */ |
#define UART_EMSR 7 /* (LCR=BF) Extended Mode Select Register |
* FCTR bit 6 selects SCR or EMSR |
* XR16c85x only */ |
/* |
* These are the definitions for the FIFO Control Register |
* (16650 only) |
*/ |
#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 */ |
#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 redefinitions */ |
#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 */ |
/* TI 16750 definitions */ |
#define UART_FCR7_64BYTE 0x20 /* Go into 64 byte mode */ |
/* |
* These are the definitions for the 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 stop bit, 1= 2 stop 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 */ |
/* |
* These are the definitions for the Line Status Register |
*/ |
#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 */ |
/* |
* These are the definitions for the Interrupt Identification 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 */ |
/* |
* These are the definitions for the 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. |
* Note that for 16650, EFR-bit 4 must be selected as well. |
*/ |
#define UART_IERX_SLEEP 0x10 /* Enable sleep mode */ |
/* |
* These are the definitions for the Modem Control Register |
*/ |
#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 */ |
/* |
* These are the definitions for the 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! */ |
/* |
* These are the definitions for the Extended Features Register |
* (StarTech 16C660 only, when DLAB=1) |
*/ |
#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 |
*/ |
/* |
* 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 Reigster |
*/ |
#define UART_ACR_RXDIS 0x01 /* Receiver disable */ |
#define UART_ACR_TXDIS 0x02 /* Receiver 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 are the definitions for the Feature Control Register |
* (XR16C85x only, when LCR=bf; doubles with the Interrupt Enable |
* Register, UART register #1) |
*/ |
#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 */ |
/* |
* These are the definitions for the Enhanced Mode Select Register |
* (XR16C85x only, when LCR=bf and FCTR bit 6=1; doubles with the |
* Scratch register, UART register #7) |
*/ |
#define UART_EMSR_FIFO_COUNT 0x01 /* Rx/Tx select */ |
#define UART_EMSR_ALT_COUNT 0x02 /* Alternating count select */ |
/* |
* These are the definitions for the Programmable Trigger |
* Register (XR16C85x only, when LCR=bf; doubles with the UART RX/TX |
* register, UART register #0) |
*/ |
#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 |
/* |
* 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) |
#endif /* _LINUX_SERIAL_REG_H */ |
/shark/trunk/drivers/linuxc26/include/linux/file.h |
---|
0,0 → 1,80 |
/* |
* Wrapper functions for accessing the file_struct fd array. |
*/ |
#ifndef __LINUX_FILE_H |
#define __LINUX_FILE_H |
#include <asm/atomic.h> |
#include <linux/posix_types.h> |
#include <linux/compiler.h> |
#include <linux/spinlock.h> |
/* |
* The default fd array needs to be at least BITS_PER_LONG, |
* as this is the granularity returned by copy_fdset(). |
*/ |
#define NR_OPEN_DEFAULT BITS_PER_LONG |
/* |
* Open file table structure |
*/ |
struct files_struct { |
atomic_t count; |
spinlock_t file_lock; /* Protects all the below members. Nests inside tsk->alloc_lock */ |
int max_fds; |
int max_fdset; |
int next_fd; |
struct file ** fd; /* current fd array */ |
fd_set *close_on_exec; |
fd_set *open_fds; |
fd_set close_on_exec_init; |
fd_set open_fds_init; |
struct file * fd_array[NR_OPEN_DEFAULT]; |
}; |
extern void FASTCALL(__fput(struct file *)); |
extern void FASTCALL(fput(struct file *)); |
static inline void fput_light(struct file *file, int fput_needed) |
{ |
if (unlikely(fput_needed)) |
fput(file); |
} |
extern struct file * FASTCALL(fget(unsigned int fd)); |
extern struct file * FASTCALL(fget_light(unsigned int fd, int *fput_needed)); |
extern void FASTCALL(set_close_on_exec(unsigned int fd, int flag)); |
extern void put_filp(struct file *); |
extern int get_unused_fd(void); |
extern void FASTCALL(put_unused_fd(unsigned int fd)); |
struct kmem_cache_s; |
extern void filp_ctor(void * objp, struct kmem_cache_s *cachep, unsigned long cflags); |
extern void filp_dtor(void * objp, struct kmem_cache_s *cachep, unsigned long dflags); |
extern struct file ** alloc_fd_array(int); |
extern int expand_fd_array(struct files_struct *, int nr); |
extern void free_fd_array(struct file **, int); |
extern fd_set *alloc_fdset(int); |
extern int expand_fdset(struct files_struct *, int nr); |
extern void free_fdset(fd_set *, int); |
static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd) |
{ |
struct file * file = NULL; |
if (fd < files->max_fds) |
file = files->fd[fd]; |
return file; |
} |
/* |
* Check whether the specified fd has an open file. |
*/ |
#define fcheck(fd) fcheck_files(current->files, fd) |
extern void FASTCALL(fd_install(unsigned int fd, struct file * file)); |
void FASTCALL(put_files_struct(struct files_struct *fs)); |
#endif /* __LINUX_FILE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/timer.h |
---|
0,0 → 1,97 |
#ifndef _LINUX_TIMER_H |
#define _LINUX_TIMER_H |
#include <linux/config.h> |
#include <linux/list.h> |
#include <linux/spinlock.h> |
struct tvec_t_base_s; |
struct timer_list { |
struct list_head entry; |
unsigned long expires; |
spinlock_t lock; |
unsigned long magic; |
void (*function)(unsigned long); |
unsigned long data; |
struct tvec_t_base_s *base; |
}; |
#define TIMER_MAGIC 0x4b87ad6e |
#define TIMER_INITIALIZER(_function, _expires, _data) { \ |
.function = (_function), \ |
.expires = (_expires), \ |
.data = (_data), \ |
.base = NULL, \ |
.magic = TIMER_MAGIC, \ |
.lock = SPIN_LOCK_UNLOCKED, \ |
} |
/*** |
* init_timer - initialize a timer. |
* @timer: the timer to be initialized |
* |
* init_timer() must be done to a timer prior calling *any* of the |
* other timer functions. |
*/ |
static inline void init_timer(struct timer_list * timer) |
{ |
timer->base = NULL; |
timer->magic = TIMER_MAGIC; |
spin_lock_init(&timer->lock); |
} |
/*** |
* timer_pending - is a timer pending? |
* @timer: the timer in question |
* |
* timer_pending will tell whether a given timer is currently pending, |
* or not. Callers must ensure serialization wrt. other operations done |
* to this timer, eg. interrupt contexts, or other CPUs on SMP. |
* |
* return value: 1 if the timer is pending, 0 if not. |
*/ |
static inline int timer_pending(const struct timer_list * timer) |
{ |
return timer->base != NULL; |
} |
extern void add_timer_on(struct timer_list *timer, int cpu); |
extern int del_timer(struct timer_list * timer); |
extern int __mod_timer(struct timer_list *timer, unsigned long expires); |
extern int mod_timer(struct timer_list *timer, unsigned long expires); |
/*** |
* add_timer - start a timer |
* @timer: the timer to be added |
* |
* The kernel will do a ->function(->data) callback from the |
* timer interrupt at the ->expired point in the future. The |
* current time is 'jiffies'. |
* |
* The timer's ->expired, ->function (and if the handler uses it, ->data) |
* fields must be set prior calling this function. |
* |
* Timers with an ->expired field in the past will be executed in the next |
* timer tick. |
*/ |
static inline void add_timer(struct timer_list * timer) |
{ |
__mod_timer(timer, timer->expires); |
} |
#ifdef CONFIG_SMP |
extern int del_timer_sync(struct timer_list * timer); |
#else |
# define del_timer_sync(t) del_timer(t) |
#endif |
extern void init_timers(void); |
extern void run_local_timers(void); |
extern void it_real_fn(unsigned long); |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/serio.h |
---|
0,0 → 1,137 |
#ifndef _SERIO_H |
#define _SERIO_H |
/* |
* 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. |
*/ |
#include <linux/ioctl.h> |
#include <linux/interrupt.h> |
#define SPIOCSTYPE _IOW('q', 0x01, unsigned long) |
#ifdef __KERNEL__ |
#include <linux/list.h> |
struct serio { |
void *private; |
void *driver; |
char *name; |
char *phys; |
unsigned short idbus; |
unsigned short idvendor; |
unsigned short idproduct; |
unsigned short idversion; |
unsigned long type; |
unsigned long event; |
int (*write)(struct serio *, unsigned char); |
int (*open)(struct serio *); |
void (*close)(struct serio *); |
struct serio_dev *dev; |
struct list_head node; |
}; |
struct serio_dev { |
void *private; |
char *name; |
void (*write_wakeup)(struct serio *); |
irqreturn_t (*interrupt)(struct serio *, unsigned char, |
unsigned int, struct pt_regs *); |
void (*connect)(struct serio *, struct serio_dev *dev); |
void (*disconnect)(struct serio *); |
void (*cleanup)(struct serio *); |
struct list_head node; |
}; |
int serio_open(struct serio *serio, struct serio_dev *dev); |
void serio_close(struct serio *serio); |
void serio_rescan(struct serio *serio); |
irqreturn_t serio_interrupt(struct serio *serio, unsigned char data, unsigned int flags, struct pt_regs *regs); |
void serio_register_port(struct serio *serio); |
void serio_register_slave_port(struct serio *serio); |
void serio_unregister_port(struct serio *serio); |
void serio_unregister_slave_port(struct serio *serio); |
void serio_register_device(struct serio_dev *dev); |
void serio_unregister_device(struct serio_dev *dev); |
static __inline__ int serio_write(struct serio *serio, unsigned char data) |
{ |
if (serio->write) |
return serio->write(serio, data); |
else |
return -1; |
} |
static __inline__ void serio_dev_write_wakeup(struct serio *serio) |
{ |
if (serio->dev && serio->dev->write_wakeup) |
serio->dev->write_wakeup(serio); |
} |
static __inline__ void serio_cleanup(struct serio *serio) |
{ |
if (serio->dev && serio->dev->cleanup) |
serio->dev->cleanup(serio); |
} |
#endif |
/* |
* bit masks for use in "interrupt" flags (3rd argument) |
*/ |
#define SERIO_TIMEOUT 1 |
#define SERIO_PARITY 2 |
#define SERIO_FRAME 4 |
#define SERIO_TYPE 0xff000000UL |
#define SERIO_XT 0x00000000UL |
#define SERIO_8042 0x01000000UL |
#define SERIO_RS232 0x02000000UL |
#define SERIO_HIL_MLC 0x03000000UL |
#define SERIO_PC9800 0x04000000UL |
#define SERIO_PS_PSTHRU 0x05000000UL |
#define SERIO_8042_XL 0x06000000UL |
#define SERIO_PROTO 0xFFUL |
#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_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_ID 0xff00UL |
#define SERIO_EXTRA 0xff0000UL |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/if_tun.h |
---|
0,0 → 1,88 |
/* |
* 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. |
* |
* $Id: if_tun.h,v 1.1 2004-01-28 15:25:37 giacomo Exp $ |
*/ |
#ifndef __IF_TUN_H |
#define __IF_TUN_H |
/* Uncomment to enable debugging */ |
/* #define TUN_DEBUG 1 */ |
#ifdef __KERNEL__ |
#ifdef TUN_DEBUG |
#define DBG if(tun->debug)printk |
#define DBG1 if(debug==2)printk |
#else |
#define DBG( a... ) |
#define DBG1( a... ) |
#endif |
struct tun_struct { |
struct list_head list; |
unsigned long flags; |
int attached; |
uid_t owner; |
wait_queue_head_t read_wait; |
struct sk_buff_head readq; |
struct net_device *dev; |
struct net_device_stats stats; |
struct fasync_struct *fasync; |
#ifdef TUN_DEBUG |
int debug; |
#endif |
}; |
#endif /* __KERNEL__ */ |
/* Read queue size */ |
#define TUN_READQ_SIZE 10 |
/* 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 |
/* 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) |
/* TUNSETIFF ifr flags */ |
#define IFF_TUN 0x0001 |
#define IFF_TAP 0x0002 |
#define IFF_NO_PI 0x1000 |
#define IFF_ONE_QUEUE 0x2000 |
struct tun_pi { |
unsigned short flags; |
unsigned short proto; |
}; |
#define TUN_PKT_STRIP 0x0001 |
#endif /* __IF_TUN_H */ |
/shark/trunk/drivers/linuxc26/include/linux/adb.h |
---|
0,0 → 1,104 |
/* |
* Definitions for ADB (Apple Desktop Bus) support. |
*/ |
#ifndef __ADB_H |
#define __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 |
#ifdef __KERNEL__ |
struct adb_request { |
unsigned char data[32]; |
int nbytes; |
unsigned char reply[32]; |
int reply_len; |
unsigned char reply_expected; |
unsigned char sent; |
unsigned char complete; |
void (*done)(struct adb_request *); |
void *arg; |
struct adb_request *next; |
}; |
struct adb_ids { |
int nids; |
unsigned char id[16]; |
}; |
/* Structure which encapsulates a low-level ADB driver */ |
struct adb_driver { |
char name[16]; |
int (*probe)(void); |
int (*init)(void); |
int (*send_request)(struct adb_request *req, int sync); |
int (*autopoll)(int devs); |
void (*poll)(void); |
int (*reset_bus)(void); |
}; |
/* Values for adb_request flags */ |
#define ADBREQ_REPLY 1 /* expect reply */ |
#define ADBREQ_SYNC 2 /* poll until done */ |
#define ADBREQ_NOSEND 4 /* build the request, but don't send it */ |
/* Messages sent thru the client_list notifier. You should NOT stop |
the operation, at least not with this version */ |
enum adb_message { |
ADB_MSG_POWERDOWN, /* Currently called before sleep only */ |
ADB_MSG_PRE_RESET, /* Called before resetting the bus */ |
ADB_MSG_POST_RESET /* Called after resetting the bus (re-do init & register) */ |
}; |
extern struct adb_driver *adb_controller; |
extern struct notifier_block *adb_client_list; |
int adb_request(struct adb_request *req, void (*done)(struct adb_request *), |
int flags, int nbytes, ...); |
int adb_register(int default_id,int handler_id,struct adb_ids *ids, |
void (*handler)(unsigned char *, int, struct pt_regs *, int)); |
int adb_unregister(int index); |
void adb_poll(void); |
void adb_input(unsigned char *, int, struct pt_regs *, int); |
int adb_reset_bus(void); |
int adb_try_handler_change(int address, int new_id); |
int adb_get_infos(int address, int *original_address, int *handler_id); |
#endif /* __KERNEL__ */ |
#endif /* __ADB_H */ |
/shark/trunk/drivers/linuxc26/include/linux/posix_types.h |
---|
0,0 → 1,48 |
#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>. |
*/ |
/* |
* Those macros may have been defined in <gnu/types.h>. But we always |
* use the ones here. |
*/ |
#undef __NFDBITS |
#define __NFDBITS (8 * sizeof(unsigned long)) |
#undef __FD_SETSIZE |
#define __FD_SETSIZE 1024 |
#undef __FDSET_LONGS |
#define __FDSET_LONGS (__FD_SETSIZE/__NFDBITS) |
#undef __FDELT |
#define __FDELT(d) ((d) / __NFDBITS) |
#undef __FDMASK |
#define __FDMASK(d) (1UL << ((d) % __NFDBITS)) |
typedef struct { |
unsigned long fds_bits [__FDSET_LONGS]; |
} __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; |
#include <asm/posix_types.h> |
#endif /* _LINUX_POSIX_TYPES_H */ |
/shark/trunk/drivers/linuxc26/include/linux/sonet.h |
---|
0,0 → 1,77 |
/* sonet.h - SONET/SHD physical layer control */ |
/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */ |
#ifndef LINUX_SONET_H |
#define LINUX_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 _IO('a',ATMIOC_PHYTYP+5) |
/* 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) */ |
#ifndef __KERNEL__ |
#undef __SONET_ITEMS |
#else |
#include <asm/atomic.h> |
struct k_sonet_stats { |
#define __HANDLE_ITEM(i) atomic_t i |
__SONET_ITEMS |
#undef __HANDLE_ITEM |
}; |
extern void sonet_copy_stats(struct k_sonet_stats *from,struct sonet_stats *to); |
extern void sonet_subtract_stats(struct k_sonet_stats *from, |
struct sonet_stats *to); |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/igmp.h |
---|
0,0 → 1,219 |
/* |
* Linux NET3: Internet Group Management Protocol [IGMP] |
* |
* Authors: |
* Alan Cox <Alan.Cox@linux.org> |
* |
* 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 _LINUX_IGMP_H |
#define _LINUX_IGMP_H |
#include <asm/byteorder.h> |
/* |
* IGMP protocol structures |
*/ |
/* |
* Header in on cable format |
*/ |
struct igmphdr |
{ |
__u8 type; |
__u8 code; /* For newer IGMP */ |
__u16 csum; |
__u32 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; |
__u16 grec_nsrcs; |
__u32 grec_mca; |
__u32 grec_src[0]; |
}; |
struct igmpv3_report { |
__u8 type; |
__u8 resv1; |
__u16 csum; |
__u16 resv2; |
__u16 ngrec; |
struct igmpv3_grec grec[0]; |
}; |
struct igmpv3_query { |
__u8 type; |
__u8 code; |
__u16 csum; |
__u32 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; |
__u16 nsrcs; |
__u32 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 0x11 */ |
#define IGMP_HOST_LEAVE_MESSAGE 0x17 |
#define IGMPV3_HOST_MEMBERSHIP_REPORT 0x22 /* V3 version of 0x11 */ |
#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 |
*/ |
#ifdef __KERNEL__ |
#include <linux/skbuff.h> |
#include <linux/in.h> |
struct ip_sf_socklist |
{ |
unsigned int sl_max; |
unsigned int sl_count; |
__u32 sl_addr[0]; |
}; |
#define IP_SFLSIZE(count) (sizeof(struct ip_sf_socklist) + \ |
(count) * sizeof(__u32)) |
#define IP_SFBLOCK 10 /* allocate this many at once */ |
/* ip_mc_socklist is real list now. Speed is not argument; |
this list never used in fast path code |
*/ |
struct ip_mc_socklist |
{ |
struct ip_mc_socklist *next; |
int count; |
struct ip_mreqn multi; |
unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */ |
struct ip_sf_socklist *sflist; |
}; |
struct ip_sf_list |
{ |
struct ip_sf_list *sf_next; |
__u32 sf_inaddr; |
unsigned long sf_count[2]; /* include/exclude counts */ |
unsigned char sf_gsresp; /* include in g & s response? */ |
unsigned char sf_oldin; /* change state */ |
unsigned char sf_crcount; /* retrans. left to send */ |
}; |
struct ip_mc_list |
{ |
struct in_device *interface; |
unsigned long multiaddr; |
struct ip_sf_list *sources; |
struct ip_sf_list *tomb; |
unsigned int sfmode; |
unsigned long sfcount[2]; |
struct ip_mc_list *next; |
struct timer_list timer; |
int users; |
atomic_t refcnt; |
spinlock_t lock; |
char tm_running; |
char reporter; |
char unsolicit_count; |
char loaded; |
unsigned char gsquery; /* check source marks? */ |
unsigned char crcount; |
}; |
/* V3 exponential field decoding */ |
#define IGMPV3_MASK(value, nb) ((nb)>=32 ? (value) : ((1<<(nb))-1) & (value)) |
#define IGMPV3_EXP(thresh, nbmant, nbexp, value) \ |
((value) < (thresh) ? (value) : \ |
((IGMPV3_MASK(value, nbmant) | (1<<(nbmant+nbexp))) << \ |
(IGMPV3_MASK((value) >> (nbmant), nbexp) + (nbexp)))) |
#define IGMPV3_QQIC(value) IGMPV3_EXP(0x80, 4, 3, value) |
#define IGMPV3_MRC(value) IGMPV3_EXP(0x80, 4, 3, value) |
extern int ip_check_mc(struct in_device *dev, u32 mc_addr, u32 src_addr, u16 proto); |
extern int igmp_rcv(struct sk_buff *); |
extern int ip_mc_join_group(struct sock *sk, struct ip_mreqn *imr); |
extern int ip_mc_leave_group(struct sock *sk, struct ip_mreqn *imr); |
extern void ip_mc_drop_socket(struct sock *sk); |
extern int ip_mc_source(int add, int omode, struct sock *sk, |
struct ip_mreq_source *mreqs, int ifindex); |
extern int ip_mc_msfilter(struct sock *sk, struct ip_msfilter *msf,int ifindex); |
extern int ip_mc_msfget(struct sock *sk, struct ip_msfilter *msf, |
struct ip_msfilter *optval, int *optlen); |
extern int ip_mc_gsfget(struct sock *sk, struct group_filter *gsf, |
struct group_filter *optval, int *optlen); |
extern int ip_mc_sf_allow(struct sock *sk, u32 local, u32 rmt, int dif); |
extern void ip_mr_init(void); |
extern void ip_mc_init_dev(struct in_device *); |
extern void ip_mc_destroy_dev(struct in_device *); |
extern void ip_mc_up(struct in_device *); |
extern void ip_mc_down(struct in_device *); |
extern void ip_mc_dec_group(struct in_device *in_dev, u32 addr); |
extern void ip_mc_inc_group(struct in_device *in_dev, u32 addr); |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/wireless.h |
---|
0,0 → 1,733 |
/* |
* This file define a set of standard wireless extensions |
* |
* Version : 16 2.4.03 |
* |
* Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com> |
* Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved. |
*/ |
#ifndef _LINUX_WIRELESS_H |
#define _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 : |
* # include/linux/wireless.c |
* |
* Wireless Events (2002 -> onward) : |
* -------------------------------- |
* Events are defined at the end of this file, and implemented in : |
* # include/linux/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 *****************************/ |
/* To minimise problems in user space, I might remove those headers |
* at some point. Jean II */ |
#include <linux/types.h> /* for "caddr_t" et al */ |
#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 16 |
/* |
* 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 |
*/ |
/**************************** 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 */ |
/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */ |
/* These 16 ioctl are wireless device private. |
* 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 'odd' 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). |
* And I repeat : you are not obliged to use them with iwspy, but you |
* must be compliant with it. |
*/ |
/* ------------------------- IOCTL STUFF ------------------------- */ |
/* The first and the last (range) */ |
#define SIOCIWFIRST 0x8B00 |
#define SIOCIWLAST SIOCIWLASTPRIV /* 0x8BFF */ |
/* Even : get (world access), odd : 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 IWEVFIRST 0x8C00 |
/* ------------------------- 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) */ |
/* 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 32 /* 256 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_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 0x000F /* 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 */ |
/* 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 */ |
/* Maximum size of returned data */ |
#define IW_SCAN_MAX_DATA 4096 /* In bytes */ |
/* Max number of char in custom event - use multiple of them if needed */ |
#define IW_CUSTOM_MAX 256 /* In bytes */ |
/****************************** 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 |
{ |
caddr_t 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 pad; /* Unused - just for alignement */ |
}; |
/* |
* 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 */ |
}; |
/* ------------------------ 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; |
/* Filler to keep "version" at the same offset */ |
__s32 old_freq[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 */ |
}; |
/* |
* 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 lenght 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_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point)) |
#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)) |
/* Note : in the case of iw_point, the extra data will come at the |
* end of the event */ |
#endif /* _LINUX_WIRELESS_H */ |
/shark/trunk/drivers/linuxc26/include/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 */ |
/shark/trunk/drivers/linuxc26/include/linux/smp.h |
---|
0,0 → 1,115 |
#ifndef __LINUX_SMP_H |
#define __LINUX_SMP_H |
/* |
* Generic SMP support |
* Alan Cox. <alan@redhat.com> |
*/ |
#include <linux/config.h> |
#ifdef CONFIG_SMP |
#include <linux/preempt.h> |
#include <linux/kernel.h> |
#include <linux/compiler.h> |
#include <linux/thread_info.h> |
#include <asm/smp.h> |
#include <asm/bug.h> |
/* |
* main cross-CPU interfaces, handles INIT, TLB flush, STOP, etc. |
* (defined in asm header): |
*/ |
/* |
* stops all CPUs but the current one: |
*/ |
extern void smp_send_stop(void); |
/* |
* sends a 'reschedule' event to another CPU: |
*/ |
extern void FASTCALL(smp_send_reschedule(int cpu)); |
/* |
* Prepare machine for booting other CPUs. |
*/ |
extern void smp_prepare_cpus(unsigned int max_cpus); |
/* |
* Bring a CPU up |
*/ |
extern int __cpu_up(unsigned int cpunum); |
/* |
* Final polishing of CPUs |
*/ |
extern void smp_cpus_done(unsigned int max_cpus); |
/* |
* Call a function on all other processors |
*/ |
extern int smp_call_function (void (*func) (void *info), void *info, |
int retry, int wait); |
/* |
* Call a function on all processors |
*/ |
static inline int on_each_cpu(void (*func) (void *info), void *info, |
int retry, int wait) |
{ |
int ret = 0; |
preempt_disable(); |
ret = smp_call_function(func, info, retry, wait); |
func(info); |
preempt_enable(); |
return ret; |
} |
/* |
* True once the per process idle is forked |
*/ |
extern int smp_threads_ready; |
#define MSG_ALL_BUT_SELF 0x8000 /* Assume <32768 CPU's */ |
#define MSG_ALL 0x8001 |
#define MSG_INVALIDATE_TLB 0x0001 /* Remote processor TLB invalidate */ |
#define MSG_STOP_CPU 0x0002 /* Sent to shut down slave CPU's |
* when rebooting |
*/ |
#define MSG_RESCHEDULE 0x0003 /* Reschedule request from master CPU*/ |
#define MSG_CALL_FUNCTION 0x0004 /* Call function on all other CPUs */ |
/* |
* Mark the boot cpu "online" so that it can call console drivers in |
* printk() and can access its per-cpu storage. |
*/ |
void smp_prepare_boot_cpu(void); |
#else /* !SMP */ |
/* |
* These macros fold the SMP functionality into a single CPU system |
*/ |
#define smp_processor_id() 0 |
#define hard_smp_processor_id() 0 |
#define smp_threads_ready 1 |
#define smp_call_function(func,info,retry,wait) ({ 0; }) |
#define on_each_cpu(func,info,retry,wait) ({ func(info); 0; }) |
static inline void smp_send_reschedule(int cpu) { } |
#define num_booting_cpus() 1 |
#define cpu_possible(cpu) ({ BUG_ON((cpu) != 0); 1; }) |
#define smp_prepare_boot_cpu() do {} while (0) |
#endif /* !SMP */ |
#define get_cpu() ({ preempt_disable(); smp_processor_id(); }) |
#define put_cpu() preempt_enable() |
#define put_cpu_no_resched() preempt_enable_no_resched() |
#endif /* __LINUX_SMP_H */ |
/shark/trunk/drivers/linuxc26/include/linux/awe_voice.h |
---|
0,0 → 1,525 |
/* |
* sound/awe_voice.h |
* |
* Voice information definitions for the low level driver for the |
* AWE32/SB32/AWE64 wave table synth. |
* version 0.4.4; Jan. 4, 2000 |
* |
* Copyright (C) 1996-2000 Takashi Iwai |
* |
* 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 AWE_VOICE_H |
#define AWE_VOICE_H |
#ifndef SAMPLE_TYPE_AWE32 |
#define SAMPLE_TYPE_AWE32 0x20 |
#endif |
#ifndef _PATCHKEY |
#define _PATCHKEY(id) ((id<<8)|0xfd) |
#endif |
/*---------------------------------------------------------------- |
* patch information record |
*----------------------------------------------------------------*/ |
/* patch interface header: 16 bytes */ |
typedef struct awe_patch_info { |
short key; /* use AWE_PATCH here */ |
#define AWE_PATCH _PATCHKEY(0x07) |
short device_no; /* synthesizer number */ |
unsigned short sf_id; /* file id (should be zero) */ |
short optarg; /* optional argument */ |
int len; /* data length (without this header) */ |
short type; /* patch operation type */ |
#define AWE_LOAD_INFO 0 /* awe_voice_rec */ |
#define AWE_LOAD_DATA 1 /* awe_sample_info */ |
#define AWE_OPEN_PATCH 2 /* awe_open_parm */ |
#define AWE_CLOSE_PATCH 3 /* none */ |
#define AWE_UNLOAD_PATCH 4 /* none */ |
#define AWE_REPLACE_DATA 5 /* awe_sample_info (optarg=#channels)*/ |
#define AWE_MAP_PRESET 6 /* awe_voice_map */ |
/*#define AWE_PROBE_INFO 7*/ /* awe_voice_map (pat only) */ |
#define AWE_PROBE_DATA 8 /* optarg=sample */ |
#define AWE_REMOVE_INFO 9 /* optarg=(bank<<8)|instr */ |
#define AWE_LOAD_CHORUS_FX 0x10 /* awe_chorus_fx_rec (optarg=mode) */ |
#define AWE_LOAD_REVERB_FX 0x11 /* awe_reverb_fx_rec (optarg=mode) */ |
short reserved; /* word alignment data */ |
/* the actual patch data begins after this */ |
#if defined(AWE_COMPAT_030) && AWE_COMPAT_030 |
char data[0]; |
#endif |
} awe_patch_info; |
/*#define AWE_PATCH_INFO_SIZE 16*/ |
#define AWE_PATCH_INFO_SIZE sizeof(awe_patch_info) |
/*---------------------------------------------------------------- |
* open patch |
*----------------------------------------------------------------*/ |
#define AWE_PATCH_NAME_LEN 32 |
typedef struct _awe_open_parm { |
unsigned short type; /* sample type */ |
#define AWE_PAT_TYPE_MISC 0 |
#define AWE_PAT_TYPE_GM 1 |
#define AWE_PAT_TYPE_GS 2 |
#define AWE_PAT_TYPE_MT32 3 |
#define AWE_PAT_TYPE_XG 4 |
#define AWE_PAT_TYPE_SFX 5 |
#define AWE_PAT_TYPE_GUS 6 |
#define AWE_PAT_TYPE_MAP 7 |
#define AWE_PAT_LOCKED 0x100 /* lock the samples */ |
#define AWE_PAT_SHARED 0x200 /* sample is shared */ |
short reserved; |
char name[AWE_PATCH_NAME_LEN]; |
} awe_open_parm; |
/*#define AWE_OPEN_PARM_SIZE 28*/ |
#define AWE_OPEN_PARM_SIZE sizeof(awe_open_parm) |
/*---------------------------------------------------------------- |
* raw voice information record |
*----------------------------------------------------------------*/ |
/* wave table envelope & effect parameters to control EMU8000 */ |
typedef struct _awe_voice_parm { |
unsigned short moddelay; /* modulation delay (0x8000) */ |
unsigned short modatkhld; /* modulation attack & hold time (0x7f7f) */ |
unsigned short moddcysus; /* modulation decay & sustain (0x7f7f) */ |
unsigned short modrelease; /* modulation release time (0x807f) */ |
short modkeyhold, modkeydecay; /* envelope change per key (not used) */ |
unsigned short voldelay; /* volume delay (0x8000) */ |
unsigned short volatkhld; /* volume attack & hold time (0x7f7f) */ |
unsigned short voldcysus; /* volume decay & sustain (0x7f7f) */ |
unsigned short volrelease; /* volume release time (0x807f) */ |
short volkeyhold, volkeydecay; /* envelope change per key (not used) */ |
unsigned short lfo1delay; /* LFO1 delay (0x8000) */ |
unsigned short lfo2delay; /* LFO2 delay (0x8000) */ |
unsigned short pefe; /* modulation pitch & cutoff (0x0000) */ |
unsigned short fmmod; /* LFO1 pitch & cutoff (0x0000) */ |
unsigned short tremfrq; /* LFO1 volume & freq (0x0000) */ |
unsigned short fm2frq2; /* LFO2 pitch & freq (0x0000) */ |
unsigned char cutoff; /* initial cutoff (0xff) */ |
unsigned char filterQ; /* initial filter Q [0-15] (0x0) */ |
unsigned char chorus; /* chorus send (0x00) */ |
unsigned char reverb; /* reverb send (0x00) */ |
unsigned short reserved[4]; /* not used */ |
} awe_voice_parm; |
typedef struct _awe_voice_parm_block { |
unsigned short moddelay; /* modulation delay (0x8000) */ |
unsigned char modatk, modhld; |
unsigned char moddcy, modsus; |
unsigned char modrel, moddummy; |
short modkeyhold, modkeydecay; /* envelope change per key (not used) */ |
unsigned short voldelay; /* volume delay (0x8000) */ |
unsigned char volatk, volhld; |
unsigned char voldcy, volsus; |
unsigned char volrel, voldummy; |
short volkeyhold, volkeydecay; /* envelope change per key (not used) */ |
unsigned short lfo1delay; /* LFO1 delay (0x8000) */ |
unsigned short lfo2delay; /* LFO2 delay (0x8000) */ |
unsigned char env1fc, env1pit; |
unsigned char lfo1fc, lfo1pit; |
unsigned char lfo1freq, lfo1vol; |
unsigned char lfo2freq, lfo2pit; |
unsigned char cutoff; /* initial cutoff (0xff) */ |
unsigned char filterQ; /* initial filter Q [0-15] (0x0) */ |
unsigned char chorus; /* chorus send (0x00) */ |
unsigned char reverb; /* reverb send (0x00) */ |
unsigned short reserved[4]; /* not used */ |
} awe_voice_parm_block; |
#define AWE_VOICE_PARM_SIZE 48 |
/* wave table parameters: 92 bytes */ |
typedef struct _awe_voice_info { |
unsigned short sf_id; /* file id (should be zero) */ |
unsigned short sample; /* sample id */ |
int start, end; /* sample offset correction */ |
int loopstart, loopend; /* loop offset correction */ |
short rate_offset; /* sample rate pitch offset */ |
unsigned short mode; /* sample mode */ |
#define AWE_MODE_ROMSOUND 0x8000 |
#define AWE_MODE_STEREO 1 |
#define AWE_MODE_LOOPING 2 |
#define AWE_MODE_NORELEASE 4 /* obsolete */ |
#define AWE_MODE_INIT_PARM 8 |
short root; /* midi root key */ |
short tune; /* pitch tuning (in cents) */ |
signed char low, high; /* key note range */ |
signed char vellow, velhigh; /* velocity range */ |
signed char fixkey, fixvel; /* fixed key, velocity */ |
signed char pan, fixpan; /* panning, fixed panning */ |
short exclusiveClass; /* exclusive class (0 = none) */ |
unsigned char amplitude; /* sample volume (127 max) */ |
unsigned char attenuation; /* attenuation (0.375dB) */ |
short scaleTuning; /* pitch scale tuning(%), normally 100 */ |
awe_voice_parm parm; /* voice envelope parameters */ |
short index; /* internal index (set by driver) */ |
} awe_voice_info; |
/*#define AWE_VOICE_INFO_SIZE 92*/ |
#define AWE_VOICE_INFO_SIZE sizeof(awe_voice_info) |
/*----------------------------------------------------------------*/ |
/* The info entry of awe_voice_rec is changed from 0 to 1 |
* for some compilers refusing zero size array. |
* Due to this change, sizeof(awe_voice_rec) becomes different |
* from older versions. |
* Use AWE_VOICE_REC_SIZE instead. |
*/ |
/* instrument info header: 4 bytes */ |
typedef struct _awe_voice_rec_hdr { |
unsigned char bank; /* midi bank number */ |
unsigned char instr; /* midi preset number */ |
char nvoices; /* number of voices */ |
char write_mode; /* write mode; normally 0 */ |
#define AWE_WR_APPEND 0 /* append anyway */ |
#define AWE_WR_EXCLUSIVE 1 /* skip if already exists */ |
#define AWE_WR_REPLACE 2 /* replace if already exists */ |
} awe_voice_rec_hdr; |
/*#define AWE_VOICE_REC_SIZE 4*/ |
#define AWE_VOICE_REC_SIZE sizeof(awe_voice_rec_hdr) |
/* the standard patch structure for one sample */ |
typedef struct _awe_voice_rec_patch { |
awe_patch_info patch; |
awe_voice_rec_hdr hdr; |
awe_voice_info info; |
} awe_voice_rec_patch; |
/* obsolete data type */ |
#if defined(AWE_COMPAT_030) && AWE_COMPAT_030 |
#define AWE_INFOARRAY_SIZE 0 |
#else |
#define AWE_INFOARRAY_SIZE 1 |
#endif |
typedef struct _awe_voice_rec { |
unsigned char bank; /* midi bank number */ |
unsigned char instr; /* midi preset number */ |
short nvoices; /* number of voices */ |
/* voice information follows here */ |
awe_voice_info info[AWE_INFOARRAY_SIZE]; |
} awe_voice_rec; |
/*---------------------------------------------------------------- |
* sample wave information |
*----------------------------------------------------------------*/ |
/* wave table sample header: 32 bytes */ |
typedef struct awe_sample_info { |
unsigned short sf_id; /* file id (should be zero) */ |
unsigned short sample; /* sample id */ |
int start, end; /* start & end offset */ |
int loopstart, loopend; /* loop start & end offset */ |
int size; /* size (0 = ROM) */ |
short checksum_flag; /* use check sum = 1 */ |
unsigned short mode_flags; /* mode flags */ |
#define AWE_SAMPLE_8BITS 1 /* wave data is 8bits */ |
#define AWE_SAMPLE_UNSIGNED 2 /* wave data is unsigned */ |
#define AWE_SAMPLE_NO_BLANK 4 /* no blank loop is attached */ |
#define AWE_SAMPLE_SINGLESHOT 8 /* single-shot w/o loop */ |
#define AWE_SAMPLE_BIDIR_LOOP 16 /* bidirectional looping */ |
#define AWE_SAMPLE_STEREO_LEFT 32 /* stereo left sound */ |
#define AWE_SAMPLE_STEREO_RIGHT 64 /* stereo right sound */ |
#define AWE_SAMPLE_REVERSE_LOOP 128 /* reverse looping */ |
unsigned int checksum; /* check sum */ |
#if defined(AWE_COMPAT_030) && AWE_COMPAT_030 |
unsigned short data[0]; /* sample data follows here */ |
#endif |
} awe_sample_info; |
/*#define AWE_SAMPLE_INFO_SIZE 32*/ |
#define AWE_SAMPLE_INFO_SIZE sizeof(awe_sample_info) |
/*---------------------------------------------------------------- |
* voice preset mapping |
*----------------------------------------------------------------*/ |
typedef struct awe_voice_map { |
int map_bank, map_instr, map_key; /* key = -1 means all keys */ |
int src_bank, src_instr, src_key; |
} awe_voice_map; |
#define AWE_VOICE_MAP_SIZE sizeof(awe_voice_map) |
/*---------------------------------------------------------------- |
* awe hardware controls |
*----------------------------------------------------------------*/ |
#define _AWE_DEBUG_MODE 0x00 |
#define _AWE_REVERB_MODE 0x01 |
#define _AWE_CHORUS_MODE 0x02 |
#define _AWE_REMOVE_LAST_SAMPLES 0x03 |
#define _AWE_INITIALIZE_CHIP 0x04 |
#define _AWE_SEND_EFFECT 0x05 |
#define _AWE_TERMINATE_CHANNEL 0x06 |
#define _AWE_TERMINATE_ALL 0x07 |
#define _AWE_INITIAL_VOLUME 0x08 |
#define _AWE_INITIAL_ATTEN _AWE_INITIAL_VOLUME |
#define _AWE_RESET_CHANNEL 0x09 |
#define _AWE_CHANNEL_MODE 0x0a |
#define _AWE_DRUM_CHANNELS 0x0b |
#define _AWE_MISC_MODE 0x0c |
#define _AWE_RELEASE_ALL 0x0d |
#define _AWE_NOTEOFF_ALL 0x0e |
#define _AWE_CHN_PRESSURE 0x0f |
/*#define _AWE_GET_CURRENT_MODE 0x10*/ |
#define _AWE_EQUALIZER 0x11 |
/*#define _AWE_GET_MISC_MODE 0x12*/ |
/*#define _AWE_GET_FONTINFO 0x13*/ |
#define _AWE_MODE_FLAG 0x80 |
#define _AWE_COOKED_FLAG 0x40 /* not supported */ |
#define _AWE_MODE_VALUE_MASK 0x3F |
/*----------------------------------------------------------------*/ |
#define _AWE_SET_CMD(p,dev,voice,cmd,p1,p2) \ |
{((char*)(p))[0] = SEQ_PRIVATE;\ |
((char*)(p))[1] = dev;\ |
((char*)(p))[2] = _AWE_MODE_FLAG|(cmd);\ |
((char*)(p))[3] = voice;\ |
((unsigned short*)(p))[2] = p1;\ |
((unsigned short*)(p))[3] = p2;} |
/* buffered access */ |
#define _AWE_CMD(dev, voice, cmd, p1, p2) \ |
{_SEQ_NEEDBUF(8);\ |
_AWE_SET_CMD(_seqbuf + _seqbufptr, dev, voice, cmd, p1, p2);\ |
_SEQ_ADVBUF(8);} |
/* direct access */ |
#define _AWE_CMD_NOW(seqfd,dev,voice,cmd,p1,p2) \ |
{struct seq_event_rec tmp;\ |
_AWE_SET_CMD(&tmp, dev, voice, cmd, p1, p2);\ |
ioctl(seqfd, SNDCTL_SEQ_OUTOFBAND, &tmp);} |
/*----------------------------------------------------------------*/ |
/* set debugging mode */ |
#define AWE_DEBUG_MODE(dev,p1) _AWE_CMD(dev, 0, _AWE_DEBUG_MODE, p1, 0) |
/* set reverb mode; from 0 to 7 */ |
#define AWE_REVERB_MODE(dev,p1) _AWE_CMD(dev, 0, _AWE_REVERB_MODE, p1, 0) |
/* set chorus mode; from 0 to 7 */ |
#define AWE_CHORUS_MODE(dev,p1) _AWE_CMD(dev, 0, _AWE_CHORUS_MODE, p1, 0) |
/* reset channel */ |
#define AWE_RESET_CHANNEL(dev,ch) _AWE_CMD(dev, ch, _AWE_RESET_CHANNEL, 0, 0) |
#define AWE_RESET_CONTROL(dev,ch) _AWE_CMD(dev, ch, _AWE_RESET_CHANNEL, 1, 0) |
/* send an effect to all layers */ |
#define AWE_SEND_EFFECT(dev,voice,type,value) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,type,value) |
#define AWE_ADD_EFFECT(dev,voice,type,value) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((type)|0x80),value) |
#define AWE_UNSET_EFFECT(dev,voice,type) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((type)|0x40),0) |
/* send an effect to a layer */ |
#define AWE_SEND_LAYER_EFFECT(dev,voice,layer,type,value) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((layer+1)<<8|(type)),value) |
#define AWE_ADD_LAYER_EFFECT(dev,voice,layer,type,value) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((layer+1)<<8|(type)|0x80),value) |
#define AWE_UNSET_LAYER_EFFECT(dev,voice,layer,type) _AWE_CMD(dev,voice,_AWE_SEND_EFFECT,((layer+1)<<8|(type)|0x40),0) |
/* terminate sound on the channel/voice */ |
#define AWE_TERMINATE_CHANNEL(dev,voice) _AWE_CMD(dev,voice,_AWE_TERMINATE_CHANNEL,0,0) |
/* terminate all sounds */ |
#define AWE_TERMINATE_ALL(dev) _AWE_CMD(dev, 0, _AWE_TERMINATE_ALL, 0, 0) |
/* release all sounds (w/o sustain effect) */ |
#define AWE_RELEASE_ALL(dev) _AWE_CMD(dev, 0, _AWE_RELEASE_ALL, 0, 0) |
/* note off all sounds (w sustain effect) */ |
#define AWE_NOTEOFF_ALL(dev) _AWE_CMD(dev, 0, _AWE_NOTEOFF_ALL, 0, 0) |
/* set initial attenuation */ |
#define AWE_INITIAL_VOLUME(dev,atten) _AWE_CMD(dev, 0, _AWE_INITIAL_VOLUME, atten, 0) |
#define AWE_INITIAL_ATTEN AWE_INITIAL_VOLUME |
/* relative attenuation */ |
#define AWE_SET_ATTEN(dev,atten) _AWE_CMD(dev, 0, _AWE_INITIAL_VOLUME, atten, 1) |
/* set channel playing mode; mode=0/1/2 */ |
#define AWE_SET_CHANNEL_MODE(dev,mode) _AWE_CMD(dev, 0, _AWE_CHANNEL_MODE, mode, 0) |
#define AWE_PLAY_INDIRECT 0 /* indirect voice mode (default) */ |
#define AWE_PLAY_MULTI 1 /* multi note voice mode */ |
#define AWE_PLAY_DIRECT 2 /* direct single voice mode */ |
#define AWE_PLAY_MULTI2 3 /* sequencer2 mode; used internally */ |
/* set drum channel mask; channels is 32bit long value */ |
#define AWE_DRUM_CHANNELS(dev,channels) _AWE_CMD(dev, 0, _AWE_DRUM_CHANNELS, ((channels) & 0xffff), ((channels) >> 16)) |
/* set bass and treble control; values are from 0 to 11 */ |
#define AWE_EQUALIZER(dev,bass,treble) _AWE_CMD(dev, 0, _AWE_EQUALIZER, bass, treble) |
/* remove last loaded samples */ |
#define AWE_REMOVE_LAST_SAMPLES(seqfd,dev) _AWE_CMD_NOW(seqfd, dev, 0, _AWE_REMOVE_LAST_SAMPLES, 0, 0) |
/* initialize emu8000 chip */ |
#define AWE_INITIALIZE_CHIP(seqfd,dev) _AWE_CMD_NOW(seqfd, dev, 0, _AWE_INITIALIZE_CHIP, 0, 0) |
/* set miscellaneous modes; meta command */ |
#define AWE_MISC_MODE(dev,mode,value) _AWE_CMD(dev, 0, _AWE_MISC_MODE, mode, value) |
/* exclusive sound off; 1=off */ |
#define AWE_EXCLUSIVE_SOUND(dev,mode) AWE_MISC_MODE(dev,AWE_MD_EXCLUSIVE_SOUND,mode) |
/* default GUS bank number */ |
#define AWE_SET_GUS_BANK(dev,bank) AWE_MISC_MODE(dev,AWE_MD_GUS_BANK,bank) |
/* change panning position in realtime; 0=don't 1=do */ |
#define AWE_REALTIME_PAN(dev,mode) AWE_MISC_MODE(dev,AWE_MD_REALTIME_PAN,mode) |
/* extended pressure controls; not portable with other sound drivers */ |
#define AWE_KEY_PRESSURE(dev,ch,note,vel) SEQ_START_NOTE(dev,ch,(note)+128,vel) |
#define AWE_CHN_PRESSURE(dev,ch,vel) _AWE_CMD(dev,ch,_AWE_CHN_PRESSURE,vel,0) |
/*----------------------------------------------------------------*/ |
/* reverb mode parameters */ |
#define AWE_REVERB_ROOM1 0 |
#define AWE_REVERB_ROOM2 1 |
#define AWE_REVERB_ROOM3 2 |
#define AWE_REVERB_HALL1 3 |
#define AWE_REVERB_HALL2 4 |
#define AWE_REVERB_PLATE 5 |
#define AWE_REVERB_DELAY 6 |
#define AWE_REVERB_PANNINGDELAY 7 |
#define AWE_REVERB_PREDEFINED 8 |
/* user can define reverb modes up to 32 */ |
#define AWE_REVERB_NUMBERS 32 |
typedef struct awe_reverb_fx_rec { |
unsigned short parms[28]; |
} awe_reverb_fx_rec; |
/*----------------------------------------------------------------*/ |
/* chorus mode parameters */ |
#define AWE_CHORUS_1 0 |
#define AWE_CHORUS_2 1 |
#define AWE_CHORUS_3 2 |
#define AWE_CHORUS_4 3 |
#define AWE_CHORUS_FEEDBACK 4 |
#define AWE_CHORUS_FLANGER 5 |
#define AWE_CHORUS_SHORTDELAY 6 |
#define AWE_CHORUS_SHORTDELAY2 7 |
#define AWE_CHORUS_PREDEFINED 8 |
/* user can define chorus modes up to 32 */ |
#define AWE_CHORUS_NUMBERS 32 |
typedef struct awe_chorus_fx_rec { |
unsigned short feedback; /* feedback level (0xE600-0xE6FF) */ |
unsigned short delay_offset; /* delay (0-0x0DA3) [1/44100 sec] */ |
unsigned short lfo_depth; /* LFO depth (0xBC00-0xBCFF) */ |
unsigned int delay; /* right delay (0-0xFFFFFFFF) [1/256/44100 sec] */ |
unsigned int lfo_freq; /* LFO freq LFO freq (0-0xFFFFFFFF) */ |
} awe_chorus_fx_rec; |
/*----------------------------------------------------------------*/ |
/* misc mode types */ |
enum { |
/* 0*/ AWE_MD_EXCLUSIVE_OFF, /* obsolete */ |
/* 1*/ AWE_MD_EXCLUSIVE_ON, /* obsolete */ |
/* 2*/ AWE_MD_VERSION, /* read only */ |
/* 3*/ AWE_MD_EXCLUSIVE_SOUND, /* 0/1: exclusive note on (default=1) */ |
/* 4*/ AWE_MD_REALTIME_PAN, /* 0/1: do realtime pan change (default=1) */ |
/* 5*/ AWE_MD_GUS_BANK, /* bank number for GUS patches (default=0) */ |
/* 6*/ AWE_MD_KEEP_EFFECT, /* 0/1: keep effect values, (default=0) */ |
/* 7*/ AWE_MD_ZERO_ATTEN, /* attenuation of max volume (default=32) */ |
/* 8*/ AWE_MD_CHN_PRIOR, /* 0/1: set MIDI channel priority mode (default=1) */ |
/* 9*/ AWE_MD_MOD_SENSE, /* integer: modwheel sensitivity (def=18) */ |
/*10*/ AWE_MD_DEF_PRESET, /* integer: default preset number (def=0) */ |
/*11*/ AWE_MD_DEF_BANK, /* integer: default bank number (def=0) */ |
/*12*/ AWE_MD_DEF_DRUM, /* integer: default drumset number (def=0) */ |
/*13*/ AWE_MD_TOGGLE_DRUM_BANK, /* 0/1: toggle drum flag with bank# (def=0) */ |
/*14*/ AWE_MD_NEW_VOLUME_CALC, /* 0/1: volume calculation mode (def=1) */ |
/*15*/ AWE_MD_CHORUS_MODE, /* integer: chorus mode (def=2) */ |
/*16*/ AWE_MD_REVERB_MODE, /* integer: chorus mode (def=4) */ |
/*17*/ AWE_MD_BASS_LEVEL, /* integer: bass level (def=5) */ |
/*18*/ AWE_MD_TREBLE_LEVEL, /* integer: treble level (def=9) */ |
/*19*/ AWE_MD_DEBUG_MODE, /* integer: debug level (def=0) */ |
/*20*/ AWE_MD_PAN_EXCHANGE, /* 0/1: exchange panning direction (def=0) */ |
AWE_MD_END, |
}; |
/*----------------------------------------------------------------*/ |
/* effect parameters */ |
enum { |
/* modulation envelope parameters */ |
/* 0*/ AWE_FX_ENV1_DELAY, /* WORD: ENVVAL */ |
/* 1*/ AWE_FX_ENV1_ATTACK, /* BYTE: up ATKHLD */ |
/* 2*/ AWE_FX_ENV1_HOLD, /* BYTE: lw ATKHLD */ |
/* 3*/ AWE_FX_ENV1_DECAY, /* BYTE: lw DCYSUS */ |
/* 4*/ AWE_FX_ENV1_RELEASE, /* BYTE: lw DCYSUS */ |
/* 5*/ AWE_FX_ENV1_SUSTAIN, /* BYTE: up DCYSUS */ |
/* 6*/ AWE_FX_ENV1_PITCH, /* BYTE: up PEFE */ |
/* 7*/ AWE_FX_ENV1_CUTOFF, /* BYTE: lw PEFE */ |
/* volume envelope parameters */ |
/* 8*/ AWE_FX_ENV2_DELAY, /* WORD: ENVVOL */ |
/* 9*/ AWE_FX_ENV2_ATTACK, /* BYTE: up ATKHLDV */ |
/*10*/ AWE_FX_ENV2_HOLD, /* BYTE: lw ATKHLDV */ |
/*11*/ AWE_FX_ENV2_DECAY, /* BYTE: lw DCYSUSV */ |
/*12*/ AWE_FX_ENV2_RELEASE, /* BYTE: lw DCYSUSV */ |
/*13*/ AWE_FX_ENV2_SUSTAIN, /* BYTE: up DCYSUSV */ |
/* LFO1 (tremolo & vibrato) parameters */ |
/*14*/ AWE_FX_LFO1_DELAY, /* WORD: LFO1VAL */ |
/*15*/ AWE_FX_LFO1_FREQ, /* BYTE: lo TREMFRQ */ |
/*16*/ AWE_FX_LFO1_VOLUME, /* BYTE: up TREMFRQ */ |
/*17*/ AWE_FX_LFO1_PITCH, /* BYTE: up FMMOD */ |
/*18*/ AWE_FX_LFO1_CUTOFF, /* BYTE: lo FMMOD */ |
/* LFO2 (vibrato) parameters */ |
/*19*/ AWE_FX_LFO2_DELAY, /* WORD: LFO2VAL */ |
/*20*/ AWE_FX_LFO2_FREQ, /* BYTE: lo FM2FRQ2 */ |
/*21*/ AWE_FX_LFO2_PITCH, /* BYTE: up FM2FRQ2 */ |
/* Other overall effect parameters */ |
/*22*/ AWE_FX_INIT_PITCH, /* SHORT: pitch offset */ |
/*23*/ AWE_FX_CHORUS, /* BYTE: chorus effects send (0-255) */ |
/*24*/ AWE_FX_REVERB, /* BYTE: reverb effects send (0-255) */ |
/*25*/ AWE_FX_CUTOFF, /* BYTE: up IFATN */ |
/*26*/ AWE_FX_FILTERQ, /* BYTE: up CCCA */ |
/* Sample / loop offset changes */ |
/*27*/ AWE_FX_SAMPLE_START, /* SHORT: offset */ |
/*28*/ AWE_FX_LOOP_START, /* SHORT: offset */ |
/*29*/ AWE_FX_LOOP_END, /* SHORT: offset */ |
/*30*/ AWE_FX_COARSE_SAMPLE_START, /* SHORT: upper word offset */ |
/*31*/ AWE_FX_COARSE_LOOP_START, /* SHORT: upper word offset */ |
/*32*/ AWE_FX_COARSE_LOOP_END, /* SHORT: upper word offset */ |
/*33*/ AWE_FX_ATTEN, /* BYTE: lo IFATN */ |
AWE_FX_END, |
}; |
#endif /* AWE_VOICE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/ncp_mount.h |
---|
0,0 → 1,93 |
/* |
* 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 */ |
#ifdef __KERNEL__ |
struct ncp_mount_data_kernel { |
unsigned long flags; /* NCP_MOUNT_* flags */ |
unsigned int int_flags; /* internal flags */ |
#define NCP_IMOUNT_LOGGEDIN_POSSIBLE 0x0001 |
__kernel_uid32_t mounted_uid; /* Who may umount() this filesystem? */ |
__kernel_pid_t 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? */ |
unsigned char mounted_vol[NCP_VOLNAME_LEN + 1]; |
__kernel_uid32_t uid; |
__kernel_gid32_t gid; |
__kernel_mode_t file_mode; |
__kernel_mode_t dir_mode; |
int info_fd; |
}; |
#endif /* __KERNEL__ */ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/trdevice.h |
---|
0,0 → 1,41 |
/* |
* INET An implementation of the TCP/IP protocol suite for the LINUX |
* operating system. NET is implemented using the BSD Socket |
* interface as the means of communication with the user level. |
* |
* Definitions for the Token-ring handlers. |
* |
* Version: @(#)eth.h 1.0.4 05/13/93 |
* |
* Authors: Ross Biro, <bir7@leland.Stanford.Edu> |
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> |
* |
* Relocated to include/linux where it belongs by Alan Cox |
* <gw4pts@gw4pts.ampr.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. |
* |
* WARNING: This move may well be temporary. This file will get merged with others RSN. |
* |
*/ |
#ifndef _LINUX_TRDEVICE_H |
#define _LINUX_TRDEVICE_H |
#include <linux/if_tr.h> |
#ifdef __KERNEL__ |
extern int tr_header(struct sk_buff *skb, struct net_device *dev, |
unsigned short type, void *daddr, |
void *saddr, unsigned len); |
extern int tr_rebuild_header(struct sk_buff *skb); |
extern unsigned short tr_type_trans(struct sk_buff *skb, struct net_device *dev); |
extern void tr_source_route(struct sk_buff *skb, struct trh_hdr *trh, struct net_device *dev); |
extern struct net_device *alloc_trdev(int sizeof_priv); |
#endif |
#endif /* _LINUX_TRDEVICE_H */ |
/shark/trunk/drivers/linuxc26/include/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 _LINUX_IN_H |
#define _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_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_PIM = 103, /* Protocol Independent Multicast */ |
IPPROTO_COMP = 108, /* Compression Header protocol */ |
IPPROTO_SCTP = 132, /* Stream Control Transport Protocol */ |
IPPROTO_RAW = 255, /* Raw IP packets */ |
IPPROTO_MAX |
}; |
/* Internet address. */ |
struct in_addr { |
__u32 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 |
/* BSD compatibility */ |
#define IP_RECVRETOPTS IP_RETOPTS |
/* 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_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 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 { |
__u32 imr_multiaddr; |
__u32 imr_interface; |
__u32 imr_sourceaddr; |
}; |
struct ip_msfilter { |
__u32 imsf_multiaddr; |
__u32 imsf_interface; |
__u32 imsf_fmode; |
__u32 imsf_numsrc; |
__u32 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 { |
sa_family_t sin_family; /* Address family */ |
unsigned short int 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> |
#ifdef __KERNEL__ |
/* Some random defines to make it easier in the kernel.. */ |
#define LOOPBACK(x) (((x) & htonl(0xff000000)) == htonl(0x7f000000)) |
#define MULTICAST(x) (((x) & htonl(0xf0000000)) == htonl(0xe0000000)) |
#define BADCLASS(x) (((x) & htonl(0xf0000000)) == htonl(0xf0000000)) |
#define ZERONET(x) (((x) & htonl(0xff000000)) == htonl(0x00000000)) |
#define LOCAL_MCAST(x) (((x) & htonl(0xFFFFFF00)) == htonl(0xE0000000)) |
#endif |
#endif /* _LINUX_IN_H */ |
/shark/trunk/drivers/linuxc26/include/linux/802_11.h |
---|
0,0 → 1,191 |
#ifndef IEEE_802_11 |
#define IEEE_802_11 |
#include <linux/types.h> |
enum ieee_802_11_link_status_failure_reason { |
reserved0, Unspecified=1, Previous_not_valid, |
Sender_Quits_ESS_or_IBSS, |
Due_Inactivity, AP_Overload, |
Class_2_from_NonAuth, |
Class_3_from_NonAuth, |
Sender_Quits_BSS, |
Association_requester_not_authenticated, |
Reserved10 |
}; |
#define IEEE_802_11_LINK_STATUS_FAILURE_REASON_STRINGS \ |
{ \ |
{reserved0, 0xff," Reserved reason "},\ |
{Unspecified, 0xff," Unspecified Reason "},\ |
{Previous_not_valid, 0xff," Previous Authentication no longer valid "},\ |
{Sender_Quits_ESS_or_IBSS,0xff," Deauthenticated because sending station is leaving (has left) IBSS or ESS "},\ |
{Due_Inactivity, 0xff," Disassociated due to inactivity "},\ |
{AP_Overload, 0xff," Disassociated because AP is unable to handle all currently associated stations "},\ |
{Class_2_from_NonAuth, 0xff," Class 2 frame received from non-Authenticated station"},\ |
{Class_3_from_NonAuth, 0xff," Class 3 frame received from nonÂAssociated station"},\ |
{Sender_Quits_BSS, 0xff," Disassociated because sending station is leaving (has left) BSS"},\ |
{Association_requester_not_authenticated,0xff," Station requesting (Re)Association is not Authenticated with responding station"},\ |
{Reserved10, 0xff," Reserved"},\ |
{0,0,NULL}\ |
}; |
struct ieee_802_11_header { |
u16 frame_control;// needs to be subtyped |
u16 duration; |
u8 mac1[6]; |
u8 mac2[6]; |
u8 mac3[6]; |
u16 SeqCtl; |
u8 mac4[6]; |
u16 gapLen; |
u8 gap[8]; |
}; |
struct ieee_802_3_header { |
u16 status; |
u16 payload_length; |
u8 dst_mac[6]; |
u8 src_mac[6]; |
}; |
#define P80211_OUI_LEN 3 |
struct ieee_802_11_snap_header { |
u8 dsap; /* always 0xAA */ |
u8 ssap; /* always 0xAA */ |
u8 ctrl; /* always 0x03 */ |
u8 oui[P80211_OUI_LEN]; /* organizational universal id */ |
} __attribute__ ((packed)); |
#define P80211_LLC_OUI_LEN 3 |
struct ieee_802_11_802_1H_header { |
u8 dsap; |
u8 ssap; /* always 0xAA */ |
u8 ctrl; /* always 0x03 */ |
u8 oui[P80211_OUI_LEN]; /* organizational universal id */ |
u16 unknown1; /* packet type ID fields */ |
u16 unknown2; /* here is something like length in some cases */ |
} __attribute__ ((packed)); |
struct ieee_802_11_802_2_header { |
u8 dsap; |
u8 ssap; /* always 0xAA */ |
u8 ctrl; /* always 0x03 */ |
u8 oui[P80211_OUI_LEN]; /* organizational universal id */ |
u8 type; /* packet type ID field. i guess, */ |
} __attribute__ ((packed)); |
// following is incoplete and may be incorrect and need reorganization |
#define ieee_802_11_frame_type_Management 0x00 |
#define ieee_802_11_frame_type_Control 0x01 |
#define ieee_802_11_frame_type_Data 0x10 |
#define ieee_802_11_frame_type_Reserved 0x11 |
#define ieee_802_11_frame_subtype_Association_Req 0x0 // Association Request |
#define ieee_802_11_frame_subtype_Association_Resp 0x1 // Association Response |
#define ieee_802_11_frame_subtype_Reassociation_Req 0x2 // Reassociation Request |
#define ieee_802_11_frame_subtype_Reassociation_Resp 0x3 // Reassociation Response |
#define ieee_802_11_frame_subtype_Probe_Req 0x4 // Probe Request |
#define ieee_802_11_frame_subtype_Probe_Resp 0x5 // Probe Response |
#define ieee_802_11_frame_subtype_Beacon 0x8 // Beacon |
#define ieee_802_11_frame_subtype_ATIM 0x9 // ATIM |
#define ieee_802_11_frame_subtype_Disassociation 0xA // Disassociation |
#define ieee_802_11_frame_subtype_Authentication 0xB // Authentication |
#define ieee_802_11_frame_subtype_Deauthentication 0xC // Deauthentication |
#define ieee_802_11_frame_subtype_PS_Poll 0xA // PS-Poll |
#define ieee_802_11_frame_subtype_RTS 0xB // RTS |
#define ieee_802_11_frame_subtype_CTS 0xC // CTS |
#define ieee_802_11_frame_subtype_ACK 0xD // ACK |
#define ieee_802_11_frame_subtype_CFEnd 0xE // CF-End |
#define ieee_802_11_frame_subtype_CFEnd_CFAck 0xF // CF-End + CF-Ack |
#define ieee_802_11_frame_subtype_Data 0x0 // Data |
#define ieee_802_11_frame_subtype_Data_CFAck 0x1 // Data + CF-Ack |
#define ieee_802_11_frame_subtype_Data_CF_Poll 0x2 // Data + CF-Poll |
#define ieee_802_11_frame_subtype_Data_CF_AckCF_Poll 0x3 // Data + CF-Ack + CF-Poll |
#define ieee_802_11_frame_subtype_NullFunction 0x4 // Null Function (no data) |
#define ieee_802_11_frame_subtype_CF_Ack 0x5 // CF-Ack (no data) |
#define ieee_802_11_frame_subtype_CF_Poll 0x6 // CF-Poll (no data) |
#define ieee_802_11_frame_subtype_CF_AckCF_Poll 0x7 // CF-Ack + CF-Poll (no data) |
#define ieee_802_11_frame_subtype_strings {\ |
{ ieee_802_11_frame_subtype_Association_Req, 0xF,"f Association Request"},\ |
{ ieee_802_11_frame_subtype_Association_Resp, 0xF,"1 Association Response"},\ |
{ ieee_802_11_frame_subtype_Reassociation_Req, 0xF,"2 Reassociation Request"},\ |
{ ieee_802_11_frame_subtype_Reassociation_Resp, 0xF,"3 Reassociation Response"},\ |
{ ieee_802_11_frame_subtype_Probe_Req , 0xF,"4 Probe Request"},\ |
{ ieee_802_11_frame_subtype_Probe_Resp , 0xF,"5 Probe Response"},\ |
{ ieee_802_11_frame_subtype_Beacon , 0xF,"8 Beacon"},\ |
{ ieee_802_11_frame_subtype_ATIM , 0xF,"9 ATIM"},\ |
{ ieee_802_11_frame_subtype_Disassociation, 0xF,"A Disassociation"},\ |
{ ieee_802_11_frame_subtype_Authentication, 0xF,"B Authentication"},\ |
{ ieee_802_11_frame_subtype_Deauthentication, 0xF,"C Deauthentication"},\ |
{ ieee_802_11_frame_subtype_PS_Poll , 0xF,"A PS-Poll"},\ |
{ ieee_802_11_frame_subtype_RTS , 0xF,"B RTS"},\ |
{ ieee_802_11_frame_subtype_CTS , 0xF,"C CTS"},\ |
{ ieee_802_11_frame_subtype_ACK , 0xF,"D ACK"},\ |
{ ieee_802_11_frame_subtype_CFEnd , 0xF,"E CF-End"},\ |
{ ieee_802_11_frame_subtype_CFEnd_CFAck , 0xF,"F CF-End + CF-Ack"},\ |
{ ieee_802_11_frame_subtype_Data , 0xF,"0 Data"},\ |
{ ieee_802_11_frame_subtype_Data_CFAck , 0xF,"1 Data + CF-Ack"},\ |
{ ieee_802_11_frame_subtype_Data_CFPoll , 0xF,"2 Data + CF-Poll"},\ |
{ ieee_802_11_frame_subtype_Data_CFAck_CFPoll, 0xF,"3 Data + CF-Ack + CF-Poll"},\ |
{ ieee_802_11_frame_subtype_Null_Function , 0xF,"4 Null Function (no data)"},\ |
{ ieee_802_11_frame_subtype_CFAck , 0xF,"5 CF-Ack (no data)"},\ |
{ ieee_802_11_frame_subtype_CFPoll , 0xF,"6 CF-Poll (no data)"},\ |
{ ieee_802_11_frame_subtype_CFAck_CFPoll, 0xF,"y7 CF-Ack + CF-Poll (no data)"},\ |
{ 0,0,NULL}\ |
} |
struct ieee_802_11_frame_subtype_class { |
u8 subtype; |
u8 mask; |
u8 class; |
u8 type; |
}; |
#define ieee_802_11_frame_subtype_classes {\ |
{ ieee_802_11_frame_subtype_Association_Req, 0xF,2,ieee_802_11_frame_type_Management},\ |
{ ieee_802_11_frame_subtype_Association_Resp, 0xF,2,ieee_802_11_frame_type_Management},\ |
{ ieee_802_11_frame_subtype_Reassociation_Req, 0xF,2,ieee_802_11_frame_type_Management},\ |
{ ieee_802_11_frame_subtype_Reassociation_Resp, 0xF,2,ieee_802_11_frame_type_Management},\ |
{ ieee_802_11_frame_subtype_Probe_Req , 0xF,1,ieee_802_11_frame_type_Management},\ |
{ ieee_802_11_frame_subtype_Probe_Resp , 0xF,1,ieee_802_11_frame_type_Management},\ |
{ ieee_802_11_frame_subtype_Beacon , 0xF,1,ieee_802_11_frame_type_Management},\ |
{ ieee_802_11_frame_subtype_ATIM , 0xF,1,ieee_802_11_frame_type_Management},\ |
{ ieee_802_11_frame_subtype_Disassociation, 0xF,2,ieee_802_11_frame_type_Management},\ |
{ ieee_802_11_frame_subtype_Authentication, 0xF,1,ieee_802_11_frame_type_Management},\ |
{ ieee_802_11_frame_subtype_Deauthentication, 0xF,3,ieee_802_11_frame_type_Management},\ |
{ ieee_802_11_frame_subtype_PS-Poll , 0xF,3,ieee_802_11_frame_type_Control},\ |
{ ieee_802_11_frame_subtype_RTS , 0xF,1,ieee_802_11_frame_type_Control},\ |
{ ieee_802_11_frame_subtype_CTS , 0xF,1,ieee_802_11_frame_type_Control},\ |
{ ieee_802_11_frame_subtype_ACK , 0xF,1,ieee_802_11_frame_type_Control},\ |
{ ieee_802_11_frame_subtype_CFEnd , 0xF,1,ieee_802_11_frame_type_Control},\ |
{ ieee_802_11_frame_subtype_CFEnd_CFAck , 0xF,1,ieee_802_11_frame_type_Control},\ |
{ ieee_802_11_frame_subtype_Data , 0xF,3,ieee_802_11_frame_type_Data},\ |
{ ieee_802_11_frame_subtype_Data_CFAck , 0xF,3,ieee_802_11_frame_type_Data},\ |
{ ieee_802_11_frame_subtype_Data_CF_Poll 0xF,3,ieee_802_11_frame_type_Data},\ |
{ ieee_802_11_frame_subtype_Data_CF_AckCF_Poll, 0xF,3,ieee_802_11_frame_type_Data},\ |
{ ieee_802_11_frame_subtype_NullFunction 0xF,1,ieee_802_11_frame_type_Data},\ |
{ ieee_802_11_frame_subtype_CF_Ack , 0xF,1,ieee_802_11_frame_type_Data},\ |
{ ieee_802_11_frame_subtype_CF_Poll , 0xF,1,ieee_802_11_frame_type_Data},\ |
{ ieee_802_11_frame_subtype_CF_AckCF_Poll, 0xF,1,ieee_802_11_frame_type_Data},\ |
{ 0,0,NULL}\ |
} |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/jffs2.h |
---|
0,0 → 1,188 |
/* |
* JFFS2 -- Journalling Flash File System, Version 2. |
* |
* Copyright (C) 2001-2003 Red Hat, Inc. |
* |
* Created by David Woodhouse <dwmw2@redhat.com> |
* |
* For licensing information, see the file 'LICENCE' in the |
* jffs2 directory. |
* |
* $Id: jffs2.h,v 1.1 2004-01-28 15:25:48 giacomo Exp $ |
* |
*/ |
#ifndef __LINUX_JFFS2_H__ |
#define __LINUX_JFFS2_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. */ |
#define JFFS2_SUPER_MAGIC 0x72b6 |
/* 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 |
/* 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 |
/* 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) |
// 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 { |
uint32_t v32; |
} __attribute__((packed)) jint32_t; |
typedef struct { |
uint32_t m; |
} __attribute__((packed)) jmode_t; |
typedef struct { |
uint16_t v16; |
} __attribute__((packed)) jint16_t; |
#define JFFS2_NATIVE_ENDIAN |
/* Note we handle mode bits conversion from JFFS2 (i.e. Linux) to/from |
whatever OS we're actually running on here too. */ |
#if defined(JFFS2_NATIVE_ENDIAN) |
#define cpu_to_je16(x) ((jint16_t){x}) |
#define cpu_to_je32(x) ((jint32_t){x}) |
#define cpu_to_jemode(x) ((jmode_t){os_to_jffs2_mode(x)}) |
#define je16_to_cpu(x) ((x).v16) |
#define je32_to_cpu(x) ((x).v32) |
#define jemode_to_cpu(x) (jffs2_to_os_mode((x).m)) |
#elif defined(JFFS2_BIG_ENDIAN) |
#define cpu_to_je16(x) ((jint16_t){cpu_to_be16(x)}) |
#define cpu_to_je32(x) ((jint32_t){cpu_to_be32(x)}) |
#define cpu_to_jemode(x) ((jmode_t){cpu_to_be32(os_to_jffs2_mode(x))}) |
#define je16_to_cpu(x) (be16_to_cpu(x.v16)) |
#define je32_to_cpu(x) (be32_to_cpu(x.v32)) |
#define jemode_to_cpu(x) (be32_to_cpu(jffs2_to_os_mode((x).m))) |
#elif defined(JFFS2_LITTLE_ENDIAN) |
#define cpu_to_je16(x) ((jint16_t){cpu_to_le16(x)}) |
#define cpu_to_je32(x) ((jint32_t){cpu_to_le32(x)}) |
#define cpu_to_jemode(x) ((jmode_t){cpu_to_le32(os_to_jffs2_mode(x))}) |
#define je16_to_cpu(x) (le16_to_cpu(x.v16)) |
#define je32_to_cpu(x) (le32_to_cpu(x.v32)) |
#define jemode_to_cpu(x) (le32_to_cpu(jffs2_to_os_mode((x).m))) |
#else |
#error wibble |
#endif |
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; |
} __attribute__((packed)); |
struct jffs2_raw_dirent |
{ |
jint16_t magic; |
jint16_t nodetype; /* == JFFS_NODETYPE_DIRENT */ |
jint32_t totlen; |
jint32_t hdr_crc; |
jint32_t pino; |
jint32_t version; |
jint32_t ino; /* == zero for unlink */ |
jint32_t mctime; |
uint8_t nsize; |
uint8_t type; |
uint8_t unused[2]; |
jint32_t node_crc; |
jint32_t name_crc; |
uint8_t name[0]; |
} __attribute__((packed)); |
/* 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; /* == JFFS_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) */ |
uint8_t compr; /* Compression algorithm used */ |
uint8_t 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) */ |
uint8_t data[0]; |
} __attribute__((packed)); |
union jffs2_node_union { |
struct jffs2_raw_inode i; |
struct jffs2_raw_dirent d; |
struct jffs2_unknown_node u; |
}; |
#endif /* __LINUX_JFFS2_H__ */ |
/shark/trunk/drivers/linuxc26/include/linux/generic_serial.h |
---|
0,0 → 1,97 |
/* |
* generic_serial.h |
* |
* Copyright (C) 1998 R.E.Wolff@BitWizard.nl |
* |
* written for the SX serial driver. |
* Contains the code that should be shared over all the serial drivers. |
* |
* Version 0.1 -- December, 1998. |
*/ |
#ifndef GENERIC_SERIAL_H |
#define GENERIC_SERIAL_H |
struct real_driver { |
void (*disable_tx_interrupts) (void *); |
void (*enable_tx_interrupts) (void *); |
void (*disable_rx_interrupts) (void *); |
void (*enable_rx_interrupts) (void *); |
int (*get_CD) (void *); |
void (*shutdown_port) (void*); |
int (*set_real_termios) (void*); |
int (*chars_in_buffer) (void*); |
void (*close) (void*); |
void (*hungup) (void*); |
void (*getserial) (void*, struct serial_struct *sp); |
}; |
struct gs_port { |
int magic; |
unsigned char *xmit_buf; |
int xmit_head; |
int xmit_tail; |
int xmit_cnt; |
/* struct semaphore port_write_sem; */ |
int flags; |
wait_queue_head_t open_wait; |
wait_queue_head_t close_wait; |
int count; |
int blocked_open; |
struct tty_struct *tty; |
unsigned long event; |
unsigned short closing_wait; |
int close_delay; |
struct real_driver *rd; |
int wakeup_chars; |
int baud_base; |
int baud; |
int custom_divisor; |
}; |
/* Flags */ |
/* Warning: serial.h defines some ASYNC_ flags, they say they are "only" |
used in serial.c, but they are also used in all other serial drivers. |
Make sure they don't clash with these here... */ |
#define GS_TX_INTEN 0x00800000 |
#define GS_RX_INTEN 0x00400000 |
#define GS_ACTIVE 0x00200000 |
#define GS_TYPE_NORMAL 1 |
#define GS_DEBUG_FLUSH 0x00000001 |
#define GS_DEBUG_BTR 0x00000002 |
#define GS_DEBUG_TERMIOS 0x00000004 |
#define GS_DEBUG_STUFF 0x00000008 |
#define GS_DEBUG_CLOSE 0x00000010 |
#define GS_DEBUG_FLOW 0x00000020 |
void gs_put_char(struct tty_struct *tty, unsigned char ch); |
int gs_write(struct tty_struct *tty, int from_user, |
const unsigned char *buf, int count); |
int gs_write_room(struct tty_struct *tty); |
int gs_chars_in_buffer(struct tty_struct *tty); |
void gs_flush_buffer(struct tty_struct *tty); |
void gs_flush_chars(struct tty_struct *tty); |
void gs_stop(struct tty_struct *tty); |
void gs_start(struct tty_struct *tty); |
void gs_hangup(struct tty_struct *tty); |
void gs_do_softint(void *private_); |
int gs_block_til_ready(void *port, struct file *filp); |
void gs_close(struct tty_struct *tty, struct file *filp); |
void gs_set_termios (struct tty_struct * tty, |
struct termios * old_termios); |
int gs_init_port(struct gs_port *port); |
int gs_setserial(struct gs_port *port, struct serial_struct *sp); |
int gs_getserial(struct gs_port *port, struct serial_struct *sp); |
void gs_got_break(struct gs_port *port); |
extern int gs_debug; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/cuda.h |
---|
0,0 → 1,36 |
/* |
* 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. |
*/ |
/* 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 |
#ifdef __KERNEL__ |
extern int find_via_cuda(void); |
extern int cuda_request(struct adb_request *req, |
void (*done)(struct adb_request *), int nbytes, ...); |
extern void cuda_poll(void); |
#endif /* __KERNEL */ |
/shark/trunk/drivers/linuxc26/include/linux/kernelcapi.h |
---|
0,0 → 1,158 |
/* |
* $Id: kernelcapi.h,v 1.1 2004-01-28 15:25:51 giacomo Exp $ |
* |
* Kernel CAPI 2.0 Interface for Linux |
* |
* (c) Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de) |
* |
*/ |
#ifndef __KERNELCAPI_H__ |
#define __KERNELCAPI_H__ |
#include <linux/list.h> |
#define CAPI_MAXAPPL 128 /* maximum number of applications */ |
#define CAPI_MAXCONTR 16 /* 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 |
#ifdef __KERNEL__ |
#include <linux/skbuff.h> |
#define KCI_CONTRUP 0 /* arg: struct capi_profile */ |
#define KCI_CONTRDOWN 1 /* arg: NULL */ |
struct capi20_appl { |
u16 applid; |
capi_register_params rparam; |
void (*recv_message)(struct capi20_appl *ap, struct sk_buff *skb); |
void *private; |
/* internal to kernelcapi.o */ |
unsigned long nrecvctlpkt; |
unsigned long nrecvdatapkt; |
unsigned long nsentctlpkt; |
unsigned long nsentdatapkt; |
/* ugly hack to allow for notification of added/removed |
* controllers. The Right Way (tm) is known. XXX |
*/ |
void (*callback) (unsigned int cmd, __u32 contr, void *data); |
}; |
u16 capi20_isinstalled(void); |
u16 capi20_register(struct capi20_appl *ap); |
u16 capi20_release(struct capi20_appl *ap); |
u16 capi20_put_message(struct capi20_appl *ap, struct sk_buff *skb); |
u16 capi20_get_manufacturer(u32 contr, u8 buf[CAPI_MANUFACTURER_LEN]); |
u16 capi20_get_version(u32 contr, struct capi_version *verp); |
u16 capi20_get_serial(u32 contr, u8 serial[CAPI_SERIAL_LEN]); |
u16 capi20_get_profile(u32 contr, struct capi_profile *profp); |
int capi20_manufacturer(unsigned int cmd, void *data); |
/* temporary hack XXX */ |
void capi20_set_callback(struct capi20_appl *ap, |
void (*callback) (unsigned int cmd, __u32 contr, void *data)); |
#define CAPI_NOERROR 0x0000 |
#define CAPI_TOOMANYAPPLS 0x1001 |
#define CAPI_LOGBLKSIZETOSMALL 0x1002 |
#define CAPI_BUFFEXECEEDS64K 0x1003 |
#define CAPI_MSGBUFSIZETOOSMALL 0x1004 |
#define CAPI_ANZLOGCONNNOTSUPPORTED 0x1005 |
#define CAPI_REGRESERVED 0x1006 |
#define CAPI_REGBUSY 0x1007 |
#define CAPI_REGOSRESOURCEERR 0x1008 |
#define CAPI_REGNOTINSTALLED 0x1009 |
#define CAPI_REGCTRLERNOTSUPPORTEXTEQUIP 0x100a |
#define CAPI_REGCTRLERONLYSUPPORTEXTEQUIP 0x100b |
#define CAPI_ILLAPPNR 0x1101 |
#define CAPI_ILLCMDORSUBCMDORMSGTOSMALL 0x1102 |
#define CAPI_SENDQUEUEFULL 0x1103 |
#define CAPI_RECEIVEQUEUEEMPTY 0x1104 |
#define CAPI_RECEIVEOVERFLOW 0x1105 |
#define CAPI_UNKNOWNNOTPAR 0x1106 |
#define CAPI_MSGBUSY 0x1107 |
#define CAPI_MSGOSRESOURCEERR 0x1108 |
#define CAPI_MSGNOTINSTALLED 0x1109 |
#define CAPI_MSGCTRLERNOTSUPPORTEXTEQUIP 0x110a |
#define CAPI_MSGCTRLERONLYSUPPORTEXTEQUIP 0x110b |
typedef enum { |
CapiMessageNotSupportedInCurrentState = 0x2001, |
CapiIllContrPlciNcci = 0x2002, |
CapiNoPlciAvailable = 0x2003, |
CapiNoNcciAvailable = 0x2004, |
CapiNoListenResourcesAvailable = 0x2005, |
CapiNoFaxResourcesAvailable = 0x2006, |
CapiIllMessageParmCoding = 0x2007, |
} RESOURCE_CODING_PROBLEM; |
typedef enum { |
CapiB1ProtocolNotSupported = 0x3001, |
CapiB2ProtocolNotSupported = 0x3002, |
CapiB3ProtocolNotSupported = 0x3003, |
CapiB1ProtocolParameterNotSupported = 0x3004, |
CapiB2ProtocolParameterNotSupported = 0x3005, |
CapiB3ProtocolParameterNotSupported = 0x3006, |
CapiBProtocolCombinationNotSupported = 0x3007, |
CapiNcpiNotSupported = 0x3008, |
CapiCipValueUnknown = 0x3009, |
CapiFlagsNotSupported = 0x300a, |
CapiFacilityNotSupported = 0x300b, |
CapiDataLengthNotSupportedByCurrentProtocol = 0x300c, |
CapiResetProcedureNotSupportedByCurrentProtocol = 0x300d, |
CapiTeiAssignmentFailed = 0x300e, |
} REQUESTED_SERVICES_PROBLEM; |
typedef enum { |
CapiSuccess = 0x0000, |
CapiSupplementaryServiceNotSupported = 0x300e, |
CapiRequestNotAllowedInThisState = 0x3010, |
} SUPPLEMENTARY_SERVICE_INFO; |
typedef enum { |
CapiProtocolErrorLayer1 = 0x3301, |
CapiProtocolErrorLayer2 = 0x3302, |
CapiProtocolErrorLayer3 = 0x3303, |
CapiTimeOut = 0x3303, // SuppServiceReason |
CapiCallGivenToOtherApplication = 0x3304, |
} CAPI_REASON; |
#endif /* __KERNEL__ */ |
#endif /* __KERNELCAPI_H__ */ |
/shark/trunk/drivers/linuxc26/include/linux/idr.h |
---|
0,0 → 1,67 |
/* |
* include/linux/id.h |
* |
* 2002-10-18 written by Jim Houston jim.houston@ccur.com |
* Copyright (C) 2002 by Concurrent Computer Corporation |
* Distributed under the GNU GPL license version 2. |
* |
* Small id to pointer translation service avoiding fixed sized |
* tables. |
*/ |
#include <linux/types.h> |
#include <asm/bitops.h> |
#define RESERVED_ID_BITS 8 |
#if BITS_PER_LONG == 32 |
# define IDR_BITS 5 |
# define IDR_FULL 0xffffffff |
#elif BITS_PER_LONG == 64 |
# define IDR_BITS 6 |
# define IDR_FULL 0xffffffffffffffff |
#else |
# error "BITS_PER_LONG is not 32 or 64" |
#endif |
#define IDR_MASK ((1 << IDR_BITS)-1) |
/* Define the size of the id's */ |
#define BITS_PER_INT (sizeof(int)*8) |
#define MAX_ID_SHIFT (BITS_PER_INT - RESERVED_ID_BITS) |
#define MAX_ID_BIT (1 << MAX_ID_SHIFT) |
#define MAX_ID_MASK (MAX_ID_BIT - 1) |
/* Leave the possibility of an incomplete final layer */ |
#define MAX_LEVEL (MAX_ID_SHIFT + IDR_BITS - 1) / IDR_BITS |
/* Number of id_layer structs to leave in free list */ |
#define IDR_FREE_MAX MAX_LEVEL + MAX_LEVEL |
struct idr_layer { |
unsigned long bitmap; /* A zero bit means "space here" */ |
struct idr_layer *ary[1<<IDR_BITS]; |
int count; /* When zero, we can release it */ |
}; |
struct idr { |
struct idr_layer *top; |
struct idr_layer *id_free; |
long count; |
int layers; |
int id_free_cnt; |
spinlock_t lock; |
}; |
/* |
* This is what we export. |
*/ |
void *idr_find(struct idr *idp, int id); |
int idr_pre_get(struct idr *idp); |
int idr_get_new(struct idr *idp, void *ptr); |
void idr_remove(struct idr *idp, int id); |
void idr_init(struct idr *idp); |
extern kmem_cache_t *idr_layer_cache; |
/shark/trunk/drivers/linuxc26/include/linux/b1pcmcia.h |
---|
0,0 → 1,21 |
/* $Id: b1pcmcia.h,v 1.1 2004-01-28 15:24:54 giacomo Exp $ |
* |
* Exported functions of module b1pcmcia to be called by |
* avm_cs card services module. |
* |
* Copyright 1999 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 _B1PCMCIA_H_ |
#define _B1PCMCIA_H_ |
int b1pcmcia_addcard_b1(unsigned int port, unsigned irq); |
int b1pcmcia_addcard_m1(unsigned int port, unsigned irq); |
int b1pcmcia_addcard_m2(unsigned int port, unsigned irq); |
int b1pcmcia_delcard(unsigned int port, unsigned irq); |
#endif /* _B1PCMCIA_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/atmmpc.h |
---|
0,0 → 1,125 |
#ifndef _ATMMPC_H_ |
#define _ATMMPC_H_ |
#include <linux/atmapi.h> |
#include <linux/atmioc.h> |
#include <linux/atm.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; |
uint32_t ipaddr; /* the IP address of the shortcut */ |
int type; /* ingress or egress */ |
}; |
typedef struct in_ctrl_info { |
uint8_t Last_NHRP_CIE_code; |
uint8_t Last_Q2931_cause_value; |
uint8_t eg_MPC_ATM_addr[ATM_ESA_LEN]; |
uint32_t tag; |
uint32_t in_dst_ip; /* IP address this ingress MPC sends packets to */ |
uint16_t holding_time; |
uint32_t request_id; |
} in_ctrl_info; |
typedef struct eg_ctrl_info { |
uint8_t DLL_header[256]; |
uint8_t DH_length; |
uint32_t cache_id; |
uint32_t tag; |
uint32_t mps_ip; |
uint32_t eg_dst_ip; /* IP address to which ingress MPC sends packets */ |
uint8_t in_MPC_data_ATM_addr[ATM_ESA_LEN]; |
uint16_t holding_time; |
} eg_ctrl_info; |
struct mpc_parameters { |
uint16_t mpc_p1; /* Shortcut-Setup Frame Count */ |
uint16_t mpc_p2; /* Shortcut-Setup Frame Time */ |
uint8_t mpc_p3[8]; /* Flow-detection Protocols */ |
uint16_t mpc_p4; /* MPC Initial Retry Time */ |
uint16_t mpc_p5; /* MPC Retry Time Maximum */ |
uint16_t mpc_p6; /* Hold Down Time */ |
} ; |
struct k_message { |
uint16_t type; |
uint32_t ip_mask; |
uint8_t 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 */ |
uint8_t dsap; /* Destination Service Access Point (0xAA) */ |
uint8_t ssap; /* Source Service Access Point (0xAA) */ |
uint8_t ui; /* Unnumbered Information (0x03) */ |
uint8_t org[3]; /* Organizational identification (0x000000) */ |
uint8_t 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_ */ |
/shark/trunk/drivers/linuxc26/include/linux/if_plip.h |
---|
0,0 → 1,28 |
/* |
* 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 |
/shark/trunk/drivers/linuxc26/include/linux/ext3_fs_i.h |
---|
0,0 → 1,113 |
/* |
* linux/include/linux/ext3_fs_i.h |
* |
* Copyright (C) 1992, 1993, 1994, 1995 |
* Remy Card (card@masi.ibp.fr) |
* Laboratoire MASI - Institut Blaise Pascal |
* Universite Pierre et Marie Curie (Paris VI) |
* |
* from |
* |
* linux/include/linux/minix_fs_i.h |
* |
* Copyright (C) 1991, 1992 Linus Torvalds |
*/ |
#ifndef _LINUX_EXT3_FS_I |
#define _LINUX_EXT3_FS_I |
#include <linux/rwsem.h> |
/* |
* second extended file system inode data in memory |
*/ |
struct ext3_inode_info { |
__u32 i_data[15]; |
__u32 i_flags; |
#ifdef EXT3_FRAGMENTS |
__u32 i_faddr; |
__u8 i_frag_no; |
__u8 i_frag_size; |
#endif |
__u32 i_file_acl; |
__u32 i_dir_acl; |
__u32 i_dtime; |
/* |
* i_block_group is the number of the block group which contains |
* this file's inode. Constant across the lifetime of the inode, |
* it is ued for making block allocation decisions - we try to |
* place a file's data blocks near its inode block, and new inodes |
* near to their parent directory's inode. |
*/ |
__u32 i_block_group; |
__u32 i_state; /* Dynamic state flags for ext3 */ |
/* |
* i_next_alloc_block is the logical (file-relative) number of the |
* most-recently-allocated block in this file. Yes, it is misnamed. |
* We use this for detecting linearly ascending allocation requests. |
*/ |
__u32 i_next_alloc_block; |
/* |
* i_next_alloc_goal is the *physical* companion to i_next_alloc_block. |
* it the the physical block number of the block which was most-recently |
* allocated to this file. This give us the goal (target) for the next |
* allocation when we detect linearly ascending requests. |
*/ |
__u32 i_next_alloc_goal; |
#ifdef EXT3_PREALLOCATE |
__u32 i_prealloc_block; |
__u32 i_prealloc_count; |
#endif |
__u32 i_dir_start_lookup; |
#ifdef CONFIG_EXT3_FS_XATTR |
/* |
* Extended attributes can be read independently of the main file |
* data. Taking i_sem even when reading would cause contention |
* between readers of EAs and writers of regular file data, so |
* instead we synchronize on xattr_sem when reading or changing |
* EAs. |
*/ |
struct rw_semaphore xattr_sem; |
#endif |
#ifdef CONFIG_EXT3_FS_POSIX_ACL |
struct posix_acl *i_acl; |
struct posix_acl *i_default_acl; |
#endif |
struct list_head i_orphan; /* unlinked but open inodes */ |
/* |
* i_disksize keeps track of what the inode size is ON DISK, not |
* in memory. During truncate, i_size is set to the new size by |
* the VFS prior to calling ext3_truncate(), but the filesystem won't |
* set i_disksize to 0 until the truncate is actually under way. |
* |
* The intent is that i_disksize always represents the blocks which |
* are used by this file. This allows recovery to restart truncate |
* on orphans if we crash during truncate. We actually write i_disksize |
* into the on-disk inode when writing inodes out, instead of i_size. |
* |
* The only time when i_disksize and i_size may be different is when |
* a truncate is in progress. The only things which change i_disksize |
* are ext3_get_block (growth) and ext3_truncate (shrinkth). |
*/ |
loff_t i_disksize; |
/* |
* truncate_sem is for serialising ext3_truncate() against |
* ext3_getblock(). In the 2.4 ext2 design, great chunks of inode's |
* data tree are chopped off during truncate. We can't do that in |
* ext3 because whenever we perform intermediate commits during |
* truncate, the inode and all the metadata blocks *must* be in a |
* consistent state which allows truncation of the orphans to restart |
* during recovery. Hence we must fix the get_block-vs-truncate race |
* by other means, so we have truncate_sem. |
*/ |
struct semaphore truncate_sem; |
struct inode vfs_inode; |
}; |
#endif /* _LINUX_EXT3_FS_I */ |
/shark/trunk/drivers/linuxc26/include/linux/i2c-sensor.h |
---|
0,0 → 1,299 |
/* |
i2c-sensor.h - Part of the i2c package |
was originally sensors.h - Part of lm_sensors, Linux kernel modules |
for hardware monitoring |
Copyright (c) 1998, 1999 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., 675 Mass Ave, Cambridge, MA 02139, USA. |
*/ |
#ifndef _LINUX_I2C_SENSOR_H |
#define _LINUX_I2C_SENSOR_H |
/* A structure containing detect information. |
Force variables overrule all other variables; they force a detection on |
that place. If a specific chip is given, the module blindly assumes this |
chip type is present; if a general force (kind == 0) is given, the module |
will still try to figure out what type of chip is present. This is useful |
if for some reasons the detect for SMBus or ISA address space filled |
fails. |
probe: insmod parameter. Initialize this list with I2C_CLIENT_ISA_END values. |
A list of pairs. The first value is a bus number (ANY_I2C_ISA_BUS for |
the ISA bus, -1 for any I2C bus), the second is the address. |
kind: The kind of chip. 0 equals any chip. |
*/ |
struct i2c_force_data { |
unsigned short *force; |
unsigned short kind; |
}; |
/* A structure containing the detect information. |
normal_i2c: filled in by the module writer. Terminated by I2C_CLIENT_ISA_END. |
A list of I2C addresses which should normally be examined. |
normal_i2c_range: filled in by the module writer. Terminated by |
I2C_CLIENT_ISA_END |
A list of pairs of I2C addresses, each pair being an inclusive range of |
addresses which should normally be examined. |
normal_isa: filled in by the module writer. Terminated by SENSORS_ISA_END. |
A list of ISA addresses which should normally be examined. |
normal_isa_range: filled in by the module writer. Terminated by |
SENSORS_ISA_END |
A list of triples. The first two elements are ISA addresses, being an |
range of addresses which should normally be examined. The third is the |
modulo parameter: only addresses which are 0 module this value relative |
to the first address of the range are actually considered. |
probe: insmod parameter. Initialize this list with I2C_CLIENT_ISA_END values. |
A list of pairs. The first value is a bus number (ANY_I2C_ISA_BUS for |
the ISA bus, -1 for any I2C bus), the second is the address. These |
addresses are also probed, as if they were in the 'normal' list. |
probe_range: insmod parameter. Initialize this list with I2C_CLIENT_ISA_END |
values. |
A list of triples. The first value is a bus number (ANY_I2C_ISA_BUS for |
the ISA bus, -1 for any I2C bus), the second and third are addresses. |
These form an inclusive range of addresses that are also probed, as |
if they were in the 'normal' list. |
ignore: insmod parameter. Initialize this list with I2C_CLIENT_ISA_END values. |
A list of pairs. The first value is a bus number (ANY_I2C_ISA_BUS for |
the ISA bus, -1 for any I2C bus), the second is the I2C address. These |
addresses are never probed. This parameter overrules 'normal' and |
'probe', but not the 'force' lists. |
ignore_range: insmod parameter. Initialize this list with I2C_CLIENT_ISA_END |
values. |
A list of triples. The first value is a bus number (ANY_I2C_ISA_BUS for |
the ISA bus, -1 for any I2C bus), the second and third are addresses. |
These form an inclusive range of I2C addresses that are never probed. |
This parameter overrules 'normal' and 'probe', but not the 'force' lists. |
force_data: insmod parameters. A list, ending with an element of which |
the force field is NULL. |
*/ |
struct i2c_address_data { |
unsigned short *normal_i2c; |
unsigned short *normal_i2c_range; |
unsigned int *normal_isa; |
unsigned int *normal_isa_range; |
unsigned short *probe; |
unsigned short *probe_range; |
unsigned short *ignore; |
unsigned short *ignore_range; |
struct i2c_force_data *forces; |
}; |
#define SENSORS_MODULE_PARM_FORCE(name) \ |
I2C_CLIENT_MODULE_PARM(force_ ## name, \ |
"List of adapter,address pairs which are unquestionably" \ |
" assumed to contain a `" # name "' chip") |
/* This defines several insmod variables, and the addr_data structure */ |
#define SENSORS_INSMOD \ |
I2C_CLIENT_MODULE_PARM(probe, \ |
"List of adapter,address pairs to scan additionally"); \ |
I2C_CLIENT_MODULE_PARM(probe_range, \ |
"List of adapter,start-addr,end-addr triples to scan " \ |
"additionally"); \ |
I2C_CLIENT_MODULE_PARM(ignore, \ |
"List of adapter,address pairs not to scan"); \ |
I2C_CLIENT_MODULE_PARM(ignore_range, \ |
"List of adapter,start-addr,end-addr triples not to " \ |
"scan"); \ |
static struct i2c_address_data addr_data = { \ |
.normal_i2c = normal_i2c, \ |
.normal_i2c_range = normal_i2c_range, \ |
.normal_isa = normal_isa, \ |
.normal_isa_range = normal_isa_range, \ |
.probe = probe, \ |
.probe_range = probe_range, \ |
.ignore = ignore, \ |
.ignore_range = ignore_range, \ |
.forces = forces, \ |
} |
/* The following functions create an enum with the chip names as elements. |
The first element of the enum is any_chip. These are the only macros |
a module will want to use. */ |
#define SENSORS_INSMOD_0 \ |
enum chips { any_chip }; \ |
I2C_CLIENT_MODULE_PARM(force, \ |
"List of adapter,address pairs to boldly assume " \ |
"to be present"); \ |
static struct i2c_force_data forces[] = {{force,any_chip},{NULL}}; \ |
SENSORS_INSMOD |
#define SENSORS_INSMOD_1(chip1) \ |
enum chips { any_chip, chip1 }; \ |
I2C_CLIENT_MODULE_PARM(force, \ |
"List of adapter,address pairs to boldly assume " \ |
"to be present"); \ |
SENSORS_MODULE_PARM_FORCE(chip1); \ |
static struct i2c_force_data forces[] = {{force,any_chip},\ |
{force_ ## chip1,chip1}, \ |
{NULL}}; \ |
SENSORS_INSMOD |
#define SENSORS_INSMOD_2(chip1,chip2) \ |
enum chips { any_chip, chip1, chip2 }; \ |
I2C_CLIENT_MODULE_PARM(force, \ |
"List of adapter,address pairs to boldly assume " \ |
"to be present"); \ |
SENSORS_MODULE_PARM_FORCE(chip1); \ |
SENSORS_MODULE_PARM_FORCE(chip2); \ |
static struct i2c_force_data forces[] = {{force,any_chip}, \ |
{force_ ## chip1,chip1}, \ |
{force_ ## chip2,chip2}, \ |
{NULL}}; \ |
SENSORS_INSMOD |
#define SENSORS_INSMOD_3(chip1,chip2,chip3) \ |
enum chips { any_chip, chip1, chip2, chip3 }; \ |
I2C_CLIENT_MODULE_PARM(force, \ |
"List of adapter,address pairs to boldly assume " \ |
"to be present"); \ |
SENSORS_MODULE_PARM_FORCE(chip1); \ |
SENSORS_MODULE_PARM_FORCE(chip2); \ |
SENSORS_MODULE_PARM_FORCE(chip3); \ |
static struct i2c_force_data forces[] = {{force,any_chip}, \ |
{force_ ## chip1,chip1}, \ |
{force_ ## chip2,chip2}, \ |
{force_ ## chip3,chip3}, \ |
{NULL}}; \ |
SENSORS_INSMOD |
#define SENSORS_INSMOD_4(chip1,chip2,chip3,chip4) \ |
enum chips { any_chip, chip1, chip2, chip3, chip4 }; \ |
I2C_CLIENT_MODULE_PARM(force, \ |
"List of adapter,address pairs to boldly assume " \ |
"to be present"); \ |
SENSORS_MODULE_PARM_FORCE(chip1); \ |
SENSORS_MODULE_PARM_FORCE(chip2); \ |
SENSORS_MODULE_PARM_FORCE(chip3); \ |
SENSORS_MODULE_PARM_FORCE(chip4); \ |
static struct i2c_force_data forces[] = {{force,any_chip}, \ |
{force_ ## chip1,chip1}, \ |
{force_ ## chip2,chip2}, \ |
{force_ ## chip3,chip3}, \ |
{force_ ## chip4,chip4}, \ |
{NULL}}; \ |
SENSORS_INSMOD |
#define SENSORS_INSMOD_5(chip1,chip2,chip3,chip4,chip5) \ |
enum chips { any_chip, chip1, chip2, chip3, chip4, chip5 }; \ |
I2C_CLIENT_MODULE_PARM(force, \ |
"List of adapter,address pairs to boldly assume " \ |
"to be present"); \ |
SENSORS_MODULE_PARM_FORCE(chip1); \ |
SENSORS_MODULE_PARM_FORCE(chip2); \ |
SENSORS_MODULE_PARM_FORCE(chip3); \ |
SENSORS_MODULE_PARM_FORCE(chip4); \ |
SENSORS_MODULE_PARM_FORCE(chip5); \ |
static struct i2c_force_data forces[] = {{force,any_chip}, \ |
{force_ ## chip1,chip1}, \ |
{force_ ## chip2,chip2}, \ |
{force_ ## chip3,chip3}, \ |
{force_ ## chip4,chip4}, \ |
{force_ ## chip5,chip5}, \ |
{NULL}}; \ |
SENSORS_INSMOD |
#define SENSORS_INSMOD_6(chip1,chip2,chip3,chip4,chip5,chip6) \ |
enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6 }; \ |
I2C_CLIENT_MODULE_PARM(force, \ |
"List of adapter,address pairs to boldly assume " \ |
"to be present"); \ |
SENSORS_MODULE_PARM_FORCE(chip1); \ |
SENSORS_MODULE_PARM_FORCE(chip2); \ |
SENSORS_MODULE_PARM_FORCE(chip3); \ |
SENSORS_MODULE_PARM_FORCE(chip4); \ |
SENSORS_MODULE_PARM_FORCE(chip5); \ |
SENSORS_MODULE_PARM_FORCE(chip6); \ |
static struct i2c_force_data forces[] = {{force,any_chip}, \ |
{force_ ## chip1,chip1}, \ |
{force_ ## chip2,chip2}, \ |
{force_ ## chip3,chip3}, \ |
{force_ ## chip4,chip4}, \ |
{force_ ## chip5,chip5}, \ |
{force_ ## chip6,chip6}, \ |
{NULL}}; \ |
SENSORS_INSMOD |
#define SENSORS_INSMOD_7(chip1,chip2,chip3,chip4,chip5,chip6,chip7) \ |
enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, chip7 }; \ |
I2C_CLIENT_MODULE_PARM(force, \ |
"List of adapter,address pairs to boldly assume " \ |
"to be present"); \ |
SENSORS_MODULE_PARM_FORCE(chip1); \ |
SENSORS_MODULE_PARM_FORCE(chip2); \ |
SENSORS_MODULE_PARM_FORCE(chip3); \ |
SENSORS_MODULE_PARM_FORCE(chip4); \ |
SENSORS_MODULE_PARM_FORCE(chip5); \ |
SENSORS_MODULE_PARM_FORCE(chip6); \ |
SENSORS_MODULE_PARM_FORCE(chip7); \ |
static struct i2c_force_data forces[] = {{force,any_chip}, \ |
{force_ ## chip1,chip1}, \ |
{force_ ## chip2,chip2}, \ |
{force_ ## chip3,chip3}, \ |
{force_ ## chip4,chip4}, \ |
{force_ ## chip5,chip5}, \ |
{force_ ## chip6,chip6}, \ |
{force_ ## chip7,chip7}, \ |
{NULL}}; \ |
SENSORS_INSMOD |
#define SENSORS_INSMOD_8(chip1,chip2,chip3,chip4,chip5,chip6,chip7,chip8) \ |
enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, chip7, chip8 }; \ |
I2C_CLIENT_MODULE_PARM(force, \ |
"List of adapter,address pairs to boldly assume " \ |
"to be present"); \ |
SENSORS_MODULE_PARM_FORCE(chip1); \ |
SENSORS_MODULE_PARM_FORCE(chip2); \ |
SENSORS_MODULE_PARM_FORCE(chip3); \ |
SENSORS_MODULE_PARM_FORCE(chip4); \ |
SENSORS_MODULE_PARM_FORCE(chip5); \ |
SENSORS_MODULE_PARM_FORCE(chip6); \ |
SENSORS_MODULE_PARM_FORCE(chip7); \ |
SENSORS_MODULE_PARM_FORCE(chip8); \ |
static struct i2c_force_data forces[] = {{force,any_chip}, \ |
{force_ ## chip1,chip1}, \ |
{force_ ## chip2,chip2}, \ |
{force_ ## chip3,chip3}, \ |
{force_ ## chip4,chip4}, \ |
{force_ ## chip5,chip5}, \ |
{force_ ## chip6,chip6}, \ |
{force_ ## chip7,chip7}, \ |
{force_ ## chip8,chip8}, \ |
{NULL}}; \ |
SENSORS_INSMOD |
/* Detect function. It iterates over all possible addresses itself. For |
SMBus addresses, it will only call found_proc if some client is connected |
to the SMBus (unless a 'force' matched); for ISA detections, this is not |
done. */ |
extern int i2c_detect(struct i2c_adapter *adapter, |
struct i2c_address_data *address_data, |
int (*found_proc) (struct i2c_adapter *, int, int)); |
/* This macro is used to scale user-input to sensible values in almost all |
chip drivers. */ |
static inline int SENSORS_LIMIT(long value, long low, long high) |
{ |
if (value < low) |
return low; |
else if (value > high) |
return high; |
else |
return value; |
} |
#endif /* def _LINUX_I2C_SENSOR_H */ |
/shark/trunk/drivers/linuxc26/include/linux/if_ltalk.h |
---|
0,0 → 1,12 |
#ifndef __LINUX_LTALK_H |
#define __LINUX_LTALK_H |
#define LTALK_HLEN 1 |
#define LTALK_MTU 600 |
#define LTALK_ALEN 1 |
#ifdef __KERNEL__ |
extern void ltalk_setup(struct net_device *); |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/ufs_fs.h |
---|
0,0 → 1,798 |
/* |
* linux/include/linux/ufs_fs.h |
* |
* Copyright (C) 1996 |
* Adrian Rodriguez (adrian@franklins-tower.rutgers.edu) |
* Laboratory for Computer Science Research Computing Facility |
* Rutgers, The State University of New Jersey |
* |
* Clean swab support by Fare <fare@tunes.org> |
* just hope no one is using NNUUXXI on __?64 structure elements |
* 64-bit clean thanks to Maciej W. Rozycki <macro@ds2.pg.gda.pl> |
* |
* 4.4BSD (FreeBSD) support added on February 1st 1998 by |
* Niels Kristian Bech Jensen <nkbj@image.dk> partially based |
* on code by Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>. |
* |
* NeXTstep support added on February 5th 1998 by |
* Niels Kristian Bech Jensen <nkbj@image.dk>. |
* |
* Write support by Daniel Pirkl <daniel.pirkl@email.cz> |
* |
* HP/UX hfs filesystem support added by |
* Martin K. Petersen <mkp@mkp.net>, August 1999 |
* |
*/ |
#ifndef __LINUX_UFS_FS_H |
#define __LINUX_UFS_FS_H |
#include <linux/types.h> |
#include <linux/kernel.h> |
#include <linux/time.h> |
#include <linux/stat.h> |
#include <linux/fs.h> |
#include <linux/ufs_fs_i.h> |
#include <linux/ufs_fs_sb.h> |
#define UFS_BBLOCK 0 |
#define UFS_BBSIZE 8192 |
#define UFS_SBLOCK 8192 |
#define UFS_SBSIZE 8192 |
#define UFS_SECTOR_SIZE 512 |
#define UFS_SECTOR_BITS 9 |
#define UFS_MAGIC 0x00011954 |
#define UFS_CIGAM 0x54190100 /* byteswapped MAGIC */ |
/* HP specific MAGIC values */ |
#define UFS_MAGIC_LFN 0x00095014 /* fs supports filenames > 14 chars */ |
#define UFS_CIGAM_LFN 0x14500900 /* srahc 41 < semanelif stroppus sf */ |
#define UFS_MAGIC_SEC 0x00612195 /* B1 security fs */ |
#define UFS_CIGAM_SEC 0x95216100 |
#define UFS_MAGIC_FEA 0x00195612 /* fs_featurebits supported */ |
#define UFS_CIGAM_FEA 0x12561900 |
#define UFS_MAGIC_4GB 0x05231994 /* fs > 4 GB && fs_featurebits */ |
#define UFS_CIGAM_4GB 0x94192305 |
/* Seems somebody at HP goofed here. B1 and lfs are both 0x2 !?! */ |
#define UFS_FSF_LFN 0x00000001 /* long file names */ |
#define UFS_FSF_B1 0x00000002 /* B1 security */ |
#define UFS_FSF_LFS 0x00000002 /* large files */ |
#define UFS_FSF_LUID 0x00000004 /* large UIDs */ |
/* End of HP stuff */ |
#define UFS_BSIZE 8192 |
#define UFS_MINBSIZE 4096 |
#define UFS_FSIZE 1024 |
#define UFS_MAXFRAG (UFS_BSIZE / UFS_FSIZE) |
#define UFS_NDADDR 12 |
#define UFS_NINDIR 3 |
#define UFS_IND_BLOCK (UFS_NDADDR + 0) |
#define UFS_DIND_BLOCK (UFS_NDADDR + 1) |
#define UFS_TIND_BLOCK (UFS_NDADDR + 2) |
#define UFS_NDIR_FRAGMENT (UFS_NDADDR << uspi->s_fpbshift) |
#define UFS_IND_FRAGMENT (UFS_IND_BLOCK << uspi->s_fpbshift) |
#define UFS_DIND_FRAGMENT (UFS_DIND_BLOCK << uspi->s_fpbshift) |
#define UFS_TIND_FRAGMENT (UFS_TIND_BLOCK << uspi->s_fpbshift) |
#define UFS_ROOTINO 2 |
#define UFS_FIRST_INO (UFS_ROOTINO + 1) |
#define UFS_USEEFT ((__u16)65535) |
#define UFS_FSOK 0x7c269d38 |
#define UFS_FSACTIVE ((char)0x00) |
#define UFS_FSCLEAN ((char)0x01) |
#define UFS_FSSTABLE ((char)0x02) |
#define UFS_FSOSF1 ((char)0x03) /* is this correct for DEC OSF/1? */ |
#define UFS_FSBAD ((char)0xff) |
/* From here to next blank line, s_flags for ufs_sb_info */ |
/* directory entry encoding */ |
#define UFS_DE_MASK 0x00000010 /* mask for the following */ |
#define UFS_DE_OLD 0x00000000 |
#define UFS_DE_44BSD 0x00000010 |
/* uid encoding */ |
#define UFS_UID_MASK 0x00000060 /* mask for the following */ |
#define UFS_UID_OLD 0x00000000 |
#define UFS_UID_44BSD 0x00000020 |
#define UFS_UID_EFT 0x00000040 |
/* superblock state encoding */ |
#define UFS_ST_MASK 0x00000700 /* mask for the following */ |
#define UFS_ST_OLD 0x00000000 |
#define UFS_ST_44BSD 0x00000100 |
#define UFS_ST_SUN 0x00000200 |
#define UFS_ST_SUNx86 0x00000400 |
/*cylinder group encoding */ |
#define UFS_CG_MASK 0x00003000 /* mask for the following */ |
#define UFS_CG_OLD 0x00000000 |
#define UFS_CG_44BSD 0x00002000 |
#define UFS_CG_SUN 0x00001000 |
/* fs_inodefmt options */ |
#define UFS_42INODEFMT -1 |
#define UFS_44INODEFMT 2 |
/* mount options */ |
#define UFS_MOUNT_ONERROR 0x0000000F |
#define UFS_MOUNT_ONERROR_PANIC 0x00000001 |
#define UFS_MOUNT_ONERROR_LOCK 0x00000002 |
#define UFS_MOUNT_ONERROR_UMOUNT 0x00000004 |
#define UFS_MOUNT_ONERROR_REPAIR 0x00000008 |
#define UFS_MOUNT_UFSTYPE 0x00000FF0 |
#define UFS_MOUNT_UFSTYPE_OLD 0x00000010 |
#define UFS_MOUNT_UFSTYPE_44BSD 0x00000020 |
#define UFS_MOUNT_UFSTYPE_SUN 0x00000040 |
#define UFS_MOUNT_UFSTYPE_NEXTSTEP 0x00000080 |
#define UFS_MOUNT_UFSTYPE_NEXTSTEP_CD 0x00000100 |
#define UFS_MOUNT_UFSTYPE_OPENSTEP 0x00000200 |
#define UFS_MOUNT_UFSTYPE_SUNx86 0x00000400 |
#define UFS_MOUNT_UFSTYPE_HP 0x00000800 |
#define ufs_clear_opt(o,opt) o &= ~UFS_MOUNT_##opt |
#define ufs_set_opt(o,opt) o |= UFS_MOUNT_##opt |
#define ufs_test_opt(o,opt) ((o) & UFS_MOUNT_##opt) |
/* |
* MINFREE gives the minimum acceptable percentage of file system |
* blocks which may be free. If the freelist drops below this level |
* only the superuser may continue to allocate blocks. This may |
* be set to 0 if no reserve of free blocks is deemed necessary, |
* however throughput drops by fifty percent if the file system |
* is run at between 95% and 100% full; thus the minimum default |
* value of fs_minfree is 5%. However, to get good clustering |
* performance, 10% is a better choice. hence we use 10% as our |
* default value. With 10% free space, fragmentation is not a |
* problem, so we choose to optimize for time. |
*/ |
#define UFS_MINFREE 5 |
#define UFS_DEFAULTOPT UFS_OPTTIME |
/* |
* Turn file system block numbers into disk block addresses. |
* This maps file system blocks to device size blocks. |
*/ |
#define ufs_fsbtodb(uspi, b) ((b) << (uspi)->s_fsbtodb) |
#define ufs_dbtofsb(uspi, b) ((b) >> (uspi)->s_fsbtodb) |
/* |
* Cylinder group macros to locate things in cylinder groups. |
* They calc file system addresses of cylinder group data structures. |
*/ |
#define ufs_cgbase(c) (uspi->s_fpg * (c)) |
#define ufs_cgstart(c) (ufs_cgbase(c) + uspi->s_cgoffset * ((c) & ~uspi->s_cgmask)) |
#define ufs_cgsblock(c) (ufs_cgstart(c) + uspi->s_sblkno) /* super blk */ |
#define ufs_cgcmin(c) (ufs_cgstart(c) + uspi->s_cblkno) /* cg block */ |
#define ufs_cgimin(c) (ufs_cgstart(c) + uspi->s_iblkno) /* inode blk */ |
#define ufs_cgdmin(c) (ufs_cgstart(c) + uspi->s_dblkno) /* 1st data */ |
/* |
* Macros for handling inode numbers: |
* inode number to file system block offset. |
* inode number to cylinder group number. |
* inode number to file system block address. |
*/ |
#define ufs_inotocg(x) ((x) / uspi->s_ipg) |
#define ufs_inotocgoff(x) ((x) % uspi->s_ipg) |
#define ufs_inotofsba(x) (ufs_cgimin(ufs_inotocg(x)) + ufs_inotocgoff(x) / uspi->s_inopf) |
#define ufs_inotofsbo(x) ((x) % uspi->s_inopf) |
/* |
* Give cylinder group number for a file system block. |
* Give cylinder group block number for a file system block. |
*/ |
#define ufs_dtog(d) ((d) / uspi->s_fpg) |
#define ufs_dtogd(d) ((d) % uspi->s_fpg) |
/* |
* Compute the cylinder and rotational position of a cyl block addr. |
*/ |
#define ufs_cbtocylno(bno) \ |
((bno) * uspi->s_nspf / uspi->s_spc) |
#define ufs_cbtorpos(bno) \ |
((((bno) * uspi->s_nspf % uspi->s_spc / uspi->s_nsect \ |
* uspi->s_trackskew + (bno) * uspi->s_nspf % uspi->s_spc \ |
% uspi->s_nsect * uspi->s_interleave) % uspi->s_nsect \ |
* uspi->s_nrpos) / uspi->s_npsect) |
/* |
* The following macros optimize certain frequently calculated |
* quantities by using shifts and masks in place of divisions |
* modulos and multiplications. |
*/ |
#define ufs_blkoff(loc) ((loc) & uspi->s_qbmask) |
#define ufs_fragoff(loc) ((loc) & uspi->s_qfmask) |
#define ufs_lblktosize(blk) ((blk) << uspi->s_bshift) |
#define ufs_lblkno(loc) ((loc) >> uspi->s_bshift) |
#define ufs_numfrags(loc) ((loc) >> uspi->s_fshift) |
#define ufs_blkroundup(size) (((size) + uspi->s_qbmask) & uspi->s_bmask) |
#define ufs_fragroundup(size) (((size) + uspi->s_qfmask) & uspi->s_fmask) |
#define ufs_fragstoblks(frags) ((frags) >> uspi->s_fpbshift) |
#define ufs_blkstofrags(blks) ((blks) << uspi->s_fpbshift) |
#define ufs_fragnum(fsb) ((fsb) & uspi->s_fpbmask) |
#define ufs_blknum(fsb) ((fsb) & ~uspi->s_fpbmask) |
#define UFS_MAXNAMLEN 255 |
#define UFS_MAXMNTLEN 512 |
/* #define UFS_MAXCSBUFS 31 */ |
#define UFS_LINK_MAX 32000 |
/* |
* UFS_DIR_PAD defines the directory entries boundaries |
* (must be a multiple of 4) |
*/ |
#define UFS_DIR_PAD 4 |
#define UFS_DIR_ROUND (UFS_DIR_PAD - 1) |
#define UFS_DIR_REC_LEN(name_len) (((name_len) + 1 + 8 + UFS_DIR_ROUND) & ~UFS_DIR_ROUND) |
struct ufs_timeval { |
__s32 tv_sec; |
__s32 tv_usec; |
}; |
struct ufs_dir_entry { |
__u32 d_ino; /* inode number of this entry */ |
__u16 d_reclen; /* length of this entry */ |
union { |
__u16 d_namlen; /* actual length of d_name */ |
struct { |
__u8 d_type; /* file type */ |
__u8 d_namlen; /* length of string in d_name */ |
} d_44; |
} d_u; |
__u8 d_name[UFS_MAXNAMLEN + 1]; /* file name */ |
}; |
struct ufs_csum { |
__u32 cs_ndir; /* number of directories */ |
__u32 cs_nbfree; /* number of free blocks */ |
__u32 cs_nifree; /* number of free inodes */ |
__u32 cs_nffree; /* number of free frags */ |
}; |
/* |
* This is the actual superblock, as it is laid out on the disk. |
*/ |
struct ufs_super_block { |
__u32 fs_link; /* UNUSED */ |
__u32 fs_rlink; /* UNUSED */ |
__u32 fs_sblkno; /* addr of super-block in filesys */ |
__u32 fs_cblkno; /* offset of cyl-block in filesys */ |
__u32 fs_iblkno; /* offset of inode-blocks in filesys */ |
__u32 fs_dblkno; /* offset of first data after cg */ |
__u32 fs_cgoffset; /* cylinder group offset in cylinder */ |
__u32 fs_cgmask; /* used to calc mod fs_ntrak */ |
__u32 fs_time; /* last time written -- time_t */ |
__u32 fs_size; /* number of blocks in fs */ |
__u32 fs_dsize; /* number of data blocks in fs */ |
__u32 fs_ncg; /* number of cylinder groups */ |
__u32 fs_bsize; /* size of basic blocks in fs */ |
__u32 fs_fsize; /* size of frag blocks in fs */ |
__u32 fs_frag; /* number of frags in a block in fs */ |
/* these are configuration parameters */ |
__u32 fs_minfree; /* minimum percentage of free blocks */ |
__u32 fs_rotdelay; /* num of ms for optimal next block */ |
__u32 fs_rps; /* disk revolutions per second */ |
/* these fields can be computed from the others */ |
__u32 fs_bmask; /* ``blkoff'' calc of blk offsets */ |
__u32 fs_fmask; /* ``fragoff'' calc of frag offsets */ |
__u32 fs_bshift; /* ``lblkno'' calc of logical blkno */ |
__u32 fs_fshift; /* ``numfrags'' calc number of frags */ |
/* these are configuration parameters */ |
__u32 fs_maxcontig; /* max number of contiguous blks */ |
__u32 fs_maxbpg; /* max number of blks per cyl group */ |
/* these fields can be computed from the others */ |
__u32 fs_fragshift; /* block to frag shift */ |
__u32 fs_fsbtodb; /* fsbtodb and dbtofsb shift constant */ |
__u32 fs_sbsize; /* actual size of super block */ |
__u32 fs_csmask; /* csum block offset */ |
__u32 fs_csshift; /* csum block number */ |
__u32 fs_nindir; /* value of NINDIR */ |
__u32 fs_inopb; /* value of INOPB */ |
__u32 fs_nspf; /* value of NSPF */ |
/* yet another configuration parameter */ |
__u32 fs_optim; /* optimization preference, see below */ |
/* these fields are derived from the hardware */ |
union { |
struct { |
__u32 fs_npsect; /* # sectors/track including spares */ |
} fs_sun; |
struct { |
__s32 fs_state; /* file system state time stamp */ |
} fs_sunx86; |
} fs_u1; |
__u32 fs_interleave; /* hardware sector interleave */ |
__u32 fs_trackskew; /* sector 0 skew, per track */ |
/* a unique id for this filesystem (currently unused and unmaintained) */ |
/* In 4.3 Tahoe this space is used by fs_headswitch and fs_trkseek */ |
/* Neither of those fields is used in the Tahoe code right now but */ |
/* there could be problems if they are. */ |
__u32 fs_id[2]; /* file system id */ |
/* sizes determined by number of cylinder groups and their sizes */ |
__u32 fs_csaddr; /* blk addr of cyl grp summary area */ |
__u32 fs_cssize; /* size of cyl grp summary area */ |
__u32 fs_cgsize; /* cylinder group size */ |
/* these fields are derived from the hardware */ |
__u32 fs_ntrak; /* tracks per cylinder */ |
__u32 fs_nsect; /* sectors per track */ |
__u32 fs_spc; /* sectors per cylinder */ |
/* this comes from the disk driver partitioning */ |
__u32 fs_ncyl; /* cylinders in file system */ |
/* these fields can be computed from the others */ |
__u32 fs_cpg; /* cylinders per group */ |
__u32 fs_ipg; /* inodes per group */ |
__u32 fs_fpg; /* blocks per group * fs_frag */ |
/* this data must be re-computed after crashes */ |
struct ufs_csum fs_cstotal; /* cylinder summary information */ |
/* these fields are cleared at mount time */ |
__s8 fs_fmod; /* super block modified flag */ |
__s8 fs_clean; /* file system is clean flag */ |
__s8 fs_ronly; /* mounted read-only flag */ |
__s8 fs_flags; /* currently unused flag */ |
__s8 fs_fsmnt[UFS_MAXMNTLEN]; /* name mounted on */ |
/* these fields retain the current block allocation info */ |
__u32 fs_cgrotor; /* last cg searched */ |
__u32 fs_csp[UFS_MAXCSBUFS]; /* list of fs_cs info buffers */ |
__u32 fs_maxcluster; |
__u32 fs_cpc; /* cyl per cycle in postbl */ |
__u16 fs_opostbl[16][8]; /* old rotation block list head */ |
union { |
struct { |
__s32 fs_sparecon[53];/* reserved for future constants */ |
__s32 fs_reclaim; |
__s32 fs_sparecon2[1]; |
__s32 fs_state; /* file system state time stamp */ |
__u32 fs_qbmask[2]; /* ~usb_bmask */ |
__u32 fs_qfmask[2]; /* ~usb_fmask */ |
} fs_sun; |
struct { |
__s32 fs_sparecon[53];/* reserved for future constants */ |
__s32 fs_reclaim; |
__s32 fs_sparecon2[1]; |
__u32 fs_npsect; /* # sectors/track including spares */ |
__u32 fs_qbmask[2]; /* ~usb_bmask */ |
__u32 fs_qfmask[2]; /* ~usb_fmask */ |
} fs_sunx86; |
struct { |
__s32 fs_sparecon[50];/* reserved for future constants */ |
__s32 fs_contigsumsize;/* size of cluster summary array */ |
__s32 fs_maxsymlinklen;/* max length of an internal symlink */ |
__s32 fs_inodefmt; /* format of on-disk inodes */ |
__u32 fs_maxfilesize[2]; /* max representable file size */ |
__u32 fs_qbmask[2]; /* ~usb_bmask */ |
__u32 fs_qfmask[2]; /* ~usb_fmask */ |
__s32 fs_state; /* file system state time stamp */ |
} fs_44; |
} fs_u2; |
__s32 fs_postblformat; /* format of positional layout tables */ |
__s32 fs_nrpos; /* number of rotational positions */ |
__s32 fs_postbloff; /* (__s16) rotation block list head */ |
__s32 fs_rotbloff; /* (__u8) blocks for each rotation */ |
__s32 fs_magic; /* magic number */ |
__u8 fs_space[1]; /* list of blocks for each rotation */ |
}; |
/* |
* Preference for optimization. |
*/ |
#define UFS_OPTTIME 0 /* minimize allocation time */ |
#define UFS_OPTSPACE 1 /* minimize disk fragmentation */ |
/* |
* Rotational layout table format types |
*/ |
#define UFS_42POSTBLFMT -1 /* 4.2BSD rotational table format */ |
#define UFS_DYNAMICPOSTBLFMT 1 /* dynamic rotational table format */ |
/* |
* Convert cylinder group to base address of its global summary info. |
*/ |
#define fs_cs(indx) \ |
s_csp[(indx) >> uspi->s_csshift][(indx) & ~uspi->s_csmask] |
/* |
* Cylinder group block for a file system. |
* |
* Writable fields in the cylinder group are protected by the associated |
* super block lock fs->fs_lock. |
*/ |
#define CG_MAGIC 0x090255 |
#define ufs_cg_chkmagic(sb, ucg) \ |
(fs32_to_cpu((sb), (ucg)->cg_magic) == CG_MAGIC) |
/* |
* size of this structure is 172 B |
*/ |
struct ufs_cylinder_group { |
__u32 cg_link; /* linked list of cyl groups */ |
__u32 cg_magic; /* magic number */ |
__u32 cg_time; /* time last written */ |
__u32 cg_cgx; /* we are the cgx'th cylinder group */ |
__u16 cg_ncyl; /* number of cyl's this cg */ |
__u16 cg_niblk; /* number of inode blocks this cg */ |
__u32 cg_ndblk; /* number of data blocks this cg */ |
struct ufs_csum cg_cs; /* cylinder summary information */ |
__u32 cg_rotor; /* position of last used block */ |
__u32 cg_frotor; /* position of last used frag */ |
__u32 cg_irotor; /* position of last used inode */ |
__u32 cg_frsum[UFS_MAXFRAG]; /* counts of available frags */ |
__u32 cg_btotoff; /* (__u32) block totals per cylinder */ |
__u32 cg_boff; /* (short) free block positions */ |
__u32 cg_iusedoff; /* (char) used inode map */ |
__u32 cg_freeoff; /* (u_char) free block map */ |
__u32 cg_nextfreeoff; /* (u_char) next available space */ |
union { |
struct { |
__u32 cg_clustersumoff; /* (u_int32) counts of avail clusters */ |
__u32 cg_clusteroff; /* (u_int8) free cluster map */ |
__u32 cg_nclusterblks; /* number of clusters this cg */ |
__u32 cg_sparecon[13]; /* reserved for future use */ |
} cg_44; |
__u32 cg_sparecon[16]; /* reserved for future use */ |
} cg_u; |
__u8 cg_space[1]; /* space for cylinder group maps */ |
/* actually longer */ |
}; |
/* |
* structure of an on-disk inode |
*/ |
struct ufs_inode { |
__u16 ui_mode; /* 0x0 */ |
__u16 ui_nlink; /* 0x2 */ |
union { |
struct { |
__u16 ui_suid; /* 0x4 */ |
__u16 ui_sgid; /* 0x6 */ |
} oldids; |
__u32 ui_inumber; /* 0x4 lsf: inode number */ |
__u32 ui_author; /* 0x4 GNU HURD: author */ |
} ui_u1; |
__u64 ui_size; /* 0x8 */ |
struct ufs_timeval ui_atime; /* 0x10 access */ |
struct ufs_timeval ui_mtime; /* 0x18 modification */ |
struct ufs_timeval ui_ctime; /* 0x20 creation */ |
union { |
struct { |
__u32 ui_db[UFS_NDADDR];/* 0x28 data blocks */ |
__u32 ui_ib[UFS_NINDIR];/* 0x58 indirect blocks */ |
} ui_addr; |
__u8 ui_symlink[4*(UFS_NDADDR+UFS_NINDIR)];/* 0x28 fast symlink */ |
} ui_u2; |
__u32 ui_flags; /* 0x64 immutable, append-only... */ |
__u32 ui_blocks; /* 0x68 blocks in use */ |
__u32 ui_gen; /* 0x6c like ext2 i_version, for NFS support */ |
union { |
struct { |
__u32 ui_shadow; /* 0x70 shadow inode with security data */ |
__u32 ui_uid; /* 0x74 long EFT version of uid */ |
__u32 ui_gid; /* 0x78 long EFT version of gid */ |
__u32 ui_oeftflag; /* 0x7c reserved */ |
} ui_sun; |
struct { |
__u32 ui_uid; /* 0x70 File owner */ |
__u32 ui_gid; /* 0x74 File group */ |
__s32 ui_spare[2]; /* 0x78 reserved */ |
} ui_44; |
struct { |
__u32 ui_uid; /* 0x70 */ |
__u32 ui_gid; /* 0x74 */ |
__u16 ui_modeh; /* 0x78 mode high bits */ |
__u16 ui_spare; /* 0x7A unused */ |
__u32 ui_trans; /* 0x7c filesystem translator */ |
} ui_hurd; |
} ui_u3; |
}; |
/* FreeBSD has these in sys/stat.h */ |
/* ui_flags that can be set by a file owner */ |
#define UFS_UF_SETTABLE 0x0000ffff |
#define UFS_UF_NODUMP 0x00000001 /* do not dump */ |
#define UFS_UF_IMMUTABLE 0x00000002 /* immutable (can't "change") */ |
#define UFS_UF_APPEND 0x00000004 /* append-only */ |
#define UFS_UF_OPAQUE 0x00000008 /* directory is opaque (unionfs) */ |
#define UFS_UF_NOUNLINK 0x00000010 /* can't be removed or renamed */ |
/* ui_flags that only root can set */ |
#define UFS_SF_SETTABLE 0xffff0000 |
#define UFS_SF_ARCHIVED 0x00010000 /* archived */ |
#define UFS_SF_IMMUTABLE 0x00020000 /* immutable (can't "change") */ |
#define UFS_SF_APPEND 0x00040000 /* append-only */ |
#define UFS_SF_NOUNLINK 0x00100000 /* can't be removed or renamed */ |
/* |
* This structure is used for reading disk structures larger |
* than the size of fragment. |
*/ |
struct ufs_buffer_head { |
unsigned fragment; /* first fragment */ |
unsigned count; /* number of fragments */ |
struct buffer_head * bh[UFS_MAXFRAG]; /* buffers */ |
}; |
struct ufs_cg_private_info { |
struct ufs_cylinder_group ucg; |
__u32 c_cgx; /* number of cylidner group */ |
__u16 c_ncyl; /* number of cyl's this cg */ |
__u16 c_niblk; /* number of inode blocks this cg */ |
__u32 c_ndblk; /* number of data blocks this cg */ |
__u32 c_rotor; /* position of last used block */ |
__u32 c_frotor; /* position of last used frag */ |
__u32 c_irotor; /* position of last used inode */ |
__u32 c_btotoff; /* (__u32) block totals per cylinder */ |
__u32 c_boff; /* (short) free block positions */ |
__u32 c_iusedoff; /* (char) used inode map */ |
__u32 c_freeoff; /* (u_char) free block map */ |
__u32 c_nextfreeoff; /* (u_char) next available space */ |
__u32 c_clustersumoff;/* (u_int32) counts of avail clusters */ |
__u32 c_clusteroff; /* (u_int8) free cluster map */ |
__u32 c_nclusterblks; /* number of clusters this cg */ |
}; |
struct ufs_sb_private_info { |
struct ufs_buffer_head s_ubh; /* buffer containing super block */ |
__u32 s_sblkno; /* offset of super-blocks in filesys */ |
__u32 s_cblkno; /* offset of cg-block in filesys */ |
__u32 s_iblkno; /* offset of inode-blocks in filesys */ |
__u32 s_dblkno; /* offset of first data after cg */ |
__u32 s_cgoffset; /* cylinder group offset in cylinder */ |
__u32 s_cgmask; /* used to calc mod fs_ntrak */ |
__u32 s_size; /* number of blocks (fragments) in fs */ |
__u32 s_dsize; /* number of data blocks in fs */ |
__u32 s_ncg; /* number of cylinder groups */ |
__u32 s_bsize; /* size of basic blocks */ |
__u32 s_fsize; /* size of fragments */ |
__u32 s_fpb; /* fragments per block */ |
__u32 s_minfree; /* minimum percentage of free blocks */ |
__u32 s_bmask; /* `blkoff'' calc of blk offsets */ |
__u32 s_fmask; /* s_fsize mask */ |
__u32 s_bshift; /* `lblkno'' calc of logical blkno */ |
__u32 s_fshift; /* s_fsize shift */ |
__u32 s_fpbshift; /* fragments per block shift */ |
__u32 s_fsbtodb; /* fsbtodb and dbtofsb shift constant */ |
__u32 s_sbsize; /* actual size of super block */ |
__u32 s_csmask; /* csum block offset */ |
__u32 s_csshift; /* csum block number */ |
__u32 s_nindir; /* value of NINDIR */ |
__u32 s_inopb; /* value of INOPB */ |
__u32 s_nspf; /* value of NSPF */ |
__u32 s_npsect; /* # sectors/track including spares */ |
__u32 s_interleave; /* hardware sector interleave */ |
__u32 s_trackskew; /* sector 0 skew, per track */ |
__u32 s_csaddr; /* blk addr of cyl grp summary area */ |
__u32 s_cssize; /* size of cyl grp summary area */ |
__u32 s_cgsize; /* cylinder group size */ |
__u32 s_ntrak; /* tracks per cylinder */ |
__u32 s_nsect; /* sectors per track */ |
__u32 s_spc; /* sectors per cylinder */ |
__u32 s_ipg; /* inodes per group */ |
__u32 s_fpg; /* fragments per group */ |
__u32 s_cpc; /* cyl per cycle in postbl */ |
__s32 s_contigsumsize;/* size of cluster summary array, 44bsd */ |
__s64 s_qbmask; /* ~usb_bmask */ |
__s64 s_qfmask; /* ~usb_fmask */ |
__s32 s_postblformat; /* format of positional layout tables */ |
__s32 s_nrpos; /* number of rotational positions */ |
__s32 s_postbloff; /* (__s16) rotation block list head */ |
__s32 s_rotbloff; /* (__u8) blocks for each rotation */ |
__u32 s_fpbmask; /* fragments per block mask */ |
__u32 s_apb; /* address per block */ |
__u32 s_2apb; /* address per block^2 */ |
__u32 s_3apb; /* address per block^3 */ |
__u32 s_apbmask; /* address per block mask */ |
__u32 s_apbshift; /* address per block shift */ |
__u32 s_2apbshift; /* address per block shift * 2 */ |
__u32 s_3apbshift; /* address per block shift * 3 */ |
__u32 s_nspfshift; /* number of sector per fragment shift */ |
__u32 s_nspb; /* number of sector per block */ |
__u32 s_inopf; /* inodes per fragment */ |
__u32 s_sbbase; /* offset of NeXTstep superblock */ |
__u32 s_bpf; /* bits per fragment */ |
__u32 s_bpfshift; /* bits per fragment shift*/ |
__u32 s_bpfmask; /* bits per fragment mask */ |
__u32 s_maxsymlinklen;/* upper limit on fast symlinks' size */ |
}; |
/* |
* Sizes of this structures are: |
* ufs_super_block_first 512 |
* ufs_super_block_second 512 |
* ufs_super_block_third 356 |
*/ |
struct ufs_super_block_first { |
__u32 fs_link; |
__u32 fs_rlink; |
__u32 fs_sblkno; |
__u32 fs_cblkno; |
__u32 fs_iblkno; |
__u32 fs_dblkno; |
__u32 fs_cgoffset; |
__u32 fs_cgmask; |
__u32 fs_time; |
__u32 fs_size; |
__u32 fs_dsize; |
__u32 fs_ncg; |
__u32 fs_bsize; |
__u32 fs_fsize; |
__u32 fs_frag; |
__u32 fs_minfree; |
__u32 fs_rotdelay; |
__u32 fs_rps; |
__u32 fs_bmask; |
__u32 fs_fmask; |
__u32 fs_bshift; |
__u32 fs_fshift; |
__u32 fs_maxcontig; |
__u32 fs_maxbpg; |
__u32 fs_fragshift; |
__u32 fs_fsbtodb; |
__u32 fs_sbsize; |
__u32 fs_csmask; |
__u32 fs_csshift; |
__u32 fs_nindir; |
__u32 fs_inopb; |
__u32 fs_nspf; |
__u32 fs_optim; |
union { |
struct { |
__u32 fs_npsect; |
} fs_sun; |
struct { |
__s32 fs_state; |
} fs_sunx86; |
} fs_u1; |
__u32 fs_interleave; |
__u32 fs_trackskew; |
__u32 fs_id[2]; |
__u32 fs_csaddr; |
__u32 fs_cssize; |
__u32 fs_cgsize; |
__u32 fs_ntrak; |
__u32 fs_nsect; |
__u32 fs_spc; |
__u32 fs_ncyl; |
__u32 fs_cpg; |
__u32 fs_ipg; |
__u32 fs_fpg; |
struct ufs_csum fs_cstotal; |
__s8 fs_fmod; |
__s8 fs_clean; |
__s8 fs_ronly; |
__s8 fs_flags; |
__s8 fs_fsmnt[UFS_MAXMNTLEN - 212]; |
}; |
struct ufs_super_block_second { |
__s8 fs_fsmnt[212]; |
__u32 fs_cgrotor; |
__u32 fs_csp[UFS_MAXCSBUFS]; |
__u32 fs_maxcluster; |
__u32 fs_cpc; |
__u16 fs_opostbl[82]; |
}; |
struct ufs_super_block_third { |
__u16 fs_opostbl[46]; |
union { |
struct { |
__s32 fs_sparecon[53];/* reserved for future constants */ |
__s32 fs_reclaim; |
__s32 fs_sparecon2[1]; |
__s32 fs_state; /* file system state time stamp */ |
__u32 fs_qbmask[2]; /* ~usb_bmask */ |
__u32 fs_qfmask[2]; /* ~usb_fmask */ |
} fs_sun; |
struct { |
__s32 fs_sparecon[53];/* reserved for future constants */ |
__s32 fs_reclaim; |
__s32 fs_sparecon2[1]; |
__u32 fs_npsect; /* # sectors/track including spares */ |
__u32 fs_qbmask[2]; /* ~usb_bmask */ |
__u32 fs_qfmask[2]; /* ~usb_fmask */ |
} fs_sunx86; |
struct { |
__s32 fs_sparecon[50];/* reserved for future constants */ |
__s32 fs_contigsumsize;/* size of cluster summary array */ |
__s32 fs_maxsymlinklen;/* max length of an internal symlink */ |
__s32 fs_inodefmt; /* format of on-disk inodes */ |
__u32 fs_maxfilesize[2]; /* max representable file size */ |
__u32 fs_qbmask[2]; /* ~usb_bmask */ |
__u32 fs_qfmask[2]; /* ~usb_fmask */ |
__s32 fs_state; /* file system state time stamp */ |
} fs_44; |
} fs_u2; |
__s32 fs_postblformat; |
__s32 fs_nrpos; |
__s32 fs_postbloff; |
__s32 fs_rotbloff; |
__s32 fs_magic; |
__u8 fs_space[1]; |
}; |
#ifdef __KERNEL__ |
/* balloc.c */ |
extern void ufs_free_fragments (struct inode *, unsigned, unsigned); |
extern void ufs_free_blocks (struct inode *, unsigned, unsigned); |
extern unsigned ufs_new_fragments (struct inode *, u32 *, unsigned, unsigned, unsigned, int *); |
/* cylinder.c */ |
extern struct ufs_cg_private_info * ufs_load_cylinder (struct super_block *, unsigned); |
extern void ufs_put_cylinder (struct super_block *, unsigned); |
/* dir.c */ |
extern struct inode_operations ufs_dir_inode_operations; |
extern int ufs_check_dir_entry (const char *, struct inode *, struct ufs_dir_entry *, struct buffer_head *, unsigned long); |
extern int ufs_add_link (struct dentry *, struct inode *); |
extern ino_t ufs_inode_by_name(struct inode *, struct dentry *); |
extern int ufs_make_empty(struct inode *, struct inode *); |
extern struct ufs_dir_entry * ufs_find_entry (struct dentry *, struct buffer_head **); |
extern int ufs_delete_entry (struct inode *, struct ufs_dir_entry *, struct buffer_head *); |
extern int ufs_empty_dir (struct inode *); |
extern struct ufs_dir_entry * ufs_dotdot (struct inode *, struct buffer_head **); |
extern void ufs_set_link(struct inode *, struct ufs_dir_entry *, struct buffer_head *, struct inode *); |
/* file.c */ |
extern struct inode_operations ufs_file_inode_operations; |
extern struct file_operations ufs_file_operations; |
extern struct address_space_operations ufs_aops; |
/* ialloc.c */ |
extern void ufs_free_inode (struct inode *inode); |
extern struct inode * ufs_new_inode (struct inode *, int); |
/* inode.c */ |
extern int ufs_frag_map (struct inode *, int); |
extern void ufs_read_inode (struct inode *); |
extern void ufs_put_inode (struct inode *); |
extern void ufs_write_inode (struct inode *, int); |
extern int ufs_sync_inode (struct inode *); |
extern void ufs_delete_inode (struct inode *); |
extern struct buffer_head * ufs_getfrag (struct inode *, unsigned, int, int *); |
extern struct buffer_head * ufs_bread (struct inode *, unsigned, int, int *); |
/* namei.c */ |
extern struct file_operations ufs_dir_operations; |
/* super.c */ |
extern struct file_system_type ufs_fs_type; |
extern void ufs_warning (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4))); |
extern void ufs_error (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4))); |
extern void ufs_panic (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4))); |
extern void ufs_write_super (struct super_block *); |
/* symlink.c */ |
extern struct inode_operations ufs_fast_symlink_inode_operations; |
/* truncate.c */ |
extern void ufs_truncate (struct inode *); |
static inline struct ufs_sb_info *UFS_SB(struct super_block *sb) |
{ |
return sb->s_fs_info; |
} |
static inline struct ufs_inode_info *UFS_I(struct inode *inode) |
{ |
return container_of(inode, struct ufs_inode_info, vfs_inode); |
} |
#endif /* __KERNEL__ */ |
#endif /* __LINUX_UFS_FS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/stallion.h |
---|
0,0 → 1,159 |
/*****************************************************************************/ |
/* |
* stallion.h -- stallion multiport serial driver. |
* |
* Copyright (C) 1996-1998 Stallion Technologies (support@stallion.oz.au). |
* Copyright (C) 1994-1996 Greg Ungerer. |
* |
* 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. |
*/ |
#include <linux/version.h> |
/*****************************************************************************/ |
#ifndef _STALLION_H |
#define _STALLION_H |
/*****************************************************************************/ |
/* |
* Define important driver constants here. |
*/ |
#define STL_MAXBRDS 4 |
#define STL_MAXPANELS 4 |
#define STL_MAXBANKS 8 |
#define STL_PORTSPERPANEL 16 |
#define STL_MAXPORTS 64 |
#define STL_MAXDEVS (STL_MAXBRDS * STL_MAXPORTS) |
/* |
* Define a set of structures to hold all the board/panel/port info |
* for our ports. These will be dynamically allocated as required. |
*/ |
/* |
* Define a ring queue structure for each port. This will hold the |
* TX data waiting to be output. Characters are fed into this buffer |
* from the line discipline (or even direct from user space!) and |
* then fed into the UARTs during interrupts. Will use a classic ring |
* queue here for this. The good thing about this type of ring queue |
* is that the head and tail pointers can be updated without interrupt |
* protection - since "write" code only needs to change the head, and |
* interrupt code only needs to change the tail. |
*/ |
typedef struct { |
char *buf; |
char *head; |
char *tail; |
} stlrq_t; |
/* |
* Port, panel and board structures to hold status info about each. |
* The board structure contains pointers to structures for each panel |
* connected to it, and in turn each panel structure contains pointers |
* for each port structure for each port on that panel. Note that |
* the port structure also contains the board and panel number that it |
* is associated with, this makes it (fairly) easy to get back to the |
* board/panel info for a port. |
*/ |
typedef struct stlport { |
unsigned long magic; |
int portnr; |
int panelnr; |
int brdnr; |
int ioaddr; |
int uartaddr; |
int pagenr; |
long istate; |
int flags; |
int baud_base; |
int custom_divisor; |
int close_delay; |
int closing_wait; |
int refcount; |
int openwaitcnt; |
int brklen; |
unsigned int sigs; |
unsigned int rxignoremsk; |
unsigned int rxmarkmsk; |
unsigned int imr; |
unsigned int crenable; |
unsigned long clk; |
unsigned long hwid; |
void *uartp; |
struct tty_struct *tty; |
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)) |
struct wait_queue *open_wait; |
struct wait_queue *close_wait; |
#else |
wait_queue_head_t open_wait; |
wait_queue_head_t close_wait; |
#endif |
struct work_struct tqueue; |
comstats_t stats; |
stlrq_t tx; |
} stlport_t; |
typedef struct stlpanel { |
unsigned long magic; |
int panelnr; |
int brdnr; |
int pagenr; |
int nrports; |
int iobase; |
void *uartp; |
void (*isr)(struct stlpanel *panelp, unsigned int iobase); |
unsigned int hwid; |
unsigned int ackmask; |
stlport_t *ports[STL_PORTSPERPANEL]; |
} stlpanel_t; |
typedef struct stlbrd { |
unsigned long magic; |
int brdnr; |
int brdtype; |
int state; |
int nrpanels; |
int nrports; |
int nrbnks; |
int irq; |
int irqtype; |
void (*isr)(struct stlbrd *brdp); |
unsigned int ioaddr1; |
unsigned int ioaddr2; |
unsigned int iosize1; |
unsigned int iosize2; |
unsigned int iostatus; |
unsigned int ioctrl; |
unsigned int ioctrlval; |
unsigned int hwid; |
unsigned long clk; |
unsigned int bnkpageaddr[STL_MAXBANKS]; |
unsigned int bnkstataddr[STL_MAXBANKS]; |
stlpanel_t *bnk2panel[STL_MAXBANKS]; |
stlpanel_t *panels[STL_MAXPANELS]; |
} stlbrd_t; |
/* |
* Define MAGIC numbers used for above structures. |
*/ |
#define STL_PORTMAGIC 0x5a7182c9 |
#define STL_PANELMAGIC 0x7ef621a1 |
#define STL_BOARDMAGIC 0xa2267f52 |
/*****************************************************************************/ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/a.out.h |
---|
0,0 → 1,268 |
#ifndef __A_OUT_GNU_H__ |
#define __A_OUT_GNU_H__ |
#define __GNU_EXEC_MACROS__ |
#ifndef __STRUCT_EXEC_OVERRIDE__ |
#include <asm/a.out.h> |
#endif /* __STRUCT_EXEC_OVERRIDE__ */ |
/* 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 |
#include <asm/page.h> |
#if defined(__i386__) || defined(__mc68000__) |
#define SEGMENT_SIZE 1024 |
#else |
#ifndef SEGMENT_SIZE |
#define SEGMENT_SIZE PAGE_SIZE |
#endif |
#endif |
#endif |
#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1)) |
#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 /* __A_OUT_GNU_H__ */ |
/shark/trunk/drivers/linuxc26/include/linux/hpfs_fs.h |
---|
0,0 → 1,8 |
#ifndef _LINUX_HPFS_FS_H |
#define _LINUX_HPFS_FS_H |
/* HPFS magic number (word 0 of block 16) */ |
#define HPFS_SUPER_MAGIC 0xf995e849 |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/quotaio_v2.h |
---|
0,0 → 1,79 |
/* |
* Definitions of structures for vfsv0 quota format |
*/ |
#ifndef _LINUX_QUOTAIO_V2_H |
#define _LINUX_QUOTAIO_V2_H |
#include <linux/types.h> |
#include <linux/quota.h> |
/* |
* Definitions of magics and versions of current quota files |
*/ |
#define V2_INITQMAGICS {\ |
0xd9c01f11, /* USRQUOTA */\ |
0xd9c01927 /* GRPQUOTA */\ |
} |
#define V2_INITQVERSIONS {\ |
0, /* USRQUOTA */\ |
0 /* GRPQUOTA */\ |
} |
/* |
* The following structure defines the format of the disk quota file |
* (as it appears on disk) - the file is a radix tree whose leaves point |
* to blocks of these structures. |
*/ |
struct v2_disk_dqblk { |
__u32 dqb_id; /* id this quota applies to */ |
__u32 dqb_ihardlimit; /* absolute limit on allocated inodes */ |
__u32 dqb_isoftlimit; /* preferred inode limit */ |
__u32 dqb_curinodes; /* current # allocated inodes */ |
__u32 dqb_bhardlimit; /* absolute limit on disk space (in QUOTABLOCK_SIZE) */ |
__u32 dqb_bsoftlimit; /* preferred limit on disk space (in QUOTABLOCK_SIZE) */ |
__u64 dqb_curspace; /* current space occupied (in bytes) */ |
__u64 dqb_btime; /* time limit for excessive disk use */ |
__u64 dqb_itime; /* time limit for excessive inode use */ |
}; |
/* |
* Here are header structures as written on disk and their in-memory copies |
*/ |
/* First generic header */ |
struct v2_disk_dqheader { |
__u32 dqh_magic; /* Magic number identifying file */ |
__u32 dqh_version; /* File version */ |
}; |
/* Header with type and version specific information */ |
struct v2_disk_dqinfo { |
__u32 dqi_bgrace; /* Time before block soft limit becomes hard limit */ |
__u32 dqi_igrace; /* Time before inode soft limit becomes hard limit */ |
__u32 dqi_flags; /* Flags for quotafile (DQF_*) */ |
__u32 dqi_blocks; /* Number of blocks in file */ |
__u32 dqi_free_blk; /* Number of first free block in the list */ |
__u32 dqi_free_entry; /* Number of block with at least one free entry */ |
}; |
/* |
* Structure of header of block with quota structures. It is padded to 16 bytes so |
* there will be space for exactly 18 quota-entries in a block |
*/ |
struct v2_disk_dqdbheader { |
__u32 dqdh_next_free; /* Number of next block with free entry */ |
__u32 dqdh_prev_free; /* Number of previous block with free entry */ |
__u16 dqdh_entries; /* Number of valid entries in block */ |
__u16 dqdh_pad1; |
__u32 dqdh_pad2; |
}; |
#define V2_DQINFOOFF sizeof(struct v2_disk_dqheader) /* Offset of info header in file */ |
#define V2_DQBLKSIZE_BITS 10 |
#define V2_DQBLKSIZE (1 << V2_DQBLKSIZE_BITS) /* Size of block with quota structures */ |
#define V2_DQTREEOFF 1 /* Offset of tree in file in blocks */ |
#define V2_DQTREEDEPTH 4 /* Depth of quota tree */ |
#define V2_DQSTRINBLK ((V2_DQBLKSIZE - sizeof(struct v2_disk_dqdbheader)) / sizeof(struct v2_disk_dqblk)) /* Number of entries in one blocks */ |
#endif /* _LINUX_QUOTAIO_V2_H */ |
/shark/trunk/drivers/linuxc26/include/linux/namei.h |
---|
0,0 → 1,70 |
#ifndef _LINUX_NAMEI_H |
#define _LINUX_NAMEI_H |
#include <linux/linkage.h> |
struct vfsmount; |
struct open_intent { |
int flags; |
int create_mode; |
}; |
struct nameidata { |
struct dentry *dentry; |
struct vfsmount *mnt; |
struct qstr last; |
unsigned int flags; |
int last_type; |
/* Intent data */ |
union { |
struct open_intent open; |
} intent; |
}; |
/* |
* Type of the last component on LOOKUP_PARENT |
*/ |
enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND}; |
/* |
* The bitmask for a lookup event: |
* - follow links at the end |
* - require a directory |
* - ending slashes ok even for nonexistent files |
* - internal "there are more path compnents" flag |
* - locked when lookup done with dcache_lock held |
*/ |
#define LOOKUP_FOLLOW 1 |
#define LOOKUP_DIRECTORY 2 |
#define LOOKUP_CONTINUE 4 |
#define LOOKUP_PARENT 16 |
#define LOOKUP_NOALT 32 |
/* |
* Intent data |
*/ |
#define LOOKUP_OPEN (0x0100) |
#define LOOKUP_CREATE (0x0200) |
#define LOOKUP_ACCESS (0x0400) |
extern int FASTCALL(__user_walk(const char __user *, unsigned, struct nameidata *)); |
#define user_path_walk(name,nd) \ |
__user_walk(name, LOOKUP_FOLLOW, nd) |
#define user_path_walk_link(name,nd) \ |
__user_walk(name, 0, nd) |
extern int FASTCALL(path_lookup(const char *, unsigned, struct nameidata *)); |
extern int FASTCALL(path_walk(const char *, struct nameidata *)); |
extern int FASTCALL(link_path_walk(const char *, struct nameidata *)); |
extern void path_release(struct nameidata *); |
extern struct dentry * lookup_one_len(const char *, struct dentry *, int); |
extern struct dentry * lookup_hash(struct qstr *, struct dentry *); |
extern int follow_down(struct vfsmount **, struct dentry **); |
extern int follow_up(struct vfsmount **, struct dentry **); |
extern struct dentry *lock_rename(struct dentry *, struct dentry *); |
extern void unlock_rename(struct dentry *, struct dentry *); |
#endif /* _LINUX_NAMEI_H */ |
/shark/trunk/drivers/linuxc26/include/linux/hippidevice.h |
---|
0,0 → 1,56 |
/* |
* 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 HIPPI handlers. |
* |
* Version: @(#)hippidevice.h 1.0.0 05/26/97 |
* |
* Author: Jes Sorensen, <Jes.Sorensen@cern.ch> |
* |
* hippidevice.h is based on previous fddidevice.h work by |
* Ross Biro, <bir7@leland.Stanford.Edu> |
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> |
* Alan Cox, <gw4pts@gw4pts.ampr.org> |
* Lawrence V. Stefani, <stefani@lkg.dec.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_HIPPIDEVICE_H |
#define _LINUX_HIPPIDEVICE_H |
#include <linux/if_hippi.h> |
#ifdef __KERNEL__ |
extern int hippi_header(struct sk_buff *skb, |
struct net_device *dev, |
unsigned short type, |
void *daddr, |
void *saddr, |
unsigned len); |
extern int hippi_rebuild_header(struct sk_buff *skb); |
extern unsigned short hippi_type_trans(struct sk_buff *skb, |
struct net_device *dev); |
extern void hippi_header_cache_bind(struct hh_cache ** hhp, |
struct net_device *dev, |
unsigned short htype, |
__u32 daddr); |
extern void hippi_header_cache_update(struct hh_cache *hh, |
struct net_device *dev, |
unsigned char * haddr); |
extern int hippi_header_parse(struct sk_buff *skb, unsigned char *haddr); |
extern void hippi_net_init(void); |
extern struct net_device *alloc_hippi_dev(int sizeof_priv); |
#endif |
#endif /* _LINUX_HIPPIDEVICE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/devpts_fs.h |
---|
0,0 → 1,33 |
/* -*- linux-c -*- --------------------------------------------------------- * |
* |
* linux/include/linux/devpts_fs.h |
* |
* Copyright 1998 H. Peter Anvin -- 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 _LINUX_DEVPTS_FS_H |
#define _LINUX_DEVPTS_FS_H 1 |
#ifdef CONFIG_DEVPTS_FS |
void devpts_pty_new(int, dev_t); /* mknod in devpts */ |
void devpts_pty_kill(int); /* unlink */ |
#else |
static inline void devpts_pty_new(int line, dev_t device) |
{ |
} |
static inline void devpts_pty_kill(int line) |
{ |
} |
#endif |
#endif /* _LINUX_DEVPTS_FS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/zlib.h |
---|
0,0 → 1,637 |
/* zlib.h -- interface of the 'zlib' general purpose compression library |
version 1.1.3, July 9th, 1998 |
Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler |
This software is provided 'as-is', without any express or implied |
warranty. In no event will the authors be held liable for any damages |
arising from the use of this software. |
Permission is granted to anyone to use this software for any purpose, |
including commercial applications, and to alter it and redistribute it |
freely, subject to the following restrictions: |
1. The origin of this software must not be misrepresented; you must not |
claim that you wrote the original software. If you use this software |
in a product, an acknowledgment in the product documentation would be |
appreciated but is not required. |
2. Altered source versions must be plainly marked as such, and must not be |
misrepresented as being the original software. |
3. This notice may not be removed or altered from any source distribution. |
Jean-loup Gailly Mark Adler |
jloup@gzip.org madler@alumni.caltech.edu |
The data format used by the zlib library is described by RFCs (Request for |
Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt |
(zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). |
*/ |
#ifndef _ZLIB_H |
#define _ZLIB_H |
#include <linux/zconf.h> |
#define ZLIB_VERSION "1.1.3" |
/* |
The 'zlib' compression library provides in-memory compression and |
decompression functions, including integrity checks of the uncompressed |
data. This version of the library supports only one compression method |
(deflation) but other algorithms will be added later and will have the same |
stream interface. |
Compression can be done in a single step if the buffers are large |
enough (for example if an input file is mmap'ed), or can be done by |
repeated calls of the compression function. In the latter case, the |
application must provide more input and/or consume the output |
(providing more output space) before each call. |
The library also supports reading and writing files in gzip (.gz) format |
with an interface similar to that of stdio. |
The library does not install any signal handler. The decoder checks |
the consistency of the compressed data, so the library should never |
crash even in case of corrupted input. |
*/ |
struct internal_state; |
typedef struct z_stream_s { |
Byte *next_in; /* next input byte */ |
uInt avail_in; /* number of bytes available at next_in */ |
uLong total_in; /* total nb of input bytes read so far */ |
Byte *next_out; /* next output byte should be put there */ |
uInt avail_out; /* remaining free space at next_out */ |
uLong total_out; /* total nb of bytes output so far */ |
char *msg; /* last error message, NULL if no error */ |
struct internal_state *state; /* not visible by applications */ |
void *workspace; /* memory allocated for this stream */ |
int data_type; /* best guess about the data type: ascii or binary */ |
uLong adler; /* adler32 value of the uncompressed data */ |
uLong reserved; /* reserved for future use */ |
} z_stream; |
typedef z_stream *z_streamp; |
/* |
The application must update next_in and avail_in when avail_in has |
dropped to zero. It must update next_out and avail_out when avail_out |
has dropped to zero. The application must initialize zalloc, zfree and |
opaque before calling the init function. All other fields are set by the |
compression library and must not be updated by the application. |
The opaque value provided by the application will be passed as the first |
parameter for calls of zalloc and zfree. This can be useful for custom |
memory management. The compression library attaches no meaning to the |
opaque value. |
zalloc must return NULL if there is not enough memory for the object. |
If zlib is used in a multi-threaded application, zalloc and zfree must be |
thread safe. |
On 16-bit systems, the functions zalloc and zfree must be able to allocate |
exactly 65536 bytes, but will not be required to allocate more than this |
if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, |
pointers returned by zalloc for objects of exactly 65536 bytes *must* |
have their offset normalized to zero. The default allocation function |
provided by this library ensures this (see zutil.c). To reduce memory |
requirements and avoid any allocation of 64K objects, at the expense of |
compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). |
The fields total_in and total_out can be used for statistics or |
progress reports. After compression, total_in holds the total size of |
the uncompressed data and may be saved for use in the decompressor |
(particularly if the decompressor wants to decompress everything in |
a single step). |
*/ |
/* constants */ |
#define Z_NO_FLUSH 0 |
#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ |
#define Z_PACKET_FLUSH 2 |
#define Z_SYNC_FLUSH 3 |
#define Z_FULL_FLUSH 4 |
#define Z_FINISH 5 |
/* Allowed flush values; see deflate() below for details */ |
#define Z_OK 0 |
#define Z_STREAM_END 1 |
#define Z_NEED_DICT 2 |
#define Z_ERRNO (-1) |
#define Z_STREAM_ERROR (-2) |
#define Z_DATA_ERROR (-3) |
#define Z_MEM_ERROR (-4) |
#define Z_BUF_ERROR (-5) |
#define Z_VERSION_ERROR (-6) |
/* Return codes for the compression/decompression functions. Negative |
* values are errors, positive values are used for special but normal events. |
*/ |
#define Z_NO_COMPRESSION 0 |
#define Z_BEST_SPEED 1 |
#define Z_BEST_COMPRESSION 9 |
#define Z_DEFAULT_COMPRESSION (-1) |
/* compression levels */ |
#define Z_FILTERED 1 |
#define Z_HUFFMAN_ONLY 2 |
#define Z_DEFAULT_STRATEGY 0 |
/* compression strategy; see deflateInit2() below for details */ |
#define Z_BINARY 0 |
#define Z_ASCII 1 |
#define Z_UNKNOWN 2 |
/* Possible values of the data_type field */ |
#define Z_DEFLATED 8 |
/* The deflate compression method (the only one supported in this version) */ |
/* basic functions */ |
extern const char * zlib_zlibVersion (void); |
/* The application can compare zlibVersion and ZLIB_VERSION for consistency. |
If the first character differs, the library code actually used is |
not compatible with the zlib.h header file used by the application. |
This check is automatically made by deflateInit and inflateInit. |
*/ |
extern int zlib_deflate_workspacesize (void); |
/* |
Returns the number of bytes that needs to be allocated for a per- |
stream workspace. A pointer to this number of bytes should be |
returned in stream->workspace before calling zlib_deflateInit(). |
*/ |
/* |
extern int deflateInit (z_streamp strm, int level); |
Initializes the internal stream state for compression. The fields |
zalloc, zfree and opaque must be initialized before by the caller. |
If zalloc and zfree are set to NULL, deflateInit updates them to |
use default allocation functions. |
The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: |
1 gives best speed, 9 gives best compression, 0 gives no compression at |
all (the input data is simply copied a block at a time). |
Z_DEFAULT_COMPRESSION requests a default compromise between speed and |
compression (currently equivalent to level 6). |
deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not |
enough memory, Z_STREAM_ERROR if level is not a valid compression level, |
Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible |
with the version assumed by the caller (ZLIB_VERSION). |
msg is set to null if there is no error message. deflateInit does not |
perform any compression: this will be done by deflate(). |
*/ |
extern int zlib_deflate (z_streamp strm, int flush); |
/* |
deflate compresses as much data as possible, and stops when the input |
buffer becomes empty or the output buffer becomes full. It may introduce some |
output latency (reading input without producing any output) except when |
forced to flush. |
The detailed semantics are as follows. deflate performs one or both of the |
following actions: |
- Compress more input starting at next_in and update next_in and avail_in |
accordingly. If not all input can be processed (because there is not |
enough room in the output buffer), next_in and avail_in are updated and |
processing will resume at this point for the next call of deflate(). |
- Provide more output starting at next_out and update next_out and avail_out |
accordingly. This action is forced if the parameter flush is non zero. |
Forcing flush frequently degrades the compression ratio, so this parameter |
should be set only when necessary (in interactive applications). |
Some output may be provided even if flush is not set. |
Before the call of deflate(), the application should ensure that at least |
one of the actions is possible, by providing more input and/or consuming |
more output, and updating avail_in or avail_out accordingly; avail_out |
should never be zero before the call. The application can consume the |
compressed output when it wants, for example when the output buffer is full |
(avail_out == 0), or after each call of deflate(). If deflate returns Z_OK |
and with zero avail_out, it must be called again after making room in the |
output buffer because there might be more output pending. |
If the parameter flush is set to Z_SYNC_FLUSH, all pending output is |
flushed to the output buffer and the output is aligned on a byte boundary, so |
that the decompressor can get all input data available so far. (In particular |
avail_in is zero after the call if enough output space has been provided |
before the call.) Flushing may degrade compression for some compression |
algorithms and so it should be used only when necessary. |
If flush is set to Z_FULL_FLUSH, all output is flushed as with |
Z_SYNC_FLUSH, and the compression state is reset so that decompression can |
restart from this point if previous compressed data has been damaged or if |
random access is desired. Using Z_FULL_FLUSH too often can seriously degrade |
the compression. |
If deflate returns with avail_out == 0, this function must be called again |
with the same value of the flush parameter and more output space (updated |
avail_out), until the flush is complete (deflate returns with non-zero |
avail_out). |
If the parameter flush is set to Z_FINISH, pending input is processed, |
pending output is flushed and deflate returns with Z_STREAM_END if there |
was enough output space; if deflate returns with Z_OK, this function must be |
called again with Z_FINISH and more output space (updated avail_out) but no |
more input data, until it returns with Z_STREAM_END or an error. After |
deflate has returned Z_STREAM_END, the only possible operations on the |
stream are deflateReset or deflateEnd. |
Z_FINISH can be used immediately after deflateInit if all the compression |
is to be done in a single step. In this case, avail_out must be at least |
0.1% larger than avail_in plus 12 bytes. If deflate does not return |
Z_STREAM_END, then it must be called again as described above. |
deflate() sets strm->adler to the adler32 checksum of all input read |
so far (that is, total_in bytes). |
deflate() may update data_type if it can make a good guess about |
the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered |
binary. This field is only for information purposes and does not affect |
the compression algorithm in any manner. |
deflate() returns Z_OK if some progress has been made (more input |
processed or more output produced), Z_STREAM_END if all input has been |
consumed and all output has been produced (only when flush is set to |
Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example |
if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible |
(for example avail_in or avail_out was zero). |
*/ |
extern int zlib_deflateEnd (z_streamp strm); |
/* |
All dynamically allocated data structures for this stream are freed. |
This function discards any unprocessed input and does not flush any |
pending output. |
deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the |
stream state was inconsistent, Z_DATA_ERROR if the stream was freed |
prematurely (some input or output was discarded). In the error case, |
msg may be set but then points to a static string (which must not be |
deallocated). |
*/ |
extern int zlib_inflate_workspacesize (void); |
/* |
Returns the number of bytes that needs to be allocated for a per- |
stream workspace. A pointer to this number of bytes should be |
returned in stream->workspace before calling zlib_inflateInit(). |
*/ |
/* |
extern int zlib_inflateInit (z_streamp strm); |
Initializes the internal stream state for decompression. The fields |
next_in, avail_in, and workspace must be initialized before by |
the caller. If next_in is not NULL and avail_in is large enough (the exact |
value depends on the compression method), inflateInit determines the |
compression method from the zlib header and allocates all data structures |
accordingly; otherwise the allocation will be deferred to the first call of |
inflate. If zalloc and zfree are set to NULL, inflateInit updates them to |
use default allocation functions. |
inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough |
memory, Z_VERSION_ERROR if the zlib library version is incompatible with the |
version assumed by the caller. msg is set to null if there is no error |
message. inflateInit does not perform any decompression apart from reading |
the zlib header if present: this will be done by inflate(). (So next_in and |
avail_in may be modified, but next_out and avail_out are unchanged.) |
*/ |
extern int zlib_inflate (z_streamp strm, int flush); |
/* |
inflate decompresses as much data as possible, and stops when the input |
buffer becomes empty or the output buffer becomes full. It may some |
introduce some output latency (reading input without producing any output) |
except when forced to flush. |
The detailed semantics are as follows. inflate performs one or both of the |
following actions: |
- Decompress more input starting at next_in and update next_in and avail_in |
accordingly. If not all input can be processed (because there is not |
enough room in the output buffer), next_in is updated and processing |
will resume at this point for the next call of inflate(). |
- Provide more output starting at next_out and update next_out and avail_out |
accordingly. inflate() provides as much output as possible, until there |
is no more input data or no more space in the output buffer (see below |
about the flush parameter). |
Before the call of inflate(), the application should ensure that at least |
one of the actions is possible, by providing more input and/or consuming |
more output, and updating the next_* and avail_* values accordingly. |
The application can consume the uncompressed output when it wants, for |
example when the output buffer is full (avail_out == 0), or after each |
call of inflate(). If inflate returns Z_OK and with zero avail_out, it |
must be called again after making room in the output buffer because there |
might be more output pending. |
If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much |
output as possible to the output buffer. The flushing behavior of inflate is |
not specified for values of the flush parameter other than Z_SYNC_FLUSH |
and Z_FINISH, but the current implementation actually flushes as much output |
as possible anyway. |
inflate() should normally be called until it returns Z_STREAM_END or an |
error. However if all decompression is to be performed in a single step |
(a single call of inflate), the parameter flush should be set to |
Z_FINISH. In this case all pending input is processed and all pending |
output is flushed; avail_out must be large enough to hold all the |
uncompressed data. (The size of the uncompressed data may have been saved |
by the compressor for this purpose.) The next operation on this stream must |
be inflateEnd to deallocate the decompression state. The use of Z_FINISH |
is never required, but can be used to inform inflate that a faster routine |
may be used for the single inflate() call. |
If a preset dictionary is needed at this point (see inflateSetDictionary |
below), inflate sets strm-adler to the adler32 checksum of the |
dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise |
it sets strm->adler to the adler32 checksum of all output produced |
so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or |
an error code as described below. At the end of the stream, inflate() |
checks that its computed adler32 checksum is equal to that saved by the |
compressor and returns Z_STREAM_END only if the checksum is correct. |
inflate() returns Z_OK if some progress has been made (more input processed |
or more output produced), Z_STREAM_END if the end of the compressed data has |
been reached and all uncompressed output has been produced, Z_NEED_DICT if a |
preset dictionary is needed at this point, Z_DATA_ERROR if the input data was |
corrupted (input stream not conforming to the zlib format or incorrect |
adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent |
(for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not |
enough memory, Z_BUF_ERROR if no progress is possible or if there was not |
enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR |
case, the application may then call inflateSync to look for a good |
compression block. |
*/ |
extern int zlib_inflateEnd (z_streamp strm); |
/* |
All dynamically allocated data structures for this stream are freed. |
This function discards any unprocessed input and does not flush any |
pending output. |
inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state |
was inconsistent. In the error case, msg may be set but then points to a |
static string (which must not be deallocated). |
*/ |
/* Advanced functions */ |
/* |
The following functions are needed only in some special applications. |
*/ |
/* |
extern int deflateInit2 (z_streamp strm, |
int level, |
int method, |
int windowBits, |
int memLevel, |
int strategy); |
This is another version of deflateInit with more compression options. The |
fields next_in, zalloc, zfree and opaque must be initialized before by |
the caller. |
The method parameter is the compression method. It must be Z_DEFLATED in |
this version of the library. |
The windowBits parameter is the base two logarithm of the window size |
(the size of the history buffer). It should be in the range 8..15 for this |
version of the library. Larger values of this parameter result in better |
compression at the expense of memory usage. The default value is 15 if |
deflateInit is used instead. |
The memLevel parameter specifies how much memory should be allocated |
for the internal compression state. memLevel=1 uses minimum memory but |
is slow and reduces compression ratio; memLevel=9 uses maximum memory |
for optimal speed. The default value is 8. See zconf.h for total memory |
usage as a function of windowBits and memLevel. |
The strategy parameter is used to tune the compression algorithm. Use the |
value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a |
filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no |
string match). Filtered data consists mostly of small values with a |
somewhat random distribution. In this case, the compression algorithm is |
tuned to compress them better. The effect of Z_FILTERED is to force more |
Huffman coding and less string matching; it is somewhat intermediate |
between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects |
the compression ratio but not the correctness of the compressed output even |
if it is not set appropriately. |
deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough |
memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid |
method). msg is set to null if there is no error message. deflateInit2 does |
not perform any compression: this will be done by deflate(). |
*/ |
extern int zlib_deflateSetDictionary (z_streamp strm, |
const Byte *dictionary, |
uInt dictLength); |
/* |
Initializes the compression dictionary from the given byte sequence |
without producing any compressed output. This function must be called |
immediately after deflateInit, deflateInit2 or deflateReset, before any |
call of deflate. The compressor and decompressor must use exactly the same |
dictionary (see inflateSetDictionary). |
The dictionary should consist of strings (byte sequences) that are likely |
to be encountered later in the data to be compressed, with the most commonly |
used strings preferably put towards the end of the dictionary. Using a |
dictionary is most useful when the data to be compressed is short and can be |
predicted with good accuracy; the data can then be compressed better than |
with the default empty dictionary. |
Depending on the size of the compression data structures selected by |
deflateInit or deflateInit2, a part of the dictionary may in effect be |
discarded, for example if the dictionary is larger than the window size in |
deflate or deflate2. Thus the strings most likely to be useful should be |
put at the end of the dictionary, not at the front. |
Upon return of this function, strm->adler is set to the Adler32 value |
of the dictionary; the decompressor may later use this value to determine |
which dictionary has been used by the compressor. (The Adler32 value |
applies to the whole dictionary even if only a subset of the dictionary is |
actually used by the compressor.) |
deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a |
parameter is invalid (such as NULL dictionary) or the stream state is |
inconsistent (for example if deflate has already been called for this stream |
or if the compression method is bsort). deflateSetDictionary does not |
perform any compression: this will be done by deflate(). |
*/ |
extern int zlib_deflateCopy (z_streamp dest, z_streamp source); |
/* |
Sets the destination stream as a complete copy of the source stream. |
This function can be useful when several compression strategies will be |
tried, for example when there are several ways of pre-processing the input |
data with a filter. The streams that will be discarded should then be freed |
by calling deflateEnd. Note that deflateCopy duplicates the internal |
compression state which can be quite large, so this strategy is slow and |
can consume lots of memory. |
deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not |
enough memory, Z_STREAM_ERROR if the source stream state was inconsistent |
(such as zalloc being NULL). msg is left unchanged in both source and |
destination. |
*/ |
extern int zlib_deflateReset (z_streamp strm); |
/* |
This function is equivalent to deflateEnd followed by deflateInit, |
but does not free and reallocate all the internal compression state. |
The stream will keep the same compression level and any other attributes |
that may have been set by deflateInit2. |
deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source |
stream state was inconsistent (such as zalloc or state being NULL). |
*/ |
extern int zlib_deflateParams (z_streamp strm, int level, int strategy); |
/* |
Dynamically update the compression level and compression strategy. The |
interpretation of level and strategy is as in deflateInit2. This can be |
used to switch between compression and straight copy of the input data, or |
to switch to a different kind of input data requiring a different |
strategy. If the compression level is changed, the input available so far |
is compressed with the old level (and may be flushed); the new level will |
take effect only at the next call of deflate(). |
Before the call of deflateParams, the stream state must be set as for |
a call of deflate(), since the currently available input may have to |
be compressed and flushed. In particular, strm->avail_out must be non-zero. |
deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source |
stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR |
if strm->avail_out was zero. |
*/ |
/* |
extern int inflateInit2 (z_streamp strm, int windowBits); |
This is another version of inflateInit with an extra parameter. The |
fields next_in, avail_in, zalloc, zfree and opaque must be initialized |
before by the caller. |
The windowBits parameter is the base two logarithm of the maximum window |
size (the size of the history buffer). It should be in the range 8..15 for |
this version of the library. The default value is 15 if inflateInit is used |
instead. If a compressed stream with a larger window size is given as |
input, inflate() will return with the error code Z_DATA_ERROR instead of |
trying to allocate a larger window. |
inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough |
memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative |
memLevel). msg is set to null if there is no error message. inflateInit2 |
does not perform any decompression apart from reading the zlib header if |
present: this will be done by inflate(). (So next_in and avail_in may be |
modified, but next_out and avail_out are unchanged.) |
*/ |
extern int zlib_inflateSetDictionary (z_streamp strm, |
const Byte *dictionary, |
uInt dictLength); |
/* |
Initializes the decompression dictionary from the given uncompressed byte |
sequence. This function must be called immediately after a call of inflate |
if this call returned Z_NEED_DICT. The dictionary chosen by the compressor |
can be determined from the Adler32 value returned by this call of |
inflate. The compressor and decompressor must use exactly the same |
dictionary (see deflateSetDictionary). |
inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a |
parameter is invalid (such as NULL dictionary) or the stream state is |
inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the |
expected one (incorrect Adler32 value). inflateSetDictionary does not |
perform any decompression: this will be done by subsequent calls of |
inflate(). |
*/ |
extern int zlib_inflateSync (z_streamp strm); |
/* |
Skips invalid compressed data until a full flush point (see above the |
description of deflate with Z_FULL_FLUSH) can be found, or until all |
available input is skipped. No output is provided. |
inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR |
if no more input was provided, Z_DATA_ERROR if no flush point has been found, |
or Z_STREAM_ERROR if the stream structure was inconsistent. In the success |
case, the application may save the current current value of total_in which |
indicates where valid compressed data was found. In the error case, the |
application may repeatedly call inflateSync, providing more input each time, |
until success or end of the input data. |
*/ |
extern int zlib_inflateReset (z_streamp strm); |
/* |
This function is equivalent to inflateEnd followed by inflateInit, |
but does not free and reallocate all the internal decompression state. |
The stream will keep attributes that may have been set by inflateInit2. |
inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source |
stream state was inconsistent (such as zalloc or state being NULL). |
*/ |
extern int zlib_inflateIncomp (z_stream *strm); |
/* |
This function adds the data at next_in (avail_in bytes) to the output |
history without performing any output. There must be no pending output, |
and the decompressor must be expecting to see the start of a block. |
Calling this function is equivalent to decompressing a stored block |
containing the data at next_in (except that the data is not output). |
*/ |
/* various hacks, don't look :) */ |
/* deflateInit and inflateInit are macros to allow checking the zlib version |
* and the compiler's view of z_stream: |
*/ |
extern int zlib_deflateInit_ (z_streamp strm, int level, |
const char *version, int stream_size); |
extern int zlib_inflateInit_ (z_streamp strm, |
const char *version, int stream_size); |
extern int zlib_deflateInit2_ (z_streamp strm, int level, int method, |
int windowBits, int memLevel, |
int strategy, const char *version, |
int stream_size); |
extern int zlib_inflateInit2_ (z_streamp strm, int windowBits, |
const char *version, int stream_size); |
#define zlib_deflateInit(strm, level) \ |
zlib_deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) |
#define zlib_inflateInit(strm) \ |
zlib_inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) |
#define zlib_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ |
zlib_deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ |
(strategy), ZLIB_VERSION, sizeof(z_stream)) |
#define zlib_inflateInit2(strm, windowBits) \ |
zlib_inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) |
#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL) |
struct internal_state {int dummy;}; /* hack for buggy compilers */ |
#endif |
extern const char * zlib_zError (int err); |
extern int zlib_inflateSyncPoint (z_streamp z); |
extern const uLong * zlib_get_crc_table (void); |
#endif /* _ZLIB_H */ |
/shark/trunk/drivers/linuxc26/include/linux/statfs.h |
---|
0,0 → 1,22 |
#ifndef _LINUX_STATFS_H |
#define _LINUX_STATFS_H |
#include <linux/types.h> |
#include <asm/statfs.h> |
struct kstatfs { |
long f_type; |
long f_bsize; |
sector_t f_blocks; |
sector_t f_bfree; |
sector_t f_bavail; |
sector_t f_files; |
sector_t f_ffree; |
__kernel_fsid_t f_fsid; |
long f_namelen; |
long f_frsize; |
long f_spare[5]; |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/fs.h |
---|
0,0 → 1,1412 |
#ifndef _LINUX_FS_H |
#define _LINUX_FS_H |
/* |
* This file has definitions for some important file table |
* structures etc. |
*/ |
#include <linux/config.h> |
#include <linux/linkage.h> |
#include <linux/limits.h> |
#include <linux/wait.h> |
#include <linux/types.h> |
#include <linux/kdev_t.h> |
#include <linux/ioctl.h> |
#include <linux/list.h> |
#include <linux/dcache.h> |
#include <linux/stat.h> |
#include <linux/cache.h> |
#include <linux/radix-tree.h> |
#include <linux/kobject.h> |
#include <asm/atomic.h> |
struct iovec; |
struct nameidata; |
struct pipe_inode_info; |
struct poll_table_struct; |
struct kstatfs; |
struct vm_area_struct; |
struct vfsmount; |
/* |
* 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 NR_OPEN (1024*1024) /* Absolute upper limit on fd num */ |
#define INR_OPEN 1024 /* Initial setting for nfile rlimits */ |
#define BLOCK_SIZE_BITS 10 |
#define BLOCK_SIZE (1<<BLOCK_SIZE_BITS) |
/* And dynamically-tunable limits and defaults: */ |
struct files_stat_struct { |
int nr_files; /* read only */ |
int nr_free_files; /* read only */ |
int max_files; /* tunable */ |
}; |
extern struct files_stat_struct files_stat; |
struct inodes_stat_t { |
int nr_inodes; |
int nr_unused; |
int dummy[5]; |
}; |
extern struct inodes_stat_t inodes_stat; |
extern int leases_enable, dir_notify_enable, lease_break_time; |
#define NR_FILE 8192 /* this can well be larger on a larger system */ |
#define NR_RESERVED_FILES 10 /* reserved for root */ |
#define NR_SUPER 256 |
#define MAY_EXEC 1 |
#define MAY_WRITE 2 |
#define MAY_READ 4 |
#define MAY_APPEND 8 |
#define FMODE_READ 1 |
#define FMODE_WRITE 2 |
#define RW_MASK 1 |
#define RWA_MASK 2 |
#define READ 0 |
#define WRITE 1 |
#define READA 2 /* read-ahead - don't block if no resources */ |
#define SPECIAL 4 /* For non-blockdevice requests in request queue */ |
#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_REVAL_DOT 16384 /* Check the paths ".", ".." for staleness */ |
#define FS_ODD_RENAME 32768 /* Temporary stuff; will go away as soon |
* as nfs_rename() will be cleaned up |
*/ |
/* |
* 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 |
#define MS_POSIXACL (1<<16) /* VFS does not apply the umask */ |
#define MS_ONE_SECOND (1<<17) /* fs has 1 sec a/m/ctime resolution */ |
#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_NOATIME|\ |
MS_NODIRATIME) |
/* |
* 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_QUOTA 4 /* Quota initialized for file */ |
#define S_APPEND 8 /* Append-only file */ |
#define S_IMMUTABLE 16 /* Immutable file */ |
#define S_DEAD 32 /* removed, but still open directory */ |
#define S_NOQUOTA 64 /* Inode is not counted to quota */ |
#define S_DIRSYNC 128 /* Directory modifications are synchronous */ |
/* |
* 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_QUOTAINIT(inode) ((inode)->i_flags & S_QUOTA) |
#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_NOATIME(inode) (__IS_FLG(inode, MS_NOATIME) || ((inode)->i_flags & S_NOATIME)) |
#define IS_NODIRATIME(inode) __IS_FLG(inode, MS_NODIRATIME) |
#define IS_POSIXACL(inode) __IS_FLG(inode, MS_POSIXACL) |
#define IS_ONE_SECOND(inode) __IS_FLG(inode, MS_ONE_SECOND) |
#define IS_DEADDIR(inode) ((inode)->i_flags & S_DEAD) |
/* 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 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 */ |
#ifdef __KERNEL__ |
#include <asm/semaphore.h> |
#include <asm/byteorder.h> |
/* Used to be a macro which just called the function, now just a function */ |
extern void update_atime (struct inode *); |
extern void inode_init(unsigned long); |
extern void mnt_init(unsigned long); |
extern void files_init(unsigned long); |
struct buffer_head; |
typedef int (get_block_t)(struct inode *inode, sector_t iblock, |
struct buffer_head *bh_result, int create); |
typedef int (get_blocks_t)(struct inode *inode, sector_t iblock, |
unsigned long max_blocks, |
struct buffer_head *bh_result, int create); |
typedef void (dio_iodone_t)(struct inode *inode, loff_t offset, |
ssize_t bytes, void *private); |
/* |
* Attribute flags. These should be or-ed together to figure out what |
* has been changed! |
*/ |
#define ATTR_MODE 1 |
#define ATTR_UID 2 |
#define ATTR_GID 4 |
#define ATTR_SIZE 8 |
#define ATTR_ATIME 16 |
#define ATTR_MTIME 32 |
#define ATTR_CTIME 64 |
#define ATTR_ATIME_SET 128 |
#define ATTR_MTIME_SET 256 |
#define ATTR_FORCE 512 /* Not a change, but a change it */ |
#define ATTR_ATTR_FLAG 1024 |
#define ATTR_KILL_SUID 2048 |
#define ATTR_KILL_SGID 4096 |
/* |
* This is the Inode Attributes structure, used for notify_change(). It |
* uses the above definitions as flags, to know which values have changed. |
* Also, in this manner, a Filesystem can look at only the values it cares |
* about. Basically, these are the attributes that the VFS layer can |
* request to change from the FS layer. |
* |
* Derek Atkins <warlord@MIT.EDU> 94-10-20 |
*/ |
struct iattr { |
unsigned int ia_valid; |
umode_t ia_mode; |
uid_t ia_uid; |
gid_t ia_gid; |
loff_t ia_size; |
struct timespec ia_atime; |
struct timespec ia_mtime; |
struct timespec ia_ctime; |
unsigned int ia_attr_flags; |
}; |
/* |
* This is the inode attributes flag definitions |
*/ |
#define ATTR_FLAG_SYNCRONOUS 1 /* Syncronous write */ |
#define ATTR_FLAG_NOATIME 2 /* Don't update atime */ |
#define ATTR_FLAG_APPEND 4 /* Append-only file */ |
#define ATTR_FLAG_IMMUTABLE 8 /* Immutable file */ |
#define ATTR_FLAG_NODIRATIME 16 /* Don't update atime for directory */ |
/* |
* Includes for diskquotas. |
*/ |
#include <linux/quota.h> |
/* |
* oh the beauties of C type declarations. |
*/ |
struct page; |
struct address_space; |
struct writeback_control; |
struct kiocb; |
struct address_space_operations { |
int (*writepage)(struct page *page, struct writeback_control *wbc); |
int (*readpage)(struct file *, struct page *); |
int (*sync_page)(struct page *); |
/* Write back some dirty pages from this mapping. */ |
int (*writepages)(struct address_space *, struct writeback_control *); |
/* Set a page dirty */ |
int (*set_page_dirty)(struct page *page); |
int (*readpages)(struct file *filp, struct address_space *mapping, |
struct list_head *pages, unsigned nr_pages); |
/* |
* ext3 requires that a successful prepare_write() call be followed |
* by a commit_write() call - they must be balanced |
*/ |
int (*prepare_write)(struct file *, struct page *, unsigned, unsigned); |
int (*commit_write)(struct file *, struct page *, unsigned, unsigned); |
/* Unfortunately this kludge is needed for FIBMAP. Don't use it */ |
sector_t (*bmap)(struct address_space *, sector_t); |
int (*invalidatepage) (struct page *, unsigned long); |
int (*releasepage) (struct page *, int); |
int (*direct_IO)(int, struct kiocb *, const struct iovec *iov, |
loff_t offset, unsigned long nr_segs); |
}; |
struct backing_dev_info; |
struct address_space { |
struct inode *host; /* owner: inode, block_device */ |
struct radix_tree_root page_tree; /* radix tree of all pages */ |
spinlock_t page_lock; /* and spinlock protecting it */ |
struct list_head clean_pages; /* list of clean pages */ |
struct list_head dirty_pages; /* list of dirty pages */ |
struct list_head locked_pages; /* list of locked pages */ |
struct list_head io_pages; /* being prepared for I/O */ |
unsigned long nrpages; /* number of total pages */ |
struct address_space_operations *a_ops; /* methods */ |
struct list_head i_mmap; /* list of private mappings */ |
struct list_head i_mmap_shared; /* list of shared mappings */ |
struct semaphore i_shared_sem; /* protect both above lists */ |
atomic_t truncate_count; /* Cover race condition with truncate */ |
unsigned long dirtied_when; /* jiffies of first page dirtying */ |
unsigned long flags; /* error bits/gfp mask */ |
struct backing_dev_info *backing_dev_info; /* device readahead, etc */ |
spinlock_t private_lock; /* for use by the address_space */ |
struct list_head private_list; /* ditto */ |
struct address_space *assoc_mapping; /* ditto */ |
}; |
struct block_device { |
dev_t bd_dev; /* not a kdev_t - it's a search key */ |
struct inode * bd_inode; /* will die */ |
int bd_openers; |
struct semaphore bd_sem; /* open/close mutex */ |
struct list_head bd_inodes; |
void * bd_holder; |
int bd_holders; |
struct block_device * bd_contains; |
unsigned bd_block_size; |
struct hd_struct * bd_part; |
unsigned bd_part_count; |
int bd_invalidated; |
struct gendisk * bd_disk; |
struct list_head bd_list; |
}; |
/* |
* Use sequence counter to get consistent i_size on 32-bit processors. |
*/ |
#if BITS_PER_LONG==32 && defined(CONFIG_SMP) |
#include <linux/seqlock.h> |
#define __NEED_I_SIZE_ORDERED |
#define i_size_ordered_init(inode) seqcount_init(&inode->i_size_seqcount) |
#else |
#define i_size_ordered_init(inode) do { } while (0) |
#endif |
struct inode { |
struct hlist_node i_hash; |
struct list_head i_list; |
struct list_head i_dentry; |
unsigned long i_ino; |
atomic_t i_count; |
umode_t i_mode; |
unsigned int i_nlink; |
uid_t i_uid; |
gid_t i_gid; |
dev_t i_rdev; |
loff_t i_size; |
struct timespec i_atime; |
struct timespec i_mtime; |
struct timespec i_ctime; |
unsigned int i_blkbits; |
unsigned long i_blksize; |
unsigned long i_version; |
unsigned long i_blocks; |
unsigned short i_bytes; |
spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ |
struct semaphore i_sem; |
struct inode_operations *i_op; |
struct file_operations *i_fop; /* former ->i_op->default_file_ops */ |
struct super_block *i_sb; |
struct file_lock *i_flock; |
struct address_space *i_mapping; |
struct address_space i_data; |
struct dquot *i_dquot[MAXQUOTAS]; |
/* These three should probably be a union */ |
struct list_head i_devices; |
struct pipe_inode_info *i_pipe; |
struct block_device *i_bdev; |
struct cdev *i_cdev; |
int i_cindex; |
unsigned long i_dnotify_mask; /* Directory notify events */ |
struct dnotify_struct *i_dnotify; /* for directory notifications */ |
unsigned long i_state; |
unsigned int i_flags; |
unsigned char i_sock; |
atomic_t i_writecount; |
void *i_security; |
__u32 i_generation; |
union { |
void *generic_ip; |
} u; |
#ifdef __NEED_I_SIZE_ORDERED |
seqcount_t i_size_seqcount; |
#endif |
}; |
/* |
* NOTE: in a 32bit arch with a preemptable kernel and |
* an UP compile the i_size_read/write must be atomic |
* with respect to the local cpu (unlike with preempt disabled), |
* but they don't need to be atomic with respect to other cpus like in |
* true SMP (so they need either to either locally disable irq around |
* the read or for example on x86 they can be still implemented as a |
* cmpxchg8b without the need of the lock prefix). For SMP compiles |
* and 64bit archs it makes no difference if preempt is enabled or not. |
*/ |
static inline loff_t i_size_read(struct inode *inode) |
{ |
#if BITS_PER_LONG==32 && defined(CONFIG_SMP) |
loff_t i_size; |
unsigned int seq; |
do { |
seq = read_seqcount_begin(&inode->i_size_seqcount); |
i_size = inode->i_size; |
} while (read_seqcount_retry(&inode->i_size_seqcount, seq)); |
return i_size; |
#elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPT) |
loff_t i_size; |
preempt_disable(); |
i_size = inode->i_size; |
preempt_enable(); |
return i_size; |
#else |
return inode->i_size; |
#endif |
} |
static inline void i_size_write(struct inode *inode, loff_t i_size) |
{ |
#if BITS_PER_LONG==32 && defined(CONFIG_SMP) |
write_seqcount_begin(&inode->i_size_seqcount); |
inode->i_size = i_size; |
write_seqcount_end(&inode->i_size_seqcount); |
#elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPT) |
preempt_disable(); |
inode->i_size = i_size; |
preempt_enable(); |
#else |
inode->i_size = i_size; |
#endif |
} |
static inline unsigned iminor(struct inode *inode) |
{ |
return MINOR(inode->i_rdev); |
} |
static inline unsigned imajor(struct inode *inode) |
{ |
return MAJOR(inode->i_rdev); |
} |
struct fown_struct { |
rwlock_t lock; /* protects pid, uid, euid fields */ |
int pid; /* pid or -pgrp where SIGIO should be sent */ |
uid_t uid, euid; /* uid/euid of process setting the owner */ |
int signum; /* posix.1b rt signal to be delivered on IO */ |
void *security; |
}; |
/* |
* Track a single file's readahead state |
*/ |
struct file_ra_state { |
unsigned long start; /* Current window */ |
unsigned long size; |
unsigned long next_size; /* Next window size */ |
unsigned long prev_page; /* Cache last read() position */ |
unsigned long ahead_start; /* Ahead window */ |
unsigned long ahead_size; |
unsigned long ra_pages; /* Maximum readahead window */ |
unsigned long mmap_hit; /* Cache hit stat for mmap accesses */ |
unsigned long mmap_miss; /* Cache miss stat for mmap accesses */ |
}; |
struct file { |
struct list_head f_list; |
struct dentry *f_dentry; |
struct vfsmount *f_vfsmnt; |
struct file_operations *f_op; |
atomic_t f_count; |
unsigned int f_flags; |
mode_t f_mode; |
loff_t f_pos; |
struct fown_struct f_owner; |
unsigned int f_uid, f_gid; |
int f_error; |
struct file_ra_state f_ra; |
unsigned long f_version; |
void *f_security; |
/* needed for tty driver, and maybe others */ |
void *private_data; |
/* Used by fs/eventpoll.c to link all the hooks to this file */ |
struct list_head f_ep_links; |
spinlock_t f_ep_lock; |
}; |
extern spinlock_t files_lock; |
#define file_list_lock() spin_lock(&files_lock); |
#define file_list_unlock() spin_unlock(&files_lock); |
#define get_file(x) atomic_inc(&(x)->f_count) |
#define file_count(x) atomic_read(&(x)->f_count) |
/* Initialize and open a private file and allocate its security structure. */ |
extern int open_private_file(struct file *, struct dentry *, int); |
/* Release a private file and free its security structure. */ |
extern void close_private_file(struct file *file); |
#define MAX_NON_LFS ((1UL<<31) - 1) |
/* Page cache limit. The filesystems should put that into their s_maxbytes |
limits, otherwise bad things can happen in VM. */ |
#if BITS_PER_LONG==32 |
#define MAX_LFS_FILESIZE (((u64)PAGE_CACHE_SIZE << (BITS_PER_LONG-1))-1) |
#elif BITS_PER_LONG==64 |
#define MAX_LFS_FILESIZE 0x7fffffffffffffff |
#endif |
#define FL_POSIX 1 |
#define FL_FLOCK 2 |
#define FL_ACCESS 8 /* not trying to lock, just looking */ |
#define FL_LOCKD 16 /* lock held by rpc.lockd */ |
#define FL_LEASE 32 /* lease held on this file */ |
#define FL_SLEEP 128 /* A blocking lock */ |
/* |
* The POSIX file lock owner is determined by |
* the "struct files_struct" in the thread group |
* (or NULL for no owner - BSD locks). |
* |
* Lockd stuffs a "host" pointer into this. |
*/ |
typedef struct files_struct *fl_owner_t; |
/* that will die - we need it for nfs_lock_info */ |
#include <linux/nfs_fs_i.h> |
struct file_lock { |
struct file_lock *fl_next; /* singly linked list for this inode */ |
struct list_head fl_link; /* doubly linked list of all locks */ |
struct list_head fl_block; /* circular list of blocked processes */ |
fl_owner_t fl_owner; |
unsigned int fl_pid; |
wait_queue_head_t fl_wait; |
struct file *fl_file; |
unsigned char fl_flags; |
unsigned char fl_type; |
loff_t fl_start; |
loff_t fl_end; |
void (*fl_notify)(struct file_lock *); /* unblock callback */ |
void (*fl_insert)(struct file_lock *); /* lock insertion callback */ |
void (*fl_remove)(struct file_lock *); /* lock removal callback */ |
struct fasync_struct * fl_fasync; /* for lease break notifications */ |
unsigned long fl_break_time; /* for nonblocking lease breaks */ |
union { |
struct nfs_lock_info nfs_fl; |
} fl_u; |
}; |
/* The following constant reflects the upper bound of the file/locking space */ |
#ifndef OFFSET_MAX |
#define INT_LIMIT(x) (~((x)1 << (sizeof(x)*8 - 1))) |
#define OFFSET_MAX INT_LIMIT(loff_t) |
#define OFFT_OFFSET_MAX INT_LIMIT(off_t) |
#endif |
extern struct list_head file_lock_list; |
#include <linux/fcntl.h> |
extern int fcntl_getlk(struct file *, struct flock __user *); |
extern int fcntl_setlk(struct file *, unsigned int, struct flock __user *); |
#if BITS_PER_LONG == 32 |
extern int fcntl_getlk64(struct file *, struct flock64 __user *); |
extern int fcntl_setlk64(struct file *, unsigned int, struct flock64 __user *); |
#endif |
extern void send_sigio(struct fown_struct *fown, int fd, int band); |
extern int fcntl_setlease(unsigned int fd, struct file *filp, long arg); |
extern int fcntl_getlease(struct file *filp); |
/* fs/locks.c */ |
extern void locks_init_lock(struct file_lock *); |
extern void locks_copy_lock(struct file_lock *, struct file_lock *); |
extern void locks_remove_posix(struct file *, fl_owner_t); |
extern void locks_remove_flock(struct file *); |
extern struct file_lock *posix_test_lock(struct file *, struct file_lock *); |
extern int posix_lock_file(struct file *, struct file_lock *); |
extern void posix_block_lock(struct file_lock *, struct file_lock *); |
extern void posix_unblock_lock(struct file *, struct file_lock *); |
extern int posix_locks_deadlock(struct file_lock *, struct file_lock *); |
extern int __break_lease(struct inode *inode, unsigned int flags); |
extern void lease_get_mtime(struct inode *, struct timespec *time); |
extern int lock_may_read(struct inode *, loff_t start, unsigned long count); |
extern int lock_may_write(struct inode *, loff_t start, unsigned long count); |
struct fasync_struct { |
int magic; |
int fa_fd; |
struct fasync_struct *fa_next; /* singly linked list */ |
struct file *fa_file; |
}; |
#define FASYNC_MAGIC 0x4601 |
/* SMP safe fasync helpers: */ |
extern int fasync_helper(int, struct file *, int, struct fasync_struct **); |
/* can be called from interrupts */ |
extern void kill_fasync(struct fasync_struct **, int, int); |
/* only for net: no internal synchronization */ |
extern void __kill_fasync(struct fasync_struct *, int, int); |
extern int f_setown(struct file *filp, unsigned long arg, int force); |
extern void f_delown(struct file *filp); |
extern int send_sigurg(struct fown_struct *fown); |
/* |
* Umount options |
*/ |
#define MNT_FORCE 0x00000001 /* Attempt to forcibily umount */ |
#define MNT_DETACH 0x00000002 /* Just detach from the tree */ |
extern struct list_head super_blocks; |
extern spinlock_t sb_lock; |
#define sb_entry(list) list_entry((list), struct super_block, s_list) |
#define S_BIAS (1<<30) |
struct super_block { |
struct list_head s_list; /* Keep this first */ |
dev_t s_dev; /* search index; _not_ kdev_t */ |
unsigned long s_blocksize; |
unsigned long s_old_blocksize; |
unsigned char s_blocksize_bits; |
unsigned char s_dirt; |
unsigned long long s_maxbytes; /* Max file size */ |
struct file_system_type *s_type; |
struct super_operations *s_op; |
struct dquot_operations *dq_op; |
struct quotactl_ops *s_qcop; |
struct export_operations *s_export_op; |
unsigned long s_flags; |
unsigned long s_magic; |
struct dentry *s_root; |
struct rw_semaphore s_umount; |
struct semaphore s_lock; |
int s_count; |
int s_syncing; |
int s_need_sync_fs; |
atomic_t s_active; |
void *s_security; |
struct list_head s_dirty; /* dirty inodes */ |
struct list_head s_io; /* parked for writeback */ |
struct hlist_head s_anon; /* anonymous dentries for (nfs) exporting */ |
struct list_head s_files; |
struct block_device *s_bdev; |
struct list_head s_instances; |
struct quota_info s_dquot; /* Diskquota specific options */ |
char s_id[32]; /* Informational name */ |
struct kobject kobj; /* anchor for sysfs */ |
void *s_fs_info; /* Filesystem private info */ |
/* |
* The next field is for VFS *only*. No filesystems have any business |
* even looking at it. You had been warned. |
*/ |
struct semaphore s_vfs_rename_sem; /* Kludge */ |
}; |
/* |
* Superblock locking. |
*/ |
static inline void lock_super(struct super_block * sb) |
{ |
down(&sb->s_lock); |
} |
static inline void unlock_super(struct super_block * sb) |
{ |
up(&sb->s_lock); |
} |
/* |
* VFS helper functions.. |
*/ |
extern int vfs_create(struct inode *, struct dentry *, int, struct nameidata *); |
extern int vfs_mkdir(struct inode *, struct dentry *, int); |
extern int vfs_mknod(struct inode *, struct dentry *, int, dev_t); |
extern int vfs_symlink(struct inode *, struct dentry *, const char *); |
extern int vfs_link(struct dentry *, struct inode *, struct dentry *); |
extern int vfs_rmdir(struct inode *, struct dentry *); |
extern int vfs_unlink(struct inode *, struct dentry *); |
extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *); |
/* |
* File types |
* |
* NOTE! These match bits 12..15 of stat.st_mode |
* (ie "(i_mode >> 12) & 15"). |
*/ |
#define DT_UNKNOWN 0 |
#define DT_FIFO 1 |
#define DT_CHR 2 |
#define DT_DIR 4 |
#define DT_BLK 6 |
#define DT_REG 8 |
#define DT_LNK 10 |
#define DT_SOCK 12 |
#define DT_WHT 14 |
/* |
* This is the "filldir" function type, used by readdir() to let |
* the kernel specify what kind of dirent layout it wants to have. |
* This allows the kernel to read directories into kernel space or |
* to have different dirent layouts depending on the binary type. |
*/ |
typedef int (*filldir_t)(void *, const char *, int, loff_t, ino_t, unsigned); |
struct block_device_operations { |
int (*open) (struct inode *, struct file *); |
int (*release) (struct inode *, struct file *); |
int (*ioctl) (struct inode *, struct file *, unsigned, unsigned long); |
int (*media_changed) (struct gendisk *); |
int (*revalidate_disk) (struct gendisk *); |
struct module *owner; |
}; |
/* |
* "descriptor" for what we're up to with a read for sendfile(). |
* This allows us to use the same read code yet |
* have multiple different users of the data that |
* we read from a file. |
* |
* The simplest case just copies the data to user |
* mode. |
*/ |
typedef struct { |
size_t written; |
size_t count; |
char __user * buf; |
int error; |
} read_descriptor_t; |
typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long); |
/* |
* NOTE: |
* read, write, poll, fsync, readv, writev can be called |
* without the big kernel lock held in all filesystems. |
*/ |
struct file_operations { |
struct module *owner; |
loff_t (*llseek) (struct file *, loff_t, int); |
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); |
ssize_t (*aio_read) (struct kiocb *, char __user *, size_t, loff_t); |
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); |
ssize_t (*aio_write) (struct kiocb *, const char __user *, size_t, loff_t); |
int (*readdir) (struct file *, void *, filldir_t); |
unsigned int (*poll) (struct file *, struct poll_table_struct *); |
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); |
int (*mmap) (struct file *, struct vm_area_struct *); |
int (*open) (struct inode *, struct file *); |
int (*flush) (struct file *); |
int (*release) (struct inode *, struct file *); |
int (*fsync) (struct file *, struct dentry *, int datasync); |
int (*aio_fsync) (struct kiocb *, int datasync); |
int (*fasync) (int, struct file *, int); |
int (*lock) (struct file *, int, struct file_lock *); |
ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *); |
ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *); |
ssize_t (*sendfile) (struct file *, loff_t *, size_t, read_actor_t, void __user *); |
ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int); |
unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); |
}; |
struct inode_operations { |
int (*create) (struct inode *,struct dentry *,int, struct nameidata *); |
struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameidata *); |
int (*link) (struct dentry *,struct inode *,struct dentry *); |
int (*unlink) (struct inode *,struct dentry *); |
int (*symlink) (struct inode *,struct dentry *,const char *); |
int (*mkdir) (struct inode *,struct dentry *,int); |
int (*rmdir) (struct inode *,struct dentry *); |
int (*mknod) (struct inode *,struct dentry *,int,dev_t); |
int (*rename) (struct inode *, struct dentry *, |
struct inode *, struct dentry *); |
int (*readlink) (struct dentry *, char __user *,int); |
int (*follow_link) (struct dentry *, struct nameidata *); |
void (*truncate) (struct inode *); |
int (*permission) (struct inode *, int, struct nameidata *); |
int (*setattr) (struct dentry *, struct iattr *); |
int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); |
int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); |
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t); |
ssize_t (*listxattr) (struct dentry *, char *, size_t); |
int (*removexattr) (struct dentry *, const char *); |
}; |
struct seq_file; |
extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *); |
extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *); |
extern ssize_t vfs_readv(struct file *, const struct iovec __user *, |
unsigned long, loff_t *); |
extern ssize_t vfs_writev(struct file *, const struct iovec __user *, |
unsigned long, loff_t *); |
/* |
* NOTE: write_inode, delete_inode, clear_inode, put_inode can be called |
* without the big kernel lock held in all filesystems. |
*/ |
struct super_operations { |
struct inode *(*alloc_inode)(struct super_block *sb); |
void (*destroy_inode)(struct inode *); |
void (*read_inode) (struct inode *); |
void (*dirty_inode) (struct inode *); |
void (*write_inode) (struct inode *, int); |
void (*put_inode) (struct inode *); |
void (*drop_inode) (struct inode *); |
void (*delete_inode) (struct inode *); |
void (*put_super) (struct super_block *); |
void (*write_super) (struct super_block *); |
int (*sync_fs)(struct super_block *sb, int wait); |
void (*write_super_lockfs) (struct super_block *); |
void (*unlockfs) (struct super_block *); |
int (*statfs) (struct super_block *, struct kstatfs *); |
int (*remount_fs) (struct super_block *, int *, char *); |
void (*clear_inode) (struct inode *); |
void (*umount_begin) (struct super_block *); |
int (*show_options)(struct seq_file *, struct vfsmount *); |
}; |
/* Inode state bits. Protected by inode_lock. */ |
#define I_DIRTY_SYNC 1 /* Not dirty enough for O_DATASYNC */ |
#define I_DIRTY_DATASYNC 2 /* Data-related inode changes pending */ |
#define I_DIRTY_PAGES 4 /* Data-related inode changes pending */ |
#define I_LOCK 8 |
#define I_FREEING 16 |
#define I_CLEAR 32 |
#define I_NEW 64 |
#define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES) |
extern void __mark_inode_dirty(struct inode *, int); |
static inline void mark_inode_dirty(struct inode *inode) |
{ |
__mark_inode_dirty(inode, I_DIRTY); |
} |
static inline void mark_inode_dirty_sync(struct inode *inode) |
{ |
__mark_inode_dirty(inode, I_DIRTY_SYNC); |
} |
/** |
* &export_operations - for nfsd to communicate with file systems |
* decode_fh: decode a file handle fragment and return a &struct dentry |
* encode_fh: encode a file handle fragment from a dentry |
* get_name: find the name for a given inode in a given directory |
* get_parent: find the parent of a given directory |
* get_dentry: find a dentry for the inode given a file handle sub-fragment |
* |
* Description: |
* The export_operations structure provides a means for nfsd to communicate |
* with a particular exported file system - particularly enabling nfsd and |
* the filesystem to co-operate when dealing with file handles. |
* |
* export_operations contains two basic operation for dealing with file handles, |
* decode_fh() and encode_fh(), and allows for some other operations to be defined |
* which standard helper routines use to get specific information from the |
* filesystem. |
* |
* nfsd encodes information use to determine which filesystem a filehandle |
* applies to in the initial part of the file handle. The remainder, termed a |
* file handle fragment, is controlled completely by the filesystem. |
* The standard helper routines assume that this fragment will contain one or two |
* sub-fragments, one which identifies the file, and one which may be used to |
* identify the (a) directory containing the file. |
* |
* In some situations, nfsd needs to get a dentry which is connected into a |
* specific part of the file tree. To allow for this, it passes the function |
* acceptable() together with a @context which can be used to see if the dentry |
* is acceptable. As there can be multiple dentrys for a given file, the filesystem |
* should check each one for acceptability before looking for the next. As soon |
* as an acceptable one is found, it should be returned. |
* |
* decode_fh: |
* @decode_fh is given a &struct super_block (@sb), a file handle fragment (@fh, @fh_len) |
* and an acceptability testing function (@acceptable, @context). It should return |
* a &struct dentry which refers to the same file that the file handle fragment refers |
* to, and which passes the acceptability test. If it cannot, it should return |
* a %NULL pointer if the file was found but no acceptable &dentries were available, or |
* a %ERR_PTR error code indicating why it couldn't be found (e.g. %ENOENT or %ENOMEM). |
* |
* encode_fh: |
* @encode_fh should store in the file handle fragment @fh (using at most @max_len bytes) |
* information that can be used by @decode_fh to recover the file refered to by the |
* &struct dentry @de. If the @connectable flag is set, the encode_fh() should store |
* sufficient information so that a good attempt can be made to find not only |
* the file but also it's place in the filesystem. This typically means storing |
* a reference to de->d_parent in the filehandle fragment. |
* encode_fh() should return the number of bytes stored or a negative error code |
* such as %-ENOSPC |
* |
* get_name: |
* @get_name should find a name for the given @child in the given @parent directory. |
* The name should be stored in the @name (with the understanding that it is already |
* pointing to a a %NAME_MAX+1 sized buffer. get_name() should return %0 on success, |
* a negative error code or error. |
* @get_name will be called without @parent->i_sem held. |
* |
* get_parent: |
* @get_parent should find the parent directory for the given @child which is also |
* a directory. In the event that it cannot be found, or storage space cannot be |
* allocated, a %ERR_PTR should be returned. |
* |
* get_dentry: |
* Given a &super_block (@sb) and a pointer to a file-system specific inode identifier, |
* possibly an inode number, (@inump) get_dentry() should find the identified inode and |
* return a dentry for that inode. |
* Any suitable dentry can be returned including, if necessary, a new dentry created |
* with d_alloc_root. The caller can then find any other extant dentrys by following the |
* d_alias links. If a new dentry was created using d_alloc_root, DCACHE_NFSD_DISCONNECTED |
* should be set, and the dentry should be d_rehash()ed. |
* |
* If the inode cannot be found, either a %NULL pointer or an %ERR_PTR code can be returned. |
* The @inump will be whatever was passed to nfsd_find_fh_dentry() in either the |
* @obj or @parent parameters. |
* |
* Locking rules: |
* get_parent is called with child->d_inode->i_sem down |
* get_name is not (which is possibly inconsistent) |
*/ |
struct export_operations { |
struct dentry *(*decode_fh)(struct super_block *sb, __u32 *fh, int fh_len, int fh_type, |
int (*acceptable)(void *context, struct dentry *de), |
void *context); |
int (*encode_fh)(struct dentry *de, __u32 *fh, int *max_len, |
int connectable); |
/* the following are only called from the filesystem itself */ |
int (*get_name)(struct dentry *parent, char *name, |
struct dentry *child); |
struct dentry * (*get_parent)(struct dentry *child); |
struct dentry * (*get_dentry)(struct super_block *sb, void *inump); |
/* This is set by the exporting module to a standard helper */ |
struct dentry * (*find_exported_dentry)( |
struct super_block *sb, void *obj, void *parent, |
int (*acceptable)(void *context, struct dentry *de), |
void *context); |
}; |
struct file_system_type { |
const char *name; |
int fs_flags; |
struct super_block *(*get_sb) (struct file_system_type *, int, |
const char *, void *); |
void (*kill_sb) (struct super_block *); |
struct module *owner; |
struct file_system_type * next; |
struct list_head fs_supers; |
}; |
struct super_block *get_sb_bdev(struct file_system_type *fs_type, |
int flags, const char *dev_name, void *data, |
int (*fill_super)(struct super_block *, void *, int)); |
struct super_block *get_sb_single(struct file_system_type *fs_type, |
int flags, void *data, |
int (*fill_super)(struct super_block *, void *, int)); |
struct super_block *get_sb_nodev(struct file_system_type *fs_type, |
int flags, void *data, |
int (*fill_super)(struct super_block *, void *, int)); |
void generic_shutdown_super(struct super_block *sb); |
void kill_block_super(struct super_block *sb); |
void kill_anon_super(struct super_block *sb); |
void kill_litter_super(struct super_block *sb); |
void deactivate_super(struct super_block *sb); |
int set_anon_super(struct super_block *s, void *data); |
struct super_block *sget(struct file_system_type *type, |
int (*test)(struct super_block *,void *), |
int (*set)(struct super_block *,void *), |
void *data); |
struct super_block *get_sb_pseudo(struct file_system_type *, char *, |
struct super_operations *ops, unsigned long); |
/* Alas, no aliases. Too much hassle with bringing module.h everywhere */ |
#define fops_get(fops) \ |
(((fops) && try_module_get((fops)->owner) ? (fops) : NULL)) |
#define fops_put(fops) \ |
do { if (fops) module_put((fops)->owner); } while(0) |
extern int register_filesystem(struct file_system_type *); |
extern int unregister_filesystem(struct file_system_type *); |
extern struct vfsmount *kern_mount(struct file_system_type *); |
extern int may_umount(struct vfsmount *); |
extern long do_mount(char *, char *, char *, unsigned long, void *); |
extern int vfs_statfs(struct super_block *, struct kstatfs *); |
/* Return value for VFS lock functions - tells locks.c to lock conventionally |
* REALLY kosha for root NFS and nfs_lock |
*/ |
#define LOCK_USE_CLNT 1 |
#define FLOCK_VERIFY_READ 1 |
#define FLOCK_VERIFY_WRITE 2 |
extern int locks_mandatory_locked(struct inode *); |
extern int locks_mandatory_area(int, struct inode *, struct file *, loff_t, size_t); |
/* |
* Candidates for mandatory locking have the setgid bit set |
* but no group execute bit - an otherwise meaningless combination. |
*/ |
#define MANDATORY_LOCK(inode) \ |
(IS_MANDLOCK(inode) && ((inode)->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID) |
static inline int locks_verify_locked(struct inode *inode) |
{ |
if (MANDATORY_LOCK(inode)) |
return locks_mandatory_locked(inode); |
return 0; |
} |
static inline int locks_verify_area(int read_write, struct inode *inode, |
struct file *filp, loff_t offset, |
size_t count) |
{ |
if (inode->i_flock && MANDATORY_LOCK(inode)) |
return locks_mandatory_area(read_write, inode, filp, offset, count); |
return 0; |
} |
static inline int locks_verify_truncate(struct inode *inode, |
struct file *filp, |
loff_t size) |
{ |
if (inode->i_flock && MANDATORY_LOCK(inode)) |
return locks_mandatory_area( |
FLOCK_VERIFY_WRITE, inode, filp, |
size < inode->i_size ? size : inode->i_size, |
(size < inode->i_size ? inode->i_size - size |
: size - inode->i_size) |
); |
return 0; |
} |
static inline int break_lease(struct inode *inode, unsigned int mode) |
{ |
if (inode->i_flock) |
return __break_lease(inode, mode); |
return 0; |
} |
/* fs/open.c */ |
asmlinkage long sys_open(const char __user *, int, int); |
asmlinkage long sys_close(unsigned int); /* yes, it's really unsigned */ |
extern int do_truncate(struct dentry *, loff_t start); |
extern struct file *filp_open(const char *, int, int); |
extern struct file * dentry_open(struct dentry *, struct vfsmount *, int); |
extern int filp_close(struct file *, fl_owner_t id); |
extern char * getname(const char __user *); |
/* fs/dcache.c */ |
extern void vfs_caches_init(unsigned long); |
#define __getname() kmem_cache_alloc(names_cachep, SLAB_KERNEL) |
#define putname(name) kmem_cache_free(names_cachep, (void *)(name)) |
enum {BDEV_FILE, BDEV_SWAP, BDEV_FS, BDEV_RAW}; |
extern int register_blkdev(unsigned int, const char *); |
extern int unregister_blkdev(unsigned int, const char *); |
extern struct block_device *bdget(dev_t); |
extern int bd_acquire(struct inode *inode); |
extern void bd_forget(struct inode *inode); |
extern void bdput(struct block_device *); |
extern int blkdev_open(struct inode *, struct file *); |
extern int blkdev_close(struct inode *, struct file *); |
extern struct block_device *open_by_devnum(dev_t, unsigned, int); |
extern struct file_operations def_blk_fops; |
extern struct address_space_operations def_blk_aops; |
extern struct file_operations def_chr_fops; |
extern struct file_operations bad_sock_fops; |
extern struct file_operations def_fifo_fops; |
extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long); |
extern int blkdev_ioctl(struct inode *, struct file *, unsigned, unsigned long); |
extern int blkdev_get(struct block_device *, mode_t, unsigned, int); |
extern int blkdev_put(struct block_device *, int); |
extern int bd_claim(struct block_device *, void *); |
extern void bd_release(struct block_device *); |
extern void blk_run_queues(void); |
/* fs/char_dev.c */ |
extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, char *); |
extern int register_chrdev_region(dev_t, unsigned, char *); |
extern int register_chrdev(unsigned int, const char *, |
struct file_operations *); |
extern int unregister_chrdev(unsigned int, const char *); |
extern void unregister_chrdev_region(dev_t, unsigned); |
extern int chrdev_open(struct inode *, struct file *); |
/* fs/block_dev.c */ |
#define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */ |
extern const char *__bdevname(dev_t, char *buffer); |
extern const char *bdevname(struct block_device *bdev, char *buffer); |
extern struct block_device *lookup_bdev(const char *); |
extern struct block_device *open_bdev_excl(const char *, int, int, void *); |
extern void close_bdev_excl(struct block_device *, int); |
extern void init_special_inode(struct inode *, umode_t, dev_t); |
/* Invalid inode operations -- fs/bad_inode.c */ |
extern void make_bad_inode(struct inode *); |
extern int is_bad_inode(struct inode *); |
extern struct file_operations read_fifo_fops; |
extern struct file_operations write_fifo_fops; |
extern struct file_operations rdwr_fifo_fops; |
extern struct file_operations read_pipe_fops; |
extern struct file_operations write_pipe_fops; |
extern struct file_operations rdwr_pipe_fops; |
extern int fs_may_remount_ro(struct super_block *); |
/* |
* return READ, READA, or WRITE |
*/ |
#define bio_rw(bio) ((bio)->bi_rw & (RW_MASK | RWA_MASK)) |
/* |
* return data direction, READ or WRITE |
*/ |
#define bio_data_dir(bio) ((bio)->bi_rw & 1) |
extern int check_disk_change(struct block_device *); |
extern int invalidate_inodes(struct super_block *); |
extern int __invalidate_device(struct block_device *, int); |
extern int invalidate_partition(struct gendisk *, int); |
unsigned long invalidate_mapping_pages(struct address_space *mapping, |
pgoff_t start, pgoff_t end); |
unsigned long invalidate_inode_pages(struct address_space *mapping); |
static inline void invalidate_remote_inode(struct inode *inode) |
{ |
if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || |
S_ISLNK(inode->i_mode)) |
invalidate_inode_pages(inode->i_mapping); |
} |
extern void invalidate_inode_pages2(struct address_space *mapping); |
extern void write_inode_now(struct inode *, int); |
extern int filemap_fdatawrite(struct address_space *); |
extern int filemap_flush(struct address_space *); |
extern int filemap_fdatawait(struct address_space *); |
extern void sync_supers(void); |
extern void sync_filesystems(int wait); |
extern void emergency_sync(void); |
extern void emergency_remount(void); |
extern int do_remount_sb(struct super_block *sb, int flags, |
void *data, int force); |
extern sector_t bmap(struct inode *, sector_t); |
extern int setattr_mask(unsigned int); |
extern int notify_change(struct dentry *, struct iattr *); |
extern int permission(struct inode *, int, struct nameidata *); |
extern int vfs_permission(struct inode *, int); |
extern int get_write_access(struct inode *); |
extern int deny_write_access(struct file *); |
static inline void put_write_access(struct inode * inode) |
{ |
atomic_dec(&inode->i_writecount); |
} |
static inline void allow_write_access(struct file *file) |
{ |
if (file) |
atomic_inc(&file->f_dentry->d_inode->i_writecount); |
} |
extern int do_pipe(int *); |
extern int open_namei(const char *, int, int, struct nameidata *); |
extern int may_open(struct nameidata *, int, int); |
extern int kernel_read(struct file *, unsigned long, char *, unsigned long); |
extern struct file * open_exec(const char *); |
/* fs/dcache.c -- generic fs support functions */ |
extern int is_subdir(struct dentry *, struct dentry *); |
extern ino_t find_inode_number(struct dentry *, struct qstr *); |
#include <linux/err.h> |
/* needed for stackable file system support */ |
extern loff_t default_llseek(struct file *file, loff_t offset, int origin); |
extern void inode_init_once(struct inode *); |
extern void iput(struct inode *); |
extern struct inode * igrab(struct inode *); |
extern ino_t iunique(struct super_block *, ino_t); |
extern int inode_needs_sync(struct inode *inode); |
extern void generic_delete_inode(struct inode *inode); |
extern struct inode *ilookup5(struct super_block *sb, unsigned long hashval, |
int (*test)(struct inode *, void *), void *data); |
extern struct inode *ilookup(struct super_block *sb, unsigned long ino); |
extern struct inode * iget5_locked(struct super_block *, unsigned long, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *); |
extern struct inode * iget_locked(struct super_block *, unsigned long); |
extern void unlock_new_inode(struct inode *); |
static inline struct inode *iget(struct super_block *sb, unsigned long ino) |
{ |
struct inode *inode = iget_locked(sb, ino); |
if (inode && (inode->i_state & I_NEW)) { |
sb->s_op->read_inode(inode); |
unlock_new_inode(inode); |
} |
return inode; |
} |
extern void __iget(struct inode * inode); |
extern void clear_inode(struct inode *); |
extern void destroy_inode(struct inode *); |
extern struct inode *new_inode(struct super_block *); |
extern void remove_suid(struct dentry *); |
extern void __insert_inode_hash(struct inode *, unsigned long hashval); |
extern void remove_inode_hash(struct inode *); |
static inline void insert_inode_hash(struct inode *inode) { |
__insert_inode_hash(inode, inode->i_ino); |
} |
extern struct file * get_empty_filp(void); |
extern void file_move(struct file *f, struct list_head *list); |
extern void file_kill(struct file *f); |
struct bio; |
extern int submit_bio(int, struct bio *); |
extern int bdev_read_only(struct block_device *); |
extern int set_blocksize(struct block_device *, int); |
extern int sb_set_blocksize(struct super_block *, int); |
extern int sb_min_blocksize(struct super_block *, int); |
extern int generic_file_mmap(struct file *, struct vm_area_struct *); |
extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *); |
extern int file_read_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size); |
extern int file_send_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size); |
extern ssize_t generic_file_read(struct file *, char __user *, size_t, loff_t *); |
int generic_write_checks(struct inode *inode, struct file *file, |
loff_t *pos, size_t *count, int isblk); |
extern ssize_t generic_file_write(struct file *, const char __user *, size_t, loff_t *); |
extern ssize_t generic_file_aio_read(struct kiocb *, char __user *, size_t, loff_t); |
extern ssize_t __generic_file_aio_read(struct kiocb *, const struct iovec *, unsigned long, loff_t *); |
extern ssize_t generic_file_aio_write(struct kiocb *, const char __user *, size_t, loff_t); |
extern ssize_t generic_file_aio_write_nolock(struct kiocb *, const struct iovec *, |
unsigned long, loff_t *); |
extern ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos); |
extern ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos); |
ssize_t generic_file_write_nolock(struct file *file, const struct iovec *iov, |
unsigned long nr_segs, loff_t *ppos); |
extern ssize_t generic_file_sendfile(struct file *, loff_t *, size_t, read_actor_t, void __user *); |
extern void do_generic_mapping_read(struct address_space *, struct file_ra_state *, struct file *, |
loff_t *, read_descriptor_t *, read_actor_t); |
extern void |
file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping); |
extern ssize_t generic_file_direct_IO(int rw, struct kiocb *iocb, |
const struct iovec *iov, loff_t offset, unsigned long nr_segs); |
extern int blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, |
struct block_device *bdev, const struct iovec *iov, loff_t offset, |
unsigned long nr_segs, get_blocks_t *get_blocks, dio_iodone_t *end_io); |
extern ssize_t generic_file_readv(struct file *filp, const struct iovec *iov, |
unsigned long nr_segs, loff_t *ppos); |
ssize_t generic_file_writev(struct file *filp, const struct iovec *iov, |
unsigned long nr_segs, loff_t *ppos); |
extern loff_t no_llseek(struct file *file, loff_t offset, int origin); |
extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin); |
extern loff_t remote_llseek(struct file *file, loff_t offset, int origin); |
extern int generic_file_open(struct inode * inode, struct file * filp); |
static inline void do_generic_file_read(struct file * filp, loff_t *ppos, |
read_descriptor_t * desc, |
read_actor_t actor) |
{ |
do_generic_mapping_read(filp->f_dentry->d_inode->i_mapping, |
&filp->f_ra, |
filp, |
ppos, |
desc, |
actor); |
} |
extern struct file_operations generic_ro_fops; |
#define special_file(m) (S_ISCHR(m)||S_ISBLK(m)||S_ISFIFO(m)||S_ISSOCK(m)) |
extern int vfs_readlink(struct dentry *, char __user *, int, const char *); |
extern int vfs_follow_link(struct nameidata *, const char *); |
extern int page_readlink(struct dentry *, char __user *, int); |
extern int page_follow_link(struct dentry *, struct nameidata *); |
extern int page_symlink(struct inode *inode, const char *symname, int len); |
extern struct inode_operations page_symlink_inode_operations; |
extern void generic_fillattr(struct inode *, struct kstat *); |
extern int vfs_getattr(struct vfsmount *, struct dentry *, struct kstat *); |
void inode_add_bytes(struct inode *inode, loff_t bytes); |
void inode_sub_bytes(struct inode *inode, loff_t bytes); |
loff_t inode_get_bytes(struct inode *inode); |
void inode_set_bytes(struct inode *inode, loff_t bytes); |
extern int vfs_readdir(struct file *, filldir_t, void *); |
extern int vfs_stat(char __user *, struct kstat *); |
extern int vfs_lstat(char __user *, struct kstat *); |
extern int vfs_fstat(unsigned int, struct kstat *); |
extern struct file_system_type *get_fs_type(const char *name); |
extern struct super_block *get_super(struct block_device *); |
extern struct super_block *user_get_super(dev_t); |
extern void drop_super(struct super_block *sb); |
extern int dcache_dir_open(struct inode *, struct file *); |
extern int dcache_dir_close(struct inode *, struct file *); |
extern loff_t dcache_dir_lseek(struct file *, loff_t, int); |
extern int dcache_readdir(struct file *, void *, filldir_t); |
extern int simple_getattr(struct vfsmount *, struct dentry *, struct kstat *); |
extern int simple_statfs(struct super_block *, struct kstatfs *); |
extern int simple_link(struct dentry *, struct inode *, struct dentry *); |
extern int simple_unlink(struct inode *, struct dentry *); |
extern int simple_rmdir(struct inode *, struct dentry *); |
extern int simple_rename(struct inode *, struct dentry *, struct inode *, struct dentry *); |
extern int simple_sync_file(struct file *, struct dentry *, int); |
extern int simple_empty(struct dentry *); |
extern int simple_readpage(struct file *file, struct page *page); |
extern int simple_prepare_write(struct file *file, struct page *page, |
unsigned offset, unsigned to); |
extern int simple_commit_write(struct file *file, struct page *page, |
unsigned offset, unsigned to); |
extern struct dentry *simple_lookup(struct inode *, struct dentry *, struct nameidata *); |
extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *); |
extern struct file_operations simple_dir_operations; |
extern struct inode_operations simple_dir_inode_operations; |
struct tree_descr { char *name; struct file_operations *ops; int mode; }; |
extern int simple_fill_super(struct super_block *, int, struct tree_descr *); |
extern int simple_pin_fs(char *name, struct vfsmount **mount, int *count); |
extern void simple_release_fs(struct vfsmount **mount, int *count); |
extern int inode_change_ok(struct inode *, struct iattr *); |
extern int inode_setattr(struct inode *, struct iattr *); |
extern void inode_update_time(struct inode *inode, int ctime_too); |
static inline ino_t parent_ino(struct dentry *dentry) |
{ |
ino_t res; |
spin_lock(&dentry->d_lock); |
res = dentry->d_parent->d_inode->i_ino; |
spin_unlock(&dentry->d_lock); |
return res; |
} |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_FS_H */ |
/shark/trunk/drivers/linuxc26/include/linux/isdn_ppp.h |
---|
0,0 → 1,132 |
/* 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 _LINUX_ISDN_PPP_H |
#define _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 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; |
}; |
#ifdef __KERNEL__ |
#include <linux/skbuff.h> |
#include <linux/ppp_defs.h> |
#define DECOMP_ERR_NOMEM (-10) |
/* |
* We need a way for the decompressor to influence the generation of CCP |
* Reset-Requests in a variety of ways. The decompressor is already returning |
* a lot of information (generated skb length, error conditions) so we use |
* another parameter. This parameter is a pointer to a structure which is |
* to be marked valid by the decompressor and only in this case is ever used. |
* Furthermore, the only case where this data is used is when the decom- |
* pressor returns DECOMP_ERROR. |
* |
* We use this same struct for the reset entry of the compressor to commu- |
* nicate to its caller how to deal with sending of a Reset Ack. In this |
* case, expra is not used, but other options still apply (suppressing |
* sending with rsend, appending arbitrary data, etc). |
*/ |
#define IPPP_RESET_MAXDATABYTES 32 |
struct isdn_ppp_resetparams { |
unsigned char valid:1; /* rw Is this structure filled at all ? */ |
unsigned char rsend:1; /* rw Should we send one at all ? */ |
unsigned char idval:1; /* rw Is the id field valid ? */ |
unsigned char dtval:1; /* rw Is the data field valid ? */ |
unsigned char expra:1; /* rw Is an Ack expected for this Req ? */ |
unsigned char id; /* wo Send CCP ResetReq with this id */ |
unsigned short maxdlen; /* ro Max bytes to be stored in data field */ |
unsigned short dlen; /* rw Bytes stored in data field */ |
unsigned char *data; /* wo Data for ResetReq info field */ |
}; |
/* |
* this is an 'old friend' from ppp-comp.h under a new name |
* check the original include for more information |
*/ |
struct isdn_ppp_compressor { |
struct module *owner; |
struct list_head list; |
int num; /* CCP compression protocol number */ |
void *(*alloc) (struct isdn_ppp_comp_data *); |
void (*free) (void *state); |
int (*init) (void *state, struct isdn_ppp_comp_data *, |
int unit,int debug); |
/* The reset entry needs to get more exact information about the |
ResetReq or ResetAck it was called with. The parameters are |
obvious. If reset is called without a Req or Ack frame which |
could be handed into it, code MUST be set to 0. Using rsparm, |
the reset entry can control if and how a ResetAck is returned. */ |
void (*reset) (void *state, unsigned char code, unsigned char id, |
unsigned char *data, unsigned len, |
struct isdn_ppp_resetparams *rsparm); |
int (*compress) (void *state, struct sk_buff *in, |
struct sk_buff *skb_out, int proto); |
int (*decompress) (void *state,struct sk_buff *in, |
struct sk_buff *skb_out, |
struct isdn_ppp_resetparams *rsparm); |
void (*incomp) (void *state, struct sk_buff *in,int proto); |
void (*stat) (void *state, struct compstat *stats); |
}; |
extern int isdn_ppp_register_compressor(struct isdn_ppp_compressor *); |
extern int isdn_ppp_unregister_compressor(struct isdn_ppp_compressor *); |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_ISDN_PPP_H */ |
/shark/trunk/drivers/linuxc26/include/linux/stringify.h |
---|
0,0 → 1,12 |
#ifndef __LINUX_STRINGIFY_H |
#define __LINUX_STRINGIFY_H |
/* Indirect stringification. Doing two levels allows the parameter to be a |
* macro itself. For example, compile with -DFOO=bar, __stringify(FOO) |
* converts to "bar". |
*/ |
#define __stringify_1(x) #x |
#define __stringify(x) __stringify_1(x) |
#endif /* !__LINUX_STRINGIFY_H */ |
/shark/trunk/drivers/linuxc26/include/linux/atmdev.h |
---|
0,0 → 1,476 |
/* atmdev.h - ATM device driver declarations and various related items */ |
/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */ |
#ifndef LINUX_ATMDEV_H |
#define LINUX_ATMDEV_H |
#include <linux/config.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 atm_sk(__sk) ((struct atm_vcc *)(__sk)->sk_protinfo) |
#define ATM_SD(s) (atm_sk((s)->sk)) |
#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_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 */ |
/* |
* 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 *buffer; |
}; |
/* for ATM_GETCIRANGE / ATM_SETCIRANGE */ |
#define ATM_CI_MAX -1 /* use maximum range of VPI/VCI */ |
struct atm_cirange { |
char vpi_bits; /* 1..8, ATM_CI_MAX (-1) for maximum */ |
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" |
#ifndef __KERNEL__ |
#undef __AAL_STAT_ITEMS |
#else |
#include <linux/wait.h> /* wait_queue_head_t */ |
#include <linux/time.h> /* struct timeval */ |
#include <linux/net.h> |
#include <linux/skbuff.h> /* struct sk_buff */ |
#include <linux/uio.h> |
#include <net/sock.h> |
#include <asm/atomic.h> |
#ifdef CONFIG_PROC_FS |
#include <linux/proc_fs.h> |
extern struct proc_dir_entry *atm_proc_root; |
#endif |
struct k_atm_aal_stats { |
#define __HANDLE_ITEM(i) atomic_t i |
__AAL_STAT_ITEMS |
#undef __HANDLE_ITEM |
}; |
struct k_atm_dev_stats { |
struct k_atm_aal_stats aal0; |
struct k_atm_aal_stats aal34; |
struct k_atm_aal_stats aal5; |
}; |
enum { |
ATM_VF_ADDR, /* Address is in use. Set by anybody, cleared |
by device driver. */ |
ATM_VF_READY, /* VC is ready to transfer data. Set by device |
driver, cleared by anybody. */ |
ATM_VF_PARTIAL, /* resources are bound to PVC (partial PVC |
setup), controlled by socket layer */ |
ATM_VF_REGIS, /* registered with demon, controlled by SVC |
socket layer */ |
ATM_VF_BOUND, /* local SAP is set, controlled by SVC socket |
layer */ |
ATM_VF_RELEASED, /* demon has indicated/requested release, |
controlled by SVC socket layer */ |
ATM_VF_HASQOS, /* QOS parameters have been set */ |
ATM_VF_LISTEN, /* socket is used for listening */ |
ATM_VF_META, /* SVC socket isn't used for normal data |
traffic and doesn't depend on signaling |
to be available */ |
ATM_VF_SESSION, /* VCC is p2mp session control descriptor */ |
ATM_VF_HASSAP, /* SAP has been set */ |
ATM_VF_CLOSE, /* asynchronous close - treat like VF_RELEASED*/ |
ATM_VF_WAITING, /* waiting for reply from sigd */ |
ATM_VF_IS_CLIP, /* in use by CLIP protocol */ |
}; |
#define ATM_VF2VS(flags) \ |
(test_bit(ATM_VF_READY,&(flags)) ? ATM_VS_CONNECTED : \ |
test_bit(ATM_VF_RELEASED,&(flags)) ? ATM_VS_CLOSING : \ |
test_bit(ATM_VF_LISTEN,&(flags)) ? ATM_VS_LISTEN : \ |
test_bit(ATM_VF_REGIS,&(flags)) ? ATM_VS_INUSE : \ |
test_bit(ATM_VF_BOUND,&(flags)) ? ATM_VS_BOUND : ATM_VS_IDLE) |
enum { |
ATM_DF_CLOSE, /* close device when last VCC is closed */ |
}; |
#define ATM_PHY_SIG_LOST 0 /* no carrier/light */ |
#define ATM_PHY_SIG_UNKNOWN 1 /* carrier/light status is unknown */ |
#define ATM_PHY_SIG_FOUND 2 /* carrier/light okay */ |
#define ATM_ATMOPT_CLP 1 /* set CLP bit */ |
struct atm_vcc { |
unsigned long flags; /* VCC flags (ATM_VF_*) */ |
short vpi; /* VPI and VCI (types must be equal */ |
/* with sockaddr) */ |
int vci; |
unsigned long aal_options; /* AAL layer options */ |
unsigned long atm_options; /* ATM layer options */ |
struct atm_dev *dev; /* device back pointer */ |
struct atm_qos qos; /* QOS */ |
struct atm_sap sap; /* SAP */ |
void (*push)(struct atm_vcc *vcc,struct sk_buff *skb); |
void (*pop)(struct atm_vcc *vcc,struct sk_buff *skb); /* optional */ |
int (*push_oam)(struct atm_vcc *vcc,void *cell); |
int (*send)(struct atm_vcc *vcc,struct sk_buff *skb); |
void *dev_data; /* per-device data */ |
void *proto_data; /* per-protocol data */ |
struct k_atm_aal_stats *stats; /* pointer to AAL stats group */ |
struct sock *sk; /* socket backpointer */ |
/* SVC part --- may move later ------------------------------------- */ |
short itf; /* interface number */ |
struct sockaddr_atmsvc local; |
struct sockaddr_atmsvc remote; |
/* Multipoint part ------------------------------------------------- */ |
struct atm_vcc *session; /* session VCC descriptor */ |
/* Other stuff ----------------------------------------------------- */ |
void *user_back; /* user backlink - not touched by */ |
/* native ATM stack. Currently used */ |
/* by CLIP and sch_atm. */ |
}; |
struct atm_dev_addr { |
struct sockaddr_atmsvc addr; /* ATM address */ |
struct atm_dev_addr *next; /* next address */ |
}; |
struct atm_dev { |
const struct atmdev_ops *ops; /* device operations; NULL if unused */ |
const struct atmphy_ops *phy; /* PHY operations, may be undefined */ |
/* (NULL) */ |
const char *type; /* device type name */ |
int number; /* device index */ |
void *dev_data; /* per-device data */ |
void *phy_data; /* private PHY date */ |
unsigned long flags; /* device flags (ATM_DF_*) */ |
struct atm_dev_addr *local; /* local ATM addresses */ |
unsigned char esi[ESI_LEN]; /* ESI ("MAC" addr) */ |
struct atm_cirange ci_range; /* VPI/VCI range */ |
struct k_atm_dev_stats stats; /* statistics */ |
char signal; /* signal status (ATM_PHY_SIG_*) */ |
int link_rate; /* link rate (default: OC3) */ |
atomic_t refcnt; /* reference count */ |
spinlock_t lock; /* protect internal members */ |
#ifdef CONFIG_PROC_FS |
struct proc_dir_entry *proc_entry; /* proc entry */ |
char *proc_name; /* proc entry name */ |
#endif |
struct list_head dev_list; /* linkage */ |
}; |
/* OF: send_Oam Flags */ |
#define ATM_OF_IMMED 1 /* Attempt immediate delivery */ |
#define ATM_OF_INRATE 2 /* Attempt in-rate delivery */ |
/* |
* ioctl, getsockopt, and setsockopt are optional and can be set to NULL. |
*/ |
struct atmdev_ops { /* only send is required */ |
void (*dev_close)(struct atm_dev *dev); |
int (*open)(struct atm_vcc *vcc); |
void (*close)(struct atm_vcc *vcc); |
int (*ioctl)(struct atm_dev *dev,unsigned int cmd,void *arg); |
int (*getsockopt)(struct atm_vcc *vcc,int level,int optname, |
void *optval,int optlen); |
int (*setsockopt)(struct atm_vcc *vcc,int level,int optname, |
void *optval,int optlen); |
int (*send)(struct atm_vcc *vcc,struct sk_buff *skb); |
int (*send_oam)(struct atm_vcc *vcc,void *cell,int flags); |
void (*phy_put)(struct atm_dev *dev,unsigned char value, |
unsigned long addr); |
unsigned char (*phy_get)(struct atm_dev *dev,unsigned long addr); |
int (*change_qos)(struct atm_vcc *vcc,struct atm_qos *qos,int flags); |
int (*proc_read)(struct atm_dev *dev,loff_t *pos,char *page); |
struct module *owner; |
}; |
struct atmphy_ops { |
int (*start)(struct atm_dev *dev); |
int (*ioctl)(struct atm_dev *dev,unsigned int cmd,void *arg); |
void (*interrupt)(struct atm_dev *dev); |
int (*stop)(struct atm_dev *dev); |
}; |
struct atm_skb_data { |
struct atm_vcc *vcc; /* ATM VCC */ |
unsigned long atm_options; /* ATM layer options */ |
}; |
#define VCC_HTABLE_SIZE 32 |
extern struct hlist_head vcc_hash[VCC_HTABLE_SIZE]; |
extern rwlock_t vcc_sklist_lock; |
#define ATM_SKB(skb) (((struct atm_skb_data *) (skb)->cb)) |
struct atm_dev *atm_dev_register(const char *type,const struct atmdev_ops *ops, |
int number,unsigned long *flags); /* number == -1: pick first available */ |
struct atm_dev *atm_dev_lookup(int number); |
void atm_dev_deregister(struct atm_dev *dev); |
void shutdown_atm_dev(struct atm_dev *dev); |
void vcc_insert_socket(struct sock *sk); |
void vcc_remove_socket(struct sock *sk); |
/* |
* This is approximately the algorithm used by alloc_skb. |
* |
*/ |
static inline int atm_guess_pdu2truesize(int pdu_size) |
{ |
return ((pdu_size+15) & ~15) + sizeof(struct sk_buff); |
} |
static inline void atm_force_charge(struct atm_vcc *vcc,int truesize) |
{ |
atomic_add(truesize, &vcc->sk->sk_rmem_alloc); |
} |
static inline void atm_return(struct atm_vcc *vcc,int truesize) |
{ |
atomic_sub(truesize, &vcc->sk->sk_rmem_alloc); |
} |
static inline int atm_may_send(struct atm_vcc *vcc,unsigned int size) |
{ |
return (size + atomic_read(&vcc->sk->sk_wmem_alloc)) < |
vcc->sk->sk_sndbuf; |
} |
static inline void atm_dev_hold(struct atm_dev *dev) |
{ |
atomic_inc(&dev->refcnt); |
} |
static inline void atm_dev_put(struct atm_dev *dev) |
{ |
atomic_dec(&dev->refcnt); |
if ((atomic_read(&dev->refcnt) == 1) && |
test_bit(ATM_DF_CLOSE,&dev->flags)) |
shutdown_atm_dev(dev); |
} |
int atm_charge(struct atm_vcc *vcc,int truesize); |
struct sk_buff *atm_alloc_charge(struct atm_vcc *vcc,int pdu_size, |
int gfp_flags); |
int atm_pcr_goal(struct atm_trafprm *tp); |
void vcc_release_async(struct atm_vcc *vcc, int reply); |
struct atm_ioctl { |
struct module *owner; |
/* A module reference is kept if appropriate over this call. |
* Return -ENOIOCTLCMD if you don't handle it. */ |
int (*ioctl)(struct socket *, unsigned int cmd, unsigned long arg); |
struct list_head list; |
}; |
/** |
* register_atm_ioctl - register handler for ioctl operations |
* |
* Special (non-device) handlers of ioctl's should |
* register here. If you're a normal device, you should |
* set .ioctl in your atmdev_ops instead. |
*/ |
void register_atm_ioctl(struct atm_ioctl *); |
/** |
* deregister_atm_ioctl - remove the ioctl handler |
*/ |
void deregister_atm_ioctl(struct atm_ioctl *); |
#endif /* __KERNEL__ */ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/times.h |
---|
0,0 → 1,59 |
#ifndef _LINUX_TIMES_H |
#define _LINUX_TIMES_H |
#ifdef __KERNEL__ |
#include <asm/div64.h> |
#include <asm/types.h> |
#include <asm/param.h> |
#if (HZ % USER_HZ)==0 |
# define jiffies_to_clock_t(x) ((x) / (HZ / USER_HZ)) |
#else |
# define jiffies_to_clock_t(x) ((clock_t) jiffies_64_to_clock_t((u64) x)) |
#endif |
static inline unsigned long clock_t_to_jiffies(unsigned long x) |
{ |
#if (HZ % USER_HZ)==0 |
if (x >= ~0UL / (HZ / USER_HZ)) |
return ~0UL; |
return x * (HZ / USER_HZ); |
#else |
u64 jif; |
/* Don't worry about loss of precision here .. */ |
if (x >= ~0UL / HZ * USER_HZ) |
return ~0UL; |
/* .. but do try to contain it here */ |
jif = x * (u64) HZ; |
do_div(jif, USER_HZ); |
return jif; |
#endif |
} |
static inline u64 jiffies_64_to_clock_t(u64 x) |
{ |
#if (HZ % USER_HZ)==0 |
do_div(x, HZ / USER_HZ); |
#else |
/* |
* There are better ways that don't overflow early, |
* but even this doesn't overflow in hundreds of years |
* in 64 bits, so.. |
*/ |
x *= USER_HZ; |
do_div(x, HZ); |
#endif |
return x; |
} |
#endif |
struct tms { |
clock_t tms_utime; |
clock_t tms_stime; |
clock_t tms_cutime; |
clock_t tms_cstime; |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/highuid.h |
---|
0,0 → 1,98 |
#ifndef _LINUX_HIGHUID_H |
#define _LINUX_HIGHUID_H |
#include <linux/config.h> |
#include <linux/types.h> |
/* |
* general notes: |
* |
* CONFIG_UID16 is defined if the given architecture needs to |
* support backwards compatibility for old system calls. |
* |
* kernel code should use uid_t and gid_t at all times when dealing with |
* kernel-private data. |
* |
* old_uid_t and old_gid_t should only be different if CONFIG_UID16 is |
* defined, else the platform should provide dummy typedefs for them |
* such that they are equivalent to __kernel_{u,g}id_t. |
* |
* uid16_t and gid16_t are used on all architectures. (when dealing |
* with structures hard coded to 16 bits, such as in filesystems) |
*/ |
/* |
* This is the "overflow" UID and GID. They are used to signify uid/gid |
* overflow to old programs when they request uid/gid information but are |
* using the old 16 bit interfaces. |
* When you run a libc5 program, it will think that all highuid files or |
* processes are owned by this uid/gid. |
* The idea is that it's better to do so than possibly return 0 in lieu of |
* 65536, etc. |
*/ |
extern int overflowuid; |
extern int overflowgid; |
extern void __bad_uid(void); |
extern void __bad_gid(void); |
#define DEFAULT_OVERFLOWUID 65534 |
#define DEFAULT_OVERFLOWGID 65534 |
#ifdef CONFIG_UID16 |
/* prevent uid mod 65536 effect by returning a default value for high UIDs */ |
#define high2lowuid(uid) ((uid) > 65535 ? (old_uid_t)overflowuid : (old_uid_t)(uid)) |
#define high2lowgid(gid) ((gid) > 65535 ? (old_gid_t)overflowgid : (old_gid_t)(gid)) |
/* |
* -1 is different in 16 bits than it is in 32 bits |
* these macros are used by chown(), setreuid(), ..., |
*/ |
#define low2highuid(uid) ((uid) == (old_uid_t)-1 ? (uid_t)-1 : (uid_t)(uid)) |
#define low2highgid(gid) ((gid) == (old_gid_t)-1 ? (gid_t)-1 : (gid_t)(gid)) |
#define __convert_uid(size, uid) \ |
(size >= sizeof(uid) ? (uid) : high2lowuid(uid)) |
#define __convert_gid(size, gid) \ |
(size >= sizeof(gid) ? (gid) : high2lowgid(gid)) |
#else |
#define __convert_uid(size, uid) (uid) |
#define __convert_gid(size, gid) (gid) |
#endif /* !CONFIG_UID16 */ |
/* uid/gid input should be always 32bit uid_t */ |
#define SET_UID(var, uid) do { (var) = __convert_uid(sizeof(var), (uid)); } while (0) |
#define SET_GID(var, gid) do { (var) = __convert_gid(sizeof(var), (gid)); } while (0) |
/* |
* Everything below this line is needed on all architectures, to deal with |
* filesystems that only store 16 bits of the UID/GID, etc. |
*/ |
/* |
* This is the UID and GID that will get written to disk if a filesystem |
* only supports 16-bit UIDs and the kernel has a high UID/GID to write |
*/ |
extern int fs_overflowuid; |
extern int fs_overflowgid; |
#define DEFAULT_FS_OVERFLOWUID 65534 |
#define DEFAULT_FS_OVERFLOWGID 65534 |
/* |
* Since these macros are used in architectures that only need limited |
* 16-bit UID back compatibility, we won't use old_uid_t and old_gid_t |
*/ |
#define fs_high2lowuid(uid) ((uid) > 65535 ? (uid16_t)fs_overflowuid : (uid16_t)(uid)) |
#define fs_high2lowgid(gid) ((gid) > 65535 ? (gid16_t)fs_overflowgid : (gid16_t)(gid)) |
#define low_16_bits(x) ((x) & 0xFFFF) |
#define high_16_bits(x) (((x) & 0xFFFF0000) >> 16) |
#endif /* _LINUX_HIGHUID_H */ |
/shark/trunk/drivers/linuxc26/include/linux/termios.h |
---|
0,0 → 1,7 |
#ifndef _LINUX_TERMIOS_H |
#define _LINUX_TERMIOS_H |
#include <linux/types.h> |
#include <asm/termios.h> |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/sem.h |
---|
0,0 → 1,147 |
#ifndef _LINUX_SEM_H |
#define _LINUX_SEM_H |
#include <linux/ipc.h> |
#include <asm/atomic.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 *buf; /* buffer for IPC_STAT & IPC_SET */ |
unsigned short *array; /* array for GETALL & SETALL */ |
struct seminfo *__buf; /* buffer for IPC_INFO */ |
void *__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 */ |
#ifdef __KERNEL__ |
/* One semaphore structure for each semaphore in the system. */ |
struct sem { |
int semval; /* current value */ |
int sempid; /* pid of last operation */ |
}; |
/* One sem_array data structure for each set of semaphores in the system. */ |
struct sem_array { |
struct kern_ipc_perm sem_perm; /* permissions .. see ipc.h */ |
time_t sem_otime; /* last semop time */ |
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 long sem_nsems; /* no. of semaphores in array */ |
}; |
/* One queue for each sleeping process in the system. */ |
struct sem_queue { |
struct sem_queue * next; /* next entry in the queue */ |
struct sem_queue ** prev; /* previous entry in the queue, *(q->prev) == q */ |
struct task_struct* sleeper; /* this process */ |
struct sem_undo * undo; /* undo structure */ |
int pid; /* process id of requesting process */ |
int status; /* completion status of operation */ |
struct sem_array * sma; /* semaphore array for operations */ |
int id; /* internal sem id */ |
struct sembuf * sops; /* array of pending operations */ |
int nsops; /* number of operations */ |
}; |
/* Each task has a list of undo requests. They are executed automatically |
* when the process exits. |
*/ |
struct sem_undo { |
struct sem_undo * proc_next; /* next entry on this process */ |
struct sem_undo * id_next; /* next entry on this semaphore set */ |
int semid; /* semaphore set identifier */ |
short * semadj; /* array of adjustments, one per semaphore */ |
}; |
/* sem_undo_list controls shared access to the list of sem_undo structures |
* that may be shared among all a CLONE_SYSVSEM task group. |
*/ |
struct sem_undo_list { |
atomic_t refcnt; |
spinlock_t lock; |
struct sem_undo *proc_list; |
}; |
struct sysv_sem { |
struct sem_undo_list *undo_list; |
}; |
asmlinkage long sys_semget (key_t key, int nsems, int semflg); |
asmlinkage long sys_semop (int semid, struct sembuf __user *sops, unsigned nsops); |
asmlinkage long sys_semctl (int semid, int semnum, int cmd, union semun arg); |
asmlinkage long sys_semtimedop(int semid, struct sembuf __user *sops, |
unsigned nsops, const struct timespec __user *timeout); |
void exit_sem(struct task_struct *p); |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_SEM_H */ |
/shark/trunk/drivers/linuxc26/include/linux/module.h |
---|
0,0 → 1,516 |
#ifndef _LINUX_MODULE_H |
#define _LINUX_MODULE_H |
/* |
* Dynamic loading of modules into the kernel. |
* |
* Rewritten by Richard Henderson <rth@tamu.edu> Dec 1996 |
* Rewritten again by Rusty Russell, 2002 |
*/ |
#include <linux/config.h> |
#include <linux/sched.h> |
#include <linux/spinlock.h> |
#include <linux/list.h> |
#include <linux/stat.h> |
#include <linux/compiler.h> |
#include <linux/cache.h> |
#include <linux/kmod.h> |
#include <linux/elf.h> |
#include <linux/stringify.h> |
#include <asm/local.h> |
#include <asm/module.h> |
/* Not Yet Implemented */ |
#define MODULE_SUPPORTED_DEVICE(name) |
#define print_modules() |
/* v850 toolchain uses a `_' prefix for all user symbols */ |
#ifndef MODULE_SYMBOL_PREFIX |
#define MODULE_SYMBOL_PREFIX "" |
#endif |
#define MODULE_NAME_LEN (64 - sizeof(unsigned long)) |
struct kernel_symbol |
{ |
unsigned long value; |
const char *name; |
}; |
struct modversion_info |
{ |
unsigned long crc; |
char name[MODULE_NAME_LEN]; |
}; |
/* These are either module local, or the kernel's dummy ones. */ |
extern int init_module(void); |
extern void cleanup_module(void); |
/* Archs provide a method of finding the correct exception table. */ |
struct exception_table_entry; |
const struct exception_table_entry * |
search_extable(const struct exception_table_entry *first, |
const struct exception_table_entry *last, |
unsigned long value); |
#ifdef MODULE |
#define ___module_cat(a,b) __mod_ ## a ## b |
#define __module_cat(a,b) ___module_cat(a,b) |
#define __MODULE_INFO(tag, name, info) \ |
static const char __module_cat(name,__LINE__)[] \ |
__attribute__((section(".modinfo"),unused)) = __stringify(tag) "=" info |
#define MODULE_GENERIC_TABLE(gtype,name) \ |
extern const struct gtype##_id __mod_##gtype##_table \ |
__attribute__ ((unused, alias(__stringify(name)))) |
#define THIS_MODULE (&__this_module) |
#else /* !MODULE */ |
#define MODULE_GENERIC_TABLE(gtype,name) |
#define __MODULE_INFO(tag, name, info) |
#define THIS_MODULE ((struct module *)0) |
#endif |
/* Generic info of form tag = "info" */ |
#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info) |
/* For userspace: you can also call me... */ |
#define MODULE_ALIAS(_alias) MODULE_INFO(alias, _alias) |
/* |
* The following license idents are currently accepted as indicating free |
* software modules |
* |
* "GPL" [GNU Public License v2 or later] |
* "GPL v2" [GNU Public License v2] |
* "GPL and additional rights" [GNU Public License v2 rights and more] |
* "Dual BSD/GPL" [GNU Public License v2 |
* or BSD license choice] |
* "Dual MPL/GPL" [GNU Public License v2 |
* or Mozilla license choice] |
* |
* The following other idents are available |
* |
* "Proprietary" [Non free products] |
* |
* There are dual licensed components, but when running with Linux it is the |
* GPL that is relevant so this is a non issue. Similarly LGPL linked with GPL |
* is a GPL combined work. |
* |
* This exists for several reasons |
* 1. So modinfo can show license info for users wanting to vet their setup |
* is free |
* 2. So the community can ignore bug reports including proprietary modules |
* 3. So vendors can do likewise based on their own policies |
*/ |
#define MODULE_LICENSE(_license) MODULE_INFO(license, _license) |
/* Author, ideally of form NAME <EMAIL>[, NAME <EMAIL>]*[ and NAME <EMAIL>] */ |
#define MODULE_AUTHOR(_author) MODULE_INFO(author, _author) |
/* What your module does. */ |
#define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description) |
/* One for each parameter, describing how to use it. Some files do |
multiple of these per line, so can't just use MODULE_INFO. */ |
#define MODULE_PARM_DESC(_parm, desc) \ |
__MODULE_INFO(parm, _parm, #_parm ":" desc) |
#define MODULE_DEVICE_TABLE(type,name) \ |
MODULE_GENERIC_TABLE(type##_device,name) |
/* Given an address, look for it in the exception tables */ |
const struct exception_table_entry *search_exception_tables(unsigned long add); |
struct notifier_block; |
#ifdef CONFIG_MODULES |
/* Get/put a kernel symbol (calls must be symmetric) */ |
void *__symbol_get(const char *symbol); |
void *__symbol_get_gpl(const char *symbol); |
#define symbol_get(x) ((typeof(&x))(__symbol_get(MODULE_SYMBOL_PREFIX #x))) |
#ifndef __GENKSYMS__ |
#ifdef CONFIG_MODVERSIONS |
/* Mark the CRC weak since genksyms apparently decides not to |
* generate a checksums for some symbols */ |
#define __CRC_SYMBOL(sym, sec) \ |
extern void *__crc_##sym __attribute__((weak)); \ |
static const unsigned long __kcrctab_##sym \ |
__attribute__((section("__kcrctab" sec), unused)) \ |
= (unsigned long) &__crc_##sym; |
#else |
#define __CRC_SYMBOL(sym, sec) |
#endif |
/* For every exported symbol, place a struct in the __ksymtab section */ |
#define __EXPORT_SYMBOL(sym, sec) \ |
__CRC_SYMBOL(sym, sec) \ |
static const char __kstrtab_##sym[] \ |
__attribute__((section("__ksymtab_strings"))) \ |
= MODULE_SYMBOL_PREFIX #sym; \ |
static const struct kernel_symbol __ksymtab_##sym \ |
__attribute__((section("__ksymtab" sec), unused)) \ |
= { (unsigned long)&sym, __kstrtab_##sym } |
#define EXPORT_SYMBOL(sym) \ |
__EXPORT_SYMBOL(sym, "") |
#define EXPORT_SYMBOL_GPL(sym) \ |
__EXPORT_SYMBOL(sym, "_gpl") |
#endif |
/* We don't mangle the actual symbol anymore, so no need for |
* special casing EXPORT_SYMBOL_NOVERS. FIXME: Deprecated */ |
#define EXPORT_SYMBOL_NOVERS(sym) EXPORT_SYMBOL(sym) |
struct module_ref |
{ |
local_t count; |
} ____cacheline_aligned; |
enum module_state |
{ |
MODULE_STATE_LIVE, |
MODULE_STATE_COMING, |
MODULE_STATE_GOING, |
}; |
struct module |
{ |
enum module_state state; |
/* Member of list of modules */ |
struct list_head list; |
/* Unique handle for this module */ |
char name[MODULE_NAME_LEN]; |
/* Exported symbols */ |
const struct kernel_symbol *syms; |
unsigned int num_syms; |
const unsigned long *crcs; |
/* GPL-only exported symbols. */ |
const struct kernel_symbol *gpl_syms; |
unsigned int num_gpl_syms; |
const unsigned long *gpl_crcs; |
/* Exception table */ |
unsigned int num_exentries; |
const struct exception_table_entry *extable; |
/* Startup function. */ |
int (*init)(void); |
/* If this is non-NULL, vfree after init() returns */ |
void *module_init; |
/* Here is the actual code + data, vfree'd on unload. */ |
void *module_core; |
/* Here are the sizes of the init and core sections */ |
unsigned long init_size, core_size; |
/* The size of the executable code in each section. */ |
unsigned long init_text_size, core_text_size; |
/* Arch-specific module values */ |
struct mod_arch_specific arch; |
/* Am I unsafe to unload? */ |
int unsafe; |
/* Am I GPL-compatible */ |
int license_gplok; |
#ifdef CONFIG_MODULE_UNLOAD |
/* Reference counts */ |
struct module_ref ref[NR_CPUS]; |
/* What modules depend on me? */ |
struct list_head modules_which_use_me; |
/* Who is waiting for us to be unloaded */ |
struct task_struct *waiter; |
/* Destruction function. */ |
void (*exit)(void); |
#endif |
#ifdef CONFIG_KALLSYMS |
/* We keep the symbol and string tables for kallsyms. */ |
Elf_Sym *symtab; |
unsigned long num_symtab; |
char *strtab; |
#endif |
/* Per-cpu data. */ |
void *percpu; |
/* The command line arguments (may be mangled). People like |
keeping pointers to this stuff */ |
char *args; |
}; |
/* FIXME: It'd be nice to isolate modules during init, too, so they |
aren't used before they (may) fail. But presently too much code |
(IDE & SCSI) require entry into the module during init.*/ |
static inline int module_is_live(struct module *mod) |
{ |
return mod->state != MODULE_STATE_GOING; |
} |
/* Is this address in a module? */ |
struct module *module_text_address(unsigned long addr); |
/* Returns module and fills in value, defined and namebuf, or NULL if |
symnum out of range. */ |
struct module *module_get_kallsym(unsigned int symnum, |
unsigned long *value, |
char *type, |
char namebuf[128]); |
int is_exported(const char *name, const struct module *mod); |
extern void __module_put_and_exit(struct module *mod, long code) |
__attribute__((noreturn)); |
#define module_put_and_exit(code) __module_put_and_exit(THIS_MODULE, code); |
#ifdef CONFIG_MODULE_UNLOAD |
unsigned int module_refcount(struct module *mod); |
void __symbol_put(const char *symbol); |
#define symbol_put(x) __symbol_put(MODULE_SYMBOL_PREFIX #x) |
void symbol_put_addr(void *addr); |
/* Sometimes we know we already have a refcount, and it's easier not |
to handle the error case (which only happens with rmmod --wait). */ |
static inline void __module_get(struct module *module) |
{ |
if (module) { |
BUG_ON(module_refcount(module) == 0); |
local_inc(&module->ref[get_cpu()].count); |
put_cpu(); |
} |
} |
static inline int try_module_get(struct module *module) |
{ |
int ret = 1; |
if (module) { |
unsigned int cpu = get_cpu(); |
if (likely(module_is_live(module))) |
local_inc(&module->ref[cpu].count); |
else |
ret = 0; |
put_cpu(); |
} |
return ret; |
} |
static inline void module_put(struct module *module) |
{ |
if (module) { |
unsigned int cpu = get_cpu(); |
local_dec(&module->ref[cpu].count); |
/* Maybe they're waiting for us to drop reference? */ |
if (unlikely(!module_is_live(module))) |
wake_up_process(module->waiter); |
put_cpu(); |
} |
} |
#else /*!CONFIG_MODULE_UNLOAD*/ |
static inline int try_module_get(struct module *module) |
{ |
return !module || module_is_live(module); |
} |
static inline void module_put(struct module *module) |
{ |
} |
static inline void __module_get(struct module *module) |
{ |
} |
#define symbol_put(x) do { } while(0) |
#define symbol_put_addr(p) do { } while(0) |
#endif /* CONFIG_MODULE_UNLOAD */ |
/* This is a #define so the string doesn't get put in every .o file */ |
#define module_name(mod) \ |
({ \ |
struct module *__mod = (mod); \ |
__mod ? __mod->name : "kernel"; \ |
}) |
#define __unsafe(mod) \ |
do { \ |
if (mod && !(mod)->unsafe) { \ |
printk(KERN_WARNING \ |
"Module %s cannot be unloaded due to unsafe usage in" \ |
" %s:%u\n", (mod)->name, __FILE__, __LINE__); \ |
(mod)->unsafe = 1; \ |
} \ |
} while(0) |
/* For kallsyms to ask for address resolution. NULL means not found. */ |
const char *module_address_lookup(unsigned long addr, |
unsigned long *symbolsize, |
unsigned long *offset, |
char **modname); |
/* For extable.c to search modules' exception tables. */ |
const struct exception_table_entry *search_module_extables(unsigned long addr); |
int register_module_notifier(struct notifier_block * nb); |
int unregister_module_notifier(struct notifier_block * nb); |
#else /* !CONFIG_MODULES... */ |
#define EXPORT_SYMBOL(sym) |
#define EXPORT_SYMBOL_GPL(sym) |
#define EXPORT_SYMBOL_NOVERS(sym) |
/* Given an address, look for it in the exception tables. */ |
static inline const struct exception_table_entry * |
search_module_extables(unsigned long addr) |
{ |
return NULL; |
} |
/* Is this address in a module? */ |
static inline struct module *module_text_address(unsigned long addr) |
{ |
return NULL; |
} |
/* Get/put a kernel symbol (calls should be symmetric) */ |
#define symbol_get(x) ({ extern typeof(x) x __attribute__((weak)); &(x); }) |
#define symbol_put(x) do { } while(0) |
#define symbol_put_addr(x) do { } while(0) |
static inline void __module_get(struct module *module) |
{ |
} |
static inline int try_module_get(struct module *module) |
{ |
return 1; |
} |
static inline void module_put(struct module *module) |
{ |
} |
#define module_name(mod) "kernel" |
#define __unsafe(mod) |
/* For kallsyms to ask for address resolution. NULL means not found. */ |
static inline const char *module_address_lookup(unsigned long addr, |
unsigned long *symbolsize, |
unsigned long *offset, |
char **modname) |
{ |
return NULL; |
} |
static inline struct module *module_get_kallsym(unsigned int symnum, |
unsigned long *value, |
char *type, |
char namebuf[128]) |
{ |
return NULL; |
} |
static inline int is_exported(const char *name, const struct module *mod) |
{ |
return 0; |
} |
static inline int register_module_notifier(struct notifier_block * nb) |
{ |
/* no events will happen anyway, so this can always succeed */ |
return 0; |
} |
static inline int unregister_module_notifier(struct notifier_block * nb) |
{ |
return 0; |
} |
#define module_put_and_exit(code) do_exit(code) |
#endif /* CONFIG_MODULES */ |
#ifdef MODULE |
extern struct module __this_module; |
#ifdef KBUILD_MODNAME |
/* We make the linker do some of the work. */ |
struct module __this_module |
__attribute__((section(".gnu.linkonce.this_module"))) = { |
.name = __stringify(KBUILD_MODNAME), |
.init = init_module, |
#ifdef CONFIG_MODULE_UNLOAD |
.exit = cleanup_module, |
#endif |
}; |
#endif /* KBUILD_MODNAME */ |
#endif /* MODULE */ |
#define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x) |
/* BELOW HERE ALL THESE ARE OBSOLETE AND WILL VANISH */ |
struct obsolete_modparm { |
char name[64]; |
char type[64-sizeof(void *)]; |
void *addr; |
}; |
#ifdef MODULE |
/* DEPRECATED: Do not use. */ |
#define MODULE_PARM(var,type) \ |
struct obsolete_modparm __parm_##var __attribute__((section("__obsparm"))) = \ |
{ __stringify(var), type }; |
static inline void __deprecated MOD_INC_USE_COUNT(struct module *module) |
{ |
__unsafe(module); |
#if defined(CONFIG_MODULE_UNLOAD) && defined(MODULE) |
local_inc(&module->ref[get_cpu()].count); |
put_cpu(); |
#else |
(void)try_module_get(module); |
#endif |
} |
static inline void __deprecated MOD_DEC_USE_COUNT(struct module *module) |
{ |
module_put(module); |
} |
#define MOD_INC_USE_COUNT MOD_INC_USE_COUNT(THIS_MODULE) |
#define MOD_DEC_USE_COUNT MOD_DEC_USE_COUNT(THIS_MODULE) |
#else |
#define MODULE_PARM(var,type) |
#define MOD_INC_USE_COUNT do { } while (0) |
#define MOD_DEC_USE_COUNT do { } while (0) |
#endif |
#define __MODULE_STRING(x) __stringify(x) |
/* Use symbol_get and symbol_put instead. You'll thank me. */ |
#define HAVE_INTER_MODULE |
extern void inter_module_register(const char *, struct module *, const void *); |
extern void inter_module_unregister(const char *); |
extern const void *inter_module_get(const char *); |
extern const void *inter_module_get_request(const char *, const char *); |
extern void inter_module_put(const char *); |
#endif /* _LINUX_MODULE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/iso_fs_i.h |
---|
0,0 → 1,24 |
#ifndef _ISO_FS_I |
#define _ISO_FS_I |
#include <linux/fs.h> |
enum isofs_file_format { |
isofs_file_normal = 0, |
isofs_file_sparse = 1, |
isofs_file_compressed = 2, |
}; |
/* |
* iso fs inode data in memory |
*/ |
struct iso_inode_info { |
unsigned int i_first_extent; |
unsigned char i_file_format; |
unsigned char i_format_parm[3]; |
unsigned long i_next_section_ino; |
off_t i_section_size; |
struct inode vfs_inode; |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/tty_driver.h |
---|
0,0 → 1,275 |
#ifndef _LINUX_TTY_DRIVER_H |
#define _LINUX_TTY_DRIVER_H |
/* |
* This structure defines the interface between the low-level tty |
* driver and the tty routines. The following routines can be |
* defined; unless noted otherwise, they are optional, and can be |
* filled in with a null pointer. |
* |
* int (*open)(struct tty_struct * tty, struct file * filp); |
* |
* This routine is called when a particular tty device is opened. |
* This routine is mandatory; if this routine is not filled in, |
* the attempted open will fail with ENODEV. |
* |
* void (*close)(struct tty_struct * tty, struct file * filp); |
* |
* This routine is called when a particular tty device is closed. |
* |
* int (*write)(struct tty_struct * tty, int from_user, |
* const unsigned char *buf, int count); |
* |
* This routine is called by the kernel to write a series of |
* characters to the tty device. The characters may come from |
* user space or kernel space. This routine will return the |
* number of characters actually accepted for writing. This |
* routine is mandatory. |
* |
* void (*put_char)(struct tty_struct *tty, unsigned char ch); |
* |
* This routine is called by the kernel to write a single |
* character to the tty device. If the kernel uses this routine, |
* it must call the flush_chars() routine (if defined) when it is |
* done stuffing characters into the driver. If there is no room |
* in the queue, the character is ignored. |
* |
* void (*flush_chars)(struct tty_struct *tty); |
* |
* This routine is called by the kernel after it has written a |
* series of characters to the tty device using put_char(). |
* |
* int (*write_room)(struct tty_struct *tty); |
* |
* This routine returns the numbers of characters the tty driver |
* will accept for queuing to be written. This number is subject |
* to change as output buffers get emptied, or if the output flow |
* control is acted. |
* |
* int (*ioctl)(struct tty_struct *tty, struct file * file, |
* unsigned int cmd, unsigned long arg); |
* |
* This routine allows the tty driver to implement |
* device-specific ioctl's. If the ioctl number passed in cmd |
* is not recognized by the driver, it should return ENOIOCTLCMD. |
* |
* void (*set_termios)(struct tty_struct *tty, struct termios * old); |
* |
* This routine allows the tty driver to be notified when |
* device's termios settings have changed. Note that a |
* well-designed tty driver should be prepared to accept the case |
* where old == NULL, and try to do something rational. |
* |
* void (*set_ldisc)(struct tty_struct *tty); |
* |
* This routine allows the tty driver to be notified when the |
* device's termios settings have changed. |
* |
* void (*throttle)(struct tty_struct * tty); |
* |
* This routine notifies the tty driver that input buffers for |
* the line discipline are close to full, and it should somehow |
* signal that no more characters should be sent to the tty. |
* |
* void (*unthrottle)(struct tty_struct * tty); |
* |
* This routine notifies the tty drivers that it should signals |
* that characters can now be sent to the tty without fear of |
* overrunning the input buffers of the line disciplines. |
* |
* void (*stop)(struct tty_struct *tty); |
* |
* This routine notifies the tty driver that it should stop |
* outputting characters to the tty device. |
* |
* void (*start)(struct tty_struct *tty); |
* |
* This routine notifies the tty driver that it resume sending |
* characters to the tty device. |
* |
* void (*hangup)(struct tty_struct *tty); |
* |
* This routine notifies the tty driver that it should hangup the |
* tty device. |
* |
* void (*break_ctl)(struct tty_stuct *tty, int state); |
* |
* This optional routine requests the tty driver to turn on or |
* off BREAK status on the RS-232 port. If state is -1, |
* then the BREAK status should be turned on; if state is 0, then |
* BREAK should be turned off. |
* |
* If this routine is implemented, the high-level tty driver will |
* handle the following ioctls: TCSBRK, TCSBRKP, TIOCSBRK, |
* TIOCCBRK. Otherwise, these ioctls will be passed down to the |
* driver to handle. |
* |
* void (*wait_until_sent)(struct tty_struct *tty, int timeout); |
* |
* This routine waits until the device has written out all of the |
* characters in its transmitter FIFO. |
* |
* void (*send_xchar)(struct tty_struct *tty, char ch); |
* |
* This routine is used to send a high-priority XON/XOFF |
* character to the device. |
*/ |
#include <linux/fs.h> |
#include <linux/list.h> |
#include <linux/cdev.h> |
struct tty_struct; |
struct tty_operations { |
int (*open)(struct tty_struct * tty, struct file * filp); |
void (*close)(struct tty_struct * tty, struct file * filp); |
int (*write)(struct tty_struct * tty, int from_user, |
const unsigned char *buf, int count); |
void (*put_char)(struct tty_struct *tty, unsigned char ch); |
void (*flush_chars)(struct tty_struct *tty); |
int (*write_room)(struct tty_struct *tty); |
int (*chars_in_buffer)(struct tty_struct *tty); |
int (*ioctl)(struct tty_struct *tty, struct file * file, |
unsigned int cmd, unsigned long arg); |
void (*set_termios)(struct tty_struct *tty, struct termios * old); |
void (*throttle)(struct tty_struct * tty); |
void (*unthrottle)(struct tty_struct * tty); |
void (*stop)(struct tty_struct *tty); |
void (*start)(struct tty_struct *tty); |
void (*hangup)(struct tty_struct *tty); |
void (*break_ctl)(struct tty_struct *tty, int state); |
void (*flush_buffer)(struct tty_struct *tty); |
void (*set_ldisc)(struct tty_struct *tty); |
void (*wait_until_sent)(struct tty_struct *tty, int timeout); |
void (*send_xchar)(struct tty_struct *tty, char ch); |
int (*read_proc)(char *page, char **start, off_t off, |
int count, int *eof, void *data); |
int (*write_proc)(struct file *file, const char *buffer, |
unsigned long count, void *data); |
int (*tiocmget)(struct tty_struct *tty, struct file *file); |
int (*tiocmset)(struct tty_struct *tty, struct file *file, |
unsigned int set, unsigned int clear); |
}; |
struct tty_driver { |
int magic; /* magic number for this structure */ |
struct cdev cdev; |
struct module *owner; |
const char *driver_name; |
const char *devfs_name; |
const char *name; |
int name_base; /* offset of printed name */ |
short major; /* major device number */ |
short minor_start; /* start of minor device number*/ |
short num; /* number of devices */ |
short type; /* type of tty driver */ |
short subtype; /* subtype of tty driver */ |
struct termios init_termios; /* Initial termios */ |
int flags; /* tty driver flags */ |
int refcount; /* for loadable tty drivers */ |
struct proc_dir_entry *proc_entry; /* /proc fs entry */ |
struct tty_driver *other; /* only used for the PTY driver */ |
/* |
* Pointer to the tty data structures |
*/ |
struct tty_struct **ttys; |
struct termios **termios; |
struct termios **termios_locked; |
void *driver_state; /* only used for the PTY driver */ |
/* |
* Interface routines from the upper tty layer to the tty |
* driver. Will be replaced with struct tty_operations. |
*/ |
int (*open)(struct tty_struct * tty, struct file * filp); |
void (*close)(struct tty_struct * tty, struct file * filp); |
int (*write)(struct tty_struct * tty, int from_user, |
const unsigned char *buf, int count); |
void (*put_char)(struct tty_struct *tty, unsigned char ch); |
void (*flush_chars)(struct tty_struct *tty); |
int (*write_room)(struct tty_struct *tty); |
int (*chars_in_buffer)(struct tty_struct *tty); |
int (*ioctl)(struct tty_struct *tty, struct file * file, |
unsigned int cmd, unsigned long arg); |
void (*set_termios)(struct tty_struct *tty, struct termios * old); |
void (*throttle)(struct tty_struct * tty); |
void (*unthrottle)(struct tty_struct * tty); |
void (*stop)(struct tty_struct *tty); |
void (*start)(struct tty_struct *tty); |
void (*hangup)(struct tty_struct *tty); |
void (*break_ctl)(struct tty_struct *tty, int state); |
void (*flush_buffer)(struct tty_struct *tty); |
void (*set_ldisc)(struct tty_struct *tty); |
void (*wait_until_sent)(struct tty_struct *tty, int timeout); |
void (*send_xchar)(struct tty_struct *tty, char ch); |
int (*read_proc)(char *page, char **start, off_t off, |
int count, int *eof, void *data); |
int (*write_proc)(struct file *file, const char *buffer, |
unsigned long count, void *data); |
int (*tiocmget)(struct tty_struct *tty, struct file *file); |
int (*tiocmset)(struct tty_struct *tty, struct file *file, |
unsigned int set, unsigned int clear); |
struct list_head tty_drivers; |
}; |
extern struct list_head tty_drivers; |
struct tty_driver *alloc_tty_driver(int lines); |
void put_tty_driver(struct tty_driver *driver); |
void tty_set_operations(struct tty_driver *driver, struct tty_operations *op); |
/* tty driver magic number */ |
#define TTY_DRIVER_MAGIC 0x5402 |
/* |
* tty driver flags |
* |
* TTY_DRIVER_RESET_TERMIOS --- requests the tty layer to reset the |
* termios setting when the last process has closed the device. |
* Used for PTY's, in particular. |
* |
* TTY_DRIVER_REAL_RAW --- if set, indicates that the driver will |
* guarantee never not to set any special character handling |
* flags if ((IGNBRK || (!BRKINT && !PARMRK)) && (IGNPAR || |
* !INPCK)). That is, if there is no reason for the driver to |
* send notifications of parity and break characters up to the |
* line driver, it won't do so. This allows the line driver to |
* optimize for this case if this flag is set. (Note that there |
* is also a promise, if the above case is true, not to signal |
* overruns, either.) |
* |
* TTY_DRIVER_NO_DEVFS --- if set, do not create devfs entries. This |
* is only used by tty_register_driver(). |
* |
*/ |
#define TTY_DRIVER_INSTALLED 0x0001 |
#define TTY_DRIVER_RESET_TERMIOS 0x0002 |
#define TTY_DRIVER_REAL_RAW 0x0004 |
#define TTY_DRIVER_NO_DEVFS 0x0008 |
/* tty driver types */ |
#define TTY_DRIVER_TYPE_SYSTEM 0x0001 |
#define TTY_DRIVER_TYPE_CONSOLE 0x0002 |
#define TTY_DRIVER_TYPE_SERIAL 0x0003 |
#define TTY_DRIVER_TYPE_PTY 0x0004 |
#define TTY_DRIVER_TYPE_SCC 0x0005 /* scc driver */ |
#define TTY_DRIVER_TYPE_SYSCONS 0x0006 |
/* system subtypes (magic, used by tty_io.c) */ |
#define SYSTEM_TYPE_TTY 0x0001 |
#define SYSTEM_TYPE_CONSOLE 0x0002 |
#define SYSTEM_TYPE_SYSCONS 0x0003 |
#define SYSTEM_TYPE_SYSPTMX 0x0004 |
/* pty subtypes (magic, used by tty_io.c) */ |
#define PTY_TYPE_MASTER 0x0001 |
#define PTY_TYPE_SLAVE 0x0002 |
/* serial subtype definitions */ |
#define SERIAL_TYPE_NORMAL 1 |
#define SERIAL_TYPE_CALLOUT 2 |
#endif /* #ifdef _LINUX_TTY_DRIVER_H */ |
/shark/trunk/drivers/linuxc26/include/linux/usb_ch9.h |
---|
0,0 → 1,315 |
/* |
* This file holds USB constants and structures that are needed for USB |
* device APIs. These are used by the USB device model, which is defined |
* in chapter 9 of the USB 2.0 specification. Linux has several APIs in C |
* that need these: |
* |
* - the master/host side Linux-USB kernel driver API; |
* - the "usbfs" user space API; and |
* - (eventually) a Linux "gadget" slave/device side driver API. |
* |
* USB 2.0 adds an additional "On The Go" (OTG) mode, which lets systems |
* act either as a USB master/host or as a USB slave/device. That means |
* the master and slave side APIs will benefit from working well together. |
*/ |
#ifndef __LINUX_USB_CH9_H |
#define __LINUX_USB_CH9_H |
#include <asm/types.h> /* __u8 etc */ |
/*-------------------------------------------------------------------------*/ |
/* CONTROL REQUEST SUPPORT */ |
/* |
* USB directions |
* |
* This bit flag is used in endpoint descriptors' bEndpointAddress field. |
* It's also one of three fields in control requests bRequestType. |
*/ |
#define USB_DIR_OUT 0 /* to device */ |
#define USB_DIR_IN 0x80 /* to host */ |
/* |
* USB types, the second of three bRequestType fields |
*/ |
#define USB_TYPE_MASK (0x03 << 5) |
#define USB_TYPE_STANDARD (0x00 << 5) |
#define USB_TYPE_CLASS (0x01 << 5) |
#define USB_TYPE_VENDOR (0x02 << 5) |
#define USB_TYPE_RESERVED (0x03 << 5) |
/* |
* USB recipients, the third of three bRequestType fields |
*/ |
#define USB_RECIP_MASK 0x1f |
#define USB_RECIP_DEVICE 0x00 |
#define USB_RECIP_INTERFACE 0x01 |
#define USB_RECIP_ENDPOINT 0x02 |
#define USB_RECIP_OTHER 0x03 |
/* |
* Standard requests, for the bRequest field of a SETUP packet. |
* |
* These are qualified by the bRequestType field, so that for example |
* TYPE_CLASS or TYPE_VENDOR specific feature flags could be retrieved |
* by a GET_STATUS request. |
*/ |
#define USB_REQ_GET_STATUS 0x00 |
#define USB_REQ_CLEAR_FEATURE 0x01 |
#define USB_REQ_SET_FEATURE 0x03 |
#define USB_REQ_SET_ADDRESS 0x05 |
#define USB_REQ_GET_DESCRIPTOR 0x06 |
#define USB_REQ_SET_DESCRIPTOR 0x07 |
#define USB_REQ_GET_CONFIGURATION 0x08 |
#define USB_REQ_SET_CONFIGURATION 0x09 |
#define USB_REQ_GET_INTERFACE 0x0A |
#define USB_REQ_SET_INTERFACE 0x0B |
#define USB_REQ_SYNCH_FRAME 0x0C |
/** |
* struct usb_ctrlrequest - SETUP data for a USB device control request |
* @bRequestType: matches the USB bmRequestType field |
* @bRequest: matches the USB bRequest field |
* @wValue: matches the USB wValue field (le16 byte order) |
* @wIndex: matches the USB wIndex field (le16 byte order) |
* @wLength: matches the USB wLength field (le16 byte order) |
* |
* This structure is used to send control requests to a USB device. It matches |
* the different fields of the USB 2.0 Spec section 9.3, table 9-2. See the |
* USB spec for a fuller description of the different fields, and what they are |
* used for. |
* |
* Note that the driver for any interface can issue control requests. |
* For most devices, interfaces don't coordinate with each other, so |
* such requests may be made at any time. |
*/ |
struct usb_ctrlrequest { |
__u8 bRequestType; |
__u8 bRequest; |
__u16 wValue; |
__u16 wIndex; |
__u16 wLength; |
} __attribute__ ((packed)); |
/*-------------------------------------------------------------------------*/ |
/* |
* STANDARD DESCRIPTORS ... as returned by GET_DESCRIPTOR, or |
* (rarely) accepted by SET_DESCRIPTOR. |
* |
* Note that all multi-byte values here are encoded in little endian |
* byte order "on the wire". But when exposed through Linux-USB APIs, |
* they've been converted to cpu byte order. |
*/ |
/* |
* Descriptor types ... USB 2.0 spec table 9.5 |
*/ |
#define USB_DT_DEVICE 0x01 |
#define USB_DT_CONFIG 0x02 |
#define USB_DT_STRING 0x03 |
#define USB_DT_INTERFACE 0x04 |
#define USB_DT_ENDPOINT 0x05 |
#define USB_DT_DEVICE_QUALIFIER 0x06 |
#define USB_DT_OTHER_SPEED_CONFIG 0x07 |
#define USB_DT_INTERFACE_POWER 0x08 |
/* All standard descriptors have these 2 fields at the beginning */ |
struct usb_descriptor_header { |
__u8 bLength; |
__u8 bDescriptorType; |
} __attribute__ ((packed)); |
/*-------------------------------------------------------------------------*/ |
/* USB_DT_DEVICE: Device descriptor */ |
struct usb_device_descriptor { |
__u8 bLength; |
__u8 bDescriptorType; |
__u16 bcdUSB; |
__u8 bDeviceClass; |
__u8 bDeviceSubClass; |
__u8 bDeviceProtocol; |
__u8 bMaxPacketSize0; |
__u16 idVendor; |
__u16 idProduct; |
__u16 bcdDevice; |
__u8 iManufacturer; |
__u8 iProduct; |
__u8 iSerialNumber; |
__u8 bNumConfigurations; |
} __attribute__ ((packed)); |
#define USB_DT_DEVICE_SIZE 18 |
/* |
* Device and/or Interface Class codes |
* as found in bDeviceClass or bInterfaceClass |
* and defined by www.usb.org documents |
*/ |
#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */ |
#define USB_CLASS_AUDIO 1 |
#define USB_CLASS_COMM 2 |
#define USB_CLASS_HID 3 |
#define USB_CLASS_PHYSICAL 5 |
#define USB_CLASS_STILL_IMAGE 6 |
#define USB_CLASS_PRINTER 7 |
#define USB_CLASS_MASS_STORAGE 8 |
#define USB_CLASS_HUB 9 |
#define USB_CLASS_CDC_DATA 0x0a |
#define USB_CLASS_CSCID 0x0b /* chip+ smart card */ |
#define USB_CLASS_CONTENT_SEC 0x0d /* content security */ |
#define USB_CLASS_APP_SPEC 0xfe |
#define USB_CLASS_VENDOR_SPEC 0xff |
/*-------------------------------------------------------------------------*/ |
/* USB_DT_CONFIG: Configuration descriptor information. |
* |
* USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the |
* descriptor type is different. Highspeed-capable devices can look |
* different depending on what speed they're currently running. Only |
* devices with a USB_DT_DEVICE_QUALIFIER have any OTHER_SPEED_CONFIG |
* descriptors. |
*/ |
struct usb_config_descriptor { |
__u8 bLength; |
__u8 bDescriptorType; |
__u16 wTotalLength; |
__u8 bNumInterfaces; |
__u8 bConfigurationValue; |
__u8 iConfiguration; |
__u8 bmAttributes; |
__u8 bMaxPower; |
} __attribute__ ((packed)); |
#define USB_DT_CONFIG_SIZE 9 |
/* from config descriptor bmAttributes */ |
#define USB_CONFIG_ATT_ONE (1 << 7) /* must be set */ |
#define USB_CONFIG_ATT_SELFPOWER (1 << 6) /* self powered */ |
#define USB_CONFIG_ATT_WAKEUP (1 << 5) /* can wakeup */ |
/*-------------------------------------------------------------------------*/ |
/* USB_DT_STRING: String descriptor */ |
struct usb_string_descriptor { |
__u8 bLength; |
__u8 bDescriptorType; |
__u16 wData[1]; /* UTF-16LE encoded */ |
} __attribute__ ((packed)); |
/* note that "string" zero is special, it holds language codes that |
* the device supports, not Unicode characters. |
*/ |
/*-------------------------------------------------------------------------*/ |
/* USB_DT_INTERFACE: Interface descriptor */ |
struct usb_interface_descriptor { |
__u8 bLength; |
__u8 bDescriptorType; |
__u8 bInterfaceNumber; |
__u8 bAlternateSetting; |
__u8 bNumEndpoints; |
__u8 bInterfaceClass; |
__u8 bInterfaceSubClass; |
__u8 bInterfaceProtocol; |
__u8 iInterface; |
} __attribute__ ((packed)); |
#define USB_DT_INTERFACE_SIZE 9 |
/*-------------------------------------------------------------------------*/ |
/* USB_DT_ENDPOINT: Endpoint descriptor */ |
struct usb_endpoint_descriptor { |
__u8 bLength; |
__u8 bDescriptorType; |
__u8 bEndpointAddress; |
__u8 bmAttributes; |
__u16 wMaxPacketSize; |
__u8 bInterval; |
// NOTE: these two are _only_ in audio endpoints. |
// use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. |
__u8 bRefresh; |
__u8 bSynchAddress; |
} __attribute__ ((packed)); |
#define USB_DT_ENDPOINT_SIZE 7 |
#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ |
/* |
* Endpoints |
*/ |
#define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */ |
#define USB_ENDPOINT_DIR_MASK 0x80 |
#define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */ |
#define USB_ENDPOINT_XFER_CONTROL 0 |
#define USB_ENDPOINT_XFER_ISOC 1 |
#define USB_ENDPOINT_XFER_BULK 2 |
#define USB_ENDPOINT_XFER_INT 3 |
/*-------------------------------------------------------------------------*/ |
/* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */ |
struct usb_qualifier_descriptor { |
__u8 bLength; |
__u8 bDescriptorType; |
__u16 bcdUSB; |
__u8 bDeviceClass; |
__u8 bDeviceSubClass; |
__u8 bDeviceProtocol; |
__u8 bMaxPacketSize0; |
__u8 bNumConfigurations; |
__u8 bRESERVED; |
} __attribute__ ((packed)); |
/*-------------------------------------------------------------------------*/ |
/* USB 2.0 defines three speeds, here's how Linux identifies them */ |
enum usb_device_speed { |
USB_SPEED_UNKNOWN = 0, /* enumerating */ |
USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */ |
USB_SPEED_HIGH /* usb 2.0 */ |
}; |
enum usb_device_state { |
/* NOTATTACHED isn't in the USB spec, and this state acts |
* the same as ATTACHED ... but it's clearer this way. |
*/ |
USB_STATE_NOTATTACHED = 0, |
/* the chapter 9 device states */ |
USB_STATE_ATTACHED, |
USB_STATE_POWERED, |
USB_STATE_DEFAULT, /* limited function */ |
USB_STATE_ADDRESS, |
USB_STATE_CONFIGURED, /* most functions */ |
USB_STATE_SUSPENDED |
/* NOTE: there are actually four different SUSPENDED |
* states, returning to POWERED, DEFAULT, ADDRESS, or |
* CONFIGURED respectively when SOF tokens flow again. |
*/ |
}; |
#endif /* __LINUX_USB_CH9_H */ |
/shark/trunk/drivers/linuxc26/include/linux/ufs_fs_i.h |
---|
0,0 → 1,32 |
/* |
* linux/include/linux/ufs_fs_i.h |
* |
* Copyright (C) 1996 |
* Adrian Rodriguez (adrian@franklins-tower.rutgers.edu) |
* Laboratory for Computer Science Research Computing Facility |
* Rutgers, The State University of New Jersey |
* |
* NeXTstep support added on February 5th 1998 by |
* Niels Kristian Bech Jensen <nkbj@image.dk>. |
*/ |
#ifndef _LINUX_UFS_FS_I_H |
#define _LINUX_UFS_FS_I_H |
struct ufs_inode_info { |
union { |
__u32 i_data[15]; |
__u8 i_symlink[4*15]; |
} i_u1; |
__u32 i_flags; |
__u32 i_gen; |
__u32 i_shadow; |
__u32 i_unused1; |
__u32 i_unused2; |
__u32 i_oeftflag; |
__u16 i_osync; |
__u32 i_lastfrag; |
struct inode vfs_inode; |
}; |
#endif /* _LINUX_UFS_FS_I_H */ |
/shark/trunk/drivers/linuxc26/include/linux/ext2_fs_sb.h |
---|
0,0 → 1,57 |
/* |
* linux/include/linux/ext2_fs_sb.h |
* |
* Copyright (C) 1992, 1993, 1994, 1995 |
* Remy Card (card@masi.ibp.fr) |
* Laboratoire MASI - Institut Blaise Pascal |
* Universite Pierre et Marie Curie (Paris VI) |
* |
* from |
* |
* linux/include/linux/minix_fs_sb.h |
* |
* Copyright (C) 1991, 1992 Linus Torvalds |
*/ |
#ifndef _LINUX_EXT2_FS_SB |
#define _LINUX_EXT2_FS_SB |
#include <linux/blockgroup_lock.h> |
#include <linux/percpu_counter.h> |
/* |
* second extended-fs super-block data in memory |
*/ |
struct ext2_sb_info { |
unsigned long s_frag_size; /* Size of a fragment in bytes */ |
unsigned long s_frags_per_block;/* Number of fragments per block */ |
unsigned long s_inodes_per_block;/* Number of inodes per block */ |
unsigned long s_frags_per_group;/* Number of fragments in a group */ |
unsigned long s_blocks_per_group;/* Number of blocks in a group */ |
unsigned long s_inodes_per_group;/* Number of inodes in a group */ |
unsigned long s_itb_per_group; /* Number of inode table blocks per group */ |
unsigned long s_gdb_count; /* Number of group descriptor blocks */ |
unsigned long s_desc_per_block; /* Number of group descriptors per block */ |
unsigned long s_groups_count; /* Number of groups in the fs */ |
struct buffer_head * s_sbh; /* Buffer containing the super block */ |
struct ext2_super_block * s_es; /* Pointer to the super block in the buffer */ |
struct buffer_head ** s_group_desc; |
unsigned long s_mount_opt; |
uid_t s_resuid; |
gid_t s_resgid; |
unsigned short s_mount_state; |
unsigned short s_pad; |
int s_addr_per_block_bits; |
int s_desc_per_block_bits; |
int s_inode_size; |
int s_first_ino; |
u32 s_next_generation; |
unsigned long s_dir_count; |
u8 *s_debts; |
struct percpu_counter s_freeblocks_counter; |
struct percpu_counter s_freeinodes_counter; |
struct percpu_counter s_dirs_counter; |
struct blockgroup_lock s_blockgroup_lock; |
}; |
#endif /* _LINUX_EXT2_FS_SB */ |
/shark/trunk/drivers/linuxc26/include/linux/jbd.h |
---|
0,0 → 1,1118 |
/* |
* linux/include/linux/jbd.h |
* |
* Written by Stephen C. Tweedie <sct@redhat.com> |
* |
* Copyright 1998-2000 Red Hat, Inc --- 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. |
* |
* Definitions for transaction data structures for the buffer cache |
* filesystem journaling support. |
*/ |
#ifndef _LINUX_JBD_H |
#define _LINUX_JBD_H |
#if defined(CONFIG_JBD) || defined(CONFIG_JBD_MODULE) || !defined(__KERNEL__) |
/* Allow this file to be included directly into e2fsprogs */ |
#ifndef __KERNEL__ |
#include "jfs_compat.h" |
#define JFS_DEBUG |
#define jfs_debug jbd_debug |
#else |
#include <linux/buffer_head.h> |
#include <linux/journal-head.h> |
#include <linux/stddef.h> |
#include <asm/semaphore.h> |
#endif |
#define journal_oom_retry 1 |
/* |
* Define JBD_PARANIOD_IOFAIL to cause a kernel BUG() if ext3 finds |
* certain classes of error which can occur due to failed IOs. Under |
* normal use we want ext3 to continue after such errors, because |
* hardware _can_ fail, but for debugging purposes when running tests on |
* known-good hardware we may want to trap these errors. |
*/ |
#undef JBD_PARANOID_IOFAIL |
#ifdef CONFIG_JBD_DEBUG |
/* |
* Define JBD_EXPENSIVE_CHECKING to enable more expensive internal |
* consistency checks. By default we don't do this unless |
* CONFIG_JBD_DEBUG is on. |
*/ |
#define JBD_EXPENSIVE_CHECKING |
extern int journal_enable_debug; |
#define jbd_debug(n, f, a...) \ |
do { \ |
if ((n) <= journal_enable_debug) { \ |
printk (KERN_DEBUG "(%s, %d): %s: ", \ |
__FILE__, __LINE__, __FUNCTION__); \ |
printk (f, ## a); \ |
} \ |
} while (0) |
#else |
#define jbd_debug(f, a...) /**/ |
#endif |
extern void * __jbd_kmalloc (const char *where, size_t size, int flags, int retry); |
#define jbd_kmalloc(size, flags) \ |
__jbd_kmalloc(__FUNCTION__, (size), (flags), journal_oom_retry) |
#define jbd_rep_kmalloc(size, flags) \ |
__jbd_kmalloc(__FUNCTION__, (size), (flags), 1) |
#define JFS_MIN_JOURNAL_BLOCKS 1024 |
#ifdef __KERNEL__ |
/** |
* typedef handle_t - The handle_t type represents a single atomic update being performed by some process. |
* |
* All filesystem modifications made by the process go |
* through this handle. Recursive operations (such as quota operations) |
* are gathered into a single update. |
* |
* The buffer credits field is used to account for journaled buffers |
* being modified by the running process. To ensure that there is |
* enough log space for all outstanding operations, we need to limit the |
* number of outstanding buffers possible at any time. When the |
* operation completes, any buffer credits not used are credited back to |
* the transaction, so that at all times we know how many buffers the |
* outstanding updates on a transaction might possibly touch. |
* |
* This is an opaque datatype. |
**/ |
typedef struct handle_s handle_t; /* Atomic operation type */ |
/** |
* typedef journal_t - The journal_t maintains all of the journaling state information for a single filesystem. |
* |
* journal_t is linked to from the fs superblock structure. |
* |
* We use the journal_t to keep track of all outstanding transaction |
* activity on the filesystem, and to manage the state of the log |
* writing process. |
* |
* This is an opaque datatype. |
**/ |
typedef struct journal_s journal_t; /* Journal control structure */ |
#endif |
/* |
* Internal structures used by the logging mechanism: |
*/ |
#define JFS_MAGIC_NUMBER 0xc03b3998U /* The first 4 bytes of /dev/random! */ |
/* |
* On-disk structures |
*/ |
/* |
* Descriptor block types: |
*/ |
#define JFS_DESCRIPTOR_BLOCK 1 |
#define JFS_COMMIT_BLOCK 2 |
#define JFS_SUPERBLOCK_V1 3 |
#define JFS_SUPERBLOCK_V2 4 |
#define JFS_REVOKE_BLOCK 5 |
/* |
* Standard header for all descriptor blocks: |
*/ |
typedef struct journal_header_s |
{ |
__u32 h_magic; |
__u32 h_blocktype; |
__u32 h_sequence; |
} journal_header_t; |
/* |
* The block tag: used to describe a single buffer in the journal |
*/ |
typedef struct journal_block_tag_s |
{ |
__u32 t_blocknr; /* The on-disk block number */ |
__u32 t_flags; /* See below */ |
} journal_block_tag_t; |
/* |
* The revoke descriptor: used on disk to describe a series of blocks to |
* be revoked from the log |
*/ |
typedef struct journal_revoke_header_s |
{ |
journal_header_t r_header; |
int r_count; /* Count of bytes used in the block */ |
} journal_revoke_header_t; |
/* Definitions for the journal tag flags word: */ |
#define JFS_FLAG_ESCAPE 1 /* on-disk block is escaped */ |
#define JFS_FLAG_SAME_UUID 2 /* block has same uuid as previous */ |
#define JFS_FLAG_DELETED 4 /* block deleted by this transaction */ |
#define JFS_FLAG_LAST_TAG 8 /* last tag in this descriptor block */ |
/* |
* The journal superblock. All fields are in big-endian byte order. |
*/ |
typedef struct journal_superblock_s |
{ |
/* 0x0000 */ |
journal_header_t s_header; |
/* 0x000C */ |
/* Static information describing the journal */ |
__u32 s_blocksize; /* journal device blocksize */ |
__u32 s_maxlen; /* total blocks in journal file */ |
__u32 s_first; /* first block of log information */ |
/* 0x0018 */ |
/* Dynamic information describing the current state of the log */ |
__u32 s_sequence; /* first commit ID expected in log */ |
__u32 s_start; /* blocknr of start of log */ |
/* 0x0020 */ |
/* Error value, as set by journal_abort(). */ |
__s32 s_errno; |
/* 0x0024 */ |
/* Remaining fields are only valid in a version-2 superblock */ |
__u32 s_feature_compat; /* compatible feature set */ |
__u32 s_feature_incompat; /* incompatible feature set */ |
__u32 s_feature_ro_compat; /* readonly-compatible feature set */ |
/* 0x0030 */ |
__u8 s_uuid[16]; /* 128-bit uuid for journal */ |
/* 0x0040 */ |
__u32 s_nr_users; /* Nr of filesystems sharing log */ |
__u32 s_dynsuper; /* Blocknr of dynamic superblock copy*/ |
/* 0x0048 */ |
__u32 s_max_transaction; /* Limit of journal blocks per trans.*/ |
__u32 s_max_trans_data; /* Limit of data blocks per trans. */ |
/* 0x0050 */ |
__u32 s_padding[44]; |
/* 0x0100 */ |
__u8 s_users[16*48]; /* ids of all fs'es sharing the log */ |
/* 0x0400 */ |
} journal_superblock_t; |
#define JFS_HAS_COMPAT_FEATURE(j,mask) \ |
((j)->j_format_version >= 2 && \ |
((j)->j_superblock->s_feature_compat & cpu_to_be32((mask)))) |
#define JFS_HAS_RO_COMPAT_FEATURE(j,mask) \ |
((j)->j_format_version >= 2 && \ |
((j)->j_superblock->s_feature_ro_compat & cpu_to_be32((mask)))) |
#define JFS_HAS_INCOMPAT_FEATURE(j,mask) \ |
((j)->j_format_version >= 2 && \ |
((j)->j_superblock->s_feature_incompat & cpu_to_be32((mask)))) |
#define JFS_FEATURE_INCOMPAT_REVOKE 0x00000001 |
/* Features known to this kernel version: */ |
#define JFS_KNOWN_COMPAT_FEATURES 0 |
#define JFS_KNOWN_ROCOMPAT_FEATURES 0 |
#define JFS_KNOWN_INCOMPAT_FEATURES JFS_FEATURE_INCOMPAT_REVOKE |
#ifdef __KERNEL__ |
#include <linux/fs.h> |
#include <linux/sched.h> |
#include <asm/bug.h> |
#define JBD_ASSERTIONS |
#ifdef JBD_ASSERTIONS |
#define J_ASSERT(assert) \ |
do { \ |
if (!(assert)) { \ |
printk (KERN_EMERG \ |
"Assertion failure in %s() at %s:%d: \"%s\"\n", \ |
__FUNCTION__, __FILE__, __LINE__, # assert); \ |
BUG(); \ |
} \ |
} while (0) |
#if defined(CONFIG_BUFFER_DEBUG) |
void buffer_assertion_failure(struct buffer_head *bh); |
#define J_ASSERT_BH(bh, expr) \ |
do { \ |
if (!(expr)) \ |
buffer_assertion_failure(bh); \ |
J_ASSERT(expr); \ |
} while (0) |
#define J_ASSERT_JH(jh, expr) J_ASSERT_BH(jh2bh(jh), expr) |
#else |
#define J_ASSERT_BH(bh, expr) J_ASSERT(expr) |
#define J_ASSERT_JH(jh, expr) J_ASSERT(expr) |
#endif |
#else |
#define J_ASSERT(assert) do { } while (0) |
#endif /* JBD_ASSERTIONS */ |
#if defined(JBD_PARANOID_IOFAIL) |
#define J_EXPECT(expr, why...) J_ASSERT(expr) |
#define J_EXPECT_BH(bh, expr, why...) J_ASSERT_BH(bh, expr) |
#define J_EXPECT_JH(jh, expr, why...) J_ASSERT_JH(jh, expr) |
#else |
#define __journal_expect(expr, why...) \ |
do { \ |
if (!(expr)) { \ |
printk(KERN_ERR \ |
"EXT3-fs unexpected failure: %s;\n",# expr); \ |
printk(KERN_ERR why); \ |
} \ |
} while (0) |
#define J_EXPECT(expr, why...) __journal_expect(expr, ## why) |
#define J_EXPECT_BH(bh, expr, why...) __journal_expect(expr, ## why) |
#define J_EXPECT_JH(jh, expr, why...) __journal_expect(expr, ## why) |
#endif |
enum jbd_state_bits { |
BH_JBD /* Has an attached ext3 journal_head */ |
= BH_PrivateStart, |
BH_JWrite, /* Being written to log (@@@ DEBUGGING) */ |
BH_Freed, /* Has been freed (truncated) */ |
BH_Revoked, /* Has been revoked from the log */ |
BH_RevokeValid, /* Revoked flag is valid */ |
BH_JBDDirty, /* Is dirty but journaled */ |
BH_State, /* Pins most journal_head state */ |
BH_JournalHead, /* Pins bh->b_private and jh->b_bh */ |
}; |
BUFFER_FNS(JBD, jbd) |
BUFFER_FNS(JWrite, jwrite) |
BUFFER_FNS(JBDDirty, jbddirty) |
TAS_BUFFER_FNS(JBDDirty, jbddirty) |
BUFFER_FNS(Freed, freed) |
static inline struct buffer_head *jh2bh(struct journal_head *jh) |
{ |
return jh->b_bh; |
} |
static inline struct journal_head *bh2jh(struct buffer_head *bh) |
{ |
return bh->b_private; |
} |
static inline void jbd_lock_bh_state(struct buffer_head *bh) |
{ |
bit_spin_lock(BH_State, &bh->b_state); |
} |
static inline int jbd_trylock_bh_state(struct buffer_head *bh) |
{ |
return bit_spin_trylock(BH_State, &bh->b_state); |
} |
static inline int jbd_is_locked_bh_state(struct buffer_head *bh) |
{ |
return bit_spin_is_locked(BH_State, &bh->b_state); |
} |
static inline void jbd_unlock_bh_state(struct buffer_head *bh) |
{ |
bit_spin_unlock(BH_State, &bh->b_state); |
} |
static inline void jbd_lock_bh_journal_head(struct buffer_head *bh) |
{ |
bit_spin_lock(BH_JournalHead, &bh->b_state); |
} |
static inline void jbd_unlock_bh_journal_head(struct buffer_head *bh) |
{ |
bit_spin_unlock(BH_JournalHead, &bh->b_state); |
} |
#define HAVE_JOURNAL_CALLBACK_STATUS |
/** |
* struct journal_callback - Base structure for callback information. |
* @jcb_list: list information for other callbacks attached to the same handle. |
* @jcb_func: Function to call with this callback structure. |
* |
* This struct is a 'seed' structure for a using with your own callback |
* structs. If you are using callbacks you must allocate one of these |
* or another struct of your own definition which has this struct |
* as it's first element and pass it to journal_callback_set(). |
* |
* This is used internally by jbd to maintain callback information. |
* |
* See journal_callback_set for more information. |
**/ |
struct journal_callback { |
struct list_head jcb_list; /* t_jcb_lock */ |
void (*jcb_func)(struct journal_callback *jcb, int error); |
/* user data goes here */ |
}; |
struct jbd_revoke_table_s; |
/** |
* struct handle_s - The handle_s type is the concrete type associated with |
* handle_t. |
* @h_transaction: Which compound transaction is this update a part of? |
* @h_buffer_credits: Number of remaining buffers we are allowed to dirty. |
* @h_ref: Reference count on this handle |
* @h_jcb: List of application registered callbacks for this handle. |
* @h_err: Field for caller's use to track errors through large fs operations |
* @h_sync: flag for sync-on-close |
* @h_jdata: flag to force data journaling |
* @h_aborted: flag indicating fatal error on handle |
**/ |
/* Docbook can't yet cope with the bit fields, but will leave the documentation |
* in so it can be fixed later. |
*/ |
struct handle_s |
{ |
/* Which compound transaction is this update a part of? */ |
transaction_t *h_transaction; |
/* Number of remaining buffers we are allowed to dirty: */ |
int h_buffer_credits; |
/* Reference count on this handle */ |
int h_ref; |
/* Field for caller's use to track errors through large fs */ |
/* operations */ |
int h_err; |
/* |
* List of application registered callbacks for this handle. The |
* function(s) will be called after the transaction that this handle is |
* part of has been committed to disk. [t_jcb_lock] |
*/ |
struct list_head h_jcb; |
/* Flags [no locking] */ |
unsigned int h_sync: 1; /* sync-on-close */ |
unsigned int h_jdata: 1; /* force data journaling */ |
unsigned int h_aborted: 1; /* fatal error on handle */ |
}; |
/* The transaction_t type is the guts of the journaling mechanism. It |
* tracks a compound transaction through its various states: |
* |
* RUNNING: accepting new updates |
* LOCKED: Updates still running but we don't accept new ones |
* RUNDOWN: Updates are tidying up but have finished requesting |
* new buffers to modify (state not used for now) |
* FLUSH: All updates complete, but we are still writing to disk |
* COMMIT: All data on disk, writing commit record |
* FINISHED: We still have to keep the transaction for checkpointing. |
* |
* The transaction keeps track of all of the buffers modified by a |
* running transaction, and all of the buffers committed but not yet |
* flushed to home for finished transactions. |
*/ |
/* |
* Lock ranking: |
* |
* j_list_lock |
* ->jbd_lock_bh_journal_head() (This is "innermost") |
* |
* j_state_lock |
* ->jbd_lock_bh_state() |
* |
* jbd_lock_bh_state() |
* ->j_list_lock |
* |
* j_state_lock |
* ->t_handle_lock |
* |
* j_state_lock |
* ->j_list_lock (journal_unmap_buffer) |
* |
* t_handle_lock |
* ->t_jcb_lock |
*/ |
struct transaction_s |
{ |
/* Pointer to the journal for this transaction. [no locking] */ |
journal_t *t_journal; |
/* Sequence number for this transaction [no locking] */ |
tid_t t_tid; |
/* |
* Transaction's current state |
* [no locking - only kjournald alters this] |
* FIXME: needs barriers |
* KLUDGE: [use j_state_lock] |
*/ |
enum { |
T_RUNNING, |
T_LOCKED, |
T_RUNDOWN, |
T_FLUSH, |
T_COMMIT, |
T_FINISHED |
} t_state; |
/* |
* Where in the log does this transaction's commit start? [no locking] |
*/ |
unsigned long t_log_start; |
/* Number of buffers on the t_buffers list [j_list_lock] */ |
int t_nr_buffers; |
/* |
* Doubly-linked circular list of all buffers reserved but not yet |
* modified by this transaction [j_list_lock] |
*/ |
struct journal_head *t_reserved_list; |
/* |
* Doubly-linked circular list of all metadata buffers owned by this |
* transaction [j_list_lock] |
*/ |
struct journal_head *t_buffers; |
/* |
* Doubly-linked circular list of all data buffers still to be |
* flushed before this transaction can be committed [j_list_lock] |
*/ |
struct journal_head *t_sync_datalist; |
/* |
* Doubly-linked circular list of all forget buffers (superseded |
* buffers which we can un-checkpoint once this transaction commits) |
* [j_list_lock] |
*/ |
struct journal_head *t_forget; |
/* |
* Doubly-linked circular list of all buffers still to be flushed before |
* this transaction can be checkpointed. [j_list_lock] |
*/ |
struct journal_head *t_checkpoint_list; |
/* |
* Doubly-linked circular list of temporary buffers currently undergoing |
* IO in the log [j_list_lock] |
*/ |
struct journal_head *t_iobuf_list; |
/* |
* Doubly-linked circular list of metadata buffers being shadowed by log |
* IO. The IO buffers on the iobuf list and the shadow buffers on this |
* list match each other one for one at all times. [j_list_lock] |
*/ |
struct journal_head *t_shadow_list; |
/* |
* Doubly-linked circular list of control buffers being written to the |
* log. [j_list_lock] |
*/ |
struct journal_head *t_log_list; |
/* |
* Protects info related to handles |
*/ |
spinlock_t t_handle_lock; |
/* |
* Number of outstanding updates running on this transaction |
* [t_handle_lock] |
*/ |
int t_updates; |
/* |
* Number of buffers reserved for use by all handles in this transaction |
* handle but not yet modified. [t_handle_lock] |
*/ |
int t_outstanding_credits; |
/* |
* Forward and backward links for the circular list of all transactions |
* awaiting checkpoint. [j_list_lock] |
*/ |
transaction_t *t_cpnext, *t_cpprev; |
/* |
* When will the transaction expire (become due for commit), in jiffies? |
* [no locking] |
*/ |
unsigned long t_expires; |
/* |
* How many handles used this transaction? [t_handle_lock] |
*/ |
int t_handle_count; |
/* |
* Protects the callback list |
*/ |
spinlock_t t_jcb_lock; |
/* |
* List of registered callback functions for this transaction. |
* Called when the transaction is committed. [t_jcb_lock] |
*/ |
struct list_head t_jcb; |
}; |
/** |
* struct journal_s - The journal_s type is the concrete type associated with |
* journal_t. |
* @j_flags: General journaling state flags |
* @j_errno: Is there an outstanding uncleared error on the journal (from a |
* prior abort)? |
* @j_sb_buffer: First part of superblock buffer |
* @j_superblock: Second part of superblock buffer |
* @j_format_version: Version of the superblock format |
* @j_barrier_count: Number of processes waiting to create a barrier lock |
* @j_barrier: The barrier lock itself |
* @j_running_transaction: The current running transaction.. |
* @j_committing_transaction: the transaction we are pushing to disk |
* @j_checkpoint_transactions: a linked circular list of all transactions |
* waiting for checkpointing |
* @j_wait_transaction_locked: Wait queue for waiting for a locked transaction |
* to start committing, or for a barrier lock to be released |
* @j_wait_logspace: Wait queue for waiting for checkpointing to complete |
* @j_wait_done_commit: Wait queue for waiting for commit to complete |
* @j_wait_checkpoint: Wait queue to trigger checkpointing |
* @j_wait_commit: Wait queue to trigger commit |
* @j_wait_updates: Wait queue to wait for updates to complete |
* @j_checkpoint_sem: Semaphore for locking against concurrent checkpoints |
* @j_head: Journal head - identifies the first unused block in the journal |
* @j_tail: Journal tail - identifies the oldest still-used block in the |
* journal. |
* @j_free: Journal free - how many free blocks are there in the journal? |
* @j_first: The block number of the first usable block |
* @j_last: The block number one beyond the last usable block |
* @j_dev: Device where we store the journal |
* @j_blocksize: blocksize for the location where we store the journal. |
* @j_blk_offset: starting block offset for into the device where we store the |
* journal |
* @j_fs_dev: Device which holds the client fs. For internal journal this will |
* be equal to j_dev |
* @j_maxlen: Total maximum capacity of the journal region on disk. |
* @j_inode: Optional inode where we store the journal. If present, all journal |
* block numbers are mapped into this inode via bmap(). |
* @j_tail_sequence: Sequence number of the oldest transaction in the log |
* @j_transaction_sequence: Sequence number of the next transaction to grant |
* @j_commit_sequence: Sequence number of the most recently committed |
* transaction |
* @j_commit_request: Sequence number of the most recent transaction wanting |
* commit |
* @j_uuid: Uuid of client object. |
* @j_task: Pointer to the current commit thread for this journal |
* @j_max_transaction_buffers: Maximum number of metadata buffers to allow in a |
* single compound commit transaction |
* @j_commit_interval: What is the maximum transaction lifetime before we begin |
* a commit? |
* @j_commit_timer: The timer used to wakeup the commit thread |
* @j_revoke: The revoke table - maintains the list of revoked blocks in the |
* current transaction. |
*/ |
struct journal_s |
{ |
/* General journaling state flags [j_state_lock] */ |
unsigned long j_flags; |
/* |
* Is there an outstanding uncleared error on the journal (from a prior |
* abort)? [j_state_lock] |
*/ |
int j_errno; |
/* The superblock buffer */ |
struct buffer_head *j_sb_buffer; |
journal_superblock_t *j_superblock; |
/* Version of the superblock format */ |
int j_format_version; |
/* |
* Protect the various scalars in the journal |
*/ |
spinlock_t j_state_lock; |
/* |
* Number of processes waiting to create a barrier lock [j_state_lock] |
*/ |
int j_barrier_count; |
/* The barrier lock itself */ |
struct semaphore j_barrier; |
/* |
* Transactions: The current running transaction... |
* [j_state_lock] [caller holding open handle] |
*/ |
transaction_t *j_running_transaction; |
/* |
* the transaction we are pushing to disk |
* [j_state_lock] [caller holding open handle] |
*/ |
transaction_t *j_committing_transaction; |
/* |
* ... and a linked circular list of all transactions waiting for |
* checkpointing. [j_list_lock] |
*/ |
transaction_t *j_checkpoint_transactions; |
/* |
* Wait queue for waiting for a locked transaction to start committing, |
* or for a barrier lock to be released |
*/ |
wait_queue_head_t j_wait_transaction_locked; |
/* Wait queue for waiting for checkpointing to complete */ |
wait_queue_head_t j_wait_logspace; |
/* Wait queue for waiting for commit to complete */ |
wait_queue_head_t j_wait_done_commit; |
/* Wait queue to trigger checkpointing */ |
wait_queue_head_t j_wait_checkpoint; |
/* Wait queue to trigger commit */ |
wait_queue_head_t j_wait_commit; |
/* Wait queue to wait for updates to complete */ |
wait_queue_head_t j_wait_updates; |
/* Semaphore for locking against concurrent checkpoints */ |
struct semaphore j_checkpoint_sem; |
/* |
* Journal head: identifies the first unused block in the journal. |
* [j_state_lock] |
*/ |
unsigned long j_head; |
/* |
* Journal tail: identifies the oldest still-used block in the journal. |
* [j_state_lock] |
*/ |
unsigned long j_tail; |
/* |
* Journal free: how many free blocks are there in the journal? |
* [j_state_lock] |
*/ |
unsigned long j_free; |
/* |
* Journal start and end: the block numbers of the first usable block |
* and one beyond the last usable block in the journal. [j_state_lock] |
*/ |
unsigned long j_first; |
unsigned long j_last; |
/* |
* Device, blocksize and starting block offset for the location where we |
* store the journal. |
*/ |
struct block_device *j_dev; |
int j_blocksize; |
unsigned int j_blk_offset; |
/* |
* Device which holds the client fs. For internal journal this will be |
* equal to j_dev. |
*/ |
struct block_device *j_fs_dev; |
/* Total maximum capacity of the journal region on disk. */ |
unsigned int j_maxlen; |
/* |
* Protects the buffer lists and internal buffer state. |
*/ |
spinlock_t j_list_lock; |
/* Optional inode where we store the journal. If present, all */ |
/* journal block numbers are mapped into this inode via */ |
/* bmap(). */ |
struct inode *j_inode; |
/* |
* Sequence number of the oldest transaction in the log [j_state_lock] |
*/ |
tid_t j_tail_sequence; |
/* |
* Sequence number of the next transaction to grant [j_state_lock] |
*/ |
tid_t j_transaction_sequence; |
/* |
* Sequence number of the most recently committed transaction |
* [j_state_lock]. |
*/ |
tid_t j_commit_sequence; |
/* |
* Sequence number of the most recent transaction wanting commit |
* [j_state_lock] |
*/ |
tid_t j_commit_request; |
/* |
* Journal uuid: identifies the object (filesystem, LVM volume etc) |
* backed by this journal. This will eventually be replaced by an array |
* of uuids, allowing us to index multiple devices within a single |
* journal and to perform atomic updates across them. |
*/ |
__u8 j_uuid[16]; |
/* Pointer to the current commit thread for this journal */ |
struct task_struct *j_task; |
/* |
* Maximum number of metadata buffers to allow in a single compound |
* commit transaction |
*/ |
int j_max_transaction_buffers; |
/* |
* What is the maximum transaction lifetime before we begin a commit? |
*/ |
unsigned long j_commit_interval; |
/* The timer used to wakeup the commit thread: */ |
struct timer_list *j_commit_timer; |
/* |
* The revoke table: maintains the list of revoked blocks in the |
* current transaction. [j_revoke_lock] |
*/ |
spinlock_t j_revoke_lock; |
struct jbd_revoke_table_s *j_revoke; |
struct jbd_revoke_table_s *j_revoke_table[2]; |
/* |
* An opaque pointer to fs-private information. ext3 puts its |
* superblock pointer here |
*/ |
void *j_private; |
}; |
/* |
* Journal flag definitions |
*/ |
#define JFS_UNMOUNT 0x001 /* Journal thread is being destroyed */ |
#define JFS_ABORT 0x002 /* Journaling has been aborted for errors. */ |
#define JFS_ACK_ERR 0x004 /* The errno in the sb has been acked */ |
#define JFS_FLUSHED 0x008 /* The journal superblock has been flushed */ |
#define JFS_LOADED 0x010 /* The journal superblock has been loaded */ |
/* |
* Function declarations for the journaling transaction and buffer |
* management |
*/ |
/* Filing buffers */ |
extern void journal_unfile_buffer(journal_t *, struct journal_head *); |
extern void __journal_unfile_buffer(struct journal_head *); |
extern void __journal_refile_buffer(struct journal_head *); |
extern void journal_refile_buffer(journal_t *, struct journal_head *); |
extern void __journal_file_buffer(struct journal_head *, transaction_t *, int); |
extern void __journal_free_buffer(struct journal_head *bh); |
extern void journal_file_buffer(struct journal_head *, transaction_t *, int); |
extern void __journal_clean_data_list(transaction_t *transaction); |
/* Log buffer allocation */ |
extern struct journal_head * journal_get_descriptor_buffer(journal_t *); |
int journal_next_log_block(journal_t *, unsigned long *); |
/* Commit management */ |
extern void journal_commit_transaction(journal_t *); |
/* Checkpoint list management */ |
int __journal_clean_checkpoint_list(journal_t *journal); |
void __journal_remove_checkpoint(struct journal_head *); |
void __journal_insert_checkpoint(struct journal_head *, transaction_t *); |
/* Buffer IO */ |
extern int |
journal_write_metadata_buffer(transaction_t *transaction, |
struct journal_head *jh_in, |
struct journal_head **jh_out, |
int blocknr); |
/* Transaction locking */ |
extern void __wait_on_journal (journal_t *); |
/* |
* Journal locking. |
* |
* We need to lock the journal during transaction state changes so that nobody |
* ever tries to take a handle on the running transaction while we are in the |
* middle of moving it to the commit phase. j_state_lock does this. |
* |
* Note that the locking is completely interrupt unsafe. We never touch |
* journal structures from interrupts. |
*/ |
static inline handle_t *journal_current_handle(void) |
{ |
return current->journal_info; |
} |
/* The journaling code user interface: |
* |
* Create and destroy handles |
* Register buffer modifications against the current transaction. |
*/ |
extern handle_t *journal_start(journal_t *, int nblocks); |
extern int journal_restart (handle_t *, int nblocks); |
extern int journal_extend (handle_t *, int nblocks); |
extern int journal_get_write_access(handle_t *, struct buffer_head *, |
int *credits); |
extern int journal_get_create_access (handle_t *, struct buffer_head *); |
extern int journal_get_undo_access(handle_t *, struct buffer_head *, |
int *credits); |
extern int journal_dirty_data (handle_t *, struct buffer_head *); |
extern int journal_dirty_metadata (handle_t *, struct buffer_head *); |
extern void journal_release_buffer (handle_t *, struct buffer_head *, |
int credits); |
extern void journal_forget (handle_t *, struct buffer_head *); |
extern void journal_sync_buffer (struct buffer_head *); |
extern int journal_invalidatepage(journal_t *, |
struct page *, unsigned long); |
extern int journal_try_to_free_buffers(journal_t *, struct page *, int); |
extern int journal_stop(handle_t *); |
extern int journal_flush (journal_t *); |
extern void journal_callback_set(handle_t *handle, |
void (*fn)(struct journal_callback *,int), |
struct journal_callback *jcb); |
extern void journal_lock_updates (journal_t *); |
extern void journal_unlock_updates (journal_t *); |
extern journal_t * journal_init_dev(struct block_device *bdev, |
struct block_device *fs_dev, |
int start, int len, int bsize); |
extern journal_t * journal_init_inode (struct inode *); |
extern int journal_update_format (journal_t *); |
extern int journal_check_used_features |
(journal_t *, unsigned long, unsigned long, unsigned long); |
extern int journal_check_available_features |
(journal_t *, unsigned long, unsigned long, unsigned long); |
extern int journal_set_features |
(journal_t *, unsigned long, unsigned long, unsigned long); |
extern int journal_create (journal_t *); |
extern int journal_load (journal_t *journal); |
extern void journal_destroy (journal_t *); |
extern int journal_recover (journal_t *journal); |
extern int journal_wipe (journal_t *, int); |
extern int journal_skip_recovery (journal_t *); |
extern void journal_update_superblock (journal_t *, int); |
extern void __journal_abort_hard (journal_t *); |
extern void __journal_abort_soft (journal_t *, int); |
extern void journal_abort (journal_t *, int); |
extern int journal_errno (journal_t *); |
extern void journal_ack_err (journal_t *); |
extern int journal_clear_err (journal_t *); |
extern int journal_bmap(journal_t *, unsigned long, unsigned long *); |
extern int journal_force_commit(journal_t *); |
/* |
* journal_head management |
*/ |
struct journal_head *journal_add_journal_head(struct buffer_head *bh); |
struct journal_head *journal_grab_journal_head(struct buffer_head *bh); |
void journal_remove_journal_head(struct buffer_head *bh); |
void journal_put_journal_head(struct journal_head *jh); |
/* |
* handle management |
*/ |
extern kmem_cache_t *jbd_handle_cache; |
static inline handle_t *jbd_alloc_handle(int gfp_flags) |
{ |
return kmem_cache_alloc(jbd_handle_cache, gfp_flags); |
} |
static inline void jbd_free_handle(handle_t *handle) |
{ |
kmem_cache_free(jbd_handle_cache, handle); |
} |
/* Primary revoke support */ |
#define JOURNAL_REVOKE_DEFAULT_HASH 256 |
extern int journal_init_revoke(journal_t *, int); |
extern void journal_destroy_revoke_caches(void); |
extern int journal_init_revoke_caches(void); |
extern void journal_destroy_revoke(journal_t *); |
extern int journal_revoke (handle_t *, |
unsigned long, struct buffer_head *); |
extern int journal_cancel_revoke(handle_t *, struct journal_head *); |
extern void journal_write_revoke_records(journal_t *, transaction_t *); |
/* Recovery revoke support */ |
extern int journal_set_revoke(journal_t *, unsigned long, tid_t); |
extern int journal_test_revoke(journal_t *, unsigned long, tid_t); |
extern void journal_clear_revoke(journal_t *); |
extern void journal_brelse_array(struct buffer_head *b[], int n); |
extern void journal_switch_revoke_table(journal_t *journal); |
/* |
* The log thread user interface: |
* |
* Request space in the current transaction, and force transaction commit |
* transitions on demand. |
*/ |
int __log_space_left(journal_t *); /* Called with journal locked */ |
int log_start_commit(journal_t *journal, tid_t tid); |
int __log_start_commit(journal_t *journal, tid_t tid); |
int journal_start_commit(journal_t *journal, tid_t *tid); |
int log_wait_commit(journal_t *journal, tid_t tid); |
int log_do_checkpoint(journal_t *journal); |
void __log_wait_for_space(journal_t *journal); |
extern void __journal_drop_transaction(journal_t *, transaction_t *); |
extern int cleanup_journal_tail(journal_t *); |
/* Debugging code only: */ |
#define jbd_ENOSYS() \ |
do { \ |
printk (KERN_ERR "JBD unimplemented function " __FUNCTION__); \ |
current->state = TASK_UNINTERRUPTIBLE; \ |
schedule(); \ |
} while (1) |
/* |
* is_journal_abort |
* |
* Simple test wrapper function to test the JFS_ABORT state flag. This |
* bit, when set, indicates that we have had a fatal error somewhere, |
* either inside the journaling layer or indicated to us by the client |
* (eg. ext3), and that we and should not commit any further |
* transactions. |
*/ |
static inline int is_journal_aborted(journal_t *journal) |
{ |
return journal->j_flags & JFS_ABORT; |
} |
static inline int is_handle_aborted(handle_t *handle) |
{ |
if (handle->h_aborted) |
return 1; |
return is_journal_aborted(handle->h_transaction->t_journal); |
} |
static inline void journal_abort_handle(handle_t *handle) |
{ |
handle->h_aborted = 1; |
} |
#endif /* __KERNEL__ */ |
/* Comparison functions for transaction IDs: perform comparisons using |
* modulo arithmetic so that they work over sequence number wraps. */ |
static inline int tid_gt(tid_t x, tid_t y) |
{ |
int difference = (x - y); |
return (difference > 0); |
} |
static inline int tid_geq(tid_t x, tid_t y) |
{ |
int difference = (x - y); |
return (difference >= 0); |
} |
extern int journal_blocks_per_page(struct inode *inode); |
/* |
* Return the minimum number of blocks which must be free in the journal |
* before a new transaction may be started. Must be called under j_state_lock. |
*/ |
static inline int jbd_space_needed(journal_t *journal) |
{ |
int nblocks = journal->j_max_transaction_buffers; |
if (journal->j_committing_transaction) |
nblocks += journal->j_committing_transaction-> |
t_outstanding_credits; |
return nblocks; |
} |
/* |
* Definitions which augment the buffer_head layer |
*/ |
/* journaling buffer types */ |
#define BJ_None 0 /* Not journaled */ |
#define BJ_SyncData 1 /* Normal data: flush before commit */ |
#define BJ_Metadata 2 /* Normal journaled metadata */ |
#define BJ_Forget 3 /* Buffer superseded by this transaction */ |
#define BJ_IO 4 /* Buffer is for temporary IO use */ |
#define BJ_Shadow 5 /* Buffer contents being shadowed to the log */ |
#define BJ_LogCtl 6 /* Buffer contains log descriptors */ |
#define BJ_Reserved 7 /* Buffer is reserved for access by journal */ |
#define BJ_Types 8 |
extern int jbd_blocks_per_page(struct inode *inode); |
#ifdef __KERNEL__ |
#ifdef CONFIG_SMP |
#define assert_spin_locked(lock) J_ASSERT(spin_is_locked(lock)) |
#else |
#define assert_spin_locked(lock) do {} while(0) |
#endif |
#define buffer_trace_init(bh) do {} while (0) |
#define print_buffer_fields(bh) do {} while (0) |
#define print_buffer_trace(bh) do {} while (0) |
#define BUFFER_TRACE(bh, info) do {} while (0) |
#define BUFFER_TRACE2(bh, bh2, info) do {} while (0) |
#define JBUFFER_TRACE(jh, info) do {} while (0) |
#endif /* __KERNEL__ */ |
#endif /* CONFIG_JBD || CONFIG_JBD_MODULE || !__KERNEL__ */ |
/* |
* Compatibility no-ops which allow the kernel to compile without CONFIG_JBD |
* go here. |
*/ |
#if defined(__KERNEL__) && !(defined(CONFIG_JBD) || defined(CONFIG_JBD_MODULE)) |
#define J_ASSERT(expr) do {} while (0) |
#define J_ASSERT_BH(bh, expr) do {} while (0) |
#define buffer_jbd(bh) 0 |
#define journal_buffer_journal_lru(bh) 0 |
#endif /* defined(__KERNEL__) && !defined(CONFIG_JBD) */ |
#endif /* _LINUX_JBD_H */ |
/shark/trunk/drivers/linuxc26/include/linux/profile.h |
---|
0,0 → 1,88 |
#ifndef _LINUX_PROFILE_H |
#define _LINUX_PROFILE_H |
#ifdef __KERNEL__ |
#include <linux/kernel.h> |
#include <linux/config.h> |
#include <linux/init.h> |
#include <asm/errno.h> |
/* parse command line */ |
int __init profile_setup(char * str); |
/* init basic kernel profiler */ |
void __init profile_init(void); |
extern unsigned int * prof_buffer; |
extern unsigned long prof_len; |
extern unsigned long prof_shift; |
extern int prof_on; |
enum profile_type { |
EXIT_TASK, |
EXIT_MMAP, |
EXEC_UNMAP |
}; |
#ifdef CONFIG_PROFILING |
struct notifier_block; |
struct task_struct; |
struct mm_struct; |
/* task is in do_exit() */ |
void profile_exit_task(struct task_struct * task); |
/* change of vma mappings */ |
void profile_exec_unmap(struct mm_struct * mm); |
/* exit of all vmas for a task */ |
void profile_exit_mmap(struct mm_struct * mm); |
int profile_event_register(enum profile_type, struct notifier_block * n); |
int profile_event_unregister(enum profile_type, struct notifier_block * n); |
int register_profile_notifier(struct notifier_block * nb); |
int unregister_profile_notifier(struct notifier_block * nb); |
struct pt_regs; |
/* profiling hook activated on each timer interrupt */ |
void profile_hook(struct pt_regs * regs); |
#else |
static inline int profile_event_register(enum profile_type t, struct notifier_block * n) |
{ |
return -ENOSYS; |
} |
static inline int profile_event_unregister(enum profile_type t, struct notifier_block * n) |
{ |
return -ENOSYS; |
} |
#define profile_exit_task(a) do { } while (0) |
#define profile_exec_unmap(a) do { } while (0) |
#define profile_exit_mmap(a) do { } while (0) |
static inline int register_profile_notifier(struct notifier_block * nb) |
{ |
return -ENOSYS; |
} |
static inline int unregister_profile_notifier(struct notifier_block * nb) |
{ |
return -ENOSYS; |
} |
#define profile_hook(regs) do { } while (0) |
#endif /* CONFIG_PROFILING */ |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_PROFILE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/i2o-dev.h |
---|
0,0 → 1,409 |
/* |
* 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 includs 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> |
/* |
* 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) |
struct i2o_cmd_hrtlct |
{ |
unsigned int iop; /* IOP unit number */ |
void *resbuf; /* Buffer for result */ |
unsigned int *reslen; /* Buffer length in bytes */ |
}; |
struct i2o_cmd_psetget |
{ |
unsigned int iop; /* IOP unit number */ |
unsigned int tid; /* Target device TID */ |
void *opbuf; /* Operation List buffer */ |
unsigned int oplen; /* Operation List buffer length in bytes */ |
void *resbuf; /* Result List buffer */ |
unsigned int *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 *buf; /* Pointer to software buffer */ |
unsigned int *swlen; /* Length of software data */ |
unsigned int *maxfrag; /* Maximum fragment count */ |
unsigned int *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 *resbuf; /* Buffer for reply HTML page */ |
unsigned int *reslen; /* Length in bytes of reply buffer */ |
void *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; |
}; |
/************************************************************************** |
* HRT related constants and structures |
**************************************************************************/ |
#define I2O_BUS_LOCAL 0 |
#define I2O_BUS_ISA 1 |
#define I2O_BUS_EISA 2 |
#define 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 |
#ifndef __KERNEL__ |
typedef unsigned char u8; |
typedef unsigned short u16; |
typedef unsigned int u32; |
#endif /* __KERNEL__ */ |
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 tate: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_PORT 0x080 |
#define I2O_CLASS_PEER_TRANSPORT_AGENT 0x090 |
#define I2O_CLASS_PEER_TRANSPORT 0x091 |
/* |
* 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 |
#endif /* _I2O_DEV_H */ |
/shark/trunk/drivers/linuxc26/include/linux/affs_fs.h |
---|
0,0 → 1,96 |
#ifndef _AFFS_FS_H |
#define _AFFS_FS_H |
/* |
* The affs filesystem constants/structures |
*/ |
#include <linux/types.h> |
#include <linux/affs_fs_i.h> |
#include <linux/affs_fs_sb.h> |
#define AFFS_SUPER_MAGIC 0xadff |
struct affs_date; |
/* --- Prototypes ----------------------------------------------------------------------------- */ |
/* amigaffs.c */ |
extern int affs_insert_hash(struct inode *inode, struct buffer_head *bh); |
extern int affs_remove_hash(struct inode *dir, struct buffer_head *rem_bh); |
extern int affs_remove_header(struct dentry *dentry); |
extern u32 affs_checksum_block(struct super_block *sb, struct buffer_head *bh); |
extern void affs_fix_checksum(struct super_block *sb, struct buffer_head *bh); |
extern void secs_to_datestamp(time_t secs, struct affs_date *ds); |
extern mode_t prot_to_mode(u32 prot); |
extern void mode_to_prot(struct inode *inode); |
extern void affs_error(struct super_block *sb, const char *function, const char *fmt, ...); |
extern void affs_warning(struct super_block *sb, const char *function, const char *fmt, ...); |
extern int affs_check_name(const unsigned char *name, int len); |
extern int affs_copy_name(unsigned char *bstr, struct dentry *dentry); |
/* bitmap. c */ |
extern u32 affs_count_free_bits(u32 blocksize, const void *data); |
extern u32 affs_count_free_blocks(struct super_block *s); |
extern void affs_free_block(struct super_block *sb, u32 block); |
extern u32 affs_alloc_block(struct inode *inode, u32 goal); |
extern int affs_init_bitmap(struct super_block *sb); |
/* namei.c */ |
extern int affs_hash_name(struct super_block *sb, const u8 *name, unsigned int len); |
extern struct dentry *affs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *); |
extern int affs_unlink(struct inode *dir, struct dentry *dentry); |
extern int affs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *); |
extern int affs_mkdir(struct inode *dir, struct dentry *dentry, int mode); |
extern int affs_rmdir(struct inode *dir, struct dentry *dentry); |
extern int affs_link(struct dentry *olddentry, struct inode *dir, |
struct dentry *dentry); |
extern int affs_symlink(struct inode *dir, struct dentry *dentry, |
const char *symname); |
extern int affs_rename(struct inode *old_dir, struct dentry *old_dentry, |
struct inode *new_dir, struct dentry *new_dentry); |
/* inode.c */ |
extern unsigned long affs_parent_ino(struct inode *dir); |
extern struct inode *affs_new_inode(struct inode *dir); |
extern int affs_notify_change(struct dentry *dentry, struct iattr *attr); |
extern void affs_put_inode(struct inode *inode); |
extern void affs_delete_inode(struct inode *inode); |
extern void affs_clear_inode(struct inode *inode); |
extern void affs_read_inode(struct inode *inode); |
extern void affs_write_inode(struct inode *inode, int); |
extern int affs_add_entry(struct inode *dir, struct inode *inode, struct dentry *dentry, s32 type); |
/* super.c */ |
extern int affs_fs(void); |
/* file.c */ |
void affs_free_prealloc(struct inode *inode); |
extern void affs_truncate(struct inode *); |
/* dir.c */ |
extern void affs_dir_truncate(struct inode *); |
/* jump tables */ |
extern struct inode_operations affs_file_inode_operations; |
extern struct inode_operations affs_dir_inode_operations; |
extern struct inode_operations affs_symlink_inode_operations; |
extern struct file_operations affs_file_operations; |
extern struct file_operations affs_file_operations_ofs; |
extern struct file_operations affs_dir_operations; |
extern struct address_space_operations affs_symlink_aops; |
extern struct address_space_operations affs_aops; |
extern struct address_space_operations affs_aops_ofs; |
extern struct dentry_operations affs_dentry_operations; |
extern struct dentry_operations affs_dentry_operations_intl; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/acpi.h |
---|
0,0 → 1,440 |
/* |
* acpi.h - ACPI Interface |
* |
* Copyright (C) 2001 Paul Diefenbaugh <paul.s.diefenbaugh@intel.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 _LINUX_ACPI_H |
#define _LINUX_ACPI_H |
#ifndef _LINUX |
#define _LINUX |
#endif |
#include <linux/list.h> |
#include <acpi/acpi.h> |
#include <acpi/acpi_bus.h> |
#include <acpi/acpi_drivers.h> |
#include <asm/acpi.h> |
#ifdef CONFIG_ACPI_BOOT |
enum acpi_irq_model_id { |
ACPI_IRQ_MODEL_PIC = 0, |
ACPI_IRQ_MODEL_IOAPIC, |
ACPI_IRQ_MODEL_IOSAPIC, |
ACPI_IRQ_MODEL_COUNT |
}; |
extern enum acpi_irq_model_id acpi_irq_model; |
/* Root System Description Pointer (RSDP) */ |
struct acpi_table_rsdp { |
char signature[8]; |
u8 checksum; |
char oem_id[6]; |
u8 revision; |
u32 rsdt_address; |
} __attribute__ ((packed)); |
struct acpi20_table_rsdp { |
char signature[8]; |
u8 checksum; |
char oem_id[6]; |
u8 revision; |
u32 rsdt_address; |
u32 length; |
u64 xsdt_address; |
u8 ext_checksum; |
u8 reserved[3]; |
} __attribute__ ((packed)); |
typedef struct { |
u8 type; |
u8 length; |
} __attribute__ ((packed)) acpi_table_entry_header; |
/* Root System Description Table (RSDT) */ |
struct acpi_table_rsdt { |
struct acpi_table_header header; |
u32 entry[8]; |
} __attribute__ ((packed)); |
/* Extended System Description Table (XSDT) */ |
struct acpi_table_xsdt { |
struct acpi_table_header header; |
u64 entry[1]; |
} __attribute__ ((packed)); |
/* Fixed ACPI Description Table (FADT) */ |
struct acpi_table_fadt { |
struct acpi_table_header header; |
u32 facs_addr; |
u32 dsdt_addr; |
/* ... */ |
} __attribute__ ((packed)); |
/* Multiple APIC Description Table (MADT) */ |
struct acpi_table_madt { |
struct acpi_table_header header; |
u32 lapic_address; |
struct { |
u32 pcat_compat:1; |
u32 reserved:31; |
} flags; |
} __attribute__ ((packed)); |
enum acpi_madt_entry_id { |
ACPI_MADT_LAPIC = 0, |
ACPI_MADT_IOAPIC, |
ACPI_MADT_INT_SRC_OVR, |
ACPI_MADT_NMI_SRC, |
ACPI_MADT_LAPIC_NMI, |
ACPI_MADT_LAPIC_ADDR_OVR, |
ACPI_MADT_IOSAPIC, |
ACPI_MADT_LSAPIC, |
ACPI_MADT_PLAT_INT_SRC, |
ACPI_MADT_ENTRY_COUNT |
}; |
typedef struct { |
u16 polarity:2; |
u16 trigger:2; |
u16 reserved:12; |
} __attribute__ ((packed)) acpi_interrupt_flags; |
struct acpi_table_lapic { |
acpi_table_entry_header header; |
u8 acpi_id; |
u8 id; |
struct { |
u32 enabled:1; |
u32 reserved:31; |
} flags; |
} __attribute__ ((packed)); |
struct acpi_table_ioapic { |
acpi_table_entry_header header; |
u8 id; |
u8 reserved; |
u32 address; |
u32 global_irq_base; |
} __attribute__ ((packed)); |
struct acpi_table_int_src_ovr { |
acpi_table_entry_header header; |
u8 bus; |
u8 bus_irq; |
u32 global_irq; |
acpi_interrupt_flags flags; |
} __attribute__ ((packed)); |
struct acpi_table_nmi_src { |
acpi_table_entry_header header; |
acpi_interrupt_flags flags; |
u32 global_irq; |
} __attribute__ ((packed)); |
struct acpi_table_lapic_nmi { |
acpi_table_entry_header header; |
u8 acpi_id; |
acpi_interrupt_flags flags; |
u8 lint; |
} __attribute__ ((packed)); |
struct acpi_table_lapic_addr_ovr { |
acpi_table_entry_header header; |
u8 reserved[2]; |
u64 address; |
} __attribute__ ((packed)); |
struct acpi_table_iosapic { |
acpi_table_entry_header header; |
u8 id; |
u8 reserved; |
u32 global_irq_base; |
u64 address; |
} __attribute__ ((packed)); |
struct acpi_table_lsapic { |
acpi_table_entry_header header; |
u8 acpi_id; |
u8 id; |
u8 eid; |
u8 reserved[3]; |
struct { |
u32 enabled:1; |
u32 reserved:31; |
} flags; |
} __attribute__ ((packed)); |
struct acpi_table_plat_int_src { |
acpi_table_entry_header header; |
acpi_interrupt_flags flags; |
u8 type; /* See acpi_interrupt_type */ |
u8 id; |
u8 eid; |
u8 iosapic_vector; |
u32 global_irq; |
u32 reserved; |
} __attribute__ ((packed)); |
enum acpi_interrupt_id { |
ACPI_INTERRUPT_PMI = 1, |
ACPI_INTERRUPT_INIT, |
ACPI_INTERRUPT_CPEI, |
ACPI_INTERRUPT_COUNT |
}; |
#define ACPI_SPACE_MEM 0 |
struct acpi_gen_regaddr { |
u8 space_id; |
u8 bit_width; |
u8 bit_offset; |
u8 resv; |
u32 addrl; |
u32 addrh; |
} __attribute__ ((packed)); |
struct acpi_table_hpet { |
struct acpi_table_header header; |
u32 id; |
struct acpi_gen_regaddr addr; |
u8 number; |
u16 min_tick; |
u8 page_protect; |
} __attribute__ ((packed)); |
/* |
* System Resource Affinity Table (SRAT) |
* see http://www.microsoft.com/hwdev/design/srat.htm |
*/ |
struct acpi_table_srat { |
struct acpi_table_header header; |
u32 table_revision; |
u64 reserved; |
} __attribute__ ((packed)); |
enum acpi_srat_entry_id { |
ACPI_SRAT_PROCESSOR_AFFINITY = 0, |
ACPI_SRAT_MEMORY_AFFINITY, |
ACPI_SRAT_ENTRY_COUNT |
}; |
struct acpi_table_processor_affinity { |
acpi_table_entry_header header; |
u8 proximity_domain; |
u8 apic_id; |
struct { |
u32 enabled:1; |
u32 reserved:31; |
} flags; |
u8 lsapic_eid; |
u8 reserved[7]; |
} __attribute__ ((packed)); |
struct acpi_table_memory_affinity { |
acpi_table_entry_header header; |
u8 proximity_domain; |
u8 reserved1[5]; |
u32 base_addr_lo; |
u32 base_addr_hi; |
u32 length_lo; |
u32 length_hi; |
u32 memory_type; /* See acpi_address_range_id */ |
struct { |
u32 enabled:1; |
u32 hot_pluggable:1; |
u32 reserved:30; |
} flags; |
u64 reserved2; |
} __attribute__ ((packed)); |
enum acpi_address_range_id { |
ACPI_ADDRESS_RANGE_MEMORY = 1, |
ACPI_ADDRESS_RANGE_RESERVED = 2, |
ACPI_ADDRESS_RANGE_ACPI = 3, |
ACPI_ADDRESS_RANGE_NVS = 4, |
ACPI_ADDRESS_RANGE_COUNT |
}; |
/* |
* System Locality Information Table (SLIT) |
* see http://devresource.hp.com/devresource/docs/techpapers/ia64/slit.pdf |
*/ |
struct acpi_table_slit { |
struct acpi_table_header header; |
u64 localities; |
u8 entry[1]; /* real size = localities^2 */ |
} __attribute__ ((packed)); |
/* Smart Battery Description Table (SBST) */ |
struct acpi_table_sbst { |
struct acpi_table_header header; |
u32 warning; /* Warn user */ |
u32 low; /* Critical sleep */ |
u32 critical; /* Critical shutdown */ |
} __attribute__ ((packed)); |
/* Embedded Controller Boot Resources Table (ECDT) */ |
struct acpi_table_ecdt { |
struct acpi_table_header header; |
struct acpi_generic_address ec_control; |
struct acpi_generic_address ec_data; |
u32 uid; |
u8 gpe_bit; |
char ec_id[0]; |
} __attribute__ ((packed)); |
/* Table Handlers */ |
enum acpi_table_id { |
ACPI_TABLE_UNKNOWN = 0, |
ACPI_APIC, |
ACPI_BOOT, |
ACPI_DBGP, |
ACPI_DSDT, |
ACPI_ECDT, |
ACPI_ETDT, |
ACPI_FADT, |
ACPI_FACS, |
ACPI_OEMX, |
ACPI_PSDT, |
ACPI_SBST, |
ACPI_SLIT, |
ACPI_SPCR, |
ACPI_SRAT, |
ACPI_SSDT, |
ACPI_SPMI, |
ACPI_HPET, |
ACPI_TABLE_COUNT |
}; |
typedef int (*acpi_table_handler) (unsigned long phys_addr, unsigned long size); |
extern acpi_table_handler acpi_table_ops[ACPI_TABLE_COUNT]; |
typedef int (*acpi_madt_entry_handler) (acpi_table_entry_header *header); |
char * __acpi_map_table (unsigned long phys_addr, unsigned long size); |
unsigned long acpi_find_rsdp (void); |
int acpi_boot_init (void); |
int acpi_numa_init (void); |
int acpi_table_init (void); |
int acpi_table_parse (enum acpi_table_id id, acpi_table_handler handler); |
int acpi_get_table_header_early (enum acpi_table_id id, struct acpi_table_header **header); |
int acpi_table_parse_madt (enum acpi_madt_entry_id id, acpi_madt_entry_handler handler); |
int acpi_table_parse_srat (enum acpi_srat_entry_id id, acpi_madt_entry_handler handler); |
void acpi_table_print (struct acpi_table_header *header, unsigned long phys_addr); |
void acpi_table_print_madt_entry (acpi_table_entry_header *madt); |
void acpi_table_print_srat_entry (acpi_table_entry_header *srat); |
/* the following four functions are architecture-dependent */ |
void acpi_numa_slit_init (struct acpi_table_slit *slit); |
void acpi_numa_processor_affinity_init (struct acpi_table_processor_affinity *pa); |
void acpi_numa_memory_affinity_init (struct acpi_table_memory_affinity *ma); |
void acpi_numa_arch_fixup(void); |
extern int acpi_mp_config; |
#else /*!CONFIG_ACPI_BOOT*/ |
#define acpi_mp_config 0 |
static inline int acpi_boot_init(void) |
{ |
return 0; |
} |
#endif /*!CONFIG_ACPI_BOOT*/ |
#ifdef CONFIG_ACPI_PCI |
struct acpi_prt_entry { |
struct list_head node; |
struct acpi_pci_id id; |
u8 pin; |
struct { |
acpi_handle handle; |
u32 index; |
} link; |
u32 irq; |
}; |
struct acpi_prt_list { |
int count; |
struct list_head entries; |
}; |
extern struct acpi_prt_list acpi_prt; |
struct pci_dev; |
int acpi_pci_irq_enable (struct pci_dev *dev); |
int acpi_pci_irq_init (void); |
struct acpi_pci_driver { |
struct acpi_pci_driver *next; |
int (*add)(acpi_handle handle); |
void (*remove)(acpi_handle handle); |
}; |
int acpi_pci_register_driver(struct acpi_pci_driver *driver); |
void acpi_pci_unregister_driver(struct acpi_pci_driver *driver); |
#endif /*CONFIG_ACPI_PCI*/ |
#ifdef CONFIG_ACPI_EC |
int ec_read(u8 addr, u8 *val); |
int ec_write(u8 addr, u8 val); |
#endif /*CONFIG_ACPI_EC*/ |
#ifdef CONFIG_ACPI_INTERPRETER |
int acpi_blacklisted(void); |
#else /*!CONFIG_ACPI_INTERPRETER*/ |
static inline int acpi_blacklisted(void) |
{ |
return 0; |
} |
#endif /*!CONFIG_ACPI_INTERPRETER*/ |
#endif /*_LINUX_ACPI_H*/ |
/shark/trunk/drivers/linuxc26/include/linux/dnotify.h |
---|
0,0 → 1,27 |
/* |
* Directory notification for Linux |
* |
* Copyright (C) 2000,2002 Stephen Rothwell |
*/ |
#include <linux/fs.h> |
struct dnotify_struct { |
struct dnotify_struct * dn_next; |
unsigned long dn_mask; /* Events to be notified |
see linux/fcntl.h */ |
int dn_fd; |
struct file * dn_filp; |
fl_owner_t dn_owner; |
}; |
extern void __inode_dir_notify(struct inode *, unsigned long); |
extern void dnotify_flush(struct file *filp, fl_owner_t id); |
extern int fcntl_dirnotify(int, struct file *, unsigned long); |
void dnotify_parent(struct dentry *dentry, unsigned long event); |
static inline void inode_dir_notify(struct inode *inode, unsigned long event) |
{ |
if ((inode)->i_dnotify_mask & (event)) |
__inode_dir_notify(inode, event); |
} |
/shark/trunk/drivers/linuxc26/include/linux/cyclomx.h |
---|
0,0 → 1,80 |
#ifndef _CYCLOMX_H |
#define _CYCLOMX_H |
/* |
* cyclomx.h Cyclom 2X WAN Link Driver. |
* User-level API definitions. |
* |
* Author: Arnaldo Carvalho de Melo <acme@conectiva.com.br> |
* |
* Copyright: (c) 1998-2003 Arnaldo Carvalho de Melo |
* |
* Based on wanpipe.h by Gene Kozin <genek@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. |
* ============================================================================ |
* 2000/07/13 acme remove crap #if KERNEL_VERSION > blah |
* 2000/01/21 acme rename cyclomx_open to cyclomx_mod_inc_use_count |
* and cyclomx_close to cyclomx_mod_dec_use_count |
* 1999/05/19 acme wait_queue_head_t wait_stats(support for 2.3.*) |
* 1999/01/03 acme judicious use of data types |
* 1998/12/27 acme cleanup: PACKED not needed |
* 1998/08/08 acme Version 0.0.1 |
*/ |
#include <linux/config.h> |
#include <linux/wanrouter.h> |
#include <linux/spinlock.h> |
#ifdef __KERNEL__ |
/* Kernel Interface */ |
#include <linux/cycx_drv.h> /* Cyclom 2X support module API definitions */ |
#include <linux/cycx_cfm.h> /* Cyclom 2X firmware module definitions */ |
#ifdef CONFIG_CYCLOMX_X25 |
#include <linux/cycx_x25.h> |
#endif |
#define is_digit(ch) (((ch)>=(unsigned)'0'&&(ch)<=(unsigned)'9')?1:0) |
/* Adapter Data Space. |
* This structure is needed because we handle multiple cards, otherwise |
* static data would do it. |
*/ |
struct cycx_device { |
char devname[WAN_DRVNAME_SZ + 1];/* card name */ |
struct cycx_hw hw; /* hardware configuration */ |
struct wan_device wandev; /* WAN device data space */ |
u32 state_tick; /* link state timestamp */ |
spinlock_t lock; |
char in_isr; /* interrupt-in-service flag */ |
char buff_int_mode_unbusy; /* flag for carrying out dev_tint */ |
wait_queue_head_t wait_stats; /* to wait for the STATS indication */ |
void *mbox; /* -> mailbox */ |
void (*isr)(struct cycx_device* card); /* interrupt service routine */ |
int (*exec)(struct cycx_device* card, void* u_cmd, void* u_data); |
union { |
#ifdef CONFIG_CYCLOMX_X25 |
struct { /* X.25 specific data */ |
u32 lo_pvc; |
u32 hi_pvc; |
u32 lo_svc; |
u32 hi_svc; |
struct cycx_x25_stats stats; |
spinlock_t lock; |
u32 connection_keys; |
} x; |
#endif |
} u; |
}; |
/* Public Functions */ |
void cycx_set_state(struct cycx_device *card, int state); |
#ifdef CONFIG_CYCLOMX_X25 |
int cycx_x25_wan_init(struct cycx_device *card, wandev_conf_t *conf); |
#endif |
#endif /* __KERNEL__ */ |
#endif /* _CYCLOMX_H */ |
/shark/trunk/drivers/linuxc26/include/linux/if_vlan.h |
---|
0,0 → 1,243 |
/* |
* 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 _LINUX_IF_VLAN_H_ |
#define _LINUX_IF_VLAN_H_ |
#ifdef __KERNEL__ |
/* externally defined structs */ |
struct vlan_group; |
struct net_device; |
struct sk_buff; |
struct packet_type; |
struct vlan_collection; |
struct vlan_dev_info; |
#include <linux/proc_fs.h> /* for proc_dir_entry */ |
#include <linux/netdevice.h> |
#define VLAN_HLEN 4 /* The additional bytes (on top of the Ethernet header) |
* that VLAN requires. |
*/ |
#define VLAN_ETH_ALEN 6 /* Octets in one ethernet addr */ |
#define VLAN_ETH_HLEN 18 /* Total octets in header. */ |
#define VLAN_ETH_ZLEN 64 /* Min. octets in frame sans FCS */ |
/* |
* According to 802.3ac, the packet can be 4 bytes longer. --Klika Jan |
*/ |
#define VLAN_ETH_DATA_LEN 1500 /* Max. octets in payload */ |
#define VLAN_ETH_FRAME_LEN 1518 /* Max. octets in frame sans FCS */ |
struct vlan_ethhdr { |
unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ |
unsigned char h_source[ETH_ALEN]; /* source ether addr */ |
unsigned short h_vlan_proto; /* Should always be 0x8100 */ |
unsigned short h_vlan_TCI; /* Encapsulates priority and VLAN ID */ |
unsigned short h_vlan_encapsulated_proto; /* packet type ID field (or len) */ |
}; |
struct vlan_hdr { |
unsigned short h_vlan_TCI; /* Encapsulates priority and VLAN ID */ |
unsigned short h_vlan_encapsulated_proto; /* packet type ID field (or len) */ |
}; |
#define VLAN_VID_MASK 0xfff |
/* found in socket.c */ |
extern void vlan_ioctl_set(int (*hook)(unsigned long)); |
#define VLAN_NAME "vlan" |
/* if this changes, algorithm will have to be reworked because this |
* depends on completely exhausting the VLAN identifier space. Thus |
* it gives constant time look-up, but in many cases it wastes memory. |
*/ |
#define VLAN_GROUP_ARRAY_LEN 4096 |
struct vlan_group { |
int real_dev_ifindex; /* The ifindex of the ethernet(like) device the vlan is attached to. */ |
struct net_device *vlan_devices[VLAN_GROUP_ARRAY_LEN]; |
struct vlan_group *next; /* the next in the list */ |
}; |
struct vlan_priority_tci_mapping { |
unsigned long priority; |
unsigned short vlan_qos; /* This should be shifted when first set, so we only do it |
* at provisioning time. |
* ((skb->priority << 13) & 0xE000) |
*/ |
struct vlan_priority_tci_mapping *next; |
}; |
/* Holds information that makes sense if this device is a VLAN device. */ |
struct vlan_dev_info { |
/** This will be the mapping that correlates skb->priority to |
* 3 bits of VLAN QOS tags... |
*/ |
unsigned long ingress_priority_map[8]; |
struct vlan_priority_tci_mapping *egress_priority_map[16]; /* hash table */ |
unsigned short vlan_id; /* The VLAN Identifier for this interface. */ |
unsigned short flags; /* (1 << 0) re_order_header This option will cause the |
* VLAN code to move around the ethernet header on |
* ingress to make the skb look **exactly** like it |
* came in from an ethernet port. This destroys some of |
* the VLAN information in the skb, but it fixes programs |
* like DHCP that use packet-filtering and don't understand |
* 802.1Q |
*/ |
struct dev_mc_list *old_mc_list; /* old multi-cast list for the VLAN interface.. |
* we save this so we can tell what changes were |
* made, in order to feed the right changes down |
* to the real hardware... |
*/ |
int old_allmulti; /* similar to above. */ |
int old_promiscuity; /* similar to above. */ |
struct net_device *real_dev; /* the underlying device/interface */ |
struct proc_dir_entry *dent; /* Holds the proc data */ |
unsigned long cnt_inc_headroom_on_tx; /* How many times did we have to grow the skb on TX. */ |
unsigned long cnt_encap_on_xmit; /* How many times did we have to encapsulate the skb on TX. */ |
struct net_device_stats dev_stats; /* Device stats (rx-bytes, tx-pkts, etc...) */ |
}; |
#define VLAN_DEV_INFO(x) ((struct vlan_dev_info *)(x->priv)) |
/* inline functions */ |
static inline struct net_device_stats *vlan_dev_get_stats(struct net_device *dev) |
{ |
return &(VLAN_DEV_INFO(dev)->dev_stats); |
} |
static inline __u32 vlan_get_ingress_priority(struct net_device *dev, |
unsigned short vlan_tag) |
{ |
struct vlan_dev_info *vip = VLAN_DEV_INFO(dev); |
return vip->ingress_priority_map[(vlan_tag >> 13) & 0x7]; |
} |
/* VLAN tx hw acceleration helpers. */ |
struct vlan_skb_tx_cookie { |
u32 magic; |
u32 vlan_tag; |
}; |
#define VLAN_TX_COOKIE_MAGIC 0x564c414e /* "VLAN" in ascii. */ |
#define VLAN_TX_SKB_CB(__skb) ((struct vlan_skb_tx_cookie *)&((__skb)->cb[0])) |
#define vlan_tx_tag_present(__skb) \ |
(VLAN_TX_SKB_CB(__skb)->magic == VLAN_TX_COOKIE_MAGIC) |
#define vlan_tx_tag_get(__skb) (VLAN_TX_SKB_CB(__skb)->vlan_tag) |
/* VLAN rx hw acceleration helper. This acts like netif_{rx,receive_skb}(). */ |
static inline int __vlan_hwaccel_rx(struct sk_buff *skb, |
struct vlan_group *grp, |
unsigned short vlan_tag, int polling) |
{ |
struct net_device_stats *stats; |
skb->real_dev = skb->dev; |
skb->dev = grp->vlan_devices[vlan_tag & VLAN_VID_MASK]; |
if (skb->dev == NULL) { |
kfree_skb(skb); |
/* Not NET_RX_DROP, this is not being dropped |
* due to congestion. |
*/ |
return 0; |
} |
skb->dev->last_rx = jiffies; |
stats = vlan_dev_get_stats(skb->dev); |
stats->rx_packets++; |
stats->rx_bytes += skb->len; |
skb->priority = vlan_get_ingress_priority(skb->dev, vlan_tag); |
switch (skb->pkt_type) { |
case PACKET_BROADCAST: |
break; |
case PACKET_MULTICAST: |
stats->multicast++; |
break; |
case PACKET_OTHERHOST: |
/* Our lower layer thinks this is not local, let's make sure. |
* This allows the VLAN to have a different MAC than the underlying |
* device, and still route correctly. |
*/ |
if (!memcmp(skb->mac.ethernet->h_dest, skb->dev->dev_addr, ETH_ALEN)) |
skb->pkt_type = PACKET_HOST; |
break; |
}; |
return (polling ? netif_receive_skb(skb) : netif_rx(skb)); |
} |
static inline int vlan_hwaccel_rx(struct sk_buff *skb, |
struct vlan_group *grp, |
unsigned short vlan_tag) |
{ |
return __vlan_hwaccel_rx(skb, grp, vlan_tag, 0); |
} |
static inline int vlan_hwaccel_receive_skb(struct sk_buff *skb, |
struct vlan_group *grp, |
unsigned short vlan_tag) |
{ |
return __vlan_hwaccel_rx(skb, grp, vlan_tag, 1); |
} |
#endif /* __KERNEL__ */ |
/* 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 |
}; |
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_info flags */ |
} u; |
short vlan_qos; |
}; |
#endif /* !(_LINUX_IF_VLAN_H_) */ |
/shark/trunk/drivers/linuxc26/include/linux/kbd_kern.h |
---|
0,0 → 1,157 |
#ifndef _KBD_KERN_H |
#define _KBD_KERN_H |
#include <linux/tty.h> |
#include <linux/interrupt.h> |
#include <linux/keyboard.h> |
extern struct tasklet_struct keyboard_tasklet; |
extern int shift_state; |
extern char *func_table[MAX_NR_FUNC]; |
extern char func_buf[]; |
extern char *funcbufptr; |
extern int funcbufsize, funcbufleft; |
/* |
* kbd->xxx contains the VC-local things (flag settings etc..) |
* |
* Note: externally visible are LED_SCR, LED_NUM, LED_CAP defined in kd.h |
* The code in KDGETLED / KDSETLED depends on the internal and |
* external order being the same. |
* |
* Note: lockstate is used as index in the array key_map. |
*/ |
struct kbd_struct { |
unsigned char lockstate; |
/* 8 modifiers - the names do not have any meaning at all; |
they can be associated to arbitrarily chosen keys */ |
#define VC_SHIFTLOCK KG_SHIFT /* shift lock mode */ |
#define VC_ALTGRLOCK KG_ALTGR /* altgr lock mode */ |
#define VC_CTRLLOCK KG_CTRL /* control lock mode */ |
#define VC_ALTLOCK KG_ALT /* alt lock mode */ |
#define VC_SHIFTLLOCK KG_SHIFTL /* shiftl lock mode */ |
#define VC_SHIFTRLOCK KG_SHIFTR /* shiftr lock mode */ |
#define VC_CTRLLLOCK KG_CTRLL /* ctrll lock mode */ |
#define VC_CTRLRLOCK KG_CTRLR /* ctrlr lock mode */ |
unsigned char slockstate; /* for `sticky' Shift, Ctrl, etc. */ |
unsigned char ledmode:2; /* one 2-bit value */ |
#define LED_SHOW_FLAGS 0 /* traditional state */ |
#define LED_SHOW_IOCTL 1 /* only change leds upon ioctl */ |
#define LED_SHOW_MEM 2 /* `heartbeat': peek into memory */ |
unsigned char ledflagstate:4; /* flags, not lights */ |
unsigned char default_ledflagstate:4; |
#define VC_SCROLLOCK 0 /* scroll-lock mode */ |
#define VC_NUMLOCK 1 /* numeric lock mode */ |
#define VC_CAPSLOCK 2 /* capslock mode */ |
#define VC_KANALOCK 3 /* kanalock mode */ |
unsigned char kbdmode:2; /* one 2-bit value */ |
#define VC_XLATE 0 /* translate keycodes using keymap */ |
#define VC_MEDIUMRAW 1 /* medium raw (keycode) mode */ |
#define VC_RAW 2 /* raw (scancode) mode */ |
#define VC_UNICODE 3 /* Unicode mode */ |
unsigned char modeflags:5; |
#define VC_APPLIC 0 /* application key mode */ |
#define VC_CKMODE 1 /* cursor key mode */ |
#define VC_REPEAT 2 /* keyboard repeat */ |
#define VC_CRLF 3 /* 0 - enter sends CR, 1 - enter sends CRLF */ |
#define VC_META 4 /* 0 - meta, 1 - meta=prefix with ESC */ |
}; |
extern struct kbd_struct kbd_table[]; |
extern int kbd_init(void); |
extern unsigned char getledstate(void); |
extern void setledstate(struct kbd_struct *kbd, unsigned int led); |
extern int do_poke_blanked_console; |
extern void (*kbd_ledfunc)(unsigned int led); |
extern void set_console(int nr); |
extern void schedule_console_callback(void); |
static inline void set_leds(void) |
{ |
tasklet_schedule(&keyboard_tasklet); |
} |
static inline int vc_kbd_mode(struct kbd_struct * kbd, int flag) |
{ |
return ((kbd->modeflags >> flag) & 1); |
} |
static inline int vc_kbd_led(struct kbd_struct * kbd, int flag) |
{ |
return ((kbd->ledflagstate >> flag) & 1); |
} |
static inline void set_vc_kbd_mode(struct kbd_struct * kbd, int flag) |
{ |
kbd->modeflags |= 1 << flag; |
} |
static inline void set_vc_kbd_led(struct kbd_struct * kbd, int flag) |
{ |
kbd->ledflagstate |= 1 << flag; |
} |
static inline void clr_vc_kbd_mode(struct kbd_struct * kbd, int flag) |
{ |
kbd->modeflags &= ~(1 << flag); |
} |
static inline void clr_vc_kbd_led(struct kbd_struct * kbd, int flag) |
{ |
kbd->ledflagstate &= ~(1 << flag); |
} |
static inline void chg_vc_kbd_lock(struct kbd_struct * kbd, int flag) |
{ |
kbd->lockstate ^= 1 << flag; |
} |
static inline void chg_vc_kbd_slock(struct kbd_struct * kbd, int flag) |
{ |
kbd->slockstate ^= 1 << flag; |
} |
static inline void chg_vc_kbd_mode(struct kbd_struct * kbd, int flag) |
{ |
kbd->modeflags ^= 1 << flag; |
} |
static inline void chg_vc_kbd_led(struct kbd_struct * kbd, int flag) |
{ |
kbd->ledflagstate ^= 1 << flag; |
} |
#define U(x) ((x) ^ 0xf000) |
/* keyboard.c */ |
struct console; |
int getkeycode(unsigned int scancode); |
int setkeycode(unsigned int scancode, unsigned int keycode); |
void compute_shiftstate(void); |
/* defkeymap.c */ |
extern unsigned int keymap_count; |
/* console.c */ |
static inline void con_schedule_flip(struct tty_struct *t) |
{ |
schedule_work(&t->flip.work); |
} |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/mc6821.h |
---|
0,0 → 1,51 |
#ifndef _MC6821_H_ |
#define _MC6821_H_ |
/* |
* This file describes the memery mapping of the MC6821 PIA. |
* The unions describe overlayed registers. Which of them is used is |
* determined by bit 2 of the corresponding control register. |
* this files expects the PIA_REG_PADWIDTH to be defined the numeric |
* value of the register spacing. |
* |
* Data came from MFC-31-Developer Kit (from Ralph Seidel, |
* zodiac@darkness.gun.de) and Motorola Data Sheet (from |
* Richard Hirst, srh@gpt.co.uk) |
* |
* 6.11.95 copyright Joerg Dorchain (dorchain@mpi-sb.mpg.de) |
* |
*/ |
#ifndef PIA_REG_PADWIDTH |
#define PIA_REG_PADWIDTH 255 |
#endif |
struct pia { |
union { |
volatile u_char pra; |
volatile u_char ddra; |
} ua; |
u_char pad1[PIA_REG_PADWIDTH]; |
volatile u_char cra; |
u_char pad2[PIA_REG_PADWIDTH]; |
union { |
volatile u_char prb; |
volatile u_char ddrb; |
} ub; |
u_char pad3[PIA_REG_PADWIDTH]; |
volatile u_char crb; |
u_char pad4[PIA_REG_PADWIDTH]; |
}; |
#define ppra ua.pra |
#define pddra ua.ddra |
#define pprb ub.prb |
#define pddrb ub.ddrb |
#define PIA_C1_ENABLE_IRQ (1<<0) |
#define PIA_C1_LOW_TO_HIGH (1<<1) |
#define PIA_DDR (1<<2) |
#define PIA_IRQ2 (1<<6) |
#define PIA_IRQ1 (1<<7) |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/sonypi.h |
---|
0,0 → 1,148 |
/* |
* Sony Programmable I/O Control Device driver for VAIO |
* |
* Copyright (C) 2001-2003 Stelian Pop <stelian@popies.net> |
* |
* 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 _SONYPI_H_ |
#define _SONYPI_H_ |
#include <linux/types.h> |
/* events the user application reading /dev/sonypi can use */ |
#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 |
/* 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) |
#ifdef __KERNEL__ |
/* used only for communication between v4l and sonypi */ |
#define SONYPI_COMMAND_GETCAMERA 1 |
#define SONYPI_COMMAND_SETCAMERA 2 |
#define SONYPI_COMMAND_GETCAMERABRIGHTNESS 3 |
#define SONYPI_COMMAND_SETCAMERABRIGHTNESS 4 |
#define SONYPI_COMMAND_GETCAMERACONTRAST 5 |
#define SONYPI_COMMAND_SETCAMERACONTRAST 6 |
#define SONYPI_COMMAND_GETCAMERAHUE 7 |
#define SONYPI_COMMAND_SETCAMERAHUE 8 |
#define SONYPI_COMMAND_GETCAMERACOLOR 9 |
#define SONYPI_COMMAND_SETCAMERACOLOR 10 |
#define SONYPI_COMMAND_GETCAMERASHARPNESS 11 |
#define SONYPI_COMMAND_SETCAMERASHARPNESS 12 |
#define SONYPI_COMMAND_GETCAMERAPICTURE 13 |
#define SONYPI_COMMAND_SETCAMERAPICTURE 14 |
#define SONYPI_COMMAND_GETCAMERAAGC 15 |
#define SONYPI_COMMAND_SETCAMERAAGC 16 |
#define SONYPI_COMMAND_GETCAMERADIRECTION 17 |
#define SONYPI_COMMAND_GETCAMERAROMVERSION 18 |
#define SONYPI_COMMAND_GETCAMERAREVISION 19 |
u8 sonypi_camera_command(int command, u8 value); |
#endif /* __KERNEL__ */ |
#endif /* _SONYPI_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/thread_info.h |
---|
0,0 → 1,92 |
/* thread_info.h: common low-level thread information accessors |
* |
* Copyright (C) 2002 David Howells (dhowells@redhat.com) |
* - Incorporating suggestions made by Linus Torvalds |
*/ |
#ifndef _LINUX_THREAD_INFO_H |
#define _LINUX_THREAD_INFO_H |
/* |
* System call restart block. |
*/ |
struct restart_block { |
long (*fn)(struct restart_block *); |
unsigned long arg0, arg1, arg2, arg3; |
}; |
extern long do_no_restart_syscall(struct restart_block *parm); |
#include <linux/bitops.h> |
#include <asm/thread_info.h> |
#ifdef __KERNEL__ |
/* |
* flag set/clear/test wrappers |
* - pass TIF_xxxx constants to these functions |
*/ |
static inline void set_thread_flag(int flag) |
{ |
set_bit(flag,¤t_thread_info()->flags); |
} |
static inline void clear_thread_flag(int flag) |
{ |
clear_bit(flag,¤t_thread_info()->flags); |
} |
static inline int test_and_set_thread_flag(int flag) |
{ |
return test_and_set_bit(flag,¤t_thread_info()->flags); |
} |
static inline int test_and_clear_thread_flag(int flag) |
{ |
return test_and_clear_bit(flag,¤t_thread_info()->flags); |
} |
static inline int test_thread_flag(int flag) |
{ |
return test_bit(flag,¤t_thread_info()->flags); |
} |
static inline void set_ti_thread_flag(struct thread_info *ti, int flag) |
{ |
set_bit(flag,&ti->flags); |
} |
static inline void clear_ti_thread_flag(struct thread_info *ti, int flag) |
{ |
clear_bit(flag,&ti->flags); |
} |
static inline int test_and_set_ti_thread_flag(struct thread_info *ti, int flag) |
{ |
return test_and_set_bit(flag,&ti->flags); |
} |
static inline int test_and_clear_ti_thread_flag(struct thread_info *ti, int flag) |
{ |
return test_and_clear_bit(flag,&ti->flags); |
} |
static inline int test_ti_thread_flag(struct thread_info *ti, int flag) |
{ |
return test_bit(flag,&ti->flags); |
} |
static inline void set_need_resched(void) |
{ |
set_thread_flag(TIF_NEED_RESCHED); |
} |
static inline void clear_need_resched(void) |
{ |
clear_thread_flag(TIF_NEED_RESCHED); |
} |
#endif |
#endif /* _LINUX_THREAD_INFO_H */ |
/shark/trunk/drivers/linuxc26/include/linux/arcdevice.h |
---|
0,0 → 1,337 |
/* |
* INET An implementation of the TCP/IP protocol suite for the LINUX |
* operating system. NET is implemented using the BSD Socket |
* interface as the means of communication with the user level. |
* |
* Definitions used by the ARCnet driver. |
* |
* Authors: Avery Pennarun and David Woodhouse |
* |
* 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_ARCDEVICE_H |
#define _LINUX_ARCDEVICE_H |
#include <asm/timex.h> |
#include <linux/if_arcnet.h> |
#ifdef __KERNEL__ |
#ifndef bool |
#define bool int |
#endif |
/* |
* RECON_THRESHOLD is the maximum number of RECON messages to receive |
* within one minute before printing a "cabling problem" warning. The |
* default value should be fine. |
* |
* After that, a "cabling restored" message will be printed on the next IRQ |
* if no RECON messages have been received for 10 seconds. |
* |
* Do not define RECON_THRESHOLD at all if you want to disable this feature. |
*/ |
#define RECON_THRESHOLD 30 |
/* |
* Define this to the minimum "timeout" value. If a transmit takes longer |
* than TX_TIMEOUT jiffies, Linux will abort the TX and retry. On a large |
* network, or one with heavy network traffic, this timeout may need to be |
* increased. The larger it is, though, the longer it will be between |
* necessary transmits - don't set this too high. |
*/ |
#define TX_TIMEOUT (HZ * 200 / 1000) |
/* Display warnings about the driver being an ALPHA version. */ |
#undef ALPHA_WARNING |
/* |
* Debugging bitflags: each option can be enabled individually. |
* |
* Note: only debug flags included in the ARCNET_DEBUG_MAX define will |
* actually be available. GCC will (at least, GCC 2.7.0 will) notice |
* lines using a BUGLVL not in ARCNET_DEBUG_MAX and automatically optimize |
* them out. |
*/ |
#define D_NORMAL 1 /* important operational info */ |
#define D_EXTRA 2 /* useful, but non-vital information */ |
#define D_INIT 4 /* show init/probe messages */ |
#define D_INIT_REASONS 8 /* show reasons for discarding probes */ |
#define D_RECON 32 /* print a message whenever token is lost */ |
#define D_PROTO 64 /* debug auto-protocol support */ |
/* debug levels below give LOTS of output during normal operation! */ |
#define D_DURING 128 /* trace operations (including irq's) */ |
#define D_TX 256 /* show tx packets */ |
#define D_RX 512 /* show rx packets */ |
#define D_SKB 1024 /* show skb's */ |
#define D_SKB_SIZE 2048 /* show skb sizes */ |
#define D_TIMING 4096 /* show time needed to copy buffers to card */ |
#ifndef ARCNET_DEBUG_MAX |
#define ARCNET_DEBUG_MAX (127) /* change to ~0 if you want detailed debugging */ |
#endif |
#ifndef ARCNET_DEBUG |
#define ARCNET_DEBUG (D_NORMAL|D_EXTRA) |
#endif |
extern int arcnet_debug; |
/* macros to simplify debug checking */ |
#define BUGLVL(x) if ((ARCNET_DEBUG_MAX)&arcnet_debug&(x)) |
#define BUGMSG2(x,msg,args...) do { BUGLVL(x) printk(msg, ## args); } while (0) |
#define BUGMSG(x,msg,args...) \ |
BUGMSG2(x, "%s%6s: " msg, \ |
x==D_NORMAL ? KERN_WARNING \ |
: x < D_DURING ? KERN_INFO : KERN_DEBUG, \ |
dev->name , ## args) |
/* see how long a function call takes to run, expressed in CPU cycles */ |
#define TIME(name, bytes, call) BUGLVL(D_TIMING) { \ |
unsigned long _x, _y; \ |
_x = get_cycles(); \ |
call; \ |
_y = get_cycles(); \ |
BUGMSG(D_TIMING, \ |
"%s: %d bytes in %lu cycles == " \ |
"%lu Kbytes/100Mcycle\n",\ |
name, bytes, _y - _x, \ |
100000000 / 1024 * bytes / (_y - _x + 1));\ |
} \ |
else { \ |
call;\ |
} |
/* |
* Time needed to reset the card - in ms (milliseconds). This works on my |
* SMC PC100. I can't find a reference that tells me just how long I |
* should wait. |
*/ |
#define RESETtime (300) |
/* |
* These are the max/min lengths of packet payload, not including the |
* arc_hardware header, but definitely including the soft header. |
* |
* Note: packet sizes 254, 255, 256 are impossible because of the way |
* ARCnet registers work That's why RFC1201 defines "exception" packets. |
* In non-RFC1201 protocols, we have to just tack some extra bytes on the |
* end. |
*/ |
#define MTU 253 /* normal packet max size */ |
#define MinTU 257 /* extended packet min size */ |
#define XMTU 508 /* extended packet max size */ |
/* status/interrupt mask bit fields */ |
#define TXFREEflag 0x01 /* transmitter available */ |
#define TXACKflag 0x02 /* transmitted msg. ackd */ |
#define RECONflag 0x04 /* network reconfigured */ |
#define TESTflag 0x08 /* test flag */ |
#define RESETflag 0x10 /* power-on-reset */ |
#define RES1flag 0x20 /* reserved - usually set by jumper */ |
#define RES2flag 0x40 /* reserved - usually set by jumper */ |
#define NORXflag 0x80 /* receiver inhibited */ |
/* Flags used for IO-mapped memory operations */ |
#define AUTOINCflag 0x40 /* Increase location with each access */ |
#define IOMAPflag 0x02 /* (for 90xx) Use IO mapped memory, not mmap */ |
#define ENABLE16flag 0x80 /* (for 90xx) Enable 16-bit mode */ |
/* in the command register, the following bits have these meanings: |
* 0-2 command |
* 3-4 page number (for enable rcv/xmt command) |
* 7 receive broadcasts |
*/ |
#define NOTXcmd 0x01 /* disable transmitter */ |
#define NORXcmd 0x02 /* disable receiver */ |
#define TXcmd 0x03 /* enable transmitter */ |
#define RXcmd 0x04 /* enable receiver */ |
#define CONFIGcmd 0x05 /* define configuration */ |
#define CFLAGScmd 0x06 /* clear flags */ |
#define TESTcmd 0x07 /* load test flags */ |
/* flags for "clear flags" command */ |
#define RESETclear 0x08 /* power-on-reset */ |
#define CONFIGclear 0x10 /* system reconfigured */ |
/* flags for "load test flags" command */ |
#define TESTload 0x08 /* test flag (diagnostic) */ |
/* byte deposited into first address of buffers on reset */ |
#define TESTvalue 0321 /* that's octal for 0xD1 :) */ |
/* for "enable receiver" command */ |
#define RXbcasts 0x80 /* receive broadcasts */ |
/* flags for "define configuration" command */ |
#define NORMALconf 0x00 /* 1-249 byte packets */ |
#define EXTconf 0x08 /* 250-504 byte packets */ |
/* card feature flags, set during auto-detection. |
* (currently only used by com20020pci) |
*/ |
#define ARC_IS_5MBIT 1 /* card default speed is 5MBit */ |
#define ARC_CAN_10MBIT 2 /* card uses COM20022, supporting 10MBit, |
but default is 2.5MBit. */ |
/* information needed to define an encapsulation driver */ |
struct ArcProto { |
char suffix; /* a for RFC1201, e for ether-encap, etc. */ |
int mtu; /* largest possible packet */ |
void (*rx) (struct net_device * dev, int bufnum, |
struct archdr * pkthdr, int length); |
int (*build_header) (struct sk_buff * skb, struct net_device *dev, |
unsigned short ethproto, uint8_t daddr); |
/* these functions return '1' if the skb can now be freed */ |
int (*prepare_tx) (struct net_device * dev, struct archdr * pkt, int length, |
int bufnum); |
int (*continue_tx) (struct net_device * dev, int bufnum); |
}; |
extern struct ArcProto *arc_proto_map[256], *arc_proto_default, *arc_bcast_proto; |
extern struct ArcProto arc_proto_null; |
/* |
* "Incoming" is information needed for each address that could be sending |
* to us. Mostly for partially-received split packets. |
*/ |
struct Incoming { |
struct sk_buff *skb; /* packet data buffer */ |
uint16_t sequence; /* sequence number of assembly */ |
uint8_t lastpacket, /* number of last packet (from 1) */ |
numpackets; /* number of packets in split */ |
}; |
/* only needed for RFC1201 */ |
struct Outgoing { |
struct ArcProto *proto; /* protocol driver that owns this: |
* if NULL, no packet is pending. |
*/ |
struct sk_buff *skb; /* buffer from upper levels */ |
struct archdr *pkt; /* a pointer into the skb */ |
uint16_t length, /* bytes total */ |
dataleft, /* bytes left */ |
segnum, /* segment being sent */ |
numsegs; /* number of segments */ |
}; |
struct arcnet_local { |
struct net_device_stats stats; |
uint8_t config, /* current value of CONFIG register */ |
timeout, /* Extended timeout for COM20020 */ |
backplane, /* Backplane flag for COM20020 */ |
clockp, /* COM20020 clock divider */ |
clockm, /* COM20020 clock multiplier flag */ |
setup, /* Contents of setup1 register */ |
setup2, /* Contents of setup2 register */ |
intmask; /* current value of INTMASK register */ |
uint8_t default_proto[256]; /* default encap to use for each host */ |
int cur_tx, /* buffer used by current transmit, or -1 */ |
next_tx, /* buffer where a packet is ready to send */ |
cur_rx; /* current receive buffer */ |
int lastload_dest, /* can last loaded packet be acked? */ |
lasttrans_dest; /* can last TX'd packet be acked? */ |
int timed_out; /* need to process TX timeout and drop packet */ |
unsigned long last_timeout; /* time of last reported timeout */ |
char *card_name; /* card ident string */ |
int card_flags; /* special card features */ |
/* |
* Buffer management: an ARCnet card has 4 x 512-byte buffers, each of |
* which can be used for either sending or receiving. The new dynamic |
* buffer management routines use a simple circular queue of available |
* buffers, and take them as they're needed. This way, we simplify |
* situations in which we (for example) want to pre-load a transmit |
* buffer, or start receiving while we copy a received packet to |
* memory. |
* |
* The rules: only the interrupt handler is allowed to _add_ buffers to |
* the queue; thus, this doesn't require a lock. Both the interrupt |
* handler and the transmit function will want to _remove_ buffers, so |
* we need to handle the situation where they try to do it at the same |
* time. |
* |
* If next_buf == first_free_buf, the queue is empty. Since there are |
* only four possible buffers, the queue should never be full. |
*/ |
atomic_t buf_lock; |
int buf_queue[5]; |
int next_buf, first_free_buf; |
/* network "reconfiguration" handling */ |
time_t first_recon, /* time of "first" RECON message to count */ |
last_recon; /* time of most recent RECON */ |
int num_recons; /* number of RECONs between first and last. */ |
bool network_down; /* do we think the network is down? */ |
struct { |
uint16_t sequence; /* sequence number (incs with each packet) */ |
uint16_t aborted_seq; |
struct Incoming incoming[256]; /* one from each address */ |
} rfc1201; |
/* really only used by rfc1201, but we'll pretend it's not */ |
struct Outgoing outgoing; /* packet currently being sent */ |
/* hardware-specific functions */ |
struct { |
struct module *owner; |
void (*command) (struct net_device * dev, int cmd); |
int (*status) (struct net_device * dev); |
void (*intmask) (struct net_device * dev, int mask); |
bool (*reset) (struct net_device * dev, bool really_reset); |
void (*open) (struct net_device * dev); |
void (*close) (struct net_device * dev); |
void (*copy_to_card) (struct net_device * dev, int bufnum, int offset, |
void *buf, int count); |
void (*copy_from_card) (struct net_device * dev, int bufnum, int offset, |
void *buf, int count); |
} hw; |
void *mem_start; /* pointer to ioremap'ed MMIO */ |
}; |
#define ARCRESET(x) (lp->hw.reset(dev, (x))) |
#define ACOMMAND(x) (lp->hw.command(dev, (x))) |
#define ASTATUS() (lp->hw.status(dev)) |
#define AINTMASK(x) (lp->hw.intmask(dev, (x))) |
#if ARCNET_DEBUG_MAX & D_SKB |
void arcnet_dump_skb(struct net_device *dev, struct sk_buff *skb, char *desc); |
#else |
#define arcnet_dump_skb(dev,skb,desc) ; |
#endif |
#if (ARCNET_DEBUG_MAX & D_RX) || (ARCNET_DEBUG_MAX & D_TX) |
void arcnet_dump_packet(struct net_device *dev, int bufnum, char *desc); |
#else |
#define arcnet_dump_packet(dev, bufnum, desc) ; |
#endif |
void arcnet_unregister_proto(struct ArcProto *proto); |
irqreturn_t arcnet_interrupt(int irq, void *dev_id, struct pt_regs *regs); |
void arcdev_setup(struct net_device *dev); |
void arcnet_rx(struct net_device *dev, int bufnum); |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_ARCDEVICE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/nfs_fs_i.h |
---|
0,0 → 1,23 |
#ifndef _NFS_FS_I |
#define _NFS_FS_I |
#include <asm/types.h> |
#include <linux/list.h> |
#include <linux/nfs.h> |
/* |
* NFS lock info |
*/ |
struct nfs_lock_info { |
u32 state; |
u32 flags; |
struct nlm_host *host; |
}; |
/* |
* Lock flag values |
*/ |
#define NFS_LCK_GRANTED 0x0001 /* lock has been granted */ |
#define NFS_LCK_RECLAIM 0x0002 /* lock marked for reclaiming */ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/i2o.h |
---|
0,0 → 1,632 |
/* |
* I2O kernel 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 defined the I2O APIs/structures for use by |
* the I2O kernel modules. |
* |
*/ |
#ifndef _I2O_H |
#define _I2O_H |
#ifdef __KERNEL__ /* This file to be included by kernel only */ |
#include <linux/i2o-dev.h> |
/* How many different OSM's are we allowing */ |
#define MAX_I2O_MODULES 4 |
/* How many OSMs can register themselves for device status updates? */ |
#define I2O_MAX_MANAGERS 4 |
#include <asm/semaphore.h> /* Needed for MUTEX init macros */ |
#include <linux/config.h> |
#include <linux/notifier.h> |
#include <asm/atomic.h> |
/* |
* Message structures |
*/ |
struct i2o_message |
{ |
u8 version_offset; |
u8 flags; |
u16 size; |
u32 target_tid:12; |
u32 init_tid:12; |
u32 function:8; |
u32 initiator_context; |
/* List follows */ |
}; |
/* |
* Each I2O device entity has one or more of these. There is one |
* per device. |
*/ |
struct i2o_device |
{ |
i2o_lct_entry lct_data; /* Device LCT information */ |
u32 flags; |
int i2oversion; /* I2O version supported. Actually |
* there should be high and low |
* version */ |
struct proc_dir_entry *proc_entry; /* /proc dir */ |
/* Primary user */ |
struct i2o_handler *owner; |
/* Management users */ |
struct i2o_handler *managers[I2O_MAX_MANAGERS]; |
int num_managers; |
struct i2o_controller *controller; /* Controlling IOP */ |
struct i2o_device *next; /* Chain */ |
struct i2o_device *prev; |
char dev_name[8]; /* linux /dev name if available */ |
}; |
/* |
* Each I2O controller has one of these objects |
*/ |
struct i2o_controller |
{ |
char name[16]; |
int unit; |
int type; |
int enabled; |
struct pci_dev *pdev; /* PCI device */ |
int irq; |
int short_req:1; /* Use small block sizes */ |
int dpt:1; /* Don't quiesce */ |
int promise:1; /* Promise controller */ |
#ifdef CONFIG_MTRR |
int mtrr_reg0; |
int mtrr_reg1; |
#endif |
struct notifier_block *event_notifer; /* Events */ |
atomic_t users; |
struct i2o_device *devices; /* I2O device chain */ |
struct i2o_controller *next; /* Controller chain */ |
unsigned long post_port; /* Inbout port address */ |
unsigned long reply_port; /* Outbound port address */ |
unsigned long irq_mask; /* Interrupt register address */ |
/* Dynamic LCT related data */ |
struct semaphore lct_sem; |
int lct_pid; |
int lct_running; |
i2o_status_block *status_block; /* IOP status block */ |
dma_addr_t status_block_phys; |
i2o_lct *lct; /* Logical Config Table */ |
dma_addr_t lct_phys; |
i2o_lct *dlct; /* Temp LCT */ |
dma_addr_t dlct_phys; |
i2o_hrt *hrt; /* HW Resource Table */ |
dma_addr_t hrt_phys; |
u32 hrt_len; |
unsigned long mem_offset; /* MFA offset */ |
unsigned long mem_phys; /* MFA physical */ |
int battery:1; /* Has a battery backup */ |
int io_alloc:1; /* An I/O resource was allocated */ |
int mem_alloc:1; /* A memory resource was allocated */ |
struct resource io_resource; /* I/O resource allocated to the IOP */ |
struct resource mem_resource; /* Mem resource allocated to the IOP */ |
struct proc_dir_entry *proc_entry; /* /proc dir */ |
void *page_frame; /* Message buffers */ |
dma_addr_t page_frame_map; /* Cache map */ |
}; |
/* |
* OSM resgistration block |
* |
* Each OSM creates at least one of these and registers it with the |
* I2O core through i2o_register_handler. An OSM may want to |
* register more than one if it wants a fast path to a reply |
* handler by having a separate initiator context for each |
* class function. |
*/ |
struct i2o_handler |
{ |
/* Message reply handler */ |
void (*reply)(struct i2o_handler *, struct i2o_controller *, |
struct i2o_message *); |
/* New device notification handler */ |
void (*new_dev_notify)(struct i2o_controller *, struct i2o_device *); |
/* Device deltion handler */ |
void (*dev_del_notify)(struct i2o_controller *, struct i2o_device *); |
/* Reboot notification handler */ |
void (*reboot_notify)(void); |
char *name; /* OSM name */ |
int context; /* Low 8 bits of the transaction info */ |
u32 class; /* I2O classes that this driver handles */ |
/* User data follows */ |
}; |
#ifdef MODULE |
/* |
* Used by bus specific modules to communicate with the core |
* |
* This is needed because the bus modules cannot make direct |
* calls to the core as this results in the i2o_bus_specific_module |
* being dependent on the core, not the otherway around. |
* In that case, a 'modprobe i2o_lan' loads i2o_core & i2o_lan, |
* but _not_ i2o_pci...which makes the whole thing pretty useless :) |
* |
*/ |
struct i2o_core_func_table |
{ |
int (*install)(struct i2o_controller *); |
int (*activate)(struct i2o_controller *); |
struct i2o_controller *(*find)(int); |
void (*unlock)(struct i2o_controller *); |
void (*run_queue)(struct i2o_controller * c); |
int (*delete)(struct i2o_controller *); |
}; |
#endif /* MODULE */ |
/* |
* I2O System table entry |
* |
* The system table contains information about all the IOPs in the |
* system. It is sent to all IOPs so that they can create peer2peer |
* connections between them. |
*/ |
struct i2o_sys_tbl_entry |
{ |
u16 org_id; |
u16 reserved1; |
u32 iop_id:12; |
u32 reserved2:20; |
u16 seg_num:12; |
u16 i2o_version:4; |
u8 iop_state; |
u8 msg_type; |
u16 frame_size; |
u16 reserved3; |
u32 last_changed; |
u32 iop_capabilities; |
u32 inbound_low; |
u32 inbound_high; |
}; |
struct i2o_sys_tbl |
{ |
u8 num_entries; |
u8 version; |
u16 reserved1; |
u32 change_ind; |
u32 reserved2; |
u32 reserved3; |
struct i2o_sys_tbl_entry iops[0]; |
}; |
/* |
* Messenger inlines |
*/ |
static inline u32 I2O_POST_READ32(struct i2o_controller *c) |
{ |
return readl(c->post_port); |
} |
static inline void I2O_POST_WRITE32(struct i2o_controller *c, u32 val) |
{ |
writel(val, c->post_port); |
} |
static inline u32 I2O_REPLY_READ32(struct i2o_controller *c) |
{ |
return readl(c->reply_port); |
} |
static inline void I2O_REPLY_WRITE32(struct i2o_controller *c, u32 val) |
{ |
writel(val, c->reply_port); |
} |
static inline u32 I2O_IRQ_READ32(struct i2o_controller *c) |
{ |
return readl(c->irq_mask); |
} |
static inline void I2O_IRQ_WRITE32(struct i2o_controller *c, u32 val) |
{ |
writel(val, c->irq_mask); |
} |
static inline void i2o_post_message(struct i2o_controller *c, u32 m) |
{ |
/* The second line isnt spurious - thats forcing PCI posting */ |
I2O_POST_WRITE32(c, m); |
(void) I2O_IRQ_READ32(c); |
} |
static inline void i2o_flush_reply(struct i2o_controller *c, u32 m) |
{ |
I2O_REPLY_WRITE32(c, m); |
} |
/* |
* Endian handling wrapped into the macro - keeps the core code |
* cleaner. |
*/ |
#define i2o_raw_writel(val, mem) __raw_writel(cpu_to_le32(val), mem) |
extern struct i2o_controller *i2o_find_controller(int); |
extern void i2o_unlock_controller(struct i2o_controller *); |
extern struct i2o_controller *i2o_controller_chain; |
extern int i2o_num_controllers; |
extern int i2o_status_get(struct i2o_controller *); |
extern int i2o_install_handler(struct i2o_handler *); |
extern int i2o_remove_handler(struct i2o_handler *); |
extern int i2o_claim_device(struct i2o_device *, struct i2o_handler *); |
extern int i2o_release_device(struct i2o_device *, struct i2o_handler *); |
extern int i2o_device_notify_on(struct i2o_device *, struct i2o_handler *); |
extern int i2o_device_notify_off(struct i2o_device *, |
struct i2o_handler *); |
extern int i2o_post_this(struct i2o_controller *, u32 *, int); |
extern int i2o_post_wait(struct i2o_controller *, u32 *, int, int); |
extern int i2o_post_wait_mem(struct i2o_controller *, u32 *, int, int, |
void *, void *, dma_addr_t, dma_addr_t, int, int); |
extern int i2o_query_scalar(struct i2o_controller *, int, int, int, void *, |
int); |
extern int i2o_set_scalar(struct i2o_controller *, int, int, int, void *, |
int); |
extern int i2o_query_table(int, struct i2o_controller *, int, int, int, |
void *, int, void *, int); |
extern int i2o_clear_table(struct i2o_controller *, int, int); |
extern int i2o_row_add_table(struct i2o_controller *, int, int, int, |
void *, int); |
extern int i2o_issue_params(int, struct i2o_controller *, int, void *, int, |
void *, int); |
extern int i2o_event_register(struct i2o_controller *, u32, u32, u32, u32); |
extern int i2o_event_ack(struct i2o_controller *, u32 *); |
extern void i2o_report_status(const char *, const char *, u32 *); |
extern void i2o_dump_message(u32 *); |
extern const char *i2o_get_class_name(int); |
extern int i2o_install_controller(struct i2o_controller *); |
extern int i2o_activate_controller(struct i2o_controller *); |
extern void i2o_run_queue(struct i2o_controller *); |
extern int i2o_delete_controller(struct i2o_controller *); |
/* |
* Cache strategies |
*/ |
/* The NULL strategy leaves everything up to the controller. This tends to be a |
* pessimal but functional choice. |
*/ |
#define CACHE_NULL 0 |
/* Prefetch data when reading. We continually attempt to load the next 32 sectors |
* into the controller cache. |
*/ |
#define CACHE_PREFETCH 1 |
/* Prefetch data when reading. We sometimes attempt to load the next 32 sectors |
* into the controller cache. When an I/O is less <= 8K we assume its probably |
* not sequential and don't prefetch (default) |
*/ |
#define CACHE_SMARTFETCH 2 |
/* Data is written to the cache and then out on to the disk. The I/O must be |
* physically on the medium before the write is acknowledged (default without |
* NVRAM) |
*/ |
#define CACHE_WRITETHROUGH 17 |
/* Data is written to the cache and then out on to the disk. The controller |
* is permitted to write back the cache any way it wants. (default if battery |
* backed NVRAM is present). It can be useful to set this for swap regardless of |
* battery state. |
*/ |
#define CACHE_WRITEBACK 18 |
/* Optimise for under powered controllers, especially on RAID1 and RAID0. We |
* write large I/O's directly to disk bypassing the cache to avoid the extra |
* memory copy hits. Small writes are writeback cached |
*/ |
#define CACHE_SMARTBACK 19 |
/* Optimise for under powered controllers, especially on RAID1 and RAID0. We |
* write large I/O's directly to disk bypassing the cache to avoid the extra |
* memory copy hits. Small writes are writethrough cached. Suitable for devices |
* lacking battery backup |
*/ |
#define CACHE_SMARTTHROUGH 20 |
/* |
* Ioctl structures |
*/ |
#define BLKI2OGRSTRAT _IOR('2', 1, int) |
#define BLKI2OGWSTRAT _IOR('2', 2, int) |
#define BLKI2OSRSTRAT _IOW('2', 3, int) |
#define BLKI2OSWSTRAT _IOW('2', 4, int) |
/* |
* I2O Function codes |
*/ |
/* |
* Executive Class |
*/ |
#define I2O_CMD_ADAPTER_ASSIGN 0xB3 |
#define I2O_CMD_ADAPTER_READ 0xB2 |
#define I2O_CMD_ADAPTER_RELEASE 0xB5 |
#define I2O_CMD_BIOS_INFO_SET 0xA5 |
#define I2O_CMD_BOOT_DEVICE_SET 0xA7 |
#define I2O_CMD_CONFIG_VALIDATE 0xBB |
#define I2O_CMD_CONN_SETUP 0xCA |
#define I2O_CMD_DDM_DESTROY 0xB1 |
#define I2O_CMD_DDM_ENABLE 0xD5 |
#define I2O_CMD_DDM_QUIESCE 0xC7 |
#define I2O_CMD_DDM_RESET 0xD9 |
#define I2O_CMD_DDM_SUSPEND 0xAF |
#define I2O_CMD_DEVICE_ASSIGN 0xB7 |
#define I2O_CMD_DEVICE_RELEASE 0xB9 |
#define I2O_CMD_HRT_GET 0xA8 |
#define I2O_CMD_ADAPTER_CLEAR 0xBE |
#define I2O_CMD_ADAPTER_CONNECT 0xC9 |
#define I2O_CMD_ADAPTER_RESET 0xBD |
#define I2O_CMD_LCT_NOTIFY 0xA2 |
#define I2O_CMD_OUTBOUND_INIT 0xA1 |
#define I2O_CMD_PATH_ENABLE 0xD3 |
#define I2O_CMD_PATH_QUIESCE 0xC5 |
#define I2O_CMD_PATH_RESET 0xD7 |
#define I2O_CMD_STATIC_MF_CREATE 0xDD |
#define I2O_CMD_STATIC_MF_RELEASE 0xDF |
#define I2O_CMD_STATUS_GET 0xA0 |
#define I2O_CMD_SW_DOWNLOAD 0xA9 |
#define I2O_CMD_SW_UPLOAD 0xAB |
#define I2O_CMD_SW_REMOVE 0xAD |
#define I2O_CMD_SYS_ENABLE 0xD1 |
#define I2O_CMD_SYS_MODIFY 0xC1 |
#define I2O_CMD_SYS_QUIESCE 0xC3 |
#define I2O_CMD_SYS_TAB_SET 0xA3 |
/* |
* Utility Class |
*/ |
#define I2O_CMD_UTIL_NOP 0x00 |
#define I2O_CMD_UTIL_ABORT 0x01 |
#define I2O_CMD_UTIL_CLAIM 0x09 |
#define I2O_CMD_UTIL_RELEASE 0x0B |
#define I2O_CMD_UTIL_PARAMS_GET 0x06 |
#define I2O_CMD_UTIL_PARAMS_SET 0x05 |
#define I2O_CMD_UTIL_EVT_REGISTER 0x13 |
#define I2O_CMD_UTIL_EVT_ACK 0x14 |
#define I2O_CMD_UTIL_CONFIG_DIALOG 0x10 |
#define I2O_CMD_UTIL_DEVICE_RESERVE 0x0D |
#define I2O_CMD_UTIL_DEVICE_RELEASE 0x0F |
#define I2O_CMD_UTIL_LOCK 0x17 |
#define I2O_CMD_UTIL_LOCK_RELEASE 0x19 |
#define I2O_CMD_UTIL_REPLY_FAULT_NOTIFY 0x15 |
/* |
* SCSI Host Bus Adapter Class |
*/ |
#define I2O_CMD_SCSI_EXEC 0x81 |
#define I2O_CMD_SCSI_ABORT 0x83 |
#define I2O_CMD_SCSI_BUSRESET 0x27 |
/* |
* Random Block Storage Class |
*/ |
#define I2O_CMD_BLOCK_READ 0x30 |
#define I2O_CMD_BLOCK_WRITE 0x31 |
#define I2O_CMD_BLOCK_CFLUSH 0x37 |
#define I2O_CMD_BLOCK_MLOCK 0x49 |
#define I2O_CMD_BLOCK_MUNLOCK 0x4B |
#define I2O_CMD_BLOCK_MMOUNT 0x41 |
#define I2O_CMD_BLOCK_MEJECT 0x43 |
#define I2O_CMD_BLOCK_POWER 0x70 |
#define I2O_PRIVATE_MSG 0xFF |
/* Command status values */ |
#define I2O_CMD_IN_PROGRESS 0x01 |
#define I2O_CMD_REJECTED 0x02 |
#define I2O_CMD_FAILED 0x03 |
#define I2O_CMD_COMPLETED 0x04 |
/* I2O API function return values */ |
#define I2O_RTN_NO_ERROR 0 |
#define I2O_RTN_NOT_INIT 1 |
#define I2O_RTN_FREE_Q_EMPTY 2 |
#define I2O_RTN_TCB_ERROR 3 |
#define I2O_RTN_TRANSACTION_ERROR 4 |
#define I2O_RTN_ADAPTER_ALREADY_INIT 5 |
#define I2O_RTN_MALLOC_ERROR 6 |
#define I2O_RTN_ADPTR_NOT_REGISTERED 7 |
#define I2O_RTN_MSG_REPLY_TIMEOUT 8 |
#define I2O_RTN_NO_STATUS 9 |
#define I2O_RTN_NO_FIRM_VER 10 |
#define I2O_RTN_NO_LINK_SPEED 11 |
/* Reply message status defines for all messages */ |
#define I2O_REPLY_STATUS_SUCCESS 0x00 |
#define I2O_REPLY_STATUS_ABORT_DIRTY 0x01 |
#define I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER 0x02 |
#define I2O_REPLY_STATUS_ABORT_PARTIAL_TRANSFER 0x03 |
#define I2O_REPLY_STATUS_ERROR_DIRTY 0x04 |
#define I2O_REPLY_STATUS_ERROR_NO_DATA_TRANSFER 0x05 |
#define I2O_REPLY_STATUS_ERROR_PARTIAL_TRANSFER 0x06 |
#define I2O_REPLY_STATUS_PROCESS_ABORT_DIRTY 0x08 |
#define I2O_REPLY_STATUS_PROCESS_ABORT_NO_DATA_TRANSFER 0x09 |
#define I2O_REPLY_STATUS_PROCESS_ABORT_PARTIAL_TRANSFER 0x0A |
#define I2O_REPLY_STATUS_TRANSACTION_ERROR 0x0B |
#define I2O_REPLY_STATUS_PROGRESS_REPORT 0x80 |
/* Status codes and Error Information for Parameter functions */ |
#define I2O_PARAMS_STATUS_SUCCESS 0x00 |
#define I2O_PARAMS_STATUS_BAD_KEY_ABORT 0x01 |
#define I2O_PARAMS_STATUS_BAD_KEY_CONTINUE 0x02 |
#define I2O_PARAMS_STATUS_BUFFER_FULL 0x03 |
#define I2O_PARAMS_STATUS_BUFFER_TOO_SMALL 0x04 |
#define I2O_PARAMS_STATUS_FIELD_UNREADABLE 0x05 |
#define I2O_PARAMS_STATUS_FIELD_UNWRITEABLE 0x06 |
#define I2O_PARAMS_STATUS_INSUFFICIENT_FIELDS 0x07 |
#define I2O_PARAMS_STATUS_INVALID_GROUP_ID 0x08 |
#define I2O_PARAMS_STATUS_INVALID_OPERATION 0x09 |
#define I2O_PARAMS_STATUS_NO_KEY_FIELD 0x0A |
#define I2O_PARAMS_STATUS_NO_SUCH_FIELD 0x0B |
#define I2O_PARAMS_STATUS_NON_DYNAMIC_GROUP 0x0C |
#define I2O_PARAMS_STATUS_OPERATION_ERROR 0x0D |
#define I2O_PARAMS_STATUS_SCALAR_ERROR 0x0E |
#define I2O_PARAMS_STATUS_TABLE_ERROR 0x0F |
#define I2O_PARAMS_STATUS_WRONG_GROUP_TYPE 0x10 |
/* DetailedStatusCode defines for Executive, DDM, Util and Transaction error |
* messages: Table 3-2 Detailed Status Codes.*/ |
#define I2O_DSC_SUCCESS 0x0000 |
#define I2O_DSC_BAD_KEY 0x0002 |
#define I2O_DSC_TCL_ERROR 0x0003 |
#define I2O_DSC_REPLY_BUFFER_FULL 0x0004 |
#define I2O_DSC_NO_SUCH_PAGE 0x0005 |
#define I2O_DSC_INSUFFICIENT_RESOURCE_SOFT 0x0006 |
#define I2O_DSC_INSUFFICIENT_RESOURCE_HARD 0x0007 |
#define I2O_DSC_CHAIN_BUFFER_TOO_LARGE 0x0009 |
#define I2O_DSC_UNSUPPORTED_FUNCTION 0x000A |
#define I2O_DSC_DEVICE_LOCKED 0x000B |
#define I2O_DSC_DEVICE_RESET 0x000C |
#define I2O_DSC_INAPPROPRIATE_FUNCTION 0x000D |
#define I2O_DSC_INVALID_INITIATOR_ADDRESS 0x000E |
#define I2O_DSC_INVALID_MESSAGE_FLAGS 0x000F |
#define I2O_DSC_INVALID_OFFSET 0x0010 |
#define I2O_DSC_INVALID_PARAMETER 0x0011 |
#define I2O_DSC_INVALID_REQUEST 0x0012 |
#define I2O_DSC_INVALID_TARGET_ADDRESS 0x0013 |
#define I2O_DSC_MESSAGE_TOO_LARGE 0x0014 |
#define I2O_DSC_MESSAGE_TOO_SMALL 0x0015 |
#define I2O_DSC_MISSING_PARAMETER 0x0016 |
#define I2O_DSC_TIMEOUT 0x0017 |
#define I2O_DSC_UNKNOWN_ERROR 0x0018 |
#define I2O_DSC_UNKNOWN_FUNCTION 0x0019 |
#define I2O_DSC_UNSUPPORTED_VERSION 0x001A |
#define I2O_DSC_DEVICE_BUSY 0x001B |
#define I2O_DSC_DEVICE_NOT_AVAILABLE 0x001C |
/* FailureStatusCodes, Table 3-3 Message Failure Codes */ |
#define I2O_FSC_TRANSPORT_SERVICE_SUSPENDED 0x81 |
#define I2O_FSC_TRANSPORT_SERVICE_TERMINATED 0x82 |
#define I2O_FSC_TRANSPORT_CONGESTION 0x83 |
#define I2O_FSC_TRANSPORT_FAILURE 0x84 |
#define I2O_FSC_TRANSPORT_STATE_ERROR 0x85 |
#define I2O_FSC_TRANSPORT_TIME_OUT 0x86 |
#define I2O_FSC_TRANSPORT_ROUTING_FAILURE 0x87 |
#define I2O_FSC_TRANSPORT_INVALID_VERSION 0x88 |
#define I2O_FSC_TRANSPORT_INVALID_OFFSET 0x89 |
#define I2O_FSC_TRANSPORT_INVALID_MSG_FLAGS 0x8A |
#define I2O_FSC_TRANSPORT_FRAME_TOO_SMALL 0x8B |
#define I2O_FSC_TRANSPORT_FRAME_TOO_LARGE 0x8C |
#define I2O_FSC_TRANSPORT_INVALID_TARGET_ID 0x8D |
#define I2O_FSC_TRANSPORT_INVALID_INITIATOR_ID 0x8E |
#define I2O_FSC_TRANSPORT_INVALID_INITIATOR_CONTEXT 0x8F |
#define I2O_FSC_TRANSPORT_UNKNOWN_FAILURE 0xFF |
/* Device Claim Types */ |
#define I2O_CLAIM_PRIMARY 0x01000000 |
#define I2O_CLAIM_MANAGEMENT 0x02000000 |
#define I2O_CLAIM_AUTHORIZED 0x03000000 |
#define I2O_CLAIM_SECONDARY 0x04000000 |
/* Message header defines for VersionOffset */ |
#define I2OVER15 0x0001 |
#define I2OVER20 0x0002 |
/* Default is 1.5, FIXME: Need support for both 1.5 and 2.0 */ |
#define I2OVERSION I2OVER15 |
#define SGL_OFFSET_0 I2OVERSION |
#define SGL_OFFSET_4 (0x0040 | I2OVERSION) |
#define SGL_OFFSET_5 (0x0050 | I2OVERSION) |
#define SGL_OFFSET_6 (0x0060 | I2OVERSION) |
#define SGL_OFFSET_7 (0x0070 | I2OVERSION) |
#define SGL_OFFSET_8 (0x0080 | I2OVERSION) |
#define SGL_OFFSET_9 (0x0090 | I2OVERSION) |
#define SGL_OFFSET_10 (0x00A0 | I2OVERSION) |
#define TRL_OFFSET_5 (0x0050 | I2OVERSION) |
#define TRL_OFFSET_6 (0x0060 | I2OVERSION) |
/* Transaction Reply Lists (TRL) Control Word structure */ |
#define TRL_SINGLE_FIXED_LENGTH 0x00 |
#define TRL_SINGLE_VARIABLE_LENGTH 0x40 |
#define TRL_MULTIPLE_FIXED_LENGTH 0x80 |
/* msg header defines for MsgFlags */ |
#define MSG_STATIC 0x0100 |
#define MSG_64BIT_CNTXT 0x0200 |
#define MSG_MULTI_TRANS 0x1000 |
#define MSG_FAIL 0x2000 |
#define MSG_FINAL 0x4000 |
#define MSG_REPLY 0x8000 |
/* minimum size msg */ |
#define THREE_WORD_MSG_SIZE 0x00030000 |
#define FOUR_WORD_MSG_SIZE 0x00040000 |
#define FIVE_WORD_MSG_SIZE 0x00050000 |
#define SIX_WORD_MSG_SIZE 0x00060000 |
#define SEVEN_WORD_MSG_SIZE 0x00070000 |
#define EIGHT_WORD_MSG_SIZE 0x00080000 |
#define NINE_WORD_MSG_SIZE 0x00090000 |
#define TEN_WORD_MSG_SIZE 0x000A0000 |
#define ELEVEN_WORD_MSG_SIZE 0x000B0000 |
#define I2O_MESSAGE_SIZE(x) ((x)<<16) |
/* Special TID Assignments */ |
#define ADAPTER_TID 0 |
#define HOST_TID 1 |
#define MSG_FRAME_SIZE 64 /* i2o_scsi assumes >= 32 */ |
#define NMBR_MSG_FRAMES 128 |
#define MSG_POOL_SIZE (MSG_FRAME_SIZE*NMBR_MSG_FRAMES*sizeof(u32)) |
#define I2O_POST_WAIT_OK 0 |
#define I2O_POST_WAIT_TIMEOUT -ETIMEDOUT |
#endif /* __KERNEL__ */ |
#endif /* _I2O_H */ |
/shark/trunk/drivers/linuxc26/include/linux/fd.h |
---|
0,0 → 1,372 |
#ifndef _LINUX_FD_H |
#define _LINUX_FD_H |
#include <linux/ioctl.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; /* !=0 means double track steps */ |
#define FD_STRETCH 1 |
#define FD_SWAPSIDES 2 |
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 *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 |
/shark/trunk/drivers/linuxc26/include/linux/coda_cache.h |
---|
0,0 → 1,22 |
/* Coda filesystem -- Linux Minicache |
* |
* Copyright (C) 1989 - 1997 Carnegie Mellon University |
* |
* Carnegie Mellon University encourages users of this software to |
* contribute improvements to the Coda project. Contact Peter Braam |
* <coda@cs.cmu.edu> |
*/ |
#ifndef _CFSNC_HEADER_ |
#define _CFSNC_HEADER_ |
/* credential cache */ |
void coda_cache_enter(struct inode *inode, int mask); |
void coda_cache_clear_inode(struct inode *); |
void coda_cache_clear_all(struct super_block *sb); |
int coda_cache_check(struct inode *inode, int mask); |
/* for downcalls and attributes and lookups */ |
void coda_flag_inode_children(struct inode *inode, int flag); |
#endif /* _CFSNC_HEADER_ */ |
/shark/trunk/drivers/linuxc26/include/linux/atapi.h |
---|
0,0 → 1,370 |
/**** vi:set ts=8 sts=8 sw=8:************************************************ |
* |
* Copyright (C) 2002 Marcin Dalecki <martin@dalecki.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. |
* |
* 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. |
*/ |
#include <linux/types.h> |
#include <asm/byteorder.h> |
/* |
* With each packet command, we allocate a buffer. |
* This is used for several packet |
* commands (Not for READ/WRITE commands). |
*/ |
#define IDEFLOPPY_PC_BUFFER_SIZE 256 |
#define IDETAPE_PC_BUFFER_SIZE 256 |
/* |
* Packet flags bits. |
*/ |
#define PC_ABORT 0 /* set when an error is considered normal - we won't retry */ |
#define PC_WAIT_FOR_DSC 1 /* 1 when polling for DSC on a media access command */ |
#define PC_DMA_RECOMMENDED 2 /* 1 when we prefer to use DMA if possible */ |
#define PC_DMA_IN_PROGRESS 3 /* 1 while DMA in progress */ |
#define PC_DMA_ERROR 4 /* 1 when encountered problem during DMA */ |
#define PC_WRITING 5 /* data direction */ |
#define PC_SUPPRESS_ERROR 6 /* suppress error reporting */ |
#define PC_TRANSFORM 7 /* transform SCSI commands */ |
/* This struct get's shared between different drivers. |
*/ |
struct atapi_packet_command { |
u8 c[12]; /* Actual packet bytes */ |
char *buffer; /* Data buffer */ |
int buffer_size; /* Size of our data buffer */ |
char *current_position; /* Pointer into the above buffer */ |
int request_transfer; /* Bytes to transfer */ |
int actually_transferred; /* Bytes actually transferred */ |
unsigned long flags; /* Status/Action bit flags: long for set_bit */ |
/* FIXME: the following is ugly as hell, but the only way we can start |
* actually to unify the code. |
*/ |
/* driver specific data. */ |
/* floppy/tape */ |
int retries; /* On each retry, we increment retries */ |
int error; /* Error code */ |
char *b_data; /* Pointer which runs on the buffers */ |
unsigned int b_count; /* Missing/Available data on the current buffer */ |
u8 pc_buffer[IDEFLOPPY_PC_BUFFER_SIZE]; /* Temporary buffer */ |
/* Called when this packet command is completed */ |
void (*callback) (struct ata_device *, struct request *); |
/* only tape */ |
struct bio *bio; |
/* only scsi */ |
struct { |
unsigned int b_count; /* Bytes transferred from current entry */ |
struct scatterlist *sg; /* Scatter gather table */ |
struct scsi_cmnd *scsi_cmd; /* SCSI command */ |
void (*done)(struct scsi_cmnd *); /* Scsi completion routine */ |
unsigned long timeout; /* Command timeout */ |
} s; |
}; |
/* |
* ATAPI Status Register. |
*/ |
typedef union { |
u8 all : 8; |
struct { |
#if defined(__LITTLE_ENDIAN_BITFIELD) |
u8 check : 1; /* Error occurred */ |
u8 idx : 1; /* Reserved */ |
u8 corr : 1; /* Correctable error occurred */ |
u8 drq : 1; /* Data is request by the device */ |
u8 dsc : 1; /* Media access command finished / Buffer availability */ |
u8 reserved5 : 1; /* Reserved */ |
u8 drdy : 1; /* Ignored for ATAPI commands (ready to accept ATA command) */ |
u8 bsy : 1; /* The device has access to the command block */ |
#elif defined(__BIG_ENDIAN_BITFIELD) |
u8 bsy : 1; |
u8 drdy : 1; |
u8 reserved5 : 1; |
u8 dsc : 1; |
u8 drq : 1; |
u8 corr : 1; |
u8 idx : 1; |
u8 check : 1; |
#else |
#error "Please fix <asm/byteorder.h>" |
#endif |
} b; |
} atapi_status_reg_t; |
/* |
* ATAPI error register. |
*/ |
typedef union { |
u8 all : 8; |
struct { |
#if defined(__LITTLE_ENDIAN_BITFIELD) |
u8 ili : 1; /* Illegal Length Indication */ |
u8 eom : 1; /* End Of Media Detected */ |
u8 abrt : 1; /* Aborted command - As defined by ATA */ |
u8 mcr : 1; /* Media Change Requested - As defined by ATA */ |
u8 sense_key : 4; /* Sense key of the last failed packet command */ |
#elif defined(__BIG_ENDIAN_BITFIELD) |
u8 sense_key : 4; |
u8 mcr : 1; |
u8 abrt : 1; |
u8 eom : 1; |
u8 ili : 1; |
#else |
#error "Please fix <asm/byteorder.h>" |
#endif |
} b; |
} atapi_error_reg_t; |
/* Currently unused, but please do not remove. --bkz */ |
/* |
* ATAPI Feature Register. |
*/ |
typedef union { |
u8 all : 8; |
struct { |
#if defined(__LITTLE_ENDIAN_BITFIELD) |
u8 dma : 1; /* Using DMA or PIO */ |
u8 reserved321 : 3; /* Reserved */ |
u8 reserved654 : 3; /* Reserved (Tag Type) */ |
u8 reserved7 : 1; /* Reserved */ |
#elif defined(__BIG_ENDIAN_BITFIELD) |
u8 reserved7 : 1; |
u8 reserved654 : 3; |
u8 reserved321 : 3; |
u8 dma : 1; |
#else |
#error "Please fix <asm/byteorder.h>" |
#endif |
} b; |
} atapi_feature_reg_t; |
/* |
* ATAPI Byte Count Register. |
*/ |
typedef union { |
u16 all : 16; |
struct { |
#if defined(__LITTLE_ENDIAN_BITFIELD) |
u8 low; /* LSB */ |
u8 high; /* MSB */ |
#elif defined(__BIG_ENDIAN_BITFIELD) |
u8 high; |
u8 low; |
#else |
#error "Please fix <asm/byteorder.h>" |
#endif |
} b; |
} atapi_bcount_reg_t; |
/* |
* ATAPI Interrupt Reason Register. |
*/ |
typedef union { |
u8 all : 8; |
struct { |
#if defined(__LITTLE_ENDIAN_BITFIELD) |
u8 cod : 1; /* Information transferred is command (1) or data (0) */ |
u8 io : 1; /* The device requests us to read (1) or write (0) */ |
u8 reserved : 6; /* Reserved */ |
#elif defined(__BIG_ENDIAN_BITFIELD) |
u8 reserved : 6; |
u8 io : 1; |
u8 cod : 1; |
#else |
#error "Please fix <asm/byteorder.h>" |
#endif |
} b; |
} atapi_ireason_reg_t; |
/* Currently unused, but please do not remove. --bkz */ |
/* |
* ATAPI Drive Select Register. |
*/ |
typedef union { |
u8 all :8; |
struct { |
#if defined(__LITTLE_ENDIAN_BITFIELD) |
u8 sam_lun :3; /* Logical unit number */ |
u8 reserved3 :1; /* Reserved */ |
u8 drv :1; /* The responding drive will be drive 0 (0) or drive 1 (1) */ |
u8 one5 :1; /* Should be set to 1 */ |
u8 reserved6 :1; /* Reserved */ |
u8 one7 :1; /* Should be set to 1 */ |
#elif defined(__BIG_ENDIAN_BITFIELD) |
u8 one7 :1; |
u8 reserved6 :1; |
u8 one5 :1; |
u8 drv :1; |
u8 reserved3 :1; |
u8 sam_lun :3; |
#else |
#error "Please fix <asm/byteorder.h>" |
#endif |
} b; |
} atapi_drivesel_reg_t; |
/* Currently unused, but please do not remove. --bkz */ |
/* |
* ATAPI Device Control Register. |
*/ |
typedef union { |
u8 all : 8; |
struct { |
#if defined(__LITTLE_ENDIAN_BITFIELD) |
u8 zero0 : 1; /* Should be set to zero */ |
u8 nien : 1; /* Device interrupt is disabled (1) or enabled (0) */ |
u8 srst : 1; /* ATA software reset. ATAPI devices should use the new ATAPI srst. */ |
u8 one3 : 1; /* Should be set to 1 */ |
u8 reserved4567 : 4; /* Reserved */ |
#elif defined(__BIG_ENDIAN_BITFIELD) |
u8 reserved4567 : 4; |
u8 one3 : 1; |
u8 srst : 1; |
u8 nien : 1; |
u8 zero0 : 1; |
#else |
#error "Please fix <asm/byteorder.h>" |
#endif |
} b; |
} atapi_control_reg_t; |
/* |
* The following is used to format the general configuration word |
* of the ATAPI IDENTIFY DEVICE command. |
*/ |
struct atapi_id_gcw { |
#if defined(__LITTLE_ENDIAN_BITFIELD) |
u8 packet_size : 2; /* Packet Size */ |
u8 reserved234 : 3; /* Reserved */ |
u8 drq_type : 2; /* Command packet DRQ type */ |
u8 removable : 1; /* Removable media */ |
u8 device_type : 5; /* Device type */ |
u8 reserved13 : 1; /* Reserved */ |
u8 protocol : 2; /* Protocol type */ |
#elif defined(__BIG_ENDIAN_BITFIELD) |
u8 protocol : 2; |
u8 reserved13 : 1; |
u8 device_type : 5; |
u8 removable : 1; |
u8 drq_type : 2; |
u8 reserved234 : 3; |
u8 packet_size : 2; |
#else |
#error "Please fix <asm/byteorder.h>" |
#endif |
}; |
/* |
* INQUIRY packet command - Data Format. |
*/ |
typedef struct { |
#if defined(__LITTLE_ENDIAN_BITFIELD) |
u8 device_type : 5; /* Peripheral Device Type */ |
u8 reserved0_765 : 3; /* Peripheral Qualifier - Reserved */ |
u8 reserved1_6t0 : 7; /* Reserved */ |
u8 rmb : 1; /* Removable Medium Bit */ |
u8 ansi_version : 3; /* ANSI Version */ |
u8 ecma_version : 3; /* ECMA Version */ |
u8 iso_version : 2; /* ISO Version */ |
u8 response_format : 4; /* Response Data Format */ |
u8 reserved3_45 : 2; /* Reserved */ |
u8 reserved3_6 : 1; /* TrmIOP - Reserved */ |
u8 reserved3_7 : 1; /* AENC - Reserved */ |
#elif defined(__BIG_ENDIAN_BITFIELD) |
u8 reserved0_765 : 3; |
u8 device_type : 5; |
u8 rmb : 1; |
u8 reserved1_6t0 : 7; |
u8 iso_version : 2; |
u8 ecma_version : 3; |
u8 ansi_version : 3; |
u8 reserved3_7 : 1; |
u8 reserved3_6 : 1; |
u8 reserved3_45 : 2; |
u8 response_format : 4; |
#else |
#error "Please fix <asm/byteorder.h>" |
#endif |
u8 additional_length; /* Additional Length (total_length-4) */ |
u8 rsv5, rsv6, rsv7; /* Reserved */ |
u8 vendor_id[8]; /* Vendor Identification */ |
u8 product_id[16]; /* Product Identification */ |
u8 revision_level[4]; /* Revision Level */ |
u8 vendor_specific[20]; /* Vendor Specific - Optional */ |
u8 reserved56t95[40]; /* Reserved - Optional */ |
/* Additional information may be returned */ |
} atapi_inquiry_result_t; |
/* |
* REQUEST SENSE packet command result - Data Format. |
*/ |
typedef struct atapi_request_sense { |
#if defined(__LITTLE_ENDIAN_BITFIELD) |
u8 error_code : 7; /* Error Code (0x70 - current or 0x71 - deferred) */ |
u8 valid : 1; /* The information field conforms to standard */ |
u8 reserved1 : 8; /* Reserved (Segment Number) */ |
u8 sense_key : 4; /* Sense Key */ |
u8 reserved2_4 : 1; /* Reserved */ |
u8 ili : 1; /* Incorrect Length Indicator */ |
u8 eom : 1; /* End Of Medium */ |
u8 filemark : 1; /* Filemark */ |
#elif defined(__BIG_ENDIAN_BITFIELD) |
u8 valid : 1; |
u8 error_code : 7; |
u8 reserved1 : 8; |
u8 filemark : 1; |
u8 eom : 1; |
u8 ili : 1; |
u8 reserved2_4 : 1; |
u8 sense_key : 4; |
#else |
#error "Please fix <asm/byteorder.h>" |
#endif |
u32 information __attribute__ ((packed)); |
u8 asl; /* Additional sense length (n-7) */ |
u32 command_specific; /* Additional command specific information */ |
u8 asc; /* Additional Sense Code */ |
u8 ascq; /* Additional Sense Code Qualifier */ |
u8 replaceable_unit_code; /* Field Replaceable Unit Code */ |
#if defined(__LITTLE_ENDIAN_BITFIELD) |
u8 sk_specific1 : 7; /* Sense Key Specific */ |
u8 sksv : 1; /* Sense Key Specific information is valid */ |
#elif defined(__BIG_ENDIAN_BITFIELD) |
u8 sksv : 1; /* Sense Key Specific information is valid */ |
u8 sk_specific1 : 7; /* Sense Key Specific */ |
#else |
#error "Please fix <asm/byteorder.h>" |
#endif |
u8 sk_specific[2]; /* Sense Key Specific */ |
u8 pad[2]; /* Padding to 20 bytes */ |
} atapi_request_sense_result_t; |
extern void atapi_init_pc(struct atapi_packet_command *pc); |
extern void atapi_discard_data(struct ata_device *, unsigned int); |
extern void atapi_write_zeros(struct ata_device *, unsigned int); |
extern void atapi_read(struct ata_device *, u8 *, unsigned int); |
extern void atapi_write(struct ata_device *, u8 *, unsigned int); |
typedef enum { |
ide_wait, /* insert rq at end of list, and wait for it */ |
ide_preempt, /* insert rq in front of current request */ |
ide_end /* insert rq at end of list, but don't wait for it */ |
} ide_action_t; |
extern int ide_do_drive_cmd(struct ata_device *, struct request *, ide_action_t); |
/shark/trunk/drivers/linuxc26/include/linux/cciss_ioctl.h |
---|
0,0 → 1,213 |
#ifndef CCISS_IOCTLH |
#define CCISS_IOCTLH |
#include <linux/types.h> |
#include <linux/ioctl.h> |
#define CCISS_IOC_MAGIC 'B' |
typedef struct _cciss_pci_info_struct |
{ |
unsigned char bus; |
unsigned char dev_fn; |
__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 _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 *buf; |
} BIG_IOCTL_Command_struct; |
#ifndef CCISS_CMD_H |
// This defines are duplicated in cciss_cmd.h in the driver directory |
//general boundary defintions |
#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 16 |
#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_CMD_H */ |
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 *buf; |
} 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_GETLUNINFO _IOR(CCISS_IOC_MAGIC, 17, LogvolInfo_struct) |
#define CCISS_BIG_PASSTHRU _IOWR(CCISS_IOC_MAGIC, 18, BIG_IOCTL_Command_struct) |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/hiddev.h |
---|
0,0 → 1,222 |
#ifndef _HIDDEV_H |
#define _HIDDEV_H |
/* |
* $Id: hiddev.h,v 1.1 2004-01-28 15:25:25 giacomo Exp $ |
* |
* 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 |
*/ |
/* |
* The event structure itself |
*/ |
struct hiddev_event { |
unsigned hid; |
signed int value; |
}; |
struct hiddev_devinfo { |
unsigned int bustype; |
unsigned int busnum; |
unsigned int devnum; |
unsigned int ifnum; |
short vendor; |
short product; |
short version; |
unsigned num_applications; |
}; |
struct hiddev_collection_info { |
unsigned index; |
unsigned type; |
unsigned usage; |
unsigned level; |
}; |
#define HID_STRING_SIZE 256 |
struct hiddev_string_descriptor { |
int index; |
char value[HID_STRING_SIZE]; |
}; |
struct hiddev_report_info { |
unsigned report_type; |
unsigned report_id; |
unsigned 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 { |
unsigned report_type; |
unsigned report_id; |
unsigned field_index; |
unsigned maxusage; |
unsigned flags; |
unsigned physical; /* physical usage for this field */ |
unsigned logical; /* logical usage for this field */ |
unsigned application; /* application usage for this field */ |
__s32 logical_minimum; |
__s32 logical_maximum; |
__s32 physical_minimum; |
__s32 physical_maximum; |
unsigned unit_exponent; |
unsigned 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 { |
unsigned report_type; |
unsigned report_id; |
unsigned field_index; |
unsigned usage_index; |
unsigned usage_code; |
__s32 value; |
}; |
/* 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) |
/* |
* 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.field_index = i; |
* uref.usage_index = j; |
* ioctl(fd, HIDIOCGUCODE, &uref); |
* ioctl(fd, HIDIOCGUSAGE, &uref); |
* } |
* } |
* uref.report_id |= HID_REPORT_ID_NEXT; |
* ret = ioctl(fd, HIDIOCGREPORTINFO, &uref); |
* } |
*/ |
#ifdef __KERNEL__ |
/* |
* In-kernel definitions. |
*/ |
#ifdef CONFIG_USB_HIDDEV |
int hiddev_connect(struct hid_device *); |
void hiddev_disconnect(struct hid_device *); |
void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, |
struct hid_usage *usage, __s32 value, struct pt_regs *regs); |
void hiddev_report_event(struct hid_device *hid, struct hid_report *report); |
int __init hiddev_init(void); |
void hiddev_exit(void); |
#else |
static inline int hiddev_connect(struct hid_device *hid) { return -1; } |
static inline void hiddev_disconnect(struct hid_device *hid) { } |
static inline void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, |
struct hid_usage *usage, __s32 value, struct pt_regs *regs) { } |
static inline void hiddev_report_event(struct hid_device *hid, struct hid_report *report) { } |
static inline int hiddev_init(void) { return 0; } |
static inline void hiddev_exit(void) { } |
#endif |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/if_tr.h |
---|
0,0 → 1,100 |
/* |
* 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 Token-Ring IEEE 802.5 interface. |
* |
* Version: @(#)if_tr.h 0.0 07/11/94 |
* |
* Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> |
* Donald Becker, <becker@super.org> |
* 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 _LINUX_IF_TR_H |
#define _LINUX_IF_TR_H |
/* IEEE 802.5 Token-Ring magic constants. The frame sizes omit the preamble |
and FCS/CRC (frame check sequence). */ |
#define TR_ALEN 6 /* Octets in one ethernet addr */ |
#define TR_HLEN (sizeof(struct trh_hdr)+sizeof(struct trllc)) |
#define AC 0x10 |
#define LLC_FRAME 0x40 |
#if 0 |
#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 */ |
#endif |
/* LLC and SNAP constants */ |
#define EXTENDED_SAP 0xAA |
#define UI_CMD 0x03 |
/* This is an Token-Ring frame header. */ |
struct trh_hdr { |
__u8 ac; /* access control field */ |
__u8 fc; /* frame control field */ |
__u8 daddr[TR_ALEN]; /* destination address */ |
__u8 saddr[TR_ALEN]; /* source address */ |
__u16 rcf; /* route control field */ |
__u16 rseg[8]; /* routing registers */ |
}; |
/* This is an Token-Ring LLC structure */ |
struct trllc { |
__u8 dsap; /* destination SAP */ |
__u8 ssap; /* source SAP */ |
__u8 llc; /* LLC control field */ |
__u8 protid[3]; /* protocol id */ |
__u16 ethertype; /* ether type field */ |
}; |
/* Token-Ring statistics collection data. */ |
struct tr_statistics { |
unsigned long rx_packets; /* total packets received */ |
unsigned long tx_packets; /* total packets transmitted */ |
unsigned long rx_bytes; /* total bytes received */ |
unsigned long tx_bytes; /* total bytes transmitted */ |
unsigned long rx_errors; /* bad packets received */ |
unsigned long tx_errors; /* packet transmit problems */ |
unsigned long rx_dropped; /* no space in linux buffers */ |
unsigned long tx_dropped; /* no space available in linux */ |
unsigned long multicast; /* multicast packets received */ |
unsigned long transmit_collision; |
/* detailed Token-Ring errors. See IBM Token-Ring Network |
Architecture for more info */ |
unsigned long line_errors; |
unsigned long internal_errors; |
unsigned long burst_errors; |
unsigned long A_C_errors; |
unsigned long abort_delimiters; |
unsigned long lost_frames; |
unsigned long recv_congest_count; |
unsigned long frame_copied_errors; |
unsigned long frequency_errors; |
unsigned long token_errors; |
unsigned long dummy1; |
}; |
/* source routing stuff */ |
#define TR_RII 0x80 |
#define TR_RCF_DIR_BIT 0x80 |
#define TR_RCF_LEN_MASK 0x1f00 |
#define TR_RCF_BROADCAST 0x8000 /* all-routes broadcast */ |
#define TR_RCF_LIMITED_BROADCAST 0xC000 /* single-route broadcast */ |
#define TR_RCF_FRAME2K 0x20 |
#define TR_RCF_BROADCAST_MASK 0xC000 |
#define TR_MAXRIFLEN 18 |
#endif /* _LINUX_IF_TR_H */ |
/shark/trunk/drivers/linuxc26/include/linux/i2c-id.h |
---|
0,0 → 1,274 |
/* ------------------------------------------------------------------------- */ |
/* */ |
/* i2c.h - definitions for the i2c-bus interface */ |
/* */ |
/* ------------------------------------------------------------------------- */ |
/* Copyright (C) 1995-1999 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ |
/* ------------------------------------------------------------------------- */ |
/* $Id: i2c-id.h,v 1.1 2004-01-28 15:25:28 giacomo Exp $ */ |
#ifndef LINUX_I2C_ID_H |
#define LINUX_I2C_ID_H |
/* |
* This file is part of the i2c-bus package and contains the identifier |
* values for drivers, adapters and other folk populating these serial |
* worlds. |
* |
* These will change often (i.e. additions) , therefore this has been |
* separated from the functional interface definitions of the i2c api. |
* |
*/ |
/* |
* ---- Driver types ----------------------------------------------------- |
* device id name + number function description, i2c address(es) |
* |
* Range 1000-1999 range is defined in sensors/sensors.h |
* Range 0x100 - 0x1ff is for V4L2 Common Components |
* Range 0xf000 - 0xffff is reserved for local experimentation, and should |
* never be used in official drivers |
*/ |
#define I2C_DRIVERID_MSP3400 1 |
#define I2C_DRIVERID_TUNER 2 |
#define I2C_DRIVERID_VIDEOTEX 3 /* please rename */ |
#define I2C_DRIVERID_TDA8425 4 /* stereo sound processor */ |
#define I2C_DRIVERID_TEA6420 5 /* audio matrix switch */ |
#define I2C_DRIVERID_TEA6415C 6 /* video matrix switch */ |
#define I2C_DRIVERID_TDA9840 7 /* stereo sound processor */ |
#define I2C_DRIVERID_SAA7111A 8 /* video input processor */ |
#define I2C_DRIVERID_SAA5281 9 /* videotext decoder */ |
#define I2C_DRIVERID_SAA7112 10 /* video decoder, image scaler */ |
#define I2C_DRIVERID_SAA7120 11 /* video encoder */ |
#define I2C_DRIVERID_SAA7121 12 /* video encoder */ |
#define I2C_DRIVERID_SAA7185B 13 /* video encoder */ |
#define I2C_DRIVERID_CH7003 14 /* digital pc to tv encoder */ |
#define I2C_DRIVERID_PCF8574A 15 /* i2c expander - 8 bit in/out */ |
#define I2C_DRIVERID_PCF8582C 16 /* eeprom */ |
#define I2C_DRIVERID_AT24Cxx 17 /* eeprom 1/2/4/8/16 K */ |
#define I2C_DRIVERID_TEA6300 18 /* audio mixer */ |
#define I2C_DRIVERID_BT829 19 /* pc to tv encoder */ |
#define I2C_DRIVERID_TDA9850 20 /* audio mixer */ |
#define I2C_DRIVERID_TDA9855 21 /* audio mixer */ |
#define I2C_DRIVERID_SAA7110 22 /* video decoder */ |
#define I2C_DRIVERID_MGATVO 23 /* Matrox TVOut */ |
#define I2C_DRIVERID_SAA5249 24 /* SAA5249 and compatibles */ |
#define I2C_DRIVERID_PCF8583 25 /* real time clock */ |
#define I2C_DRIVERID_SAB3036 26 /* SAB3036 tuner */ |
#define I2C_DRIVERID_TDA7432 27 /* Stereo sound processor */ |
#define I2C_DRIVERID_TVMIXER 28 /* Mixer driver for tv cards */ |
#define I2C_DRIVERID_TVAUDIO 29 /* Generic TV sound driver */ |
#define I2C_DRIVERID_DPL3518 30 /* Dolby decoder chip */ |
#define I2C_DRIVERID_TDA9873 31 /* TV sound decoder chip */ |
#define I2C_DRIVERID_TDA9875 32 /* TV sound decoder chip */ |
#define I2C_DRIVERID_PIC16C54_PV9 33 /* Audio mux/ir receiver */ |
#define I2C_DRIVERID_SBATT 34 /* Smart Battery Device */ |
#define I2C_DRIVERID_SBS 35 /* SB System Manager */ |
#define I2C_DRIVERID_VES1893 36 /* VLSI DVB-S decoder */ |
#define I2C_DRIVERID_VES1820 37 /* VLSI DVB-C decoder */ |
#define I2C_DRIVERID_SAA7113 38 /* video decoder */ |
#define I2C_DRIVERID_TDA8444 39 /* octuple 6-bit DAC */ |
#define I2C_DRIVERID_BT819 40 /* video decoder */ |
#define I2C_DRIVERID_BT856 41 /* video encoder */ |
#define I2C_DRIVERID_VPX3220 42 /* video decoder+vbi/vtxt */ |
#define I2C_DRIVERID_DRP3510 43 /* ADR decoder (Astra Radio) */ |
#define I2C_DRIVERID_SP5055 44 /* Satellite tuner */ |
#define I2C_DRIVERID_STV0030 45 /* Multipurpose switch */ |
#define I2C_DRIVERID_SAA7108 46 /* video decoder, image scaler */ |
#define I2C_DRIVERID_DS1307 47 /* DS1307 real time clock */ |
#define I2C_DRIVERID_ADV7175 48 /* ADV 7175/7176 video encoder */ |
#define I2C_DRIVERID_SAA7114 49 /* video decoder */ |
#define I2C_DRIVERID_ZR36120 50 /* Zoran 36120 video encoder */ |
#define I2C_DRIVERID_24LC32A 51 /* Microchip 24LC32A 32k EEPROM */ |
#define I2C_DRIVERID_STM41T00 52 /* real time clock */ |
#define I2C_DRIVERID_UDA1342 53 /* UDA1342 audio codec */ |
#define I2C_DRIVERID_ADV7170 54 /* video encoder */ |
#define I2C_DRIVERID_RADEON 55 /* I2C bus on Radeon boards */ |
#define I2C_DRIVERID_EXP0 0xF0 /* experimental use id's */ |
#define I2C_DRIVERID_EXP1 0xF1 |
#define I2C_DRIVERID_EXP2 0xF2 |
#define I2C_DRIVERID_EXP3 0xF3 |
#define I2C_DRIVERID_I2CDEV 900 |
#define I2C_DRIVERID_I2CPROC 901 |
#define I2C_DRIVERID_ARP 902 /* SMBus ARP Client */ |
#define I2C_DRIVERID_ALERT 903 /* SMBus Alert Responder Client */ |
/* IDs -- Use DRIVERIDs 1000-1999 for sensors. |
These were originally in sensors.h in the lm_sensors package */ |
#define I2C_DRIVERID_LM78 1002 |
#define I2C_DRIVERID_LM75 1003 |
#define I2C_DRIVERID_GL518 1004 |
#define I2C_DRIVERID_EEPROM 1005 |
#define I2C_DRIVERID_W83781D 1006 |
#define I2C_DRIVERID_LM80 1007 |
#define I2C_DRIVERID_ADM1021 1008 |
#define I2C_DRIVERID_ADM9240 1009 |
#define I2C_DRIVERID_LTC1710 1010 |
#define I2C_DRIVERID_SIS5595 1011 |
#define I2C_DRIVERID_ICSPLL 1012 |
#define I2C_DRIVERID_BT869 1013 |
#define I2C_DRIVERID_MAXILIFE 1014 |
#define I2C_DRIVERID_MATORB 1015 |
#define I2C_DRIVERID_GL520 1016 |
#define I2C_DRIVERID_THMC50 1017 |
#define I2C_DRIVERID_DDCMON 1018 |
#define I2C_DRIVERID_VIA686A 1019 |
#define I2C_DRIVERID_ADM1025 1020 |
#define I2C_DRIVERID_LM87 1021 |
#define I2C_DRIVERID_PCF8574 1022 |
#define I2C_DRIVERID_MTP008 1023 |
#define I2C_DRIVERID_DS1621 1024 |
#define I2C_DRIVERID_ADM1024 1025 |
#define I2C_DRIVERID_IT87 1026 |
#define I2C_DRIVERID_CH700X 1027 /* single driver for CH7003-7009 digital pc to tv encoders */ |
#define I2C_DRIVERID_FSCPOS 1028 |
#define I2C_DRIVERID_FSCSCY 1029 |
#define I2C_DRIVERID_PCF8591 1030 |
#define I2C_DRIVERID_SMSC47M1 1031 |
#define I2C_DRIVERID_VT1211 1032 |
#define I2C_DRIVERID_LM92 1033 |
#define I2C_DRIVERID_VT8231 1034 |
#define I2C_DRIVERID_SMARTBATT 1035 |
#define I2C_DRIVERID_BMCSENSORS 1036 |
#define I2C_DRIVERID_FS451 1037 |
#define I2C_DRIVERID_W83627HF 1038 |
#define I2C_DRIVERID_LM85 1039 |
/* |
* ---- Adapter types ---------------------------------------------------- |
* |
* First, we distinguish between several algorithms to access the hardware |
* interface types, as a PCF 8584 needs other care than a bit adapter. |
*/ |
#define I2C_ALGO_NONE 0x000000 |
#define I2C_ALGO_BIT 0x010000 /* bit style adapters */ |
#define I2C_ALGO_PCF 0x020000 /* PCF 8584 style adapters */ |
#define I2C_ALGO_ATI 0x030000 /* ATI video card */ |
#define I2C_ALGO_SMBUS 0x040000 |
#define I2C_ALGO_ISA 0x050000 /* lm_sensors ISA pseudo-adapter */ |
#define I2C_ALGO_SAA7146 0x060000 /* SAA 7146 video decoder bus */ |
#define I2C_ALGO_ACB 0x070000 /* ACCESS.bus algorithm */ |
#define I2C_ALGO_IIC 0x080000 /* ITE IIC bus */ |
#define I2C_ALGO_SAA7134 0x090000 |
#define I2C_ALGO_MPC824X 0x0a0000 /* Motorola 8240 / 8245 */ |
#define I2C_ALGO_IPMI 0x0b0000 /* IPMI dummy adapter */ |
#define I2C_ALGO_IPMB 0x0c0000 /* IPMB adapter */ |
#define I2C_ALGO_MPC107 0x0d0000 |
#define I2C_ALGO_EC 0x100000 /* ACPI embedded controller */ |
#define I2C_ALGO_MPC8XX 0x110000 /* MPC8xx PowerPC I2C algorithm */ |
#define I2C_ALGO_OCP 0x120000 /* IBM or otherwise On-chip I2C algorithm */ |
#define I2C_ALGO_BITHS 0x130000 /* enhanced bit style adapters */ |
#define I2C_ALGO_OCP_IOP3XX 0x140000 /* XSCALE IOP3XX On-chip I2C alg */ |
#define I2C_ALGO_EXP 0x800000 /* experimental */ |
#define I2C_ALGO_MASK 0xff0000 /* Mask for algorithms */ |
#define I2C_ALGO_SHIFT 0x10 /* right shift to get index values */ |
#define I2C_HW_ADAPS 0x10000 /* # adapter types */ |
#define I2C_HW_MASK 0xffff |
/* hw specific modules that are defined per algorithm layer |
*/ |
/* --- Bit algorithm adapters */ |
#define I2C_HW_B_LP 0x00 /* Parallel port Philips style adapter */ |
#define I2C_HW_B_LPC 0x01 /* Parallel port, over control reg. */ |
#define I2C_HW_B_SER 0x02 /* Serial line interface */ |
#define I2C_HW_B_ELV 0x03 /* ELV Card */ |
#define I2C_HW_B_VELLE 0x04 /* Vellemann K8000 */ |
#define I2C_HW_B_BT848 0x05 /* BT848 video boards */ |
#define I2C_HW_B_WNV 0x06 /* Winnov Videums */ |
#define I2C_HW_B_VIA 0x07 /* Via vt82c586b */ |
#define I2C_HW_B_HYDRA 0x08 /* Apple Hydra Mac I/O */ |
#define I2C_HW_B_G400 0x09 /* Matrox G400 */ |
#define I2C_HW_B_I810 0x0a /* Intel I810 */ |
#define I2C_HW_B_VOO 0x0b /* 3dfx Voodoo 3 / Banshee */ |
#define I2C_HW_B_PPORT 0x0c /* Primitive parallel port adapter */ |
#define I2C_HW_B_SAVG 0x0d /* Savage 4 */ |
#define I2C_HW_B_SCX200 0x0e /* Nat'l Semi SCx200 I2C */ |
#define I2C_HW_B_RIVA 0x10 /* Riva based graphics cards */ |
#define I2C_HW_B_IOC 0x11 /* IOC bit-wiggling */ |
#define I2C_HW_B_TSUNA 0x12 /* DEC Tsunami chipset */ |
#define I2C_HW_B_FRODO 0x13 /* 2d3D, Inc. SA-1110 Development Board */ |
#define I2C_HW_B_OMAHA 0x14 /* Omaha I2C interface (ARM) */ |
#define I2C_HW_B_GUIDE 0x15 /* Guide bit-basher */ |
#define I2C_HW_B_IXP2000 0x16 /* GPIO on IXP2000 systems */ |
#define I2C_HW_B_IXP425 0x17 /* GPIO on IXP425 systems */ |
#define I2C_HW_B_S3VIA 0x18 /* S3Via ProSavage adapter */ |
#define I2C_HW_B_ZR36067 0x19 /* Zoran-36057/36067 based boards */ |
/* --- PCF 8584 based algorithms */ |
#define I2C_HW_P_LP 0x00 /* Parallel port interface */ |
#define I2C_HW_P_ISA 0x01 /* generic ISA Bus inteface card */ |
#define I2C_HW_P_ELEK 0x02 /* Elektor ISA Bus inteface card */ |
/* --- ACPI Embedded controller algorithms */ |
#define I2C_HW_ACPI_EC 0x00 |
/* --- MPC824x PowerPC adapters */ |
#define I2C_HW_MPC824X 0x00 /* Motorola 8240 / 8245 */ |
/* --- MPC8xx PowerPC adapters */ |
#define I2C_HW_MPC8XX_EPON 0x00 /* Eponymous MPC8xx I2C adapter */ |
/* --- ITE based algorithms */ |
#define I2C_HW_I_IIC 0x00 /* controller on the ITE */ |
/* --- PowerPC on-chip adapters */ |
#define I2C_HW_OCP 0x00 /* IBM on-chip I2C adapter */ |
/* --- XSCALE on-chip adapters */ |
#define I2C_HW_IOP321 0x00 |
/* --- SMBus only adapters */ |
#define I2C_HW_SMBUS_PIIX4 0x00 |
#define I2C_HW_SMBUS_ALI15X3 0x01 |
#define I2C_HW_SMBUS_VIA2 0x02 |
#define I2C_HW_SMBUS_VOODOO3 0x03 |
#define I2C_HW_SMBUS_I801 0x04 |
#define I2C_HW_SMBUS_AMD756 0x05 |
#define I2C_HW_SMBUS_SIS5595 0x06 |
#define I2C_HW_SMBUS_ALI1535 0x07 |
#define I2C_HW_SMBUS_SIS630 0x08 |
#define I2C_HW_SMBUS_SIS96X 0x09 |
#define I2C_HW_SMBUS_AMD8111 0x0a |
#define I2C_HW_SMBUS_SCX200 0x0b |
#define I2C_HW_SMBUS_NFORCE2 0x0c |
/* --- ISA pseudo-adapter */ |
#define I2C_HW_ISA 0x00 |
/* --- IPMI pseudo-adapter */ |
#define I2C_HW_IPMI 0x00 |
/* --- IPMB adapter */ |
#define I2C_HW_IPMB 0x00 |
/* --- MCP107 adapter */ |
#define I2C_HW_MPC107 0x00 |
#endif /* LINUX_I2C_ID_H */ |
/shark/trunk/drivers/linuxc26/include/linux/dm-ioctl.h |
---|
0,0 → 1,18 |
/* |
* Copyright (C) 2003 Sistina Software (UK) Limited. |
* |
* This file is released under the LGPL. |
*/ |
#ifndef _LINUX_DM_IOCTL_H |
#define _LINUX_DM_IOCTL_H |
#include <linux/config.h> |
#ifdef CONFIG_DM_IOCTL_V4 |
#include "dm-ioctl-v4.h" |
#else |
#include "dm-ioctl-v1.h" |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/eventpoll.h |
---|
0,0 → 1,103 |
/* |
* include/linux/eventpoll.h ( Efficent event polling implementation ) |
* Copyright (C) 2001,...,2003 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 _LINUX_EVENTPOLL_H |
#define _LINUX_EVENTPOLL_H |
#include <linux/types.h> |
/* Valid opcodes to issue to sys_epoll_ctl() */ |
#define EPOLL_CTL_ADD 1 |
#define EPOLL_CTL_DEL 2 |
#define EPOLL_CTL_MOD 3 |
/* 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. |
*/ |
#ifdef __x86_64__ |
#define EPOLL_PACKED __attribute__((packed)) |
#else |
#define EPOLL_PACKED |
#endif |
struct epoll_event { |
__u32 events; |
__u64 data; |
} EPOLL_PACKED; |
#ifdef __KERNEL__ |
/* Forward declarations to avoid compiler errors */ |
struct file; |
/* Kernel space functions implementing the user space "epoll" API */ |
asmlinkage long sys_epoll_create(int size); |
asmlinkage long sys_epoll_ctl(int epfd, int op, int fd, |
struct epoll_event __user *event); |
asmlinkage long sys_epoll_wait(int epfd, struct epoll_event __user *events, |
int maxevents, int timeout); |
#ifdef CONFIG_EPOLL |
/* Used to initialize the epoll bits inside the "struct file" */ |
void eventpoll_init_file(struct file *file); |
/* Used to release the epoll bits inside the "struct file" */ |
void eventpoll_release_file(struct file *file); |
/* |
* This is called from inside fs/file_table.c:__fput() to unlink files |
* from the eventpoll interface. We need to have this facility to cleanup |
* correctly files that are closed without being removed from the eventpoll |
* interface. |
*/ |
static inline void eventpoll_release(struct file *file) |
{ |
/* |
* Fast check to avoid the get/release of the semaphore. Since |
* we're doing this outside the semaphore lock, it might return |
* false negatives, but we don't care. It'll help in 99.99% of cases |
* to avoid the semaphore lock. False positives simply cannot happen |
* because the file in on the way to be removed and nobody ( but |
* eventpoll ) has still a reference to this file. |
*/ |
if (likely(list_empty(&file->f_ep_links))) |
return; |
/* |
* The file is being closed while it is still linked to an epoll |
* descriptor. We need to handle this by correctly unlinking it |
* from its containers. |
*/ |
eventpoll_release_file(file); |
} |
#else |
static inline void eventpoll_init_file(struct file *file) {} |
static inline void eventpoll_release(struct file *file) {} |
#endif |
#endif /* #ifdef __KERNEL__ */ |
#endif /* #ifndef _LINUX_EVENTPOLL_H */ |
/shark/trunk/drivers/linuxc26/include/linux/uts.h |
---|
0,0 → 1,19 |
#ifndef _LINUX_UTS_H |
#define _LINUX_UTS_H |
/* |
* Defines for what uname() should return |
*/ |
#ifndef UTS_SYSNAME |
#define UTS_SYSNAME "Linux" |
#endif |
#ifndef UTS_NODENAME |
#define UTS_NODENAME "(none)" /* set by sethostname() */ |
#endif |
#ifndef UTS_DOMAINNAME |
#define UTS_DOMAINNAME "(none)" /* set by setdomainname() */ |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/mroute.h |
---|
0,0 → 1,226 |
#ifndef __LINUX_MROUTE_H |
#define __LINUX_MROUTE_H |
#include <linux/sockios.h> |
#include <linux/in.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 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) */ |
struct in_addr vifc_lcl_addr; /* Our address */ |
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 */ |
/* |
* 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 |
*/ |
#ifdef __KERNEL__ |
#include <net/sock.h> |
extern int ip_mroute_setsockopt(struct sock *, int, char *, int); |
extern int ip_mroute_getsockopt(struct sock *, int, char *, int *); |
extern int ipmr_ioctl(struct sock *sk, int cmd, unsigned long arg); |
extern void ip_mr_init(void); |
struct vif_device |
{ |
struct net_device *dev; /* Device we are using */ |
unsigned long bytes_in,bytes_out; |
unsigned long pkt_in,pkt_out; /* Statistics */ |
unsigned long rate_limit; /* Traffic shaping (NI) */ |
unsigned char threshold; /* TTL threshold */ |
unsigned short flags; /* Control flags */ |
__u32 local,remote; /* Addresses(remote for tunnels)*/ |
int link; /* Physical interface index */ |
}; |
#define VIFF_STATIC 0x8000 |
struct mfc_cache |
{ |
struct mfc_cache *next; /* Next entry on cache line */ |
__u32 mfc_mcastgrp; /* Group the entry belongs to */ |
__u32 mfc_origin; /* Source of packet */ |
vifi_t mfc_parent; /* Source interface */ |
int mfc_flags; /* Flags on line */ |
union { |
struct { |
unsigned long expires; |
struct sk_buff_head unresolved; /* Unresolved buffers */ |
} unres; |
struct { |
unsigned long last_assert; |
int minvif; |
int maxvif; |
unsigned long bytes; |
unsigned long pkt; |
unsigned long wrong_if; |
unsigned char ttls[MAXVIFS]; /* TTL thresholds */ |
} res; |
} mfc_un; |
}; |
#define MFC_STATIC 1 |
#define MFC_NOTIFY 2 |
#define MFC_LINES 64 |
#ifdef __BIG_ENDIAN |
#define MFC_HASH(a,b) ((((a)>>24)^((b)>>26))&(MFC_LINES-1)) |
#else |
#define MFC_HASH(a,b) (((a)^((b)>>2))&(MFC_LINES-1)) |
#endif |
#endif |
#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 */ |
#ifdef __KERNEL__ |
#define PIM_V1_VERSION __constant_htonl(0x10000000) |
#define PIM_V1_REGISTER 1 |
#define PIM_VERSION 2 |
#define PIM_REGISTER 1 |
#define PIM_NULL_REGISTER __constant_htonl(0x40000000) |
/* PIMv2 register message header layout (ietf-draft-idmr-pimvsm-v2-00.ps */ |
struct pimreghdr |
{ |
__u8 type; |
__u8 reserved; |
__u16 csum; |
__u32 flags; |
}; |
extern int pim_rcv_v1(struct sk_buff *); |
struct rtmsg; |
extern int ipmr_get_route(struct sk_buff *skb, struct rtmsg *rtm, int nowait); |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/lapb.h |
---|
0,0 → 1,56 |
/* |
* These are the public elements of the Linux LAPB module. |
*/ |
#ifndef LAPB_KERNEL_H |
#define LAPB_KERNEL_H |
#define LAPB_OK 0 |
#define LAPB_BADTOKEN 1 |
#define LAPB_INVALUE 2 |
#define LAPB_CONNECTED 3 |
#define LAPB_NOTCONNECTED 4 |
#define LAPB_REFUSED 5 |
#define LAPB_TIMEDOUT 6 |
#define LAPB_NOMEM 7 |
#define LAPB_STANDARD 0x00 |
#define LAPB_EXTENDED 0x01 |
#define LAPB_SLP 0x00 |
#define LAPB_MLP 0x02 |
#define LAPB_DTE 0x00 |
#define LAPB_DCE 0x04 |
struct lapb_register_struct { |
void (*connect_confirmation)(void *token, int reason); |
void (*connect_indication)(void *token, int reason); |
void (*disconnect_confirmation)(void *token, int reason); |
void (*disconnect_indication)(void *token, int reason); |
int (*data_indication)(void *token, struct sk_buff *skb); |
void (*data_transmit)(void *token, struct sk_buff *skb); |
}; |
struct lapb_parms_struct { |
unsigned int t1; |
unsigned int t1timer; |
unsigned int t2; |
unsigned int t2timer; |
unsigned int n2; |
unsigned int n2count; |
unsigned int window; |
unsigned int state; |
unsigned int mode; |
}; |
extern int lapb_register(void *token, struct lapb_register_struct *callbacks); |
extern int lapb_unregister(void *token); |
extern int lapb_getparms(void *token, struct lapb_parms_struct *parms); |
extern int lapb_setparms(void *token, struct lapb_parms_struct *parms); |
extern int lapb_connect_request(void *token); |
extern int lapb_disconnect_request(void *token); |
extern int lapb_data_request(void *token, struct sk_buff *skb); |
extern int lapb_data_received(void *token, struct sk_buff *skb); |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/ethtool.h |
---|
0,0 → 1,469 |
/* |
* 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) |
*/ |
#ifndef _LINUX_ETHTOOL_H |
#define _LINUX_ETHTOOL_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, 10Mb, 100Mb, gigabit */ |
u8 duplex; /* Duplex, half or full */ |
u8 port; /* Which connector port */ |
u8 phy_address; |
u8 transceiver; /* Which transceiver to use */ |
u8 autoneg; /* Enable or disable autonegotiation */ |
u32 maxtxpkt; /* Tx pkts before generating tx int */ |
u32 maxrxpkt; /* Rx pkts before generating rx int */ |
u32 reserved[4]; |
}; |
#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[32]; /* firmware version string, if applicable */ |
char bus_info[ETHTOOL_BUSINFO_LEN]; /* Bus info for this IF. */ |
/* For PCI devices, use pci_name(pci_dev). */ |
char reserved1[32]; |
char reserved2[16]; |
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]; |
}; |
/* for configuring coalescing parameters of chip */ |
struct ethtool_coalesce { |
u32 cmd; /* ETHTOOL_{G,S}COALESCE */ |
/* How many usecs to delay an RX interrupt after |
* a packet arrives. If 0, only rx_max_coalesced_frames |
* is used. |
*/ |
u32 rx_coalesce_usecs; |
/* How many packets to delay an RX interrupt after |
* a packet arrives. If 0, only rx_coalesce_usecs is |
* used. It is illegal to set both usecs and max frames |
* to zero as this would cause RX interrupts to never be |
* generated. |
*/ |
u32 rx_max_coalesced_frames; |
/* Same as above two parameters, except that these values |
* apply while an IRQ is being serviced by the host. Not |
* all cards support this feature and the values are ignored |
* in that case. |
*/ |
u32 rx_coalesce_usecs_irq; |
u32 rx_max_coalesced_frames_irq; |
/* How many usecs to delay a TX interrupt after |
* a packet is sent. If 0, only tx_max_coalesced_frames |
* is used. |
*/ |
u32 tx_coalesce_usecs; |
/* How many packets to delay a TX interrupt after |
* a packet is sent. If 0, only tx_coalesce_usecs is |
* used. It is illegal to set both usecs and max frames |
* to zero as this would cause TX interrupts to never be |
* generated. |
*/ |
u32 tx_max_coalesced_frames; |
/* Same as above two parameters, except that these values |
* apply while an IRQ is being serviced by the host. Not |
* all cards support this feature and the values are ignored |
* in that case. |
*/ |
u32 tx_coalesce_usecs_irq; |
u32 tx_max_coalesced_frames_irq; |
/* 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. |
*/ |
u32 stats_block_coalesce_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. |
*/ |
u32 use_adaptive_rx_coalesce; |
u32 use_adaptive_tx_coalesce; |
/* When the packet rate (measured in packets per second) |
* is below pkt_rate_low, the {rx,tx}_*_low parameters are |
* used. |
*/ |
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; |
/* 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. |
*/ |
/* When the packet rate is (measured in packets per second) |
* is above pkt_rate_high, the {rx,tx}_*_high parameters are |
* used. |
*/ |
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; |
/* How often to do adaptive coalescing packet rate sampling, |
* measured in seconds. Must not be zero. |
*/ |
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; |
}; |
/* 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 'autonet' 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, |
}; |
/* 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]; |
}; |
enum ethtool_test_flags { |
ETH_TEST_FL_OFFLINE = (1 << 0), /* online / offline */ |
ETH_TEST_FL_FAILED = (1 << 1), /* test passed / failed */ |
}; |
/* 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 net_device; |
/* Some generic methods drivers may use in their ethtool_ops */ |
u32 ethtool_op_get_link(struct net_device *dev); |
u32 ethtool_op_get_tx_csum(struct net_device *dev); |
int ethtool_op_set_tx_csum(struct net_device *dev, u32 data); |
u32 ethtool_op_get_sg(struct net_device *dev); |
int ethtool_op_set_sg(struct net_device *dev, u32 data); |
u32 ethtool_op_get_tso(struct net_device *dev); |
int ethtool_op_set_tso(struct net_device *dev, u32 data); |
/** |
* ðtool_ops - Alter and report network device settings |
* get_settings: Get device-specific settings |
* set_settings: Set device-specific settings |
* get_drvinfo: Report driver information |
* get_regs: Get device registers |
* get_wol: Report whether Wake-on-Lan is enabled |
* set_wol: Turn Wake-on-Lan on or off |
* get_msglevel: Report driver message level |
* set_msglevel: Set driver message level |
* nway_reset: Restart autonegotiation |
* get_link: Get link status |
* get_eeprom: Read data from the device EEPROM |
* set_eeprom: Write data to the device EEPROM |
* get_coalesce: Get interrupt coalescing parameters |
* set_coalesce: Set interrupt coalescing parameters |
* get_ringparam: Report ring sizes |
* set_ringparam: Set ring sizes |
* get_pauseparam: Report pause parameters |
* set_pauseparam: Set pause paramters |
* get_rx_csum: Report whether receive checksums are turned on or off |
* set_rx_csum: Turn receive checksum on or off |
* get_tx_csum: Report whether transmit checksums are turned on or off |
* set_tx_csum: Turn transmit checksums on or off |
* get_sg: Report whether scatter-gather is enabled |
* set_sg: Turn scatter-gather on or off |
* get_tso: Report whether TCP segmentation offload is enabled |
* set_tso: Turn TCP segmentation offload on or off |
* self_test: Run specified self-tests |
* get_strings: Return a set of strings that describe the requested objects |
* phys_id: Identify the device |
* get_stats: Return statistics about the device |
* |
* Description: |
* |
* get_settings: |
* @get_settings is passed an ðtool_cmd to fill in. It returns |
* an negative errno or zero. |
* |
* set_settings: |
* @set_settings is passed an ðtool_cmd and should attempt to set |
* all the settings this device supports. It may return an error value |
* if something goes wrong (otherwise 0). |
* |
* get_eeprom: |
* Should fill in the magic field. Don't need to check len for zero |
* or wraparound. Fill in the data argument with the eeprom values |
* from offset to offset + len. Update len to the amount read. |
* Returns an error or zero. |
* |
* set_eeprom: |
* Should validate the magic field. Don't need to check len for zero |
* or wraparound. Update len to the amount written. Returns an error |
* or zero. |
*/ |
struct ethtool_ops { |
int (*get_settings)(struct net_device *, struct ethtool_cmd *); |
int (*set_settings)(struct net_device *, struct ethtool_cmd *); |
void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *); |
int (*get_regs_len)(struct net_device *); |
void (*get_regs)(struct net_device *, struct ethtool_regs *, void *); |
void (*get_wol)(struct net_device *, struct ethtool_wolinfo *); |
int (*set_wol)(struct net_device *, struct ethtool_wolinfo *); |
u32 (*get_msglevel)(struct net_device *); |
void (*set_msglevel)(struct net_device *, u32); |
int (*nway_reset)(struct net_device *); |
u32 (*get_link)(struct net_device *); |
int (*get_eeprom_len)(struct net_device *); |
int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *); |
int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *); |
int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *); |
int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *); |
void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *); |
int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *); |
void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam*); |
int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam*); |
u32 (*get_rx_csum)(struct net_device *); |
int (*set_rx_csum)(struct net_device *, u32); |
u32 (*get_tx_csum)(struct net_device *); |
int (*set_tx_csum)(struct net_device *, u32); |
u32 (*get_sg)(struct net_device *); |
int (*set_sg)(struct net_device *, u32); |
u32 (*get_tso)(struct net_device *); |
int (*set_tso)(struct net_device *, u32); |
int (*self_test_count)(struct net_device *); |
void (*self_test)(struct net_device *, struct ethtool_test *, u64 *); |
void (*get_strings)(struct net_device *, u32 stringset, u8 *); |
int (*phys_id)(struct net_device *, u32); |
int (*get_stats_count)(struct net_device *); |
void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *); |
}; |
/* 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. */ |
#define ETHTOOL_GLINK 0x0000000a /* Get link status (ethtool_value) */ |
#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) */ |
/* 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) |
/* 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) |
/* 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 foced up into this mode or autonegotiated. |
*/ |
/* The forced speed, 10Mb, 100Mb, gigabit, 10GbE. */ |
#define SPEED_10 10 |
#define SPEED_100 100 |
#define SPEED_1000 1000 |
#define SPEED_10000 10000 |
/* Duplex, half or full. */ |
#define DUPLEX_HALF 0x00 |
#define DUPLEX_FULL 0x01 |
/* Which connector port. */ |
#define PORT_TP 0x00 |
#define PORT_AUI 0x01 |
#define PORT_MII 0x02 |
#define PORT_FIBRE 0x03 |
#define PORT_BNC 0x04 |
/* 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 |
/* 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 */ |
#endif /* _LINUX_ETHTOOL_H */ |
/shark/trunk/drivers/linuxc26/include/linux/jiffies.h |
---|
0,0 → 1,53 |
#ifndef _LINUX_JIFFIES_H |
#define _LINUX_JIFFIES_H |
#include <linux/kernel.h> |
#include <linux/types.h> |
#include <linux/spinlock.h> |
#include <linux/seqlock.h> |
#include <asm/system.h> |
#include <asm/param.h> /* for HZ */ |
/* |
* The 64-bit value is not volatile - you MUST NOT read it |
* without holding read_lock_irq(&xtime_lock). |
* get_jiffies_64() will do this for you as appropriate. |
*/ |
extern u64 jiffies_64; |
extern unsigned long volatile jiffies; |
#if (BITS_PER_LONG < 64) |
u64 get_jiffies_64(void); |
#else |
static inline u64 get_jiffies_64(void) |
{ |
return (u64)jiffies; |
} |
#endif |
/* |
* These inlines deal with timer wrapping correctly. You are |
* strongly encouraged to use them |
* 1. Because people otherwise forget |
* 2. Because if the timer wrap changes in future you won't have to |
* alter your driver code. |
* |
* time_after(a,b) returns true if the time a is after time b. |
* |
* Do this with "<0" and ">=0" to only test the sign of the result. A |
* good compiler would generate better code (and a really good compiler |
* wouldn't care). Gcc is currently neither. |
*/ |
#define time_after(a,b) \ |
(typecheck(unsigned long, a) && \ |
typecheck(unsigned long, b) && \ |
((long)(b) - (long)(a) < 0)) |
#define time_before(a,b) time_after(b,a) |
#define time_after_eq(a,b) \ |
(typecheck(unsigned long, a) && \ |
typecheck(unsigned long, b) && \ |
((long)(a) - (long)(b) >= 0)) |
#define time_before_eq(a,b) time_after_eq(b,a) |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/smb.h |
---|
0,0 → 1,117 |
/* |
* smb.h |
* |
* Copyright (C) 1995, 1996 by Paal-Kr. Engstad and Volker Lendecke |
* Copyright (C) 1997 by Volker Lendecke |
* |
*/ |
#ifndef _LINUX_SMB_H |
#define _LINUX_SMB_H |
#include <linux/types.h> |
enum smb_protocol { |
SMB_PROTOCOL_NONE, |
SMB_PROTOCOL_CORE, |
SMB_PROTOCOL_COREPLUS, |
SMB_PROTOCOL_LANMAN1, |
SMB_PROTOCOL_LANMAN2, |
SMB_PROTOCOL_NT1 |
}; |
enum smb_case_hndl { |
SMB_CASE_DEFAULT, |
SMB_CASE_LOWER, |
SMB_CASE_UPPER |
}; |
struct smb_dskattr { |
__u16 total; |
__u16 allocblocks; |
__u16 blocksize; |
__u16 free; |
}; |
struct smb_conn_opt { |
/* The socket */ |
unsigned int fd; |
enum smb_protocol protocol; |
enum smb_case_hndl case_handling; |
/* Connection-Options */ |
__u32 max_xmit; |
__u16 server_uid; |
__u16 tid; |
/* The following are LANMAN 1.0 options */ |
__u16 secmode; |
__u16 maxmux; |
__u16 maxvcs; |
__u16 rawmode; |
__u32 sesskey; |
/* The following are NT LM 0.12 options */ |
__u32 maxraw; |
__u32 capabilities; |
__s16 serverzone; |
}; |
#ifdef __KERNEL__ |
#define SMB_NLS_MAXNAMELEN 20 |
struct smb_nls_codepage { |
char local_name[SMB_NLS_MAXNAMELEN]; |
char remote_name[SMB_NLS_MAXNAMELEN]; |
}; |
#define SMB_MAXNAMELEN 255 |
#define SMB_MAXPATHLEN 1024 |
/* |
* Contains all relevant data on a SMB networked file. |
*/ |
struct smb_fattr { |
__u16 attr; |
unsigned long f_ino; |
umode_t f_mode; |
nlink_t f_nlink; |
uid_t f_uid; |
gid_t f_gid; |
dev_t f_rdev; |
loff_t f_size; |
struct timespec f_atime; |
struct timespec f_mtime; |
struct timespec f_ctime; |
unsigned long f_blksize; |
unsigned long f_blocks; |
int f_unix; |
}; |
enum smb_conn_state { |
CONN_VALID, /* everything's fine */ |
CONN_INVALID, /* Something went wrong, but did not |
try to reconnect yet. */ |
CONN_RETRIED, /* Tried a reconnection, but was refused */ |
CONN_RETRYING /* Currently trying to reconnect */ |
}; |
#define SMB_SUPER_MAGIC 0x517B |
#define SMB_HEADER_LEN 37 /* includes everything up to, but not |
* including smb_bcc */ |
#define SMB_INITIAL_PACKET_SIZE 4000 |
#define SMB_MAX_PACKET_SIZE 32768 |
/* reserve this much space for trans2 parameters. Shouldn't have to be more |
than 10 or so, but OS/2 seems happier like this. */ |
#define SMB_TRANS2_MAX_PARAM 64 |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/reiserfs_fs_i.h |
---|
0,0 → 1,55 |
#ifndef _REISER_FS_I |
#define _REISER_FS_I |
#include <linux/list.h> |
/** bitmasks for i_flags field in reiserfs-specific part of inode */ |
typedef enum { |
/** this says what format of key do all items (but stat data) of |
an object have. If this is set, that format is 3.6 otherwise |
- 3.5 */ |
i_item_key_version_mask = 0x0001, |
/** If this is unset, object has 3.5 stat data, otherwise, it has |
3.6 stat data with 64bit size, 32bit nlink etc. */ |
i_stat_data_version_mask = 0x0002, |
/** file might need tail packing on close */ |
i_pack_on_close_mask = 0x0004, |
/** don't pack tail of file */ |
i_nopack_mask = 0x0008, |
/** If those is set, "safe link" was created for this file during |
truncate or unlink. Safe link is used to avoid leakage of disk |
space on crash with some files open, but unlinked. */ |
i_link_saved_unlink_mask = 0x0010, |
i_link_saved_truncate_mask = 0x0020 |
} reiserfs_inode_flags; |
struct reiserfs_inode_info { |
__u32 i_key [4];/* key is still 4 32 bit integers */ |
/** transient inode flags that are never stored on disk. Bitmasks |
for this field are defined above. */ |
__u32 i_flags; |
__u32 i_first_direct_byte; // offset of first byte stored in direct item. |
/* copy of persistent inode flags read from sd_attrs. */ |
__u32 i_attrs; |
int i_prealloc_block; /* first unused block of a sequence of unused blocks */ |
int i_prealloc_count; /* length of that sequence */ |
struct list_head i_prealloc_list; /* per-transaction list of inodes which |
* have preallocated blocks */ |
int new_packing_locality:1; /* new_packig_locality is created; new blocks |
* for the contents of this directory should be |
* displaced */ |
/* we use these for fsync or O_SYNC to decide which transaction |
** needs to be committed in order for this inode to be properly |
** flushed */ |
unsigned long i_trans_id ; |
unsigned long i_trans_index ; |
struct inode vfs_inode; |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/mman.h |
---|
0,0 → 1,64 |
#ifndef _LINUX_MMAN_H |
#define _LINUX_MMAN_H |
#include <linux/config.h> |
#include <linux/mm.h> |
#include <asm/atomic.h> |
#include <asm/mman.h> |
#define MREMAP_MAYMOVE 1 |
#define MREMAP_FIXED 2 |
extern int sysctl_overcommit_memory; |
extern int sysctl_overcommit_ratio; |
extern atomic_t vm_committed_space; |
#ifdef CONFIG_SMP |
extern void vm_acct_memory(long pages); |
#else |
static inline void vm_acct_memory(long pages) |
{ |
atomic_add(pages, &vm_committed_space); |
} |
#endif |
static inline void vm_unacct_memory(long pages) |
{ |
vm_acct_memory(-pages); |
} |
/* |
* Optimisation macro. It is equivalent to: |
* (x & bit1) ? bit2 : 0 |
* but this version is faster. |
* ("bit1" and "bit2" must be single bits) |
*/ |
#define _calc_vm_trans(x, bit1, bit2) \ |
((bit1) <= (bit2) ? ((x) & (bit1)) * ((bit2) / (bit1)) \ |
: ((x) & (bit1)) / ((bit1) / (bit2))) |
/* |
* Combine the mmap "prot" argument into "vm_flags" used internally. |
*/ |
static inline unsigned long |
calc_vm_prot_bits(unsigned long prot) |
{ |
return _calc_vm_trans(prot, PROT_READ, VM_READ ) | |
_calc_vm_trans(prot, PROT_WRITE, VM_WRITE) | |
_calc_vm_trans(prot, PROT_EXEC, VM_EXEC ); |
} |
/* |
* Combine the mmap "flags" argument into "vm_flags" used internally. |
*/ |
static inline unsigned long |
calc_vm_flag_bits(unsigned long flags) |
{ |
return _calc_vm_trans(flags, MAP_GROWSDOWN, VM_GROWSDOWN ) | |
_calc_vm_trans(flags, MAP_DENYWRITE, VM_DENYWRITE ) | |
_calc_vm_trans(flags, MAP_EXECUTABLE, VM_EXECUTABLE) | |
_calc_vm_trans(flags, MAP_LOCKED, VM_LOCKED ); |
} |
#endif /* _LINUX_MMAN_H */ |
/shark/trunk/drivers/linuxc26/include/linux/tty_flip.h |
---|
0,0 → 1,35 |
#ifndef _LINUX_TTY_FLIP_H |
#define _LINUX_TTY_FLIP_H |
#ifdef INCLUDE_INLINE_FUNCS |
#define _INLINE_ extern |
#else |
#define _INLINE_ static __inline__ |
#endif |
_INLINE_ void tty_insert_flip_char(struct tty_struct *tty, |
unsigned char ch, char flag) |
{ |
if (tty->flip.count < TTY_FLIPBUF_SIZE) { |
tty->flip.count++; |
*tty->flip.flag_buf_ptr++ = flag; |
*tty->flip.char_buf_ptr++ = ch; |
} |
} |
_INLINE_ void tty_schedule_flip(struct tty_struct *tty) |
{ |
schedule_delayed_work(&tty->flip.work, 1); |
} |
#undef _INLINE_ |
#endif /* _LINUX_TTY_FLIP_H */ |
/shark/trunk/drivers/linuxc26/include/linux/jhash.h |
---|
0,0 → 1,143 |
#ifndef _LINUX_JHASH_H |
#define _LINUX_JHASH_H |
/* jhash.h: Jenkins hash support. |
* |
* Copyright (C) 1996 Bob Jenkins (bob_jenkins@burtleburtle.net) |
* |
* http://burtleburtle.net/bob/hash/ |
* |
* These are the credits from Bob's sources: |
* |
* lookup2.c, by Bob Jenkins, December 1996, Public Domain. |
* hash(), hash2(), hash3, and mix() are externally useful functions. |
* Routines to test the hash are included if SELF_TEST is defined. |
* You can use this free for any purpose. It has no warranty. |
* |
* Copyright (C) 2003 David S. Miller (davem@redhat.com) |
* |
* I've modified Bob's hash to be useful in the Linux kernel, and |
* any bugs present are surely my fault. -DaveM |
*/ |
/* NOTE: Arguments are modified. */ |
#define __jhash_mix(a, b, c) \ |
{ \ |
a -= b; a -= c; a ^= (c>>13); \ |
b -= c; b -= a; b ^= (a<<8); \ |
c -= a; c -= b; c ^= (b>>13); \ |
a -= b; a -= c; a ^= (c>>12); \ |
b -= c; b -= a; b ^= (a<<16); \ |
c -= a; c -= b; c ^= (b>>5); \ |
a -= b; a -= c; a ^= (c>>3); \ |
b -= c; b -= a; b ^= (a<<10); \ |
c -= a; c -= b; c ^= (b>>15); \ |
} |
/* The golden ration: an arbitrary value */ |
#define JHASH_GOLDEN_RATIO 0x9e3779b9 |
/* The most generic version, hashes an arbitrary sequence |
* of bytes. No alignment or length assumptions are made about |
* the input key. |
*/ |
static inline u32 jhash(void *key, u32 length, u32 initval) |
{ |
u32 a, b, c, len; |
u8 *k = key; |
len = length; |
a = b = JHASH_GOLDEN_RATIO; |
c = initval; |
while (len >= 12) { |
a += (k[0] +((u32)k[1]<<8) +((u32)k[2]<<16) +((u32)k[3]<<24)); |
b += (k[4] +((u32)k[5]<<8) +((u32)k[6]<<16) +((u32)k[7]<<24)); |
c += (k[8] +((u32)k[9]<<8) +((u32)k[10]<<16)+((u32)k[11]<<24)); |
__jhash_mix(a,b,c); |
k += 12; |
len -= 12; |
} |
c += length; |
switch (len) { |
case 11: c += ((u32)k[10]<<24); |
case 10: c += ((u32)k[9]<<16); |
case 9 : c += ((u32)k[8]<<8); |
case 8 : b += ((u32)k[7]<<24); |
case 7 : b += ((u32)k[6]<<16); |
case 6 : b += ((u32)k[5]<<8); |
case 5 : b += k[4]; |
case 4 : a += ((u32)k[3]<<24); |
case 3 : a += ((u32)k[2]<<16); |
case 2 : a += ((u32)k[1]<<8); |
case 1 : a += k[0]; |
}; |
__jhash_mix(a,b,c); |
return c; |
} |
/* A special optimized version that handles 1 or more of u32s. |
* The length parameter here is the number of u32s in the key. |
*/ |
static inline u32 jhash2(u32 *k, u32 length, u32 initval) |
{ |
u32 a, b, c, len; |
a = b = JHASH_GOLDEN_RATIO; |
c = initval; |
len = length; |
while (len >= 3) { |
a += k[0]; |
b += k[1]; |
c += k[2]; |
__jhash_mix(a, b, c); |
k += 3; len -= 3; |
} |
c += length * 4; |
switch (len) { |
case 2 : b += k[1]; |
case 1 : a += k[0]; |
}; |
__jhash_mix(a,b,c); |
return c; |
} |
/* A special ultra-optimized versions that knows they are hashing exactly |
* 3, 2 or 1 word(s). |
* |
* NOTE: In partilar the "c += length; __jhash_mix(a,b,c);" normally |
* done at the end is not done here. |
*/ |
static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval) |
{ |
a += JHASH_GOLDEN_RATIO; |
b += JHASH_GOLDEN_RATIO; |
c += initval; |
__jhash_mix(a, b, c); |
return c; |
} |
static inline u32 jhash_2words(u32 a, u32 b, u32 initval) |
{ |
return jhash_3words(a, b, 0, initval); |
} |
static inline u32 jhash_1word(u32 a, u32 initval) |
{ |
return jhash_3words(a, 0, 0, initval); |
} |
#endif /* _LINUX_JHASH_H */ |
/shark/trunk/drivers/linuxc26/include/linux/efi.h |
---|
0,0 → 1,285 |
#ifndef _LINUX_EFI_H |
#define _LINUX_EFI_H |
/* |
* Extensible Firmware Interface |
* Based on 'Extensible Firmware Interface Specification' version 0.9, April 30, 1999 |
* |
* Copyright (C) 1999 VA Linux Systems |
* Copyright (C) 1999 Walt Drummond <drummond@valinux.com> |
* Copyright (C) 1999, 2002-2003 Hewlett-Packard Co. |
* David Mosberger-Tang <davidm@hpl.hp.com> |
* Stephane Eranian <eranian@hpl.hp.com> |
*/ |
#include <linux/init.h> |
#include <linux/string.h> |
#include <linux/time.h> |
#include <linux/types.h> |
#include <linux/proc_fs.h> |
#include <asm/page.h> |
#include <asm/system.h> |
#define EFI_SUCCESS 0 |
#define EFI_LOAD_ERROR ( 1 | (1UL << (BITS_PER_LONG-1))) |
#define EFI_INVALID_PARAMETER ( 2 | (1UL << (BITS_PER_LONG-1))) |
#define EFI_UNSUPPORTED ( 3 | (1UL << (BITS_PER_LONG-1))) |
#define EFI_BAD_BUFFER_SIZE ( 4 | (1UL << (BITS_PER_LONG-1))) |
#define EFI_BUFFER_TOO_SMALL ( 5 | (1UL << (BITS_PER_LONG-1))) |
#define EFI_NOT_FOUND (14 | (1UL << (BITS_PER_LONG-1))) |
typedef unsigned long efi_status_t; |
typedef u8 efi_bool_t; |
typedef u16 efi_char16_t; /* UNICODE character */ |
typedef struct { |
u8 b[16]; |
} efi_guid_t; |
#define EFI_GUID(a,b,c,d0,d1,d2,d3,d4,d5,d6,d7) \ |
((efi_guid_t) \ |
{{ (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) }}) |
/* |
* Generic EFI table header |
*/ |
typedef struct { |
u64 signature; |
u32 revision; |
u32 headersize; |
u32 crc32; |
u32 reserved; |
} efi_table_hdr_t; |
/* |
* Memory map descriptor: |
*/ |
/* Memory types: */ |
#define EFI_RESERVED_TYPE 0 |
#define EFI_LOADER_CODE 1 |
#define EFI_LOADER_DATA 2 |
#define EFI_BOOT_SERVICES_CODE 3 |
#define EFI_BOOT_SERVICES_DATA 4 |
#define EFI_RUNTIME_SERVICES_CODE 5 |
#define EFI_RUNTIME_SERVICES_DATA 6 |
#define EFI_CONVENTIONAL_MEMORY 7 |
#define EFI_UNUSABLE_MEMORY 8 |
#define EFI_ACPI_RECLAIM_MEMORY 9 |
#define EFI_ACPI_MEMORY_NVS 10 |
#define EFI_MEMORY_MAPPED_IO 11 |
#define EFI_MEMORY_MAPPED_IO_PORT_SPACE 12 |
#define EFI_PAL_CODE 13 |
#define EFI_MAX_MEMORY_TYPE 14 |
/* Attribute values: */ |
#define EFI_MEMORY_UC 0x0000000000000001 /* uncached */ |
#define EFI_MEMORY_WC 0x0000000000000002 /* write-coalescing */ |
#define EFI_MEMORY_WT 0x0000000000000004 /* write-through */ |
#define EFI_MEMORY_WB 0x0000000000000008 /* write-back */ |
#define EFI_MEMORY_WP 0x0000000000001000 /* write-protect */ |
#define EFI_MEMORY_RP 0x0000000000002000 /* read-protect */ |
#define EFI_MEMORY_XP 0x0000000000004000 /* execute-protect */ |
#define EFI_MEMORY_RUNTIME 0x8000000000000000 /* range requires runtime mapping */ |
#define EFI_MEMORY_DESCRIPTOR_VERSION 1 |
#define EFI_PAGE_SHIFT 12 |
typedef struct { |
u32 type; |
u32 pad; |
u64 phys_addr; |
u64 virt_addr; |
u64 num_pages; |
u64 attribute; |
} efi_memory_desc_t; |
typedef int efi_freemem_callback_t (unsigned long start, unsigned long end, void *arg); |
/* |
* Types and defines for Time Services |
*/ |
#define EFI_TIME_ADJUST_DAYLIGHT 0x1 |
#define EFI_TIME_IN_DAYLIGHT 0x2 |
#define EFI_UNSPECIFIED_TIMEZONE 0x07ff |
typedef struct { |
u16 year; |
u8 month; |
u8 day; |
u8 hour; |
u8 minute; |
u8 second; |
u8 pad1; |
u32 nanosecond; |
s16 timezone; |
u8 daylight; |
u8 pad2; |
} efi_time_t; |
typedef struct { |
u32 resolution; |
u32 accuracy; |
u8 sets_to_zero; |
} efi_time_cap_t; |
/* |
* Types and defines for EFI ResetSystem |
*/ |
#define EFI_RESET_COLD 0 |
#define EFI_RESET_WARM 1 |
/* |
* EFI Runtime Services table |
*/ |
#define EFI_RUNTIME_SERVICES_SIGNATURE 0x5652453544e5552 |
#define EFI_RUNTIME_SERVICES_REVISION 0x00010000 |
typedef struct { |
efi_table_hdr_t hdr; |
unsigned long get_time; |
unsigned long set_time; |
unsigned long get_wakeup_time; |
unsigned long set_wakeup_time; |
unsigned long set_virtual_address_map; |
unsigned long convert_pointer; |
unsigned long get_variable; |
unsigned long get_next_variable; |
unsigned long set_variable; |
unsigned long get_next_high_mono_count; |
unsigned long reset_system; |
} efi_runtime_services_t; |
typedef efi_status_t efi_get_time_t (efi_time_t *tm, efi_time_cap_t *tc); |
typedef efi_status_t efi_set_time_t (efi_time_t *tm); |
typedef efi_status_t efi_get_wakeup_time_t (efi_bool_t *enabled, efi_bool_t *pending, |
efi_time_t *tm); |
typedef efi_status_t efi_set_wakeup_time_t (efi_bool_t enabled, efi_time_t *tm); |
typedef efi_status_t efi_get_variable_t (efi_char16_t *name, efi_guid_t *vendor, u32 *attr, |
unsigned long *data_size, void *data); |
typedef efi_status_t efi_get_next_variable_t (unsigned long *name_size, efi_char16_t *name, |
efi_guid_t *vendor); |
typedef efi_status_t efi_set_variable_t (efi_char16_t *name, efi_guid_t *vendor, |
unsigned long attr, unsigned long data_size, |
void *data); |
typedef efi_status_t efi_get_next_high_mono_count_t (u32 *count); |
typedef void efi_reset_system_t (int reset_type, efi_status_t status, |
unsigned long data_size, efi_char16_t *data); |
/* |
* EFI Configuration Table and GUID definitions |
*/ |
#define NULL_GUID \ |
EFI_GUID( 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ) |
#define MPS_TABLE_GUID \ |
EFI_GUID( 0xeb9d2d2f, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d ) |
#define ACPI_TABLE_GUID \ |
EFI_GUID( 0xeb9d2d30, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d ) |
#define ACPI_20_TABLE_GUID \ |
EFI_GUID( 0x8868e871, 0xe4f1, 0x11d3, 0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 ) |
#define SMBIOS_TABLE_GUID \ |
EFI_GUID( 0xeb9d2d31, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d ) |
#define SAL_SYSTEM_TABLE_GUID \ |
EFI_GUID( 0xeb9d2d32, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d ) |
#define HCDP_TABLE_GUID \ |
EFI_GUID( 0xf951938d, 0x620b, 0x42ef, 0x82, 0x79, 0xa8, 0x4b, 0x79, 0x61, 0x78, 0x98 ) |
typedef struct { |
efi_guid_t guid; |
unsigned long table; |
} efi_config_table_t; |
#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249 |
#define EFI_SYSTEM_TABLE_REVISION ((1 << 16) | 00) |
typedef struct { |
efi_table_hdr_t hdr; |
unsigned long fw_vendor; /* physical addr of CHAR16 vendor string */ |
u32 fw_revision; |
unsigned long con_in_handle; |
unsigned long con_in; |
unsigned long con_out_handle; |
unsigned long con_out; |
unsigned long stderr_handle; |
unsigned long stderr; |
efi_runtime_services_t *runtime; |
unsigned long boottime; |
unsigned long nr_tables; |
unsigned long tables; |
} efi_system_table_t; |
/* |
* All runtime access to EFI goes through this structure: |
*/ |
extern struct efi { |
efi_system_table_t *systab; /* EFI system table */ |
void *mps; /* MPS table */ |
void *acpi; /* ACPI table (IA64 ext 0.71) */ |
void *acpi20; /* ACPI table (ACPI 2.0) */ |
void *smbios; /* SM BIOS table */ |
void *sal_systab; /* SAL system table */ |
void *boot_info; /* boot info table */ |
void *hcdp; /* HCDP table */ |
efi_get_time_t *get_time; |
efi_set_time_t *set_time; |
efi_get_wakeup_time_t *get_wakeup_time; |
efi_set_wakeup_time_t *set_wakeup_time; |
efi_get_variable_t *get_variable; |
efi_get_next_variable_t *get_next_variable; |
efi_set_variable_t *set_variable; |
efi_get_next_high_mono_count_t *get_next_high_mono_count; |
efi_reset_system_t *reset_system; |
} efi; |
static inline int |
efi_guidcmp (efi_guid_t left, efi_guid_t right) |
{ |
return memcmp(&left, &right, sizeof (efi_guid_t)); |
} |
static inline char * |
efi_guid_unparse(efi_guid_t *guid, char *out) |
{ |
sprintf(out, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", |
guid->b[3], guid->b[2], guid->b[1], guid->b[0], |
guid->b[5], guid->b[4], guid->b[7], guid->b[6], |
guid->b[8], guid->b[9], guid->b[10], guid->b[11], |
guid->b[12], guid->b[13], guid->b[14], guid->b[15]); |
return out; |
} |
extern void efi_init (void); |
extern void efi_map_pal_code (void); |
extern void efi_memmap_walk (efi_freemem_callback_t callback, void *arg); |
extern void efi_gettimeofday (struct timespec *ts); |
extern void efi_enter_virtual_mode (void); /* switch EFI to virtual mode, if possible */ |
extern u64 efi_get_iobase (void); |
extern u32 efi_mem_type (unsigned long phys_addr); |
extern u64 efi_mem_attributes (unsigned long phys_addr); |
/* |
* Variable Attributes |
*/ |
#define EFI_VARIABLE_NON_VOLATILE 0x0000000000000001 |
#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002 |
#define EFI_VARIABLE_RUNTIME_ACCESS 0x0000000000000004 |
/* |
* efi_dir is allocated in arch/ia64/kernel/efi.c. |
*/ |
#ifdef CONFIG_PROC_FS |
extern struct proc_dir_entry *efi_dir; |
#endif |
#endif /* _LINUX_EFI_H */ |
/shark/trunk/drivers/linuxc26/include/linux/mempool.h |
---|
0,0 → 1,37 |
/* |
* memory buffer pool support |
*/ |
#ifndef _LINUX_MEMPOOL_H |
#define _LINUX_MEMPOOL_H |
#include <linux/wait.h> |
typedef void * (mempool_alloc_t)(int gfp_mask, void *pool_data); |
typedef void (mempool_free_t)(void *element, void *pool_data); |
typedef struct mempool_s { |
spinlock_t lock; |
int min_nr; /* nr of elements at *elements */ |
int curr_nr; /* Current nr of elements at *elements */ |
void **elements; |
void *pool_data; |
mempool_alloc_t *alloc; |
mempool_free_t *free; |
wait_queue_head_t wait; |
} mempool_t; |
extern mempool_t * mempool_create(int min_nr, mempool_alloc_t *alloc_fn, |
mempool_free_t *free_fn, void *pool_data); |
extern int mempool_resize(mempool_t *pool, int new_min_nr, int gfp_mask); |
extern void mempool_destroy(mempool_t *pool); |
extern void * mempool_alloc(mempool_t *pool, int gfp_mask); |
extern void mempool_free(void *element, mempool_t *pool); |
/* |
* A mempool_alloc_t and mempool_free_t that get the memory from |
* a slab that is passed in through pool_data. |
*/ |
void *mempool_alloc_slab(int gfp_mask, void *pool_data); |
void mempool_free_slab(void *element, void *pool_data); |
#endif /* _LINUX_MEMPOOL_H */ |
/shark/trunk/drivers/linuxc26/include/linux/ip.h |
---|
0,0 → 1,209 |
/* |
* 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 _LINUX_IP_H |
#define _LINUX_IP_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_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 */ |
#ifdef __KERNEL__ |
#include <linux/config.h> |
#include <linux/types.h> |
#include <net/sock.h> |
#include <linux/igmp.h> |
#include <net/flow.h> |
struct ip_options { |
__u32 faddr; /* Saved first hop address */ |
unsigned char optlen; |
unsigned char srr; |
unsigned char rr; |
unsigned char ts; |
unsigned char is_setbyuser:1, /* Set by setsockopt? */ |
is_data:1, /* Options in __data, rather than skb */ |
is_strictroute:1, /* Strict source route */ |
srr_is_hit:1, /* Packet destination addr was our one */ |
is_changed:1, /* IP checksum more not valid */ |
rr_needaddr:1, /* Need to record addr of outgoing dev */ |
ts_needtime:1, /* Need to record timestamp */ |
ts_needaddr:1; /* Need to record addr of outgoing dev */ |
unsigned char router_alert; |
unsigned char __pad1; |
unsigned char __pad2; |
unsigned char __data[0]; |
}; |
#define optlength(opt) (sizeof(struct ip_options) + opt->optlen) |
struct inet_opt { |
/* Socket demultiplex comparisons on incoming packets. */ |
__u32 daddr; /* Foreign IPv4 addr */ |
__u32 rcv_saddr; /* Bound local IPv4 addr */ |
__u16 dport; /* Destination port */ |
__u16 num; /* Local port */ |
__u32 saddr; /* Sending source */ |
int uc_ttl; /* Unicast TTL */ |
int tos; /* TOS */ |
unsigned cmsg_flags; |
struct ip_options *opt; |
__u16 sport; /* Source port */ |
unsigned char hdrincl; /* Include headers ? */ |
__u8 mc_ttl; /* Multicasting TTL */ |
__u8 mc_loop; /* Loopback */ |
__u8 pmtudisc; |
__u16 id; /* ID counter for DF pkts */ |
unsigned recverr : 1, |
freebind : 1; |
int mc_index; /* Multicast device index */ |
__u32 mc_addr; |
struct ip_mc_socklist *mc_list; /* Group array */ |
struct page *sndmsg_page; /* Cached page for sendmsg */ |
u32 sndmsg_off; /* Cached offset for sendmsg */ |
/* |
* Following members are used to retain the infomation to build |
* an ip header on each ip fragmentation while the socket is corked. |
*/ |
struct { |
unsigned int flags; |
unsigned int fragsize; |
struct ip_options *opt; |
struct rtable *rt; |
int length; /* Total length of all frames */ |
u32 addr; |
struct flowi fl; |
} cork; |
}; |
#define IPCORK_OPT 1 /* ip-options has been held in ipcork.opt */ |
struct ipv6_pinfo; |
/* WARNING: don't change the layout of the members in inet_sock! */ |
struct inet_sock { |
struct sock sk; |
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) |
struct ipv6_pinfo *pinet6; |
#endif |
struct inet_opt inet; |
}; |
#define inet_sk(__sk) (&((struct inet_sock *)__sk)->inet) |
#endif |
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; |
__u16 tot_len; |
__u16 id; |
__u16 frag_off; |
__u8 ttl; |
__u8 protocol; |
__u16 check; |
__u32 saddr; |
__u32 daddr; |
/*The options start here. */ |
}; |
struct ip_auth_hdr { |
__u8 nexthdr; |
__u8 hdrlen; /* This one is measured in 32 bit units! */ |
__u16 reserved; |
__u32 spi; |
__u32 seq_no; /* Sequence number */ |
__u8 auth_data[0]; /* Variable len but >=4. Mind the 64 bit alignment! */ |
}; |
struct ip_esp_hdr { |
__u32 spi; |
__u32 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; |
__u16 cpi; |
}; |
#endif /* _LINUX_IP_H */ |
/shark/trunk/drivers/linuxc26/include/linux/umsdos_fs_i.h |
---|
0,0 → 1,58 |
#ifndef UMSDOS_FS_I_H |
#define UMSDOS_FS_I_H |
#ifndef _LINUX_TYPES_H |
#include <linux/types.h> |
#endif |
#include <linux/msdos_fs_i.h> |
#include <linux/pipe_fs_i.h> |
/* #Specification: strategy / in memory inode |
* Here is the information specific to the inode of the UMSDOS file |
* system. This information is added to the end of the standard struct |
* inode. Each file system has its own extension to struct inode, |
* so do the umsdos file system. |
* |
* The strategy is to have the umsdos_inode_info as a superset of |
* the msdos_inode_info, since most of the time the job is done |
* by the msdos fs code. |
* |
* So we duplicate the msdos_inode_info, and add our own info at the |
* end. |
* |
* The offset in this EMD file of the entry: pos |
* |
* For directory, we have dir_locking_info to help synchronise |
* file creation and file lookup. See also msdos_fs_i.h for more |
* information about msdos_inode_info. |
* |
* Special file and fifo do have an inode which correspond to an |
* empty MSDOS file. |
* |
* symlink are processed mostly like regular file. The content is the |
* link. |
* |
* The UMSDOS specific extension is placed after the union. |
*/ |
struct dir_locking_info { |
wait_queue_head_t p; |
short int looking; /* How many process doing a lookup */ |
short int creating; /* Is there any creation going on here |
* Only one at a time, although one |
* may recursively lock, so it is a counter |
*/ |
long pid; /* pid of the process owning the creation |
* lock */ |
}; |
struct umsdos_inode_info { |
struct msdos_inode_info msdos_info; |
struct dir_locking_info dir_info; |
int i_patched; /* Inode has been patched */ |
int i_is_hlink; /* Resolved hardlink inode? */ |
off_t pos; /* Entry offset in the emd_owner file */ |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/kernel_stat.h |
---|
0,0 → 1,53 |
#ifndef _LINUX_KERNEL_STAT_H |
#define _LINUX_KERNEL_STAT_H |
#include <linux/config.h> |
#include <asm/irq.h> |
#include <linux/smp.h> |
#include <linux/threads.h> |
#include <linux/percpu.h> |
/* |
* 'kernel_stat.h' contains the definitions needed for doing |
* some kernel statistics (CPU usage, context switches ...), |
* used by rstatd/perfmeter |
*/ |
struct cpu_usage_stat { |
unsigned int user; |
unsigned int nice; |
unsigned int system; |
unsigned int softirq; |
unsigned int irq; |
unsigned int idle; |
unsigned int iowait; |
}; |
struct kernel_stat { |
struct cpu_usage_stat cpustat; |
unsigned int irqs[NR_IRQS]; |
}; |
DECLARE_PER_CPU(struct kernel_stat, kstat); |
#define kstat_cpu(cpu) per_cpu(kstat, cpu) |
/* Must have preemption disabled for this to be meaningful. */ |
#define kstat_this_cpu __get_cpu_var(kstat) |
extern unsigned long nr_context_switches(void); |
/* |
* Number of interrupts per specific IRQ source, since bootup |
*/ |
static inline int kstat_irqs(int irq) |
{ |
int i, sum=0; |
for (i = 0; i < NR_CPUS; i++) |
if (cpu_possible(i)) |
sum += kstat_cpu(i).irqs[irq]; |
return sum; |
} |
#endif /* _LINUX_KERNEL_STAT_H */ |
/shark/trunk/drivers/linuxc26/include/linux/crc32.h |
---|
0,0 → 1,27 |
/* |
* crc32.h |
* See linux/lib/crc32.c for license and changes |
*/ |
#ifndef _LINUX_CRC32_H |
#define _LINUX_CRC32_H |
#include <linux/types.h> |
extern u32 crc32_le(u32 crc, unsigned char const *p, size_t len); |
extern u32 crc32_be(u32 crc, unsigned char const *p, size_t len); |
extern u32 bitreverse(u32 in); |
#define crc32(seed, data, length) crc32_le(seed, (unsigned char const *)data, length) |
/* |
* Helpers for hash table generation of ethernet nics: |
* |
* Ethernet sends the least significant bit of a byte first, thus crc32_le |
* is used. The output of crc32_le is bit reversed [most significant bit |
* is in bit nr 0], thus it must be reversed before use. Except for |
* nics that bit swap the result internally... |
*/ |
#define ether_crc(length, data) bitreverse(crc32_le(~0, data, length)) |
#define ether_crc_le(length, data) crc32_le(~0, data, length) |
#endif /* _LINUX_CRC32_H */ |
/shark/trunk/drivers/linuxc26/include/linux/capi.h |
---|
0,0 → 1,133 |
/* $Id: capi.h,v 1.1 2004-01-28 15:24:58 giacomo 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 <asm/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 *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__ */ |
/shark/trunk/drivers/linuxc26/include/linux/if_ppp.h |
---|
0,0 → 1,155 |
/* $Id: if_ppp.h,v 1.1 2004-01-28 15:25:35 giacomo Exp $ */ |
/* |
* if_ppp.h - Point-to-Point Protocol definitions. |
* |
* Copyright (c) 1989 Carnegie Mellon University. |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms are permitted |
* provided that the above copyright notice and this paragraph are |
* duplicated in all such forms and that any documentation, |
* advertising materials, and other materials related to such |
* distribution and use acknowledge that the software was developed |
* by Carnegie Mellon University. The name of the |
* University may not be used to endorse or promote products derived |
* from this software without specific prior written permission. |
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED |
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
* |
*/ |
/* |
* ==FILEVERSION 20000724== |
* |
* NOTE TO MAINTAINERS: |
* If you modify this file at all, please set the above date. |
* if_ppp.h is shipped with a PPP distribution as well as with the kernel; |
* if everyone increases the FILEVERSION number above, then scripts |
* can do the right thing when deciding whether to install a new if_ppp.h |
* file. Don't change the format of that line otherwise, so the |
* installation script can recognize it. |
*/ |
#ifndef _IF_PPP_H_ |
#define _IF_PPP_H_ |
/* |
* Packet sizes |
*/ |
#define PPP_MTU 1500 /* Default MTU (size of Info field) */ |
#define PPP_MAXMRU 65000 /* Largest MRU we allow */ |
#define PROTO_IPX 0x002b /* protocol numbers */ |
#define PROTO_DNA_RT 0x0027 /* DNA Routing */ |
/* |
* Bit definitions for flags. |
*/ |
#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_MASK 0x0f200fff /* 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 */ |
/* |
* Ioctl definitions. |
*/ |
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 *ptr; |
__u32 length; |
int transmit; |
}; |
struct ifpppstatsreq { |
struct ifreq b; |
struct ppp_stats stats; /* statistic information */ |
}; |
struct ifpppcstatsreq { |
struct ifreq b; |
struct ppp_comp_stats stats; |
}; |
#define ifr__name b.ifr_ifrn.ifrn_name |
#define stats_ptr b.ifr_ifru.ifru_data |
/* |
* 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 SIOCGPPPSTATS (SIOCDEVPRIVATE + 0) |
#define SIOCGPPPVER (SIOCDEVPRIVATE + 1) /* NEVER change this!! */ |
#define SIOCGPPPCSTATS (SIOCDEVPRIVATE + 2) |
#if !defined(ifr_mtu) |
#define ifr_mtu ifr_ifru.ifru_metric |
#endif |
#endif /* _IF_PPP_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/elfcore.h |
---|
0,0 → 1,129 |
#ifndef _LINUX_ELFCORE_H |
#define _LINUX_ELFCORE_H |
#include <linux/types.h> |
#include <linux/signal.h> |
#include <linux/time.h> |
#include <linux/user.h> |
struct elf_siginfo |
{ |
int si_signo; /* signal number */ |
int si_code; /* extra code */ |
int si_errno; /* errno */ |
}; |
#include <asm/elf.h> |
#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 */ |
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 |
#ifdef __KERNEL__ |
static inline void elf_core_copy_regs(elf_gregset_t *elfregs, struct pt_regs *regs) |
{ |
#ifdef ELF_CORE_COPY_REGS |
ELF_CORE_COPY_REGS((*elfregs), regs) |
#else |
BUG_ON(sizeof(*elfregs) != sizeof(*regs)); |
*(struct pt_regs *)elfregs = *regs; |
#endif |
} |
static inline int elf_core_copy_task_regs(struct task_struct *t, elf_gregset_t* elfregs) |
{ |
#ifdef ELF_CORE_COPY_TASK_REGS |
return ELF_CORE_COPY_TASK_REGS(t, elfregs); |
#endif |
return 0; |
} |
extern int dump_fpu (struct pt_regs *, elf_fpregset_t *); |
static inline int elf_core_copy_task_fpregs(struct task_struct *t, struct pt_regs *regs, elf_fpregset_t *fpu) |
{ |
#ifdef ELF_CORE_COPY_FPREGS |
return ELF_CORE_COPY_FPREGS(t, fpu); |
#else |
return dump_fpu(regs, fpu); |
#endif |
} |
#ifdef ELF_CORE_COPY_XFPREGS |
static inline int elf_core_copy_task_xfpregs(struct task_struct *t, elf_fpxregset_t *xfpu) |
{ |
return ELF_CORE_COPY_XFPREGS(t, xfpu); |
} |
#endif |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_ELFCORE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/un.h |
---|
0,0 → 1,11 |
#ifndef _LINUX_UN_H |
#define _LINUX_UN_H |
#define UNIX_PATH_MAX 108 |
struct sockaddr_un { |
sa_family_t sun_family; /* AF_UNIX */ |
char sun_path[UNIX_PATH_MAX]; /* pathname */ |
}; |
#endif /* _LINUX_UN_H */ |
/shark/trunk/drivers/linuxc26/include/linux/hash.h |
---|
0,0 → 1,58 |
#ifndef _LINUX_HASH_H |
#define _LINUX_HASH_H |
/* Fast hashing routine for a long. |
(C) 2002 William Lee Irwin III, IBM */ |
/* |
* Knuth recommends primes in approximately golden ratio to the maximum |
* integer representable by a machine word for multiplicative hashing. |
* Chuck Lever verified the effectiveness of this technique: |
* http://www.citi.umich.edu/techreports/reports/citi-tr-00-1.pdf |
* |
* These primes are chosen to be bit-sparse, that is operations on |
* them can use shifts and additions instead of multiplications for |
* machines where multiplications are slow. |
*/ |
#if BITS_PER_LONG == 32 |
/* 2^31 + 2^29 - 2^25 + 2^22 - 2^19 - 2^16 + 1 */ |
#define GOLDEN_RATIO_PRIME 0x9e370001UL |
#elif BITS_PER_LONG == 64 |
/* 2^63 + 2^61 - 2^57 + 2^54 - 2^51 - 2^18 + 1 */ |
#define GOLDEN_RATIO_PRIME 0x9e37fffffffc0001UL |
#else |
#error Define GOLDEN_RATIO_PRIME for your wordsize. |
#endif |
static inline unsigned long hash_long(unsigned long val, unsigned int bits) |
{ |
unsigned long hash = val; |
#if BITS_PER_LONG == 64 |
/* Sigh, gcc can't optimise this alone like it does for 32 bits. */ |
unsigned long n = hash; |
n <<= 18; |
hash -= n; |
n <<= 33; |
hash -= n; |
n <<= 3; |
hash += n; |
n <<= 3; |
hash -= n; |
n <<= 4; |
hash += n; |
n <<= 2; |
hash += n; |
#else |
/* On some cpus multiply is faster, on others gcc will do shifts */ |
hash *= GOLDEN_RATIO_PRIME; |
#endif |
/* High bits are more random, so use them. */ |
return hash >> (BITS_PER_LONG - bits); |
} |
static inline unsigned long hash_ptr(void *ptr, unsigned int bits) |
{ |
return hash_long((unsigned long)ptr, bits); |
} |
#endif /* _LINUX_HASH_H */ |
/shark/trunk/drivers/linuxc26/include/linux/sdla.h |
---|
0,0 → 1,339 |
/* |
* 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 SDLA_H |
#define SDLA_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 *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; |
}; |
#ifndef __KERNEL__ |
void sdla(void *cfg_info, char *dev, struct frad_conf *conf, int quiet); |
#else |
/* important Z80 window addresses */ |
#define SDLA_CONTROL_WND 0xE000 |
#define SDLA_502_CMD_BUF 0xEF60 |
#define SDLA_502_RCV_BUF 0xA900 |
#define SDLA_502_TXN_AVAIL 0xFFF1 |
#define SDLA_502_RCV_AVAIL 0xFFF2 |
#define SDLA_502_EVENT_FLAGS 0xFFF3 |
#define SDLA_502_MDM_STATUS 0xFFF4 |
#define SDLA_502_IRQ_INTERFACE 0xFFFD |
#define SDLA_502_IRQ_PERMISSION 0xFFFE |
#define SDLA_502_DATA_OFS 0x0010 |
#define SDLA_508_CMD_BUF 0xE000 |
#define SDLA_508_TXBUF_INFO 0xF100 |
#define SDLA_508_RXBUF_INFO 0xF120 |
#define SDLA_508_EVENT_FLAGS 0xF003 |
#define SDLA_508_MDM_STATUS 0xF004 |
#define SDLA_508_IRQ_INTERFACE 0xF010 |
#define SDLA_508_IRQ_PERMISSION 0xF011 |
#define SDLA_508_TSE_OFFSET 0xF012 |
/* Event flags */ |
#define SDLA_EVENT_STATUS 0x01 |
#define SDLA_EVENT_DLCI_STATUS 0x02 |
#define SDLA_EVENT_BAD_DLCI 0x04 |
#define SDLA_EVENT_LINK_DOWN 0x40 |
/* IRQ Trigger flags */ |
#define SDLA_INTR_RX 0x01 |
#define SDLA_INTR_TX 0x02 |
#define SDLA_INTR_MODEM 0x04 |
#define SDLA_INTR_COMPLETE 0x08 |
#define SDLA_INTR_STATUS 0x10 |
#define SDLA_INTR_TIMER 0x20 |
/* DLCI status bits */ |
#define SDLA_DLCI_DELETED 0x01 |
#define SDLA_DLCI_ACTIVE 0x02 |
#define SDLA_DLCI_WAITING 0x04 |
#define SDLA_DLCI_NEW 0x08 |
#define SDLA_DLCI_INCLUDED 0x40 |
/* valid command codes */ |
#define SDLA_INFORMATION_WRITE 0x01 |
#define SDLA_INFORMATION_READ 0x02 |
#define SDLA_ISSUE_IN_CHANNEL_SIGNAL 0x03 |
#define SDLA_SET_DLCI_CONFIGURATION 0x10 |
#define SDLA_READ_DLCI_CONFIGURATION 0x11 |
#define SDLA_DISABLE_COMMUNICATIONS 0x12 |
#define SDLA_ENABLE_COMMUNICATIONS 0x13 |
#define SDLA_READ_DLC_STATUS 0x14 |
#define SDLA_READ_DLC_STATISTICS 0x15 |
#define SDLA_FLUSH_DLC_STATISTICS 0x16 |
#define SDLA_LIST_ACTIVE_DLCI 0x17 |
#define SDLA_FLUSH_INFORMATION_BUFFERS 0x18 |
#define SDLA_ADD_DLCI 0x20 |
#define SDLA_DELETE_DLCI 0x21 |
#define SDLA_ACTIVATE_DLCI 0x22 |
#define SDLA_DEACTIVATE_DLCI 0x23 |
#define SDLA_READ_MODEM_STATUS 0x30 |
#define SDLA_SET_MODEM_STATUS 0x31 |
#define SDLA_READ_COMMS_ERR_STATS 0x32 |
#define SDLA_FLUSH_COMMS_ERR_STATS 0x33 |
#define SDLA_READ_CODE_VERSION 0x40 |
#define SDLA_SET_IRQ_TRIGGER 0x50 |
#define SDLA_GET_IRQ_TRIGGER 0x51 |
/* In channel signal types */ |
#define SDLA_ICS_LINK_VERIFY 0x02 |
#define SDLA_ICS_STATUS_ENQ 0x03 |
/* modem status flags */ |
#define SDLA_MODEM_DTR_HIGH 0x01 |
#define SDLA_MODEM_RTS_HIGH 0x02 |
#define SDLA_MODEM_DCD_HIGH 0x08 |
#define SDLA_MODEM_CTS_HIGH 0x20 |
/* used for RET_MODEM interpretation */ |
#define SDLA_MODEM_DCD_LOW 0x01 |
#define SDLA_MODEM_CTS_LOW 0x02 |
/* return codes */ |
#define SDLA_RET_OK 0x00 |
#define SDLA_RET_COMMUNICATIONS 0x01 |
#define SDLA_RET_CHANNEL_INACTIVE 0x02 |
#define SDLA_RET_DLCI_INACTIVE 0x03 |
#define SDLA_RET_DLCI_CONFIG 0x04 |
#define SDLA_RET_BUF_TOO_BIG 0x05 |
#define SDLA_RET_NO_DATA 0x05 |
#define SDLA_RET_BUF_OVERSIZE 0x06 |
#define SDLA_RET_CIR_OVERFLOW 0x07 |
#define SDLA_RET_NO_BUFS 0x08 |
#define SDLA_RET_TIMEOUT 0x0A |
#define SDLA_RET_MODEM 0x10 |
#define SDLA_RET_CHANNEL_OFF 0x11 |
#define SDLA_RET_CHANNEL_ON 0x12 |
#define SDLA_RET_DLCI_STATUS 0x13 |
#define SDLA_RET_DLCI_UNKNOWN 0x14 |
#define SDLA_RET_COMMAND_INVALID 0x1F |
/* Configuration flags */ |
#define SDLA_DIRECT_RECV 0x0080 |
#define SDLA_TX_NO_EXCEPT 0x0020 |
#define SDLA_NO_ICF_MSGS 0x1000 |
#define SDLA_TX50_RX50 0x0000 |
#define SDLA_TX70_RX30 0x2000 |
#define SDLA_TX30_RX70 0x4000 |
/* IRQ selection flags */ |
#define SDLA_IRQ_RECEIVE 0x01 |
#define SDLA_IRQ_TRANSMIT 0x02 |
#define SDLA_IRQ_MODEM_STAT 0x04 |
#define SDLA_IRQ_COMMAND 0x08 |
#define SDLA_IRQ_CHANNEL 0x10 |
#define SDLA_IRQ_TIMER 0x20 |
/* definitions for PC memory mapping */ |
#define SDLA_8K_WINDOW 0x01 |
#define SDLA_S502_SEG_A 0x10 |
#define SDLA_S502_SEG_C 0x20 |
#define SDLA_S502_SEG_D 0x00 |
#define SDLA_S502_SEG_E 0x30 |
#define SDLA_S507_SEG_A 0x00 |
#define SDLA_S507_SEG_B 0x40 |
#define SDLA_S507_SEG_C 0x80 |
#define SDLA_S507_SEG_E 0xC0 |
#define SDLA_S508_SEG_A 0x00 |
#define SDLA_S508_SEG_C 0x10 |
#define SDLA_S508_SEG_D 0x08 |
#define SDLA_S508_SEG_E 0x18 |
/* SDLA adapter port constants */ |
#define SDLA_IO_EXTENTS 0x04 |
#define SDLA_REG_CONTROL 0x00 |
#define SDLA_REG_PC_WINDOW 0x01 /* offset for PC window select latch */ |
#define SDLA_REG_Z80_WINDOW 0x02 /* offset for Z80 window select latch */ |
#define SDLA_REG_Z80_CONTROL 0x03 /* offset for Z80 control latch */ |
#define SDLA_S502_STS 0x00 /* status reg for 502, 502E, 507 */ |
#define SDLA_S508_GNRL 0x00 /* general purp. reg for 508 */ |
#define SDLA_S508_STS 0x01 /* status reg for 508 */ |
#define SDLA_S508_IDR 0x02 /* ID reg for 508 */ |
/* control register flags */ |
#define SDLA_S502A_START 0x00 /* start the CPU */ |
#define SDLA_S502A_INTREQ 0x02 |
#define SDLA_S502A_INTEN 0x04 |
#define SDLA_S502A_HALT 0x08 /* halt the CPU */ |
#define SDLA_S502A_NMI 0x10 /* issue an NMI to the CPU */ |
#define SDLA_S502E_CPUEN 0x01 |
#define SDLA_S502E_ENABLE 0x02 |
#define SDLA_S502E_INTACK 0x04 |
#define SDLA_S507_ENABLE 0x01 |
#define SDLA_S507_IRQ3 0x00 |
#define SDLA_S507_IRQ4 0x20 |
#define SDLA_S507_IRQ5 0x40 |
#define SDLA_S507_IRQ7 0x60 |
#define SDLA_S507_IRQ10 0x80 |
#define SDLA_S507_IRQ11 0xA0 |
#define SDLA_S507_IRQ12 0xC0 |
#define SDLA_S507_IRQ15 0xE0 |
#define SDLA_HALT 0x00 |
#define SDLA_CPUEN 0x02 |
#define SDLA_MEMEN 0x04 |
#define SDLA_S507_EPROMWR 0x08 |
#define SDLA_S507_EPROMCLK 0x10 |
#define SDLA_S508_INTRQ 0x08 |
#define SDLA_S508_INTEN 0x10 |
struct sdla_cmd { |
char opp_flag __attribute__((packed)); |
char cmd __attribute__((packed)); |
short length __attribute__((packed)); |
char retval __attribute__((packed)); |
short dlci __attribute__((packed)); |
char flags __attribute__((packed)); |
short rxlost_int __attribute__((packed)); |
long rxlost_app __attribute__((packed)); |
char reserve[2] __attribute__((packed)); |
char data[SDLA_MAX_DATA] __attribute__((packed)); /* transfer data buffer */ |
}; |
struct intr_info { |
char flags __attribute__((packed)); |
short txlen __attribute__((packed)); |
char irq __attribute__((packed)); |
char flags2 __attribute__((packed)); |
short timeout __attribute__((packed)); |
}; |
/* found in the 508's control window at RXBUF_INFO */ |
struct buf_info { |
unsigned short rse_num __attribute__((packed)); |
unsigned long rse_base __attribute__((packed)); |
unsigned long rse_next __attribute__((packed)); |
unsigned long buf_base __attribute__((packed)); |
unsigned short reserved __attribute__((packed)); |
unsigned long buf_top __attribute__((packed)); |
}; |
/* structure pointed to by rse_base in RXBUF_INFO struct */ |
struct buf_entry { |
char opp_flag __attribute__((packed)); |
short length __attribute__((packed)); |
short dlci __attribute__((packed)); |
char flags __attribute__((packed)); |
short timestamp __attribute__((packed)); |
short reserved[2] __attribute__((packed)); |
long buf_addr __attribute__((packed)); |
}; |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/if_pppox.h |
---|
0,0 → 1,166 |
/*************************************************************************** |
* 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 __LINUX_IF_PPPOX_H |
#define __LINUX_IF_PPPOX_H |
#include <asm/types.h> |
#include <asm/byteorder.h> |
#ifdef __KERNEL__ |
#include <linux/if_ether.h> |
#include <linux/if.h> |
#include <linux/netdevice.h> |
#include <asm/semaphore.h> |
#include <linux/ppp_channel.h> |
#endif /* __KERNEL__ */ |
/* 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 __u16 sid_t; |
struct pppoe_addr{ |
sid_t sid; /* Session identifier */ |
unsigned char remote[ETH_ALEN]; /* Remote address */ |
char dev[IFNAMSIZ]; /* Local device to use */ |
}; |
/************************************************************************ |
* Protocols supported by AF_PPPOX |
*/ |
#define PX_PROTO_OE 0 /* Currently just PPPoE */ |
#define PX_MAX_PROTO 1 |
struct sockaddr_pppox { |
sa_family_t sa_family; /* address family, AF_PPPOX */ |
unsigned int sa_protocol; /* protocol identifier */ |
union{ |
struct pppoe_addr pppoe; |
}sa_addr; |
}__attribute__ ((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 { |
__u16 tag_type; |
__u16 tag_len; |
char tag_data[0]; |
} __attribute ((packed)); |
/* Tag identifiers */ |
#define PTT_EOL __constant_htons(0x0000) |
#define PTT_SRV_NAME __constant_htons(0x0101) |
#define PTT_AC_NAME __constant_htons(0x0102) |
#define PTT_HOST_UNIQ __constant_htons(0x0103) |
#define PTT_AC_COOKIE __constant_htons(0x0104) |
#define PTT_VENDOR __constant_htons(0x0105) |
#define PTT_RELAY_SID __constant_htons(0x0110) |
#define PTT_SRV_ERR __constant_htons(0x0201) |
#define PTT_SYS_ERR __constant_htons(0x0202) |
#define PTT_GEN_ERR __constant_htons(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; |
__u16 sid; |
__u16 length; |
struct pppoe_tag tag[0]; |
} __attribute__ ((packed)); |
#ifdef __KERNEL__ |
struct pppoe_opt { |
struct net_device *dev; /* device associated with socket*/ |
struct pppoe_addr pa; /* what this socket is bound to*/ |
struct sockaddr_pppox relay; /* what socket data will be |
relayed to (PPPoE relaying) */ |
}; |
struct pppox_opt { |
struct ppp_channel chan; |
struct sock *sk; |
struct pppox_opt *next; /* for hash table */ |
union { |
struct pppoe_opt pppoe; |
} proto; |
unsigned short num; |
}; |
#define pppoe_dev proto.pppoe.dev |
#define pppoe_pa proto.pppoe.pa |
#define pppoe_relay proto.pppoe.relay |
#define pppox_sk(__sk) ((struct pppox_opt *)(__sk)->sk_protinfo) |
struct module; |
struct pppox_proto { |
int (*create)(struct socket *sock); |
int (*ioctl)(struct socket *sock, unsigned int cmd, |
unsigned long arg); |
struct module *owner; |
}; |
extern int register_pppox_proto(int proto_num, struct pppox_proto *pp); |
extern void unregister_pppox_proto(int proto_num); |
extern void pppox_unbind_sock(struct sock *sk);/* delete ppp-channel binding */ |
extern int pppox_channel_ioctl(struct ppp_channel *pc, unsigned int cmd, |
unsigned long arg); |
/* PPPoX socket states */ |
enum { |
PPPOX_NONE = 0, /* initial state */ |
PPPOX_CONNECTED = 1, /* connection established ==TCP_ESTABLISHED */ |
PPPOX_BOUND = 2, /* bound to ppp device */ |
PPPOX_RELAY = 4, /* forwarding is enabled */ |
PPPOX_ZOMBIE = 8, /* dead, but still bound to ppp device */ |
PPPOX_DEAD = 16 /* dead, useless, please clean me up!*/ |
}; |
extern struct ppp_channel_ops pppoe_chan_ops; |
#endif /* __KERNEL__ */ |
#endif /* !(__LINUX_IF_PPPOX_H) */ |
/shark/trunk/drivers/linuxc26/include/linux/msdos_fs_i.h |
---|
0,0 → 1,25 |
#ifndef _MSDOS_FS_I |
#define _MSDOS_FS_I |
#include <linux/fs.h> |
/* |
* MS-DOS file system inode data in memory |
*/ |
struct msdos_inode_info { |
/* cache of lastest accessed cluster */ |
int file_cluster; /* cluster number in the file. */ |
int disk_cluster; /* cluster number on disk. */ |
loff_t mmu_private; |
int i_start; /* first cluster or 0 */ |
int i_logstart; /* logical first cluster */ |
int i_attrs; /* unused attribute bits */ |
int i_ctime_ms; /* unused change time in milliseconds */ |
loff_t i_pos; /* on-disk position of directory entry or 0 */ |
struct list_head i_fat_hash; /* hash by i_location */ |
struct inode vfs_inode; |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/wanrouter.h |
---|
0,0 → 1,541 |
/***************************************************************************** |
* 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). |
*****************************************************************************/ |
#include <linux/spinlock.h> /* Support for SMP Locking */ |
#ifndef _ROUTER_H |
#define _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 Commmented 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; |
#ifdef __KERNEL__ |
/****** Kernel Interface ****************************************************/ |
#include <linux/fs.h> /* support for device drivers */ |
#include <linux/proc_fs.h> /* proc filesystem pragmatics */ |
#include <linux/netdevice.h> /* support for network drivers */ |
/*---------------------------------------------------------------------------- |
* WAN device data space. |
*/ |
struct wan_device { |
unsigned magic; /* magic number */ |
char* name; /* -> WAN device name (ASCIIZ) */ |
void* private; /* -> driver private data */ |
unsigned config_id; /* Configuration ID */ |
/****** hardware configuration ******/ |
unsigned ioport; /* adapter I/O port base #1 */ |
char S514_cpu_no[1]; /* PCI CPU Number */ |
unsigned char S514_slot_no; /* PCI Slot Number */ |
unsigned long maddr; /* dual-port memory address */ |
unsigned msize; /* dual-port memory size */ |
int irq; /* interrupt request level */ |
int dma; /* DMA request level */ |
unsigned bps; /* data transfer rate */ |
unsigned mtu; /* max physical transmit unit size */ |
unsigned udp_port; /* UDP port for management */ |
unsigned char ttl; /* Time To Live for UDP security */ |
unsigned enable_tx_int; /* Transmit Interrupt enabled or not */ |
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 signalling; /* Signalling RS232 or V35 */ |
char read_mode; /* read mode: Polling or interrupt */ |
char new_if_cnt; /* Number of interfaces per wanpipe */ |
char del_if_cnt; /* Number of times del_if() gets called */ |
unsigned char piggyback; /* Piggibacking a port */ |
unsigned hw_opt[4]; /* other hardware options */ |
/****** status and statistics *******/ |
char state; /* device state */ |
char api_status; /* device api status */ |
struct net_device_stats stats; /* interface statistics */ |
unsigned reserved[16]; /* reserved for future use */ |
unsigned long critical; /* critical section flag */ |
spinlock_t lock; /* Support for SMP Locking */ |
/****** device management methods ***/ |
int (*setup) (struct wan_device *wandev, wandev_conf_t *conf); |
int (*shutdown) (struct wan_device *wandev); |
int (*update) (struct wan_device *wandev); |
int (*ioctl) (struct wan_device *wandev, unsigned cmd, |
unsigned long arg); |
int (*new_if)(struct wan_device *wandev, struct net_device *dev, |
wanif_conf_t *conf); |
int (*del_if)(struct wan_device *wandev, struct net_device *dev); |
/****** maintained by the router ****/ |
struct wan_device* next; /* -> next device */ |
struct net_device* dev; /* list of network interfaces */ |
unsigned ndev; /* number of interfaces */ |
struct proc_dir_entry *dent; /* proc filesystem entry */ |
}; |
/* Public functions available for device drivers */ |
extern int register_wan_device(struct wan_device *wandev); |
extern int unregister_wan_device(char *name); |
unsigned short wanrouter_type_trans(struct sk_buff *skb, |
struct net_device *dev); |
int wanrouter_encapsulate(struct sk_buff *skb, struct net_device *dev, |
unsigned short type); |
/* Proc interface functions. These must not be called by the drivers! */ |
extern int wanrouter_proc_init(void); |
extern void wanrouter_proc_cleanup(void); |
extern int wanrouter_proc_add(struct wan_device *wandev); |
extern int wanrouter_proc_delete(struct wan_device *wandev); |
extern int wanrouter_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg); |
extern void lock_adapter_irq(spinlock_t *lock, unsigned long *smp_flags); |
extern void unlock_adapter_irq(spinlock_t *lock, unsigned long *smp_flags); |
/* Public Data */ |
/* list of registered devices */ |
extern struct wan_device *wanrouter_router_devlist; |
#endif /* __KERNEL__ */ |
#endif /* _ROUTER_H */ |
/shark/trunk/drivers/linuxc26/include/linux/bcd.h |
---|
0,0 → 1,20 |
/* Permission is hereby granted to copy, modify and redistribute this code |
* in terms of the GNU Library General Public License, Version 2 or later, |
* at your option. |
*/ |
/* macros to translate to/from binary and binary-coded decimal (frequently |
* found in RTC chips). |
*/ |
#ifndef _BCD_H |
#define _BCD_H |
#define BCD2BIN(val) (((val) & 0x0f) + ((val)>>4)*10) |
#define BIN2BCD(val) ((((val)/10)<<4) + (val)%10) |
/* backwards compat */ |
#define BCD_TO_BIN(val) ((val)=BCD2BIN(val)) |
#define BIN_TO_BCD(val) ((val)=BIN2BCD(val)) |
#endif /* _BCD_H */ |
/shark/trunk/drivers/linuxc26/include/linux/initrd.h |
---|
0,0 → 1,20 |
#define INITRD_MINOR 250 /* shouldn't collide with /dev/ram* too soon ... */ |
/* 1 = load ramdisk, 0 = don't load */ |
extern int rd_doload; |
/* 1 = prompt for ramdisk, 0 = don't prompt */ |
extern int rd_prompt; |
/* starting block # of image */ |
extern int rd_image_start; |
/* 1 if it is not an error if initrd_start < memory_start */ |
extern int initrd_below_start_ok; |
/* free_initrd_mem always gets called with the next two as arguments.. */ |
extern unsigned long initrd_start, initrd_end; |
extern void free_initrd_mem(unsigned long, unsigned long); |
extern unsigned int real_root_dev; |
/shark/trunk/drivers/linuxc26/include/linux/if_wanpipe_common.h |
---|
0,0 → 1,60 |
/***************************************************************************** |
* if_wanipe_common.h Sangoma Driver/Socket common area definitions. |
* |
* Author: Nenad Corbic <ncorbic@sangoma.com> |
* |
* Copyright: (c) 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. |
* ============================================================================ |
* Jan 13, 2000 Nenad Corbic Initial version |
*****************************************************************************/ |
#ifndef _WANPIPE_SOCK_DRIVER_COMMON_H |
#define _WANPIPE_SOCK_DRIVER_COMMON_H |
#include <linux/version.h> |
typedef struct { |
struct net_device *slave; |
atomic_t packet_sent; |
atomic_t receive_block; |
atomic_t command; |
atomic_t disconnect; |
atomic_t driver_busy; |
long common_critical; |
struct timer_list *tx_timer; |
struct sock *sk; /* Wanpipe Sock bind's here */ |
int (*func)(struct sk_buff *skb, struct net_device *dev, |
struct sock *sk); |
struct work_struct wanpipe_work; /* deferred keventd work */ |
unsigned char rw_bind; /* Sock bind state */ |
unsigned char usedby; |
unsigned char state; |
unsigned char svc; |
unsigned short lcn; |
void *mbox; |
} wanpipe_common_t; |
enum { |
WANSOCK_UNCONFIGURED, /* link/channel is not configured */ |
WANSOCK_DISCONNECTED, /* link/channel is disconnected */ |
WANSOCK_CONNECTING, /* connection is in progress */ |
WANSOCK_CONNECTED, /* link/channel is operational */ |
WANSOCK_LIMIT, /* for verification only */ |
WANSOCK_DUALPORT, /* for Dual Port cards */ |
WANSOCK_DISCONNECTING, |
WANSOCK_BINDED, |
WANSOCK_BIND_LISTEN, |
WANSOCK_LISTEN |
}; |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/synclink.h |
---|
0,0 → 1,273 |
/* |
* SyncLink Multiprotocol Serial Adapter Driver |
* |
* $Id: synclink.h,v 1.1 2004-01-28 15:26:45 giacomo Exp $ |
* |
* Copyright (C) 1998-2000 by Microgate Corporation |
* |
* Redistribution of this file is permitted under |
* the terms of the GNU Public License (GPL) |
*/ |
#ifndef _SYNCLINK_H_ |
#define _SYNCLINK_H_ |
#define SYNCLINK_H_VERSION 3.6 |
#define BOOLEAN int |
#define TRUE 1 |
#define FALSE 0 |
#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_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_RAW 6 |
#define MGSL_BUS_TYPE_ISA 1 |
#define MGSL_BUS_TYPE_EISA 2 |
#define MGSL_BUS_TYPE_PCI 5 |
#define MGSL_INTERFACE_DISABLE 0 |
#define MGSL_INTERFACE_RS232 1 |
#define MGSL_INTERFACE_V35 2 |
#define MGSL_INTERFACE_RS422 3 |
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 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; |
}; |
#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) |
#endif /* _SYNCLINK_H_ */ |
/shark/trunk/drivers/linuxc26/include/linux/in6.h |
---|
0,0 → 1,187 |
/* |
* 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 _LINUX_IN6_H |
#define _LINUX_IN6_H |
#include <linux/types.h> |
/* |
* IPv6 address structure |
*/ |
struct in6_addr |
{ |
union |
{ |
__u8 u6_addr8[16]; |
__u16 u6_addr16[8]; |
__u32 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 |
*/ |
extern const struct in6_addr in6addr_any; |
#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } |
extern const struct in6_addr in6addr_loopback; |
#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } |
struct sockaddr_in6 { |
unsigned short int sin6_family; /* AF_INET6 */ |
__u16 sin6_port; /* Transport layer port # */ |
__u32 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; |
__u32 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 defintions 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 */ |
/* |
* IPv6 TLV options. |
*/ |
#define IPV6_TLV_PAD0 0 |
#define IPV6_TLV_PADN 1 |
#define IPV6_TLV_ROUTERALERT 5 |
#define IPV6_TLV_JUMBO 194 |
/* |
* IPV6 socket options |
*/ |
#define IPV6_ADDRFORM 1 |
#define IPV6_PKTINFO 2 |
#define IPV6_HOPOPTS 3 |
#define IPV6_DSTOPTS 4 |
#define IPV6_RTHDR 5 |
#define IPV6_PKTOPTIONS 6 |
#define IPV6_CHECKSUM 7 |
#define IPV6_HOPLIMIT 8 |
#define IPV6_NEXTHOP 9 |
#define IPV6_AUTHHDR 10 |
#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 |
/* Flowlabel */ |
#define IPV6_FLOWLABEL_MGR 32 |
#define IPV6_FLOWINFO_SEND 33 |
#define IPV6_IPSEC_POLICY 34 |
#define IPV6_XFRM_POLICY 35 |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/errqueue.h |
---|
0,0 → 1,43 |
#ifndef _LINUX_ERRQUEUE_H |
#define _LINUX_ERRQUEUE_H 1 |
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_OFFENDER(ee) ((struct sockaddr*)((ee)+1)) |
#ifdef __KERNEL__ |
#include <linux/config.h> |
#define SKB_EXT_ERR(skb) ((struct sock_exterr_skb *) ((skb)->cb)) |
struct sock_exterr_skb |
{ |
union { |
struct inet_skb_parm h4; |
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) |
struct inet6_skb_parm h6; |
#endif |
} header; |
struct sock_extended_err ee; |
u16 addr_offset; |
u16 port; |
}; |
#endif |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/route.h |
---|
0,0 → 1,70 |
/* |
* 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> |
/* 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 *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 */ |
/shark/trunk/drivers/linuxc26/include/linux/percpu.h |
---|
0,0 → 1,85 |
#ifndef __LINUX_PERCPU_H |
#define __LINUX_PERCPU_H |
#include <linux/spinlock.h> /* For preempt_disable() */ |
#include <linux/slab.h> /* For kmalloc() */ |
#include <linux/smp.h> |
#include <linux/string.h> /* For memset() */ |
#include <asm/percpu.h> |
/* Enough to cover all DEFINE_PER_CPUs in kernel, including modules. */ |
#ifndef PERCPU_ENOUGH_ROOM |
#define PERCPU_ENOUGH_ROOM 32768 |
#endif |
/* Must be an lvalue. */ |
#define get_cpu_var(var) (*({ preempt_disable(); &__get_cpu_var(var); })) |
#define put_cpu_var(var) preempt_enable() |
#ifdef CONFIG_SMP |
struct percpu_data { |
void *ptrs[NR_CPUS]; |
void *blkp; |
}; |
/* |
* Use this to get to a cpu's version of the per-cpu object allocated using |
* alloc_percpu. If you want to get "this cpu's version", maybe you want |
* to use get_cpu_ptr... |
*/ |
#define per_cpu_ptr(ptr, cpu) \ |
({ \ |
struct percpu_data *__p = (struct percpu_data *)~(unsigned long)(ptr); \ |
(__typeof__(ptr))__p->ptrs[(cpu)]; \ |
}) |
extern void *__alloc_percpu(size_t size, size_t align); |
extern void free_percpu(const void *); |
extern void kmalloc_percpu_init(void); |
#else /* CONFIG_SMP */ |
#define per_cpu_ptr(ptr, cpu) (ptr) |
static inline void *__alloc_percpu(size_t size, size_t align) |
{ |
void *ret = kmalloc(size, GFP_KERNEL); |
if (ret) |
memset(ret, 0, size); |
return ret; |
} |
static inline void free_percpu(const void *ptr) |
{ |
kfree(ptr); |
} |
static inline void kmalloc_percpu_init(void) { } |
#endif /* CONFIG_SMP */ |
/* Simple wrapper for the common case: zeros memory. */ |
#define alloc_percpu(type) \ |
((type *)(__alloc_percpu(sizeof(type), __alignof__(type)))) |
/* |
* Use these with alloc_percpu. If |
* 1. You want to operate on memory allocated by alloc_percpu (dereference |
* and read/modify/write) AND |
* 2. You want "this cpu's version" of the object AND |
* 3. You want to do this safely since: |
* a. On multiprocessors, you don't want to switch between cpus after |
* you've read the current processor id due to preemption -- this would |
* take away the implicit advantage to not have any kind of traditional |
* serialization for per-cpu data |
* b. On uniprocessors, you don't want another kernel thread messing |
* up with the same per-cpu data due to preemption |
* |
* So, Use get_cpu_ptr to disable preemption and get pointer to the |
* local cpu version of the per-cpu object. Use put_cpu_ptr to enable |
* preemption. Operations on per-cpu data between get_ and put_ is |
* then considered to be safe. And ofcourse, "Thou shalt not sleep between |
* get_cpu_ptr and put_cpu_ptr" |
*/ |
#define get_cpu_ptr(ptr) per_cpu_ptr(ptr, get_cpu()) |
#define put_cpu_ptr(ptr) put_cpu() |
#endif /* __LINUX_PERCPU_H */ |
/shark/trunk/drivers/linuxc26/include/linux/blkpg.h |
---|
0,0 → 1,57 |
#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/ioctl.h> |
#define BLKPG _IO(0x12,105) |
/* The argument structure */ |
struct blkpg_ioctl_arg { |
int op; |
int flags; |
int datalen; |
void *data; |
}; |
/* The subfunctions (for the op field) */ |
#define BLKPG_ADD_PARTITION 1 |
#define BLKPG_DEL_PARTITION 2 |
/* 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 */ |
/shark/trunk/drivers/linuxc26/include/linux/watchdog.h |
---|
0,0 → 1,49 |
/* |
* Generic watchdog defines. Derived from.. |
* |
* Berkshire PC Watchdog Defines |
* by Ken Hollis <khollis@bitgate.com> |
* |
*/ |
#ifndef _LINUX_WATCHDOG_H |
#define _LINUX_WATCHDOG_H |
#include <linux/ioctl.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 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_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 /* ifndef _LINUX_WATCHDOG_H */ |
/shark/trunk/drivers/linuxc26/include/linux/ticable.h |
---|
0,0 → 1,42 |
/* Hey EMACS -*- linux-c -*- |
* |
* tipar/tiser/tiusb - low level driver for handling link cables |
* designed for Texas Instruments graphing calculators. |
* |
* Copyright (C) 2000-2002, Romain Lievin <roms@lpg.ticalc.org> |
* |
* Redistribution of this file is permitted under the terms of the GNU |
* Public License (GPL) |
*/ |
#ifndef _TICABLE_H |
#define _TICABLE_H 1 |
/* Internal default constants for the kernel module */ |
#define TIMAXTIME 15 /* 1.5 seconds */ |
#define IO_DELAY 10 /* 10 micro-seconds */ |
/* Major & minor number for character devices */ |
#define TIPAR_MAJOR 115 /* 0 to 7 */ |
#define TIPAR_MINOR 0 |
#define TISER_MAJOR 115 /* 8 to 15 */ |
#define TISER_MINOR 8 |
#define TIUSB_MAJOR 115 /* 16 to 31 */ |
#define TIUSB_MINOR 16 |
/* |
* Request values for the 'ioctl' function. |
*/ |
#define IOCTL_TIPAR_DELAY _IOW('p', 0xa8, int) /* set delay */ |
#define IOCTL_TIPAR_TIMEOUT _IOW('p', 0xa9, int) /* set timeout */ |
#define IOCTL_TISER_DELAY _IOW('p', 0xa0, int) /* set delay */ |
#define IOCTL_TISER_TIMEOUT _IOW('p', 0xa1, int) /* set timeout */ |
#define IOCTL_TIUSB_TIMEOUT _IOW('N', 0x20, int) /* set timeout */ |
#define IOCTL_TIUSB_RESET_DEVICE _IOW('N', 0x21, int) /* reset device */ |
#define IOCTL_TIUSB_RESET_PIPES _IOW('N', 0x22, int) /* reset both pipes*/ |
#endif /* TICABLE_H */ |
/shark/trunk/drivers/linuxc26/include/linux/netlink.h |
---|
0,0 → 1,176 |
#ifndef __LINUX_NETLINK_H |
#define __LINUX_NETLINK_H |
#include <linux/socket.h> /* for sa_family_t */ |
#include <linux/types.h> |
#define NETLINK_ROUTE 0 /* Routing/device hook */ |
#define NETLINK_SKIP 1 /* Reserved for ENskip */ |
#define NETLINK_USERSOCK 2 /* Reserved for user mode socket protocols */ |
#define NETLINK_FIREWALL 3 /* Firewalling hook */ |
#define NETLINK_TCPDIAG 4 /* TCP socket monitoring */ |
#define NETLINK_NFLOG 5 /* netfilter/iptables ULOG */ |
#define NETLINK_XFRM 6 /* ipsec */ |
#define NETLINK_ARPD 8 |
#define NETLINK_ROUTE6 11 /* af_inet6 route comm channel */ |
#define NETLINK_IP6_FW 13 |
#define NETLINK_DNRTMSG 14 /* DECnet routing messages */ |
#define NETLINK_TAPBASE 16 /* 16 to 31 are ethertap */ |
#define MAX_LINKS 32 |
struct sockaddr_nl |
{ |
sa_family_t nl_family; /* AF_NETLINK */ |
unsigned short nl_pad; /* zero */ |
__u32 nl_pid; /* process pid */ |
__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 PID */ |
}; |
/* 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 */ |
/* 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 4 |
#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) ) |
#define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(sizeof(struct nlmsghdr))) |
#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) > 0 && (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 */ |
struct nlmsgerr |
{ |
int error; |
struct nlmsghdr msg; |
}; |
#define NET_MAJOR 36 /* Major 36 is reserved for networking */ |
#ifdef __KERNEL__ |
#include <linux/capability.h> |
struct netlink_skb_parms |
{ |
struct ucred creds; /* Skb credentials */ |
__u32 pid; |
__u32 groups; |
__u32 dst_pid; |
__u32 dst_groups; |
kernel_cap_t eff_cap; |
}; |
#define NETLINK_CB(skb) (*(struct netlink_skb_parms*)&((skb)->cb)) |
#define NETLINK_CREDS(skb) (&NETLINK_CB((skb)).creds) |
extern int netlink_attach(int unit, int (*function)(int,struct sk_buff *skb)); |
extern void netlink_detach(int unit); |
extern int netlink_post(int unit, struct sk_buff *skb); |
extern struct sock *netlink_kernel_create(int unit, void (*input)(struct sock *sk, int len)); |
extern void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err); |
extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock); |
extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 pid, |
__u32 group, int allocation); |
extern void netlink_set_err(struct sock *ssk, __u32 pid, __u32 group, int code); |
extern int netlink_register_notifier(struct notifier_block *nb); |
extern int netlink_unregister_notifier(struct notifier_block *nb); |
/* |
* skb should fit one page. This choice is good for headerless malloc. |
* |
* FIXME: What is the best size for SLAB???? --ANK |
*/ |
#define NLMSG_GOODSIZE (PAGE_SIZE - ((sizeof(struct sk_buff)+0xF)&~0xF)) |
struct netlink_callback |
{ |
struct sk_buff *skb; |
struct nlmsghdr *nlh; |
int (*dump)(struct sk_buff * skb, struct netlink_callback *cb); |
int (*done)(struct netlink_callback *cb); |
int family; |
long args[4]; |
}; |
struct netlink_notify |
{ |
int pid; |
int protocol; |
}; |
static __inline__ struct nlmsghdr * |
__nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int len) |
{ |
struct nlmsghdr *nlh; |
int size = NLMSG_LENGTH(len); |
nlh = (struct nlmsghdr*)skb_put(skb, NLMSG_ALIGN(size)); |
nlh->nlmsg_type = type; |
nlh->nlmsg_len = size; |
nlh->nlmsg_flags = 0; |
nlh->nlmsg_pid = pid; |
nlh->nlmsg_seq = seq; |
return nlh; |
} |
#define NLMSG_PUT(skb, pid, seq, type, len) \ |
({ if (skb_tailroom(skb) < (int)NLMSG_SPACE(len)) goto nlmsg_failure; \ |
__nlmsg_put(skb, pid, seq, type, len); }) |
extern int netlink_dump_start(struct sock *ssk, struct sk_buff *skb, |
struct nlmsghdr *nlh, |
int (*dump)(struct sk_buff *skb, struct netlink_callback*), |
int (*done)(struct netlink_callback*)); |
#define NL_NONROOT_RECV 0x1 |
#define NL_NONROOT_SEND 0x2 |
extern void netlink_set_nonroot(int protocol, unsigned flag); |
#endif /* __KERNEL__ */ |
#endif /* __LINUX_NETLINK_H */ |
/shark/trunk/drivers/linuxc26/include/linux/hfs_fs.h |
---|
0,0 → 1,348 |
/* |
* linux/include/linux/hfs_fs.h |
* |
* Copyright (C) 1995-1997 Paul H. Hargrove |
* This file may be distributed under the terms of the GNU General Public License. |
* |
* The source code distribution of the Columbia AppleTalk Package for |
* UNIX, version 6.0, (CAP) was used as a specification of the |
* location and format of files used by CAP's Aufs. No code from CAP |
* appears in hfs_fs. hfs_fs is not a work ``derived'' from CAP in |
* the sense of intellectual property law. |
* |
* The source code distributions of Netatalk, versions 1.3.3b2 and |
* 1.4b2, were used as a specification of the location and format of |
* files used by Netatalk's afpd. No code from Netatalk appears in |
* hfs_fs. hfs_fs is not a work ``derived'' from Netatalk in the |
* sense of intellectual property law. |
*/ |
#ifndef _LINUX_HFS_FS_H |
#define _LINUX_HFS_FS_H |
#include <linux/hfs_sysdep.h> |
/* magic numbers for Apple Double header files */ |
#define HFS_DBL_MAGIC 0x00051607 |
#define HFS_SNGL_MAGIC 0x00051600 |
#define HFS_HDR_VERSION_1 0x00010000 |
#define HFS_HDR_VERSION_2 0x00020000 |
/* magic numbers for various internal structures */ |
#define HFS_INO_MAGIC 0x4821 |
#define HFS_SB_MAGIC 0x4822 |
/* The space used for the AppleDouble or AppleSingle headers */ |
#define HFS_DBL_HDR_LEN 1024 |
/* The space used for the Netatalk header */ |
#define HFS_NAT_HDR_LEN 1024 /* 589 for an exact match */ |
/* Macros to extract CNID and file "type" from the Linux inode number */ |
#define HFS_CNID(X) ((X) & 0x3FFFFFFF) |
#define HFS_ITYPE(X) ((X) & 0xC0000000) |
/* Macros to enumerate types */ |
#define HFS_ITYPE_TO_INT(X) ((X) >> 30) |
#define HFS_INT_TO_ITYPE(X) ((X) << 30) |
/* generic ITYPEs */ |
#define HFS_ITYPE_0 0x00000000 |
#define HFS_ITYPE_1 0x40000000 |
#define HFS_ITYPE_2 0x80000000 |
#define HFS_ITYPE_3 0xC0000000 |
#define HFS_ITYPE_NORM HFS_ITYPE_0 /* "normal" directory or file */ |
/* ITYPEs for CAP */ |
#define HFS_CAP_NORM HFS_ITYPE_0 /* data fork or normal directory */ |
#define HFS_CAP_DATA HFS_ITYPE_0 /* data fork of file */ |
#define HFS_CAP_NDIR HFS_ITYPE_0 /* normal directory */ |
#define HFS_CAP_FNDR HFS_ITYPE_1 /* finder info for file or dir */ |
#define HFS_CAP_RSRC HFS_ITYPE_2 /* resource fork of file */ |
#define HFS_CAP_RDIR HFS_ITYPE_2 /* .resource directory */ |
#define HFS_CAP_FDIR HFS_ITYPE_3 /* .finderinfo directory */ |
/* ITYPEs for Apple Double */ |
#define HFS_DBL_NORM HFS_ITYPE_0 /* data fork or directory */ |
#define HFS_DBL_DATA HFS_ITYPE_0 /* data fork of file */ |
#define HFS_DBL_DIR HFS_ITYPE_0 /* directory */ |
#define HFS_DBL_HDR HFS_ITYPE_1 /* AD header of file or dir */ |
/* ITYPEs for netatalk */ |
#define HFS_NAT_NORM HFS_ITYPE_0 /* data fork or directory */ |
#define HFS_NAT_DATA HFS_ITYPE_0 /* data fork of file */ |
#define HFS_NAT_NDIR HFS_ITYPE_0 /* normal directory */ |
#define HFS_NAT_HDR HFS_ITYPE_1 /* AD header of file or dir */ |
#define HFS_NAT_HDIR HFS_ITYPE_2 /* directory holding AD headers */ |
/* ITYPEs for Apple Single */ |
#define HFS_SGL_NORM HFS_ITYPE_0 /* AppleSingle file or directory */ |
#define HFS_SGL_SNGL HFS_ITYPE_0 /* AppleSingle file */ |
#define HFS_SGL_DIR HFS_ITYPE_0 /* directory */ |
#define HFS_SGL_DINF HFS_ITYPE_1 /* %DirInfo for directory */ |
/* IDs for elements of an AppleDouble or AppleSingle header */ |
#define HFS_HDR_DATA 1 /* data fork */ |
#define HFS_HDR_RSRC 2 /* resource fork */ |
#define HFS_HDR_FNAME 3 /* full (31-character) name */ |
#define HFS_HDR_COMNT 4 /* comment */ |
#define HFS_HDR_BWICN 5 /* b/w icon */ |
#define HFS_HDR_CICON 6 /* color icon info */ |
#define HFS_HDR_OLDI 7 /* old file info */ |
#define HFS_HDR_DATES 8 /* file dates info */ |
#define HFS_HDR_FINFO 9 /* Finder info */ |
#define HFS_HDR_MACI 10 /* Macintosh info */ |
#define HFS_HDR_PRODOSI 11 /* ProDOS info */ |
#define HFS_HDR_MSDOSI 12 /* MSDOS info */ |
#define HFS_HDR_SNAME 13 /* short name */ |
#define HFS_HDR_AFPI 14 /* AFP file info */ |
#define HFS_HDR_DID 15 /* directory id */ |
#define HFS_HDR_MAX 16 |
/* |
* There are three time systems. All three are based on seconds since |
* a particular time/date. |
* Unix: unsigned lil-endian since 00:00 GMT, Jan. 1, 1970 |
* mac: unsigned big-endian since 00:00 GMT, Jan. 1, 1904 |
* header: SIGNED big-endian since 00:00 GMT, Jan. 1, 2000 |
* |
*/ |
#define hfs_h_to_mtime(ARG) htonl((hfs_s32)ntohl(ARG)+3029529600U) |
#define hfs_m_to_htime(ARG) ((hfs_s32)htonl(ntohl(ARG)-3029529600U)) |
#define hfs_h_to_utime(ARG) ((hfs_s32)hfs_to_utc(ntohl(ARG)+946684800U)) |
#define hfs_u_to_htime(ARG) ((hfs_s32)htonl(hfs_from_utc(ARG)-946684800U)) |
#define hfs_u_to_mtime(ARG) htonl(hfs_from_utc(ARG)+2082844800U) |
#define hfs_m_to_utime(ARG) (hfs_to_utc(ntohl(ARG)-2082844800U)) |
/*======== Data structures kept in memory ========*/ |
/* |
* A descriptor for a single entry within the header of an |
* AppleDouble or AppleSingle header file. |
* An array of these make up a table of contents for the file. |
*/ |
struct hfs_hdr_descr { |
hfs_u32 id; /* The Apple assigned ID for the entry type */ |
hfs_u32 offset; /* The offset to reach the entry */ |
hfs_u32 length; /* The length of the entry */ |
}; |
/* |
* The info needed to reconstruct a given header layout |
*/ |
struct hfs_hdr_layout { |
hfs_u32 magic; /* AppleSingle or AppleDouble */ |
hfs_u32 version; /* 0x00010000 or 0x00020000 */ |
hfs_u16 entries; /* How many entries used */ |
struct hfs_hdr_descr |
descr[HFS_HDR_MAX]; /* Descriptors */ |
struct hfs_hdr_descr |
*order[HFS_HDR_MAX]; /* 'descr' ordered by offset */ |
}; |
/* header layout for netatalk's v1 appledouble file format */ |
struct hfs_nat_hdr { |
hfs_lword_t magic; |
hfs_lword_t version; |
hfs_byte_t homefs[16]; |
hfs_word_t entries; |
hfs_byte_t descrs[12*5]; |
hfs_byte_t real_name[255]; /* id=3 */ |
hfs_byte_t comment[200]; /* id=4 XXX: not yet implemented */ |
hfs_byte_t old_info[16]; /* id=7 */ |
hfs_u8 finderinfo[32]; /* id=9 */ |
}; |
/* |
* Default header layout for Netatalk and AppleDouble |
*/ |
struct hfs_dbl_hdr { |
hfs_lword_t magic; |
hfs_lword_t version; |
hfs_byte_t filler[16]; |
hfs_word_t entries; |
hfs_byte_t descrs[12*HFS_HDR_MAX]; |
hfs_byte_t real_name[255]; /* id=3 */ |
hfs_byte_t comment[200]; /* id=4 XXX: not yet implemented */ |
hfs_u32 create_time; /* \ */ |
hfs_u32 modify_time; /* | id=8 (or 7) */ |
hfs_u32 backup_time; /* | */ |
hfs_u32 access_time; /* / (attributes with id=7) */ |
hfs_u8 finderinfo[32]; /* id=9 */ |
hfs_u32 fileinfo; /* id=10 */ |
hfs_u32 cnid; /* id=15 */ |
hfs_u8 short_name[12]; /* id=13 */ |
hfs_u8 prodosi[8]; /* id=11 */ |
}; |
/* finder metadata for CAP */ |
struct hfs_cap_info { |
hfs_byte_t fi_fndr[32]; /* Finder's info */ |
hfs_word_t fi_attr; /* AFP attributes (f=file/d=dir) */ |
#define HFS_AFP_INV 0x001 /* Invisible bit (f/d) */ |
#define HFS_AFP_EXPFOLDER 0x002 /* exported folder (d) */ |
#define HFS_AFP_MULTI 0x002 /* Multiuser bit (f) */ |
#define HFS_AFP_SYS 0x004 /* System bit (f/d) */ |
#define HFS_AFP_DOPEN 0x008 /* data fork already open (f) */ |
#define HFS_AFP_MOUNTED 0x008 /* mounted folder (d) */ |
#define HFS_AFP_ROPEN 0x010 /* resource fork already open (f) */ |
#define HFS_AFP_INEXPFOLDER 0x010 /* folder in shared area (d) */ |
#define HFS_AFP_WRI 0x020 /* Write inhibit bit (readonly) (f) */ |
#define HFS_AFP_BACKUP 0x040 /* backup needed bit (f/d) */ |
#define HFS_AFP_RNI 0x080 /* Rename inhibit bit (f/d) */ |
#define HFS_AFP_DEI 0x100 /* Delete inhibit bit (f/d) */ |
#define HFS_AFP_NOCOPY 0x400 /* Copy protect bit (f) */ |
#define HFS_AFP_RDONLY ( HFS_AFP_WRI|HFS_AFP_RNI|HFS_AFP_DEI) |
hfs_byte_t fi_magic1; /* Magic number: */ |
#define HFS_CAP_MAGIC1 0xFF |
hfs_byte_t fi_version; /* Version of this structure: */ |
#define HFS_CAP_VERSION 0x10 |
hfs_byte_t fi_magic; /* Another magic number: */ |
#define HFS_CAP_MAGIC 0xDA |
hfs_byte_t fi_bitmap; /* Bitmap of which names are valid: */ |
#define HFS_CAP_SHORTNAME 0x01 |
#define HFS_CAP_LONGNAME 0x02 |
hfs_byte_t fi_shortfilename[12+1]; /* "short name" (unused) */ |
hfs_byte_t fi_macfilename[32+1]; /* Original (Macintosh) name */ |
hfs_byte_t fi_comln; /* Length of comment (always 0) */ |
hfs_byte_t fi_comnt[200]; /* Finder comment (unused) */ |
/* optional: used by aufs only if compiled with USE_MAC_DATES */ |
hfs_byte_t fi_datemagic; /* Magic number for dates extension: */ |
#define HFS_CAP_DMAGIC 0xDA |
hfs_byte_t fi_datevalid; /* Bitmap of which dates are valid: */ |
#define HFS_CAP_MDATE 0x01 |
#define HFS_CAP_CDATE 0x02 |
hfs_lword_t fi_ctime; /* Creation date (in AFP format) */ |
hfs_lword_t fi_mtime; /* Modify date (in AFP format) */ |
hfs_lword_t fi_utime; /* Un*x time of last mtime change */ |
hfs_byte_t pad; |
}; |
#ifdef __KERNEL__ |
typedef ssize_t hfs_rwret_t; |
typedef size_t hfs_rwarg_t; |
#include <asm/uaccess.h> |
/* Some forward declarations */ |
struct hfs_fork; |
struct hfs_cat_key; |
struct hfs_cat_entry; |
extern struct hfs_cat_entry *hfs_cat_get(struct hfs_mdb *, |
const struct hfs_cat_key *); |
/* dir.c */ |
extern int hfs_create(struct inode *, struct dentry *, int, struct nameidata *); |
extern int hfs_mkdir(struct inode *, struct dentry *, int); |
extern int hfs_unlink(struct inode *, struct dentry *); |
extern int hfs_rmdir(struct inode *, struct dentry *); |
extern int hfs_rename(struct inode *, struct dentry *, |
struct inode *, struct dentry *); |
/* dir_cap.c */ |
extern const struct hfs_name hfs_cap_reserved1[]; |
extern const struct hfs_name hfs_cap_reserved2[]; |
extern struct inode_operations hfs_cap_ndir_inode_operations; |
extern struct inode_operations hfs_cap_fdir_inode_operations; |
extern struct inode_operations hfs_cap_rdir_inode_operations; |
extern struct file_operations hfs_cap_dir_operations; |
extern void hfs_cap_drop_dentry(struct dentry *, const ino_t); |
/* dir_dbl.c */ |
extern const struct hfs_name hfs_dbl_reserved1[]; |
extern const struct hfs_name hfs_dbl_reserved2[]; |
extern struct inode_operations hfs_dbl_dir_inode_operations; |
extern struct file_operations hfs_dbl_dir_operations; |
extern void hfs_dbl_drop_dentry(struct dentry *, const ino_t); |
/* dir_nat.c */ |
extern const struct hfs_name hfs_nat_reserved1[]; |
extern const struct hfs_name hfs_nat_reserved2[]; |
extern struct inode_operations hfs_nat_ndir_inode_operations; |
extern struct inode_operations hfs_nat_hdir_inode_operations; |
extern struct file_operations hfs_nat_dir_operations; |
extern void hfs_nat_drop_dentry(struct dentry *, const ino_t); |
/* file.c */ |
extern hfs_s32 hfs_do_read(struct inode *, struct hfs_fork *, hfs_u32, |
char __user *, hfs_u32); |
extern hfs_s32 hfs_do_write(struct inode *, struct hfs_fork *, hfs_u32, |
const char __user *, hfs_u32); |
extern void hfs_file_fix_mode(struct hfs_cat_entry *entry); |
extern struct inode_operations hfs_file_inode_operations; |
extern struct file_operations hfs_file_operations; |
/* file_cap.c */ |
extern struct inode_operations hfs_cap_info_inode_operations; |
extern struct file_operations hfs_cap_info_operations; |
/* file_hdr.c */ |
extern struct inode_operations hfs_hdr_inode_operations; |
extern struct file_operations hfs_hdr_operations; |
extern const struct hfs_hdr_layout hfs_dbl_fil_hdr_layout; |
extern const struct hfs_hdr_layout hfs_dbl_dir_hdr_layout; |
extern const struct hfs_hdr_layout hfs_nat_hdr_layout; |
extern const struct hfs_hdr_layout hfs_nat2_hdr_layout; |
extern const struct hfs_hdr_layout hfs_sngl_hdr_layout; |
extern void hdr_truncate(struct inode *,size_t); |
/* inode.c */ |
extern void hfs_put_inode(struct inode *); |
extern int hfs_notify_change(struct dentry *, struct iattr *); |
extern int hfs_notify_change_cap(struct dentry *, struct iattr *); |
extern int hfs_notify_change_hdr(struct dentry *, struct iattr *); |
extern struct inode *hfs_iget(struct hfs_cat_entry *, ino_t, struct dentry *); |
extern void hfs_cap_ifill(struct inode *, ino_t, const int); |
extern void hfs_dbl_ifill(struct inode *, ino_t, const int); |
extern void hfs_nat_ifill(struct inode *, ino_t, const int); |
extern void hfs_sngl_ifill(struct inode *, ino_t, const int); |
/* super.c */ |
extern int hfs_fill_super(struct super_block *,void *,int); |
/* trans.c */ |
extern void hfs_colon2mac(struct hfs_name *, const char *, int); |
extern void hfs_prcnt2mac(struct hfs_name *, const char *, int); |
extern void hfs_triv2mac(struct hfs_name *, const char *, int); |
extern void hfs_latin2mac(struct hfs_name *, const char *, int); |
extern int hfs_mac2cap(char *, const struct hfs_name *); |
extern int hfs_mac2nat(char *, const struct hfs_name *); |
extern int hfs_mac2latin(char *, const struct hfs_name *); |
extern int hfs_mac2seven(char *, const struct hfs_name *); |
extern int hfs_mac2eight(char *, const struct hfs_name *); |
extern int hfs_mac2alpha(char *, const struct hfs_name *); |
extern int hfs_mac2triv(char *, const struct hfs_name *); |
extern void hfs_tolower(unsigned char *, int); |
#include <linux/hfs_fs_i.h> |
#include <linux/hfs_fs_sb.h> |
static inline struct hfs_inode_info *HFS_I(struct inode *inode) |
{ |
return container_of(inode, struct hfs_inode_info, vfs_inode); |
} |
static inline struct hfs_sb_info *HFS_SB(struct super_block *sb) |
{ |
return sb->s_fs_info; |
} |
static inline void hfs_nameout(struct inode *dir, struct hfs_name *out, |
const char *in, int len) { |
HFS_SB(dir->i_sb)->s_nameout(out, in, len); |
} |
static inline int hfs_namein(struct inode *dir, char *out, |
const struct hfs_name *in) { |
int len = HFS_SB(dir->i_sb)->s_namein(out, in); |
if (HFS_SB(dir->i_sb)->s_lowercase) { |
hfs_tolower(out, len); |
} |
return len; |
} |
#endif /* __KERNEL__ */ |
#endif |
/shark/trunk/drivers/linuxc26/include/linux/zorro_ids.h |
---|
0,0 → 1,552 |
/* |
* Zorro board IDs |
* |
* Please keep sorted. |
*/ |
#define ZORRO_MANUF_PACIFIC_PERIPHERALS 0x00D3 |
#define ZORRO_PROD_PACIFIC_PERIPHERALS_SE_2000_A500 ZORRO_ID(PACIFIC_PERIPHERALS, 0x00, 0) |
#define ZORRO_PROD_PACIFIC_PERIPHERALS_SCSI ZORRO_ID(PACIFIC_PERIPHERALS, 0x0A, 0) |
#define ZORRO_MANUF_MACROSYSTEMS_USA_2 0x0100 |
#define ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE ZORRO_ID(MACROSYSTEMS_USA_2, 0x13, 0) |
#define ZORRO_MANUF_KUPKE_1 0x00DD |
#define ZORRO_PROD_KUPKE_GOLEM_RAM_BOX_2MB ZORRO_ID(KUPKE_1, 0x00, 0) |
#define ZORRO_MANUF_MEMPHIS 0x0100 |
#define ZORRO_PROD_MEMPHIS_STORMBRINGER ZORRO_ID(MEMPHIS, 0x00, 0) |
#define ZORRO_MANUF_3_STATE 0x0200 |
#define ZORRO_PROD_3_STATE_MEGAMIX_2000 ZORRO_ID(3_STATE, 0x02, 0) |
#define ZORRO_MANUF_COMMODORE_BRAUNSCHWEIG 0x0201 |
#define ZORRO_PROD_CBM_A2088_A2286 ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x01, 0) |
#define ZORRO_PROD_CBM_A2286 ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x02, 0) |
#define ZORRO_PROD_CBM_A4091_1 ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x54, 0) |
#define ZORRO_PROD_CBM_A2386SX_1 ZORRO_ID(COMMODORE_BRAUNSCHWEIG, 0x67, 0) |
#define ZORRO_MANUF_COMMODORE_WEST_CHESTER_1 0x0202 |
#define ZORRO_PROD_CBM_A2090A ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x01, 0) |
#define ZORRO_PROD_CBM_A590_A2091_1 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x02, 0) |
#define ZORRO_PROD_CBM_A590_A2091_2 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x03, 0) |
#define ZORRO_PROD_CBM_A2090B ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x04, 0) |
#define ZORRO_PROD_CBM_A2060 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x09, 0) |
#define ZORRO_PROD_CBM_A590_A2052_A2058_A2091 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x0A, 0) |
#define ZORRO_PROD_CBM_A560_RAM ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x20, 0) |
#define ZORRO_PROD_CBM_A2232_PROTOTYPE ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x45, 0) |
#define ZORRO_PROD_CBM_A2232 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x46, 0) |
#define ZORRO_PROD_CBM_A2620 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x50, 0) |
#define ZORRO_PROD_CBM_A2630 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x51, 0) |
#define ZORRO_PROD_CBM_A4091_2 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x54, 0) |
#define ZORRO_PROD_CBM_A2065_1 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x5A, 0) |
#define ZORRO_PROD_CBM_ROMULATOR ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x60, 0) |
#define ZORRO_PROD_CBM_A3000_TEST_FIXTURE ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x61, 0) |
#define ZORRO_PROD_CBM_A2386SX_2 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x67, 0) |
#define ZORRO_PROD_CBM_A2065_2 ZORRO_ID(COMMODORE_WEST_CHESTER_1, 0x70, 0) |
#define ZORRO_MANUF_COMMODORE_WEST_CHESTER_2 0x0203 |
#define ZORRO_PROD_CBM_A2090A_CM ZORRO_ID(COMMODORE_WEST_CHESTER_2, 0x03, 0) |
#define ZORRO_MANUF_PROGRESSIVE_PERIPHERALS_AND_SYSTEMS_2 0x02F4 |
#define ZORRO_PROD_PPS_EXP8000 ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS_2, 0x02, 0) |
#define ZORRO_MANUF_KOLFF_COMPUTER_SUPPLIES 0x02FF |
#define ZORRO_PROD_KCS_POWER_PC_BOARD ZORRO_ID(KOLFF_COMPUTER_SUPPLIES, 0x00, 0) |
#define ZORRO_MANUF_CARDCO_1 0x03EC |
#define ZORRO_PROD_CARDCO_KRONOS_2000_1 ZORRO_ID(CARDCO_1, 0x04, 0) |
#define ZORRO_PROD_CARDCO_A1000_1 ZORRO_ID(CARDCO_1, 0x0C, 0) |
#define ZORRO_PROD_CARDCO_ESCORT ZORRO_ID(CARDCO_1, 0x0E, 0) |
#define ZORRO_PROD_CARDCO_A2410 ZORRO_ID(CARDCO_1, 0xF5, 0) |
#define ZORRO_MANUF_A_SQUARED 0x03ED |
#define ZORRO_PROD_A_SQUARED_LIVE_2000 ZORRO_ID(A_SQUARED, 0x01, 0) |
#define ZORRO_MANUF_COMSPEC_COMMUNICATIONS 0x03EE |
#define ZORRO_PROD_COMSPEC_COMMUNICATIONS_AX2000 ZORRO_ID(COMSPEC_COMMUNICATIONS, 0x01, 0) |
#define ZORRO_MANUF_ANAKIN_RESEARCH 0x03F1 |
#define ZORRO_PROD_ANAKIN_RESEARCH_EASYL ZORRO_ID(ANAKIN_RESEARCH, 0x01, 0) |
#define ZORRO_MANUF_MICROBOTICS 0x03F2 |
#define ZORRO_PROD_MICROBOTICS_STARBOARD_II ZORRO_ID(MICROBOTICS, 0x00, 0) |
#define ZORRO_PROD_MICROBOTICS_STARDRIVE ZORRO_ID(MICROBOTICS, 0x02, 0) |
#define ZORRO_PROD_MICROBOTICS_8_UP_A ZORRO_ID(MICROBOTICS, 0x03, 0) |
#define ZORRO_PROD_MICROBOTICS_8_UP_Z ZORRO_ID(MICROBOTICS, 0x04, 0) |
#define ZORRO_PROD_MICROBOTICS_DELTA_RAM ZORRO_ID(MICROBOTICS, 0x20, 0) |
#define ZORRO_PROD_MICROBOTICS_8_STAR_RAM ZORRO_ID(MICROBOTICS, 0x40, 0) |
#define ZORRO_PROD_MICROBOTICS_8_STAR ZORRO_ID(MICROBOTICS, 0x41, 0) |
#define ZORRO_PROD_MICROBOTICS_VXL_RAM_32 ZORRO_ID(MICROBOTICS, 0x44, 0) |
#define ZORRO_PROD_MICROBOTICS_VXL_68030 ZORRO_ID(MICROBOTICS, 0x45, 0) |
#define ZORRO_PROD_MICROBOTICS_DELTA ZORRO_ID(MICROBOTICS, 0x60, 0) |
#define ZORRO_PROD_MICROBOTICS_MBX_1200_1200Z_RAM ZORRO_ID(MICROBOTICS, 0x81, 0) |
#define ZORRO_PROD_MICROBOTICS_HARDFRAME_2000_1 ZORRO_ID(MICROBOTICS, 0x96, 0) |
#define ZORRO_PROD_MICROBOTICS_HARDFRAME_2000_2 ZORRO_ID(MICROBOTICS, 0x9E, 0) |
#define ZORRO_PROD_MICROBOTICS_MBX_1200_1200Z ZORRO_ID(MICROBOTICS, 0xC1, 0) |
#define ZORRO_MANUF_ACCESS_ASSOCIATES_ALEGRA 0x03F4 |
#define ZORRO_MANUF_EXPANSION_TECHNOLOGIES 0x03F6 |
#define ZORRO_MANUF_ASDG 0x03FF |
#define ZORRO_PROD_ASDG_MEMORY_1 ZORRO_ID(ASDG, 0x01, 0) |
#define ZORRO_PROD_ASDG_MEMORY_2 ZORRO_ID(ASDG, 0x02, 0) |
#define ZORRO_PROD_ASDG_EB920_LAN_ROVER ZORRO_ID(ASDG, 0xFE, 0) |
#define ZORRO_PROD_ASDG_GPIB_DUALIEEE488_TWIN_X ZORRO_ID(ASDG, 0xFF, 0) |
#define ZORRO_MANUF_IMTRONICS_1 0x0404 |
#define ZORRO_PROD_IMTRONICS_HURRICANE_2800_1 ZORRO_ID(IMTRONICS_1, 0x39, 0) |
#define ZORRO_PROD_IMTRONICS_HURRICANE_2800_2 ZORRO_ID(IMTRONICS_1, 0x57, 0) |
#define ZORRO_MANUF_CBM_UNIVERSITY_OF_LOWELL 0x0406 |
#define ZORRO_PROD_CBM_A2410 ZORRO_ID(CBM_UNIVERSITY_OF_LOWELL, 0x00, 0) |
#define ZORRO_MANUF_AMERISTAR 0x041D |
#define ZORRO_PROD_AMERISTAR_A2065 ZORRO_ID(AMERISTAR, 0x01, 0) |
#define ZORRO_PROD_AMERISTAR_A560 ZORRO_ID(AMERISTAR, 0x09, 0) |
#define ZORRO_PROD_AMERISTAR_A4066 ZORRO_ID(AMERISTAR, 0x0A, 0) |
#define ZORRO_MANUF_SUPRA 0x0420 |
#define ZORRO_PROD_SUPRA_SUPRADRIVE_4x4 ZORRO_ID(SUPRA, 0x01, 0) |
#define ZORRO_PROD_SUPRA_1000_RAM ZORRO_ID(SUPRA, 0x02, 0) |
#define ZORRO_PROD_SUPRA_2000_DMA ZORRO_ID(SUPRA, 0x03, 0) |
#define ZORRO_PROD_SUPRA_500 ZORRO_ID(SUPRA, 0x05, 0) |
#define ZORRO_PROD_SUPRA_500_SCSI ZORRO_ID(SUPRA, 0x08, 0) |
#define ZORRO_PROD_SUPRA_500XP_2000_RAM ZORRO_ID(SUPRA, 0x09, 0) |
#define ZORRO_PROD_SUPRA_500RX_2000_RAM ZORRO_ID(SUPRA, 0x0A, 0) |
#define ZORRO_PROD_SUPRA_2400ZI ZORRO_ID(SUPRA, 0x0B, 0) |
#define ZORRO_PROD_SUPRA_500XP_SUPRADRIVE_WORDSYNC ZORRO_ID(SUPRA, 0x0C, 0) |
#define ZORRO_PROD_SUPRA_SUPRADRIVE_WORDSYNC_II ZORRO_ID(SUPRA, 0x0D, 0) |
#define ZORRO_PROD_SUPRA_2400ZIPLUS ZORRO_ID(SUPRA, 0x10, 0) |
#define ZORRO_MANUF_COMPUTER_SYSTEMS_ASSOCIATES 0x0422 |
#define ZORRO_PROD_CSA_MAGNUM ZORRO_ID(COMPUTER_SYSTEMS_ASSOCIATES, 0x11, 0) |
#define ZORRO_PROD_CSA_12_GAUGE ZORRO_ID(COMPUTER_SYSTEMS_ASSOCIATES, 0x15, 0) |
#define ZORRO_MANUF_MARC_MICHAEL_GROTH 0x0439 |
#define ZORRO_MANUF_M_TECH 0x0502 |
#define ZORRO_PROD_MTEC_AT500_1 ZORRO_ID(M_TECH, 0x03, 0) |
#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_1 0x06E1 |
#define ZORRO_PROD_GVP_IMPACT_SERIES_I ZORRO_ID(GREAT_VALLEY_PRODUCTS_1, 0x08, 0) |
#define ZORRO_MANUF_BYTEBOX 0x07DA |
#define ZORRO_PROD_BYTEBOX_A500 ZORRO_ID(BYTEBOX, 0x00, 0) |
#define ZORRO_MANUF_DKB_POWER_COMPUTING 0x07DC |
#define ZORRO_PROD_DKB_POWER_COMPUTING_SECUREKEY ZORRO_ID(DKB_POWER_COMPUTING, 0x09, 0) |
#define ZORRO_PROD_DKB_POWER_COMPUTING_DKM_3128 ZORRO_ID(DKB_POWER_COMPUTING, 0x0E, 0) |
#define ZORRO_PROD_DKB_POWER_COMPUTING_RAPID_FIRE ZORRO_ID(DKB_POWER_COMPUTING, 0x0F, 0) |
#define ZORRO_PROD_DKB_POWER_COMPUTING_DKM_1202 ZORRO_ID(DKB_POWER_COMPUTING, 0x10, 0) |
#define ZORRO_PROD_DKB_POWER_COMPUTING_COBRA_VIPER_II_68EC030 ZORRO_ID(DKB_POWER_COMPUTING, 0x12, 0) |
#define ZORRO_PROD_DKB_POWER_COMPUTING_WILDFIRE_060_1 ZORRO_ID(DKB_POWER_COMPUTING, 0x17, 0) |
#define ZORRO_PROD_DKB_POWER_COMPUTING_WILDFIRE_060_2 ZORRO_ID(DKB_POWER_COMPUTING, 0xFF, 0) |
#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_2 0x07E1 |
#define ZORRO_PROD_GVP_IMPACT_SERIES_I_4K ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x01, 0) |
#define ZORRO_PROD_GVP_IMPACT_SERIES_I_16K_2 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x02, 0) |
#define ZORRO_PROD_GVP_IMPACT_SERIES_I_16K_3 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x03, 0) |
#define ZORRO_PROD_GVP_IMPACT_3001_IDE_1 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x08, 0) |
#define ZORRO_PROD_GVP_IMPACT_3001_RAM ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x09, 0) |
#define ZORRO_PROD_GVP_IMPACT_SERIES_II_RAM_1 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0A, 0) |
#define ZORRO_PROD_GVP_EPC_BASE ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0) |
#define ZORRO_PROD_GVP_GFORCE_040_1 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x20) |
#define ZORRO_PROD_GVP_GFORCE_040_SCSI_1 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x30) |
#define ZORRO_PROD_GVP_A1291 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x40) |
#define ZORRO_PROD_GVP_COMBO_030_R4 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x60) |
#define ZORRO_PROD_GVP_COMBO_030_R4_SCSI ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x70) |
#define ZORRO_PROD_GVP_PHONEPAK ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x78) |
#define ZORRO_PROD_GVP_IO_EXTENDER ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0x98) |
#define ZORRO_PROD_GVP_GFORCE_030 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xa0) |
#define ZORRO_PROD_GVP_GFORCE_030_SCSI ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xb0) |
#define ZORRO_PROD_GVP_A530 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xc0) |
#define ZORRO_PROD_GVP_A530_SCSI ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xd0) |
#define ZORRO_PROD_GVP_COMBO_030_R3 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xe0) |
#define ZORRO_PROD_GVP_COMBO_030_R3_SCSI ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xf0) |
#define ZORRO_PROD_GVP_SERIES_II ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0B, 0xf8) |
#define ZORRO_PROD_GVP_IMPACT_3001_IDE_2 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0) |
/*#define ZORRO_PROD_GVP_A2000_030 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0)*/ |
/*#define ZORRO_PROD_GVP_GFORCE_040_SCSI_2 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x0D, 0)*/ |
#define ZORRO_PROD_GVP_GFORCE_040_060 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x16, 0) |
#define ZORRO_PROD_GVP_IMPACT_VISION_24 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0x20, 0) |
#define ZORRO_PROD_GVP_GFORCE_040_2 ZORRO_ID(GREAT_VALLEY_PRODUCTS_2, 0xFF, 0) |
#define ZORRO_MANUF_CALIFORNIA_ACCESS_SYNERGY 0x07E5 |
#define ZORRO_PROD_CALIFORNIA_ACCESS_SYNERGY_MALIBU ZORRO_ID(CALIFORNIA_ACCESS_SYNERGY, 0x01, 0) |
#define ZORRO_MANUF_XETEC 0x07E6 |
#define ZORRO_PROD_XETEC_FASTCARD ZORRO_ID(XETEC, 0x01, 0) |
#define ZORRO_PROD_XETEC_FASTCARD_RAM ZORRO_ID(XETEC, 0x02, 0) |
#define ZORRO_PROD_XETEC_FASTCARD_PLUS ZORRO_ID(XETEC, 0x03, 0) |
#define ZORRO_MANUF_PROGRESSIVE_PERIPHERALS_AND_SYSTEMS 0x07EA |
#define ZORRO_PROD_PPS_MERCURY ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x00, 0) |
#define ZORRO_PROD_PPS_A3000_68040 ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x01, 0) |
#define ZORRO_PROD_PPS_A2000_68040 ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x69, 0) |
#define ZORRO_PROD_PPS_ZEUS ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0x96, 0) |
#define ZORRO_PROD_PPS_A500_68040 ZORRO_ID(PROGRESSIVE_PERIPHERALS_AND_SYSTEMS, 0xBB, 0) |
#define ZORRO_MANUF_XEBEC 0x07EC |
#define ZORRO_MANUF_SPIRIT_TECHNOLOGY 0x07F2 |
#define ZORRO_PROD_SPIRIT_TECHNOLOGY_INSIDER_IN1000 ZORRO_ID(SPIRIT_TECHNOLOGY, 0x01, 0) |
#define ZORRO_PROD_SPIRIT_TECHNOLOGY_INSIDER_IN500 ZORRO_ID(SPIRIT_TECHNOLOGY, 0x02, 0) |
#define ZORRO_PROD_SPIRIT_TECHNOLOGY_SIN500 ZORRO_ID(SPIRIT_TECHNOLOGY, 0x03, 0) |
#define ZORRO_PROD_SPIRIT_TECHNOLOGY_HDA_506 ZORRO_ID(SPIRIT_TECHNOLOGY, 0x04, 0) |
#define ZORRO_PROD_SPIRIT_TECHNOLOGY_AX_S ZORRO_ID(SPIRIT_TECHNOLOGY, 0x05, 0) |
#define ZORRO_PROD_SPIRIT_TECHNOLOGY_OCTABYTE ZORRO_ID(SPIRIT_TECHNOLOGY, 0x06, 0) |
#define ZORRO_PROD_SPIRIT_TECHNOLOGY_INMATE ZORRO_ID(SPIRIT_TECHNOLOGY, 0x08, 0) |
#define ZORRO_MANUF_SPIRIT_TECHNOLOGY_2 0x07F3 |
#define ZORRO_MANUF_BSC_ALFADATA_1 0x07FE |
#define ZORRO_PROD_BSC_ALF_3_1 ZORRO_ID(BSC_ALFADATA_1, 0x03, 0) |
#define ZORRO_MANUF_BSC_ALFADATA_2 0x0801 |
#define ZORRO_PROD_BSC_ALF_2_1 ZORRO_ID(BSC_ALFADATA_2, 0x01, 0) |
#define ZORRO_PROD_BSC_ALF_2_2 ZORRO_ID(BSC_ALFADATA_2, 0x02, 0) |
#define ZORRO_PROD_BSC_ALF_3_2 ZORRO_ID(BSC_ALFADATA_2, 0x03, 0) |
#define ZORRO_MANUF_CARDCO_2 0x0802 |
#define ZORRO_PROD_CARDCO_KRONOS_2000_2 ZORRO_ID(CARDCO_2, 0x04, 0) |
#define ZORRO_PROD_CARDCO_A1000_2 ZORRO_ID(CARDCO_2, 0x0C, 0) |
#define ZORRO_MANUF_JOCHHEIM 0x0804 |
#define ZORRO_PROD_JOCHHEIM_RAM ZORRO_ID(JOCHHEIM, 0x01, 0) |
#define ZORRO_MANUF_CHECKPOINT_TECHNOLOGIES 0x0807 |
#define ZORRO_PROD_CHECKPOINT_TECHNOLOGIES_SERIAL_SOLUTION ZORRO_ID(CHECKPOINT_TECHNOLOGIES, 0x00, 0) |
#define ZORRO_MANUF_EDOTRONIK 0x0810 |
#define ZORRO_PROD_EDOTRONIK_IEEE_488 ZORRO_ID(EDOTRONIK, 0x01, 0) |
#define ZORRO_PROD_EDOTRONIK_8032 ZORRO_ID(EDOTRONIK, 0x02, 0) |
#define ZORRO_PROD_EDOTRONIK_MULTISERIAL ZORRO_ID(EDOTRONIK, 0x03, 0) |
#define ZORRO_PROD_EDOTRONIK_VIDEODIGITIZER ZORRO_ID(EDOTRONIK, 0x04, 0) |
#define ZORRO_PROD_EDOTRONIK_PARALLEL_IO ZORRO_ID(EDOTRONIK, 0x05, 0) |
#define ZORRO_PROD_EDOTRONIK_PIC_PROTOYPING ZORRO_ID(EDOTRONIK, 0x06, 0) |
#define ZORRO_PROD_EDOTRONIK_ADC ZORRO_ID(EDOTRONIK, 0x07, 0) |
#define ZORRO_PROD_EDOTRONIK_VME ZORRO_ID(EDOTRONIK, 0x08, 0) |
#define ZORRO_PROD_EDOTRONIK_DSP96000 ZORRO_ID(EDOTRONIK, 0x09, 0) |
#define ZORRO_MANUF_NES_INC 0x0813 |
#define ZORRO_PROD_NES_INC_RAM ZORRO_ID(NES_INC, 0x00, 0) |
#define ZORRO_MANUF_ICD 0x0817 |
#define ZORRO_PROD_ICD_ADVANTAGE_2000_SCSI ZORRO_ID(ICD, 0x01, 0) |
#define ZORRO_PROD_ICD_ADVANTAGE_IDE ZORRO_ID(ICD, 0x03, 0) |
#define ZORRO_PROD_ICD_ADVANTAGE_2080_RAM ZORRO_ID(ICD, 0x04, 0) |
#define ZORRO_MANUF_KUPKE_2 0x0819 |
#define ZORRO_PROD_KUPKE_OMTI ZORRO_ID(KUPKE_2, 0x01, 0) |
#define ZORRO_PROD_KUPKE_SCSI_II ZORRO_ID(KUPKE_2, 0x02, 0) |
#define ZORRO_PROD_KUPKE_GOLEM_BOX ZORRO_ID(KUPKE_2, 0x03, 0) |
#define ZORRO_PROD_KUPKE_030_882 ZORRO_ID(KUPKE_2, 0x04, 0) |
#define ZORRO_PROD_KUPKE_SCSI_AT ZORRO_ID(KUPKE_2, 0x05, 0) |
#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_3 0x081D |
#define ZORRO_PROD_GVP_A2000_RAM8 ZORRO_ID(GREAT_VALLEY_PRODUCTS_3, 0x09, 0) |
#define ZORRO_PROD_GVP_IMPACT_SERIES_II_RAM_2 ZORRO_ID(GREAT_VALLEY_PRODUCTS_3, 0x0A, 0) |
#define ZORRO_MANUF_INTERWORKS_NETWORK 0x081E |
#define ZORRO_MANUF_HARDITAL_SYNTHESIS 0x0820 |
#define ZORRO_PROD_HARDITAL_SYNTHESIS_TQM_68030_68882 ZORRO_ID(HARDITAL_SYNTHESIS, 0x14, 0) |
#define ZORRO_MANUF_APPLIED_ENGINEERING 0x0828 |
#define ZORRO_PROD_APPLIED_ENGINEERING_DL2000 ZORRO_ID(APPLIED_ENGINEERING, 0x10, 0) |
#define ZORRO_PROD_APPLIED_ENGINEERING_RAM_WORKS ZORRO_ID(APPLIED_ENGINEERING, 0xE0, 0) |
#define ZORRO_MANUF_BSC_ALFADATA_3 0x082C |
#define ZORRO_PROD_BSC_OKTAGON_2008 ZORRO_ID(BSC_ALFADATA_3, 0x05, 0) |
#define ZORRO_PROD_BSC_TANDEM_AT_2008_508 ZORRO_ID(BSC_ALFADATA_3, 0x06, 0) |
#define ZORRO_PROD_BSC_ALFA_RAM_1200 ZORRO_ID(BSC_ALFADATA_3, 0x07, 0) |
#define ZORRO_PROD_BSC_OKTAGON_2008_RAM ZORRO_ID(BSC_ALFADATA_3, 0x08, 0) |
#define ZORRO_PROD_BSC_MULTIFACE_I ZORRO_ID(BSC_ALFADATA_3, 0x10, 0) |
#define ZORRO_PROD_BSC_MULTIFACE_II ZORRO_ID(BSC_ALFADATA_3, 0x11, 0) |
#define ZORRO_PROD_BSC_MULTIFACE_III ZORRO_ID(BSC_ALFADATA_3, 0x12, 0) |
#define ZORRO_PROD_BSC_FRAMEMASTER_II ZORRO_ID(BSC_ALFADATA_3, 0x20, 0) |
#define ZORRO_PROD_BSC_GRAFFITI_RAM ZORRO_ID(BSC_ALFADATA_3, 0x21, 0) |
#define ZORRO_PROD_BSC_GRAFFITI_REG ZORRO_ID(BSC_ALFADATA_3, 0x22, 0) |
#define ZORRO_PROD_BSC_ISDN_MASTERCARD ZORRO_ID(BSC_ALFADATA_3, 0x40, 0) |
#define ZORRO_PROD_BSC_ISDN_MASTERCARD_II ZORRO_ID(BSC_ALFADATA_3, 0x41, 0) |
#define ZORRO_MANUF_PHOENIX 0x0835 |
#define ZORRO_PROD_PHOENIX_ST506 ZORRO_ID(PHOENIX, 0x21, 0) |
#define ZORRO_PROD_PHOENIX_SCSI ZORRO_ID(PHOENIX, 0x22, 0) |
#define ZORRO_PROD_PHOENIX_RAM ZORRO_ID(PHOENIX, 0xBE, 0) |
#define ZORRO_MANUF_ADVANCED_STORAGE_SYSTEMS 0x0836 |
#define ZORRO_PROD_ADVANCED_STORAGE_SYSTEMS_NEXUS ZORRO_ID(ADVANCED_STORAGE_SYSTEMS, 0x01, 0) |
#define ZORRO_PROD_ADVANCED_STORAGE_SYSTEMS_NEXUS_RAM ZORRO_ID(ADVANCED_STORAGE_SYSTEMS, 0x08, 0) |
#define ZORRO_MANUF_IMPULSE 0x0838 |
#define ZORRO_PROD_IMPULSE_FIRECRACKER_24 ZORRO_ID(IMPULSE, 0x00, 0) |
#define ZORRO_MANUF_IVS 0x0840 |
#define ZORRO_PROD_IVS_GRANDSLAM_PIC_2 ZORRO_ID(IVS, 0x02, 0) |
#define ZORRO_PROD_IVS_GRANDSLAM_PIC_1 ZORRO_ID(IVS, 0x04, 0) |
#define ZORRO_PROD_IVS_OVERDRIVE ZORRO_ID(IVS, 0x10, 0) |
#define ZORRO_PROD_IVS_TRUMPCARD_CLASSIC ZORRO_ID(IVS, 0x30, 0) |
#define ZORRO_PROD_IVS_TRUMPCARD_PRO_GRANDSLAM ZORRO_ID(IVS, 0x34, 0) |
#define ZORRO_PROD_IVS_META_4 ZORRO_ID(IVS, 0x40, 0) |
#define ZORRO_PROD_IVS_WAVETOOLS ZORRO_ID(IVS, 0xBF, 0) |
#define ZORRO_PROD_IVS_VECTOR_1 ZORRO_ID(IVS, 0xF3, 0) |
#define ZORRO_PROD_IVS_VECTOR_2 ZORRO_ID(IVS, 0xF4, 0) |
#define ZORRO_MANUF_VECTOR_1 0x0841 |
#define ZORRO_PROD_VECTOR_CONNECTION_1 ZORRO_ID(VECTOR_1, 0xE3, 0) |
#define ZORRO_MANUF_XPERT_PRODEV 0x0845 |
#define ZORRO_PROD_XPERT_PRODEV_VISIONA_RAM ZORRO_ID(XPERT_PRODEV, 0x01, 0) |
#define ZORRO_PROD_XPERT_PRODEV_VISIONA_REG ZORRO_ID(XPERT_PRODEV, 0x02, 0) |
#define ZORRO_PROD_XPERT_PRODEV_MERLIN_RAM ZORRO_ID(XPERT_PRODEV, 0x03, 0) |
#define ZORRO_PROD_XPERT_PRODEV_MERLIN_REG_1 ZORRO_ID(XPERT_PRODEV, 0x04, 0) |
#define ZORRO_PROD_XPERT_PRODEV_MERLIN_REG_2 ZORRO_ID(XPERT_PRODEV, 0xC9, 0) |
#define ZORRO_MANUF_HYDRA_SYSTEMS 0x0849 |
#define ZORRO_PROD_HYDRA_SYSTEMS_AMIGANET ZORRO_ID(HYDRA_SYSTEMS, 0x01, 0) |
#define ZORRO_MANUF_SUNRIZE_INDUSTRIES 0x084F |
#define ZORRO_PROD_SUNRIZE_INDUSTRIES_AD1012 ZORRO_ID(SUNRIZE_INDUSTRIES, 0x01, 0) |
#define ZORRO_PROD_SUNRIZE_INDUSTRIES_AD516 ZORRO_ID(SUNRIZE_INDUSTRIES, 0x02, 0) |
#define ZORRO_PROD_SUNRIZE_INDUSTRIES_DD512 ZORRO_ID(SUNRIZE_INDUSTRIES, 0x03, 0) |
#define ZORRO_MANUF_TRICERATOPS 0x0850 |
#define ZORRO_PROD_TRICERATOPS_MULTI_IO ZORRO_ID(TRICERATOPS, 0x01, 0) |
#define ZORRO_MANUF_APPLIED_MAGIC 0x0851 |
#define ZORRO_PROD_APPLIED_MAGIC_DMI_RESOLVER ZORRO_ID(APPLIED_MAGIC, 0x01, 0) |
#define ZORRO_PROD_APPLIED_MAGIC_DIGITAL_BROADCASTER ZORRO_ID(APPLIED_MAGIC, 0x06, 0) |
#define ZORRO_MANUF_GFX_BASE 0x085E |
#define ZORRO_PROD_GFX_BASE_GDA_1_VRAM ZORRO_ID(GFX_BASE, 0x00, 0) |
#define ZORRO_PROD_GFX_BASE_GDA_1 ZORRO_ID(GFX_BASE, 0x01, 0) |
#define ZORRO_MANUF_ROCTEC 0x0860 |
#define ZORRO_PROD_ROCTEC_RH_800C ZORRO_ID(ROCTEC, 0x01, 0) |
#define ZORRO_PROD_ROCTEC_RH_800C_RAM ZORRO_ID(ROCTEC, 0x01, 0) |
#define ZORRO_MANUF_KATO 0x0861 |
#define ZORRO_PROD_KATO_MELODY ZORRO_ID(KATO, 0x80, 0) |
/* ID clash!! */ |
#define ZORRO_MANUF_HELFRICH_1 0x0861 |
#define ZORRO_PROD_HELFRICH_RAINBOW_II ZORRO_ID(HELFRICH_1, 0x20, 0) |
#define ZORRO_PROD_HELFRICH_RAINBOW_III ZORRO_ID(HELFRICH_1, 0x21, 0) |
#define ZORRO_MANUF_ATLANTIS 0x0862 |
#define ZORRO_MANUF_PROTAR 0x0864 |
#define ZORRO_MANUF_ACS 0x0865 |
#define ZORRO_MANUF_SOFTWARE_RESULTS_ENTERPRISES 0x0866 |
#define ZORRO_PROD_SOFTWARE_RESULTS_ENTERPRISES_GOLDEN_GATE_2_BUS_PLUS ZORRO_ID(SOFTWARE_RESULTS_ENTERPRISES, 0x01, 0) |
#define ZORRO_MANUF_MASOBOSHI 0x086D |
#define ZORRO_PROD_MASOBOSHI_MASTER_CARD_SC201 ZORRO_ID(MASOBOSHI, 0x03, 0) |
#define ZORRO_PROD_MASOBOSHI_MASTER_CARD_MC702 ZORRO_ID(MASOBOSHI, 0x04, 0) |
#define ZORRO_PROD_MASOBOSHI_MVD_819 ZORRO_ID(MASOBOSHI, 0x07, 0) |
#define ZORRO_MANUF_MAINHATTAN_DATA 0x086F |
#define ZORRO_PROD_MAINHATTAN_DATA_IDE ZORRO_ID(MAINHATTAN_DATA, 0x01, 0) |
#define ZORRO_MANUF_VILLAGE_TRONIC 0x0877 |
#define ZORRO_PROD_VILLAGE_TRONIC_DOMINO_RAM ZORRO_ID(VILLAGE_TRONIC, 0x01, 0) |
#define ZORRO_PROD_VILLAGE_TRONIC_DOMINO_REG ZORRO_ID(VILLAGE_TRONIC, 0x02, 0) |
#define ZORRO_PROD_VILLAGE_TRONIC_DOMINO_16M_PROTOTYPE ZORRO_ID(VILLAGE_TRONIC, 0x03, 0) |
#define ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_RAM ZORRO_ID(VILLAGE_TRONIC, 0x0B, 0) |
#define ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_REG ZORRO_ID(VILLAGE_TRONIC, 0x0C, 0) |
#define ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_SEGMENTED_MODE ZORRO_ID(VILLAGE_TRONIC, 0x0D, 0) |
#define ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_MEM1 ZORRO_ID(VILLAGE_TRONIC, 0x15, 0) |
#define ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_MEM2 ZORRO_ID(VILLAGE_TRONIC, 0x16, 0) |
#define ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_REG ZORRO_ID(VILLAGE_TRONIC, 0x17, 0) |
#define ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z3 ZORRO_ID(VILLAGE_TRONIC, 0x18, 0) |
#define ZORRO_PROD_VILLAGE_TRONIC_ARIADNE ZORRO_ID(VILLAGE_TRONIC, 0xC9, 0) |
#define ZORRO_PROD_VILLAGE_TRONIC_ARIADNE2 ZORRO_ID(VILLAGE_TRONIC, 0xCA, 0) |
#define ZORRO_MANUF_UTILITIES_UNLIMITED 0x087B |
#define ZORRO_PROD_UTILITIES_UNLIMITED_EMPLANT_DELUXE ZORRO_ID(UTILITIES_UNLIMITED, 0x15, 0) |
#define ZORRO_PROD_UTILITIES_UNLIMITED_EMPLANT_DELUXE2 ZORRO_ID(UTILITIES_UNLIMITED, 0x20, 0) |
#define ZORRO_MANUF_AMITRIX 0x0880 |
#define ZORRO_PROD_AMITRIX_MULTI_IO ZORRO_ID(AMITRIX, 0x01, 0) |
#define ZORRO_PROD_AMITRIX_CD_RAM ZORRO_ID(AMITRIX, 0x02, 0) |
#define ZORRO_MANUF_ARMAX 0x0885 |
#define ZORRO_PROD_ARMAX_OMNIBUS ZORRO_ID(ARMAX, 0x00, 0) |
#define ZORRO_MANUF_ZEUS 0x088D |
#define ZORRO_PROD_ZEUS_SPIDER ZORRO_ID(ZEUS, 0x04, 0) |
#define ZORRO_MANUF_NEWTEK 0x088F |
#define ZORRO_PROD_NEWTEK_VIDEOTOASTER ZORRO_ID(NEWTEK, 0x00, 0) |
#define ZORRO_MANUF_M_TECH_GERMANY 0x0890 |
#define ZORRO_PROD_MTEC_AT500_2 ZORRO_ID(M_TECH_GERMANY, 0x01, 0) |
#define ZORRO_PROD_MTEC_68030 ZORRO_ID(M_TECH_GERMANY, 0x03, 0) |
#define ZORRO_PROD_MTEC_68020I ZORRO_ID(M_TECH_GERMANY, 0x06, 0) |
#define ZORRO_PROD_MTEC_A1200_T68030_RTC ZORRO_ID(M_TECH_GERMANY, 0x20, 0) |
#define ZORRO_PROD_MTEC_VIPER_MK_V_E_MATRIX_530 ZORRO_ID(M_TECH_GERMANY, 0x21, 0) |
#define ZORRO_PROD_MTEC_8_MB_RAM ZORRO_ID(M_TECH_GERMANY, 0x22, 0) |
#define ZORRO_PROD_MTEC_VIPER_MK_V_E_MATRIX_530_SCSI_IDE ZORRO_ID(M_TECH_GERMANY, 0x24, 0) |
#define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_4 0x0891 |
#define ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_RAM ZORRO_ID(GREAT_VALLEY_PRODUCTS_4, 0x01, 0) |
#define ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_REG ZORRO_ID(GREAT_VALLEY_PRODUCTS_4, 0x02, 0) |
#define ZORRO_MANUF_APOLLO_1 0x0892 |
#define ZORRO_PROD_APOLLO_A1200 ZORRO_ID(APOLLO_1, 0x01, 0) |
#define ZORRO_MANUF_HELFRICH_2 0x0893 |
#define ZORRO_PROD_HELFRICH_PICCOLO_RAM ZORRO_ID(HELFRICH_2, 0x05, 0) |
#define ZORRO_PROD_HELFRICH_PICCOLO_REG ZORRO_ID(HELFRICH_2, 0x06, 0) |
#define ZORRO_PROD_HELFRICH_PEGGY_PLUS_MPEG ZORRO_ID(HELFRICH_2, 0x07, 0) |
#define ZORRO_PROD_HELFRICH_VIDEOCRUNCHER ZORRO_ID(HELFRICH_2, 0x08, 0) |
#define ZORRO_PROD_HELFRICH_SD64_RAM ZORRO_ID(HELFRICH_2, 0x0A, 0) |
#define ZORRO_PROD_HELFRICH_SD64_REG ZORRO_ID(HELFRICH_2, 0x0B, 0) |
#define ZORRO_MANUF_MACROSYSTEMS_USA 0x089B |
#define ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE_40xx ZORRO_ID(MACROSYSTEMS_USA, 0x13, 0) |
#define ZORRO_MANUF_ELBOX_COMPUTER 0x089E |
#define ZORRO_PROD_ELBOX_COMPUTER_1200_4 ZORRO_ID(ELBOX_COMPUTER, 0x06, 0) |
#define ZORRO_MANUF_HARMS_PROFESSIONAL 0x0A00 |
#define ZORRO_PROD_HARMS_PROFESSIONAL_030_PLUS ZORRO_ID(HARMS_PROFESSIONAL, 0x10, 0) |
#define ZORRO_PROD_HARMS_PROFESSIONAL_3500 ZORRO_ID(HARMS_PROFESSIONAL, 0xD0, 0) |
#define ZORRO_MANUF_MICRONIK 0x0A50 |
#define ZORRO_PROD_MICRONIK_RCA_120 ZORRO_ID(MICRONIK, 0x0A, 0) |
#define ZORRO_MANUF_MICRONIK2 0x0F0F |
#define ZORRO_PROD_MICRONIK2_Z3I ZORRO_ID(MICRONIK2, 0x01, 0) |
#define ZORRO_MANUF_MEGAMICRO 0x1000 |
#define ZORRO_PROD_MEGAMICRO_SCRAM_500 ZORRO_ID(MEGAMICRO, 0x03, 0) |
#define ZORRO_PROD_MEGAMICRO_SCRAM_500_RAM ZORRO_ID(MEGAMICRO, 0x04, 0) |
#define ZORRO_MANUF_IMTRONICS_2 0x1028 |
#define ZORRO_PROD_IMTRONICS_HURRICANE_2800_3 ZORRO_ID(IMTRONICS_2, 0x39, 0) |
#define ZORRO_PROD_IMTRONICS_HURRICANE_2800_4 ZORRO_ID(IMTRONICS_2, 0x57, 0) |
/* unofficial ID */ |
#define ZORRO_MANUF_INDIVIDUAL_COMPUTERS 0x1212 |
#define ZORRO_PROD_INDIVIDUAL_COMPUTERS_BUDDHA ZORRO_ID(INDIVIDUAL_COMPUTERS, 0x00, 0) |
#define ZORRO_PROD_INDIVIDUAL_COMPUTERS_X_SURF ZORRO_ID(INDIVIDUAL_COMPUTERS, 0x17, 0) |
#define ZORRO_PROD_INDIVIDUAL_COMPUTERS_CATWEASEL ZORRO_ID(INDIVIDUAL_COMPUTERS, 0x2A, 0) |
#define ZORRO_MANUF_KUPKE_3 0x1248 |
#define ZORRO_PROD_KUPKE_GOLEM_HD_3000 ZORRO_ID(KUPKE_3, 0x01, 0) |
#define ZORRO_MANUF_ITH 0x1388 |
#define ZORRO_PROD_ITH_ISDN_MASTER_II ZORRO_ID(ITH, 0x01, 0) |
#define ZORRO_MANUF_VMC 0x1389 |
#define ZORRO_PROD_VMC_ISDN_BLASTER_Z2 ZORRO_ID(VMC, 0x01, 0) |
#define ZORRO_PROD_VMC_HYPERCOM_4 ZORRO_ID(VMC, 0x02, 0) |
#define ZORRO_MANUF_INFORMATION 0x157C |
#define ZORRO_PROD_INFORMATION_ISDN_ENGINE_I ZORRO_ID(INFORMATION, 0x64, 0) |
#define ZORRO_MANUF_VORTEX 0x2017 |
#define ZORRO_PROD_VORTEX_GOLDEN_GATE_80386SX ZORRO_ID(VORTEX, 0x07, 0) |
#define ZORRO_PROD_VORTEX_GOLDEN_GATE_RAM ZORRO_ID(VORTEX, 0x08, 0) |
#define ZORRO_PROD_VORTEX_GOLDEN_GATE_80486 ZORRO_ID(VORTEX, 0x09, 0) |
#define ZORRO_MANUF_EXPANSION_SYSTEMS 0x2062 |
#define ZORRO_PROD_EXPANSION_SYSTEMS_DATAFLYER_4000SX ZORRO_ID(EXPANSION_SYSTEMS, 0x01, 0) |
#define ZORRO_PROD_EXPANSION_SYSTEMS_DATAFLYER_4000SX_RAM ZORRO_ID(EXPANSION_SYSTEMS, 0x02, 0) |
#define ZORRO_MANUF_READYSOFT 0x2100 |
#define ZORRO_PROD_READYSOFT_AMAX_II_IV ZORRO_ID(READYSOFT, 0x01, 0) |
#define ZORRO_MANUF_PHASE5 0x2140 |
#define ZORRO_PROD_PHASE5_BLIZZARD_RAM ZORRO_ID(PHASE5, 0x01, 0) |
#define ZORRO_PROD_PHASE5_BLIZZARD ZORRO_ID(PHASE5, 0x02, 0) |
#define ZORRO_PROD_PHASE5_BLIZZARD_1220_IV ZORRO_ID(PHASE5, 0x06, 0) |
#define ZORRO_PROD_PHASE5_FASTLANE_Z3_RAM ZORRO_ID(PHASE5, 0x0A, 0) |
#define ZORRO_PROD_PHASE5_BLIZZARD_1230_II_FASTLANE_Z3_CYBERSCSI_CYBERSTORM060 ZORRO_ID(PHASE5, 0x0B, 0) |
#define ZORRO_PROD_PHASE5_BLIZZARD_1220_CYBERSTORM ZORRO_ID(PHASE5, 0x0C, 0) |
#define ZORRO_PROD_PHASE5_BLIZZARD_1230 ZORRO_ID(PHASE5, 0x0D, 0) |
#define ZORRO_PROD_PHASE5_BLIZZARD_1230_IV_1260 ZORRO_ID(PHASE5, 0x11, 0) |
#define ZORRO_PROD_PHASE5_BLIZZARD_2060 ZORRO_ID(PHASE5, 0x18, 0) |
#define ZORRO_PROD_PHASE5_CYBERSTORM_MK_II ZORRO_ID(PHASE5, 0x19, 0) |
#define ZORRO_PROD_PHASE5_CYBERVISION64 ZORRO_ID(PHASE5, 0x22, 0) |
#define ZORRO_PROD_PHASE5_CYBERVISION64_3D_PROTOTYPE ZORRO_ID(PHASE5, 0x32, 0) |
#define ZORRO_PROD_PHASE5_CYBERVISION64_3D ZORRO_ID(PHASE5, 0x43, 0) |
#define ZORRO_PROD_PHASE5_CYBERSTORM_MK_III ZORRO_ID(PHASE5, 0x64, 0) |
#define ZORRO_PROD_PHASE5_BLIZZARD_603E_PLUS ZORRO_ID(PHASE5, 0x6e, 0) |
#define ZORRO_MANUF_DPS 0x2169 |
#define ZORRO_PROD_DPS_PERSONAL_ANIMATION_RECORDER ZORRO_ID(DPS, 0x01, 0) |
#define ZORRO_MANUF_APOLLO_2 0x2200 |
#define ZORRO_PROD_APOLLO_A620_68020_1 ZORRO_ID(APOLLO_2, 0x00, 0) |
#define ZORRO_PROD_APOLLO_A620_68020_2 ZORRO_ID(APOLLO_2, 0x01, 0) |
#define ZORRO_MANUF_APOLLO_3 0x2222 |
#define ZORRO_PROD_APOLLO_AT_APOLLO ZORRO_ID(APOLLO_3, 0x22, 0) |
#define ZORRO_PROD_APOLLO_1230_1240_1260_2030_4040_4060 ZORRO_ID(APOLLO_3, 0x23, 0) |
#define ZORRO_MANUF_PETSOFF_LP 0x38A5 |
#define ZORRO_PROD_PETSOFF_LP_DELFINA ZORRO_ID(PETSOFF_LP, 0x00, 0) |
#define ZORRO_PROD_PETSOFF_LP_DELFINA_LITE ZORRO_ID(PETSOFF_LP, 0x01, 0) |
#define ZORRO_MANUF_UWE_GERLACH 0x3FF7 |
#define ZORRO_PROD_UWE_GERLACH_RAM_ROM ZORRO_ID(UWE_GERLACH, 0xd4, 0) |
#define ZORRO_MANUF_ACT 0x4231 |
#define ZORRO_PROD_ACT_PRELUDE ZORRO_ID(ACT, 0x01, 0) |
#define ZORRO_MANUF_MACROSYSTEMS_GERMANY 0x4754 |
#define ZORRO_PROD_MACROSYSTEMS_MAESTRO ZORRO_ID(MACROSYSTEMS_GERMANY, 0x03, 0) |
#define ZORRO_PROD_MACROSYSTEMS_VLAB ZORRO_ID(MACROSYSTEMS_GERMANY, 0x04, 0) |
#define ZORRO_PROD_MACROSYSTEMS_MAESTRO_PRO ZORRO_ID(MACROSYSTEMS_GERMANY, 0x05, 0) |
#define ZORRO_PROD_MACROSYSTEMS_RETINA ZORRO_ID(MACROSYSTEMS_GERMANY, 0x06, 0) |
#define ZORRO_PROD_MACROSYSTEMS_MULTI_EVOLUTION ZORRO_ID(MACROSYSTEMS_GERMANY, 0x08, 0) |
#define ZORRO_PROD_MACROSYSTEMS_TOCCATA ZORRO_ID(MACROSYSTEMS_GERMANY, 0x0C, 0) |
#define ZORRO_PROD_MACROSYSTEMS_RETINA_Z3 ZORRO_ID(MACROSYSTEMS_GERMANY, 0x10, 0) |
#define ZORRO_PROD_MACROSYSTEMS_VLAB_MOTION ZORRO_ID(MACROSYSTEMS_GERMANY, 0x12, 0) |
#define ZORRO_PROD_MACROSYSTEMS_ALTAIS ZORRO_ID(MACROSYSTEMS_GERMANY, 0x13, 0) |
#define ZORRO_PROD_MACROSYSTEMS_FALCON_040 ZORRO_ID(MACROSYSTEMS_GERMANY, 0xFD, 0) |
#define ZORRO_MANUF_COMBITEC 0x6766 |
#define ZORRO_MANUF_SKI_PERIPHERALS 0x8000 |
#define ZORRO_PROD_SKI_PERIPHERALS_MAST_FIREBALL ZORRO_ID(SKI_PERIPHERALS, 0x08, 0) |
#define ZORRO_PROD_SKI_PERIPHERALS_SCSI_DUAL_SERIAL ZORRO_ID(SKI_PERIPHERALS, 0x80, 0) |
#define ZORRO_MANUF_REIS_WARE_2 0xA9AD |
#define ZORRO_PROD_REIS_WARE_SCAN_KING ZORRO_ID(REIS_WARE_2, 0x11, 0) |
#define ZORRO_MANUF_CAMERON 0xAA01 |
#define ZORRO_PROD_CAMERON_PERSONAL_A4 ZORRO_ID(CAMERON, 0x10, 0) |
#define ZORRO_MANUF_REIS_WARE 0xAA11 |
#define ZORRO_PROD_REIS_WARE_HANDYSCANNER ZORRO_ID(REIS_WARE, 0x11, 0) |
#define ZORRO_MANUF_PHOENIX_2 0xB5A8 |
#define ZORRO_PROD_PHOENIX_ST506_2 ZORRO_ID(PHOENIX_2, 0x21, 0) |
#define ZORRO_PROD_PHOENIX_SCSI_2 ZORRO_ID(PHOENIX_2, 0x22, 0) |
#define ZORRO_PROD_PHOENIX_RAM_2 ZORRO_ID(PHOENIX_2, 0xBE, 0) |
#define ZORRO_MANUF_COMBITEC_2 0xC008 |
#define ZORRO_PROD_COMBITEC_HD ZORRO_ID(COMBITEC_2, 0x2A, 0) |
#define ZORRO_PROD_COMBITEC_SRAM ZORRO_ID(COMBITEC_2, 0x2B, 0) |
/* |
* Test and illegal Manufacturer IDs. |
*/ |
#define ZORRO_MANUF_HACKER 0x07DB |
#define ZORRO_PROD_GENERAL_PROTOTYPE ZORRO_ID(HACKER, 0x00, 0) |
#define ZORRO_PROD_HACKER_SCSI ZORRO_ID(HACKER, 0x01, 0) |
#define ZORRO_PROD_RESOURCE_MANAGEMENT_FORCE_QUICKNET_QN2000 ZORRO_ID(HACKER, 0x02, 0) |
#define ZORRO_PROD_VECTOR_CONNECTION_2 ZORRO_ID(HACKER, 0xE0, 0) |
#define ZORRO_PROD_VECTOR_CONNECTION_3 ZORRO_ID(HACKER, 0xE1, 0) |
#define ZORRO_PROD_VECTOR_CONNECTION_4 ZORRO_ID(HACKER, 0xE2, 0) |
#define ZORRO_PROD_VECTOR_CONNECTION_5 ZORRO_ID(HACKER, 0xE3, 0) |
/shark/trunk/drivers/linuxc26/include/linux/slab.h |
---|
0,0 → 1,123 |
/* |
* linux/mm/slab.h |
* Written by Mark Hemment, 1996. |
* (markhe@nextd.demon.co.uk) |
*/ |
#if !defined(_LINUX_SLAB_H) |
#define _LINUX_SLAB_H |
#if defined(__KERNEL__) |
typedef struct kmem_cache_s kmem_cache_t; |
#include <linux/config.h> /* kmalloc_sizes.h needs CONFIG_ options */ |
#include <linux/gfp.h> |
#include <linux/types.h> |
#include <asm/page.h> /* kmalloc_sizes.h needs PAGE_SIZE */ |
#include <asm/cache.h> /* kmalloc_sizes.h needs L1_CACHE_BYTES */ |
/* flags for kmem_cache_alloc() */ |
#define SLAB_NOFS GFP_NOFS |
#define SLAB_NOIO GFP_NOIO |
#define SLAB_ATOMIC GFP_ATOMIC |
#define SLAB_USER GFP_USER |
#define SLAB_KERNEL GFP_KERNEL |
#define SLAB_DMA GFP_DMA |
#define SLAB_LEVEL_MASK (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_FS|\ |
__GFP_COLD|__GFP_NOWARN|__GFP_REPEAT|\ |
__GFP_NOFAIL|__GFP_NORETRY) |
#define SLAB_NO_GROW __GFP_NO_GROW /* don't grow a cache */ |
/* flags to pass to kmem_cache_create(). |
* The first 3 are only valid when the allocator as been build |
* SLAB_DEBUG_SUPPORT. |
*/ |
#define SLAB_DEBUG_FREE 0x00000100UL /* Peform (expensive) checks on free */ |
#define SLAB_DEBUG_INITIAL 0x00000200UL /* Call constructor (as verifier) */ |
#define SLAB_RED_ZONE 0x00000400UL /* Red zone objs in a cache */ |
#define SLAB_POISON 0x00000800UL /* Poison objects */ |
#define SLAB_NO_REAP 0x00001000UL /* never reap from the cache */ |
#define SLAB_HWCACHE_ALIGN 0x00002000UL /* align objs on a h/w cache lines */ |
#define SLAB_CACHE_DMA 0x00004000UL /* use GFP_DMA memory */ |
#define SLAB_MUST_HWCACHE_ALIGN 0x00008000UL /* force alignment */ |
#define SLAB_STORE_USER 0x00010000UL /* store the last owner for bug hunting */ |
#define SLAB_RECLAIM_ACCOUNT 0x00020000UL /* track pages allocated to indicate |
what is reclaimable later*/ |
/* flags passed to a constructor func */ |
#define SLAB_CTOR_CONSTRUCTOR 0x001UL /* if not set, then deconstructor */ |
#define SLAB_CTOR_ATOMIC 0x002UL /* tell constructor it can't sleep */ |
#define SLAB_CTOR_VERIFY 0x004UL /* tell constructor it's a verify call */ |
/* prototypes */ |
extern void kmem_cache_init(void); |
extern kmem_cache_t *kmem_find_general_cachep(size_t, int gfpflags); |
extern kmem_cache_t *kmem_cache_create(const char *, size_t, size_t, unsigned long, |
void (*)(void *, kmem_cache_t *, unsigned long), |
void (*)(void *, kmem_cache_t *, unsigned long)); |
extern int kmem_cache_destroy(kmem_cache_t *); |
extern int kmem_cache_shrink(kmem_cache_t *); |
extern void *kmem_cache_alloc(kmem_cache_t *, int); |
extern void kmem_cache_free(kmem_cache_t *, void *); |
extern unsigned int kmem_cache_size(kmem_cache_t *); |
/* Size description struct for general caches. */ |
struct cache_sizes { |
size_t cs_size; |
kmem_cache_t *cs_cachep; |
kmem_cache_t *cs_dmacachep; |
}; |
extern struct cache_sizes malloc_sizes[]; |
extern void *__kmalloc(size_t, int); |
static inline void *kmalloc(size_t size, int flags) |
{ |
if (__builtin_constant_p(size)) { |
int i = 0; |
#define CACHE(x) \ |
if (size <= x) \ |
goto found; \ |
else \ |
i++; |
#include "kmalloc_sizes.h" |
#undef CACHE |
{ |
extern void __you_cannot_kmalloc_that_much(void); |
__you_cannot_kmalloc_that_much(); |
} |
found: |
return kmem_cache_alloc((flags & GFP_DMA) ? |
malloc_sizes[i].cs_dmacachep : |
malloc_sizes[i].cs_cachep, flags); |
} |
return __kmalloc(size, flags); |
} |
extern void kfree(const void *); |
extern unsigned int ksize(const void *); |
extern int FASTCALL(kmem_cache_reap(int)); |
/* System wide caches */ |
extern kmem_cache_t *vm_area_cachep; |
extern kmem_cache_t *mm_cachep; |
extern kmem_cache_t *names_cachep; |
extern kmem_cache_t *files_cachep; |
extern kmem_cache_t *filp_cachep; |
extern kmem_cache_t *dquot_cachep; |
extern kmem_cache_t *fs_cachep; |
extern kmem_cache_t *signal_cachep; |
extern kmem_cache_t *sighand_cachep; |
extern kmem_cache_t *bio_cachep; |
void ptrinfo(unsigned long addr); |
extern atomic_t slab_reclaim_pages; |
#endif /* __KERNEL__ */ |
#endif /* _LINUX_SLAB_H */ |
/shark/trunk/drivers/linuxc26/include/linux/rbtree.h |
---|
0,0 → 1,141 |
/* |
Red Black Trees |
(C) 1999 Andrea Arcangeli <andrea@suse.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. |
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 |
linux/include/linux/rbtree.h |
To use rbtrees you'll have to implement your own insert and search cores. |
This will avoid us to use callbacks and to drop drammatically performances. |
I know it's not the cleaner way, but in C (not in C++) to get |
performances and genericity... |
Some example of insert and search follows here. The search is a plain |
normal search over an ordered tree. The insert instead must be implemented |
int two steps: as first thing the code must insert the element in |
order as a red leaf in the tree, then the support library function |
rb_insert_color() must be called. Such function will do the |
not trivial work to rebalance the rbtree if necessary. |
----------------------------------------------------------------------- |
static inline struct page * rb_search_page_cache(struct inode * inode, |
unsigned long offset) |
{ |
struct rb_node * n = inode->i_rb_page_cache.rb_node; |
struct page * page; |
while (n) |
{ |
page = rb_entry(n, struct page, rb_page_cache); |
if (offset < page->offset) |
n = n->rb_left; |
else if (offset > page->offset) |
n = n->rb_right; |
else |
return page; |
} |
return NULL; |
} |
static inline struct page * __rb_insert_page_cache(struct inode * inode, |
unsigned long offset, |
struct rb_node * node) |
{ |
struct rb_node ** p = &inode->i_rb_page_cache.rb_node; |
struct rb_node * parent = NULL; |
struct page * page; |
while (*p) |
{ |
parent = *p; |
page = rb_entry(parent, struct page, rb_page_cache); |
if (offset < page->offset) |
p = &(*p)->rb_left; |
else if (offset > page->offset) |
p = &(*p)->rb_right; |
else |
return page; |
} |
rb_link_node(node, parent, p); |
return NULL; |
} |
static inline struct page * rb_insert_page_cache(struct inode * inode, |
unsigned long offset, |
struct rb_node * node) |
{ |
struct page * ret; |
if ((ret = __rb_insert_page_cache(inode, offset, node))) |
goto out; |
rb_insert_color(node, &inode->i_rb_page_cache); |
out: |
return ret; |
} |
----------------------------------------------------------------------- |
*/ |
#ifndef _LINUX_RBTREE_H |
#define _LINUX_RBTREE_H |
#include <linux/kernel.h> |
#include <linux/stddef.h> |
struct rb_node |
{ |
struct rb_node *rb_parent; |
int rb_color; |
#define RB_RED 0 |
#define RB_BLACK 1 |
struct rb_node *rb_right; |
struct rb_node *rb_left; |
}; |
struct rb_root |
{ |
struct rb_node *rb_node; |
}; |
#define RB_ROOT (struct rb_root) { NULL, } |
#define rb_entry(ptr, type, member) \ |
((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) |
extern void rb_insert_color(struct rb_node *, struct rb_root *); |
extern void rb_erase(struct rb_node *, struct rb_root *); |
/* Find logical next and previous nodes in a tree */ |
extern struct rb_node *rb_next(struct rb_node *); |
extern struct rb_node *rb_prev(struct rb_node *); |
extern struct rb_node *rb_first(struct rb_root *); |
/* Fast replacement of a single node without remove/rebalance/add/rebalance */ |
extern void rb_replace_node(struct rb_node *victim, struct rb_node *new, |
struct rb_root *root); |
static inline void rb_link_node(struct rb_node * node, struct rb_node * parent, |
struct rb_node ** rb_link) |
{ |
node->rb_parent = parent; |
node->rb_color = RB_RED; |
node->rb_left = node->rb_right = NULL; |
*rb_link = node; |
} |
#endif /* _LINUX_RBTREE_H */ |
/shark/trunk/drivers/linuxc26/include/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 |
/shark/trunk/drivers/linuxc26/include/linux/version.h |
---|
0,0 → 1,3 |
#define UTS_RELEASE "2.6.0" |
#define LINUX_VERSION_CODE 132608 |
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) |
Property changes: |
Added: svn:executable |
## -0,0 +1 ## |
+* |
\ No newline at end of property |
Index: linuxc26/include/linux/tcp.h |
=================================================================== |
--- linuxc26/include/linux/tcp.h (nonexistent) |
+++ linuxc26/include/linux/tcp.h (revision 422) |
@@ -0,0 +1,393 @@ |
+/* |
+ * 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 _LINUX_TCP_H |
+#define _LINUX_TCP_H |
+ |
+#include <linux/types.h> |
+#include <asm/byteorder.h> |
+ |
+struct tcphdr { |
+ __u16 source; |
+ __u16 dest; |
+ __u32 seq; |
+ __u32 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 |
+ __u16 window; |
+ __u16 check; |
+ __u16 urg_ptr; |
+}; |
+ |
+ |
+enum { |
+ TCP_ESTABLISHED = 1, |
+ TCP_SYN_SENT, |
+ TCP_SYN_RECV, |
+ TCP_FIN_WAIT1, |
+ TCP_FIN_WAIT2, |
+ TCP_TIME_WAIT, |
+ TCP_CLOSE, |
+ TCP_CLOSE_WAIT, |
+ TCP_LAST_ACK, |
+ TCP_LISTEN, |
+ TCP_CLOSING, /* now a valid state */ |
+ |
+ TCP_MAX_STATES /* Leave at the end! */ |
+}; |
+ |
+#define TCP_STATE_MASK 0xF |
+#define TCP_ACTION_FIN (1 << 7) |
+ |
+enum { |
+ TCPF_ESTABLISHED = (1 << 1), |
+ TCPF_SYN_SENT = (1 << 2), |
+ TCPF_SYN_RECV = (1 << 3), |
+ TCPF_FIN_WAIT1 = (1 << 4), |
+ TCPF_FIN_WAIT2 = (1 << 5), |
+ TCPF_TIME_WAIT = (1 << 6), |
+ TCPF_CLOSE = (1 << 7), |
+ TCPF_CLOSE_WAIT = (1 << 8), |
+ TCPF_LAST_ACK = (1 << 9), |
+ TCPF_LISTEN = (1 << 10), |
+ TCPF_CLOSING = (1 << 11) |
+}; |
+ |
+/* |
+ * 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; |
+ __u32 words[5]; |
+}; |
+ |
+#define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words [3]) |
+ |
+enum { |
+ TCP_FLAG_CWR = __constant_htonl(0x00800000), |
+ TCP_FLAG_ECE = __constant_htonl(0x00400000), |
+ TCP_FLAG_URG = __constant_htonl(0x00200000), |
+ TCP_FLAG_ACK = __constant_htonl(0x00100000), |
+ TCP_FLAG_PSH = __constant_htonl(0x00080000), |
+ TCP_FLAG_RST = __constant_htonl(0x00040000), |
+ TCP_FLAG_SYN = __constant_htonl(0x00020000), |
+ TCP_FLAG_FIN = __constant_htonl(0x00010000), |
+ TCP_RESERVED_BITS = __constant_htonl(0x0F000000), |
+ TCP_DATA_OFFSET = __constant_htonl(0xF0000000) |
+}; |
+ |
+/* 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 TCPI_OPT_TIMESTAMPS 1 |
+#define TCPI_OPT_SACK 2 |
+#define TCPI_OPT_WSCALE 4 |
+#define TCPI_OPT_ECN 8 |
+ |
+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; |
+}; |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/config.h> |
+#include <linux/skbuff.h> |
+#include <linux/ip.h> |
+#include <net/sock.h> |
+ |
+/* This defines a selective acknowledgement block. */ |
+struct tcp_sack_block { |
+ __u32 start_seq; |
+ __u32 end_seq; |
+}; |
+ |
+struct tcp_opt { |
+ int tcp_header_len; /* Bytes of tcp header to send */ |
+ |
+/* |
+ * Header prediction flags |
+ * 0x5?10 << 16 + snd_wnd in net byte order |
+ */ |
+ __u32 pred_flags; |
+ |
+/* |
+ * RFC793 variables by their proper names. This means you can |
+ * read the code and the spec side by side (and laugh ...) |
+ * See RFC793 and RFC1122. The RFC writes these in capitals. |
+ */ |
+ __u32 rcv_nxt; /* What we want to receive next */ |
+ __u32 snd_nxt; /* Next sequence we send */ |
+ |
+ __u32 snd_una; /* First byte we want an ack for */ |
+ __u32 snd_sml; /* Last byte of the most recently transmitted small packet */ |
+ __u32 rcv_tstamp; /* timestamp of last received ACK (for keepalives) */ |
+ __u32 lsndtime; /* timestamp of last sent data packet (for restart window) */ |
+ struct tcp_bind_bucket *bind_hash; |
+ /* Delayed ACK control data */ |
+ struct { |
+ __u8 pending; /* ACK is pending */ |
+ __u8 quick; /* Scheduled number of quick acks */ |
+ __u8 pingpong; /* The session is interactive */ |
+ __u8 blocked; /* Delayed ACK was blocked by socket lock*/ |
+ __u32 ato; /* Predicted tick of soft clock */ |
+ unsigned long timeout; /* Currently scheduled timeout */ |
+ __u32 lrcvtime; /* timestamp of last received data packet*/ |
+ __u16 last_seg_size; /* Size of last incoming segment */ |
+ __u16 rcv_mss; /* MSS used for delayed ACK decisions */ |
+ } ack; |
+ |
+ /* Data for direct copy to user */ |
+ struct { |
+ struct sk_buff_head prequeue; |
+ struct task_struct *task; |
+ struct iovec *iov; |
+ int memory; |
+ int len; |
+ } ucopy; |
+ |
+ __u32 snd_wl1; /* Sequence for window update */ |
+ __u32 snd_wnd; /* The window we expect to receive */ |
+ __u32 max_window; /* Maximal window ever seen from peer */ |
+ __u32 pmtu_cookie; /* Last pmtu seen by socket */ |
+ __u32 mss_cache; /* Cached effective mss, not including SACKS */ |
+ __u16 mss_cache_std; /* Like mss_cache, but without TSO */ |
+ __u16 mss_clamp; /* Maximal mss, negotiated at connection setup */ |
+ __u16 ext_header_len; /* Network protocol overhead (IP/IPv6 options) */ |
+ __u16 ext2_header_len;/* Options depending on route */ |
+ __u8 ca_state; /* State of fast-retransmit machine */ |
+ __u8 retransmits; /* Number of unrecovered RTO timeouts. */ |
+ |
+ __u8 reordering; /* Packet reordering metric. */ |
+ __u8 queue_shrunk; /* Write queue has been shrunk recently.*/ |
+ __u8 defer_accept; /* User waits for some data after accept() */ |
+ |
+/* RTT measurement */ |
+ __u8 backoff; /* backoff */ |
+ __u32 srtt; /* smothed round trip time << 3 */ |
+ __u32 mdev; /* medium deviation */ |
+ __u32 mdev_max; /* maximal mdev for the last rtt period */ |
+ __u32 rttvar; /* smoothed mdev_max */ |
+ __u32 rtt_seq; /* sequence number to update rttvar */ |
+ __u32 rto; /* retransmit timeout */ |
+ |
+ __u32 packets_out; /* Packets which are "in flight" */ |
+ __u32 left_out; /* Packets which leaved network */ |
+ __u32 retrans_out; /* Retransmitted packets out */ |
+ |
+ |
+/* |
+ * Slow start and congestion control (see also Nagle, and Karn & Partridge) |
+ */ |
+ __u32 snd_ssthresh; /* Slow start size threshold */ |
+ __u32 snd_cwnd; /* Sending congestion window */ |
+ __u16 snd_cwnd_cnt; /* Linear increase counter */ |
+ __u16 snd_cwnd_clamp; /* Do not allow snd_cwnd to grow above this */ |
+ __u32 snd_cwnd_used; |
+ __u32 snd_cwnd_stamp; |
+ |
+ /* Two commonly used timers in both sender and receiver paths. */ |
+ unsigned long timeout; |
+ struct timer_list retransmit_timer; /* Resend (no ack) */ |
+ struct timer_list delack_timer; /* Ack delay */ |
+ |
+ struct sk_buff_head out_of_order_queue; /* Out of order segments go here */ |
+ |
+ struct tcp_func *af_specific; /* Operations which are AF_INET{4,6} specific */ |
+ struct sk_buff *send_head; /* Front of stuff to transmit */ |
+ |
+ __u32 rcv_wnd; /* Current receiver window */ |
+ __u32 rcv_wup; /* rcv_nxt on last window update sent */ |
+ __u32 write_seq; /* Tail(+1) of data held in tcp send buffer */ |
+ __u32 pushed_seq; /* Last pushed seq, required to talk to windows */ |
+ __u32 copied_seq; /* Head of yet unread data */ |
+/* |
+ * Options received (usually on last packet, some only on SYN packets). |
+ */ |
+ char tstamp_ok, /* TIMESTAMP seen on SYN packet */ |
+ wscale_ok, /* Wscale seen on SYN packet */ |
+ sack_ok; /* SACK seen on SYN packet */ |
+ char saw_tstamp; /* Saw TIMESTAMP on last packet */ |
+ __u8 snd_wscale; /* Window scaling received from sender */ |
+ __u8 rcv_wscale; /* Window scaling to send to receiver */ |
+ __u8 nonagle; /* Disable Nagle algorithm? */ |
+ __u8 keepalive_probes; /* num of allowed keep alive probes */ |
+ |
+/* PAWS/RTTM data */ |
+ __u32 rcv_tsval; /* Time stamp value */ |
+ __u32 rcv_tsecr; /* Time stamp echo reply */ |
+ __u32 ts_recent; /* Time stamp to echo next */ |
+ long ts_recent_stamp;/* Time we stored ts_recent (for aging) */ |
+ |
+/* SACKs data */ |
+ __u16 user_mss; /* mss requested by user in ioctl */ |
+ __u8 dsack; /* D-SACK is scheduled */ |
+ __u8 eff_sacks; /* Size of SACK array to send with next packet */ |
+ struct tcp_sack_block duplicate_sack[1]; /* D-SACK block */ |
+ struct tcp_sack_block selective_acks[4]; /* The SACKS themselves*/ |
+ |
+ __u32 window_clamp; /* Maximal window to advertise */ |
+ __u32 rcv_ssthresh; /* Current window clamp */ |
+ __u8 probes_out; /* unanswered 0 window probes */ |
+ __u8 num_sacks; /* Number of SACK blocks */ |
+ __u16 advmss; /* Advertised MSS */ |
+ |
+ __u8 syn_retries; /* num of allowed syn retries */ |
+ __u8 ecn_flags; /* ECN status bits. */ |
+ __u16 prior_ssthresh; /* ssthresh saved at recovery start */ |
+ __u32 lost_out; /* Lost packets */ |
+ __u32 sacked_out; /* SACK'd packets */ |
+ __u32 fackets_out; /* FACK'd packets */ |
+ __u32 high_seq; /* snd_nxt at onset of congestion */ |
+ |
+ __u32 retrans_stamp; /* Timestamp of the last retransmit, |
+ * also used in SYN-SENT to remember stamp of |
+ * the first SYN. */ |
+ __u32 undo_marker; /* tracking retrans started here. */ |
+ int undo_retrans; /* number of undoable retransmissions. */ |
+ __u32 urg_seq; /* Seq of received urgent pointer */ |
+ __u16 urg_data; /* Saved octet of OOB data and control flags */ |
+ __u8 pending; /* Scheduled timer event */ |
+ __u8 urg_mode; /* In urgent mode */ |
+ __u32 snd_up; /* Urgent pointer */ |
+ |
+ /* The syn_wait_lock is necessary only to avoid tcp_get_info having |
+ * to grab the main lock sock while browsing the listening hash |
+ * (otherwise it's deadlock prone). |
+ * This lock is acquired in read mode only from tcp_get_info() and |
+ * it's acquired in write mode _only_ from code that is actively |
+ * changing the syn_wait_queue. All readers that are holding |
+ * the master sock lock don't need to grab this lock in read mode |
+ * too as the syn_wait_queue writes are always protected from |
+ * the main sock lock. |
+ */ |
+ rwlock_t syn_wait_lock; |
+ struct tcp_listen_opt *listen_opt; |
+ |
+ /* FIFO of established children */ |
+ struct open_request *accept_queue; |
+ struct open_request *accept_queue_tail; |
+ |
+ int write_pending; /* A write to socket waits to start. */ |
+ |
+ unsigned int keepalive_time; /* time before keep alive takes place */ |
+ unsigned int keepalive_intvl; /* time interval between keep alive probes */ |
+ int linger2; |
+ |
+ int frto_counter; /* Number of new acks after RTO */ |
+ __u32 frto_highmark; /* snd_nxt when RTO occurred */ |
+ |
+ unsigned long last_synq_overflow; |
+}; |
+ |
+/* WARNING: don't change the layout of the members in tcp_sock! */ |
+struct tcp_sock { |
+ struct sock sk; |
+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) |
+ struct ipv6_pinfo *pinet6; |
+#endif |
+ struct inet_opt inet; |
+ struct tcp_opt tcp; |
+}; |
+ |
+#define tcp_sk(__sk) (&((struct tcp_sock *)__sk)->tcp) |
+ |
+#endif |
+ |
+#endif /* _LINUX_TCP_H */ |
Index: linuxc26/include/linux/raw.h |
=================================================================== |
--- linuxc26/include/linux/raw.h (nonexistent) |
+++ linuxc26/include/linux/raw.h (revision 422) |
@@ -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 */ |
Index: linuxc26/include/linux/parser.h |
=================================================================== |
--- linuxc26/include/linux/parser.h (nonexistent) |
+++ linuxc26/include/linux/parser.h (revision 422) |
@@ -0,0 +1,21 @@ |
+struct match_token { |
+ int token; |
+ char *pattern; |
+}; |
+ |
+typedef struct match_token match_table_t[]; |
+ |
+enum {MAX_OPT_ARGS = 3}; |
+ |
+typedef struct { |
+ char *from; |
+ char *to; |
+} substring_t; |
+ |
+int match_token(char *s, match_table_t table, substring_t args[]); |
+ |
+int match_int(substring_t *, int *result); |
+int match_octal(substring_t *, int *result); |
+int match_hex(substring_t *, int *result); |
+void match_strcpy(char *, substring_t *); |
+char *match_strdup(substring_t *); |
Index: linuxc26/include/linux/prefetch.h |
=================================================================== |
--- linuxc26/include/linux/prefetch.h (nonexistent) |
+++ linuxc26/include/linux/prefetch.h (revision 422) |
@@ -0,0 +1,57 @@ |
+/* |
+ * Generic cache management functions. Everything is arch-specific, |
+ * but this header exists to make sure the defines/functions can be |
+ * used in a generic way. |
+ * |
+ * 2000-11-13 Arjan van de Ven <arjan@fenrus.demon.nl> |
+ * |
+ */ |
+ |
+#ifndef _LINUX_PREFETCH_H |
+#define _LINUX_PREFETCH_H |
+ |
+#include <asm/processor.h> |
+#include <asm/cache.h> |
+ |
+/* |
+ prefetch(x) attempts to pre-emptively get the memory pointed to |
+ by address "x" into the CPU L1 cache. |
+ prefetch(x) should not cause any kind of exception, prefetch(0) is |
+ specifically ok. |
+ |
+ prefetch() should be defined by the architecture, if not, the |
+ #define below provides a no-op define. |
+ |
+ There are 3 prefetch() macros: |
+ |
+ prefetch(x) - prefetches the cacheline at "x" for read |
+ prefetchw(x) - prefetches the cacheline at "x" for write |
+ spin_lock_prefetch(x) - prefectches the spinlock *x for taking |
+ |
+ there is also PREFETCH_STRIDE which is the architecure-prefered |
+ "lookahead" size for prefetching streamed operations. |
+ |
+*/ |
+ |
+/* |
+ * These cannot be do{}while(0) macros. See the mental gymnastics in |
+ * the loop macro. |
+ */ |
+ |
+#ifndef ARCH_HAS_PREFETCH |
+static inline void prefetch(const void *x) {;} |
+#endif |
+ |
+#ifndef ARCH_HAS_PREFETCHW |
+static inline void prefetchw(const void *x) {;} |
+#endif |
+ |
+#ifndef ARCH_HAS_SPINLOCK_PREFETCH |
+#define spin_lock_prefetch(x) prefetchw(x) |
+#endif |
+ |
+#ifndef PREFETCH_STRIDE |
+#define PREFETCH_STRIDE (4*L1_CACHE_BYTES) |
+#endif |
+ |
+#endif |
Index: linuxc26/include/linux/ide.h |
=================================================================== |
--- linuxc26/include/linux/ide.h (nonexistent) |
+++ linuxc26/include/linux/ide.h (revision 422) |
@@ -0,0 +1,1827 @@ |
+#ifndef _IDE_H |
+#define _IDE_H |
+/* |
+ * linux/include/linux/ide.h |
+ * |
+ * Copyright (C) 1994-2002 Linus Torvalds & authors |
+ */ |
+ |
+#include <linux/config.h> |
+#include <linux/init.h> |
+#include <linux/ioport.h> |
+#include <linux/hdreg.h> |
+#include <linux/hdsmart.h> |
+#include <linux/blkdev.h> |
+#include <linux/proc_fs.h> |
+#include <linux/interrupt.h> |
+#include <linux/bitops.h> |
+#include <linux/bio.h> |
+#include <linux/device.h> |
+#include <linux/pci.h> |
+#include <asm/byteorder.h> |
+#include <asm/system.h> |
+#include <asm/hdreg.h> |
+#include <asm/io.h> |
+#include <asm/semaphore.h> |
+ |
+#define DEBUG_PM |
+ |
+/* |
+ * This is the multiple IDE interface driver, as evolved from hd.c. |
+ * It supports up to four IDE interfaces, on one or more IRQs (usually 14 & 15). |
+ * There can be up to two drives per interface, as per the ATA-2 spec. |
+ * |
+ * Primary i/f: ide0: major=3; (hda) minor=0; (hdb) minor=64 |
+ * Secondary i/f: ide1: major=22; (hdc or hd1a) minor=0; (hdd or hd1b) minor=64 |
+ * Tertiary i/f: ide2: major=33; (hde) minor=0; (hdf) minor=64 |
+ * Quaternary i/f: ide3: major=34; (hdg) minor=0; (hdh) minor=64 |
+ */ |
+ |
+/****************************************************************************** |
+ * IDE driver configuration options (play with these as desired): |
+ * |
+ * REALLY_SLOW_IO can be defined in ide.c and ide-cd.c, if necessary |
+ */ |
+#define REALLY_FAST_IO /* define if ide ports are perfect */ |
+#define INITIAL_MULT_COUNT 0 /* off=0; on=2,4,8,16,32, etc.. */ |
+ |
+#ifndef SUPPORT_SLOW_DATA_PORTS /* 1 to support slow data ports */ |
+#define SUPPORT_SLOW_DATA_PORTS 1 /* 0 to reduce kernel size */ |
+#endif |
+#ifndef SUPPORT_VLB_SYNC /* 1 to support weird 32-bit chips */ |
+#define SUPPORT_VLB_SYNC 1 /* 0 to reduce kernel size */ |
+#endif |
+#ifndef DISK_RECOVERY_TIME /* off=0; on=access_delay_time */ |
+#define DISK_RECOVERY_TIME 0 /* for hardware that needs it */ |
+#endif |
+#ifndef OK_TO_RESET_CONTROLLER /* 1 needed for good error recovery */ |
+#define OK_TO_RESET_CONTROLLER 1 /* 0 for use with AH2372A/B interface */ |
+#endif |
+#ifndef FANCY_STATUS_DUMPS /* 1 for human-readable drive errors */ |
+#define FANCY_STATUS_DUMPS 1 /* 0 to reduce kernel size */ |
+#endif |
+ |
+#ifdef CONFIG_BLK_DEV_CMD640 |
+#if 0 /* change to 1 when debugging cmd640 problems */ |
+void cmd640_dump_regs (void); |
+#define CMD640_DUMP_REGS cmd640_dump_regs() /* for debugging cmd640 chipset */ |
+#endif |
+#endif /* CONFIG_BLK_DEV_CMD640 */ |
+ |
+#ifndef DISABLE_IRQ_NOSYNC |
+#define DISABLE_IRQ_NOSYNC 0 |
+#endif |
+ |
+/* |
+ * Used to indicate "no IRQ", should be a value that cannot be an IRQ |
+ * number. |
+ */ |
+ |
+#define IDE_NO_IRQ (-1) |
+ |
+/* |
+ * IDE_DRIVE_CMD is used to implement many features of the hdparm utility |
+ */ |
+#define IDE_DRIVE_CMD 99 /* (magic) undef to reduce kernel size*/ |
+ |
+#define IDE_DRIVE_TASK 98 |
+ |
+/* |
+ * IDE_DRIVE_TASKFILE is used to implement many features needed for raw tasks |
+ */ |
+#define IDE_DRIVE_TASKFILE 97 |
+ |
+/* |
+ * "No user-serviceable parts" beyond this point :) |
+ *****************************************************************************/ |
+ |
+typedef unsigned char byte; /* used everywhere */ |
+ |
+/* |
+ * Probably not wise to fiddle with these |
+ */ |
+#define ERROR_MAX 8 /* Max read/write errors per sector */ |
+#define ERROR_RESET 3 /* Reset controller every 4th retry */ |
+#define ERROR_RECAL 1 /* Recalibrate every 2nd retry */ |
+ |
+/* |
+ * Tune flags |
+ */ |
+#define IDE_TUNE_NOAUTO 2 |
+#define IDE_TUNE_AUTO 1 |
+#define IDE_TUNE_DEFAULT 0 |
+ |
+/* |
+ * state flags |
+ */ |
+ |
+#define DMA_PIO_RETRY 1 /* retrying in PIO */ |
+ |
+/* |
+ * Ensure that various configuration flags have compatible settings |
+ */ |
+#ifdef REALLY_SLOW_IO |
+#undef REALLY_FAST_IO |
+#endif |
+ |
+#define HWIF(drive) ((ide_hwif_t *)((drive)->hwif)) |
+#define HWGROUP(drive) ((ide_hwgroup_t *)(HWIF(drive)->hwgroup)) |
+ |
+/* |
+ * Definitions for accessing IDE controller registers |
+ */ |
+#define IDE_NR_PORTS (10) |
+ |
+#define IDE_DATA_OFFSET (0) |
+#define IDE_ERROR_OFFSET (1) |
+#define IDE_NSECTOR_OFFSET (2) |
+#define IDE_SECTOR_OFFSET (3) |
+#define IDE_LCYL_OFFSET (4) |
+#define IDE_HCYL_OFFSET (5) |
+#define IDE_SELECT_OFFSET (6) |
+#define IDE_STATUS_OFFSET (7) |
+#define IDE_CONTROL_OFFSET (8) |
+#define IDE_IRQ_OFFSET (9) |
+ |
+#define IDE_FEATURE_OFFSET IDE_ERROR_OFFSET |
+#define IDE_COMMAND_OFFSET IDE_STATUS_OFFSET |
+ |
+#define IDE_DATA_OFFSET_HOB (0) |
+#define IDE_ERROR_OFFSET_HOB (1) |
+#define IDE_NSECTOR_OFFSET_HOB (2) |
+#define IDE_SECTOR_OFFSET_HOB (3) |
+#define IDE_LCYL_OFFSET_HOB (4) |
+#define IDE_HCYL_OFFSET_HOB (5) |
+#define IDE_SELECT_OFFSET_HOB (6) |
+#define IDE_CONTROL_OFFSET_HOB (7) |
+ |
+#define IDE_FEATURE_OFFSET_HOB IDE_ERROR_OFFSET_HOB |
+ |
+#define IDE_DATA_REG (HWIF(drive)->io_ports[IDE_DATA_OFFSET]) |
+#define IDE_ERROR_REG (HWIF(drive)->io_ports[IDE_ERROR_OFFSET]) |
+#define IDE_NSECTOR_REG (HWIF(drive)->io_ports[IDE_NSECTOR_OFFSET]) |
+#define IDE_SECTOR_REG (HWIF(drive)->io_ports[IDE_SECTOR_OFFSET]) |
+#define IDE_LCYL_REG (HWIF(drive)->io_ports[IDE_LCYL_OFFSET]) |
+#define IDE_HCYL_REG (HWIF(drive)->io_ports[IDE_HCYL_OFFSET]) |
+#define IDE_SELECT_REG (HWIF(drive)->io_ports[IDE_SELECT_OFFSET]) |
+#define IDE_STATUS_REG (HWIF(drive)->io_ports[IDE_STATUS_OFFSET]) |
+#define IDE_CONTROL_REG (HWIF(drive)->io_ports[IDE_CONTROL_OFFSET]) |
+#define IDE_IRQ_REG (HWIF(drive)->io_ports[IDE_IRQ_OFFSET]) |
+ |
+#define IDE_DATA_REG_HOB (HWIF(drive)->io_ports[IDE_DATA_OFFSET]) |
+#define IDE_ERROR_REG_HOB (HWIF(drive)->io_ports[IDE_ERROR_OFFSET]) |
+#define IDE_NSECTOR_REG_HOB (HWIF(drive)->io_ports[IDE_NSECTOR_OFFSET]) |
+#define IDE_SECTOR_REG_HOB (HWIF(drive)->io_ports[IDE_SECTOR_OFFSET]) |
+#define IDE_LCYL_REG_HOB (HWIF(drive)->io_ports[IDE_LCYL_OFFSET]) |
+#define IDE_HCYL_REG_HOB (HWIF(drive)->io_ports[IDE_HCYL_OFFSET]) |
+#define IDE_SELECT_REG_HOB (HWIF(drive)->io_ports[IDE_SELECT_OFFSET]) |
+#define IDE_STATUS_REG_HOB (HWIF(drive)->io_ports[IDE_STATUS_OFFSET]) |
+#define IDE_CONTROL_REG_HOB (HWIF(drive)->io_ports[IDE_CONTROL_OFFSET]) |
+ |
+#define IDE_FEATURE_REG IDE_ERROR_REG |
+#define IDE_COMMAND_REG IDE_STATUS_REG |
+#define IDE_ALTSTATUS_REG IDE_CONTROL_REG |
+#define IDE_IREASON_REG IDE_NSECTOR_REG |
+#define IDE_BCOUNTL_REG IDE_LCYL_REG |
+#define IDE_BCOUNTH_REG IDE_HCYL_REG |
+ |
+#define OK_STAT(stat,good,bad) (((stat)&((good)|(bad)))==(good)) |
+#define BAD_R_STAT (BUSY_STAT | ERR_STAT) |
+#define BAD_W_STAT (BAD_R_STAT | WRERR_STAT) |
+#define BAD_STAT (BAD_R_STAT | DRQ_STAT) |
+#define DRIVE_READY (READY_STAT | SEEK_STAT) |
+#define DATA_READY (DRQ_STAT) |
+ |
+#define BAD_CRC (ABRT_ERR | ICRC_ERR) |
+ |
+#define SATA_NR_PORTS (3) /* 16 possible ?? */ |
+ |
+#define SATA_STATUS_OFFSET (0) |
+#define SATA_STATUS_REG (HWIF(drive)->sata_scr[SATA_STATUS_OFFSET]) |
+#define SATA_ERROR_OFFSET (1) |
+#define SATA_ERROR_REG (HWIF(drive)->sata_scr[SATA_ERROR_OFFSET]) |
+#define SATA_CONTROL_OFFSET (2) |
+#define SATA_CONTROL_REG (HWIF(drive)->sata_scr[SATA_CONTROL_OFFSET]) |
+ |
+#define SATA_MISC_OFFSET (0) |
+#define SATA_MISC_REG (HWIF(drive)->sata_misc[SATA_MISC_OFFSET]) |
+#define SATA_PHY_OFFSET (1) |
+#define SATA_PHY_REG (HWIF(drive)->sata_misc[SATA_PHY_OFFSET]) |
+#define SATA_IEN_OFFSET (2) |
+#define SATA_IEN_REG (HWIF(drive)->sata_misc[SATA_IEN_OFFSET]) |
+ |
+/* |
+ * Our Physical Region Descriptor (PRD) table should be large enough |
+ * to handle the biggest I/O request we are likely to see. Since requests |
+ * can have no more than 256 sectors, and since the typical blocksize is |
+ * two or more sectors, we could get by with a limit of 128 entries here for |
+ * the usual worst case. Most requests seem to include some contiguous blocks, |
+ * further reducing the number of table entries required. |
+ * |
+ * The driver reverts to PIO mode for individual requests that exceed |
+ * this limit (possible with 512 byte blocksizes, eg. MSDOS f/s), so handling |
+ * 100% of all crazy scenarios here is not necessary. |
+ * |
+ * As it turns out though, we must allocate a full 4KB page for this, |
+ * so the two PRD tables (ide0 & ide1) will each get half of that, |
+ * allowing each to have about 256 entries (8 bytes each) from this. |
+ */ |
+#define PRD_BYTES 8 |
+#define PRD_ENTRIES (PAGE_SIZE / (2 * PRD_BYTES)) |
+ |
+/* |
+ * Some more useful definitions |
+ */ |
+#define IDE_MAJOR_NAME "hd" /* the same for all i/f; see also genhd.c */ |
+#define MAJOR_NAME IDE_MAJOR_NAME |
+#define PARTN_BITS 6 /* number of minor dev bits for partitions */ |
+#define PARTN_MASK ((1<<PARTN_BITS)-1) /* a useful bit mask */ |
+#define MAX_DRIVES 2 /* per interface; 2 assumed by lots of code */ |
+#define SECTOR_SIZE 512 |
+#define SECTOR_WORDS (SECTOR_SIZE / 4) /* number of 32bit words per sector */ |
+#define IDE_LARGE_SEEK(b1,b2,t) (((b1) > (b2) + (t)) || ((b2) > (b1) + (t))) |
+#define IDE_MIN(a,b) ((a)<(b) ? (a):(b)) |
+#define IDE_MAX(a,b) ((a)>(b) ? (a):(b)) |
+ |
+/* |
+ * Timeouts for various operations: |
+ */ |
+#define WAIT_DRQ (5*HZ/100) /* 50msec - spec allows up to 20ms */ |
+#if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE) |
+#define WAIT_READY (5*HZ) /* 5sec - some laptops are very slow */ |
+#else |
+#define WAIT_READY (3*HZ/100) /* 30msec - should be instantaneous */ |
+#endif /* CONFIG_APM || CONFIG_APM_MODULE */ |
+#define WAIT_PIDENTIFY (10*HZ) /* 10sec - should be less than 3ms (?), if all ATAPI CD is closed at boot */ |
+#define WAIT_WORSTCASE (30*HZ) /* 30sec - worst case when spinning up */ |
+#define WAIT_CMD (10*HZ) /* 10sec - maximum wait for an IRQ to happen */ |
+#define WAIT_MIN_SLEEP (2*HZ/100) /* 20msec - minimum sleep time */ |
+ |
+#define HOST(hwif,chipset) \ |
+{ \ |
+ return ((hwif)->chipset == chipset) ? 1 : 0; \ |
+} |
+ |
+/* |
+ * Check for an interrupt and acknowledge the interrupt status |
+ */ |
+struct hwif_s; |
+typedef int (ide_ack_intr_t)(struct hwif_s *); |
+ |
+#ifndef NO_DMA |
+#define NO_DMA 255 |
+#endif |
+ |
+/* |
+ * hwif_chipset_t is used to keep track of the specific hardware |
+ * chipset used by each IDE interface, if known. |
+ */ |
+typedef enum { ide_unknown, ide_generic, ide_pci, |
+ ide_cmd640, ide_dtc2278, ide_ali14xx, |
+ ide_qd65xx, ide_umc8672, ide_ht6560b, |
+ ide_pdc4030, ide_rz1000, ide_trm290, |
+ ide_cmd646, ide_cy82c693, ide_4drives, |
+ ide_pmac, ide_etrax100, ide_acorn, |
+ ide_pc9800 |
+} hwif_chipset_t; |
+ |
+/* |
+ * Structure to hold all information about the location of this port |
+ */ |
+typedef struct hw_regs_s { |
+ unsigned long io_ports[IDE_NR_PORTS]; /* task file registers */ |
+ int irq; /* our irq number */ |
+ int dma; /* our dma entry */ |
+ ide_ack_intr_t *ack_intr; /* acknowledge interrupt */ |
+ void *priv; /* interface specific data */ |
+ hwif_chipset_t chipset; |
+ unsigned long sata_scr[SATA_NR_PORTS]; |
+ unsigned long sata_misc[SATA_NR_PORTS]; |
+} hw_regs_t; |
+ |
+/* |
+ * Register new hardware with ide |
+ */ |
+int ide_register_hw(hw_regs_t *hw, struct hwif_s **hwifp); |
+ |
+/* |
+ * Set up hw_regs_t structure before calling ide_register_hw (optional) |
+ */ |
+void ide_setup_ports( hw_regs_t *hw, |
+ unsigned long base, |
+ int *offsets, |
+ unsigned long ctrl, |
+ unsigned long intr, |
+ ide_ack_intr_t *ack_intr, |
+#if 0 |
+ ide_io_ops_t *iops, |
+#endif |
+ int irq); |
+ |
+#include <asm/ide.h> |
+ |
+/* Currently only m68k, apus and m8xx need it */ |
+#ifndef IDE_ARCH_ACK_INTR |
+# define ide_ack_intr(hwif) (1) |
+#endif |
+ |
+/* Currently only Atari needs it */ |
+#ifndef IDE_ARCH_LOCK |
+# define ide_release_lock() do {} while (0) |
+# define ide_get_lock(hdlr, data) do {} while (0) |
+#endif /* IDE_ARCH_LOCK */ |
+ |
+/* |
+ * Now for the data we need to maintain per-drive: ide_drive_t |
+ */ |
+ |
+#define ide_scsi 0x21 |
+#define ide_disk 0x20 |
+#define ide_optical 0x7 |
+#define ide_cdrom 0x5 |
+#define ide_tape 0x1 |
+#define ide_floppy 0x0 |
+ |
+/* |
+ * Special Driver Flags |
+ * |
+ * set_geometry : respecify drive geometry |
+ * recalibrate : seek to cyl 0 |
+ * set_multmode : set multmode count |
+ * set_tune : tune interface for drive |
+ * serviced : service command |
+ * reserved : unused |
+ */ |
+typedef union { |
+ unsigned all : 8; |
+ struct { |
+#if defined(__LITTLE_ENDIAN_BITFIELD) |
+ unsigned set_geometry : 1; |
+ unsigned recalibrate : 1; |
+ unsigned set_multmode : 1; |
+ unsigned set_tune : 1; |
+ unsigned serviced : 1; |
+ unsigned reserved : 3; |
+#elif defined(__BIG_ENDIAN_BITFIELD) |
+ unsigned reserved : 3; |
+ unsigned serviced : 1; |
+ unsigned set_tune : 1; |
+ unsigned set_multmode : 1; |
+ unsigned recalibrate : 1; |
+ unsigned set_geometry : 1; |
+#else |
+#error "Please fix <asm/byteorder.h>" |
+#endif |
+ } b; |
+} special_t; |
+ |
+/* |
+ * ATA DATA Register Special. |
+ * ATA NSECTOR Count Register(). |
+ * ATAPI Byte Count Register. |
+ * Channel index ordering pairs. |
+ */ |
+typedef union { |
+ unsigned all :16; |
+ struct { |
+#if defined(__LITTLE_ENDIAN_BITFIELD) |
+ unsigned low :8; /* LSB */ |
+ unsigned high :8; /* MSB */ |
+#elif defined(__BIG_ENDIAN_BITFIELD) |
+ unsigned high :8; /* MSB */ |
+ unsigned low :8; /* LSB */ |
+#else |
+#error "Please fix <asm/byteorder.h>" |
+#endif |
+ } b; |
+} ata_nsector_t, ata_data_t, atapi_bcount_t, ata_index_t; |
+ |
+/* |
+ * ATA-IDE Error Register |
+ * |
+ * mark : Bad address mark |
+ * tzero : Couldn't find track 0 |
+ * abrt : Aborted Command |
+ * mcr : Media Change Request |
+ * id : ID field not found |
+ * mce : Media Change Event |
+ * ecc : Uncorrectable ECC error |
+ * bdd : dual meaing |
+ */ |
+typedef union { |
+ unsigned all :8; |
+ struct { |
+#if defined(__LITTLE_ENDIAN_BITFIELD) |
+ unsigned mark :1; |
+ unsigned tzero :1; |
+ unsigned abrt :1; |
+ unsigned mcr :1; |
+ unsigned id :1; |
+ unsigned mce :1; |
+ unsigned ecc :1; |
+ unsigned bdd :1; |
+#elif defined(__BIG_ENDIAN_BITFIELD) |
+ unsigned bdd :1; |
+ unsigned ecc :1; |
+ unsigned mce :1; |
+ unsigned id :1; |
+ unsigned mcr :1; |
+ unsigned abrt :1; |
+ unsigned tzero :1; |
+ unsigned mark :1; |
+#else |
+#error "Please fix <asm/byteorder.h>" |
+#endif |
+ } b; |
+} ata_error_t; |
+ |
+/* |
+ * ATA-IDE Select Register, aka Device-Head |
+ * |
+ * head : always zeros here |
+ * unit : drive select number: 0/1 |
+ * bit5 : always 1 |
+ * lba : using LBA instead of CHS |
+ * bit7 : always 1 |
+ */ |
+typedef union { |
+ unsigned all : 8; |
+ struct { |
+#if defined(__LITTLE_ENDIAN_BITFIELD) |
+ unsigned head : 4; |
+ unsigned unit : 1; |
+ unsigned bit5 : 1; |
+ unsigned lba : 1; |
+ unsigned bit7 : 1; |
+#elif defined(__BIG_ENDIAN_BITFIELD) |
+ unsigned bit7 : 1; |
+ unsigned lba : 1; |
+ unsigned bit5 : 1; |
+ unsigned unit : 1; |
+ unsigned head : 4; |
+#else |
+#error "Please fix <asm/byteorder.h>" |
+#endif |
+ } b; |
+} select_t, ata_select_t; |
+ |
+/* |
+ * The ATA-IDE Status Register. |
+ * The ATAPI Status Register. |
+ * |
+ * check : Error occurred |
+ * idx : Index Error |
+ * corr : Correctable error occurred |
+ * drq : Data is request by the device |
+ * dsc : Disk Seek Complete : ata |
+ * : Media access command finished : atapi |
+ * df : Device Fault : ata |
+ * : Reserved : atapi |
+ * drdy : Ready, Command Mode Capable : ata |
+ * : Ignored for ATAPI commands : atapi |
+ * bsy : Disk is Busy |
+ * : The device has access to the command block |
+ */ |
+typedef union { |
+ unsigned all :8; |
+ struct { |
+#if defined(__LITTLE_ENDIAN_BITFIELD) |
+ unsigned check :1; |
+ unsigned idx :1; |
+ unsigned corr :1; |
+ unsigned drq :1; |
+ unsigned dsc :1; |
+ unsigned df :1; |
+ unsigned drdy :1; |
+ unsigned bsy :1; |
+#elif defined(__BIG_ENDIAN_BITFIELD) |
+ unsigned bsy :1; |
+ unsigned drdy :1; |
+ unsigned df :1; |
+ unsigned dsc :1; |
+ unsigned drq :1; |
+ unsigned corr :1; |
+ unsigned idx :1; |
+ unsigned check :1; |
+#else |
+#error "Please fix <asm/byteorder.h>" |
+#endif |
+ } b; |
+} ata_status_t, atapi_status_t; |
+ |
+/* |
+ * ATA-IDE Control Register |
+ * |
+ * bit0 : Should be set to zero |
+ * nIEN : device INTRQ to host |
+ * SRST : host soft reset bit |
+ * bit3 : ATA-2 thingy, Should be set to 1 |
+ * reserved456 : Reserved |
+ * HOB : 48-bit address ordering, High Ordered Bit |
+ */ |
+typedef union { |
+ unsigned all : 8; |
+ struct { |
+#if defined(__LITTLE_ENDIAN_BITFIELD) |
+ unsigned bit0 : 1; |
+ unsigned nIEN : 1; |
+ unsigned SRST : 1; |
+ unsigned bit3 : 1; |
+ unsigned reserved456 : 3; |
+ unsigned HOB : 1; |
+#elif defined(__BIG_ENDIAN_BITFIELD) |
+ unsigned HOB : 1; |
+ unsigned reserved456 : 3; |
+ unsigned bit3 : 1; |
+ unsigned SRST : 1; |
+ unsigned nIEN : 1; |
+ unsigned bit0 : 1; |
+#else |
+#error "Please fix <asm/byteorder.h>" |
+#endif |
+ } b; |
+} ata_control_t; |
+ |
+/* |
+ * ATAPI Feature Register |
+ * |
+ * dma : Using DMA or PIO |
+ * reserved321 : Reserved |
+ * reserved654 : Reserved (Tag Type) |
+ * reserved7 : Reserved |
+ */ |
+typedef union { |
+ unsigned all :8; |
+ struct { |
+#if defined(__LITTLE_ENDIAN_BITFIELD) |
+ unsigned dma :1; |
+ unsigned reserved321 :3; |
+ unsigned reserved654 :3; |
+ unsigned reserved7 :1; |
+#elif defined(__BIG_ENDIAN_BITFIELD) |
+ unsigned reserved7 :1; |
+ unsigned reserved654 :3; |
+ unsigned reserved321 :3; |
+ unsigned dma :1; |
+#else |
+#error "Please fix <asm/byteorder.h>" |
+#endif |
+ } b; |
+} atapi_feature_t; |
+ |
+/* |
+ * ATAPI Interrupt Reason Register. |
+ * |
+ * cod : Information transferred is command (1) or data (0) |
+ * io : The device requests us to read (1) or write (0) |
+ * reserved : Reserved |
+ */ |
+typedef union { |
+ unsigned all :8; |
+ struct { |
+#if defined(__LITTLE_ENDIAN_BITFIELD) |
+ unsigned cod :1; |
+ unsigned io :1; |
+ unsigned reserved :6; |
+#elif defined(__BIG_ENDIAN_BITFIELD) |
+ unsigned reserved :6; |
+ unsigned io :1; |
+ unsigned cod :1; |
+#else |
+#error "Please fix <asm/byteorder.h>" |
+#endif |
+ } b; |
+} atapi_ireason_t; |
+ |
+/* |
+ * The ATAPI error register. |
+ * |
+ * ili : Illegal Length Indication |
+ * eom : End Of Media Detected |
+ * abrt : Aborted command - As defined by ATA |
+ * mcr : Media Change Requested - As defined by ATA |
+ * sense_key : Sense key of the last failed packet command |
+ */ |
+typedef union { |
+ unsigned all :8; |
+ struct { |
+#if defined(__LITTLE_ENDIAN_BITFIELD) |
+ unsigned ili :1; |
+ unsigned eom :1; |
+ unsigned abrt :1; |
+ unsigned mcr :1; |
+ unsigned sense_key :4; |
+#elif defined(__BIG_ENDIAN_BITFIELD) |
+ unsigned sense_key :4; |
+ unsigned mcr :1; |
+ unsigned abrt :1; |
+ unsigned eom :1; |
+ unsigned ili :1; |
+#else |
+#error "Please fix <asm/byteorder.h>" |
+#endif |
+ } b; |
+} atapi_error_t; |
+ |
+/* |
+ * ATAPI floppy Drive Select Register |
+ * |
+ * sam_lun : Logical unit number |
+ * reserved3 : Reserved |
+ * drv : The responding drive will be drive 0 (0) or drive 1 (1) |
+ * one5 : Should be set to 1 |
+ * reserved6 : Reserved |
+ * one7 : Should be set to 1 |
+ */ |
+typedef union { |
+ unsigned all :8; |
+ struct { |
+#if defined(__LITTLE_ENDIAN_BITFIELD) |
+ unsigned sam_lun :3; |
+ unsigned reserved3 :1; |
+ unsigned drv :1; |
+ unsigned one5 :1; |
+ unsigned reserved6 :1; |
+ unsigned one7 :1; |
+#elif defined(__BIG_ENDIAN_BITFIELD) |
+ unsigned one7 :1; |
+ unsigned reserved6 :1; |
+ unsigned one5 :1; |
+ unsigned drv :1; |
+ unsigned reserved3 :1; |
+ unsigned sam_lun :3; |
+#else |
+#error "Please fix <asm/byteorder.h>" |
+#endif |
+ } b; |
+} atapi_select_t; |
+ |
+/* |
+ * Status returned from various ide_ functions |
+ */ |
+typedef enum { |
+ ide_stopped, /* no drive operation was started */ |
+ ide_started, /* a drive operation was started, handler was set */ |
+ ide_released, /* as ide_started, but bus also released */ |
+} ide_startstop_t; |
+ |
+struct ide_driver_s; |
+struct ide_settings_s; |
+ |
+typedef struct ide_drive_s { |
+ char name[4]; /* drive name, such as "hda" */ |
+ char driver_req[10]; /* requests specific driver */ |
+ |
+ request_queue_t *queue; /* request queue */ |
+ |
+ struct request *rq; /* current request */ |
+ struct ide_drive_s *next; /* circular list of hwgroup drives */ |
+ struct ide_driver_s *driver;/* (ide_driver_t *) */ |
+ void *driver_data; /* extra driver data */ |
+ struct hd_driveid *id; /* drive model identification info */ |
+ struct proc_dir_entry *proc; /* /proc/ide/ directory entry */ |
+ struct ide_settings_s *settings;/* /proc/ide/ drive settings */ |
+ char devfs_name[64]; /* devfs crap */ |
+ |
+ struct hwif_s *hwif; /* actually (ide_hwif_t *) */ |
+ |
+ unsigned long sleep; /* sleep until this time */ |
+ unsigned long service_start; /* time we started last request */ |
+ unsigned long service_time; /* service time of last request */ |
+ unsigned long timeout; /* max time to wait for irq */ |
+ |
+ special_t special; /* special action flags */ |
+ select_t select; /* basic drive/head select reg value */ |
+ |
+ u8 keep_settings; /* restore settings after drive reset */ |
+ u8 autodma; /* device can safely use dma on host */ |
+ u8 using_dma; /* disk is using dma for read/write */ |
+ u8 using_tcq; /* disk is using queueing */ |
+ u8 retry_pio; /* retrying dma capable host in pio */ |
+ u8 state; /* retry state */ |
+ u8 waiting_for_dma; /* dma currently in progress */ |
+ u8 unmask; /* okay to unmask other irqs */ |
+ u8 slow; /* slow data port */ |
+ u8 bswap; /* byte swap data */ |
+ u8 dsc_overlap; /* DSC overlap */ |
+ u8 nice1; /* give potential excess bandwidth */ |
+ |
+ unsigned present : 1; /* drive is physically present */ |
+ unsigned dead : 1; /* device ejected hint */ |
+ unsigned id_read : 1; /* 1=id read from disk 0 = synthetic */ |
+ unsigned noprobe : 1; /* from: hdx=noprobe */ |
+ unsigned removable : 1; /* 1 if need to do check_media_change */ |
+ unsigned attach : 1; /* needed for removable devices */ |
+ unsigned is_flash : 1; /* 1 if probed as flash */ |
+ unsigned forced_geom : 1; /* 1 if hdx=c,h,s was given at boot */ |
+ unsigned no_unmask : 1; /* disallow setting unmask bit */ |
+ unsigned no_io_32bit : 1; /* disallow enabling 32bit I/O */ |
+ unsigned nobios : 1; /* do not probe bios for drive */ |
+ unsigned atapi_overlap : 1; /* ATAPI overlap (not supported) */ |
+ unsigned nice0 : 1; /* give obvious excess bandwidth */ |
+ unsigned nice2 : 1; /* give a share in our own bandwidth */ |
+ unsigned doorlocking : 1; /* for removable only: door lock/unlock works */ |
+ unsigned autotune : 2; /* 0=default, 1=autotune, 2=noautotune */ |
+ unsigned remap_0_to_1 : 1; /* 0=noremap, 1=remap 0->1 (for EZDrive) */ |
+ unsigned ata_flash : 1; /* 1=present, 0=default */ |
+ unsigned blocked : 1; /* 1=powermanagment told us not to do anything, so sleep nicely */ |
+ unsigned vdma : 1; /* 1=doing PIO over DMA 0=doing normal DMA */ |
+ unsigned addressing; /* : 3; |
+ * 0=28-bit |
+ * 1=48-bit |
+ * 2=48-bit doing 28-bit |
+ * 3=64-bit |
+ */ |
+ |
+ u8 scsi; /* 0=default, 1=skip current ide-subdriver for ide-scsi emulation */ |
+ u8 quirk_list; /* considered quirky, set for a specific host */ |
+ u8 suspend_reset; /* drive suspend mode flag, soft-reset recovers */ |
+ u8 init_speed; /* transfer rate set at boot */ |
+ u8 pio_speed; /* unused by core, used by some drivers for fallback from DMA */ |
+ u8 current_speed; /* current transfer rate set */ |
+ u8 dn; /* now wide spread use */ |
+ u8 wcache; /* status of write cache */ |
+ u8 acoustic; /* acoustic management */ |
+ u8 media; /* disk, cdrom, tape, floppy, ... */ |
+ u8 ctl; /* "normal" value for IDE_CONTROL_REG */ |
+ u8 ready_stat; /* min status value for drive ready */ |
+ u8 mult_count; /* current multiple sector setting */ |
+ u8 mult_req; /* requested multiple sector setting */ |
+ u8 tune_req; /* requested drive tuning setting */ |
+ u8 io_32bit; /* 0=16-bit, 1=32-bit, 2/3=32bit+sync */ |
+ u8 bad_wstat; /* used for ignoring WRERR_STAT */ |
+ u8 nowerr; /* used for ignoring WRERR_STAT */ |
+ u8 sect0; /* offset of first sector for DM6:DDO */ |
+ u8 head; /* "real" number of heads */ |
+ u8 sect; /* "real" sectors per track */ |
+ u8 bios_head; /* BIOS/fdisk/LILO number of heads */ |
+ u8 bios_sect; /* BIOS/fdisk/LILO sectors per track */ |
+ u8 queue_depth; /* max queue depth */ |
+ |
+ unsigned int bios_cyl; /* BIOS/fdisk/LILO number of cyls */ |
+ unsigned int cyl; /* "real" number of cyls */ |
+ unsigned int drive_data; /* use by tuneproc/selectproc */ |
+ unsigned int usage; /* current "open()" count for drive */ |
+ unsigned int failures; /* current failure count */ |
+ unsigned int max_failures; /* maximum allowed failure count */ |
+ |
+ u64 capacity64; /* total number of sectors */ |
+ |
+ int last_lun; /* last logical unit */ |
+ int forced_lun; /* if hdxlun was given at boot */ |
+ int lun; /* logical unit */ |
+ int crc_count; /* crc counter to reduce drive speed */ |
+ struct list_head list; |
+ struct device gendev; |
+ struct semaphore gendev_rel_sem; /* to deal with device release() */ |
+ struct gendisk *disk; |
+} ide_drive_t; |
+ |
+typedef struct ide_pio_ops_s { |
+ void (*ata_input_data)(ide_drive_t *, void *, u32); |
+ void (*ata_output_data)(ide_drive_t *, void *, u32); |
+ |
+ void (*atapi_input_bytes)(ide_drive_t *, void *, u32); |
+ void (*atapi_output_bytes)(ide_drive_t *, void *, u32); |
+} ide_pio_ops_t; |
+ |
+typedef struct ide_dma_ops_s { |
+ /* insert dma operations here! */ |
+ int (*ide_dma_read)(ide_drive_t *drive); |
+ int (*ide_dma_write)(ide_drive_t *drive); |
+ int (*ide_dma_begin)(ide_drive_t *drive); |
+ int (*ide_dma_end)(ide_drive_t *drive); |
+ int (*ide_dma_check)(ide_drive_t *drive); |
+ int (*ide_dma_on)(ide_drive_t *drive); |
+ int (*ide_dma_off)(ide_drive_t *drive); |
+ int (*ide_dma_off_quietly)(ide_drive_t *drive); |
+ int (*ide_dma_test_irq)(ide_drive_t *drive); |
+ int (*ide_dma_host_on)(ide_drive_t *drive); |
+ int (*ide_dma_host_off)(ide_drive_t *drive); |
+ int (*ide_dma_bad_drive)(ide_drive_t *drive); |
+ int (*ide_dma_good_drive)(ide_drive_t *drive); |
+ int (*ide_dma_count)(ide_drive_t *drive); |
+ int (*ide_dma_verbose)(ide_drive_t *drive); |
+ int (*ide_dma_retune)(ide_drive_t *drive); |
+ int (*ide_dma_lostirq)(ide_drive_t *drive); |
+ int (*ide_dma_timeout)(ide_drive_t *drive); |
+ /* dma queued operations */ |
+ int (*ide_dma_queued_on)(ide_drive_t *drive); |
+ int (*ide_dma_queued_off)(ide_drive_t *drive); |
+ ide_startstop_t (*ide_dma_queued_read)(ide_drive_t *drive); |
+ ide_startstop_t (*ide_dma_queued_write)(ide_drive_t *drive); |
+ ide_startstop_t (*ide_dma_queued_start)(ide_drive_t *drive); |
+} ide_dma_ops_t; |
+ |
+/* |
+ * mapping stuff, prepare for highmem... |
+ * |
+ * temporarily mapping a (possible) highmem bio for PIO transfer |
+ */ |
+#ifndef CONFIG_IDE_TASKFILE_IO |
+ |
+#define ide_rq_offset(rq) \ |
+ (((rq)->hard_cur_sectors - (rq)->current_nr_sectors) << 9) |
+ |
+/* |
+ * taskfiles really should use hard_cur_sectors as well! |
+ */ |
+#define task_rq_offset(rq) \ |
+ (((rq)->nr_sectors - (rq)->current_nr_sectors) * SECTOR_SIZE) |
+ |
+static inline void *ide_map_buffer(struct request *rq, unsigned long *flags) |
+{ |
+ /* |
+ * fs request |
+ */ |
+ if (rq->bio) |
+ return bio_kmap_irq(rq->bio, flags) + ide_rq_offset(rq); |
+ |
+ /* |
+ * task request |
+ */ |
+ return rq->buffer + task_rq_offset(rq); |
+} |
+ |
+static inline void ide_unmap_buffer(struct request *rq, char *buffer, unsigned long *flags) |
+{ |
+ if (rq->bio) |
+ bio_kunmap_irq(buffer, flags); |
+} |
+#endif /* !CONFIG_IDE_TASKFILE_IO */ |
+ |
+#define IDE_CHIPSET_PCI_MASK \ |
+ ((1<<ide_pci)|(1<<ide_cmd646)|(1<<ide_ali14xx)) |
+#define IDE_CHIPSET_IS_PCI(c) ((IDE_CHIPSET_PCI_MASK >> (c)) & 1) |
+ |
+struct ide_pci_device_s; |
+ |
+typedef struct hwif_s { |
+ struct hwif_s *next; /* for linked-list in ide_hwgroup_t */ |
+ struct hwif_s *mate; /* other hwif from same PCI chip */ |
+ struct hwgroup_s *hwgroup; /* actually (ide_hwgroup_t *) */ |
+ struct proc_dir_entry *proc; /* /proc/ide/ directory entry */ |
+ |
+ char name[6]; /* name of interface, eg. "ide0" */ |
+ |
+ /* task file registers for pata and sata */ |
+ unsigned long io_ports[IDE_NR_PORTS]; |
+ unsigned long sata_scr[SATA_NR_PORTS]; |
+ unsigned long sata_misc[SATA_NR_PORTS]; |
+ |
+ hw_regs_t hw; /* Hardware info */ |
+ ide_drive_t drives[MAX_DRIVES]; /* drive info */ |
+ |
+ u8 major; /* our major number */ |
+ u8 index; /* 0 for ide0; 1 for ide1; ... */ |
+ u8 channel; /* for dual-port chips: 0=primary, 1=secondary */ |
+ u8 straight8; /* Alan's straight 8 check */ |
+ u8 bus_state; /* power state of the IDE bus */ |
+ |
+ u8 atapi_dma; /* host supports atapi_dma */ |
+ u8 ultra_mask; |
+ u8 mwdma_mask; |
+ u8 swdma_mask; |
+ |
+ hwif_chipset_t chipset; /* sub-module for tuning.. */ |
+ |
+ struct pci_dev *pci_dev; /* for pci chipsets */ |
+ struct ide_pci_device_s *cds; /* chipset device struct */ |
+ |
+ struct pnp_dev *pnp_dev; /* for PnP devices */ |
+ |
+ ide_startstop_t (*rw_disk)(ide_drive_t *, struct request *, sector_t); |
+ |
+#if 0 |
+ ide_hwif_ops_t *hwifops; |
+#else |
+ /* routine is for HBA specific IDENTITY operations */ |
+ int (*identify)(ide_drive_t *); |
+ /* routine to tune PIO mode for drives */ |
+ void (*tuneproc)(ide_drive_t *, u8); |
+ /* routine to retune DMA modes for drives */ |
+ int (*speedproc)(ide_drive_t *, u8); |
+ /* tweaks hardware to select drive */ |
+ void (*selectproc)(ide_drive_t *); |
+ /* chipset polling based on hba specifics */ |
+ int (*reset_poll)(ide_drive_t *); |
+ /* chipset specific changes to default for device-hba resets */ |
+ void (*pre_reset)(ide_drive_t *); |
+ /* routine to reset controller after a disk reset */ |
+ void (*resetproc)(ide_drive_t *); |
+ /* special interrupt handling for shared pci interrupts */ |
+ void (*intrproc)(ide_drive_t *); |
+ /* special host masking for drive selection */ |
+ void (*maskproc)(ide_drive_t *, int); |
+ /* check host's drive quirk list */ |
+ int (*quirkproc)(ide_drive_t *); |
+ /* driver soft-power interface */ |
+ int (*busproc)(ide_drive_t *, int); |
+// /* host rate limiter */ |
+// u8 (*ratemask)(ide_drive_t *); |
+// /* device rate limiter */ |
+// u8 (*ratefilter)(ide_drive_t *, u8); |
+#endif |
+ |
+#if 0 |
+ ide_pio_ops_t *pioops; |
+#else |
+ void (*ata_input_data)(ide_drive_t *, void *, u32); |
+ void (*ata_output_data)(ide_drive_t *, void *, u32); |
+ |
+ void (*atapi_input_bytes)(ide_drive_t *, void *, u32); |
+ void (*atapi_output_bytes)(ide_drive_t *, void *, u32); |
+#endif |
+ |
+ int (*ide_dma_read)(ide_drive_t *drive); |
+ int (*ide_dma_write)(ide_drive_t *drive); |
+ int (*ide_dma_begin)(ide_drive_t *drive); |
+ int (*ide_dma_end)(ide_drive_t *drive); |
+ int (*ide_dma_check)(ide_drive_t *drive); |
+ int (*ide_dma_on)(ide_drive_t *drive); |
+ int (*ide_dma_off)(ide_drive_t *drive); |
+ int (*ide_dma_off_quietly)(ide_drive_t *drive); |
+ int (*ide_dma_test_irq)(ide_drive_t *drive); |
+ int (*ide_dma_host_on)(ide_drive_t *drive); |
+ int (*ide_dma_host_off)(ide_drive_t *drive); |
+ int (*ide_dma_bad_drive)(ide_drive_t *drive); |
+ int (*ide_dma_good_drive)(ide_drive_t *drive); |
+ int (*ide_dma_count)(ide_drive_t *drive); |
+ int (*ide_dma_verbose)(ide_drive_t *drive); |
+ int (*ide_dma_retune)(ide_drive_t *drive); |
+ int (*ide_dma_lostirq)(ide_drive_t *drive); |
+ int (*ide_dma_timeout)(ide_drive_t *drive); |
+ |
+ /* dma queued operations */ |
+ int (*ide_dma_queued_on)(ide_drive_t *drive); |
+ int (*ide_dma_queued_off)(ide_drive_t *drive); |
+ ide_startstop_t (*ide_dma_queued_read)(ide_drive_t *drive); |
+ ide_startstop_t (*ide_dma_queued_write)(ide_drive_t *drive); |
+ ide_startstop_t (*ide_dma_queued_start)(ide_drive_t *drive); |
+ |
+ void (*OUTB)(u8 addr, unsigned long port); |
+ void (*OUTBSYNC)(ide_drive_t *drive, u8 addr, unsigned long port); |
+ void (*OUTW)(u16 addr, unsigned long port); |
+ void (*OUTL)(u32 addr, unsigned long port); |
+ void (*OUTSW)(unsigned long port, void *addr, u32 count); |
+ void (*OUTSL)(unsigned long port, void *addr, u32 count); |
+ |
+ u8 (*INB)(unsigned long port); |
+ u16 (*INW)(unsigned long port); |
+ u32 (*INL)(unsigned long port); |
+ void (*INSW)(unsigned long port, void *addr, u32 count); |
+ void (*INSL)(unsigned long port, void *addr, u32 count); |
+ |
+ /* dma physical region descriptor table (cpu view) */ |
+ unsigned int *dmatable_cpu; |
+ /* dma physical region descriptor table (dma view) */ |
+ dma_addr_t dmatable_dma; |
+ /* Scatter-gather list used to build the above */ |
+ struct scatterlist *sg_table; |
+ int sg_nents; /* Current number of entries in it */ |
+ int sg_dma_direction; /* dma transfer direction */ |
+ int sg_dma_active; /* is it in use */ |
+ |
+ int mmio; /* hosts iomio (0), mmio (1) or custom (2) select */ |
+ int rqsize; /* max sectors per request */ |
+ int irq; /* our irq number */ |
+ int initializing; /* set while initializing self */ |
+ |
+ unsigned long dma_master; /* reference base addr dmabase */ |
+ unsigned long dma_base; /* base addr for dma ports */ |
+ unsigned long dma_command; /* dma command register */ |
+ unsigned long dma_vendor1; /* dma vendor 1 register */ |
+ unsigned long dma_status; /* dma status register */ |
+ unsigned long dma_vendor3; /* dma vendor 3 register */ |
+ unsigned long dma_prdtable; /* actual prd table address */ |
+ unsigned long dma_base2; /* extended base addr for dma ports */ |
+ |
+ unsigned dma_extra; /* extra addr for dma ports */ |
+ unsigned long config_data; /* for use by chipset-specific code */ |
+ unsigned long select_data; /* for use by chipset-specific code */ |
+#if (DISK_RECOVERY_TIME > 0) |
+ unsigned long last_time; /* time when previous rq was done */ |
+#endif |
+ |
+ |
+ unsigned noprobe : 1; /* don't probe for this interface */ |
+ unsigned present : 1; /* this interface exists */ |
+ unsigned hold : 1; /* this interface is always present */ |
+ unsigned serialized : 1; /* serialized all channel operation */ |
+ unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */ |
+ unsigned reset : 1; /* reset after probe */ |
+ unsigned autodma : 1; /* auto-attempt using DMA at boot */ |
+ unsigned udma_four : 1; /* 1=ATA-66 capable, 0=default */ |
+ unsigned no_lba48 : 1; /* 1 = cannot do LBA48 */ |
+ unsigned no_dsc : 1; /* 0 default, 1 dsc_overlap disabled */ |
+ unsigned auto_poll : 1; /* supports nop auto-poll */ |
+ |
+ struct device gendev; |
+ struct semaphore gendev_rel_sem; /* To deal with device release() */ |
+ |
+ void *hwif_data; /* extra hwif data */ |
+ |
+ unsigned dma; |
+ |
+ void (*led_act)(void *data, int rw); |
+} ide_hwif_t; |
+ |
+/* |
+ * internal ide interrupt handler type |
+ */ |
+typedef ide_startstop_t (ide_pre_handler_t)(ide_drive_t *, struct request *); |
+typedef ide_startstop_t (ide_handler_t)(ide_drive_t *); |
+typedef ide_startstop_t (ide_post_handler_t)(ide_drive_t *); |
+typedef int (ide_expiry_t)(ide_drive_t *); |
+ |
+typedef struct hwgroup_s { |
+ /* irq handler, if active */ |
+ ide_startstop_t (*handler)(ide_drive_t *); |
+ /* irq handler, suspended if active */ |
+ ide_startstop_t (*handler_save)(ide_drive_t *); |
+ /* BOOL: protects all fields below */ |
+ volatile int busy; |
+ /* BOOL: wake us up on timer expiry */ |
+ int sleeping; |
+ /* current drive */ |
+ ide_drive_t *drive; |
+ /* ptr to current hwif in linked-list */ |
+ ide_hwif_t *hwif; |
+ |
+ /* for pci chipsets */ |
+ struct pci_dev *pci_dev; |
+ /* chipset device struct */ |
+ struct ide_pci_device_s *cds; |
+ |
+ /* current request */ |
+ struct request *rq; |
+ /* failsafe timer */ |
+ struct timer_list timer; |
+ /* local copy of current write rq */ |
+ struct request wrq; |
+ /* timeout value during long polls */ |
+ unsigned long poll_timeout; |
+ /* queried upon timeouts */ |
+ int (*expiry)(ide_drive_t *); |
+ /* ide_system_bus_speed */ |
+ int pio_clock; |
+ |
+ unsigned char cmd_buf[4]; |
+} ide_hwgroup_t; |
+ |
+/* structure attached to the request for IDE_TASK_CMDS */ |
+ |
+/* |
+ * configurable drive settings |
+ */ |
+ |
+#define TYPE_INT 0 |
+#define TYPE_INTA 1 |
+#define TYPE_BYTE 2 |
+#define TYPE_SHORT 3 |
+ |
+#define SETTING_READ (1 << 0) |
+#define SETTING_WRITE (1 << 1) |
+#define SETTING_RW (SETTING_READ | SETTING_WRITE) |
+ |
+typedef int (ide_procset_t)(ide_drive_t *, int); |
+typedef struct ide_settings_s { |
+ char *name; |
+ int rw; |
+ int read_ioctl; |
+ int write_ioctl; |
+ int data_type; |
+ int min; |
+ int max; |
+ int mul_factor; |
+ int div_factor; |
+ void *data; |
+ ide_procset_t *set; |
+ int auto_remove; |
+ struct ide_settings_s *next; |
+} ide_settings_t; |
+ |
+extern struct semaphore ide_setting_sem; |
+extern int ide_add_setting(ide_drive_t *drive, const char *name, int rw, int read_ioctl, int write_ioctl, int data_type, int min, int max, int mul_factor, int div_factor, void *data, ide_procset_t *set); |
+extern void ide_remove_setting(ide_drive_t *drive, char *name); |
+extern ide_settings_t *ide_find_setting_by_name(ide_drive_t *drive, char *name); |
+extern int ide_read_setting(ide_drive_t *t, ide_settings_t *setting); |
+extern int ide_write_setting(ide_drive_t *drive, ide_settings_t *setting, int val); |
+extern void ide_add_generic_settings(ide_drive_t *drive); |
+ |
+/* |
+ * /proc/ide interface |
+ */ |
+typedef struct { |
+ const char *name; |
+ mode_t mode; |
+ read_proc_t *read_proc; |
+ write_proc_t *write_proc; |
+} ide_proc_entry_t; |
+ |
+#ifdef CONFIG_PROC_FS |
+extern void proc_ide_create(void); |
+extern void proc_ide_destroy(void); |
+extern void destroy_proc_ide_device(ide_hwif_t *, ide_drive_t *); |
+extern void destroy_proc_ide_drives(ide_hwif_t *); |
+extern void create_proc_ide_interfaces(void); |
+extern void ide_add_proc_entries(struct proc_dir_entry *, ide_proc_entry_t *, void *); |
+extern void ide_remove_proc_entries(struct proc_dir_entry *, ide_proc_entry_t *); |
+read_proc_t proc_ide_read_capacity; |
+read_proc_t proc_ide_read_geometry; |
+ |
+/* |
+ * Standard exit stuff: |
+ */ |
+#define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) \ |
+{ \ |
+ len -= off; \ |
+ if (len < count) { \ |
+ *eof = 1; \ |
+ if (len <= 0) \ |
+ return 0; \ |
+ } else \ |
+ len = count; \ |
+ *start = page + off; \ |
+ return len; \ |
+} |
+#else |
+#define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) return 0; |
+#endif |
+ |
+/* |
+ * Power Management step value (rq->pm->pm_step). |
+ * |
+ * The step value starts at 0 (ide_pm_state_start_suspend) for a |
+ * suspend operation or 1000 (ide_pm_state_start_resume) for a |
+ * resume operation. |
+ * |
+ * For each step, the core calls the subdriver start_power_step() first. |
+ * This can return: |
+ * - ide_stopped : In this case, the core calls us back again unless |
+ * step have been set to ide_power_state_completed. |
+ * - ide_started : In this case, the channel is left busy until an |
+ * async event (interrupt) occurs. |
+ * Typically, start_power_step() will issue a taskfile request with |
+ * do_rw_taskfile(). |
+ * |
+ * Upon reception of the interrupt, the core will call complete_power_step() |
+ * with the error code if any. This routine should update the step value |
+ * and return. It should not start a new request. The core will call |
+ * start_power_step for the new step value, unless step have been set to |
+ * ide_power_state_completed. |
+ * |
+ * Subdrivers are expected to define their own additional power |
+ * steps from 1..999 for suspend and from 1001..1999 for resume, |
+ * other values are reserved for future use. |
+ */ |
+ |
+enum { |
+ ide_pm_state_completed = -1, |
+ ide_pm_state_start_suspend = 0, |
+ ide_pm_state_start_resume = 1000, |
+}; |
+ |
+/* |
+ * Subdrivers support. |
+ */ |
+#define IDE_SUBDRIVER_VERSION 1 |
+ |
+typedef struct ide_driver_s { |
+ struct module *owner; |
+ const char *name; |
+ const char *version; |
+ u8 media; |
+ unsigned busy : 1; |
+ unsigned supports_dsc_overlap : 1; |
+ int (*cleanup)(ide_drive_t *); |
+ int (*shutdown)(ide_drive_t *); |
+ int (*flushcache)(ide_drive_t *); |
+ ide_startstop_t (*do_request)(ide_drive_t *, struct request *, sector_t); |
+ int (*end_request)(ide_drive_t *, int, int); |
+ u8 (*sense)(ide_drive_t *, const char *, u8); |
+ ide_startstop_t (*error)(ide_drive_t *, const char *, u8); |
+ ide_startstop_t (*abort)(ide_drive_t *, const char *); |
+ int (*ioctl)(ide_drive_t *, struct inode *, struct file *, unsigned int, unsigned long); |
+ void (*pre_reset)(ide_drive_t *); |
+ sector_t (*capacity)(ide_drive_t *); |
+ ide_startstop_t (*special)(ide_drive_t *); |
+ ide_proc_entry_t *proc; |
+ int (*attach)(ide_drive_t *); |
+ void (*ata_prebuilder)(ide_drive_t *); |
+ void (*atapi_prebuilder)(ide_drive_t *); |
+ ide_startstop_t (*start_power_step)(ide_drive_t *, struct request *); |
+ void (*complete_power_step)(ide_drive_t *, struct request *, u8, u8); |
+ struct device_driver gen_driver; |
+ struct list_head drives; |
+ struct list_head drivers; |
+} ide_driver_t; |
+ |
+#define DRIVER(drive) ((drive)->driver) |
+ |
+extern int generic_ide_ioctl(struct block_device *, unsigned, unsigned long); |
+ |
+typedef struct ide_devices_s { |
+ char name[4]; /* hdX */ |
+ unsigned attached : 1; /* native */ |
+ unsigned alttached : 1; /* alternate */ |
+ struct ide_devices_s *next; |
+} ide_devices_t; |
+ |
+/* |
+ * ide_hwifs[] is the master data structure used to keep track |
+ * of just about everything in ide.c. Whenever possible, routines |
+ * should be using pointers to a drive (ide_drive_t *) or |
+ * pointers to a hwif (ide_hwif_t *), rather than indexing this |
+ * structure directly (the allocation/layout may change!). |
+ * |
+ */ |
+#ifndef _IDE_C |
+extern ide_hwif_t ide_hwifs[]; /* master data repository */ |
+extern int (*ide_probe)(void); |
+ |
+extern ide_devices_t *idedisk; |
+extern ide_devices_t *idecd; |
+extern ide_devices_t *idefloppy; |
+extern ide_devices_t *idetape; |
+extern ide_devices_t *idescsi; |
+ |
+#endif |
+extern int noautodma; |
+ |
+extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs); |
+ |
+/* |
+ * This is used on exit from the driver to designate the next irq handler |
+ * and also to start the safety timer. |
+ */ |
+extern void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry); |
+ |
+/* |
+ * This is used on exit from the driver to designate the next irq handler |
+ * and start the safety time safely and atomically from the IRQ handler |
+ * with respect to the command issue (which it also does) |
+ */ |
+extern void ide_execute_command(ide_drive_t *, task_ioreg_t cmd, ide_handler_t *, unsigned int, ide_expiry_t *); |
+ |
+/* |
+ * Error reporting, in human readable form (luxurious, but a memory hog). |
+ * |
+ * (drive, msg, status) |
+ */ |
+byte ide_dump_status (ide_drive_t *drive, const char *msg, byte stat); |
+ |
+/* |
+ * ide_error() takes action based on the error returned by the controller. |
+ * The caller should return immediately after invoking this. |
+ * |
+ * (drive, msg, status) |
+ */ |
+ide_startstop_t ide_error (ide_drive_t *drive, const char *msg, byte stat); |
+ |
+/* |
+ * Abort a running command on the controller triggering the abort |
+ * from a host side, non error situation |
+ * (drive, msg) |
+ */ |
+extern ide_startstop_t ide_abort(ide_drive_t *, const char *); |
+ |
+/* |
+ * Issue a simple drive command |
+ * The drive must be selected beforehand. |
+ * |
+ * (drive, command, nsector, handler) |
+ */ |
+extern void ide_cmd(ide_drive_t *, u8, u8, ide_handler_t *); |
+ |
+extern void ide_fix_driveid(struct hd_driveid *); |
+/* |
+ * ide_fixstring() cleans up and (optionally) byte-swaps a text string, |
+ * removing leading/trailing blanks and compressing internal blanks. |
+ * It is primarily used to tidy up the model name/number fields as |
+ * returned by the WIN_[P]IDENTIFY commands. |
+ * |
+ * (s, bytecount, byteswap) |
+ */ |
+extern void ide_fixstring(u8 *, const int, const int); |
+ |
+/* |
+ * This routine busy-waits for the drive status to be not "busy". |
+ * It then checks the status for all of the "good" bits and none |
+ * of the "bad" bits, and if all is okay it returns 0. All other |
+ * cases return 1 after doing "*startstop = ide_error()", and the |
+ * caller should return the updated value of "startstop" in this case. |
+ * "startstop" is unchanged when the function returns 0; |
+ * (startstop, drive, good, bad, timeout) |
+ */ |
+extern int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long); |
+ |
+/* |
+ * Return the current idea about the total capacity of this drive. |
+ */ |
+extern sector_t current_capacity (ide_drive_t *drive); |
+ |
+/* |
+ * Start a reset operation for an IDE interface. |
+ * The caller should return immediately after invoking this. |
+ */ |
+extern ide_startstop_t ide_do_reset (ide_drive_t *); |
+ |
+/* |
+ * This function is intended to be used prior to invoking ide_do_drive_cmd(). |
+ */ |
+extern void ide_init_drive_cmd (struct request *rq); |
+ |
+/* |
+ * "action" parameter type for ide_do_drive_cmd() below. |
+ */ |
+typedef enum { |
+ ide_wait, /* insert rq at end of list, and wait for it */ |
+ ide_next, /* insert rq immediately after current request */ |
+ ide_preempt, /* insert rq in front of current request */ |
+ ide_head_wait, /* insert rq in front of current request and wait for it */ |
+ ide_end /* insert rq at end of list, but don't wait for it */ |
+} ide_action_t; |
+ |
+/* |
+ * This function issues a special IDE device request |
+ * onto the request queue. |
+ * |
+ * If action is ide_wait, then the rq is queued at the end of the |
+ * request queue, and the function sleeps until it has been processed. |
+ * This is for use when invoked from an ioctl handler. |
+ * |
+ * If action is ide_preempt, then the rq is queued at the head of |
+ * the request queue, displacing the currently-being-processed |
+ * request and this function returns immediately without waiting |
+ * for the new rq to be completed. This is VERY DANGEROUS, and is |
+ * intended for careful use by the ATAPI tape/cdrom driver code. |
+ * |
+ * If action is ide_next, then the rq is queued immediately after |
+ * the currently-being-processed-request (if any), and the function |
+ * returns without waiting for the new rq to be completed. As above, |
+ * This is VERY DANGEROUS, and is intended for careful use by the |
+ * ATAPI tape/cdrom driver code. |
+ * |
+ * If action is ide_end, then the rq is queued at the end of the |
+ * request queue, and the function returns immediately without waiting |
+ * for the new rq to be completed. This is again intended for careful |
+ * use by the ATAPI tape/cdrom driver code. |
+ */ |
+extern int ide_do_drive_cmd(ide_drive_t *, struct request *, ide_action_t); |
+ |
+/* |
+ * Clean up after success/failure of an explicit drive cmd. |
+ * stat/err are used only when (HWGROUP(drive)->rq->cmd == IDE_DRIVE_CMD). |
+ * stat/err are used only when (HWGROUP(drive)->rq->cmd == IDE_DRIVE_TASK_MASK). |
+ * |
+ * (ide_drive_t *drive, u8 stat, u8 err) |
+ */ |
+extern void ide_end_drive_cmd(ide_drive_t *, u8, u8); |
+ |
+/* |
+ * Issue ATA command and wait for completion. |
+ * Use for implementing commands in kernel |
+ * |
+ * (ide_drive_t *drive, u8 cmd, u8 nsect, u8 feature, u8 sectors, u8 *buf) |
+ */ |
+extern int ide_wait_cmd(ide_drive_t *, u8, u8, u8, u8, u8 *); |
+ |
+/* (ide_drive_t *drive, u8 *buf) */ |
+extern int ide_wait_cmd_task(ide_drive_t *, u8 *); |
+ |
+typedef struct ide_task_s { |
+/* |
+ * struct hd_drive_task_hdr tf; |
+ * task_struct_t tf; |
+ * struct hd_drive_hob_hdr hobf; |
+ * hob_struct_t hobf; |
+ */ |
+ task_ioreg_t tfRegister[8]; |
+ task_ioreg_t hobRegister[8]; |
+ ide_reg_valid_t tf_out_flags; |
+ ide_reg_valid_t tf_in_flags; |
+ int data_phase; |
+ int command_type; |
+ ide_pre_handler_t *prehandler; |
+ ide_handler_t *handler; |
+ ide_post_handler_t *posthandler; |
+ struct request *rq; /* copy of request */ |
+ void *special; /* valid_t generally */ |
+} ide_task_t; |
+ |
+typedef struct pkt_task_s { |
+/* |
+ * struct hd_drive_task_hdr pktf; |
+ * task_struct_t pktf; |
+ * u8 pkcdb[12]; |
+ */ |
+ task_ioreg_t tfRegister[8]; |
+ int data_phase; |
+ int command_type; |
+ ide_handler_t *handler; |
+ struct request *rq; /* copy of request */ |
+ void *special; |
+} pkt_task_t; |
+ |
+extern inline u32 ide_read_24(ide_drive_t *); |
+ |
+extern inline void SELECT_DRIVE(ide_drive_t *); |
+extern inline void SELECT_INTERRUPT(ide_drive_t *); |
+extern inline void SELECT_MASK(ide_drive_t *, int); |
+extern inline void QUIRK_LIST(ide_drive_t *); |
+ |
+extern void ata_input_data(ide_drive_t *, void *, u32); |
+extern void ata_output_data(ide_drive_t *, void *, u32); |
+extern void atapi_input_bytes(ide_drive_t *, void *, u32); |
+extern void atapi_output_bytes(ide_drive_t *, void *, u32); |
+extern void taskfile_input_data(ide_drive_t *, void *, u32); |
+extern void taskfile_output_data(ide_drive_t *, void *, u32); |
+ |
+#ifdef CONFIG_IDE_TASKFILE_IO |
+ |
+#define IDE_PIO_IN 0 |
+#define IDE_PIO_OUT 1 |
+ |
+static inline void task_sectors(ide_drive_t *drive, struct request *rq, |
+ unsigned nsect, int rw) |
+{ |
+ unsigned long flags; |
+ unsigned int bio_rq; |
+ char *buf; |
+ |
+ /* |
+ * bio_rq flag is needed because we can call |
+ * rq_unmap_buffer() with rq->cbio == NULL |
+ */ |
+ bio_rq = rq->cbio ? 1 : 0; |
+ |
+ if (bio_rq) |
+ buf = rq_map_buffer(rq, &flags); /* fs request */ |
+ else |
+ buf = rq->buffer + blk_rq_offset(rq); /* task request */ |
+ |
+ /* |
+ * IRQ can happen instantly after reading/writing |
+ * last sector of the datablock. |
+ */ |
+ process_that_request_first(rq, nsect); |
+ |
+ if (rw == IDE_PIO_OUT) |
+ taskfile_output_data(drive, buf, nsect * SECTOR_WORDS); |
+ else |
+ taskfile_input_data(drive, buf, nsect * SECTOR_WORDS); |
+ |
+ if (bio_rq) |
+ rq_unmap_buffer(buf, &flags); |
+} |
+#endif /* CONFIG_IDE_TASKFILE_IO */ |
+ |
+extern int drive_is_ready(ide_drive_t *); |
+extern int wait_for_ready(ide_drive_t *, int /* timeout */); |
+ |
+/* |
+ * taskfile io for disks for now...and builds request from ide_ioctl |
+ */ |
+extern ide_startstop_t do_rw_taskfile(ide_drive_t *, ide_task_t *); |
+ |
+/* (ide_drive_t *drive, u8 stat, u8 err) */ |
+extern void ide_end_taskfile(ide_drive_t *, u8, u8); |
+ |
+/* |
+ * Special Flagged Register Validation Caller |
+ */ |
+extern ide_startstop_t flagged_taskfile(ide_drive_t *, ide_task_t *); |
+ |
+extern ide_startstop_t set_multmode_intr(ide_drive_t *); |
+extern ide_startstop_t set_geometry_intr(ide_drive_t *); |
+extern ide_startstop_t recal_intr(ide_drive_t *); |
+extern ide_startstop_t task_no_data_intr(ide_drive_t *); |
+extern ide_startstop_t task_in_intr(ide_drive_t *); |
+extern ide_startstop_t task_mulin_intr(ide_drive_t *); |
+extern ide_startstop_t pre_task_out_intr(ide_drive_t *, struct request *); |
+extern ide_startstop_t task_out_intr(ide_drive_t *); |
+extern ide_startstop_t pre_task_mulout_intr(ide_drive_t *, struct request *); |
+extern ide_startstop_t task_mulout_intr(ide_drive_t *); |
+extern void ide_init_drive_taskfile(struct request *); |
+ |
+extern int ide_raw_taskfile(ide_drive_t *, ide_task_t *, u8 *); |
+ |
+extern ide_pre_handler_t * ide_pre_handler_parser(struct hd_drive_task_hdr *, struct hd_drive_hob_hdr *); |
+ |
+extern ide_handler_t * ide_handler_parser(struct hd_drive_task_hdr *, struct hd_drive_hob_hdr *); |
+ |
+extern ide_post_handler_t * ide_post_handler_parser(struct hd_drive_task_hdr *, struct hd_drive_hob_hdr *); |
+ |
+/* Expects args is a full set of TF registers and parses the command type */ |
+extern int ide_cmd_type_parser(ide_task_t *); |
+ |
+int ide_taskfile_ioctl(ide_drive_t *, unsigned int, unsigned long); |
+int ide_cmd_ioctl(ide_drive_t *, unsigned int, unsigned long); |
+int ide_task_ioctl(ide_drive_t *, unsigned int, unsigned long); |
+ |
+#if 0 |
+ |
+#define IDEFLOPPY_PC_BUFFER_SIZE 256 |
+#define IDETAPE_PC_BUFFER_SIZE 256 |
+#define IDE_PC_BUFFER_SIZE 256 |
+ |
+typedef struct ide_packet_command_s { |
+ /* Actual packet bytes */ |
+ u8 c[12]; |
+ /* On each retry, we increment retries */ |
+ int retries; |
+ /* Error code */ |
+ int error; |
+ /* Bytes to transfer */ |
+ int request_transfer; |
+ /* Bytes actually transferred */ |
+ int actually_transferred; |
+ /* Size of our data buffer */ |
+ int buffer_size; |
+ |
+ struct buffer_head *bh; |
+ u8 *b_data; |
+ /* The corresponding request */ |
+ struct request *rq; |
+# if 0 |
+ /* Scatter gather table */ |
+ struct scatterlist *sg; |
+# endif |
+ int b_count; |
+ /* Data buffer */ |
+ u8 *buffer; |
+ /* Pointer into the above buffer */ |
+ u8 *current_position; |
+ /* Called when this packet command is completed */ |
+ ide_startstop_t (*callback) (ide_drive_t *); |
+ /* Temporary buffer */ |
+ u8 pc_buffer[IDE_PC_BUFFER_SIZE]; |
+ /* Status/Action bit flags: long for set_bit */ |
+ unsigned long flags; |
+} ide_pc_t; |
+ |
+ide-cd orthoginal :-/ |
+struct packet_command { |
+ char *buffer; |
+ int buflen; |
+ int stat; |
+ int quiet; |
+ int timeout; |
+ struct request_sense *sense; |
+ unsigned char c[12]; |
+}; |
+ |
+#endif |
+ |
+#ifdef CONFIG_PKT_TASK_IOCTL |
+extern int pkt_taskfile_ioctl(ide_drive_t *, struct inode *, struct file *, unsigned int, unsigned long); |
+#endif /* CONFIG_PKT_TASK_IOCTL */ |
+ |
+extern void ide_delay_50ms(void); |
+extern int system_bus_clock(void); |
+ |
+extern u8 ide_auto_reduce_xfer(ide_drive_t *); |
+extern int ide_driveid_update(ide_drive_t *); |
+extern int ide_ata66_check(ide_drive_t *, ide_task_t *); |
+extern int ide_config_drive_speed(ide_drive_t *, u8); |
+extern u8 eighty_ninty_three (ide_drive_t *); |
+extern int set_transfer(ide_drive_t *, ide_task_t *); |
+extern int taskfile_lib_get_identify(ide_drive_t *drive, u8 *); |
+ |
+extern int ide_wait_not_busy(ide_hwif_t *hwif, unsigned long timeout); |
+ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq, sector_t block); |
+ |
+/* |
+ * ide_system_bus_speed() returns what we think is the system VESA/PCI |
+ * bus speed (in MHz). This is used for calculating interface PIO timings. |
+ * The default is 40 for known PCI systems, 50 otherwise. |
+ * The "idebus=xx" parameter can be used to override this value. |
+ */ |
+extern int ide_system_bus_speed(void); |
+ |
+/* |
+ * ide_stall_queue() can be used by a drive to give excess bandwidth back |
+ * to the hwgroup by sleeping for timeout jiffies. |
+ */ |
+extern void ide_stall_queue(ide_drive_t *drive, unsigned long timeout); |
+ |
+extern int ide_spin_wait_hwgroup(ide_drive_t *); |
+extern void ide_timer_expiry(unsigned long); |
+extern irqreturn_t ide_intr(int irq, void *dev_id, struct pt_regs *regs); |
+extern void do_ide_request(request_queue_t *); |
+extern void ide_init_subdrivers(void); |
+ |
+extern struct block_device_operations ide_fops[]; |
+extern ide_proc_entry_t generic_subdriver_entries[]; |
+ |
+extern int ata_attach(ide_drive_t *); |
+ |
+extern int ideprobe_init(void); |
+ |
+extern void ide_scan_pcibus(int scan_direction) __init; |
+extern int ide_pci_register_driver(struct pci_driver *driver); |
+extern void ide_pci_unregister_driver(struct pci_driver *driver); |
+extern void ide_pci_setup_ports(struct pci_dev *dev, struct ide_pci_device_s *d, int autodma, int pciirq, ata_index_t *index); |
+extern void ide_setup_pci_noise (struct pci_dev *dev, struct ide_pci_device_s *d); |
+ |
+extern void default_hwif_iops(ide_hwif_t *); |
+extern void default_hwif_mmiops(ide_hwif_t *); |
+extern void default_hwif_transport(ide_hwif_t *); |
+ |
+int ide_register_driver(ide_driver_t *driver); |
+void ide_unregister_driver(ide_driver_t *driver); |
+int ide_register_subdriver (ide_drive_t *drive, ide_driver_t *driver, int version); |
+int ide_unregister_subdriver (ide_drive_t *drive); |
+int ide_replace_subdriver(ide_drive_t *drive, const char *driver); |
+ |
+#ifdef CONFIG_PROC_FS |
+typedef struct ide_pci_host_proc_s { |
+ char *name; |
+ u8 set; |
+ get_info_t *get_info; |
+ struct proc_dir_entry *parent; |
+ struct ide_pci_host_proc_s *next; |
+} ide_pci_host_proc_t; |
+ |
+void ide_pci_register_host_proc(ide_pci_host_proc_t *); |
+#endif /* CONFIG_PROC_FS */ |
+ |
+#define ON_BOARD 1 |
+#define NEVER_BOARD 0 |
+ |
+#ifdef CONFIG_BLK_DEV_OFFBOARD |
+# define OFF_BOARD ON_BOARD |
+#else /* CONFIG_BLK_DEV_OFFBOARD */ |
+# define OFF_BOARD NEVER_BOARD |
+#endif /* CONFIG_BLK_DEV_OFFBOARD */ |
+ |
+#define NODMA 0 |
+#define NOAUTODMA 1 |
+#define AUTODMA 2 |
+#define EOL 255 |
+ |
+typedef struct ide_pci_enablebit_s { |
+ u8 reg; /* byte pci reg holding the enable-bit */ |
+ u8 mask; /* mask to isolate the enable-bit */ |
+ u8 val; /* value of masked reg when "enabled" */ |
+} ide_pci_enablebit_t; |
+ |
+typedef struct ide_pci_device_s { |
+ u16 vendor; |
+ u16 device; |
+ char *name; |
+ void (*init_setup)(struct pci_dev *, struct ide_pci_device_s *); |
+ void (*init_setup_dma)(struct pci_dev *, struct ide_pci_device_s *, ide_hwif_t *); |
+ unsigned int (*init_chipset)(struct pci_dev *, const char *); |
+ void (*init_iops)(ide_hwif_t *); |
+ void (*init_hwif)(ide_hwif_t *); |
+ void (*init_dma)(ide_hwif_t *, unsigned long); |
+ u8 channels; |
+ u8 autodma; |
+ ide_pci_enablebit_t enablebits[2]; |
+ u8 bootable; |
+ unsigned int extra; |
+ struct ide_pci_device_s *next; |
+ u8 isa_ports; /* Uses ISA control ports not PCI ones */ |
+} ide_pci_device_t; |
+ |
+extern void ide_setup_pci_device(struct pci_dev *, ide_pci_device_t *); |
+extern void ide_setup_pci_devices(struct pci_dev *, struct pci_dev *, ide_pci_device_t *); |
+ |
+#define BAD_DMA_DRIVE 0 |
+#define GOOD_DMA_DRIVE 1 |
+ |
+#ifdef CONFIG_BLK_DEV_IDEDMA_PCI |
+extern int ide_build_dmatable(ide_drive_t *, struct request *); |
+extern void ide_destroy_dmatable(ide_drive_t *); |
+extern ide_startstop_t ide_dma_intr(ide_drive_t *); |
+extern int ide_release_dma(ide_hwif_t *); |
+extern void ide_setup_dma(ide_hwif_t *, unsigned long, unsigned int); |
+extern int ide_start_dma(ide_hwif_t *, ide_drive_t *, int); |
+ |
+extern int __ide_dma_host_off(ide_drive_t *); |
+extern int __ide_dma_off_quietly(ide_drive_t *); |
+extern int __ide_dma_off(ide_drive_t *); |
+extern int __ide_dma_host_on(ide_drive_t *); |
+extern int __ide_dma_on(ide_drive_t *); |
+extern int __ide_dma_check(ide_drive_t *); |
+extern int __ide_dma_read(ide_drive_t *); |
+extern int __ide_dma_write(ide_drive_t *); |
+extern int __ide_dma_begin(ide_drive_t *); |
+extern int __ide_dma_end(ide_drive_t *); |
+extern int __ide_dma_test_irq(ide_drive_t *); |
+extern int __ide_dma_bad_drive(ide_drive_t *); |
+extern int __ide_dma_good_drive(ide_drive_t *); |
+extern int __ide_dma_count(ide_drive_t *); |
+extern int __ide_dma_verbose(ide_drive_t *); |
+extern int __ide_dma_retune(ide_drive_t *); |
+extern int __ide_dma_lostirq(ide_drive_t *); |
+extern int __ide_dma_timeout(ide_drive_t *); |
+ |
+#ifdef CONFIG_BLK_DEV_IDE_TCQ |
+extern int __ide_dma_queued_on(ide_drive_t *drive); |
+extern int __ide_dma_queued_off(ide_drive_t *drive); |
+extern ide_startstop_t __ide_dma_queued_read(ide_drive_t *drive); |
+extern ide_startstop_t __ide_dma_queued_write(ide_drive_t *drive); |
+extern ide_startstop_t __ide_dma_queued_start(ide_drive_t *drive); |
+#else |
+static inline int __ide_dma_queued_on(ide_drive_t *drive) |
+{ |
+ return 1; |
+} |
+ |
+static inline int __ide_dma_queued_off(ide_drive_t *drive) |
+{ |
+ return 1; |
+} |
+#endif |
+ |
+#else |
+static inline void ide_release_dma(ide_hwif_t *drive) {;} |
+#endif |
+ |
+extern int ide_hwif_request_regions(ide_hwif_t *hwif); |
+extern void ide_hwif_release_regions(ide_hwif_t* hwif); |
+extern void ide_unregister (unsigned int index); |
+ |
+extern int probe_hwif_init(ide_hwif_t *); |
+ |
+static inline void *ide_get_hwifdata (ide_hwif_t * hwif) |
+{ |
+ return hwif->hwif_data; |
+} |
+ |
+static inline void ide_set_hwifdata (ide_hwif_t * hwif, void *data) |
+{ |
+ hwif->hwif_data = data; |
+} |
+ |
+/* ide-lib.c */ |
+extern u8 ide_dma_speed(ide_drive_t *drive, u8 mode); |
+extern u8 ide_rate_filter(u8 mode, u8 speed); |
+extern int ide_dma_enable(ide_drive_t *drive); |
+extern char *ide_xfer_verbose(u8 xfer_rate); |
+extern void ide_toggle_bounce(ide_drive_t *drive, int on); |
+extern int ide_set_xfer_rate(ide_drive_t *drive, u8 rate); |
+ |
+typedef struct ide_pio_timings_s { |
+ int setup_time; /* Address setup (ns) minimum */ |
+ int active_time; /* Active pulse (ns) minimum */ |
+ int cycle_time; /* Cycle time (ns) minimum = (setup + active + recovery) */ |
+} ide_pio_timings_t; |
+ |
+typedef struct ide_pio_data_s { |
+ u8 pio_mode; |
+ u8 use_iordy; |
+ u8 overridden; |
+ u8 blacklisted; |
+ unsigned int cycle_time; |
+} ide_pio_data_t; |
+ |
+extern u8 ide_get_best_pio_mode (ide_drive_t *drive, u8 mode_wanted, u8 max_mode, ide_pio_data_t *d); |
+extern const ide_pio_timings_t ide_pio_timings[6]; |
+ |
+ |
+extern spinlock_t ide_lock; |
+extern struct semaphore ide_cfg_sem; |
+/* |
+ * Structure locking: |
+ * |
+ * ide_cfg_sem and ide_lock together protect changes to |
+ * ide_hwif_t->{next,hwgroup} |
+ * ide_drive_t->next |
+ * |
+ * ide_hwgroup_t->busy: ide_lock |
+ * ide_hwgroup_t->hwif: ide_lock |
+ * ide_hwif_t->mate: constant, no locking |
+ * ide_drive_t->hwif: constant, no locking |
+ */ |
+ |
+#define local_irq_set(flags) do { local_save_flags((flags)); local_irq_enable(); } while (0) |
+ |
+#define IDE_MAX_TAG 32 |
+#ifdef CONFIG_BLK_DEV_IDE_TCQ |
+static inline int ata_pending_commands(ide_drive_t *drive) |
+{ |
+ if (drive->using_tcq) |
+ return blk_queue_tag_depth(drive->queue); |
+ |
+ return 0; |
+} |
+ |
+static inline int ata_can_queue(ide_drive_t *drive) |
+{ |
+ if (drive->using_tcq) |
+ return blk_queue_tag_queue(drive->queue); |
+ |
+ return 1; |
+} |
+#else |
+#define ata_pending_commands(drive) (0) |
+#define ata_can_queue(drive) (1) |
+#endif |
+ |
+extern struct bus_type ide_bus_type; |
+ |
+#endif /* _IDE_H */ |
Index: linuxc26/include/linux/ipv6_route.h |
=================================================================== |
--- linuxc26/include/linux/ipv6_route.h (nonexistent) |
+++ linuxc26/include/linux/ipv6_route.h (revision 422) |
@@ -0,0 +1,49 @@ |
+/* |
+ * 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 _LINUX_IPV6_ROUTE_H |
+#define _LINUX_IPV6_ROUTE_H |
+ |
+#define RTF_DEFAULT 0x00010000 /* default - learned via ND */ |
+#define RTF_ALLONLINK 0x00020000 /* fallback, no routers on link */ |
+#define RTF_ADDRCONF 0x00040000 /* addrconf route - RA */ |
+#define RTF_PREFIX_RT 0x00080000 /* A prefix only route - RA */ |
+ |
+#define RTF_NONEXTHOP 0x00200000 /* route with no nexthop */ |
+#define RTF_EXPIRES 0x00400000 |
+ |
+#define RTF_CACHE 0x01000000 /* cache entry */ |
+#define RTF_FLOW 0x02000000 /* flow significant route */ |
+#define RTF_POLICY 0x04000000 /* policy route */ |
+#define RTF_NDISC 0x08000000 /* ndisc route */ |
+ |
+#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 |
Index: linuxc26/include/linux/llc.h |
=================================================================== |
--- linuxc26/include/linux/llc.h (nonexistent) |
+++ linuxc26/include/linux/llc.h (revision 422) |
@@ -0,0 +1,80 @@ |
+#ifndef __LINUX_LLC_H |
+#define __LINUX_LLC_H |
+/* |
+ * 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. |
+ */ |
+#define __LLC_SOCK_SIZE__ 16 /* sizeof(sockaddr_llc), word align. */ |
+struct sockaddr_llc { |
+ sa_family_t sllc_family; /* AF_LLC */ |
+ 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(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_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 Managment. */ |
+#define LLC_SAP_SNA 0x04 /* SNA Path Control. */ |
+#define LLC_SAP_PNM 0x0E /* Proway Network Managment. */ |
+#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. */ |
+ |
+#ifdef __KERNEL__ |
+#define LLC_SAP_DYN_START 0xC0 |
+#define LLC_SAP_DYN_STOP 0xDE |
+#define LLC_SAP_DYN_TRIES 4 |
+ |
+#define llc_ui_skb_cb(__skb) ((struct sockaddr_llc *)&((__skb)->cb[0])) |
+#endif /* __KERNEL__ */ |
+#endif /* __LINUX_LLC_H */ |
Index: linuxc26/include/linux/linkage.h |
=================================================================== |
--- linuxc26/include/linux/linkage.h (nonexistent) |
+++ linuxc26/include/linux/linkage.h (revision 422) |
@@ -0,0 +1,42 @@ |
+#ifndef _LINUX_LINKAGE_H |
+#define _LINUX_LINKAGE_H |
+ |
+#include <linux/config.h> |
+#include <asm/linkage.h> |
+ |
+#ifdef __cplusplus |
+#define CPP_ASMLINKAGE extern "C" |
+#else |
+#define CPP_ASMLINKAGE |
+#endif |
+ |
+#ifndef asmlinkage |
+#define asmlinkage CPP_ASMLINKAGE |
+#endif |
+ |
+#ifndef __ALIGN |
+#define __ALIGN .align 4,0x90 |
+#define __ALIGN_STR ".align 4,0x90" |
+#endif |
+ |
+#ifdef __ASSEMBLY__ |
+ |
+#define ALIGN __ALIGN |
+#define ALIGN_STR __ALIGN_STR |
+ |
+#define ENTRY(name) \ |
+ .globl name; \ |
+ ALIGN; \ |
+ name: |
+ |
+#endif |
+ |
+#define NORET_TYPE /**/ |
+#define ATTRIB_NORET __attribute__((noreturn)) |
+#define NORET_AND noreturn, |
+ |
+#ifndef FASTCALL |
+#define FASTCALL(x) x |
+#endif |
+ |
+#endif |
Index: linuxc26/include/linux/ipc.h |
=================================================================== |
--- linuxc26/include/linux/ipc.h (nonexistent) |
+++ linuxc26/include/linux/ipc.h (revision 422) |
@@ -0,0 +1,75 @@ |
+#ifndef _LINUX_IPC_H |
+#define _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. */ |
+ |
+#ifdef __KERNEL__ |
+ |
+#define IPCMNI 32768 /* <= MAX_INT limit for ipc arrays (including sysctl changes) */ |
+ |
+/* used by in-kernel data structures */ |
+struct kern_ipc_perm |
+{ |
+ spinlock_t lock; |
+ int deleted; |
+ key_t key; |
+ uid_t uid; |
+ gid_t gid; |
+ uid_t cuid; |
+ gid_t cgid; |
+ mode_t mode; |
+ unsigned long seq; |
+ void *security; |
+}; |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* _LINUX_IPC_H */ |
+ |
+ |
Index: linuxc26/include/linux/atm_eni.h |
=================================================================== |
--- linuxc26/include/linux/atm_eni.h (nonexistent) |
+++ linuxc26/include/linux/atm_eni.h (revision 422) |
@@ -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 |
Index: linuxc26/include/linux/atm.h |
=================================================================== |
--- linuxc26/include/linux/atm.h (nonexistent) |
+++ linuxc26/include/linux/atm.h (revision 422) |
@@ -0,0 +1,239 @@ |
+/* 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 _LINUX_ATM_H |
+#define _LINUX_ATM_H |
+ |
+/* |
+ * BEGIN_xx and END_xx markers are used for automatic generation of |
+ * documentation. Do not change them. |
+ */ |
+ |
+#ifdef __KERNEL__ |
+#include <linux/socket.h> |
+#include <linux/types.h> |
+#endif |
+#include <linux/atmapi.h> |
+#include <linux/atmsap.h> |
+#include <linux/atmioc.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 */ |
+ |
+/* |
+ * 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* */ |
+ uint32_t 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 *arg; |
+}; |
+ |
+typedef unsigned short atm_backend_t; |
+#endif |
Index: linuxc26/include/linux/device-mapper.h |
=================================================================== |
--- linuxc26/include/linux/device-mapper.h (nonexistent) |
+++ linuxc26/include/linux/device-mapper.h (revision 422) |
@@ -0,0 +1,104 @@ |
+/* |
+ * Copyright (C) 2001 Sistina Software (UK) Limited. |
+ * |
+ * This file is released under the LGPL. |
+ */ |
+ |
+#ifndef _LINUX_DEVICE_MAPPER_H |
+#define _LINUX_DEVICE_MAPPER_H |
+ |
+struct dm_target; |
+struct dm_table; |
+struct dm_dev; |
+ |
+typedef enum { STATUSTYPE_INFO, STATUSTYPE_TABLE } status_type_t; |
+ |
+/* |
+ * In the constructor the target parameter will already have the |
+ * table, type, begin and len fields filled in. |
+ */ |
+typedef int (*dm_ctr_fn) (struct dm_target *target, |
+ unsigned int argc, char **argv); |
+ |
+/* |
+ * The destructor doesn't need to free the dm_target, just |
+ * anything hidden ti->private. |
+ */ |
+typedef void (*dm_dtr_fn) (struct dm_target *ti); |
+ |
+/* |
+ * The map function must return: |
+ * < 0: error |
+ * = 0: The target will handle the io by resubmitting it later |
+ * > 0: simple remap complete |
+ */ |
+typedef int (*dm_map_fn) (struct dm_target *ti, struct bio *bio); |
+ |
+typedef void (*dm_suspend_fn) (struct dm_target *ti); |
+typedef void (*dm_resume_fn) (struct dm_target *ti); |
+ |
+typedef int (*dm_status_fn) (struct dm_target *ti, status_type_t status_type, |
+ char *result, unsigned int maxlen); |
+ |
+void dm_error(const char *message); |
+ |
+/* |
+ * Constructors should call these functions to ensure destination devices |
+ * are opened/closed correctly. |
+ * FIXME: too many arguments. |
+ */ |
+int dm_get_device(struct dm_target *ti, const char *path, sector_t start, |
+ sector_t len, int mode, struct dm_dev **result); |
+void dm_put_device(struct dm_target *ti, struct dm_dev *d); |
+ |
+/* |
+ * Information about a target type |
+ */ |
+struct target_type { |
+ const char *name; |
+ struct module *module; |
+ dm_ctr_fn ctr; |
+ dm_dtr_fn dtr; |
+ dm_map_fn map; |
+ dm_suspend_fn suspend; |
+ dm_resume_fn resume; |
+ dm_status_fn status; |
+}; |
+ |
+struct io_restrictions { |
+ unsigned short max_sectors; |
+ unsigned short max_phys_segments; |
+ unsigned short max_hw_segments; |
+ unsigned short hardsect_size; |
+ unsigned int max_segment_size; |
+ unsigned long seg_boundary_mask; |
+}; |
+ |
+struct dm_target { |
+ struct dm_table *table; |
+ struct target_type *type; |
+ |
+ /* target limits */ |
+ sector_t begin; |
+ sector_t len; |
+ |
+ /* FIXME: turn this into a mask, and merge with io_restrictions */ |
+ sector_t split_io; |
+ |
+ /* |
+ * These are automaticall filled in by |
+ * dm_table_get_device. |
+ */ |
+ struct io_restrictions limits; |
+ |
+ /* target specific data */ |
+ void *private; |
+ |
+ /* Used to provide an error string from the ctr */ |
+ char *error; |
+}; |
+ |
+int dm_register_target(struct target_type *t); |
+int dm_unregister_target(struct target_type *t); |
+ |
+#endif /* _LINUX_DEVICE_MAPPER_H */ |
Index: linuxc26/include/linux/hayesesp.h |
=================================================================== |
--- linuxc26/include/linux/hayesesp.h (nonexistent) |
+++ linuxc26/include/linux/hayesesp.h (revision 422) |
@@ -0,0 +1,123 @@ |
+#ifndef HAYESESP_H |
+#define HAYESESP_H |
+ |
+struct hayes_esp_config { |
+ short flow_on; |
+ short flow_off; |
+ short rx_trigger; |
+ short tx_trigger; |
+ short pio_threshold; |
+ unsigned char rx_timeout; |
+ char dma_channel; |
+}; |
+ |
+#ifdef __KERNEL__ |
+ |
+#define ESP_DMA_CHANNEL 0 |
+#define ESP_RX_TRIGGER 768 |
+#define ESP_TX_TRIGGER 768 |
+#define ESP_FLOW_OFF 1016 |
+#define ESP_FLOW_ON 944 |
+#define ESP_RX_TMOUT 128 |
+#define ESP_PIO_THRESHOLD 32 |
+ |
+#define ESP_IN_MAJOR 57 /* major dev # for dial in */ |
+#define ESP_OUT_MAJOR 58 /* major dev # for dial out */ |
+#define ESPC_SCALE 3 |
+#define UART_ESI_BASE 0x00 |
+#define UART_ESI_SID 0x01 |
+#define UART_ESI_RX 0x02 |
+#define UART_ESI_TX 0x02 |
+#define UART_ESI_CMD1 0x04 |
+#define UART_ESI_CMD2 0x05 |
+#define UART_ESI_STAT1 0x04 |
+#define UART_ESI_STAT2 0x05 |
+#define UART_ESI_RWS 0x07 |
+ |
+#define UART_IER_DMA_TMOUT 0x80 |
+#define UART_IER_DMA_TC 0x08 |
+ |
+#define ESI_SET_IRQ 0x04 |
+#define ESI_SET_DMA_TMOUT 0x05 |
+#define ESI_SET_SRV_MASK 0x06 |
+#define ESI_SET_ERR_MASK 0x07 |
+#define ESI_SET_FLOW_CNTL 0x08 |
+#define ESI_SET_FLOW_CHARS 0x09 |
+#define ESI_SET_FLOW_LVL 0x0a |
+#define ESI_SET_TRIGGER 0x0b |
+#define ESI_SET_RX_TIMEOUT 0x0c |
+#define ESI_SET_FLOW_TMOUT 0x0d |
+#define ESI_WRITE_UART 0x0e |
+#define ESI_READ_UART 0x0f |
+#define ESI_SET_MODE 0x10 |
+#define ESI_GET_ERR_STAT 0x12 |
+#define ESI_GET_UART_STAT 0x13 |
+#define ESI_GET_RX_AVAIL 0x14 |
+#define ESI_GET_TX_AVAIL 0x15 |
+#define ESI_START_DMA_RX 0x16 |
+#define ESI_START_DMA_TX 0x17 |
+#define ESI_ISSUE_BREAK 0x1a |
+#define ESI_FLUSH_RX 0x1b |
+#define ESI_FLUSH_TX 0x1c |
+#define ESI_SET_BAUD 0x1d |
+#define ESI_SET_ENH_IRQ 0x1f |
+#define ESI_SET_REINTR 0x20 |
+#define ESI_SET_PRESCALAR 0x23 |
+#define ESI_NO_COMMAND 0xff |
+ |
+#define ESP_STAT_RX_TIMEOUT 0x01 |
+#define ESP_STAT_DMA_RX 0x02 |
+#define ESP_STAT_DMA_TX 0x04 |
+#define ESP_STAT_NEVER_DMA 0x08 |
+#define ESP_STAT_USE_PIO 0x10 |
+ |
+#define ESP_EVENT_WRITE_WAKEUP 0 |
+#define ESP_MAGIC 0x53ee |
+#define ESP_XMIT_SIZE 4096 |
+ |
+struct esp_struct { |
+ int magic; |
+ int port; |
+ int irq; |
+ int flags; /* defined in tty.h */ |
+ struct tty_struct *tty; |
+ int read_status_mask; |
+ int ignore_status_mask; |
+ int timeout; |
+ int stat_flags; |
+ int custom_divisor; |
+ int close_delay; |
+ unsigned short closing_wait; |
+ unsigned short closing_wait2; |
+ int IER; /* Interrupt Enable Register */ |
+ int MCR; /* Modem control register */ |
+ unsigned long event; |
+ unsigned long last_active; |
+ int line; |
+ int count; /* # of fd on device */ |
+ int blocked_open; /* # of blocked opens */ |
+ unsigned char *xmit_buf; |
+ int xmit_head; |
+ int xmit_tail; |
+ int xmit_cnt; |
+ struct work_struct tqueue; |
+ struct work_struct tqueue_hangup; |
+ wait_queue_head_t open_wait; |
+ wait_queue_head_t close_wait; |
+ wait_queue_head_t delta_msr_wait; |
+ wait_queue_head_t break_wait; |
+ struct async_icount icount; /* kernel counters for the 4 input interrupts */ |
+ struct hayes_esp_config config; /* port configuration */ |
+ struct esp_struct *next_port; /* For the linked list */ |
+}; |
+ |
+struct esp_pio_buffer { |
+ unsigned char data[1024]; |
+ struct esp_pio_buffer *next; |
+}; |
+ |
+#endif /* __KERNEL__ */ |
+ |
+ |
+#endif /* ESP_H */ |
+ |
Index: linuxc26/include/linux/iso_fs.h |
=================================================================== |
--- linuxc26/include/linux/iso_fs.h (nonexistent) |
+++ linuxc26/include/linux/iso_fs.h (revision 422) |
@@ -0,0 +1,252 @@ |
+ |
+#ifndef _ISOFS_FS_H |
+#define _ISOFS_FS_H |
+ |
+#include <linux/types.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) |
+ |
+#define ISOFS_SUPER_MAGIC 0x9660 |
+ |
+#ifdef __KERNEL__ |
+/* Number conversion inlines, named after the section in ISO 9660 |
+ they correspond to. */ |
+ |
+#include <asm/byteorder.h> |
+#include <asm/unaligned.h> |
+#include <linux/iso_fs_i.h> |
+#include <linux/iso_fs_sb.h> |
+ |
+static inline struct isofs_sb_info *ISOFS_SB(struct super_block *sb) |
+{ |
+ return sb->s_fs_info; |
+} |
+ |
+static inline struct iso_inode_info *ISOFS_I(struct inode *inode) |
+{ |
+ return container_of(inode, struct iso_inode_info, vfs_inode); |
+} |
+ |
+static inline int isonum_711(char *p) |
+{ |
+ return *(u8 *)p; |
+} |
+static inline int isonum_712(char *p) |
+{ |
+ return *(s8 *)p; |
+} |
+static inline int isonum_721(char *p) |
+{ |
+ return le16_to_cpu(get_unaligned((u16 *)p)); |
+} |
+static inline int isonum_722(char *p) |
+{ |
+ return be16_to_cpu(get_unaligned((u16 *)p)); |
+} |
+static inline int isonum_723(char *p) |
+{ |
+ /* Ignore bigendian datum due to broken mastering programs */ |
+ return le16_to_cpu(get_unaligned((u16 *)p)); |
+} |
+static inline int isonum_731(char *p) |
+{ |
+ return le32_to_cpu(get_unaligned((u32 *)p)); |
+} |
+static inline int isonum_732(char *p) |
+{ |
+ return be32_to_cpu(get_unaligned((u32 *)p)); |
+} |
+static inline int isonum_733(char *p) |
+{ |
+ /* Ignore bigendian datum due to broken mastering programs */ |
+ return le32_to_cpu(get_unaligned((u32 *)p)); |
+} |
+extern int iso_date(char *, int); |
+ |
+struct inode; /* To make gcc happy */ |
+ |
+extern int parse_rock_ridge_inode(struct iso_directory_record *, struct inode *); |
+extern int get_rock_ridge_filename(struct iso_directory_record *, char *, struct inode *); |
+extern int isofs_name_translate(struct iso_directory_record *, char *, struct inode *); |
+ |
+int get_joliet_filename(struct iso_directory_record *, unsigned char *, struct inode *); |
+int get_acorn_filename(struct iso_directory_record *, char *, struct inode *); |
+ |
+extern struct dentry *isofs_lookup(struct inode *, struct dentry *, struct nameidata *); |
+extern struct buffer_head *isofs_bread(struct inode *, sector_t); |
+extern int isofs_get_blocks(struct inode *, sector_t, struct buffer_head **, unsigned long); |
+ |
+extern struct inode_operations isofs_dir_inode_operations; |
+extern struct file_operations isofs_dir_operations; |
+extern struct address_space_operations isofs_symlink_aops; |
+ |
+/* The following macros are used to check for memory leaks. */ |
+#ifdef LEAK_CHECK |
+#define free_s leak_check_free_s |
+#define malloc leak_check_malloc |
+#define sb_bread leak_check_bread |
+#define brelse leak_check_brelse |
+extern void * leak_check_malloc(unsigned int size); |
+extern void leak_check_free_s(void * obj, int size); |
+extern struct buffer_head * leak_check_bread(struct super_block *sb, int block); |
+extern void leak_check_brelse(struct buffer_head * bh); |
+#endif /* LEAK_CHECK */ |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif |
Index: linuxc26/include/linux/auto_fs4.h |
=================================================================== |
--- linuxc26/include/linux/auto_fs4.h (nonexistent) |
+++ linuxc26/include/linux/auto_fs4.h (revision 422) |
@@ -0,0 +1,47 @@ |
+/* -*- 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/auto_fs.h> |
+ |
+/* autofs v4 definitions */ |
+#undef AUTOFS_PROTO_VERSION |
+#undef AUTOFS_MIN_PROTO_VERSION |
+#undef AUTOFS_MAX_PROTO_VERSION |
+ |
+#define AUTOFS_PROTO_VERSION 4 |
+#define AUTOFS_MIN_PROTO_VERSION 3 |
+#define AUTOFS_MAX_PROTO_VERSION 4 |
+ |
+/* New message type */ |
+#define autofs_ptype_expire_multi 2 /* Expire entry (umount request) */ |
+ |
+/* 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; |
+}; |
+ |
+#define AUTOFS_IOC_EXPIRE_MULTI _IOW(0x93,0x66,int) |
+ |
+ |
+#endif /* _LINUX_AUTO_FS4_H */ |
Index: linuxc26/include/linux/cyclades.h |
=================================================================== |
--- linuxc26/include/linux/cyclades.h (nonexistent) |
+++ linuxc26/include/linux/cyclades.h (revision 422) |
@@ -0,0 +1,822 @@ |
+/* $Revision: 1.1 $$Date: 2004-01-28 15:25:07 $ |
+ * 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: not supported by cvs2svn $ |
+ *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 _LINUX_CYCLADES_H |
+#define _LINUX_CYCLADES_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 { |
+ time_t in_use; /* Time device has been in use (secs) */ |
+ time_t recv_idle; /* Time since last char received (secs) */ |
+ 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 CYGETCARDINFO 0x435911 |
+#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 |
+/* #include "cyclomz.h" */ |
+/****************** ****************** *******************/ |
+/* |
+ * The data types defined below are used in all ZFIRM interface |
+ * data structures. They accommodate differences between HW |
+ * architectures and compilers. |
+ */ |
+ |
+#if defined(__alpha__) |
+typedef unsigned long ucdouble; /* 64 bits, unsigned */ |
+typedef unsigned int uclong; /* 32 bits, unsigned */ |
+#else |
+typedef unsigned long uclong; /* 32 bits, unsigned */ |
+#endif |
+typedef unsigned short ucshort; /* 16 bits, unsigned */ |
+typedef unsigned char ucchar; /* 8 bits, unsigned */ |
+ |
+/* |
+ * 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 { |
+ uclong fpga_id; /* FPGA Identification Register */ |
+ uclong fpga_version; /* FPGA Version Number Register */ |
+ uclong cpu_start; /* CPU start Register (write) */ |
+ uclong cpu_stop; /* CPU stop Register (write) */ |
+ uclong misc_reg; /* Miscelaneous Register */ |
+ uclong idt_mode; /* IDT mode Register */ |
+ uclong uart_irq_status; /* UART IRQ status Register */ |
+ uclong clear_timer0_irq; /* Clear timer interrupt Register */ |
+ uclong clear_timer1_irq; /* Clear timer interrupt Register */ |
+ uclong clear_timer2_irq; /* Clear timer interrupt Register */ |
+ uclong test_register; /* Test Register */ |
+ uclong test_count; /* Test Count Register */ |
+ uclong timer_select; /* Timer select register */ |
+ uclong pr_uart_irq_status; /* Prioritized UART IRQ stat Reg */ |
+ uclong ram_wait_state; /* RAM wait-state Register */ |
+ uclong uart_wait_state; /* UART wait-state Register */ |
+ uclong timer_wait_state; /* timer wait-state Register */ |
+ uclong 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 { |
+ uclong loc_addr_range; /* 00h - Local Address Range */ |
+ uclong loc_addr_base; /* 04h - Local Address Base */ |
+ uclong loc_arbitr; /* 08h - Local Arbitration */ |
+ uclong endian_descr; /* 0Ch - Big/Little Endian Descriptor */ |
+ uclong loc_rom_range; /* 10h - Local ROM Range */ |
+ uclong loc_rom_base; /* 14h - Local ROM Base */ |
+ uclong loc_bus_descr; /* 18h - Local Bus descriptor */ |
+ uclong loc_range_mst; /* 1Ch - Local Range for Master to PCI */ |
+ uclong loc_base_mst; /* 20h - Local Base for Master PCI */ |
+ uclong loc_range_io; /* 24h - Local Range for Master IO */ |
+ uclong pci_base_mst; /* 28h - PCI Base for Master PCI */ |
+ uclong pci_conf_io; /* 2Ch - PCI configuration for Master IO */ |
+ uclong filler1; /* 30h */ |
+ uclong filler2; /* 34h */ |
+ uclong filler3; /* 38h */ |
+ uclong filler4; /* 3Ch */ |
+ uclong mail_box_0; /* 40h - Mail Box 0 */ |
+ uclong mail_box_1; /* 44h - Mail Box 1 */ |
+ uclong mail_box_2; /* 48h - Mail Box 2 */ |
+ uclong mail_box_3; /* 4Ch - Mail Box 3 */ |
+ uclong filler5; /* 50h */ |
+ uclong filler6; /* 54h */ |
+ uclong filler7; /* 58h */ |
+ uclong filler8; /* 5Ch */ |
+ uclong pci_doorbell; /* 60h - PCI to Local Doorbell */ |
+ uclong loc_doorbell; /* 64h - Local to PCI Doorbell */ |
+ uclong intr_ctrl_stat; /* 68h - Interrupt Control/Status */ |
+ uclong 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 { |
+ uclong signature; /* ZFIRM/U signature */ |
+ uclong 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 { |
+ uclong op_mode; /* operation mode */ |
+ uclong intr_enable; /* interrupt masking */ |
+ uclong sw_flow; /* SW flow control */ |
+ uclong flow_status; /* output flow status */ |
+ uclong comm_baud; /* baud rate - numerically specified */ |
+ uclong comm_parity; /* parity */ |
+ uclong comm_data_l; /* data length/stop */ |
+ uclong comm_flags; /* other flags */ |
+ uclong hw_flow; /* HW flow control */ |
+ uclong rs_control; /* RS-232 outputs */ |
+ uclong rs_status; /* RS-232 inputs */ |
+ uclong flow_xon; /* xon char */ |
+ uclong flow_xoff; /* xoff char */ |
+ uclong hw_overflow; /* hw overflow counter */ |
+ uclong sw_overflow; /* sw overflow counter */ |
+ uclong comm_error; /* frame/parity error counter */ |
+ uclong ichar; |
+ uclong filler[7]; |
+}; |
+ |
+ |
+/* |
+ * BUF_CTRL - This per channel structure contains |
+ * all Tx and Rx buffer control for a given channel. |
+ */ |
+ |
+struct BUF_CTRL { |
+ uclong flag_dma; /* buffers are in Host memory */ |
+ uclong tx_bufaddr; /* address of the tx buffer */ |
+ uclong tx_bufsize; /* tx buffer size */ |
+ uclong tx_threshold; /* tx low water mark */ |
+ uclong tx_get; /* tail index tx buf */ |
+ uclong tx_put; /* head index tx buf */ |
+ uclong rx_bufaddr; /* address of the rx buffer */ |
+ uclong rx_bufsize; /* rx buffer size */ |
+ uclong rx_threshold; /* rx high water mark */ |
+ uclong rx_get; /* tail index rx buf */ |
+ uclong rx_put; /* head index rx buf */ |
+ uclong 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 */ |
+ uclong n_channel; /* number of channels */ |
+ uclong fw_version; /* firmware version */ |
+ |
+ /* static info provided by the driver */ |
+ uclong op_system; /* op_system id */ |
+ uclong dr_version; /* driver version */ |
+ |
+ /* board control area */ |
+ uclong inactivity; /* inactivity control */ |
+ |
+ /* host to FW commands */ |
+ uclong hcmd_channel; /* channel number */ |
+ uclong hcmd_param; /* pointer to parameters */ |
+ |
+ /* FW to Host commands */ |
+ uclong fwcmd_channel; /* channel number */ |
+ uclong fwcmd_param; /* pointer to parameters */ |
+ uclong zf_int_queue_addr; /* offset for INT_QUEUE structure */ |
+ |
+ /* filler so the structures are aligned */ |
+ uclong 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 |
+ |
+/* Per card data structure */ |
+struct resource; |
+struct cyclades_card { |
+ unsigned long base_phys; |
+ unsigned long ctl_phys; |
+ unsigned long base_addr; |
+ unsigned long ctl_addr; |
+ int irq; |
+ int num_chips; /* 0 if card absent, -1 if Z/PCI, else Y */ |
+ int first_line; /* minor number of first channel on card */ |
+ int nports; /* Number of ports in the card */ |
+ int bus_index; /* address shift - 0 for ISA, 1 for PCI */ |
+ int intr_enabled; /* FW Interrupt flag - 0 disabled, 1 enabled */ |
+ struct pci_dev *pdev; |
+#ifdef __KERNEL__ |
+ spinlock_t card_lock; |
+#else |
+ unsigned long filler; |
+#endif |
+}; |
+ |
+struct cyclades_chip { |
+ int filler; |
+}; |
+ |
+ |
+#ifdef __KERNEL__ |
+ |
+/*************************************** |
+ * Memory access functions/macros * |
+ * (required to support Alpha systems) * |
+ ***************************************/ |
+ |
+#define cy_writeb(port,val) {writeb((ucchar)(val),(ulong)(port)); mb();} |
+#define cy_writew(port,val) {writew((ushort)(val),(ulong)(port)); mb();} |
+#define cy_writel(port,val) {writel((uclong)(val),(ulong)(port)); mb();} |
+ |
+#define cy_readb(port) readb(port) |
+#define cy_readw(port) readw(port) |
+#define cy_readl(port) readl(port) |
+ |
+/* |
+ * Statistics counters |
+ */ |
+struct cyclades_icount { |
+ __u32 cts, dsr, rng, dcd, tx, rx; |
+ __u32 frame, parity, overrun, brk; |
+ __u32 buf_overrun; |
+}; |
+ |
+/* |
+ * This is our internal structure for each serial port's state. |
+ * |
+ * Many fields are paralleled by the structure used by the serial_struct |
+ * structure. |
+ * |
+ * For definitions of the flags field, see tty.h |
+ */ |
+ |
+struct cyclades_port { |
+ int magic; |
+ int card; |
+ int line; |
+ int flags; /* defined in tty.h */ |
+ int type; /* UART type */ |
+ struct tty_struct *tty; |
+ int read_status_mask; |
+ int ignore_status_mask; |
+ int timeout; |
+ int xmit_fifo_size; |
+ int cor1,cor2,cor3,cor4,cor5; |
+ int tbpr,tco,rbpr,rco; |
+ int baud; |
+ int rflow; |
+ int rtsdtr_inv; |
+ int chip_rev; |
+ int custom_divisor; |
+ int x_char; /* to be pushed out ASAP */ |
+ int close_delay; |
+ unsigned short closing_wait; |
+ unsigned long event; |
+ unsigned long last_active; |
+ int count; /* # of fd on device */ |
+ int breakon; |
+ int breakoff; |
+ int blocked_open; /* # of blocked opens */ |
+ unsigned char *xmit_buf; |
+ int xmit_head; |
+ int xmit_tail; |
+ int xmit_cnt; |
+ int default_threshold; |
+ int default_timeout; |
+ unsigned long jiffies[3]; |
+ unsigned long rflush_count; |
+ struct cyclades_monitor mon; |
+ struct cyclades_idle_stats idle_stats; |
+ struct cyclades_icount icount; |
+ struct work_struct tqueue; |
+ wait_queue_head_t open_wait; |
+ wait_queue_head_t close_wait; |
+ wait_queue_head_t shutdown_wait; |
+ wait_queue_head_t delta_msr_wait; |
+}; |
+ |
+/* |
+ * Events are used to schedule things to happen at timer-interrupt |
+ * time, instead of at cy interrupt time. |
+ */ |
+#define Cy_EVENT_READ_PROCESS 0 |
+#define Cy_EVENT_WRITE_WAKEUP 1 |
+#define Cy_EVENT_HANGUP 2 |
+#define Cy_EVENT_BREAK 3 |
+#define Cy_EVENT_OPEN_WAKEUP 4 |
+#define Cy_EVENT_SHUTDOWN_WAKEUP 5 |
+#define Cy_EVENT_DELTA_WAKEUP 6 |
+#define Cy_EVENT_Z_RX_FULL 7 |
+ |
+#define CLOSING_WAIT_DELAY 30*HZ |
+#define CY_CLOSING_WAIT_NONE 65535 |
+#define CY_CLOSING_WAIT_INF 0 |
+ |
+ |
+#define CyMAX_CHIPS_PER_CARD 8 |
+#define CyMAX_CHAR_FIFO 12 |
+#define CyPORTS_PER_CHIP 4 |
+#define CD1400_MAX_SPEED 115200 |
+ |
+#define CyISA_Ywin 0x2000 |
+ |
+#define CyPCI_Ywin 0x4000 |
+#define CyPCI_Yctl 0x80 |
+#define CyPCI_Zctl CTRL_WINDOW_SIZE |
+#define CyPCI_Zwin 0x80000 |
+#define CyPCI_Ze_win (2 * CyPCI_Zwin) |
+ |
+#define PCI_DEVICE_ID_MASK 0x06 |
+ |
+/**** CD1400 registers ****/ |
+ |
+#define CD1400_REV_G 0x46 |
+#define CD1400_REV_J 0x48 |
+ |
+#define CyRegSize 0x0400 |
+#define Cy_HwReset 0x1400 |
+#define Cy_ClrIntr 0x1800 |
+#define Cy_EpldRev 0x1e00 |
+ |
+/* Global Registers */ |
+ |
+#define CyGFRCR (0x40*2) |
+#define CyRevE (44) |
+#define CyCAR (0x68*2) |
+#define CyCHAN_0 (0x00) |
+#define CyCHAN_1 (0x01) |
+#define CyCHAN_2 (0x02) |
+#define CyCHAN_3 (0x03) |
+#define CyGCR (0x4B*2) |
+#define CyCH0_SERIAL (0x00) |
+#define CyCH0_PARALLEL (0x80) |
+#define CySVRR (0x67*2) |
+#define CySRModem (0x04) |
+#define CySRTransmit (0x02) |
+#define CySRReceive (0x01) |
+#define CyRICR (0x44*2) |
+#define CyTICR (0x45*2) |
+#define CyMICR (0x46*2) |
+#define CyICR0 (0x00) |
+#define CyICR1 (0x01) |
+#define CyICR2 (0x02) |
+#define CyICR3 (0x03) |
+#define CyRIR (0x6B*2) |
+#define CyTIR (0x6A*2) |
+#define CyMIR (0x69*2) |
+#define CyIRDirEq (0x80) |
+#define CyIRBusy (0x40) |
+#define CyIRUnfair (0x20) |
+#define CyIRContext (0x1C) |
+#define CyIRChannel (0x03) |
+#define CyPPR (0x7E*2) |
+#define CyCLOCK_20_1MS (0x27) |
+#define CyCLOCK_25_1MS (0x31) |
+#define CyCLOCK_25_5MS (0xf4) |
+#define CyCLOCK_60_1MS (0x75) |
+#define CyCLOCK_60_2MS (0xea) |
+ |
+/* Virtual Registers */ |
+ |
+#define CyRIVR (0x43*2) |
+#define CyTIVR (0x42*2) |
+#define CyMIVR (0x41*2) |
+#define CyIVRMask (0x07) |
+#define CyIVRRxEx (0x07) |
+#define CyIVRRxOK (0x03) |
+#define CyIVRTxOK (0x02) |
+#define CyIVRMdmOK (0x01) |
+#define CyTDR (0x63*2) |
+#define CyRDSR (0x62*2) |
+#define CyTIMEOUT (0x80) |
+#define CySPECHAR (0x70) |
+#define CyBREAK (0x08) |
+#define CyPARITY (0x04) |
+#define CyFRAME (0x02) |
+#define CyOVERRUN (0x01) |
+#define CyMISR (0x4C*2) |
+/* see CyMCOR_ and CyMSVR_ for bits*/ |
+#define CyEOSRR (0x60*2) |
+ |
+/* Channel Registers */ |
+ |
+#define CyLIVR (0x18*2) |
+#define CyMscsr (0x01) |
+#define CyTdsr (0x02) |
+#define CyRgdsr (0x03) |
+#define CyRedsr (0x07) |
+#define CyCCR (0x05*2) |
+/* Format 1 */ |
+#define CyCHAN_RESET (0x80) |
+#define CyCHIP_RESET (0x81) |
+#define CyFlushTransFIFO (0x82) |
+/* Format 2 */ |
+#define CyCOR_CHANGE (0x40) |
+#define CyCOR1ch (0x02) |
+#define CyCOR2ch (0x04) |
+#define CyCOR3ch (0x08) |
+/* Format 3 */ |
+#define CySEND_SPEC_1 (0x21) |
+#define CySEND_SPEC_2 (0x22) |
+#define CySEND_SPEC_3 (0x23) |
+#define CySEND_SPEC_4 (0x24) |
+/* Format 4 */ |
+#define CyCHAN_CTL (0x10) |
+#define CyDIS_RCVR (0x01) |
+#define CyENB_RCVR (0x02) |
+#define CyDIS_XMTR (0x04) |
+#define CyENB_XMTR (0x08) |
+#define CySRER (0x06*2) |
+#define CyMdmCh (0x80) |
+#define CyRxData (0x10) |
+#define CyTxRdy (0x04) |
+#define CyTxMpty (0x02) |
+#define CyNNDT (0x01) |
+#define CyCOR1 (0x08*2) |
+#define CyPARITY_NONE (0x00) |
+#define CyPARITY_0 (0x20) |
+#define CyPARITY_1 (0xA0) |
+#define CyPARITY_E (0x40) |
+#define CyPARITY_O (0xC0) |
+#define Cy_1_STOP (0x00) |
+#define Cy_1_5_STOP (0x04) |
+#define Cy_2_STOP (0x08) |
+#define Cy_5_BITS (0x00) |
+#define Cy_6_BITS (0x01) |
+#define Cy_7_BITS (0x02) |
+#define Cy_8_BITS (0x03) |
+#define CyCOR2 (0x09*2) |
+#define CyIXM (0x80) |
+#define CyTxIBE (0x40) |
+#define CyETC (0x20) |
+#define CyAUTO_TXFL (0x60) |
+#define CyLLM (0x10) |
+#define CyRLM (0x08) |
+#define CyRtsAO (0x04) |
+#define CyCtsAE (0x02) |
+#define CyDsrAE (0x01) |
+#define CyCOR3 (0x0A*2) |
+#define CySPL_CH_DRANGE (0x80) /* special character detect range */ |
+#define CySPL_CH_DET1 (0x40) /* enable special character detection |
+ on SCHR4-SCHR3 */ |
+#define CyFL_CTRL_TRNSP (0x20) /* Flow Control Transparency */ |
+#define CySPL_CH_DET2 (0x10) /* Enable special character detection |
+ on SCHR2-SCHR1 */ |
+#define CyREC_FIFO (0x0F) /* Receive FIFO threshold */ |
+#define CyCOR4 (0x1E*2) |
+#define CyCOR5 (0x1F*2) |
+#define CyCCSR (0x0B*2) |
+#define CyRxEN (0x80) |
+#define CyRxFloff (0x40) |
+#define CyRxFlon (0x20) |
+#define CyTxEN (0x08) |
+#define CyTxFloff (0x04) |
+#define CyTxFlon (0x02) |
+#define CyRDCR (0x0E*2) |
+#define CySCHR1 (0x1A*2) |
+#define CySCHR2 (0x1B*2) |
+#define CySCHR3 (0x1C*2) |
+#define CySCHR4 (0x1D*2) |
+#define CySCRL (0x22*2) |
+#define CySCRH (0x23*2) |
+#define CyLNC (0x24*2) |
+#define CyMCOR1 (0x15*2) |
+#define CyMCOR2 (0x16*2) |
+#define CyRTPR (0x21*2) |
+#define CyMSVR1 (0x6C*2) |
+#define CyMSVR2 (0x6D*2) |
+#define CyANY_DELTA (0xF0) |
+#define CyDSR (0x80) |
+#define CyCTS (0x40) |
+#define CyRI (0x20) |
+#define CyDCD (0x10) |
+#define CyDTR (0x02) |
+#define CyRTS (0x01) |
+#define CyPVSR (0x6F*2) |
+#define CyRBPR (0x78*2) |
+#define CyRCOR (0x7C*2) |
+#define CyTBPR (0x72*2) |
+#define CyTCOR (0x76*2) |
+ |
+/* Custom Registers */ |
+ |
+#define CyPLX_VER (0x3400) |
+#define PLX_9050 0x0b |
+#define PLX_9060 0x0c |
+#define PLX_9080 0x0d |
+ |
+/***************************************************************************/ |
+ |
+#endif /* __KERNEL__ */ |
+#endif /* _LINUX_CYCLADES_H */ |
Index: linuxc26/include/linux/8250_pci.h |
=================================================================== |
--- linuxc26/include/linux/8250_pci.h (nonexistent) |
+++ linuxc26/include/linux/8250_pci.h (revision 422) |
@@ -0,0 +1,2 @@ |
+int pci_siig10x_fn(struct pci_dev *dev, int enable); |
+int pci_siig20x_fn(struct pci_dev *dev, int enable); |
Index: linuxc26/include/linux/pipe_fs_i.h |
=================================================================== |
--- linuxc26/include/linux/pipe_fs_i.h (nonexistent) |
+++ linuxc26/include/linux/pipe_fs_i.h (revision 422) |
@@ -0,0 +1,48 @@ |
+#ifndef _LINUX_PIPE_FS_I_H |
+#define _LINUX_PIPE_FS_I_H |
+ |
+#define PIPEFS_MAGIC 0x50495045 |
+struct pipe_inode_info { |
+ wait_queue_head_t wait; |
+ char *base; |
+ unsigned int len; |
+ unsigned int start; |
+ unsigned int readers; |
+ unsigned int writers; |
+ unsigned int waiting_writers; |
+ unsigned int r_counter; |
+ unsigned int w_counter; |
+ struct fasync_struct *fasync_readers; |
+ struct fasync_struct *fasync_writers; |
+}; |
+ |
+/* Differs from PIPE_BUF in that PIPE_SIZE is the length of the actual |
+ memory allocation, whereas PIPE_BUF makes atomicity guarantees. */ |
+#define PIPE_SIZE PAGE_SIZE |
+ |
+#define PIPE_SEM(inode) (&(inode).i_sem) |
+#define PIPE_WAIT(inode) (&(inode).i_pipe->wait) |
+#define PIPE_BASE(inode) ((inode).i_pipe->base) |
+#define PIPE_START(inode) ((inode).i_pipe->start) |
+#define PIPE_LEN(inode) ((inode).i_pipe->len) |
+#define PIPE_READERS(inode) ((inode).i_pipe->readers) |
+#define PIPE_WRITERS(inode) ((inode).i_pipe->writers) |
+#define PIPE_WAITING_WRITERS(inode) ((inode).i_pipe->waiting_writers) |
+#define PIPE_RCOUNTER(inode) ((inode).i_pipe->r_counter) |
+#define PIPE_WCOUNTER(inode) ((inode).i_pipe->w_counter) |
+#define PIPE_FASYNC_READERS(inode) (&((inode).i_pipe->fasync_readers)) |
+#define PIPE_FASYNC_WRITERS(inode) (&((inode).i_pipe->fasync_writers)) |
+ |
+#define PIPE_EMPTY(inode) (PIPE_LEN(inode) == 0) |
+#define PIPE_FULL(inode) (PIPE_LEN(inode) == PIPE_SIZE) |
+#define PIPE_FREE(inode) (PIPE_SIZE - PIPE_LEN(inode)) |
+#define PIPE_END(inode) ((PIPE_START(inode) + PIPE_LEN(inode)) & (PIPE_SIZE-1)) |
+#define PIPE_MAX_RCHUNK(inode) (PIPE_SIZE - PIPE_START(inode)) |
+#define PIPE_MAX_WCHUNK(inode) (PIPE_SIZE - PIPE_END(inode)) |
+ |
+/* Drop the inode semaphore and wait for a pipe event, atomically */ |
+void pipe_wait(struct inode * inode); |
+ |
+struct inode* pipe_new(struct inode* inode); |
+ |
+#endif |
Index: linuxc26/include/linux/adb_mouse.h |
=================================================================== |
--- linuxc26/include/linux/adb_mouse.h (nonexistent) |
+++ linuxc26/include/linux/adb_mouse.h (revision 422) |
@@ -0,0 +1,23 @@ |
+#ifndef _LINUX_ADB_MOUSE_H |
+#define _LINUX_ADB_MOUSE_H |
+ |
+/* |
+ * linux/include/linux/mac_mouse.h |
+ * header file for Macintosh ADB mouse driver |
+ * 27-10-97 Michael Schmitz |
+ * copied from: |
+ * header file for Atari Mouse driver |
+ * by Robert de Vries (robert@and.nl) on 19Jul93 |
+ */ |
+ |
+struct mouse_status { |
+ char buttons; |
+ short dx; |
+ short dy; |
+ int ready; |
+ int active; |
+ struct wait_queue *wait; |
+ struct fasync_struct *fasyncptr; |
+}; |
+ |
+#endif |
Index: linuxc26/include/linux/ite_gpio.h |
=================================================================== |
--- linuxc26/include/linux/ite_gpio.h (nonexistent) |
+++ linuxc26/include/linux/ite_gpio.h (revision 422) |
@@ -0,0 +1,66 @@ |
+/* |
+ * FILE NAME ite_gpio.h |
+ * |
+ * BRIEF MODULE DESCRIPTION |
+ * Generic gpio. |
+ * |
+ * Author: MontaVista Software, Inc. <source@mvista.com> |
+ * Hai-Pao Fan <haipao@mvista.com> |
+ * |
+ * Copyright 2001 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 __ITE_GPIO_H |
+#define __ITE_GPIO_H |
+ |
+#include <linux/ioctl.h> |
+ |
+struct ite_gpio_ioctl_data { |
+ __u32 device; |
+ __u32 mask; |
+ __u32 data; |
+}; |
+ |
+#define ITE_GPIO_IOCTL_BASE 'Z' |
+ |
+#define ITE_GPIO_IN _IOWR(ITE_GPIO_IOCTL_BASE, 0, struct ite_gpio_ioctl_data) |
+#define ITE_GPIO_OUT _IOW (ITE_GPIO_IOCTL_BASE, 1, struct ite_gpio_ioctl_data) |
+#define ITE_GPIO_INT_CTRL _IOW (ITE_GPIO_IOCTL_BASE, 2, struct ite_gpio_ioctl_data) |
+#define ITE_GPIO_IN_STATUS _IOW (ITE_GPIO_IOCTL_BASE, 3, struct ite_gpio_ioctl_data) |
+#define ITE_GPIO_OUT_STATUS _IOW (ITE_GPIO_IOCTL_BASE, 4, struct ite_gpio_ioctl_data) |
+#define ITE_GPIO_GEN_CTRL _IOW (ITE_GPIO_IOCTL_BASE, 5, struct ite_gpio_ioctl_data) |
+#define ITE_GPIO_INT_WAIT _IOW (ITE_GPIO_IOCTL_BASE, 6, struct ite_gpio_ioctl_data) |
+ |
+#define ITE_GPIO_PORTA 0x01 |
+#define ITE_GPIO_PORTB 0x02 |
+#define ITE_GPIO_PORTC 0x04 |
+ |
+extern int ite_gpio_in(__u32 device, __u32 mask, volatile __u32 *data); |
+extern int ite_gpio_out(__u32 device, __u32 mask, __u32 data); |
+extern int ite_gpio_int_ctrl(__u32 device, __u32 mask, __u32 data); |
+extern int ite_gpio_in_status(__u32 device, __u32 mask, volatile __u32 *data); |
+extern int ite_gpio_out_status(__u32 device, __u32 mask, __u32 data); |
+extern int ite_gpio_gen_ctrl(__u32 device, __u32 mask, __u32 data); |
+extern int ite_gpio_int_wait(__u32 device, __u32 mask, __u32 data); |
+ |
+#endif |
Index: linuxc26/include/linux/atmppp.h |
=================================================================== |
--- linuxc26/include/linux/atmppp.h (nonexistent) |
+++ linuxc26/include/linux/atmppp.h (revision 422) |
@@ -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 */ |
Index: linuxc26/include/linux/pg.h |
=================================================================== |
--- linuxc26/include/linux/pg.h (nonexistent) |
+++ linuxc26/include/linux/pg.h (revision 422) |
@@ -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 */ |
Index: linuxc26/include/linux/sysfs.h |
=================================================================== |
--- linuxc26/include/linux/sysfs.h (nonexistent) |
+++ linuxc26/include/linux/sysfs.h (revision 422) |
@@ -0,0 +1,69 @@ |
+/* |
+ * sysfs.h - definitions for the device driver filesystem |
+ * |
+ * Copyright (c) 2001,2002 Patrick Mochel |
+ * |
+ * Please see Documentation/filesystems/sysfs.txt for more information. |
+ */ |
+ |
+#ifndef _SYSFS_H_ |
+#define _SYSFS_H_ |
+ |
+struct kobject; |
+struct module; |
+ |
+struct attribute { |
+ char * name; |
+ struct module * owner; |
+ mode_t mode; |
+}; |
+ |
+struct bin_attribute { |
+ struct attribute attr; |
+ size_t size; |
+ ssize_t (*read)(struct kobject *, char *, loff_t, size_t); |
+ ssize_t (*write)(struct kobject *, char *, loff_t, size_t); |
+}; |
+ |
+int sysfs_create_bin_file(struct kobject * kobj, struct bin_attribute * attr); |
+int sysfs_remove_bin_file(struct kobject * kobj, struct bin_attribute * attr); |
+ |
+struct sysfs_ops { |
+ ssize_t (*show)(struct kobject *, struct attribute *,char *); |
+ ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t); |
+}; |
+ |
+extern int |
+sysfs_create_dir(struct kobject *); |
+ |
+extern void |
+sysfs_remove_dir(struct kobject *); |
+ |
+extern void |
+sysfs_rename_dir(struct kobject *, const char *new_name); |
+ |
+extern int |
+sysfs_create_file(struct kobject *, const struct attribute *); |
+ |
+extern int |
+sysfs_update_file(struct kobject *, const struct attribute *); |
+ |
+extern void |
+sysfs_remove_file(struct kobject *, const struct attribute *); |
+ |
+extern int |
+sysfs_create_link(struct kobject * kobj, struct kobject * target, char * name); |
+ |
+extern void |
+sysfs_remove_link(struct kobject *, char * name); |
+ |
+ |
+struct attribute_group { |
+ char * name; |
+ struct attribute ** attrs; |
+}; |
+ |
+int sysfs_create_group(struct kobject *, const struct attribute_group *); |
+void sysfs_remove_group(struct kobject *, const struct attribute_group *); |
+ |
+#endif /* _SYSFS_H_ */ |
Index: linuxc26/include/linux/scc.h |
=================================================================== |
--- linuxc26/include/linux/scc.h (nonexistent) |
+++ linuxc26/include/linux/scc.h (revision 422) |
@@ -0,0 +1,253 @@ |
+/* $Id: scc.h,v 1.1 2004-01-28 15:26:31 giacomo Exp $ */ |
+ |
+#ifndef _SCC_H |
+#define _SCC_H |
+ |
+#include <linux/config.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; |
+}; |
+ |
+#ifdef __KERNEL__ |
+ |
+enum {TX_OFF, TX_ON}; /* command for scc_key_trx() */ |
+ |
+/* Vector masks in RR2B */ |
+ |
+#define VECTOR_MASK 0x06 |
+#define TXINT 0x00 |
+#define EXINT 0x02 |
+#define RXINT 0x04 |
+#define SPINT 0x06 |
+ |
+#ifdef CONFIG_SCC_DELAY |
+#define Inb(port) inb_p(port) |
+#define Outb(port, val) outb_p(val, port) |
+#else |
+#define Inb(port) inb(port) |
+#define Outb(port, val) outb(val, port) |
+#endif |
+ |
+/* SCC channel control structure for KISS */ |
+ |
+struct scc_kiss { |
+ unsigned char txdelay; /* Transmit Delay 10 ms/cnt */ |
+ unsigned char persist; /* Persistence (0-255) as a % */ |
+ unsigned char slottime; /* Delay to wait on persistence hit */ |
+ unsigned char tailtime; /* Delay after last byte written */ |
+ unsigned char fulldup; /* Full Duplex mode 0=CSMA 1=DUP 2=ALWAYS KEYED */ |
+ unsigned char waittime; /* Waittime before any transmit attempt */ |
+ unsigned int maxkeyup; /* Maximum time to transmit (seconds) */ |
+ unsigned char mintime; /* Minimal offtime after MAXKEYUP timeout (seconds) */ |
+ unsigned int idletime; /* Maximum idle time in ALWAYS KEYED mode (seconds) */ |
+ unsigned int maxdefer; /* Timer for CSMA channel busy limit */ |
+ unsigned char tx_inhibit; /* Transmit is not allowed when set */ |
+ unsigned char group; /* Group ID for AX.25 TX interlocking */ |
+ unsigned char mode; /* 'normal' or 'hwctrl' mode (unused) */ |
+ unsigned char softdcd; /* Use DPLL instead of DCD pin for carrier detect */ |
+}; |
+ |
+ |
+/* SCC channel structure */ |
+ |
+struct scc_channel { |
+ int init; /* channel exists? */ |
+ |
+ struct net_device *dev; /* link to device control structure */ |
+ struct net_device_stats dev_stat;/* device statistics */ |
+ |
+ char brand; /* manufacturer of the board */ |
+ long clock; /* used clock */ |
+ |
+ io_port ctrl; /* I/O address of CONTROL register */ |
+ io_port data; /* I/O address of DATA register */ |
+ io_port special; /* I/O address of special function port */ |
+ int irq; /* Number of Interrupt */ |
+ |
+ char option; |
+ char enhanced; /* Enhanced SCC support */ |
+ |
+ unsigned char wreg[16]; /* Copy of last written value in WRx */ |
+ unsigned char status; /* Copy of R0 at last external interrupt */ |
+ unsigned char dcd; /* DCD status */ |
+ |
+ struct scc_kiss kiss; /* control structure for KISS params */ |
+ struct scc_stat stat; /* statistical information */ |
+ struct scc_modem modem; /* modem information */ |
+ |
+ struct sk_buff_head tx_queue; /* next tx buffer */ |
+ struct sk_buff *rx_buff; /* pointer to frame currently received */ |
+ struct sk_buff *tx_buff; /* pointer to frame currently transmitted */ |
+ |
+ /* Timer */ |
+ struct timer_list tx_t; /* tx timer for this channel */ |
+ struct timer_list tx_wdog; /* tx watchdogs */ |
+ |
+ /* Channel lock */ |
+ spinlock_t lock; /* Channel guard lock */ |
+}; |
+ |
+#endif /* defined(__KERNEL__) */ |
+#endif /* defined(_SCC_H) */ |
Index: linuxc26/include/linux/smb_fs.h |
=================================================================== |
--- linuxc26/include/linux/smb_fs.h (nonexistent) |
+++ linuxc26/include/linux/smb_fs.h (revision 422) |
@@ -0,0 +1,204 @@ |
+/* |
+ * smb_fs.h |
+ * |
+ * Copyright (C) 1995 by Paal-Kr. Engstad and Volker Lendecke |
+ * Copyright (C) 1997 by Volker Lendecke |
+ * |
+ */ |
+ |
+#ifndef _LINUX_SMB_FS_H |
+#define _LINUX_SMB_FS_H |
+ |
+#include <linux/smb.h> |
+#include <linux/smb_fs_i.h> |
+#include <linux/smb_fs_sb.h> |
+#include <linux/fs.h> |
+ |
+/* |
+ * ioctl commands |
+ */ |
+#define SMB_IOC_GETMOUNTUID _IOR('u', 1, __kernel_old_uid_t) |
+#define SMB_IOC_NEWCONN _IOW('u', 2, struct smb_conn_opt) |
+ |
+/* __kernel_uid_t can never change, so we have to use __kernel_uid32_t */ |
+#define SMB_IOC_GETMOUNTUID32 _IOR('u', 3, __kernel_uid32_t) |
+ |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/pagemap.h> |
+#include <linux/vmalloc.h> |
+#include <linux/smb_mount.h> |
+#include <asm/unaligned.h> |
+ |
+static inline struct smb_sb_info *SMB_SB(struct super_block *sb) |
+{ |
+ return sb->s_fs_info; |
+} |
+ |
+static inline struct smb_inode_info *SMB_I(struct inode *inode) |
+{ |
+ return container_of(inode, struct smb_inode_info, vfs_inode); |
+} |
+ |
+/* macro names are short for word, double-word, long value (?) */ |
+#define WVAL(buf,pos) \ |
+ (le16_to_cpu(get_unaligned((u16 *)((u8 *)(buf) + (pos))))) |
+#define DVAL(buf,pos) \ |
+ (le32_to_cpu(get_unaligned((u32 *)((u8 *)(buf) + (pos))))) |
+#define LVAL(buf,pos) \ |
+ (le64_to_cpu(get_unaligned((u64 *)((u8 *)(buf) + (pos))))) |
+#define WSET(buf,pos,val) \ |
+ put_unaligned(cpu_to_le16((u16)(val)), (u16 *)((u8 *)(buf) + (pos))) |
+#define DSET(buf,pos,val) \ |
+ put_unaligned(cpu_to_le32((u32)(val)), (u32 *)((u8 *)(buf) + (pos))) |
+#define LSET(buf,pos,val) \ |
+ put_unaligned(cpu_to_le64((u64)(val)), (u64 *)((u8 *)(buf) + (pos))) |
+ |
+/* where to find the base of the SMB packet proper */ |
+#define smb_base(buf) ((u8 *)(((u8 *)(buf))+4)) |
+ |
+#ifdef DEBUG_SMB_MALLOC |
+ |
+#include <linux/slab.h> |
+ |
+extern int smb_malloced; |
+extern int smb_current_vmalloced; |
+extern int smb_current_kmalloced; |
+ |
+static inline void * |
+smb_vmalloc(unsigned int size) |
+{ |
+ smb_malloced += 1; |
+ smb_current_vmalloced += 1; |
+ return vmalloc(size); |
+} |
+ |
+static inline void |
+smb_vfree(void *obj) |
+{ |
+ smb_current_vmalloced -= 1; |
+ vfree(obj); |
+} |
+ |
+static inline void * |
+smb_kmalloc(size_t size, int flags) |
+{ |
+ smb_malloced += 1; |
+ smb_current_kmalloced += 1; |
+ return kmalloc(size, flags); |
+} |
+ |
+static inline void |
+smb_kfree(void *obj) |
+{ |
+ smb_current_kmalloced -= 1; |
+ kfree(obj); |
+} |
+ |
+#else /* DEBUG_SMB_MALLOC */ |
+ |
+#define smb_kmalloc(s,p) kmalloc(s,p) |
+#define smb_kfree(o) kfree(o) |
+#define smb_vmalloc(s) vmalloc(s) |
+#define smb_vfree(o) vfree(o) |
+ |
+#endif /* DEBUG_SMB_MALLOC */ |
+ |
+/* |
+ * Flags for the in-memory inode |
+ */ |
+#define SMB_F_LOCALWRITE 0x02 /* file modified locally */ |
+ |
+ |
+/* NT1 protocol capability bits */ |
+#define SMB_CAP_RAW_MODE 0x00000001 |
+#define SMB_CAP_MPX_MODE 0x00000002 |
+#define SMB_CAP_UNICODE 0x00000004 |
+#define SMB_CAP_LARGE_FILES 0x00000008 |
+#define SMB_CAP_NT_SMBS 0x00000010 |
+#define SMB_CAP_RPC_REMOTE_APIS 0x00000020 |
+#define SMB_CAP_STATUS32 0x00000040 |
+#define SMB_CAP_LEVEL_II_OPLOCKS 0x00000080 |
+#define SMB_CAP_LOCK_AND_READ 0x00000100 |
+#define SMB_CAP_NT_FIND 0x00000200 |
+#define SMB_CAP_DFS 0x00001000 |
+#define SMB_CAP_LARGE_READX 0x00004000 |
+#define SMB_CAP_LARGE_WRITEX 0x00008000 |
+#define SMB_CAP_UNIX 0x00800000 /* unofficial ... */ |
+ |
+ |
+/* |
+ * This is the time we allow an inode, dentry or dir cache to live. It is bad |
+ * for performance to have shorter ttl on an inode than on the cache. It can |
+ * cause refresh on each inode for a dir listing ... one-by-one |
+ */ |
+#define SMB_MAX_AGE(server) (((server)->mnt->ttl * HZ) / 1000) |
+ |
+static inline void |
+smb_age_dentry(struct smb_sb_info *server, struct dentry *dentry) |
+{ |
+ dentry->d_time = jiffies - SMB_MAX_AGE(server); |
+} |
+ |
+struct smb_cache_head { |
+ time_t mtime; /* unused */ |
+ unsigned long time; /* cache age */ |
+ unsigned long end; /* last valid fpos in cache */ |
+ int eof; |
+}; |
+ |
+#define SMB_DIRCACHE_SIZE ((int)(PAGE_CACHE_SIZE/sizeof(struct dentry *))) |
+union smb_dir_cache { |
+ struct smb_cache_head head; |
+ struct dentry *dentry[SMB_DIRCACHE_SIZE]; |
+}; |
+ |
+#define SMB_FIRSTCACHE_SIZE ((int)((SMB_DIRCACHE_SIZE * \ |
+ sizeof(struct dentry *) - sizeof(struct smb_cache_head)) / \ |
+ sizeof(struct dentry *))) |
+ |
+#define SMB_DIRCACHE_START (SMB_DIRCACHE_SIZE - SMB_FIRSTCACHE_SIZE) |
+ |
+struct smb_cache_control { |
+ struct smb_cache_head head; |
+ struct page *page; |
+ union smb_dir_cache *cache; |
+ unsigned long fpos, ofs; |
+ int filled, valid, idx; |
+}; |
+ |
+#define SMB_OPS_NUM_STATIC 5 |
+struct smb_ops { |
+ int (*read)(struct inode *inode, loff_t offset, int count, |
+ char *data); |
+ int (*write)(struct inode *inode, loff_t offset, int count, const |
+ char *data); |
+ int (*readdir)(struct file *filp, void *dirent, filldir_t filldir, |
+ struct smb_cache_control *ctl); |
+ |
+ int (*getattr)(struct smb_sb_info *server, struct dentry *dir, |
+ struct smb_fattr *fattr); |
+ /* int (*setattr)(...); */ /* setattr is really icky! */ |
+ |
+ int (*truncate)(struct inode *inode, loff_t length); |
+ |
+ |
+ /* --- --- --- end of "static" entries --- --- --- */ |
+ |
+ int (*convert)(unsigned char *output, int olen, |
+ const unsigned char *input, int ilen, |
+ struct nls_table *nls_from, |
+ struct nls_table *nls_to); |
+}; |
+ |
+static inline int |
+smb_is_open(struct inode *i) |
+{ |
+ return (SMB_I(i)->open == server_from_inode(i)->generation); |
+} |
+ |
+extern void smb_install_null_ops(struct smb_ops *); |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* _LINUX_SMB_FS_H */ |
Index: linuxc26/include/linux/writeback.h |
=================================================================== |
--- linuxc26/include/linux/writeback.h (nonexistent) |
+++ linuxc26/include/linux/writeback.h (revision 422) |
@@ -0,0 +1,96 @@ |
+/* |
+ * include/linux/writeback.h. |
+ */ |
+#ifndef WRITEBACK_H |
+#define WRITEBACK_H |
+ |
+struct backing_dev_info; |
+ |
+extern spinlock_t inode_lock; |
+extern struct list_head inode_in_use; |
+extern struct list_head inode_unused; |
+ |
+/* |
+ * Yes, writeback.h requires sched.h |
+ * No, sched.h is not included from here. |
+ */ |
+static inline int current_is_pdflush(void) |
+{ |
+ return current->flags & PF_FLUSHER; |
+} |
+ |
+/* |
+ * fs/fs-writeback.c |
+ */ |
+enum writeback_sync_modes { |
+ WB_SYNC_NONE, /* Don't wait on anything */ |
+ WB_SYNC_ALL, /* Wait on every mapping */ |
+ WB_SYNC_HOLD, /* Hold the inode on sb_dirty for sys_sync() */ |
+}; |
+ |
+/* |
+ * A control structure which tells the writeback code what to do |
+ */ |
+struct writeback_control { |
+ struct backing_dev_info *bdi; /* If !NULL, only write back this |
+ queue */ |
+ enum writeback_sync_modes sync_mode; |
+ unsigned long *older_than_this; /* If !NULL, only write back inodes |
+ older than this */ |
+ long nr_to_write; /* Write this many pages, and decrement |
+ this for each page written */ |
+ int nonblocking; /* Don't get stuck on request queues */ |
+ int encountered_congestion; /* An output: a queue is full */ |
+ int for_kupdate; /* A kupdate writeback */ |
+ int for_reclaim; /* Invoked from the page allocator */ |
+}; |
+ |
+/* |
+ * ->writepage() return values (make these much larger than a pagesize, in |
+ * case some fs is returning number-of-bytes-written from writepage) |
+ */ |
+#define WRITEPAGE_ACTIVATE 0x80000 /* IO was not started: activate page */ |
+ |
+/* |
+ * fs/fs-writeback.c |
+ */ |
+void writeback_inodes(struct writeback_control *wbc); |
+void wake_up_inode(struct inode *inode); |
+void __wait_on_inode(struct inode * inode); |
+void sync_inodes_sb(struct super_block *, int wait); |
+void sync_inodes(int wait); |
+ |
+/* writeback.h requires fs.h; it, too, is not included from here. */ |
+static inline void wait_on_inode(struct inode *inode) |
+{ |
+ if (inode->i_state & I_LOCK) |
+ __wait_on_inode(inode); |
+} |
+ |
+/* |
+ * mm/page-writeback.c |
+ */ |
+int wakeup_bdflush(long nr_pages); |
+ |
+/* These 5 are exported to sysctl. */ |
+extern int dirty_background_ratio; |
+extern int vm_dirty_ratio; |
+extern int dirty_writeback_centisecs; |
+extern int dirty_expire_centisecs; |
+ |
+struct ctl_table; |
+struct file; |
+int dirty_writeback_centisecs_handler(struct ctl_table *, int, struct file *, |
+ void __user *, size_t *); |
+ |
+void page_writeback_init(void); |
+void balance_dirty_pages_ratelimited(struct address_space *mapping); |
+int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0); |
+int do_writepages(struct address_space *mapping, struct writeback_control *wbc); |
+ |
+/* pdflush.c */ |
+extern int nr_pdflush_threads; /* Global so it can be exported to sysctl |
+ read-only. */ |
+ |
+ |
+#endif /* WRITEBACK_H */ |
Index: linuxc26/include/linux/efs_dir.h |
=================================================================== |
--- linuxc26/include/linux/efs_dir.h (nonexistent) |
+++ linuxc26/include/linux/efs_dir.h (revision 422) |
@@ -0,0 +1,42 @@ |
+/* |
+ * efs_dir.h |
+ * |
+ * Copyright (c) 1999 Al Smith |
+ */ |
+ |
+#ifndef __EFS_DIR_H__ |
+#define __EFS_DIR_H__ |
+ |
+#define EFS_DIRBSIZE_BITS EFS_BLOCKSIZE_BITS |
+#define EFS_DIRBSIZE (1 << EFS_DIRBSIZE_BITS) |
+ |
+struct efs_dentry { |
+ unsigned int inode; |
+ unsigned char namelen; |
+ char name[3]; |
+}; |
+ |
+#define EFS_DENTSIZE (sizeof(struct efs_dentry) - 3 + 1) |
+#define EFS_MAXNAMELEN ((1 << (sizeof(char) * 8)) - 1) |
+ |
+#define EFS_DIRBLK_HEADERSIZE 4 |
+#define EFS_DIRBLK_MAGIC 0xbeef /* moo */ |
+ |
+struct efs_dir { |
+ unsigned short magic; |
+ unsigned char firstused; |
+ unsigned char slots; |
+ |
+ unsigned char space[EFS_DIRBSIZE - EFS_DIRBLK_HEADERSIZE]; |
+}; |
+ |
+#define EFS_MAXENTS \ |
+ ((EFS_DIRBSIZE - EFS_DIRBLK_HEADERSIZE) / \ |
+ (EFS_DENTSIZE + sizeof(char))) |
+ |
+#define EFS_SLOTAT(dir, slot) EFS_REALOFF((dir)->space[slot]) |
+ |
+#define EFS_REALOFF(offset) ((offset << 1)) |
+ |
+#endif /* __EFS_DIR_H__ */ |
+ |
Index: linuxc26/include/linux/pci.h |
=================================================================== |
--- linuxc26/include/linux/pci.h (nonexistent) |
+++ linuxc26/include/linux/pci.h (revision 422) |
@@ -0,0 +1,880 @@ |
+/* |
+ * $Id: pci.h,v 1.1 2004-01-28 15:26:15 giacomo Exp $ |
+ * |
+ * 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 LINUX_PCI_H |
+#define LINUX_PCI_H |
+ |
+#include <linux/mod_devicetable.h> |
+ |
+/* |
+ * Under PCI, each device has 256 bytes of configuration address space, |
+ * of which the first 64 bytes are standardized as follows: |
+ */ |
+#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_STATUS 0x06 /* 16 bits */ |
+#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) |
+#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_NO_ISA 0x04 /* Disable bridging of ISA ports */ |
+#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_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 /* Auxilliary 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_CTRL 4 /* PM control and status register */ |
+#define PCI_PM_CTRL_STATE_MASK 0x0003 /* Current power state (D0 to D3) */ |
+#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 */ |
+ |
+/* 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_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_DATA_64 12 /* 16 bits of data for 64-bit devices */ |
+ |
+/* 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-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_MAX_READ 0x000c /* Max Memory Read Byte Count */ |
+#define PCI_X_CMD_MAX_SPLIT 0x0070 /* Max Outstanding Split Transactions */ |
+#define PCI_X_DEVFN 4 /* A copy of devfn. */ |
+#define PCI_X_BUSNR 5 /* Bus segment number */ |
+#define PCI_X_STATUS 6 /* PCI-X capabilities */ |
+#define PCI_X_STATUS_64BIT 0x0001 /* 64-bit device */ |
+#define PCI_X_STATUS_133MHZ 0x0002 /* 133 MHz capable */ |
+#define PCI_X_STATUS_SPL_DISC 0x0004 /* Split Completion Discarded */ |
+#define PCI_X_STATUS_UNX_SPL 0x0008 /* Unexpected Split Completion */ |
+#define PCI_X_STATUS_COMPLEX 0x0010 /* Device Complexity */ |
+#define PCI_X_STATUS_MAX_READ 0x0060 /* Designed Maximum Memory Read Count */ |
+#define PCI_X_STATUS_MAX_SPLIT 0x0380 /* Design Max Outstanding Split Trans */ |
+#define PCI_X_STATUS_MAX_CUM 0x1c00 /* Designed Max Cumulative Read Size */ |
+#define PCI_X_STATUS_SPL_ERR 0x2000 /* Rcvd Split Completion Error Msg */ |
+ |
+/* Include the ID list */ |
+ |
+#include <linux/pci_ids.h> |
+ |
+/* |
+ * 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. */ |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/types.h> |
+#include <linux/config.h> |
+#include <linux/ioport.h> |
+#include <linux/list.h> |
+#include <linux/errno.h> |
+#include <linux/device.h> |
+ |
+/* File state for mmap()s on /proc/bus/pci/X/Y */ |
+enum pci_mmap_state { |
+ pci_mmap_io, |
+ pci_mmap_mem |
+}; |
+ |
+/* This defines the direction arg to the DMA mapping routines. */ |
+#define PCI_DMA_BIDIRECTIONAL 0 |
+#define PCI_DMA_TODEVICE 1 |
+#define PCI_DMA_FROMDEVICE 2 |
+#define PCI_DMA_NONE 3 |
+ |
+#define DEVICE_COUNT_COMPATIBLE 4 |
+#define DEVICE_COUNT_IRQ 2 |
+#define DEVICE_COUNT_DMA 2 |
+#define DEVICE_COUNT_RESOURCE 12 |
+ |
+/* |
+ * The pci_dev structure is used to describe PCI devices. |
+ */ |
+struct pci_dev { |
+ struct list_head global_list; /* node in list of all PCI devices */ |
+ struct list_head bus_list; /* node in per-bus list */ |
+ struct pci_bus *bus; /* bus this device is on */ |
+ struct pci_bus *subordinate; /* bus this device bridges to */ |
+ |
+ void *sysdata; /* hook for sys-specific extension */ |
+ struct proc_dir_entry *procent; /* device entry in /proc/bus/pci */ |
+ |
+ unsigned int devfn; /* encoded device & function index */ |
+ unsigned short vendor; |
+ unsigned short device; |
+ unsigned short subsystem_vendor; |
+ unsigned short subsystem_device; |
+ unsigned int class; /* 3 bytes: (base,sub,prog-if) */ |
+ u8 hdr_type; /* PCI header type (`multi' flag masked out) */ |
+ u8 rom_base_reg; /* which config register controls the ROM */ |
+ |
+ struct pci_driver *driver; /* which driver has allocated this device */ |
+ u64 dma_mask; /* Mask of the bits of bus address this |
+ device implements. Normally this is |
+ 0xffffffff. You only need to change |
+ this if your device has broken DMA |
+ or supports 64-bit transfers. */ |
+ struct list_head pools; /* pci_pools tied to this device */ |
+ |
+ u64 consistent_dma_mask;/* Like dma_mask, but for |
+ pci_alloc_consistent mappings as |
+ not all hardware supports |
+ 64 bit addresses for consistent |
+ allocations such descriptors. */ |
+ u32 current_state; /* Current operating state. In ACPI-speak, |
+ this is D0-D3, D0 being fully functional, |
+ and D3 being off. */ |
+ |
+ struct device dev; /* Generic device interface */ |
+ |
+ /* device is compatible with these IDs */ |
+ unsigned short vendor_compatible[DEVICE_COUNT_COMPATIBLE]; |
+ unsigned short device_compatible[DEVICE_COUNT_COMPATIBLE]; |
+ |
+ /* |
+ * Instead of touching interrupt line and base address registers |
+ * directly, use the values stored here. They might be different! |
+ */ |
+ unsigned int irq; |
+ struct resource resource[DEVICE_COUNT_RESOURCE]; /* I/O and memory regions + expansion ROMs */ |
+ struct resource dma_resource[DEVICE_COUNT_DMA]; |
+ struct resource irq_resource[DEVICE_COUNT_IRQ]; |
+ |
+ char * slot_name; /* pointer to dev.bus_id */ |
+ |
+ /* These fields are used by common fixups */ |
+ unsigned int transparent:1; /* Transparent PCI bridge */ |
+ unsigned int multifunction:1;/* Part of multi-function device */ |
+#ifdef CONFIG_PCI_NAMES |
+#define PCI_NAME_SIZE 50 |
+#define PCI_NAME_HALF __stringify(20) /* less than half to handle slop */ |
+ char pretty_name[PCI_NAME_SIZE]; /* pretty name for users to see */ |
+#endif |
+}; |
+ |
+#define pci_dev_g(n) list_entry(n, struct pci_dev, global_list) |
+#define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list) |
+#define to_pci_dev(n) container_of(n, struct pci_dev, dev) |
+ |
+/* |
+ * For PCI devices, the region numbers are assigned this way: |
+ * |
+ * 0-5 standard PCI regions |
+ * 6 expansion ROM |
+ * 7-10 bridges: address space assigned to buses behind the bridge |
+ */ |
+ |
+#define PCI_ROM_RESOURCE 6 |
+#define PCI_BRIDGE_RESOURCES 7 |
+#define PCI_NUM_RESOURCES 11 |
+ |
+#ifndef PCI_BUS_NUM_RESOURCES |
+#define PCI_BUS_NUM_RESOURCES 4 |
+#endif |
+ |
+#define PCI_REGION_FLAG_MASK 0x0fU /* These bits of resource flags tell us the PCI region flags */ |
+ |
+struct pci_bus { |
+ struct list_head node; /* node in list of buses */ |
+ struct pci_bus *parent; /* parent bus this bridge is on */ |
+ struct list_head children; /* list of child buses */ |
+ struct list_head devices; /* list of devices on this bus */ |
+ struct pci_dev *self; /* bridge device as seen by parent */ |
+ struct resource *resource[PCI_BUS_NUM_RESOURCES]; |
+ /* address space routed to this bus */ |
+ |
+ struct pci_ops *ops; /* configuration access functions */ |
+ void *sysdata; /* hook for sys-specific extension */ |
+ struct proc_dir_entry *procdir; /* directory entry in /proc/bus/pci */ |
+ |
+ unsigned char number; /* bus number */ |
+ unsigned char primary; /* number of primary bridge */ |
+ unsigned char secondary; /* number of secondary bridge */ |
+ unsigned char subordinate; /* max number of subordinate buses */ |
+ |
+ char name[48]; |
+ |
+ struct device * dev; |
+}; |
+ |
+#define pci_bus_b(n) list_entry(n, struct pci_bus, node) |
+ |
+/* |
+ * Error values that may be returned by PCI functions. |
+ */ |
+#define PCIBIOS_SUCCESSFUL 0x00 |
+#define PCIBIOS_FUNC_NOT_SUPPORTED 0x81 |
+#define PCIBIOS_BAD_VENDOR_ID 0x83 |
+#define PCIBIOS_DEVICE_NOT_FOUND 0x86 |
+#define PCIBIOS_BAD_REGISTER_NUMBER 0x87 |
+#define PCIBIOS_SET_FAILED 0x88 |
+#define PCIBIOS_BUFFER_TOO_SMALL 0x89 |
+ |
+/* Low-level architecture-dependent routines */ |
+ |
+struct pci_ops { |
+ int (*read)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *val); |
+ int (*write)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 val); |
+}; |
+ |
+struct pci_raw_ops { |
+ int (*read)(int dom, int bus, int devfn, int reg, int len, u32 *val); |
+ int (*write)(int dom, int bus, int devfn, int reg, int len, u32 val); |
+}; |
+ |
+extern struct pci_raw_ops *raw_pci_ops; |
+ |
+struct pci_bus_region { |
+ unsigned long start; |
+ unsigned long end; |
+}; |
+ |
+struct pci_dynids { |
+ spinlock_t lock; /* protects list, index */ |
+ struct list_head list; /* for IDs added at runtime */ |
+ unsigned int use_driver_data:1; /* pci_driver->driver_data is used */ |
+}; |
+ |
+struct pci_driver { |
+ struct list_head node; |
+ char *name; |
+ const struct pci_device_id *id_table; /* must be non-NULL for probe to be called */ |
+ int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); /* New device inserted */ |
+ void (*remove) (struct pci_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) */ |
+ int (*suspend) (struct pci_dev *dev, u32 state); /* Device suspended */ |
+ int (*resume) (struct pci_dev *dev); /* Device woken up */ |
+ int (*enable_wake) (struct pci_dev *dev, u32 state, int enable); /* Enable wake event */ |
+ |
+ struct device_driver driver; |
+ struct pci_dynids dynids; |
+}; |
+ |
+#define to_pci_driver(drv) container_of(drv,struct pci_driver, driver) |
+ |
+/** |
+ * PCI_DEVICE - macro used to describe a specific pci device |
+ * @vend: the 16 bit PCI Vendor ID |
+ * @dev: the 16 bit PCI Device ID |
+ * |
+ * This macro is used to create a struct pci_device_id that matches a |
+ * specific device. The subvendor and subdevice fields will be set to |
+ * PCI_ANY_ID. |
+ */ |
+#define PCI_DEVICE(vend,dev) \ |
+ .vendor = (vend), .device = (dev), \ |
+ .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID |
+ |
+/** |
+ * PCI_DEVICE_CLASS - macro used to describe a specific pci device class |
+ * @dev_class: the class, subclass, prog-if triple for this device |
+ * @dev_class_mask: the class mask for this device |
+ * |
+ * This macro is used to create a struct pci_device_id that matches a |
+ * specific PCI class. The vendor, device, subvendor, and subdevice |
+ * fields will be set to PCI_ANY_ID. |
+ */ |
+#define PCI_DEVICE_CLASS(dev_class,dev_class_mask) \ |
+ .class = (dev_class), .class_mask = (dev_class_mask), \ |
+ .vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \ |
+ .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID |
+ |
+/* these external functions are only available when PCI support is enabled */ |
+#ifdef CONFIG_PCI |
+ |
+extern struct bus_type pci_bus_type; |
+ |
+/* Do NOT directly access these two variables, unless you are arch specific pci |
+ * code, or pci core code. */ |
+extern struct list_head pci_root_buses; /* list of all known PCI buses */ |
+extern struct list_head pci_devices; /* list of all devices */ |
+ |
+void pcibios_fixup_bus(struct pci_bus *); |
+int pcibios_enable_device(struct pci_dev *, int mask); |
+char *pcibios_setup (char *str); |
+ |
+/* Used only when drivers/pci/setup.c is used */ |
+void pcibios_align_resource(void *, struct resource *, |
+ unsigned long, unsigned long); |
+void pcibios_update_irq(struct pci_dev *, int irq); |
+ |
+/* Generic PCI functions used internally */ |
+ |
+extern struct pci_bus *pci_find_bus(int domain, int busnr); |
+struct pci_bus *pci_scan_bus_parented(struct device *parent, int bus, struct pci_ops *ops, void *sysdata); |
+static inline struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata) |
+{ |
+ return pci_scan_bus_parented(NULL, bus, ops, sysdata); |
+} |
+int pci_scan_slot(struct pci_bus *bus, int devfn); |
+void pci_bus_add_devices(struct pci_bus *bus); |
+void pci_name_device(struct pci_dev *dev); |
+char *pci_class_name(u32 class); |
+void pci_read_bridge_bases(struct pci_bus *child); |
+struct resource *pci_find_parent_resource(const struct pci_dev *dev, struct resource *res); |
+int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge); |
+extern struct pci_dev *pci_dev_get(struct pci_dev *dev); |
+extern void pci_dev_put(struct pci_dev *dev); |
+ |
+extern void pci_remove_bus_device(struct pci_dev *dev); |
+ |
+/* Generic PCI functions exported to card drivers */ |
+ |
+struct pci_dev *pci_find_device (unsigned int vendor, unsigned int device, const struct pci_dev *from); |
+struct pci_dev *pci_find_device_reverse (unsigned int vendor, unsigned int device, const struct pci_dev *from); |
+struct pci_dev *pci_find_subsys (unsigned int vendor, unsigned int device, |
+ unsigned int ss_vendor, unsigned int ss_device, |
+ const struct pci_dev *from); |
+struct pci_dev *pci_find_class (unsigned int class, const struct pci_dev *from); |
+struct pci_dev *pci_find_slot (unsigned int bus, unsigned int devfn); |
+int pci_find_capability (struct pci_dev *dev, int cap); |
+struct pci_bus * pci_find_next_bus(const struct pci_bus *from); |
+ |
+struct pci_dev *pci_get_device (unsigned int vendor, unsigned int device, struct pci_dev *from); |
+struct pci_dev *pci_get_subsys (unsigned int vendor, unsigned int device, |
+ unsigned int ss_vendor, unsigned int ss_device, |
+ struct pci_dev *from); |
+int pci_bus_read_config_byte (struct pci_bus *bus, unsigned int devfn, int where, u8 *val); |
+int pci_bus_read_config_word (struct pci_bus *bus, unsigned int devfn, int where, u16 *val); |
+int pci_bus_read_config_dword (struct pci_bus *bus, unsigned int devfn, int where, u32 *val); |
+int pci_bus_write_config_byte (struct pci_bus *bus, unsigned int devfn, int where, u8 val); |
+int pci_bus_write_config_word (struct pci_bus *bus, unsigned int devfn, int where, u16 val); |
+int pci_bus_write_config_dword (struct pci_bus *bus, unsigned int devfn, int where, u32 val); |
+ |
+static inline int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val) |
+{ |
+ return pci_bus_read_config_byte (dev->bus, dev->devfn, where, val); |
+} |
+static inline int pci_read_config_word(struct pci_dev *dev, int where, u16 *val) |
+{ |
+ return pci_bus_read_config_word (dev->bus, dev->devfn, where, val); |
+} |
+static inline int pci_read_config_dword(struct pci_dev *dev, int where, u32 *val) |
+{ |
+ return pci_bus_read_config_dword (dev->bus, dev->devfn, where, val); |
+} |
+static inline int pci_write_config_byte(struct pci_dev *dev, int where, u8 val) |
+{ |
+ return pci_bus_write_config_byte (dev->bus, dev->devfn, where, val); |
+} |
+static inline int pci_write_config_word(struct pci_dev *dev, int where, u16 val) |
+{ |
+ return pci_bus_write_config_word (dev->bus, dev->devfn, where, val); |
+} |
+static inline int pci_write_config_dword(struct pci_dev *dev, int where, u32 val) |
+{ |
+ return pci_bus_write_config_dword (dev->bus, dev->devfn, where, val); |
+} |
+ |
+int pci_enable_device(struct pci_dev *dev); |
+int pci_enable_device_bars(struct pci_dev *dev, int mask); |
+void pci_disable_device(struct pci_dev *dev); |
+void pci_set_master(struct pci_dev *dev); |
+#define HAVE_PCI_SET_MWI |
+int pci_set_mwi(struct pci_dev *dev); |
+void pci_clear_mwi(struct pci_dev *dev); |
+int pci_set_dma_mask(struct pci_dev *dev, u64 mask); |
+int pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask); |
+int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask); |
+int pci_assign_resource(struct pci_dev *dev, int i); |
+ |
+/* Power management related routines */ |
+int pci_save_state(struct pci_dev *dev, u32 *buffer); |
+int pci_restore_state(struct pci_dev *dev, u32 *buffer); |
+int pci_set_power_state(struct pci_dev *dev, int state); |
+int pci_enable_wake(struct pci_dev *dev, u32 state, int enable); |
+ |
+/* Helper functions for low-level code (drivers/pci/setup-[bus,res].c) */ |
+void pci_bus_assign_resources(struct pci_bus *bus); |
+void pci_bus_size_bridges(struct pci_bus *bus); |
+int pci_claim_resource(struct pci_dev *, int); |
+void pci_assign_unassigned_resources(void); |
+void pdev_enable_device(struct pci_dev *); |
+void pdev_sort_resources(struct pci_dev *, struct resource_list *); |
+void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *), |
+ int (*)(struct pci_dev *, u8, u8)); |
+#define HAVE_PCI_REQ_REGIONS 2 |
+int pci_request_regions(struct pci_dev *, char *); |
+void pci_release_regions(struct pci_dev *); |
+int pci_request_region(struct pci_dev *, int, char *); |
+void pci_release_region(struct pci_dev *, int); |
+ |
+/* drivers/pci/bus.c */ |
+void pci_enable_bridges(struct pci_bus *bus); |
+ |
+/* New-style probing supporting hot-pluggable devices */ |
+int pci_register_driver(struct pci_driver *); |
+void pci_unregister_driver(struct pci_driver *); |
+void pci_remove_behind_bridge(struct pci_dev *); |
+struct pci_driver *pci_dev_driver(const struct pci_dev *); |
+const struct pci_device_id *pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev); |
+int pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass); |
+ |
+/* kmem_cache style wrapper around pci_alloc_consistent() */ |
+struct pci_pool *pci_pool_create (const char *name, struct pci_dev *dev, |
+ size_t size, size_t align, size_t allocation); |
+void pci_pool_destroy (struct pci_pool *pool); |
+ |
+void *pci_pool_alloc (struct pci_pool *pool, int flags, dma_addr_t *handle); |
+void pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t addr); |
+ |
+#if defined(CONFIG_ISA) || defined(CONFIG_EISA) |
+extern struct pci_dev *isa_bridge; |
+#endif |
+ |
+#endif /* CONFIG_PCI */ |
+ |
+/* Include architecture-dependent settings and functions */ |
+ |
+#include <asm/pci.h> |
+ |
+/* |
+ * If the system does not have PCI, clearly these return errors. Define |
+ * these as simple inline functions to avoid hair in drivers. |
+ */ |
+ |
+#ifndef CONFIG_PCI |
+#define _PCI_NOP(o,s,t) \ |
+ static inline int pci_##o##_config_##s (struct pci_dev *dev, int where, t val) \ |
+ { return PCIBIOS_FUNC_NOT_SUPPORTED; } |
+#define _PCI_NOP_ALL(o,x) _PCI_NOP(o,byte,u8 x) \ |
+ _PCI_NOP(o,word,u16 x) \ |
+ _PCI_NOP(o,dword,u32 x) |
+_PCI_NOP_ALL(read, *) |
+_PCI_NOP_ALL(write,) |
+ |
+static inline struct pci_dev *pci_find_device(unsigned int vendor, unsigned int device, const struct pci_dev *from) |
+{ return NULL; } |
+ |
+static inline struct pci_dev *pci_find_class(unsigned int class, const struct pci_dev *from) |
+{ return NULL; } |
+ |
+static inline struct pci_dev *pci_find_slot(unsigned int bus, unsigned int devfn) |
+{ return NULL; } |
+ |
+static inline struct pci_dev *pci_find_subsys(unsigned int vendor, unsigned int device, |
+unsigned int ss_vendor, unsigned int ss_device, const struct pci_dev *from) |
+{ return NULL; } |
+ |
+static inline struct pci_dev *pci_get_device (unsigned int vendor, unsigned int device, struct pci_dev *from) |
+{ return NULL; } |
+ |
+static inline struct pci_dev *pci_get_subsys (unsigned int vendor, unsigned int device, |
+unsigned int ss_vendor, unsigned int ss_device, struct pci_dev *from) |
+{ return NULL; } |
+ |
+static inline void pci_set_master(struct pci_dev *dev) { } |
+static inline int pci_enable_device(struct pci_dev *dev) { return -EIO; } |
+static inline void pci_disable_device(struct pci_dev *dev) { } |
+static inline int pci_module_init(struct pci_driver *drv) { return -ENODEV; } |
+static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask) { return -EIO; } |
+static inline int pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask) { return -EIO; } |
+static inline int pci_assign_resource(struct pci_dev *dev, int i) { return -EBUSY;} |
+static inline int pci_register_driver(struct pci_driver *drv) { return 0;} |
+static inline void pci_unregister_driver(struct pci_driver *drv) { } |
+static inline int pci_find_capability (struct pci_dev *dev, int cap) {return 0; } |
+static inline const struct pci_device_id *pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev) { return NULL; } |
+ |
+/* Power management related routines */ |
+static inline int pci_save_state(struct pci_dev *dev, u32 *buffer) { return 0; } |
+static inline int pci_restore_state(struct pci_dev *dev, u32 *buffer) { return 0; } |
+static inline int pci_set_power_state(struct pci_dev *dev, int state) { return 0; } |
+static inline int pci_enable_wake(struct pci_dev *dev, u32 state, int enable) { return 0; } |
+ |
+#define isa_bridge ((struct pci_dev *)NULL) |
+ |
+#else |
+ |
+/* |
+ * a helper function which helps ensure correct pci_driver |
+ * setup and cleanup for commonly-encountered hotplug/modular cases |
+ * |
+ * This MUST stay in a header, as it checks for -DMODULE |
+ */ |
+static inline int pci_module_init(struct pci_driver *drv) |
+{ |
+ int rc = pci_register_driver (drv); |
+ |
+ if (rc > 0) |
+ return 0; |
+ |
+ /* iff CONFIG_HOTPLUG and built into kernel, we should |
+ * leave the driver around for future hotplug events. |
+ * For the module case, a hotplug daemon of some sort |
+ * should load a module in response to an insert event. */ |
+#if defined(CONFIG_HOTPLUG) && !defined(MODULE) |
+ if (rc == 0) |
+ return 0; |
+#else |
+ if (rc == 0) |
+ rc = -ENODEV; |
+#endif |
+ |
+ /* if we get here, we need to clean up pci driver instance |
+ * and return some sort of error */ |
+ pci_unregister_driver (drv); |
+ |
+ return rc; |
+} |
+ |
+/* |
+ * PCI domain support. Sometimes called PCI segment (eg by ACPI), |
+ * a PCI domain is defined to be a set of PCI busses which share |
+ * configuration space. |
+ */ |
+#ifndef CONFIG_PCI_DOMAINS |
+static inline int pci_domain_nr(struct pci_bus *bus) { return 0; } |
+static inline int pci_name_bus(char *name, struct pci_bus *bus) |
+{ |
+ sprintf(name, "%02x", bus->number); |
+ return 0; |
+} |
+#endif |
+ |
+#endif /* !CONFIG_PCI */ |
+ |
+/* these helpers provide future and backwards compatibility |
+ * for accessing popular PCI BAR info */ |
+#define pci_resource_start(dev,bar) ((dev)->resource[(bar)].start) |
+#define pci_resource_end(dev,bar) ((dev)->resource[(bar)].end) |
+#define pci_resource_flags(dev,bar) ((dev)->resource[(bar)].flags) |
+#define pci_resource_len(dev,bar) \ |
+ ((pci_resource_start((dev),(bar)) == 0 && \ |
+ pci_resource_end((dev),(bar)) == \ |
+ pci_resource_start((dev),(bar))) ? 0 : \ |
+ \ |
+ (pci_resource_end((dev),(bar)) - \ |
+ pci_resource_start((dev),(bar)) + 1)) |
+ |
+/* Similar to the helpers above, these manipulate per-pci_dev |
+ * driver-specific data. They are really just a wrapper around |
+ * the generic device structure functions of these calls. |
+ */ |
+static inline void *pci_get_drvdata (struct pci_dev *pdev) |
+{ |
+ return dev_get_drvdata(&pdev->dev); |
+} |
+ |
+static inline void pci_set_drvdata (struct pci_dev *pdev, void *data) |
+{ |
+ dev_set_drvdata(&pdev->dev, data); |
+} |
+ |
+/* If you want to know what to call your pci_dev, ask this function. |
+ * Again, it's a wrapper around the generic device. |
+ */ |
+static inline char *pci_name(struct pci_dev *pdev) |
+{ |
+ return pdev->dev.bus_id; |
+} |
+ |
+/* Some archs want to see the pretty pci name, so use this macro */ |
+#ifdef CONFIG_PCI_NAMES |
+#define pci_pretty_name(dev) ((dev)->pretty_name) |
+#else |
+#define pci_pretty_name(dev) "" |
+#endif |
+ |
+/* |
+ * The world is not perfect and supplies us with broken PCI devices. |
+ * For at least a part of these bugs we need a work-around, so both |
+ * generic (drivers/pci/quirks.c) and per-architecture code can define |
+ * fixup hooks to be called for particular buggy devices. |
+ */ |
+ |
+struct pci_fixup { |
+ int pass; |
+ u16 vendor, device; /* You can use PCI_ANY_ID here of course */ |
+ void (*hook)(struct pci_dev *dev); |
+}; |
+ |
+extern struct pci_fixup pcibios_fixups[]; |
+ |
+#define PCI_FIXUP_HEADER 1 /* Called immediately after reading configuration header */ |
+#define PCI_FIXUP_FINAL 2 /* Final phase of device fixups */ |
+ |
+void pci_fixup_device(int pass, struct pci_dev *dev); |
+ |
+extern int pci_pci_problems; |
+#define PCIPCI_FAIL 1 |
+#define PCIPCI_TRITON 2 |
+#define PCIPCI_NATOMA 4 |
+#define PCIPCI_VIAETBF 8 |
+#define PCIPCI_VSFX 16 |
+#define PCIPCI_ALIMAGIK 32 |
+ |
+#endif /* __KERNEL__ */ |
+#endif /* LINUX_PCI_H */ |
Index: linuxc26/include/linux/ibmtr.h |
=================================================================== |
--- linuxc26/include/linux/ibmtr.h (nonexistent) |
+++ linuxc26/include/linux/ibmtr.h (revision 422) |
@@ -0,0 +1,372 @@ |
+#ifndef __LINUX_IBMTR_H__ |
+#define __LINUX_IBMTR_H__ |
+ |
+/* Definitions for an IBM Token Ring card. */ |
+/* This file is distributed under the GNU GPL */ |
+ |
+/* ported to the Alpha architecture 02/20/96 (just used the HZ macro) */ |
+ |
+#define TR_RETRY_INTERVAL (30*HZ) /* 500 on PC = 5 s */ |
+#define TR_RST_TIME (HZ/20) /* 5 on PC = 50 ms */ |
+#define TR_BUSY_INTERVAL (HZ/5) /* 5 on PC = 200 ms */ |
+#define TR_SPIN_INTERVAL (3*HZ) /* 3 seconds before init timeout */ |
+ |
+#define TR_ISA 1 |
+#define TR_MCA 2 |
+#define TR_ISAPNP 3 |
+#define NOTOK 0 |
+ |
+#define IBMTR_SHARED_RAM_SIZE 0x10000 |
+#define IBMTR_IO_EXTENT 4 |
+#define IBMTR_MAX_ADAPTERS 4 |
+ |
+#define CHANNEL_ID 0X1F30 |
+#define AIP 0X1F00 |
+#define AIPADAPTYPE 0X1FA0 |
+#define AIPDATARATE 0X1FA2 |
+#define AIPEARLYTOKEN 0X1FA4 |
+#define AIPAVAILSHRAM 0X1FA6 |
+#define AIPSHRAMPAGE 0X1FA8 |
+#define AIP4MBDHB 0X1FAA |
+#define AIP16MBDHB 0X1FAC |
+#define AIPFID 0X1FBA |
+ |
+#define ADAPTRESET 0x1 /* Control Adapter reset (add to base) */ |
+#define ADAPTRESETREL 0x2 /* Release Adapter from reset ( """) */ |
+#define ADAPTINTREL 0x3 /* Adapter interrupt release */ |
+ |
+#define GLOBAL_INT_ENABLE 0x02f0 |
+ |
+/* MMIO bits 0-4 select register */ |
+#define RRR_EVEN 0x00 /* Shared RAM relocation registers - even and odd */ |
+/* Used to set the starting address of shared RAM */ |
+/* Bits 1 through 7 of this register map to bits 13 through 19 of the shared |
+ RAM address.*/ |
+/* ie: 0x02 sets RAM address to ...ato! issy su wazzoo !! GODZILLA!!! */ |
+#define RRR_ODD 0x01 |
+/* Bits 2 and 3 of this register can be read to determine shared RAM size */ |
+/* 00 for 8k, 01 for 16k, 10 for 32k, 11 for 64k */ |
+#define WRBR_EVEN 0x02 /* Write region base registers - even and odd */ |
+#define WRBR_ODD 0x03 |
+#define WWOR_EVEN 0x04 /* Write window open registers - even and odd */ |
+#define WWOR_ODD 0x05 |
+#define WWCR_EVEN 0x06 /* Write window close registers - even and odd */ |
+#define WWCR_ODD 0x07 |
+ |
+/* Interrupt status registers - PC system - even and odd */ |
+#define ISRP_EVEN 0x08 |
+ |
+#define TCR_INT 0x10 /* Bit 4 - Timer interrupt. The TVR_EVEN timer has |
+ expired. */ |
+#define ERR_INT 0x08 /* Bit 3 - Error interrupt. The adapter has had an |
+ internal error. */ |
+#define ACCESS_INT 0x04 /* Bit 2 - Access interrupt. You have attempted to |
+ write to an invalid area of shared RAM |
+ or an invalid register within the MMIO. */ |
+/* In addition, the following bits within ISRP_EVEN can be turned on or off */ |
+/* by you to control the interrupt processing: */ |
+#define INT_ENABLE 0x40 /* Bit 6 - Interrupt enable. If 0, no interrupts will |
+ occur. If 1, interrupts will occur normally. |
+ Normally set to 1. */ |
+/* Bit 0 - Primary or alternate adapter. Set to zero if this adapter is the |
+ primary adapter, 1 if this adapter is the alternate adapter. */ |
+ |
+ |
+#define ISRP_ODD 0x09 |
+ |
+#define ADAP_CHK_INT 0x40 /* Bit 6 - Adapter check. the adapter has |
+ encountered a serious problem and has closed |
+ itself. Whoa. */ |
+#define SRB_RESP_INT 0x20 /* Bit 5 - SRB response. The adapter has accepted |
+ an SRB request and set the return code within |
+ the SRB. */ |
+#define ASB_FREE_INT 0x10 /* Bit 4 - ASB free. The adapter has read the ASB |
+ and this area can be safely reused. This interrupt |
+ is only used if your application has set the ASB |
+ free request bit in ISRA_ODD or if an error was |
+ detected in your response. */ |
+#define ARB_CMD_INT 0x08 /* Bit 3 - ARB command. The adapter has given you a |
+ command for action. The command is located in the |
+ ARB area of shared memory. */ |
+#define SSB_RESP_INT 0x04 /* Bit 2 - SSB response. The adapter has posted a |
+ response to your SRB (the response is located in |
+ the SSB area of shared memory). */ |
+/* Bit 1 - Bridge frame forward complete. */ |
+ |
+ |
+ |
+#define ISRA_EVEN 0x0A /*Interrupt status registers - adapter - even and odd */ |
+/* Bit 7 - Internal parity error (on adapter's internal bus) */ |
+/* Bit 6 - Timer interrupt pending */ |
+/* Bit 5 - Access interrupt (attempt by adapter to access illegal address) */ |
+/* Bit 4 - Adapter microcode problem (microcode dead-man timer expired) */ |
+/* Bit 3 - Adapter processor check status */ |
+/* Bit 2 - Reserved */ |
+/* Bit 1 - Adapter hardware interrupt mask (prevents internal interrupts) */ |
+/* Bit 0 - Adapter software interrupt mask (prevents internal software ints) */ |
+ |
+#define ISRA_ODD 0x0B |
+#define CMD_IN_SRB 0x20 /* Bit 5 - Indicates that you have placed a new |
+ command in the SRB and are ready for the adapter to |
+ process the command. */ |
+#define RESP_IN_ASB 0x10 /* Bit 4 - Indicates that you have placed a response |
+ (an ASB) in the shared RAM which is available for |
+ the adapter's use. */ |
+/* Bit 3 - Indicates that you are ready to put an SRB in the shared RAM, but |
+ that a previous command is still pending. The adapter will then |
+ interrupt you when the previous command is completed */ |
+/* Bit 2 - Indicates that you are ready to put an ASB in the shared RAM, but |
+ that a previous ASB is still pending. The adapter will then interrupt |
+ you when the previous ASB is copied. */ |
+#define ARB_FREE 0x2 |
+#define SSB_FREE 0x1 |
+ |
+#define TCR_EVEN 0x0C /* Timer control registers - even and odd */ |
+#define TCR_ODD 0x0D |
+#define TVR_EVEN 0x0E /* Timer value registers - even and odd */ |
+#define TVR_ODD 0x0F |
+#define SRPR_EVEN 0x18 /* Shared RAM paging registers - even and odd */ |
+#define SRPR_ENABLE_PAGING 0xc0 |
+#define SRPR_ODD 0x19 /* Not used. */ |
+#define TOKREAD 0x60 |
+#define TOKOR 0x40 |
+#define TOKAND 0x20 |
+#define TOKWRITE 0x00 |
+ |
+/* MMIO bits 5-6 select operation */ |
+/* 00 is used to write to a register */ |
+/* 01 is used to bitwise AND a byte with a register */ |
+/* 10 is used to bitwise OR a byte with a register */ |
+/* 11 is used to read from a register */ |
+ |
+/* MMIO bits 7-8 select area of interest.. see below */ |
+/* 00 selects attachment control area. */ |
+/* 01 is reserved. */ |
+/* 10 selects adapter identification area A containing the adapter encoded |
+ address. */ |
+/* 11 selects the adapter identification area B containing test patterns. */ |
+ |
+#define PCCHANNELID 5049434F3631313039393020 |
+#define MCCHANNELID 4D4152533633583435313820 |
+ |
+#define ACA_OFFSET 0x1e00 |
+#define ACA_SET 0x40 |
+#define ACA_RESET 0x20 |
+#define ACA_RW 0x00 |
+ |
+#ifdef ENABLE_PAGING |
+#define SET_PAGE(x) (writeb((x), ti->mmio + ACA_OFFSET+ ACA_RW + SRPR_EVEN)) |
+#else |
+#define SET_PAGE(x) |
+#endif |
+ |
+/* do_tok_int possible values */ |
+#define FIRST_INT 1 |
+#define NOT_FIRST 2 |
+ |
+typedef enum { CLOSED, OPEN } open_state; |
+//staic const char *printstate[] = { "CLOSED","OPEN"}; |
+ |
+struct tok_info { |
+ unsigned char irq; |
+ void *mmio; |
+ unsigned char hw_address[32]; |
+ unsigned char adapter_type; |
+ unsigned char data_rate; |
+ unsigned char token_release; |
+ unsigned char avail_shared_ram; |
+ unsigned char shared_ram_paging; |
+ unsigned char turbo; |
+ unsigned short dhb_size4mb; |
+ unsigned short rbuf_len4; |
+ unsigned short rbuf_cnt4; |
+ unsigned short maxmtu4; |
+ unsigned short dhb_size16mb; |
+ unsigned short rbuf_len16; |
+ unsigned short rbuf_cnt16; |
+ unsigned short maxmtu16; |
+ /* Additions by David Morris */ |
+ unsigned char do_tok_int; |
+ wait_queue_head_t wait_for_reset; |
+ unsigned char sram_base; |
+ /* Additions by Peter De Schrijver */ |
+ unsigned char page_mask; /* mask to select RAM page to Map*/ |
+ unsigned char mapped_ram_size; /* size of RAM page */ |
+ __u32 sram_virt; /* Shared memory base address */ |
+ __u32 init_srb; /* Initial System Request Block address */ |
+ __u32 srb; /* System Request Block address */ |
+ __u32 ssb; /* System Status Block address */ |
+ __u32 arb; /* Adapter Request Block address */ |
+ __u32 asb; /* Adapter Status Block address */ |
+ __u8 init_srb_page; |
+ __u8 srb_page; |
+ __u8 ssb_page; |
+ __u8 arb_page; |
+ __u8 asb_page; |
+ unsigned short exsap_station_id; |
+ unsigned short global_int_enable; |
+ struct sk_buff *current_skb; |
+ struct net_device_stats tr_stats; |
+ unsigned char auto_speedsave; |
+ open_state open_status, sap_status; |
+ enum {MANUAL, AUTOMATIC} open_mode; |
+ enum {FAIL, RESTART, REOPEN} open_action; |
+ enum {NO, YES} open_failure; |
+ unsigned char readlog_pending; |
+ unsigned short adapter_int_enable; /* Adapter-specific int enable */ |
+ struct timer_list tr_timer; |
+ unsigned char ring_speed; |
+ spinlock_t lock; /* SMP protection */ |
+}; |
+ |
+/* token ring adapter commands */ |
+#define DIR_INTERRUPT 0x00 /* struct srb_interrupt */ |
+#define DIR_MOD_OPEN_PARAMS 0x01 |
+#define DIR_OPEN_ADAPTER 0x03 /* struct dir_open_adapter */ |
+#define DIR_CLOSE_ADAPTER 0x04 |
+#define DIR_SET_GRP_ADDR 0x06 |
+#define DIR_SET_FUNC_ADDR 0x07 /* struct srb_set_funct_addr */ |
+#define DIR_READ_LOG 0x08 /* struct srb_read_log */ |
+#define DLC_OPEN_SAP 0x15 /* struct dlc_open_sap */ |
+#define DLC_CLOSE_SAP 0x16 |
+#define DATA_LOST 0x20 /* struct asb_rec */ |
+#define REC_DATA 0x81 /* struct arb_rec_req */ |
+#define XMIT_DATA_REQ 0x82 /* struct arb_xmit_req */ |
+#define DLC_STATUS 0x83 /* struct arb_dlc_status */ |
+#define RING_STAT_CHANGE 0x84 /* struct dlc_open_sap ??? */ |
+ |
+/* DIR_OPEN_ADAPTER options */ |
+#define OPEN_PASS_BCON_MAC 0x0100 |
+#define NUM_RCV_BUF 2 |
+#define RCV_BUF_LEN 1024 |
+#define DHB_LENGTH 2048 |
+#define NUM_DHB 2 |
+#define DLC_MAX_SAP 2 |
+#define DLC_MAX_STA 1 |
+ |
+/* DLC_OPEN_SAP options */ |
+#define MAX_I_FIELD 0x0088 |
+#define SAP_OPEN_IND_SAP 0x04 |
+#define SAP_OPEN_PRIORITY 0x20 |
+#define SAP_OPEN_STATION_CNT 0x1 |
+#define XMIT_DIR_FRAME 0x0A |
+#define XMIT_UI_FRAME 0x0d |
+#define XMIT_XID_CMD 0x0e |
+#define XMIT_TEST_CMD 0x11 |
+ |
+/* srb close return code */ |
+#define SIGNAL_LOSS 0x8000 |
+#define HARD_ERROR 0x4000 |
+#define XMIT_BEACON 0x1000 |
+#define LOBE_FAULT 0x0800 |
+#define AUTO_REMOVAL 0x0400 |
+#define REMOVE_RECV 0x0100 |
+#define LOG_OVERFLOW 0x0080 |
+#define RING_RECOVER 0x0020 |
+ |
+struct srb_init_response { |
+ unsigned char command; |
+ unsigned char init_status; |
+ unsigned char init_status_2; |
+ unsigned char reserved[3]; |
+ __u16 bring_up_code; |
+ __u16 encoded_address; |
+ __u16 level_address; |
+ __u16 adapter_address; |
+ __u16 parms_address; |
+ __u16 mac_address; |
+}; |
+ |
+struct dir_open_adapter { |
+ unsigned char command; |
+ char reserved[7]; |
+ __u16 open_options; |
+ unsigned char node_address[6]; |
+ unsigned char group_address[4]; |
+ unsigned char funct_address[4]; |
+ __u16 num_rcv_buf; |
+ __u16 rcv_buf_len; |
+ __u16 dhb_length; |
+ unsigned char num_dhb; |
+ char reserved2; |
+ unsigned char dlc_max_sap; |
+ unsigned char dlc_max_sta; |
+ unsigned char dlc_max_gsap; |
+ unsigned char dlc_max_gmem; |
+ unsigned char dlc_t1_tick_1; |
+ unsigned char dlc_t2_tick_1; |
+ unsigned char dlc_ti_tick_1; |
+ unsigned char dlc_t1_tick_2; |
+ unsigned char dlc_t2_tick_2; |
+ unsigned char dlc_ti_tick_2; |
+ unsigned char product_id[18]; |
+}; |
+ |
+struct dlc_open_sap { |
+ unsigned char command; |
+ unsigned char reserved1; |
+ unsigned char ret_code; |
+ unsigned char reserved2; |
+ __u16 station_id; |
+ unsigned char timer_t1; |
+ unsigned char timer_t2; |
+ unsigned char timer_ti; |
+ unsigned char maxout; |
+ unsigned char maxin; |
+ unsigned char maxout_incr; |
+ unsigned char max_retry_count; |
+ unsigned char gsap_max_mem; |
+ __u16 max_i_field; |
+ unsigned char sap_value; |
+ unsigned char sap_options; |
+ unsigned char station_count; |
+ unsigned char sap_gsap_mem; |
+ unsigned char gsap[0]; |
+}; |
+ |
+struct srb_xmit { |
+ unsigned char command; |
+ unsigned char cmd_corr; |
+ unsigned char ret_code; |
+ unsigned char reserved1; |
+ __u16 station_id; |
+}; |
+ |
+struct arb_rec_req { |
+ unsigned char command; |
+ unsigned char reserved1[3]; |
+ __u16 station_id; |
+ __u16 rec_buf_addr; |
+ unsigned char lan_hdr_len; |
+ unsigned char dlc_hdr_len; |
+ __u16 frame_len; |
+ unsigned char msg_type; |
+}; |
+ |
+struct asb_rec { |
+ unsigned char command; |
+ unsigned char reserved1; |
+ unsigned char ret_code; |
+ unsigned char reserved2; |
+ __u16 station_id; |
+ __u16 rec_buf_addr; |
+}; |
+ |
+struct rec_buf { |
+ unsigned char reserved1[2]; |
+ __u16 buf_ptr; |
+ unsigned char reserved2; |
+ unsigned char receive_fs; |
+ __u16 buf_len; |
+ unsigned char data[0]; |
+}; |
+ |
+struct srb_set_funct_addr { |
+ unsigned char command; |
+ unsigned char reserved1; |
+ unsigned char ret_code; |
+ unsigned char reserved2[3]; |
+ unsigned char funct_address[4]; |
+}; |
+ |
+#endif |
Index: linuxc26/include/linux/signal.h |
=================================================================== |
--- linuxc26/include/linux/signal.h (nonexistent) |
+++ linuxc26/include/linux/signal.h (revision 422) |
@@ -0,0 +1,220 @@ |
+#ifndef _LINUX_SIGNAL_H |
+#define _LINUX_SIGNAL_H |
+ |
+#include <linux/list.h> |
+#include <linux/spinlock.h> |
+#include <asm/signal.h> |
+#include <asm/siginfo.h> |
+ |
+#ifdef __KERNEL__ |
+/* |
+ * Real Time signals may be queued. |
+ */ |
+ |
+struct sigqueue { |
+ struct list_head list; |
+ spinlock_t *lock; |
+ int flags; |
+ siginfo_t info; |
+}; |
+ |
+/* flags values. */ |
+#define SIGQUEUE_PREALLOC 1 |
+ |
+struct sigpending { |
+ struct list_head list; |
+ sigset_t signal; |
+}; |
+ |
+/* |
+ * Define some primitives to manipulate sigset_t. |
+ */ |
+ |
+#ifndef __HAVE_ARCH_SIG_BITOPS |
+#include <linux/bitops.h> |
+ |
+/* We don't use <linux/bitops.h> for these because there is no need to |
+ be atomic. */ |
+static inline void sigaddset(sigset_t *set, int _sig) |
+{ |
+ unsigned long sig = _sig - 1; |
+ if (_NSIG_WORDS == 1) |
+ set->sig[0] |= 1UL << sig; |
+ else |
+ set->sig[sig / _NSIG_BPW] |= 1UL << (sig % _NSIG_BPW); |
+} |
+ |
+static inline void sigdelset(sigset_t *set, int _sig) |
+{ |
+ unsigned long sig = _sig - 1; |
+ if (_NSIG_WORDS == 1) |
+ set->sig[0] &= ~(1UL << sig); |
+ else |
+ set->sig[sig / _NSIG_BPW] &= ~(1UL << (sig % _NSIG_BPW)); |
+} |
+ |
+static inline int sigismember(sigset_t *set, int _sig) |
+{ |
+ unsigned long sig = _sig - 1; |
+ if (_NSIG_WORDS == 1) |
+ return 1 & (set->sig[0] >> sig); |
+ else |
+ return 1 & (set->sig[sig / _NSIG_BPW] >> (sig % _NSIG_BPW)); |
+} |
+ |
+static inline int sigfindinword(unsigned long word) |
+{ |
+ return ffz(~word); |
+} |
+ |
+#endif /* __HAVE_ARCH_SIG_BITOPS */ |
+ |
+#define sigmask(sig) (1UL << ((sig) - 1)) |
+ |
+#ifndef __HAVE_ARCH_SIG_SETOPS |
+#include <linux/string.h> |
+ |
+#define _SIG_SET_BINOP(name, op) \ |
+static inline void name(sigset_t *r, const sigset_t *a, const sigset_t *b) \ |
+{ \ |
+ extern void _NSIG_WORDS_is_unsupported_size(void); \ |
+ unsigned long a0, a1, a2, a3, b0, b1, b2, b3; \ |
+ \ |
+ switch (_NSIG_WORDS) { \ |
+ case 4: \ |
+ a3 = a->sig[3]; a2 = a->sig[2]; \ |
+ b3 = b->sig[3]; b2 = b->sig[2]; \ |
+ r->sig[3] = op(a3, b3); \ |
+ r->sig[2] = op(a2, b2); \ |
+ case 2: \ |
+ a1 = a->sig[1]; b1 = b->sig[1]; \ |
+ r->sig[1] = op(a1, b1); \ |
+ case 1: \ |
+ a0 = a->sig[0]; b0 = b->sig[0]; \ |
+ r->sig[0] = op(a0, b0); \ |
+ break; \ |
+ default: \ |
+ _NSIG_WORDS_is_unsupported_size(); \ |
+ } \ |
+} |
+ |
+#define _sig_or(x,y) ((x) | (y)) |
+_SIG_SET_BINOP(sigorsets, _sig_or) |
+ |
+#define _sig_and(x,y) ((x) & (y)) |
+_SIG_SET_BINOP(sigandsets, _sig_and) |
+ |
+#define _sig_nand(x,y) ((x) & ~(y)) |
+_SIG_SET_BINOP(signandsets, _sig_nand) |
+ |
+#undef _SIG_SET_BINOP |
+#undef _sig_or |
+#undef _sig_and |
+#undef _sig_nand |
+ |
+#define _SIG_SET_OP(name, op) \ |
+static inline void name(sigset_t *set) \ |
+{ \ |
+ extern void _NSIG_WORDS_is_unsupported_size(void); \ |
+ \ |
+ switch (_NSIG_WORDS) { \ |
+ case 4: set->sig[3] = op(set->sig[3]); \ |
+ set->sig[2] = op(set->sig[2]); \ |
+ case 2: set->sig[1] = op(set->sig[1]); \ |
+ case 1: set->sig[0] = op(set->sig[0]); \ |
+ break; \ |
+ default: \ |
+ _NSIG_WORDS_is_unsupported_size(); \ |
+ } \ |
+} |
+ |
+#define _sig_not(x) (~(x)) |
+_SIG_SET_OP(signotset, _sig_not) |
+ |
+#undef _SIG_SET_OP |
+#undef _sig_not |
+ |
+static inline void sigemptyset(sigset_t *set) |
+{ |
+ switch (_NSIG_WORDS) { |
+ default: |
+ memset(set, 0, sizeof(sigset_t)); |
+ break; |
+ case 2: set->sig[1] = 0; |
+ case 1: set->sig[0] = 0; |
+ break; |
+ } |
+} |
+ |
+static inline void sigfillset(sigset_t *set) |
+{ |
+ switch (_NSIG_WORDS) { |
+ default: |
+ memset(set, -1, sizeof(sigset_t)); |
+ break; |
+ case 2: set->sig[1] = -1; |
+ case 1: set->sig[0] = -1; |
+ break; |
+ } |
+} |
+ |
+/* Some extensions for manipulating the low 32 signals in particular. */ |
+ |
+static inline void sigaddsetmask(sigset_t *set, unsigned long mask) |
+{ |
+ set->sig[0] |= mask; |
+} |
+ |
+static inline void sigdelsetmask(sigset_t *set, unsigned long mask) |
+{ |
+ set->sig[0] &= ~mask; |
+} |
+ |
+static inline int sigtestsetmask(sigset_t *set, unsigned long mask) |
+{ |
+ return (set->sig[0] & mask) != 0; |
+} |
+ |
+static inline void siginitset(sigset_t *set, unsigned long mask) |
+{ |
+ set->sig[0] = mask; |
+ switch (_NSIG_WORDS) { |
+ default: |
+ memset(&set->sig[1], 0, sizeof(long)*(_NSIG_WORDS-1)); |
+ break; |
+ case 2: set->sig[1] = 0; |
+ case 1: ; |
+ } |
+} |
+ |
+static inline void siginitsetinv(sigset_t *set, unsigned long mask) |
+{ |
+ set->sig[0] = ~mask; |
+ switch (_NSIG_WORDS) { |
+ default: |
+ memset(&set->sig[1], -1, sizeof(long)*(_NSIG_WORDS-1)); |
+ break; |
+ case 2: set->sig[1] = -1; |
+ case 1: ; |
+ } |
+} |
+ |
+#endif /* __HAVE_ARCH_SIG_SETOPS */ |
+ |
+static inline void init_sigpending(struct sigpending *sig) |
+{ |
+ sigemptyset(&sig->signal); |
+ INIT_LIST_HEAD(&sig->list); |
+} |
+ |
+extern long do_sigpending(void __user *, unsigned long); |
+extern int sigprocmask(int, sigset_t *, sigset_t *); |
+ |
+#ifndef HAVE_ARCH_GET_SIGNAL_TO_DELIVER |
+struct pt_regs; |
+extern int get_signal_to_deliver(siginfo_t *info, struct pt_regs *regs, void *cookie); |
+#endif |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* _LINUX_SIGNAL_H */ |
Index: linuxc26/include/linux/gameport.h |
=================================================================== |
--- linuxc26/include/linux/gameport.h (nonexistent) |
+++ linuxc26/include/linux/gameport.h (revision 422) |
@@ -0,0 +1,127 @@ |
+#ifndef _GAMEPORT_H |
+#define _GAMEPORT_H |
+ |
+/* |
+ * 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. |
+ */ |
+ |
+#include <asm/io.h> |
+#include <linux/input.h> |
+#include <linux/list.h> |
+ |
+struct gameport; |
+ |
+struct gameport { |
+ |
+ void *private; /* Private pointer for joystick drivers */ |
+ void *driver; /* Private pointer for gameport drivers */ |
+ char *name; |
+ char *phys; |
+ |
+ struct input_id id; |
+ |
+ int io; |
+ int speed; |
+ int fuzz; |
+ |
+ void (*trigger)(struct gameport *); |
+ unsigned char (*read)(struct gameport *); |
+ int (*cooked_read)(struct gameport *, int *, int *); |
+ int (*calibrate)(struct gameport *, int *, int *); |
+ int (*open)(struct gameport *, int); |
+ void (*close)(struct gameport *); |
+ |
+ struct gameport_dev *dev; |
+ |
+ struct list_head node; |
+}; |
+ |
+struct gameport_dev { |
+ |
+ void *private; |
+ char *name; |
+ |
+ void (*connect)(struct gameport *, struct gameport_dev *dev); |
+ void (*disconnect)(struct gameport *); |
+ |
+ struct list_head node; |
+}; |
+ |
+int gameport_open(struct gameport *gameport, struct gameport_dev *dev, int mode); |
+void gameport_close(struct gameport *gameport); |
+void gameport_rescan(struct gameport *gameport); |
+ |
+#if defined(CONFIG_GAMEPORT) || defined(CONFIG_GAMEPORT_MODULE) |
+void gameport_register_port(struct gameport *gameport); |
+void gameport_unregister_port(struct gameport *gameport); |
+#else |
+static inline void gameport_register_port(struct gameport *gameport) { return; } |
+static inline void gameport_unregister_port(struct gameport *gameport) { return; } |
+#endif |
+ |
+void gameport_register_device(struct gameport_dev *dev); |
+void gameport_unregister_device(struct gameport_dev *dev); |
+ |
+#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 |
+ |
+static __inline__ void gameport_trigger(struct gameport *gameport) |
+{ |
+ if (gameport->trigger) |
+ gameport->trigger(gameport); |
+ else |
+ outb(0xff, gameport->io); |
+} |
+ |
+static __inline__ unsigned char gameport_read(struct gameport *gameport) |
+{ |
+ if (gameport->read) |
+ return gameport->read(gameport); |
+ else |
+ return inb(gameport->io); |
+} |
+ |
+static __inline__ int gameport_cooked_read(struct gameport *gameport, int *axes, int *buttons) |
+{ |
+ if (gameport->cooked_read) |
+ return gameport->cooked_read(gameport, axes, buttons); |
+ else |
+ return -1; |
+} |
+ |
+static __inline__ int gameport_calibrate(struct gameport *gameport, int *axes, int *max) |
+{ |
+ if (gameport->calibrate) |
+ return gameport->calibrate(gameport, axes, max); |
+ else |
+ return -1; |
+} |
+ |
+static __inline__ int gameport_time(struct gameport *gameport, int time) |
+{ |
+ return (time * gameport->speed) / 1000; |
+} |
+ |
+static __inline__ void wait_ms(unsigned int ms) |
+{ |
+ set_current_state(TASK_UNINTERRUPTIBLE); |
+ schedule_timeout(1 + ms * HZ / 1000); |
+} |
+ |
+#endif |
Index: linuxc26/include/linux/highmem.h |
=================================================================== |
--- linuxc26/include/linux/highmem.h (nonexistent) |
+++ linuxc26/include/linux/highmem.h (revision 422) |
@@ -0,0 +1,90 @@ |
+#ifndef _LINUX_HIGHMEM_H |
+#define _LINUX_HIGHMEM_H |
+ |
+#include <linux/config.h> |
+#include <linux/fs.h> |
+#include <linux/mm.h> |
+ |
+#include <asm/cacheflush.h> |
+ |
+#ifdef CONFIG_HIGHMEM |
+ |
+extern struct page *highmem_start_page; |
+ |
+#include <asm/highmem.h> |
+ |
+/* declarations for linux/mm/highmem.c */ |
+unsigned int nr_free_highpages(void); |
+ |
+#else /* CONFIG_HIGHMEM */ |
+ |
+static inline unsigned int nr_free_highpages(void) { return 0; } |
+ |
+static inline void *kmap(struct page *page) |
+{ |
+ might_sleep(); |
+ return page_address(page); |
+} |
+ |
+#define kunmap(page) do { (void) (page); } while (0) |
+ |
+#define kmap_atomic(page, idx) page_address(page) |
+#define kunmap_atomic(addr, idx) do { } while (0) |
+#define kmap_atomic_to_page(ptr) virt_to_page(ptr) |
+ |
+#endif /* CONFIG_HIGHMEM */ |
+ |
+/* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */ |
+static inline void clear_user_highpage(struct page *page, unsigned long vaddr) |
+{ |
+ void *addr = kmap_atomic(page, KM_USER0); |
+ clear_user_page(addr, vaddr, page); |
+ kunmap_atomic(addr, KM_USER0); |
+} |
+ |
+static inline void clear_highpage(struct page *page) |
+{ |
+ void *kaddr = kmap_atomic(page, KM_USER0); |
+ clear_page(kaddr); |
+ kunmap_atomic(kaddr, KM_USER0); |
+} |
+ |
+/* |
+ * Same but also flushes aliased cache contents to RAM. |
+ */ |
+static inline void memclear_highpage_flush(struct page *page, unsigned int offset, unsigned int size) |
+{ |
+ void *kaddr; |
+ |
+ if (offset + size > PAGE_SIZE) |
+ BUG(); |
+ |
+ kaddr = kmap_atomic(page, KM_USER0); |
+ memset((char *)kaddr + offset, 0, size); |
+ flush_dcache_page(page); |
+ kunmap_atomic(kaddr, KM_USER0); |
+} |
+ |
+static inline void copy_user_highpage(struct page *to, struct page *from, unsigned long vaddr) |
+{ |
+ char *vfrom, *vto; |
+ |
+ vfrom = kmap_atomic(from, KM_USER0); |
+ vto = kmap_atomic(to, KM_USER1); |
+ copy_user_page(vto, vfrom, vaddr, to); |
+ kunmap_atomic(vfrom, KM_USER0); |
+ kunmap_atomic(vto, KM_USER1); |
+} |
+ |
+static inline void copy_highpage(struct page *to, struct page *from) |
+{ |
+ char *vfrom, *vto; |
+ |
+ vfrom = kmap_atomic(from, KM_USER0); |
+ vto = kmap_atomic(to, KM_USER1); |
+ copy_page(vto, vfrom); |
+ kunmap_atomic(vfrom, KM_USER0); |
+ kunmap_atomic(vto, KM_USER1); |
+} |
+ |
+#endif /* _LINUX_HIGHMEM_H */ |
Index: linuxc26/include/linux/affs_fs_i.h |
=================================================================== |
--- linuxc26/include/linux/affs_fs_i.h (nonexistent) |
+++ linuxc26/include/linux/affs_fs_i.h (revision 422) |
@@ -0,0 +1,59 @@ |
+#ifndef _AFFS_FS_I |
+#define _AFFS_FS_I |
+ |
+#include <linux/a.out.h> |
+#include <linux/fs.h> |
+#include <asm/semaphore.h> |
+ |
+#define AFFS_CACHE_SIZE PAGE_SIZE |
+//#define AFFS_CACHE_SIZE (4*4) |
+ |
+#define AFFS_MAX_PREALLOC 32 |
+#define AFFS_LC_SIZE (AFFS_CACHE_SIZE/sizeof(u32)/2) |
+#define AFFS_AC_SIZE (AFFS_CACHE_SIZE/sizeof(struct affs_ext_key)/2) |
+#define AFFS_AC_MASK (AFFS_AC_SIZE-1) |
+ |
+struct affs_ext_key { |
+ u32 ext; /* idx of the extended block */ |
+ u32 key; /* block number */ |
+}; |
+ |
+/* |
+ * affs fs inode data in memory |
+ */ |
+struct affs_inode_info { |
+ u32 i_opencnt; |
+ struct semaphore i_link_lock; /* Protects internal inode access. */ |
+ struct semaphore i_ext_lock; /* Protects internal inode access. */ |
+#define i_hash_lock i_ext_lock |
+ u32 i_blkcnt; /* block count */ |
+ u32 i_extcnt; /* extended block count */ |
+ u32 *i_lc; /* linear cache of extended blocks */ |
+ u32 i_lc_size; |
+ u32 i_lc_shift; |
+ u32 i_lc_mask; |
+ struct affs_ext_key *i_ac; /* associative cache of extended blocks */ |
+ u32 i_ext_last; /* last accessed extended block */ |
+ struct buffer_head *i_ext_bh; /* bh of last extended block */ |
+ loff_t mmu_private; |
+ u32 i_protect; /* unused attribute bits */ |
+ u32 i_lastalloc; /* last allocated block */ |
+ int i_pa_cnt; /* number of preallocated blocks */ |
+#if 0 |
+ s32 i_original; /* if != 0, this is the key of the original */ |
+ u32 i_data[AFFS_MAX_PREALLOC]; /* preallocated blocks */ |
+ int i_cache_users; /* Cache cannot be freed while > 0 */ |
+ unsigned char i_hlink; /* This is a fake */ |
+ unsigned char i_pad; |
+ s32 i_parent; /* parent ino */ |
+#endif |
+ struct inode vfs_inode; |
+}; |
+ |
+/* short cut to get to the affs specific inode data */ |
+static inline struct affs_inode_info *AFFS_I(struct inode *inode) |
+{ |
+ return list_entry(inode, struct affs_inode_info, vfs_inode); |
+} |
+ |
+#endif |
Index: linuxc26/include/linux/eisa.h |
=================================================================== |
--- linuxc26/include/linux/eisa.h (nonexistent) |
+++ linuxc26/include/linux/eisa.h (revision 422) |
@@ -0,0 +1,107 @@ |
+#ifndef _LINUX_EISA_H |
+#define _LINUX_EISA_H |
+ |
+#include <linux/ioport.h> |
+#include <linux/device.h> |
+ |
+#define EISA_SIG_LEN 8 |
+#define EISA_MAX_SLOTS 8 |
+ |
+#define EISA_MAX_RESOURCES 4 |
+ |
+/* A few EISA constants/offsets... */ |
+ |
+#define EISA_DMA1_STATUS 8 |
+#define EISA_INT1_CTRL 0x20 |
+#define EISA_INT1_MASK 0x21 |
+#define EISA_INT2_CTRL 0xA0 |
+#define EISA_INT2_MASK 0xA1 |
+#define EISA_DMA2_STATUS 0xD0 |
+#define EISA_DMA2_WRITE_SINGLE 0xD4 |
+#define EISA_EXT_NMI_RESET_CTRL 0x461 |
+#define EISA_INT1_EDGE_LEVEL 0x4D0 |
+#define EISA_INT2_EDGE_LEVEL 0x4D1 |
+#define EISA_VENDOR_ID_OFFSET 0xC80 |
+#define EISA_CONFIG_OFFSET 0xC84 |
+ |
+#define EISA_CONFIG_ENABLED 1 |
+#define EISA_CONFIG_FORCED 2 |
+ |
+/* The EISA signature, in ASCII form, null terminated */ |
+struct eisa_device_id { |
+ char sig[EISA_SIG_LEN]; |
+ unsigned long driver_data; |
+}; |
+ |
+/* There is not much we can say about an EISA device, apart from |
+ * signature, slot number, and base address. dma_mask is set by |
+ * default to parent device mask..*/ |
+ |
+struct eisa_device { |
+ struct eisa_device_id id; |
+ int slot; |
+ int state; |
+ unsigned long base_addr; |
+ struct resource res[EISA_MAX_RESOURCES]; |
+ u64 dma_mask; |
+ struct device dev; /* generic device */ |
+#ifdef CONFIG_EISA_NAMES |
+ char pretty_name[DEVICE_NAME_SIZE]; |
+#endif |
+}; |
+ |
+#define to_eisa_device(n) container_of(n, struct eisa_device, dev) |
+ |
+static inline int eisa_get_region_index (void *addr) |
+{ |
+ unsigned long x = (unsigned long) addr; |
+ |
+ x &= 0xc00; |
+ return (x >> 12); |
+} |
+ |
+struct eisa_driver { |
+ const struct eisa_device_id *id_table; |
+ struct device_driver driver; |
+}; |
+ |
+#define to_eisa_driver(drv) container_of(drv,struct eisa_driver, driver) |
+ |
+extern struct bus_type eisa_bus_type; |
+int eisa_driver_register (struct eisa_driver *edrv); |
+void eisa_driver_unregister (struct eisa_driver *edrv); |
+ |
+/* Mimics pci.h... */ |
+static inline void *eisa_get_drvdata (struct eisa_device *edev) |
+{ |
+ return edev->dev.driver_data; |
+} |
+ |
+static inline void eisa_set_drvdata (struct eisa_device *edev, void *data) |
+{ |
+ edev->dev.driver_data = data; |
+} |
+ |
+/* The EISA root device. There's rumours about machines with multiple |
+ * busses (PA-RISC ?), so we try to handle that. */ |
+ |
+struct eisa_root_device { |
+ struct device *dev; /* Pointer to bridge device */ |
+ struct resource *res; |
+ unsigned long bus_base_addr; |
+ int slots; /* Max slot number */ |
+ int force_probe; /* Probe even when no slot 0 */ |
+ u64 dma_mask; /* from bridge device */ |
+ int bus_nr; /* Set by eisa_root_register */ |
+ struct resource eisa_root_res; /* ditto */ |
+}; |
+ |
+int eisa_root_register (struct eisa_root_device *root); |
+ |
+#ifdef CONFIG_EISA |
+extern int EISA_bus; |
+#else |
+# define EISA_bus 0 |
+#endif |
+ |
+#endif |
Index: linuxc26/include/linux/sysrq.h |
=================================================================== |
--- linuxc26/include/linux/sysrq.h (nonexistent) |
+++ linuxc26/include/linux/sysrq.h (revision 422) |
@@ -0,0 +1,94 @@ |
+/* -*- linux-c -*- |
+ * |
+ * $Id: sysrq.h,v 1.1 2004-01-28 15:26:47 giacomo Exp $ |
+ * |
+ * Linux Magic System Request Key Hacks |
+ * |
+ * (c) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz> |
+ * |
+ * (c) 2000 Crutcher Dunnavant <crutcher+kernel@datastacks.com> |
+ * overhauled to use key registration |
+ * based upon discusions in irc://irc.openprojects.net/#kernelnewbies |
+ */ |
+ |
+#include <linux/config.h> |
+ |
+struct pt_regs; |
+struct tty_struct; |
+ |
+struct sysrq_key_op { |
+ void (*handler)(int, struct pt_regs *, struct tty_struct *); |
+ char *help_msg; |
+ char *action_msg; |
+}; |
+ |
+#ifdef CONFIG_MAGIC_SYSRQ |
+ |
+/* Generic SysRq interface -- you may call it from any device driver, supplying |
+ * ASCII code of the key, pointer to registers and kbd/tty structs (if they |
+ * are available -- else NULL's). |
+ */ |
+ |
+void handle_sysrq(int, struct pt_regs *, struct tty_struct *); |
+ |
+/* |
+ * Nonlocking version of handle sysrq, used by sysrq handlers that need to |
+ * call sysrq handlers |
+ */ |
+ |
+void __handle_sysrq_nolock(int, struct pt_regs *, struct tty_struct *); |
+ |
+/* |
+ * Sysrq registration manipulation functions |
+ */ |
+ |
+void __sysrq_lock_table (void); |
+void __sysrq_unlock_table (void); |
+struct sysrq_key_op *__sysrq_get_key_op (int key); |
+void __sysrq_put_key_op (int key, struct sysrq_key_op *op_p); |
+ |
+extern __inline__ int |
+__sysrq_swap_key_ops_nolock(int key, struct sysrq_key_op *insert_op_p, |
+ struct sysrq_key_op *remove_op_p) |
+{ |
+ int retval; |
+ if (__sysrq_get_key_op(key) == remove_op_p) { |
+ __sysrq_put_key_op(key, insert_op_p); |
+ retval = 0; |
+ } else { |
+ retval = -1; |
+ } |
+ return retval; |
+} |
+ |
+extern __inline__ int |
+__sysrq_swap_key_ops(int key, struct sysrq_key_op *insert_op_p, |
+ struct sysrq_key_op *remove_op_p) { |
+ int retval; |
+ __sysrq_lock_table(); |
+ retval = __sysrq_swap_key_ops_nolock(key, insert_op_p, remove_op_p); |
+ __sysrq_unlock_table(); |
+ return retval; |
+} |
+ |
+static inline int register_sysrq_key(int key, struct sysrq_key_op *op_p) |
+{ |
+ return __sysrq_swap_key_ops(key, op_p, NULL); |
+} |
+ |
+static inline int unregister_sysrq_key(int key, struct sysrq_key_op *op_p) |
+{ |
+ return __sysrq_swap_key_ops(key, NULL, op_p); |
+} |
+ |
+#else |
+ |
+static inline int __reterr(void) |
+{ |
+ return -EINVAL; |
+} |
+ |
+#define register_sysrq_key(ig,nore) __reterr() |
+#define unregister_sysrq_key(ig,nore) __reterr() |
+ |
+#endif |
Index: linuxc26/include/linux/isicom.h |
=================================================================== |
--- linuxc26/include/linux/isicom.h (nonexistent) |
+++ linuxc26/include/linux/isicom.h (revision 422) |
@@ -0,0 +1,306 @@ |
+#ifndef _LINUX_ISICOM_H |
+#define _LINUX_ISICOM_H |
+ |
+/*#define ISICOM_DEBUG*/ |
+/*#define ISICOM_DEBUG_DTR_RTS*/ |
+ |
+ |
+/* |
+ * Firmware Loader definitions ... |
+ */ |
+ |
+#define __MultiTech ('M'<<8) |
+#define MIOCTL_LOAD_FIRMWARE (__MultiTech | 0x01) |
+#define MIOCTL_READ_FIRMWARE (__MultiTech | 0x02) |
+#define MIOCTL_XFER_CTRL (__MultiTech | 0x03) |
+#define MIOCTL_RESET_CARD (__MultiTech | 0x04) |
+ |
+#define DATA_SIZE 16 |
+ |
+typedef struct { |
+ unsigned short exec_segment; |
+ unsigned short exec_addr; |
+} exec_record; |
+ |
+typedef struct { |
+ int board; /* Board to load */ |
+ unsigned short addr; |
+ unsigned short count; |
+} bin_header; |
+ |
+typedef struct { |
+ int board; /* Board to load */ |
+ unsigned short addr; |
+ unsigned short count; |
+ unsigned short segment; |
+ unsigned char bin_data[DATA_SIZE]; |
+} bin_frame; |
+ |
+#ifdef __KERNEL__ |
+ |
+#define YES 1 |
+#define NO 0 |
+ |
+#define ISILOAD_MISC_MINOR 155 /* /dev/isctl */ |
+#define ISILOAD_NAME "ISILoad" |
+ |
+/* |
+ * ISICOM Driver definitions ... |
+ * |
+ */ |
+ |
+#define ISICOM_NAME "ISICom" |
+ |
+/* |
+ * PCI definitions |
+ */ |
+ |
+ #define DEVID_COUNT 9 |
+ #define VENDOR_ID 0x10b5 |
+ |
+/* |
+ * These are now officially allocated numbers |
+ */ |
+ |
+#define ISICOM_NMAJOR 112 /* normal */ |
+#define ISICOM_CMAJOR 113 /* callout */ |
+#define ISICOM_MAGIC (('M' << 8) | 'T') |
+ |
+#define WAKEUP_CHARS 256 /* hard coded for now */ |
+#define TX_SIZE 254 |
+ |
+#define BOARD_COUNT 4 |
+#define PORT_COUNT (BOARD_COUNT*16) |
+ |
+#define SERIAL_TYPE_NORMAL 1 |
+#define SERIAL_TYPE_CALLOUT 2 |
+ |
+/* character sizes */ |
+ |
+#define ISICOM_CS5 0x0000 |
+#define ISICOM_CS6 0x0001 |
+#define ISICOM_CS7 0x0002 |
+#define ISICOM_CS8 0x0003 |
+ |
+/* stop bits */ |
+ |
+#define ISICOM_1SB 0x0000 |
+#define ISICOM_2SB 0x0004 |
+ |
+/* parity */ |
+ |
+#define ISICOM_NOPAR 0x0000 |
+#define ISICOM_ODPAR 0x0008 |
+#define ISICOM_EVPAR 0x0018 |
+ |
+/* flow control */ |
+ |
+#define ISICOM_CTSRTS 0x03 |
+#define ISICOM_INITIATE_XONXOFF 0x04 |
+#define ISICOM_RESPOND_XONXOFF 0x08 |
+ |
+#define InterruptTheCard(base) (outw(0,(base)+0xc)) |
+#define ClearInterrupt(base) (inw((base)+0x0a)) |
+ |
+#define BOARD(line) (((line) >> 4) & 0x3) |
+#define MIN(a, b) ( (a) < (b) ? (a) : (b) ) |
+ |
+ /* isi kill queue bitmap */ |
+ |
+#define ISICOM_KILLTX 0x01 |
+#define ISICOM_KILLRX 0x02 |
+ |
+ /* isi_board status bitmap */ |
+ |
+#define FIRMWARE_LOADED 0x0001 |
+#define BOARD_ACTIVE 0x0002 |
+ |
+ /* isi_port status bitmap */ |
+ |
+#define ISI_CTS 0x1000 |
+#define ISI_DSR 0x2000 |
+#define ISI_RI 0x4000 |
+#define ISI_DCD 0x8000 |
+#define ISI_DTR 0x0100 |
+#define ISI_RTS 0x0200 |
+ |
+ |
+#define ISI_TXOK 0x0001 |
+ |
+struct isi_board { |
+ unsigned short base; |
+ unsigned char irq; |
+ unsigned char port_count; |
+ unsigned short status; |
+ unsigned short port_status; /* each bit represents a single port */ |
+ unsigned short shift_count; |
+ struct isi_port * ports; |
+ signed char count; |
+ unsigned char isa; |
+}; |
+ |
+struct isi_port { |
+ unsigned short magic; |
+ unsigned int flags; |
+ int count; |
+ int blocked_open; |
+ int close_delay; |
+ unsigned short channel; |
+ unsigned short status; |
+ unsigned short closing_wait; |
+ struct isi_board * card; |
+ struct tty_struct * tty; |
+ wait_queue_head_t close_wait; |
+ wait_queue_head_t open_wait; |
+ struct work_struct hangup_tq; |
+ struct work_struct bh_tqueue; |
+ unsigned char * xmit_buf; |
+ int xmit_head; |
+ int xmit_tail; |
+ int xmit_cnt; |
+}; |
+ |
+ |
+/* |
+ * ISI Card specific ops ... |
+ */ |
+ |
+static inline void raise_dtr(struct isi_port * port) |
+{ |
+ struct isi_board * card = port->card; |
+ unsigned short base = card->base; |
+ unsigned char channel = port->channel; |
+ short wait=400; |
+ while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0)); |
+ if (wait <= 0) { |
+ printk(KERN_WARNING "ISICOM: Card found busy in raise_dtr.\n"); |
+ return; |
+ } |
+#ifdef ISICOM_DEBUG_DTR_RTS |
+ printk(KERN_DEBUG "ISICOM: raise_dtr.\n"); |
+#endif |
+ outw(0x8000 | (channel << card->shift_count) | 0x02 , base); |
+ outw(0x0504, base); |
+ InterruptTheCard(base); |
+ port->status |= ISI_DTR; |
+} |
+ |
+static inline void drop_dtr(struct isi_port * port) |
+{ |
+ struct isi_board * card = port->card; |
+ unsigned short base = card->base; |
+ unsigned char channel = port->channel; |
+ short wait=400; |
+ while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0)); |
+ if (wait <= 0) { |
+ printk(KERN_WARNING "ISICOM: Card found busy in drop_dtr.\n"); |
+ return; |
+ } |
+#ifdef ISICOM_DEBUG_DTR_RTS |
+ printk(KERN_DEBUG "ISICOM: drop_dtr.\n"); |
+#endif |
+ outw(0x8000 | (channel << card->shift_count) | 0x02 , base); |
+ outw(0x0404, base); |
+ InterruptTheCard(base); |
+ port->status &= ~ISI_DTR; |
+} |
+static inline void raise_rts(struct isi_port * port) |
+{ |
+ struct isi_board * card = port->card; |
+ unsigned short base = card->base; |
+ unsigned char channel = port->channel; |
+ short wait=400; |
+ while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0)); |
+ if (wait <= 0) { |
+ printk(KERN_WARNING "ISICOM: Card found busy in raise_rts.\n"); |
+ return; |
+ } |
+#ifdef ISICOM_DEBUG_DTR_RTS |
+ printk(KERN_DEBUG "ISICOM: raise_rts.\n"); |
+#endif |
+ outw(0x8000 | (channel << card->shift_count) | 0x02 , base); |
+ outw(0x0a04, base); |
+ InterruptTheCard(base); |
+ port->status |= ISI_RTS; |
+} |
+static inline void drop_rts(struct isi_port * port) |
+{ |
+ struct isi_board * card = port->card; |
+ unsigned short base = card->base; |
+ unsigned char channel = port->channel; |
+ short wait=400; |
+ while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0)); |
+ if (wait <= 0) { |
+ printk(KERN_WARNING "ISICOM: Card found busy in drop_rts.\n"); |
+ return; |
+ } |
+#ifdef ISICOM_DEBUG_DTR_RTS |
+ printk(KERN_DEBUG "ISICOM: drop_rts.\n"); |
+#endif |
+ outw(0x8000 | (channel << card->shift_count) | 0x02 , base); |
+ outw(0x0804, base); |
+ InterruptTheCard(base); |
+ port->status &= ~ISI_RTS; |
+} |
+static inline void raise_dtr_rts(struct isi_port * port) |
+{ |
+ struct isi_board * card = port->card; |
+ unsigned short base = card->base; |
+ unsigned char channel = port->channel; |
+ short wait=400; |
+ while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0)); |
+ if (wait <= 0) { |
+ printk(KERN_WARNING "ISICOM: Card found busy in raise_dtr_rts.\n"); |
+ return; |
+ } |
+#ifdef ISICOM_DEBUG_DTR_RTS |
+ printk(KERN_DEBUG "ISICOM: raise_dtr_rts.\n"); |
+#endif |
+ outw(0x8000 | (channel << card->shift_count) | 0x02 , base); |
+ outw(0x0f04, base); |
+ InterruptTheCard(base); |
+ port->status |= (ISI_DTR | ISI_RTS); |
+} |
+static inline void drop_dtr_rts(struct isi_port * port) |
+{ |
+ struct isi_board * card = port->card; |
+ unsigned short base = card->base; |
+ unsigned char channel = port->channel; |
+ short wait=400; |
+ while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0)); |
+ if (wait <= 0) { |
+ printk(KERN_WARNING "ISICOM: Card found busy in drop_dtr_rts.\n"); |
+ return; |
+ } |
+#ifdef ISICOM_DEBUG_DTR_RTS |
+ printk(KERN_DEBUG "ISICOM: drop_dtr_rts.\n"); |
+#endif |
+ outw(0x8000 | (channel << card->shift_count) | 0x02 , base); |
+ outw(0x0c04, base); |
+ InterruptTheCard(base); |
+ port->status &= ~(ISI_RTS | ISI_DTR); |
+} |
+ |
+static inline void kill_queue(struct isi_port * port, short queue) |
+{ |
+ struct isi_board * card = port->card; |
+ unsigned short base = card->base; |
+ unsigned char channel = port->channel; |
+ short wait=400; |
+ while(((inw(base+0x0e) & 0x01) == 0) && (wait-- > 0)); |
+ if (wait <= 0) { |
+ printk(KERN_WARNING "ISICOM: Card found busy in kill_queue.\n"); |
+ return; |
+ } |
+#ifdef ISICOM_DEBUG |
+ printk(KERN_DEBUG "ISICOM: kill_queue 0x%x.\n", queue); |
+#endif |
+ outw(0x8000 | (channel << card->shift_count) | 0x02 , base); |
+ outw((queue << 8) | 0x06, base); |
+ InterruptTheCard(base); |
+} |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* ISICOM_H */ |
+ |
Index: linuxc26/include/linux/ctype.h |
=================================================================== |
--- linuxc26/include/linux/ctype.h (nonexistent) |
+++ linuxc26/include/linux/ctype.h (revision 422) |
@@ -0,0 +1,54 @@ |
+#ifndef _LINUX_CTYPE_H |
+#define _LINUX_CTYPE_H |
+ |
+/* |
+ * NOTE! This ctype does not handle EOF like the standard C |
+ * library is required to. |
+ */ |
+ |
+#define _U 0x01 /* upper */ |
+#define _L 0x02 /* lower */ |
+#define _D 0x04 /* digit */ |
+#define _C 0x08 /* cntrl */ |
+#define _P 0x10 /* punct */ |
+#define _S 0x20 /* white space (space/lf/tab) */ |
+#define _X 0x40 /* hex digit */ |
+#define _SP 0x80 /* hard space (0x20) */ |
+ |
+extern unsigned char _ctype[]; |
+ |
+#define __ismask(x) (_ctype[(int)(unsigned char)(x)]) |
+ |
+#define isalnum(c) ((__ismask(c)&(_U|_L|_D)) != 0) |
+#define isalpha(c) ((__ismask(c)&(_U|_L)) != 0) |
+#define iscntrl(c) ((__ismask(c)&(_C)) != 0) |
+#define isdigit(c) ((__ismask(c)&(_D)) != 0) |
+#define isgraph(c) ((__ismask(c)&(_P|_U|_L|_D)) != 0) |
+#define islower(c) ((__ismask(c)&(_L)) != 0) |
+#define isprint(c) ((__ismask(c)&(_P|_U|_L|_D|_SP)) != 0) |
+#define ispunct(c) ((__ismask(c)&(_P)) != 0) |
+#define isspace(c) ((__ismask(c)&(_S)) != 0) |
+#define isupper(c) ((__ismask(c)&(_U)) != 0) |
+#define isxdigit(c) ((__ismask(c)&(_D|_X)) != 0) |
+ |
+#define isascii(c) (((unsigned char)(c))<=0x7f) |
+#define toascii(c) (((unsigned char)(c))&0x7f) |
+ |
+static inline unsigned char __tolower(unsigned char c) |
+{ |
+ if (isupper(c)) |
+ c -= 'A'-'a'; |
+ return c; |
+} |
+ |
+static inline unsigned char __toupper(unsigned char c) |
+{ |
+ if (islower(c)) |
+ c -= 'a'-'A'; |
+ return c; |
+} |
+ |
+#define tolower(c) __tolower(c) |
+#define toupper(c) __toupper(c) |
+ |
+#endif |
Index: linuxc26/include/linux/node.h |
=================================================================== |
--- linuxc26/include/linux/node.h (nonexistent) |
+++ linuxc26/include/linux/node.h (revision 422) |
@@ -0,0 +1,34 @@ |
+/* |
+ * include/linux/node.h - generic node definition |
+ * |
+ * This is mainly for topological representation. We define the |
+ * basic 'struct node' here, which can be embedded in per-arch |
+ * definitions of processors. |
+ * |
+ * Basic handling of the devices is done in drivers/base/node.c |
+ * and system devices are handled in drivers/base/sys.c. |
+ * |
+ * Nodes are exported via driverfs in the class/node/devices/ |
+ * directory. |
+ * |
+ * Per-node interfaces can be implemented using a struct device_interface. |
+ * See the following for how to do this: |
+ * - drivers/base/intf.c |
+ * - Documentation/driver-model/interface.txt |
+ */ |
+#ifndef _LINUX_NODE_H_ |
+#define _LINUX_NODE_H_ |
+ |
+#include <linux/sysdev.h> |
+#include <linux/cpumask.h> |
+ |
+struct node { |
+ cpumask_t cpumap; /* Bitmap of CPUs on the Node */ |
+ struct sys_device sysdev; |
+}; |
+ |
+extern int register_node(struct node *, int, struct node *); |
+ |
+#define to_node(sys_device) container_of(sys_device, struct node, sysdev) |
+ |
+#endif /* _LINUX_NODE_H_ */ |
Index: linuxc26/include/linux/pfkeyv2.h |
=================================================================== |
--- linuxc26/include/linux/pfkeyv2.h (nonexistent) |
+++ linuxc26/include/linux/pfkeyv2.h (revision 422) |
@@ -0,0 +1,335 @@ |
+/* 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 { |
+ uint8_t sadb_msg_version; |
+ uint8_t sadb_msg_type; |
+ uint8_t sadb_msg_errno; |
+ uint8_t sadb_msg_satype; |
+ uint16_t sadb_msg_len; |
+ uint16_t sadb_msg_reserved; |
+ uint32_t sadb_msg_seq; |
+ uint32_t sadb_msg_pid; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_msg) == 16 */ |
+ |
+struct sadb_ext { |
+ uint16_t sadb_ext_len; |
+ uint16_t sadb_ext_type; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_ext) == 4 */ |
+ |
+struct sadb_sa { |
+ uint16_t sadb_sa_len; |
+ uint16_t sadb_sa_exttype; |
+ uint32_t sadb_sa_spi; |
+ uint8_t sadb_sa_replay; |
+ uint8_t sadb_sa_state; |
+ uint8_t sadb_sa_auth; |
+ uint8_t sadb_sa_encrypt; |
+ uint32_t sadb_sa_flags; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_sa) == 16 */ |
+ |
+struct sadb_lifetime { |
+ uint16_t sadb_lifetime_len; |
+ uint16_t sadb_lifetime_exttype; |
+ uint32_t sadb_lifetime_allocations; |
+ uint64_t sadb_lifetime_bytes; |
+ uint64_t sadb_lifetime_addtime; |
+ uint64_t sadb_lifetime_usetime; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_lifetime) == 32 */ |
+ |
+struct sadb_address { |
+ uint16_t sadb_address_len; |
+ uint16_t sadb_address_exttype; |
+ uint8_t sadb_address_proto; |
+ uint8_t sadb_address_prefixlen; |
+ uint16_t sadb_address_reserved; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_address) == 8 */ |
+ |
+struct sadb_key { |
+ uint16_t sadb_key_len; |
+ uint16_t sadb_key_exttype; |
+ uint16_t sadb_key_bits; |
+ uint16_t sadb_key_reserved; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_key) == 8 */ |
+ |
+struct sadb_ident { |
+ uint16_t sadb_ident_len; |
+ uint16_t sadb_ident_exttype; |
+ uint16_t sadb_ident_type; |
+ uint16_t sadb_ident_reserved; |
+ uint64_t sadb_ident_id; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_ident) == 16 */ |
+ |
+struct sadb_sens { |
+ uint16_t sadb_sens_len; |
+ uint16_t sadb_sens_exttype; |
+ uint32_t sadb_sens_dpd; |
+ uint8_t sadb_sens_sens_level; |
+ uint8_t sadb_sens_sens_len; |
+ uint8_t sadb_sens_integ_level; |
+ uint8_t sadb_sens_integ_len; |
+ uint32_t sadb_sens_reserved; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_sens) == 16 */ |
+ |
+/* followed by: |
+ uint64_t sadb_sens_bitmap[sens_len]; |
+ uint64_t sadb_integ_bitmap[integ_len]; */ |
+ |
+struct sadb_prop { |
+ uint16_t sadb_prop_len; |
+ uint16_t sadb_prop_exttype; |
+ uint8_t sadb_prop_replay; |
+ uint8_t sadb_prop_reserved[3]; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_prop) == 8 */ |
+ |
+/* followed by: |
+ struct sadb_comb sadb_combs[(sadb_prop_len + |
+ sizeof(uint64_t) - sizeof(struct sadb_prop)) / |
+ sizeof(strut sadb_comb)]; */ |
+ |
+struct sadb_comb { |
+ uint8_t sadb_comb_auth; |
+ uint8_t sadb_comb_encrypt; |
+ uint16_t sadb_comb_flags; |
+ uint16_t sadb_comb_auth_minbits; |
+ uint16_t sadb_comb_auth_maxbits; |
+ uint16_t sadb_comb_encrypt_minbits; |
+ uint16_t sadb_comb_encrypt_maxbits; |
+ uint32_t sadb_comb_reserved; |
+ uint32_t sadb_comb_soft_allocations; |
+ uint32_t sadb_comb_hard_allocations; |
+ uint64_t sadb_comb_soft_bytes; |
+ uint64_t sadb_comb_hard_bytes; |
+ uint64_t sadb_comb_soft_addtime; |
+ uint64_t sadb_comb_hard_addtime; |
+ uint64_t sadb_comb_soft_usetime; |
+ uint64_t sadb_comb_hard_usetime; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_comb) == 72 */ |
+ |
+struct sadb_supported { |
+ uint16_t sadb_supported_len; |
+ uint16_t sadb_supported_exttype; |
+ uint32_t sadb_supported_reserved; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_supported) == 8 */ |
+ |
+/* followed by: |
+ struct sadb_alg sadb_algs[(sadb_supported_len + |
+ sizeof(uint64_t) - sizeof(struct sadb_supported)) / |
+ sizeof(struct sadb_alg)]; */ |
+ |
+struct sadb_alg { |
+ uint8_t sadb_alg_id; |
+ uint8_t sadb_alg_ivlen; |
+ uint16_t sadb_alg_minbits; |
+ uint16_t sadb_alg_maxbits; |
+ uint16_t sadb_alg_reserved; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_alg) == 8 */ |
+ |
+struct sadb_spirange { |
+ uint16_t sadb_spirange_len; |
+ uint16_t sadb_spirange_exttype; |
+ uint32_t sadb_spirange_min; |
+ uint32_t sadb_spirange_max; |
+ uint32_t sadb_spirange_reserved; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_spirange) == 16 */ |
+ |
+struct sadb_x_kmprivate { |
+ uint16_t sadb_x_kmprivate_len; |
+ uint16_t sadb_x_kmprivate_exttype; |
+ u_int32_t sadb_x_kmprivate_reserved; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_x_kmprivate) == 8 */ |
+ |
+struct sadb_x_sa2 { |
+ uint16_t sadb_x_sa2_len; |
+ uint16_t sadb_x_sa2_exttype; |
+ uint8_t sadb_x_sa2_mode; |
+ uint8_t sadb_x_sa2_reserved1; |
+ uint16_t sadb_x_sa2_reserved2; |
+ uint32_t sadb_x_sa2_sequence; |
+ uint32_t sadb_x_sa2_reqid; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_x_sa2) == 16 */ |
+ |
+struct sadb_x_policy { |
+ uint16_t sadb_x_policy_len; |
+ uint16_t sadb_x_policy_exttype; |
+ uint16_t sadb_x_policy_type; |
+ uint8_t sadb_x_policy_dir; |
+ uint8_t sadb_x_policy_reserved; |
+ uint32_t sadb_x_policy_id; |
+ uint32_t sadb_x_policy_reserved2; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_x_policy) == 16 */ |
+ |
+struct sadb_x_ipsecrequest { |
+ uint16_t sadb_x_ipsecrequest_len; |
+ uint16_t sadb_x_ipsecrequest_proto; |
+ uint8_t sadb_x_ipsecrequest_mode; |
+ uint8_t sadb_x_ipsecrequest_level; |
+ uint16_t sadb_x_ipsecrequest_reserved1; |
+ uint32_t sadb_x_ipsecrequest_reqid; |
+ uint32_t 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 { |
+ uint16_t sadb_x_nat_t_type_len; |
+ uint16_t sadb_x_nat_t_type_exttype; |
+ uint8_t sadb_x_nat_t_type_type; |
+ uint8_t 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 { |
+ uint16_t sadb_x_nat_t_port_len; |
+ uint16_t sadb_x_nat_t_port_exttype; |
+ uint16_t sadb_x_nat_t_port_port; |
+ uint16_t sadb_x_nat_t_port_reserved; |
+} __attribute__((packed)); |
+/* sizeof(struct sadb_x_nat_t_port) == 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_MAX 23 |
+ |
+/* Security Association flags */ |
+#define SADB_SAFLAGS_PFS 1 |
+#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_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_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_EXT_MAX 23 |
+ |
+/* 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) */ |
Index: linuxc26/include/linux/msg.h |
=================================================================== |
--- linuxc26/include/linux/msg.h (nonexistent) |
+++ linuxc26/include/linux/msg.h (revision 422) |
@@ -0,0 +1,103 @@ |
+#ifndef _LINUX_MSG_H |
+#define _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; |
+}; |
+ |
+#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 kilobytes 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) |
+ |
+#ifdef __KERNEL__ |
+ |
+/* one msg_msg structure for each message */ |
+struct msg_msg { |
+ struct list_head m_list; |
+ long m_type; |
+ int m_ts; /* message text size */ |
+ struct msg_msgseg* next; |
+ void *security; |
+ /* the actual message follows immediately */ |
+}; |
+ |
+#define DATALEN_MSG (PAGE_SIZE-sizeof(struct msg_msg)) |
+#define DATALEN_SEG (PAGE_SIZE-sizeof(struct msg_msgseg)) |
+ |
+/* one msq_queue structure for each present queue on the system */ |
+struct msg_queue { |
+ struct kern_ipc_perm q_perm; |
+ time_t q_stime; /* last msgsnd time */ |
+ time_t q_rtime; /* last msgrcv time */ |
+ time_t q_ctime; /* last change time */ |
+ unsigned long q_cbytes; /* current number of bytes on queue */ |
+ unsigned long q_qnum; /* number of messages in queue */ |
+ unsigned long q_qbytes; /* max number of bytes on queue */ |
+ pid_t q_lspid; /* pid of last msgsnd */ |
+ pid_t q_lrpid; /* last receive pid */ |
+ |
+ struct list_head q_messages; |
+ struct list_head q_receivers; |
+ struct list_head q_senders; |
+}; |
+ |
+asmlinkage long sys_msgget (key_t key, int msgflg); |
+asmlinkage long sys_msgsnd (int msqid, struct msgbuf __user *msgp, size_t msgsz, int msgflg); |
+asmlinkage long sys_msgrcv (int msqid, struct msgbuf __user *msgp, size_t msgsz, long msgtyp, int msgflg); |
+asmlinkage long sys_msgctl (int msqid, int cmd, struct msqid_ds __user *buf); |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* _LINUX_MSG_H */ |
Index: linuxc26/include/linux/if_pppvar.h |
=================================================================== |
--- linuxc26/include/linux/if_pppvar.h (nonexistent) |
+++ linuxc26/include/linux/if_pppvar.h (revision 422) |
@@ -0,0 +1,138 @@ |
+/* From: if_pppvar.h,v 1.2 1995/06/12 11:36:51 paulus Exp */ |
+/* |
+ * if_pppvar.h - private structures and declarations for PPP. |
+ * |
+ * Copyright (c) 1994 The Australian National University. |
+ * All rights reserved. |
+ * |
+ * 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. The Australian National University |
+ * makes no representations about the suitability of this software for |
+ * any purpose. |
+ * |
+ * IN NO EVENT SHALL THE AUSTRALIAN NATIONAL UNIVERSITY 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 |
+ * THE AUSTRALIAN NATIONAL UNIVERSITY HAVE BEEN ADVISED OF THE POSSIBILITY |
+ * OF SUCH DAMAGE. |
+ * |
+ * THE AUSTRALIAN NATIONAL UNIVERSITY 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 THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO |
+ * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, |
+ * OR MODIFICATIONS. |
+ * |
+ * Copyright (c) 1989 Carnegie Mellon University. |
+ * All rights reserved. |
+ * |
+ * Redistribution and use in source and binary forms are permitted |
+ * provided that the above copyright notice and this paragraph are |
+ * duplicated in all such forms and that any documentation, |
+ * advertising materials, and other materials related to such |
+ * distribution and use acknowledge that the software was developed |
+ * by Carnegie Mellon University. The name of the |
+ * University may not be used to endorse or promote products derived |
+ * from this software without specific prior written permission. |
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR |
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED |
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
+ */ |
+ |
+/* |
+ * ==FILEVERSION 990806== |
+ * |
+ * NOTE TO MAINTAINERS: |
+ * If you modify this file at all, please set the above date. |
+ * if_pppvar.h is shipped with a PPP distribution as well as with the kernel; |
+ * if everyone increases the FILEVERSION number above, then scripts |
+ * can do the right thing when deciding whether to install a new if_pppvar.h |
+ * file. Don't change the format of that line otherwise, so the |
+ * installation script can recognize it. |
+ */ |
+ |
+/* |
+ * Supported network protocols. These values are used for |
+ * indexing sc_npmode. |
+ */ |
+ |
+#define NP_IP 0 /* Internet Protocol */ |
+#define NP_IPX 1 /* IPX protocol */ |
+#define NP_AT 2 /* Appletalk protocol */ |
+#define NP_IPV6 3 /* Internet Protocol */ |
+#define NUM_NP 4 /* Number of NPs. */ |
+ |
+#define OBUFSIZE 256 /* # chars of output buffering */ |
+ |
+/* |
+ * Structure describing each ppp unit. |
+ */ |
+ |
+struct ppp { |
+ int magic; /* magic value for structure */ |
+ struct ppp *next; /* unit with next index */ |
+ unsigned long inuse; /* are we allocated? */ |
+ int line; /* network interface unit # */ |
+ __u32 flags; /* miscellaneous control flags */ |
+ int mtu; /* maximum xmit frame size */ |
+ int mru; /* maximum receive frame size */ |
+ struct slcompress *slcomp; /* for TCP header compression */ |
+ struct sk_buff_head xmt_q; /* frames to send from pppd */ |
+ struct sk_buff_head rcv_q; /* frames for pppd to read */ |
+ unsigned long xmit_busy; /* bit 0 set when xmitter busy */ |
+ |
+ /* Information specific to using ppp on async serial lines. */ |
+ struct tty_struct *tty; /* ptr to TTY structure */ |
+ struct tty_struct *backup_tty; /* TTY to use if tty gets closed */ |
+ __u8 escape; /* 0x20 if prev char was PPP_ESC */ |
+ __u8 toss; /* toss this frame */ |
+ volatile __u8 tty_pushing; /* internal state flag */ |
+ volatile __u8 woke_up; /* internal state flag */ |
+ __u32 xmit_async_map[8]; /* 1 bit means that given control |
+ character is quoted on output*/ |
+ __u32 recv_async_map; /* 1 bit means that given control |
+ character is ignored on input*/ |
+ __u32 bytes_sent; /* Bytes sent on frame */ |
+ __u32 bytes_rcvd; /* Bytes recvd on frame */ |
+ |
+ /* Async transmission information */ |
+ struct sk_buff *tpkt; /* frame currently being sent */ |
+ int tpkt_pos; /* how much of it we've done */ |
+ __u16 tfcs; /* FCS so far for it */ |
+ unsigned char *optr; /* where we're up to in sending */ |
+ unsigned char *olim; /* points past last valid char */ |
+ |
+ /* Async reception information */ |
+ struct sk_buff *rpkt; /* frame currently being rcvd */ |
+ __u16 rfcs; /* FCS so far of rpkt */ |
+ |
+ /* Queues for select() functionality */ |
+ wait_queue_head_t read_wait; /* queue for reading processes */ |
+ |
+ /* info for detecting idle channels */ |
+ unsigned long last_xmit; /* time of last transmission */ |
+ unsigned long last_recv; /* time last packet received */ |
+ |
+ /* Statistic information */ |
+ struct pppstat stats; /* statistic information */ |
+ |
+ /* PPP compression protocol information */ |
+ struct compressor *sc_xcomp; /* transmit compressor */ |
+ void *sc_xc_state; /* transmit compressor state */ |
+ struct compressor *sc_rcomp; /* receive decompressor */ |
+ void *sc_rc_state; /* receive decompressor state */ |
+ |
+ enum NPmode sc_npmode[NUM_NP]; /* what to do with each NP */ |
+ int sc_xfer; /* PID of reserved PPP table */ |
+ char name[16]; /* space for unit name */ |
+ struct net_device dev; /* net device structure */ |
+ struct net_device_stats estats; /* more detailed stats */ |
+ |
+ /* tty output buffer */ |
+ unsigned char obuf[OBUFSIZE]; /* buffer for characters to send */ |
+}; |
+ |
+#define PPP_MAGIC 0x5002 |
+#define PPP_VERSION "2.3.7" |
Index: linuxc26/include/linux/serial_core.h |
=================================================================== |
--- linuxc26/include/linux/serial_core.h (nonexistent) |
+++ linuxc26/include/linux/serial_core.h (revision 422) |
@@ -0,0 +1,446 @@ |
+/* |
+ * 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 |
+ * |
+ * $Id: serial_core.h,v 1.1 2004-01-28 15:26:38 giacomo Exp $ |
+ */ |
+ |
+/* |
+ * 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_MAX_8250 14 /* 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_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 |
+ |
+/* NEC v850. */ |
+#define PORT_V850E_UART 40 |
+ |
+/* NEC PC-9800 */ |
+#define PORT_8251_PC98 41 |
+#define PORT_19K_PC98 42 |
+#define PORT_FIFO_PC98 43 |
+#define PORT_VFAST_PC98 44 |
+#define PORT_PC9861 45 |
+#define PORT_PC9801_101 46 |
+ |
+/* DZ */ |
+#define PORT_DZ 47 |
+ |
+/* Parisc type numbers. */ |
+#define PORT_MUX 48 |
+ |
+/* Macintosh Zilog type numbers */ |
+#define PORT_MAC_ZILOG 50 /* m68k : not yet implemented */ |
+#define PORT_PMAC_ZILOG 51 |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/config.h> |
+#include <linux/interrupt.h> |
+#include <linux/circ_buf.h> |
+#include <linux/spinlock.h> |
+ |
+struct uart_port; |
+struct uart_info; |
+struct serial_struct; |
+ |
+/* |
+ * This structure describes all the operations that can be |
+ * done on the physical hardware. |
+ */ |
+struct uart_ops { |
+ unsigned int (*tx_empty)(struct uart_port *); |
+ void (*set_mctrl)(struct uart_port *, unsigned int mctrl); |
+ unsigned int (*get_mctrl)(struct uart_port *); |
+ void (*stop_tx)(struct uart_port *, unsigned int tty_stop); |
+ void (*start_tx)(struct uart_port *, unsigned int tty_start); |
+ void (*send_xchar)(struct uart_port *, char ch); |
+ void (*stop_rx)(struct uart_port *); |
+ void (*enable_ms)(struct uart_port *); |
+ void (*break_ctl)(struct uart_port *, int ctl); |
+ int (*startup)(struct uart_port *); |
+ void (*shutdown)(struct uart_port *); |
+ void (*set_termios)(struct uart_port *, struct termios *new, |
+ struct termios *old); |
+ void (*pm)(struct uart_port *, unsigned int state, |
+ unsigned int oldstate); |
+ int (*set_wake)(struct uart_port *, unsigned int state); |
+ |
+ /* |
+ * Return a string describing the type of the port |
+ */ |
+ const char *(*type)(struct uart_port *); |
+ |
+ /* |
+ * Release IO and memory resources used by the port. |
+ * This includes iounmap if necessary. |
+ */ |
+ void (*release_port)(struct uart_port *); |
+ |
+ /* |
+ * Request IO and memory resources used by the port. |
+ * This includes iomapping the port if necessary. |
+ */ |
+ int (*request_port)(struct uart_port *); |
+ void (*config_port)(struct uart_port *, int); |
+ int (*verify_port)(struct uart_port *, struct serial_struct *); |
+ int (*ioctl)(struct uart_port *, unsigned int, unsigned long); |
+}; |
+ |
+#define UART_CONFIG_TYPE (1 << 0) |
+#define UART_CONFIG_IRQ (1 << 1) |
+ |
+struct uart_icount { |
+ __u32 cts; |
+ __u32 dsr; |
+ __u32 rng; |
+ __u32 dcd; |
+ __u32 rx; |
+ __u32 tx; |
+ __u32 frame; |
+ __u32 overrun; |
+ __u32 parity; |
+ __u32 brk; |
+ __u32 buf_overrun; |
+}; |
+ |
+struct uart_port { |
+ spinlock_t lock; /* port lock */ |
+ unsigned int iobase; /* in/out[bwl] */ |
+ char *membase; /* read/write[bwl] */ |
+ unsigned int irq; /* irq number */ |
+ unsigned int uartclk; /* base uart clock */ |
+ unsigned char fifosize; /* tx fifo size */ |
+ unsigned char x_char; /* xon/xoff char */ |
+ unsigned char regshift; /* reg offset shift */ |
+ unsigned char iotype; /* io access style */ |
+ |
+#define UPIO_PORT (0) |
+#define UPIO_HUB6 (1) |
+#define UPIO_MEM (2) |
+ |
+ unsigned int read_status_mask; /* driver specific */ |
+ unsigned int ignore_status_mask; /* driver specific */ |
+ struct uart_info *info; /* pointer to parent info */ |
+ struct uart_icount icount; /* statistics */ |
+ |
+ struct console *cons; /* struct console, if any */ |
+#ifdef CONFIG_SERIAL_CORE_CONSOLE |
+ unsigned long sysrq; /* sysrq timeout */ |
+#endif |
+ |
+ unsigned int flags; |
+ |
+#define UPF_HUP_NOTIFY (1 << 0) |
+#define UPF_FOURPORT (1 << 1) |
+#define UPF_SAK (1 << 2) |
+#define UPF_SPD_MASK (0x1030) |
+#define UPF_SPD_HI (0x0010) |
+#define UPF_SPD_VHI (0x0020) |
+#define UPF_SPD_CUST (0x0030) |
+#define UPF_SPD_SHI (0x1000) |
+#define UPF_SPD_WARP (0x1010) |
+#define UPF_SKIP_TEST (1 << 6) |
+#define UPF_AUTO_IRQ (1 << 7) |
+#define UPF_HARDPPS_CD (1 << 11) |
+#define UPF_LOW_LATENCY (1 << 13) |
+#define UPF_BUGGY_UART (1 << 14) |
+#define UPF_AUTOPROBE (1 << 15) |
+#define UPF_MAGIC_MULTIPLIER (1 << 16) |
+#define UPF_BOOT_ONLYMCA (1 << 22) |
+#define UPF_CONS_FLOW (1 << 23) |
+#define UPF_SHARE_IRQ (1 << 24) |
+#define UPF_BOOT_AUTOCONF (1 << 28) |
+#define UPF_RESOURCES (1 << 30) |
+#define UPF_IOREMAP (1 << 31) |
+ |
+#define UPF_CHANGE_MASK (0x17fff) |
+#define UPF_USR_MASK (UPF_SPD_MASK|UPF_LOW_LATENCY) |
+ |
+ unsigned int mctrl; /* current modem ctrl settings */ |
+ unsigned int timeout; /* character-based timeout */ |
+ unsigned int type; /* port type */ |
+ struct uart_ops *ops; |
+ unsigned int custom_divisor; |
+ unsigned int line; /* port index */ |
+ unsigned long mapbase; /* for ioremap */ |
+ unsigned char hub6; /* this should be in the 8250 driver */ |
+ unsigned char unused[3]; |
+}; |
+ |
+/* |
+ * This is the state information which is persistent across opens. |
+ * The low level driver must not to touch any elements contained |
+ * within. |
+ */ |
+struct uart_state { |
+ unsigned int close_delay; |
+ unsigned int closing_wait; |
+ |
+#define USF_CLOSING_WAIT_INF (0) |
+#define USF_CLOSING_WAIT_NONE (65535) |
+ |
+ int count; |
+ int pm_state; |
+ struct uart_info *info; |
+ struct uart_port *port; |
+ |
+ struct semaphore sem; |
+}; |
+ |
+#define UART_XMIT_SIZE 1024 |
+/* |
+ * This is the state information which is only valid when the port |
+ * is open; it may be freed by the core driver once the device has |
+ * been closed. Either the low level driver or the core can modify |
+ * stuff here. |
+ */ |
+struct uart_info { |
+ struct tty_struct *tty; |
+ struct circ_buf xmit; |
+ unsigned int flags; |
+ |
+/* |
+ * These are the flags that specific to info->flags, and reflect our |
+ * internal state. They can not be accessed via port->flags. Low |
+ * level drivers must not change these, but may query them instead. |
+ */ |
+#define UIF_CHECK_CD (1 << 25) |
+#define UIF_CTS_FLOW (1 << 26) |
+#define UIF_NORMAL_ACTIVE (1 << 29) |
+#define UIF_INITIALIZED (1 << 31) |
+ |
+ unsigned char *tmpbuf; |
+ struct semaphore tmpbuf_sem; |
+ |
+ int blocked_open; |
+ |
+ struct tasklet_struct tlet; |
+ |
+ wait_queue_head_t open_wait; |
+ wait_queue_head_t delta_msr_wait; |
+}; |
+ |
+/* number of characters left in xmit buffer before we ask for more */ |
+#define WAKEUP_CHARS 256 |
+ |
+struct module; |
+struct tty_driver; |
+ |
+struct uart_driver { |
+ struct module *owner; |
+ const char *driver_name; |
+ const char *dev_name; |
+ const char *devfs_name; |
+ int major; |
+ int minor; |
+ int nr; |
+ struct console *cons; |
+ |
+ /* |
+ * these are private; the low level driver should not |
+ * touch these; they should be initialised to NULL |
+ */ |
+ struct uart_state *state; |
+ struct tty_driver *tty_driver; |
+}; |
+ |
+void uart_write_wakeup(struct uart_port *port); |
+ |
+/* |
+ * Baud rate helpers. |
+ */ |
+void uart_update_timeout(struct uart_port *port, unsigned int cflag, |
+ unsigned int baud); |
+unsigned int uart_get_baud_rate(struct uart_port *port, struct termios *termios, |
+ struct termios *old, unsigned int min, |
+ unsigned int max); |
+unsigned int uart_get_divisor(struct uart_port *port, unsigned int baud); |
+ |
+/* |
+ * Console helpers. |
+ */ |
+struct uart_port *uart_get_console(struct uart_port *ports, int nr, |
+ struct console *c); |
+void uart_parse_options(char *options, int *baud, int *parity, int *bits, |
+ int *flow); |
+int uart_set_options(struct uart_port *port, struct console *co, int baud, |
+ int parity, int bits, int flow); |
+struct tty_driver *uart_console_device(struct console *co, int *index); |
+ |
+/* |
+ * Port/driver registration/removal |
+ */ |
+int uart_register_driver(struct uart_driver *uart); |
+void uart_unregister_driver(struct uart_driver *uart); |
+void uart_unregister_port(struct uart_driver *reg, int line); |
+int uart_register_port(struct uart_driver *reg, struct uart_port *port); |
+int uart_add_one_port(struct uart_driver *reg, struct uart_port *port); |
+int uart_remove_one_port(struct uart_driver *reg, struct uart_port *port); |
+ |
+/* |
+ * Power Management |
+ */ |
+int uart_suspend_port(struct uart_driver *reg, struct uart_port *port); |
+int uart_resume_port(struct uart_driver *reg, struct uart_port *port); |
+ |
+#define uart_circ_empty(circ) ((circ)->head == (circ)->tail) |
+#define uart_circ_clear(circ) ((circ)->head = (circ)->tail = 0) |
+ |
+#define uart_circ_chars_pending(circ) \ |
+ (CIRC_CNT((circ)->head, (circ)->tail, UART_XMIT_SIZE)) |
+ |
+#define uart_circ_chars_free(circ) \ |
+ (CIRC_SPACE((circ)->head, (circ)->tail, UART_XMIT_SIZE)) |
+ |
+#define uart_tx_stopped(port) \ |
+ ((port)->info->tty->stopped || (port)->info->tty->hw_stopped) |
+ |
+/* |
+ * The following are helper functions for the low level drivers. |
+ */ |
+#ifdef SUPPORT_SYSRQ |
+static inline int |
+uart_handle_sysrq_char(struct uart_port *port, unsigned int ch, |
+ struct pt_regs *regs) |
+{ |
+ if (port->sysrq) { |
+ if (ch && time_before(jiffies, port->sysrq)) { |
+ handle_sysrq(ch, regs, NULL); |
+ port->sysrq = 0; |
+ return 1; |
+ } |
+ port->sysrq = 0; |
+ } |
+ return 0; |
+} |
+#else |
+#define uart_handle_sysrq_char(port,ch,regs) (0) |
+#endif |
+ |
+/* |
+ * We do the SysRQ and SAK checking like this... |
+ */ |
+static inline int uart_handle_break(struct uart_port *port) |
+{ |
+ struct uart_info *info = port->info; |
+#ifdef SUPPORT_SYSRQ |
+ if (port->cons && port->cons->index == port->line) { |
+ if (!port->sysrq) { |
+ port->sysrq = jiffies + HZ*5; |
+ return 1; |
+ } |
+ port->sysrq = 0; |
+ } |
+#endif |
+ if (info->flags & UPF_SAK) |
+ do_SAK(info->tty); |
+ return 0; |
+} |
+ |
+/** |
+ * uart_handle_dcd_change - handle a change of carrier detect state |
+ * @port: uart_port structure for the open port |
+ * @status: new carrier detect status, nonzero if active |
+ */ |
+static inline void |
+uart_handle_dcd_change(struct uart_port *port, unsigned int status) |
+{ |
+ struct uart_info *info = port->info; |
+ |
+ port->icount.dcd++; |
+ |
+#ifdef CONFIG_HARD_PPS |
+ if ((port->flags & UPF_HARDPPS_CD) && status) |
+ hardpps(); |
+#endif |
+ |
+ if (info->flags & UIF_CHECK_CD) { |
+ if (status) |
+ wake_up_interruptible(&info->open_wait); |
+ else if (info->tty) |
+ tty_hangup(info->tty); |
+ } |
+} |
+ |
+/** |
+ * uart_handle_cts_change - handle a change of clear-to-send state |
+ * @port: uart_port structure for the open port |
+ * @status: new clear to send status, nonzero if active |
+ */ |
+static inline void |
+uart_handle_cts_change(struct uart_port *port, unsigned int status) |
+{ |
+ struct uart_info *info = port->info; |
+ struct tty_struct *tty = info->tty; |
+ |
+ port->icount.cts++; |
+ |
+ if (info->flags & UIF_CTS_FLOW) { |
+ if (tty->hw_stopped) { |
+ if (status) { |
+ tty->hw_stopped = 0; |
+ port->ops->start_tx(port, 0); |
+ uart_write_wakeup(port); |
+ } |
+ } else { |
+ if (!status) { |
+ tty->hw_stopped = 1; |
+ port->ops->stop_tx(port, 0); |
+ } |
+ } |
+ } |
+} |
+ |
+/* |
+ * UART_ENABLE_MS - determine if port should enable modem status irqs |
+ */ |
+#define UART_ENABLE_MS(port,cflag) ((port)->flags & UPF_HARDPPS_CD || \ |
+ (cflag) & CRTSCTS || \ |
+ !((cflag) & CLOCAL)) |
+ |
+#endif |
Index: linuxc26/include/linux/socket.h |
=================================================================== |
--- linuxc26/include/linux/socket.h (nonexistent) |
+++ linuxc26/include/linux/socket.h (revision 422) |
@@ -0,0 +1,297 @@ |
+#ifndef _LINUX_SOCKET_H |
+#define _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 */ |
+ |
+struct __kernel_sockaddr_storage { |
+ unsigned short 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 */ |
+ |
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) |
+ |
+#include <linux/config.h> /* for CONFIG_COMPAT */ |
+#include <linux/linkage.h> |
+#include <asm/socket.h> /* arch-dependent defines */ |
+#include <linux/sockios.h> /* the SIOCxxx I/O controls */ |
+#include <linux/uio.h> /* iovec support */ |
+#include <linux/types.h> /* pid_t */ |
+#include <linux/compiler.h> /* __user */ |
+ |
+typedef unsigned short sa_family_t; |
+ |
+/* |
+ * 1003.1g requires sa_family_t and that sa_data is char. |
+ */ |
+ |
+struct sockaddr { |
+ sa_family_t sa_family; /* address family, AF_xxx */ |
+ char sa_data[14]; /* 14 bytes of protocol address */ |
+}; |
+ |
+struct linger { |
+ int l_onoff; /* Linger active */ |
+ int l_linger; /* How long to linger for */ |
+}; |
+ |
+#define sockaddr_storage __kernel_sockaddr_storage |
+ |
+/* |
+ * As we do 4.4BSD message passing we use a 4.4BSD message passing |
+ * system, not 4.3. Thus msg_accrights(len) are now missing. They |
+ * belong in an obscure libc emulation or the bin. |
+ */ |
+ |
+struct msghdr { |
+ void * msg_name; /* Socket name */ |
+ int msg_namelen; /* Length of name */ |
+ struct iovec * msg_iov; /* Data blocks */ |
+ __kernel_size_t msg_iovlen; /* Number of blocks */ |
+ void * msg_control; /* Per protocol magic (eg BSD file descriptor passing) */ |
+ __kernel_size_t msg_controllen; /* Length of cmsg list */ |
+ unsigned msg_flags; |
+}; |
+ |
+/* |
+ * POSIX 1003.1g - ancillary data object information |
+ * Ancillary data consits of a sequence of pairs of |
+ * (cmsghdr, cmsg_data[]) |
+ */ |
+ |
+struct cmsghdr { |
+ __kernel_size_t cmsg_len; /* data byte count, including hdr */ |
+ int cmsg_level; /* originating protocol */ |
+ int cmsg_type; /* protocol-specific type */ |
+}; |
+ |
+/* |
+ * Ancilliary data object information MACROS |
+ * Table 5-14 of POSIX 1003.1g |
+ */ |
+ |
+#define __CMSG_NXTHDR(ctl, len, cmsg) __cmsg_nxthdr((ctl),(len),(cmsg)) |
+#define CMSG_NXTHDR(mhdr, cmsg) cmsg_nxthdr((mhdr), (cmsg)) |
+ |
+#define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) ) |
+ |
+#define CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr)))) |
+#define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len)) |
+#define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) |
+ |
+#define __CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr) ? \ |
+ (struct cmsghdr *)(ctl) : \ |
+ (struct cmsghdr *)NULL) |
+#define CMSG_FIRSTHDR(msg) __CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen) |
+ |
+/* |
+ * This mess will go away with glibc |
+ */ |
+ |
+#ifdef __KERNEL__ |
+#define __KINLINE static inline |
+#elif defined(__GNUC__) |
+#define __KINLINE static __inline__ |
+#elif defined(__cplusplus) |
+#define __KINLINE static inline |
+#else |
+#define __KINLINE static |
+#endif |
+ |
+ |
+/* |
+ * Get the next cmsg header |
+ * |
+ * PLEASE, do not touch this function. If you think, that it is |
+ * incorrect, grep kernel sources and think about consequences |
+ * before trying to improve it. |
+ * |
+ * Now it always returns valid, not truncated ancillary object |
+ * HEADER. But caller still MUST check, that cmsg->cmsg_len is |
+ * inside range, given by msg->msg_controllen before using |
+ * ansillary object DATA. --ANK (980731) |
+ */ |
+ |
+__KINLINE struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __size, |
+ struct cmsghdr *__cmsg) |
+{ |
+ struct cmsghdr * __ptr; |
+ |
+ __ptr = (struct cmsghdr*)(((unsigned char *) __cmsg) + CMSG_ALIGN(__cmsg->cmsg_len)); |
+ if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size) |
+ return (struct cmsghdr *)0; |
+ |
+ return __ptr; |
+} |
+ |
+__KINLINE struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg) |
+{ |
+ return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg); |
+} |
+ |
+/* "Socket"-level control message types: */ |
+ |
+#define SCM_RIGHTS 0x01 /* rw: access rights (array of int) */ |
+#define SCM_CREDENTIALS 0x02 /* rw: struct ucred */ |
+#define SCM_CONNECT 0x03 /* rw: struct scm_connect */ |
+ |
+struct ucred { |
+ __u32 pid; |
+ __u32 uid; |
+ __u32 gid; |
+}; |
+ |
+/* Supported address families. */ |
+#define AF_UNSPEC 0 |
+#define AF_UNIX 1 /* Unix domain sockets */ |
+#define AF_LOCAL 1 /* POSIX name for AF_UNIX */ |
+#define AF_INET 2 /* Internet IP Protocol */ |
+#define AF_AX25 3 /* Amateur Radio AX.25 */ |
+#define AF_IPX 4 /* Novell IPX */ |
+#define AF_APPLETALK 5 /* AppleTalk DDP */ |
+#define AF_NETROM 6 /* Amateur Radio NET/ROM */ |
+#define AF_BRIDGE 7 /* Multiprotocol bridge */ |
+#define AF_ATMPVC 8 /* ATM PVCs */ |
+#define AF_X25 9 /* Reserved for X.25 project */ |
+#define AF_INET6 10 /* IP version 6 */ |
+#define AF_ROSE 11 /* Amateur Radio X.25 PLP */ |
+#define AF_DECnet 12 /* Reserved for DECnet project */ |
+#define AF_NETBEUI 13 /* Reserved for 802.2LLC project*/ |
+#define AF_SECURITY 14 /* Security callback pseudo AF */ |
+#define AF_KEY 15 /* PF_KEY key management API */ |
+#define AF_NETLINK 16 |
+#define AF_ROUTE AF_NETLINK /* Alias to emulate 4.4BSD */ |
+#define AF_PACKET 17 /* Packet family */ |
+#define AF_ASH 18 /* Ash */ |
+#define AF_ECONET 19 /* Acorn Econet */ |
+#define AF_ATMSVC 20 /* ATM SVCs */ |
+#define AF_SNA 22 /* Linux SNA Project (nutters!) */ |
+#define AF_IRDA 23 /* IRDA sockets */ |
+#define AF_PPPOX 24 /* PPPoX sockets */ |
+#define AF_WANPIPE 25 /* Wanpipe API Sockets */ |
+#define AF_LLC 26 /* Linux LLC */ |
+#define AF_BLUETOOTH 31 /* Bluetooth sockets */ |
+#define AF_MAX 32 /* For now.. */ |
+ |
+/* Protocol families, same as address families. */ |
+#define PF_UNSPEC AF_UNSPEC |
+#define PF_UNIX AF_UNIX |
+#define PF_LOCAL AF_LOCAL |
+#define PF_INET AF_INET |
+#define PF_AX25 AF_AX25 |
+#define PF_IPX AF_IPX |
+#define PF_APPLETALK AF_APPLETALK |
+#define PF_NETROM AF_NETROM |
+#define PF_BRIDGE AF_BRIDGE |
+#define PF_ATMPVC AF_ATMPVC |
+#define PF_X25 AF_X25 |
+#define PF_INET6 AF_INET6 |
+#define PF_ROSE AF_ROSE |
+#define PF_DECnet AF_DECnet |
+#define PF_NETBEUI AF_NETBEUI |
+#define PF_SECURITY AF_SECURITY |
+#define PF_KEY AF_KEY |
+#define PF_NETLINK AF_NETLINK |
+#define PF_ROUTE AF_ROUTE |
+#define PF_PACKET AF_PACKET |
+#define PF_ASH AF_ASH |
+#define PF_ECONET AF_ECONET |
+#define PF_ATMSVC AF_ATMSVC |
+#define PF_SNA AF_SNA |
+#define PF_IRDA AF_IRDA |
+#define PF_PPPOX AF_PPPOX |
+#define PF_WANPIPE AF_WANPIPE |
+#define PF_LLC AF_LLC |
+#define PF_BLUETOOTH AF_BLUETOOTH |
+#define PF_MAX AF_MAX |
+ |
+/* Maximum queue length specifiable by listen. */ |
+#define SOMAXCONN 128 |
+ |
+/* Flags we can use with send/ and recv. |
+ Added those for 1003.1g not all are supported yet |
+ */ |
+ |
+#define MSG_OOB 1 |
+#define MSG_PEEK 2 |
+#define MSG_DONTROUTE 4 |
+#define MSG_TRYHARD 4 /* Synonym for MSG_DONTROUTE for DECnet */ |
+#define MSG_CTRUNC 8 |
+#define MSG_PROBE 0x10 /* Do not send. Only probe path f.e. for MTU */ |
+#define MSG_TRUNC 0x20 |
+#define MSG_DONTWAIT 0x40 /* Nonblocking io */ |
+#define MSG_EOR 0x80 /* End of record */ |
+#define MSG_WAITALL 0x100 /* Wait for a full request */ |
+#define MSG_FIN 0x200 |
+#define MSG_SYN 0x400 |
+#define MSG_CONFIRM 0x800 /* Confirm path validity */ |
+#define MSG_RST 0x1000 |
+#define MSG_ERRQUEUE 0x2000 /* Fetch message from error queue */ |
+#define MSG_NOSIGNAL 0x4000 /* Do not generate SIGPIPE */ |
+#define MSG_MORE 0x8000 /* Sender will send more */ |
+ |
+#define MSG_EOF MSG_FIN |
+ |
+#if defined(CONFIG_COMPAT) |
+#define MSG_CMSG_COMPAT 0x80000000 /* This message needs 32 bit fixups */ |
+#else |
+#define MSG_CMSG_COMPAT 0 /* We never have 32 bit fixups */ |
+#endif |
+ |
+extern asmlinkage long sys_sendmsg(int fd, struct msghdr __user *msg, unsigned flags); |
+extern asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags); |
+ |
+ |
+ |
+/* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx */ |
+#define SOL_IP 0 |
+/* #define SOL_ICMP 1 No-no-no! Due to Linux :-) we cannot use SOL_ICMP=1 */ |
+#define SOL_TCP 6 |
+#define SOL_UDP 17 |
+#define SOL_IPV6 41 |
+#define SOL_ICMPV6 58 |
+#define SOL_SCTP 132 |
+#define SOL_RAW 255 |
+#define SOL_IPX 256 |
+#define SOL_AX25 257 |
+#define SOL_ATALK 258 |
+#define SOL_NETROM 259 |
+#define SOL_ROSE 260 |
+#define SOL_DECNET 261 |
+#define SOL_X25 262 |
+#define SOL_PACKET 263 |
+#define SOL_ATM 264 /* ATM layer (cell level) */ |
+#define SOL_AAL 265 /* ATM Adaption Layer (packet level) */ |
+#define SOL_IRDA 266 |
+#define SOL_NETBEUI 267 |
+#define SOL_LLC 268 |
+ |
+/* IPX options */ |
+#define IPX_TYPE 1 |
+ |
+#ifdef __KERNEL__ |
+extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len); |
+extern int memcpy_fromiovecend(unsigned char *kdata, struct iovec *iov, |
+ int offset, int len); |
+extern int csum_partial_copy_fromiovecend(unsigned char *kdata, |
+ struct iovec *iov, |
+ int offset, |
+ unsigned int len, int *csump); |
+ |
+extern int verify_iovec(struct msghdr *m, struct iovec *iov, char *address, int mode); |
+extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len); |
+extern void memcpy_tokerneliovec(struct iovec *iov, unsigned char *kdata, int len); |
+extern int move_addr_to_user(void *kaddr, int klen, void __user *uaddr, int __user *ulen); |
+extern int move_addr_to_kernel(void __user *uaddr, int ulen, void *kaddr); |
+extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); |
+ |
+#endif |
+#endif /* not kernel and not glibc */ |
+#endif /* _LINUX_SOCKET_H */ |
Index: linuxc26/include/linux/hugetlb.h |
=================================================================== |
--- linuxc26/include/linux/hugetlb.h (nonexistent) |
+++ linuxc26/include/linux/hugetlb.h (revision 422) |
@@ -0,0 +1,121 @@ |
+#ifndef _LINUX_HUGETLB_H |
+#define _LINUX_HUGETLB_H |
+ |
+#ifdef CONFIG_HUGETLB_PAGE |
+ |
+struct ctl_table; |
+ |
+static inline int is_vm_hugetlb_page(struct vm_area_struct *vma) |
+{ |
+ return vma->vm_flags & VM_HUGETLB; |
+} |
+ |
+int hugetlb_sysctl_handler(struct ctl_table *, int, struct file *, void *, size_t *); |
+int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *); |
+int follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *, struct page **, struct vm_area_struct **, unsigned long *, int *, int); |
+void zap_hugepage_range(struct vm_area_struct *, unsigned long, unsigned long); |
+void unmap_hugepage_range(struct vm_area_struct *, unsigned long, unsigned long); |
+int hugetlb_prefault(struct address_space *, struct vm_area_struct *); |
+void huge_page_release(struct page *); |
+int hugetlb_report_meminfo(char *); |
+int is_hugepage_mem_enough(size_t); |
+struct page *follow_huge_addr(struct mm_struct *mm, struct vm_area_struct *vma, |
+ unsigned long address, int write); |
+struct vm_area_struct *hugepage_vma(struct mm_struct *mm, |
+ unsigned long address); |
+struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, |
+ pmd_t *pmd, int write); |
+int is_aligned_hugepage_range(unsigned long addr, unsigned long len); |
+int pmd_huge(pmd_t pmd); |
+ |
+extern int htlbpage_max; |
+ |
+static inline void |
+mark_mm_hugetlb(struct mm_struct *mm, struct vm_area_struct *vma) |
+{ |
+ if (is_vm_hugetlb_page(vma)) |
+ mm->used_hugetlb = 1; |
+} |
+ |
+#ifndef ARCH_HAS_HUGEPAGE_ONLY_RANGE |
+#define is_hugepage_only_range(addr, len) 0 |
+#endif |
+ |
+#else /* !CONFIG_HUGETLB_PAGE */ |
+ |
+static inline int is_vm_hugetlb_page(struct vm_area_struct *vma) |
+{ |
+ return 0; |
+} |
+ |
+#define follow_hugetlb_page(m,v,p,vs,a,b,i) ({ BUG(); 0; }) |
+#define follow_huge_addr(mm, vma, addr, write) 0 |
+#define copy_hugetlb_page_range(src, dst, vma) ({ BUG(); 0; }) |
+#define hugetlb_prefault(mapping, vma) ({ BUG(); 0; }) |
+#define zap_hugepage_range(vma, start, len) BUG() |
+#define unmap_hugepage_range(vma, start, end) BUG() |
+#define huge_page_release(page) BUG() |
+#define is_hugepage_mem_enough(size) 0 |
+#define hugetlb_report_meminfo(buf) 0 |
+#define hugepage_vma(mm, addr) 0 |
+#define mark_mm_hugetlb(mm, vma) do { } while (0) |
+#define follow_huge_pmd(mm, addr, pmd, write) 0 |
+#define is_aligned_hugepage_range(addr, len) 0 |
+#define pmd_huge(x) 0 |
+#define is_hugepage_only_range(addr, len) 0 |
+ |
+#ifndef HPAGE_MASK |
+#define HPAGE_MASK 0 /* Keep the compiler happy */ |
+#define HPAGE_SIZE 0 |
+#endif |
+ |
+#endif /* !CONFIG_HUGETLB_PAGE */ |
+ |
+#ifdef CONFIG_HUGETLBFS |
+struct hugetlbfs_config { |
+ uid_t uid; |
+ gid_t gid; |
+ umode_t mode; |
+ long nr_blocks; |
+ long nr_inodes; |
+}; |
+ |
+struct hugetlbfs_sb_info { |
+ long max_blocks; /* blocks allowed */ |
+ long free_blocks; /* blocks free */ |
+ long max_inodes; /* inodes allowed */ |
+ long free_inodes; /* inodes free */ |
+ spinlock_t stat_lock; |
+}; |
+ |
+static inline struct hugetlbfs_sb_info *HUGETLBFS_SB(struct super_block *sb) |
+{ |
+ return sb->s_fs_info; |
+} |
+ |
+#define PSEUDO_DIRENT_SIZE 20 |
+ |
+extern struct file_operations hugetlbfs_file_operations; |
+extern struct vm_operations_struct hugetlb_vm_ops; |
+struct file *hugetlb_zero_setup(size_t); |
+int hugetlb_get_quota(struct address_space *mapping); |
+void hugetlb_put_quota(struct address_space *mapping); |
+ |
+static inline int is_file_hugepages(struct file *file) |
+{ |
+ return file->f_op == &hugetlbfs_file_operations; |
+} |
+ |
+static inline void set_file_hugepages(struct file *file) |
+{ |
+ file->f_op = &hugetlbfs_file_operations; |
+} |
+#else /* !CONFIG_HUGETLBFS */ |
+ |
+#define is_file_hugepages(file) 0 |
+#define set_file_hugepages(file) BUG() |
+#define hugetlb_zero_setup(size) ERR_PTR(-ENOSYS) |
+ |
+#endif /* !CONFIG_HUGETLBFS */ |
+ |
+#endif /* _LINUX_HUGETLB_H */ |
Index: linuxc26/include/linux/comstats.h |
=================================================================== |
--- linuxc26/include/linux/comstats.h (nonexistent) |
+++ linuxc26/include/linux/comstats.h (revision 422) |
@@ -0,0 +1,119 @@ |
+/*****************************************************************************/ |
+ |
+/* |
+ * comstats.h -- Serial Port Stats. |
+ * |
+ * Copyright (C) 1996-1998 Stallion Technologies (support@stallion.oz.au). |
+ * Copyright (C) 1994-1996 Greg Ungerer. |
+ * |
+ * 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 _COMSTATS_H |
+#define _COMSTATS_H |
+/*****************************************************************************/ |
+ |
+/* |
+ * Serial port stats structure. The structure itself is UART |
+ * independent, but some fields may be UART/driver specific (for |
+ * example state). |
+ */ |
+ |
+typedef struct { |
+ unsigned long brd; |
+ unsigned long panel; |
+ unsigned long port; |
+ unsigned long hwid; |
+ unsigned long type; |
+ unsigned long txtotal; |
+ unsigned long rxtotal; |
+ unsigned long txbuffered; |
+ unsigned long rxbuffered; |
+ unsigned long rxoverrun; |
+ unsigned long rxparity; |
+ unsigned long rxframing; |
+ unsigned long rxlost; |
+ unsigned long txbreaks; |
+ unsigned long rxbreaks; |
+ unsigned long txxon; |
+ unsigned long txxoff; |
+ unsigned long rxxon; |
+ unsigned long rxxoff; |
+ unsigned long txctson; |
+ unsigned long txctsoff; |
+ unsigned long rxrtson; |
+ unsigned long rxrtsoff; |
+ unsigned long modem; |
+ unsigned long state; |
+ unsigned long flags; |
+ unsigned long ttystate; |
+ unsigned long cflags; |
+ unsigned long iflags; |
+ unsigned long oflags; |
+ unsigned long lflags; |
+ unsigned long signals; |
+} comstats_t; |
+ |
+ |
+/* |
+ * Board stats structure. Returns useful info about the board. |
+ */ |
+ |
+#define COM_MAXPANELS 8 |
+ |
+typedef struct { |
+ unsigned long panel; |
+ unsigned long type; |
+ unsigned long hwid; |
+ unsigned long nrports; |
+} companel_t; |
+ |
+typedef struct { |
+ unsigned long brd; |
+ unsigned long type; |
+ unsigned long hwid; |
+ unsigned long state; |
+ unsigned long ioaddr; |
+ unsigned long ioaddr2; |
+ unsigned long memaddr; |
+ unsigned long irq; |
+ unsigned long nrpanels; |
+ unsigned long nrports; |
+ companel_t panels[COM_MAXPANELS]; |
+} combrd_t; |
+ |
+ |
+/* |
+ * Define the ioctl operations for stats stuff. |
+ */ |
+#include <linux/ioctl.h> |
+ |
+#define COM_GETPORTSTATS _IO('c',30) |
+#define COM_CLRPORTSTATS _IO('c',31) |
+#define COM_GETBRDSTATS _IO('c',32) |
+ |
+ |
+/* |
+ * Define the set of ioctls that give user level access to the |
+ * private port, panel and board structures. The argument required |
+ * will be driver dependent! |
+ */ |
+#define COM_READPORT _IO('c',40) |
+#define COM_READBOARD _IO('c',41) |
+#define COM_READPANEL _IO('c',42) |
+ |
+/*****************************************************************************/ |
+#endif |
Index: linuxc26/include/linux/rwsem.h |
=================================================================== |
--- linuxc26/include/linux/rwsem.h (nonexistent) |
+++ linuxc26/include/linux/rwsem.h (revision 422) |
@@ -0,0 +1,115 @@ |
+/* rwsem.h: R/W semaphores, public interface |
+ * |
+ * Written by David Howells (dhowells@redhat.com). |
+ * Derived from asm-i386/semaphore.h |
+ */ |
+ |
+#ifndef _LINUX_RWSEM_H |
+#define _LINUX_RWSEM_H |
+ |
+#include <linux/linkage.h> |
+ |
+#define RWSEM_DEBUG 0 |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/config.h> |
+#include <linux/types.h> |
+#include <linux/kernel.h> |
+#include <asm/system.h> |
+#include <asm/atomic.h> |
+ |
+struct rw_semaphore; |
+ |
+#ifdef CONFIG_RWSEM_GENERIC_SPINLOCK |
+#include <linux/rwsem-spinlock.h> /* use a generic implementation */ |
+#else |
+#include <asm/rwsem.h> /* use an arch-specific implementation */ |
+#endif |
+ |
+#ifndef rwsemtrace |
+#if RWSEM_DEBUG |
+extern void FASTCALL(rwsemtrace(struct rw_semaphore *sem, const char *str)); |
+#else |
+#define rwsemtrace(SEM,FMT) |
+#endif |
+#endif |
+ |
+/* |
+ * lock for reading |
+ */ |
+static inline void down_read(struct rw_semaphore *sem) |
+{ |
+ might_sleep(); |
+ rwsemtrace(sem,"Entering down_read"); |
+ __down_read(sem); |
+ rwsemtrace(sem,"Leaving down_read"); |
+} |
+ |
+/* |
+ * trylock for reading -- returns 1 if successful, 0 if contention |
+ */ |
+static inline int down_read_trylock(struct rw_semaphore *sem) |
+{ |
+ int ret; |
+ rwsemtrace(sem,"Entering down_read_trylock"); |
+ ret = __down_read_trylock(sem); |
+ rwsemtrace(sem,"Leaving down_read_trylock"); |
+ return ret; |
+} |
+ |
+/* |
+ * lock for writing |
+ */ |
+static inline void down_write(struct rw_semaphore *sem) |
+{ |
+ might_sleep(); |
+ rwsemtrace(sem,"Entering down_write"); |
+ __down_write(sem); |
+ rwsemtrace(sem,"Leaving down_write"); |
+} |
+ |
+/* |
+ * trylock for writing -- returns 1 if successful, 0 if contention |
+ */ |
+static inline int down_write_trylock(struct rw_semaphore *sem) |
+{ |
+ int ret; |
+ rwsemtrace(sem,"Entering down_write_trylock"); |
+ ret = __down_write_trylock(sem); |
+ rwsemtrace(sem,"Leaving down_write_trylock"); |
+ return ret; |
+} |
+ |
+/* |
+ * release a read lock |
+ */ |
+static inline void up_read(struct rw_semaphore *sem) |
+{ |
+ rwsemtrace(sem,"Entering up_read"); |
+ __up_read(sem); |
+ rwsemtrace(sem,"Leaving up_read"); |
+} |
+ |
+/* |
+ * release a write lock |
+ */ |
+static inline void up_write(struct rw_semaphore *sem) |
+{ |
+ rwsemtrace(sem,"Entering up_write"); |
+ __up_write(sem); |
+ rwsemtrace(sem,"Leaving up_write"); |
+} |
+ |
+/* |
+ * downgrade write lock to read lock |
+ */ |
+static inline void downgrade_write(struct rw_semaphore *sem) |
+{ |
+ rwsemtrace(sem,"Entering downgrade_write"); |
+ __downgrade_write(sem); |
+ rwsemtrace(sem,"Leaving downgrade_write"); |
+} |
+ |
+#endif /* __KERNEL__ */ |
+#endif /* _LINUX_RWSEM_H */ |
Index: linuxc26/include/linux/hpfs_fs_i.h |
=================================================================== |
--- linuxc26/include/linux/hpfs_fs_i.h (nonexistent) |
+++ linuxc26/include/linux/hpfs_fs_i.h (revision 422) |
@@ -0,0 +1,24 @@ |
+#ifndef _HPFS_FS_I |
+#define _HPFS_FS_I |
+ |
+struct hpfs_inode_info { |
+ loff_t mmu_private; |
+ ino_t i_parent_dir; /* (directories) gives fnode of parent dir */ |
+ unsigned i_dno; /* (directories) root dnode */ |
+ unsigned i_dpos; /* (directories) temp for readdir */ |
+ unsigned i_dsubdno; /* (directories) temp for readdir */ |
+ unsigned i_file_sec; /* (files) minimalist cache of alloc info */ |
+ unsigned i_disk_sec; /* (files) minimalist cache of alloc info */ |
+ unsigned i_n_secs; /* (files) minimalist cache of alloc info */ |
+ unsigned i_ea_size; /* size of extended attributes */ |
+ unsigned i_conv : 2; /* (files) crlf->newline hackery */ |
+ unsigned i_ea_mode : 1; /* file's permission is stored in ea */ |
+ unsigned i_ea_uid : 1; /* file's uid is stored in ea */ |
+ unsigned i_ea_gid : 1; /* file's gid is stored in ea */ |
+ unsigned i_dirty : 1; |
+ struct semaphore i_sem; /* semaphore */ |
+ loff_t **i_rddir_off; |
+ struct inode vfs_inode; |
+}; |
+ |
+#endif |
Index: linuxc26/include/linux/limits.h |
=================================================================== |
--- linuxc26/include/linux/limits.h (nonexistent) |
+++ linuxc26/include/linux/limits.h (revision 422) |
@@ -0,0 +1,22 @@ |
+#ifndef _LINUX_LIMITS_H |
+#define _LINUX_LIMITS_H |
+ |
+#define NR_OPEN 1024 |
+ |
+#define NGROUPS_MAX 32 /* supplemental group IDs are available */ |
+#define ARG_MAX 131072 /* # bytes of args + environ for exec() */ |
+#define CHILD_MAX 999 /* no limit :-) */ |
+#define OPEN_MAX 256 /* # open files a process may have */ |
+#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 |
Index: linuxc26/include/linux/cdrom.h |
=================================================================== |
--- linuxc26/include/linux/cdrom.h (nonexistent) |
+++ linuxc26/include/linux/cdrom.h (revision 422) |
@@ -0,0 +1,1037 @@ |
+/* |
+ * -- <linux/cdrom.h> |
+ * General header file for linux CD-ROM drivers |
+ * Copyright (C) 1992 David Giller, rafetmad@oxy.edu |
+ * 1994, 1995 Eberhard Moenkeberg, emoenke@gwdg.de |
+ * 1996 David van Leeuwen, david@tm.tno.nl |
+ * 1997, 1998 Erik Andersen, andersee@debian.org |
+ * 1998-2000 Jens Axboe, axboe@suse.de |
+ */ |
+ |
+#ifndef _LINUX_CDROM_H |
+#define _LINUX_CDROM_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 depricated, |
+ 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 *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 *buffer; |
+ unsigned int buflen; |
+ int stat; |
+ struct request_sense *sense; |
+ unsigned char data_direction; |
+ int quiet; |
+ int timeout; |
+ void *reserved[1]; |
+}; |
+ |
+ |
+/* |
+ * 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_IOCTLS 0x400 /* driver has non-standard ioctls */ |
+#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 */ |
+ |
+/* 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) (~0U>>1)-1) |
+#define CDSL_CURRENT ((int) (~0U>>1)) |
+ |
+/* 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_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_SCAN 0xba |
+#define GPCMD_SEEK 0x2b |
+#define GPCMD_SEND_DVD_STRUCTURE 0xad |
+#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_AND_VERIFY_10 0x2e |
+/* 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_R_W_ERROR_PAGE 0x01 |
+#define GPMODE_WRITE_PARMS_PAGE 0x05 |
+#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 -- depricated 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]; |
+}; |
+ |
+#ifdef __KERNEL__ |
+#include <linux/fs.h> /* not really needed, later.. */ |
+#include <linux/device.h> |
+ |
+struct cdrom_write_settings { |
+ unsigned char fpacket; /* fixed/variable packets */ |
+ unsigned long packet_size; /* write out this number of packets */ |
+ unsigned long nwa; /* next writeable address */ |
+ unsigned char writeable; /* cdrom is writeable */ |
+}; |
+ |
+/* Uniform cdrom data structures for cdrom.c */ |
+struct cdrom_device_info { |
+ struct cdrom_device_ops *ops; /* link to device_ops */ |
+ struct cdrom_device_info *next; /* next device_info for this major */ |
+ void *handle; /* driver-dependent data */ |
+/* specifications */ |
+ int mask; /* mask of capability: disables them */ |
+ int speed; /* maximum speed for reading data */ |
+ int capacity; /* number of discs in jukebox */ |
+/* device-related storage */ |
+ int options : 30; /* options flags */ |
+ unsigned mc_flags : 2; /* media change buffer flags */ |
+ int use_count; /* number of times device opened */ |
+ char name[20]; /* name of the device type */ |
+/* per-device flags */ |
+ __u8 sanyo_slot : 2; /* Sanyo 3 CD changer support */ |
+ __u8 reserved : 6; /* not used yet */ |
+ struct cdrom_write_settings write; |
+}; |
+ |
+struct cdrom_device_ops { |
+/* routines */ |
+ int (*open) (struct cdrom_device_info *, int); |
+ void (*release) (struct cdrom_device_info *); |
+ int (*drive_status) (struct cdrom_device_info *, int); |
+ int (*media_changed) (struct cdrom_device_info *, int); |
+ int (*tray_move) (struct cdrom_device_info *, int); |
+ int (*lock_door) (struct cdrom_device_info *, int); |
+ int (*select_speed) (struct cdrom_device_info *, int); |
+ int (*select_disc) (struct cdrom_device_info *, int); |
+ int (*get_last_session) (struct cdrom_device_info *, |
+ struct cdrom_multisession *); |
+ int (*get_mcn) (struct cdrom_device_info *, |
+ struct cdrom_mcn *); |
+ /* hard reset device */ |
+ int (*reset) (struct cdrom_device_info *); |
+ /* play stuff */ |
+ int (*audio_ioctl) (struct cdrom_device_info *,unsigned int, void *); |
+ /* dev-specific */ |
+ int (*dev_ioctl) (struct cdrom_device_info *, |
+ unsigned int, unsigned long); |
+/* driver specifications */ |
+ const int capability; /* capability flags */ |
+ int n_minors; /* number of active minor devices */ |
+ /* handle uniform packets for scsi type devices (scsi,atapi) */ |
+ int (*generic_packet) (struct cdrom_device_info *, |
+ struct cdrom_generic_command *); |
+}; |
+ |
+/* the general block_device operations structure: */ |
+extern int cdrom_open(struct cdrom_device_info *, struct inode *, struct file *); |
+extern int cdrom_release(struct cdrom_device_info *, struct file *); |
+extern int cdrom_ioctl(struct cdrom_device_info *, struct inode *, unsigned, unsigned long); |
+extern int cdrom_media_changed(struct cdrom_device_info *); |
+ |
+extern int register_cdrom(struct cdrom_device_info *cdi); |
+extern int unregister_cdrom(struct cdrom_device_info *cdi); |
+ |
+typedef struct { |
+ int data; |
+ int audio; |
+ int cdi; |
+ int xa; |
+ long error; |
+} tracktype; |
+ |
+extern int cdrom_get_last_written(struct cdrom_device_info *cdi, long *last_written); |
+extern int cdrom_number_of_slots(struct cdrom_device_info *cdi); |
+extern int cdrom_mode_select(struct cdrom_device_info *cdi, |
+ struct cdrom_generic_command *cgc); |
+extern int cdrom_mode_sense(struct cdrom_device_info *cdi, |
+ struct cdrom_generic_command *cgc, |
+ int page_code, int page_control); |
+extern void init_cdrom_command(struct cdrom_generic_command *cgc, |
+ void *buffer, int len, int type); |
+ |
+typedef struct { |
+ __u16 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 : 5; |
+#elif defined(__LITTLE_ENDIAN_BITFIELD) |
+ __u8 reserved2 : 5; |
+ __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 { |
+ __u16 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 |
+ __u32 track_start; |
+ __u32 next_writable; |
+ __u32 free_blocks; |
+ __u32 fixed_packet_size; |
+ __u32 track_size; |
+ __u32 last_rec_address; |
+} track_information; |
+ |
+/* The SCSI spec says there could be 256 slots. */ |
+#define CDROM_MAX_SLOTS 256 |
+ |
+struct cdrom_mechstat_header { |
+#if defined(__BIG_ENDIAN_BITFIELD) |
+ __u8 fault : 1; |
+ __u8 changer_state : 2; |
+ __u8 curslot : 5; |
+ __u8 mech_state : 3; |
+ __u8 door_open : 1; |
+ __u8 reserved1 : 4; |
+#elif defined(__LITTLE_ENDIAN_BITFIELD) |
+ __u8 curslot : 5; |
+ __u8 changer_state : 2; |
+ __u8 fault : 1; |
+ __u8 reserved1 : 4; |
+ __u8 door_open : 1; |
+ __u8 mech_state : 3; |
+#endif |
+ __u8 curlba[3]; |
+ __u8 nslots; |
+ __u16 slot_tablelen; |
+}; |
+ |
+struct cdrom_slot { |
+#if defined(__BIG_ENDIAN_BITFIELD) |
+ __u8 disc_present : 1; |
+ __u8 reserved1 : 6; |
+ __u8 change : 1; |
+#elif defined(__LITTLE_ENDIAN_BITFIELD) |
+ __u8 change : 1; |
+ __u8 reserved1 : 6; |
+ __u8 disc_present : 1; |
+#endif |
+ __u8 reserved2[3]; |
+}; |
+ |
+struct cdrom_changer_info { |
+ struct cdrom_mechstat_header hdr; |
+ struct cdrom_slot slots[CDROM_MAX_SLOTS]; |
+}; |
+ |
+typedef enum { |
+ mechtype_caddy = 0, |
+ mechtype_tray = 1, |
+ mechtype_popup = 2, |
+ mechtype_individual_changer = 4, |
+ mechtype_cartridge_changer = 5 |
+} mechtype_t; |
+ |
+struct mode_page_header { |
+ __u16 mode_data_length; |
+ __u8 medium_type; |
+ __u8 reserved1; |
+ __u8 reserved2; |
+ __u8 reserved3; |
+ __u16 desc_length; |
+}; |
+ |
+typedef struct { |
+#if defined(__BIG_ENDIAN_BITFIELD) |
+ __u8 ps : 1; |
+ __u8 reserved1 : 1; |
+ __u8 page_code : 6; |
+ __u8 page_length; |
+ __u8 reserved2 : 1; |
+ __u8 bufe : 1; |
+ __u8 ls_v : 1; |
+ __u8 test_write : 1; |
+ __u8 write_type : 4; |
+ __u8 multi_session : 2; /* or border, DVD */ |
+ __u8 fp : 1; |
+ __u8 copy : 1; |
+ __u8 track_mode : 4; |
+ __u8 reserved3 : 4; |
+ __u8 data_block_type : 4; |
+#elif defined(__LITTLE_ENDIAN_BITFIELD) |
+ __u8 page_code : 6; |
+ __u8 reserved1 : 1; |
+ __u8 ps : 1; |
+ __u8 page_length; |
+ __u8 write_type : 4; |
+ __u8 test_write : 1; |
+ __u8 ls_v : 1; |
+ __u8 bufe : 1; |
+ __u8 reserved2 : 1; |
+ __u8 track_mode : 4; |
+ __u8 copy : 1; |
+ __u8 fp : 1; |
+ __u8 multi_session : 2; /* or border, DVD */ |
+ __u8 data_block_type : 4; |
+ __u8 reserved3 : 4; |
+#endif |
+ __u8 link_size; |
+ __u8 reserved4; |
+#if defined(__BIG_ENDIAN_BITFIELD) |
+ __u8 reserved5 : 2; |
+ __u8 app_code : 6; |
+#elif defined(__LITTLE_ENDIAN_BITFIELD) |
+ __u8 app_code : 6; |
+ __u8 reserved5 : 2; |
+#endif |
+ __u8 session_format; |
+ __u8 reserved6; |
+ __u32 packet_size; |
+ __u16 audio_pause; |
+ __u8 mcn[16]; |
+ __u8 isrc[16]; |
+ __u8 subhdr0; |
+ __u8 subhdr1; |
+ __u8 subhdr2; |
+ __u8 subhdr3; |
+} __attribute__((packed)) write_param_page; |
+ |
+struct modesel_head |
+{ |
+ __u8 reserved1; |
+ __u8 medium; |
+ __u8 reserved2; |
+ __u8 block_desc_length; |
+ __u8 density; |
+ __u8 number_of_blocks_hi; |
+ __u8 number_of_blocks_med; |
+ __u8 number_of_blocks_lo; |
+ __u8 reserved3; |
+ __u8 block_length_hi; |
+ __u8 block_length_med; |
+ __u8 block_length_lo; |
+}; |
+ |
+typedef struct { |
+ __u16 report_key_length; |
+ __u8 reserved1; |
+ __u8 reserved2; |
+#if defined(__BIG_ENDIAN_BITFIELD) |
+ __u8 type_code : 2; |
+ __u8 vra : 3; |
+ __u8 ucca : 3; |
+#elif defined(__LITTLE_ENDIAN_BITFIELD) |
+ __u8 ucca : 3; |
+ __u8 vra : 3; |
+ __u8 type_code : 2; |
+#endif |
+ __u8 region_mask; |
+ __u8 rpc_scheme; |
+ __u8 reserved3; |
+} rpc_state_t; |
+ |
+#endif /* End of kernel only stuff */ |
+ |
+#endif /* _LINUX_CDROM_H */ |
Index: linuxc26/include/linux/coda.h |
=================================================================== |
--- linuxc26/include/linux/coda.h (nonexistent) |
+++ linuxc26/include/linux/coda.h (revision 422) |
@@ -0,0 +1,787 @@ |
+/* |
+ 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 _CODA_HEADER_ |
+#define _CODA_HEADER_ |
+ |
+#include <linux/config.h> |
+ |
+/* 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 |
+#else /*__KERNEL__ */ |
+typedef unsigned long long u_quad_t; |
+#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_ */ |
+ |
+#ifdef CODA_FS_OLD_API |
+struct CodaFid { |
+ u_int32_t opaque[3]; |
+}; |
+ |
+static __inline__ ino_t coda_f2i(struct CodaFid *fid) |
+{ |
+ if ( ! fid ) |
+ return 0; |
+ if (fid->opaque[1] == 0xfffffffe || fid->opaque[1] == 0xffffffff) |
+ return ((fid->opaque[0] << 20) | (fid->opaque[2] & 0xfffff)); |
+ else |
+ return (fid->opaque[2] + (fid->opaque[1]<<10) + (fid->opaque[0]<<20)); |
+} |
+ |
+struct coda_cred { |
+ vuid_t cr_uid, cr_euid, cr_suid, cr_fsuid; /* Real, efftve, set, fs uid*/ |
+ vgid_t cr_groupid, cr_egid, cr_sgid, cr_fsgid; /* same for groups */ |
+}; |
+ |
+#else /* not defined(CODA_FS_OLD_API) */ |
+ |
+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) |
+ |
+#endif |
+ |
+#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) |
+ |
+#if 0 |
+#define CODA_KERNEL_VERSION 0 /* don't care about kernel version number */ |
+#define CODA_KERNEL_VERSION 1 /* The old venus 4.6 compatible interface */ |
+#endif |
+#ifdef CODA_FS_OLD_API |
+#define CODA_KERNEL_VERSION 2 /* venus_lookup got an extra parameter */ |
+#else |
+#define CODA_KERNEL_VERSION 3 /* 128-bit file identifiers */ |
+#endif |
+ |
+/* |
+ * Venus <-> Coda RPC arguments |
+ */ |
+struct coda_in_hdr { |
+ u_int32_t opcode; |
+ u_int32_t unique; /* Keep multiple outstanding msgs distinct */ |
+#ifdef CODA_FS_OLD_API |
+ u_int16_t pid; /* Common to all */ |
+ u_int16_t pgid; /* Common to all */ |
+ u_int16_t sid; /* Common to all */ |
+ struct coda_cred cred; /* Common to all */ |
+#else |
+ pid_t pid; |
+ pid_t pgid; |
+ vuid_t uid; |
+#endif |
+}; |
+ |
+/* 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; |
+#ifdef CODA_FS_OLD_API |
+ struct coda_cred cred; |
+#else |
+ vuid_t uid; |
+#endif |
+}; |
+ |
+/* 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 { |
+ caddr_t in, out; /* Data to be transferred in, or out */ |
+ short in_size; /* Size of input buffer <= 2K */ |
+ short out_size; /* Maximum size of output buffer, <= 2K */ |
+}; |
+ |
+struct PioctlData { |
+ const char *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 |
+ |
Index: linuxc26/include/linux/rcupdate.h |
=================================================================== |
--- linuxc26/include/linux/rcupdate.h (nonexistent) |
+++ linuxc26/include/linux/rcupdate.h (revision 422) |
@@ -0,0 +1,136 @@ |
+/* |
+ * Read-Copy Update mechanism for mutual exclusion |
+ * |
+ * 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. |
+ * |
+ * Copyright (C) IBM Corporation, 2001 |
+ * |
+ * Author: Dipankar Sarma <dipankar@in.ibm.com> |
+ * |
+ * Based on the original work by Paul McKenney <paul.mckenney@us.ibm.com> |
+ * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. |
+ * Papers: |
+ * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf |
+ * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) |
+ * |
+ * For detailed explanation of Read-Copy Update mechanism see - |
+ * http://lse.sourceforge.net/locking/rcupdate.html |
+ * |
+ */ |
+ |
+#ifndef __LINUX_RCUPDATE_H |
+#define __LINUX_RCUPDATE_H |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/cache.h> |
+#include <linux/list.h> |
+#include <linux/spinlock.h> |
+#include <linux/threads.h> |
+#include <linux/percpu.h> |
+#include <linux/cpumask.h> |
+ |
+/** |
+ * struct rcu_head - callback structure for use with RCU |
+ * @list: list_head to queue the update requests |
+ * @func: actual update function to call after the grace period. |
+ * @arg: argument to be passed to the actual update function. |
+ */ |
+struct rcu_head { |
+ struct list_head list; |
+ void (*func)(void *obj); |
+ void *arg; |
+}; |
+ |
+#define RCU_HEAD_INIT(head) \ |
+ { list: LIST_HEAD_INIT(head.list), func: NULL, arg: NULL } |
+#define RCU_HEAD(head) struct rcu_head head = RCU_HEAD_INIT(head) |
+#define INIT_RCU_HEAD(ptr) do { \ |
+ INIT_LIST_HEAD(&(ptr)->list); (ptr)->func = NULL; (ptr)->arg = NULL; \ |
+} while (0) |
+ |
+ |
+ |
+/* Control variables for rcupdate callback mechanism. */ |
+struct rcu_ctrlblk { |
+ spinlock_t mutex; /* Guard this struct */ |
+ long curbatch; /* Current batch number. */ |
+ long maxbatch; /* Max requested batch number. */ |
+ cpumask_t rcu_cpu_mask; /* CPUs that need to switch in order */ |
+ /* for current batch to proceed. */ |
+}; |
+ |
+/* Is batch a before batch b ? */ |
+static inline int rcu_batch_before(long a, long b) |
+{ |
+ return (a - b) < 0; |
+} |
+ |
+/* Is batch a after batch b ? */ |
+static inline int rcu_batch_after(long a, long b) |
+{ |
+ return (a - b) > 0; |
+} |
+ |
+/* |
+ * Per-CPU data for Read-Copy UPdate. |
+ * nxtlist - new callbacks are added here |
+ * curlist - current batch for which quiescent cycle started if any |
+ */ |
+struct rcu_data { |
+ long qsctr; /* User-mode/idle loop etc. */ |
+ long last_qsctr; /* value of qsctr at beginning */ |
+ /* of rcu grace period */ |
+ long batch; /* Batch # for current RCU batch */ |
+ struct list_head nxtlist; |
+ struct list_head curlist; |
+}; |
+ |
+DECLARE_PER_CPU(struct rcu_data, rcu_data); |
+extern struct rcu_ctrlblk rcu_ctrlblk; |
+ |
+#define RCU_qsctr(cpu) (per_cpu(rcu_data, (cpu)).qsctr) |
+#define RCU_last_qsctr(cpu) (per_cpu(rcu_data, (cpu)).last_qsctr) |
+#define RCU_batch(cpu) (per_cpu(rcu_data, (cpu)).batch) |
+#define RCU_nxtlist(cpu) (per_cpu(rcu_data, (cpu)).nxtlist) |
+#define RCU_curlist(cpu) (per_cpu(rcu_data, (cpu)).curlist) |
+ |
+#define RCU_QSCTR_INVALID 0 |
+ |
+static inline int rcu_pending(int cpu) |
+{ |
+ if ((!list_empty(&RCU_curlist(cpu)) && |
+ rcu_batch_before(RCU_batch(cpu), rcu_ctrlblk.curbatch)) || |
+ (list_empty(&RCU_curlist(cpu)) && |
+ !list_empty(&RCU_nxtlist(cpu))) || |
+ cpu_isset(cpu, rcu_ctrlblk.rcu_cpu_mask)) |
+ return 1; |
+ else |
+ return 0; |
+} |
+ |
+#define rcu_read_lock() preempt_disable() |
+#define rcu_read_unlock() preempt_enable() |
+ |
+extern void rcu_init(void); |
+extern void rcu_check_callbacks(int cpu, int user); |
+ |
+/* Exported interfaces */ |
+extern void FASTCALL(call_rcu(struct rcu_head *head, |
+ void (*func)(void *arg), void *arg)); |
+extern void synchronize_kernel(void); |
+ |
+#endif /* __KERNEL__ */ |
+#endif /* __LINUX_RCUPDATE_H */ |
Index: linuxc26/include/linux/journal-head.h |
=================================================================== |
--- linuxc26/include/linux/journal-head.h (nonexistent) |
+++ linuxc26/include/linux/journal-head.h (revision 422) |
@@ -0,0 +1,85 @@ |
+/* |
+ * include/linux/journal-head.h |
+ * |
+ * buffer_head fields for JBD |
+ * |
+ * 27 May 2001 Andrew Morton <akpm@digeo.com> |
+ * Created - pulled out of fs.h |
+ */ |
+ |
+#ifndef JOURNAL_HEAD_H_INCLUDED |
+#define JOURNAL_HEAD_H_INCLUDED |
+ |
+typedef unsigned int tid_t; /* Unique transaction ID */ |
+typedef struct transaction_s transaction_t; /* Compound transaction type */ |
+struct buffer_head; |
+ |
+struct journal_head { |
+ /* |
+ * Points back to our buffer_head. [jbd_lock_bh_journal_head()] |
+ */ |
+ struct buffer_head *b_bh; |
+ |
+ /* |
+ * Reference count - see description in journal.c |
+ * [jbd_lock_bh_journal_head()] |
+ */ |
+ int b_jcount; |
+ |
+ /* |
+ * Journalling list for this buffer [jbd_lock_bh_state()] |
+ */ |
+ unsigned b_jlist; |
+ |
+ /* |
+ * Copy of the buffer data frozen for writing to the log. |
+ * [jbd_lock_bh_state()] |
+ */ |
+ char *b_frozen_data; |
+ |
+ /* |
+ * Pointer to a saved copy of the buffer containing no uncommitted |
+ * deallocation references, so that allocations can avoid overwriting |
+ * uncommitted deletes. [jbd_lock_bh_state()] |
+ */ |
+ char *b_committed_data; |
+ |
+ /* |
+ * Pointer to the compound transaction which owns this buffer's |
+ * metadata: either the running transaction or the committing |
+ * transaction (if there is one). Only applies to buffers on a |
+ * transaction's data or metadata journaling list. |
+ * [j_list_lock] [jbd_lock_bh_state()] |
+ */ |
+ transaction_t *b_transaction; |
+ |
+ /* |
+ * Pointer to the running compound transaction which is currently |
+ * modifying the buffer's metadata, if there was already a transaction |
+ * committing it when the new transaction touched it. |
+ * [t_list_lock] [jbd_lock_bh_state()] |
+ */ |
+ transaction_t *b_next_transaction; |
+ |
+ /* |
+ * Doubly-linked list of buffers on a transaction's data, metadata or |
+ * forget queue. [t_list_lock] [jbd_lock_bh_state()] |
+ */ |
+ struct journal_head *b_tnext, *b_tprev; |
+ |
+ /* |
+ * Pointer to the compound transaction against which this buffer |
+ * is checkpointed. Only dirty buffers can be checkpointed. |
+ * [j_list_lock] |
+ */ |
+ transaction_t *b_cp_transaction; |
+ |
+ /* |
+ * Doubly-linked list of buffers still remaining to be flushed |
+ * before an old transaction can be checkpointed. |
+ * [j_list_lock] |
+ */ |
+ struct journal_head *b_cpnext, *b_cpprev; |
+}; |
+ |
+#endif /* JOURNAL_HEAD_H_INCLUDED */ |
Index: linuxc26/include/linux/backing-dev.h |
=================================================================== |
--- linuxc26/include/linux/backing-dev.h (nonexistent) |
+++ linuxc26/include/linux/backing-dev.h (revision 422) |
@@ -0,0 +1,45 @@ |
+/* |
+ * include/linux/backing-dev.h |
+ * |
+ * low-level device information and state which is propagated up through |
+ * to high-level code. |
+ */ |
+ |
+#ifndef _LINUX_BACKING_DEV_H |
+#define _LINUX_BACKING_DEV_H |
+ |
+#include <asm/atomic.h> |
+ |
+/* |
+ * Bits in backing_dev_info.state |
+ */ |
+enum bdi_state { |
+ BDI_pdflush, /* A pdflush thread is working this device */ |
+ BDI_write_congested, /* The write queue is getting full */ |
+ BDI_read_congested, /* The read queue is getting full */ |
+ BDI_unused, /* Available bits start here */ |
+}; |
+ |
+struct backing_dev_info { |
+ unsigned long ra_pages; /* max readahead in PAGE_CACHE_SIZE units */ |
+ unsigned long state; /* Always use atomic bitops on this */ |
+ int memory_backed; /* Cannot clean pages with writepage */ |
+}; |
+ |
+extern struct backing_dev_info default_backing_dev_info; |
+ |
+int writeback_acquire(struct backing_dev_info *bdi); |
+int writeback_in_progress(struct backing_dev_info *bdi); |
+void writeback_release(struct backing_dev_info *bdi); |
+ |
+static inline int bdi_read_congested(struct backing_dev_info *bdi) |
+{ |
+ return test_bit(BDI_read_congested, &bdi->state); |
+} |
+ |
+static inline int bdi_write_congested(struct backing_dev_info *bdi) |
+{ |
+ return test_bit(BDI_write_congested, &bdi->state); |
+} |
+ |
+#endif /* _LINUX_BACKING_DEV_H */ |
Index: linuxc26/include/linux/in_route.h |
=================================================================== |
--- linuxc26/include/linux/in_route.h (nonexistent) |
+++ linuxc26/include/linux/in_route.h (revision 422) |
@@ -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 |
+#define RTCF_REDIRECTED 0x00040000 |
+#define RTCF_TPROXY 0x00080000 |
+ |
+#define RTCF_FAST 0x00200000 |
+#define RTCF_MASQ 0x00400000 |
+#define RTCF_SNAT 0x00800000 |
+#define RTCF_DOREDIRECT 0x01000000 |
+#define RTCF_DIRECTSRC 0x04000000 |
+#define RTCF_DNAT 0x08000000 |
+#define RTCF_BROADCAST 0x10000000 |
+#define RTCF_MULTICAST 0x20000000 |
+#define RTCF_REJECT 0x40000000 |
+#define RTCF_LOCAL 0x80000000 |
+ |
+#define RTCF_NAT (RTCF_DNAT|RTCF_SNAT) |
+ |
+#define RT_TOS(tos) ((tos)&IPTOS_TOS_MASK) |
+ |
+#endif /* _LINUX_IN_ROUTE_H */ |
Index: linuxc26/include/linux/dirent.h |
=================================================================== |
--- linuxc26/include/linux/dirent.h (nonexistent) |
+++ linuxc26/include/linux/dirent.h (revision 422) |
@@ -0,0 +1,32 @@ |
+#ifndef _LINUX_DIRENT_H |
+#define _LINUX_DIRENT_H |
+ |
+struct dirent { |
+ long d_ino; |
+ __kernel_off_t d_off; |
+ unsigned short d_reclen; |
+ char d_name[256]; /* We must not include limits.h! */ |
+}; |
+ |
+struct dirent64 { |
+ __u64 d_ino; |
+ __s64 d_off; |
+ unsigned short d_reclen; |
+ unsigned char d_type; |
+ char d_name[256]; |
+}; |
+ |
+#ifdef __KERNEL__ |
+ |
+struct linux_dirent64 { |
+ u64 d_ino; |
+ s64 d_off; |
+ unsigned short d_reclen; |
+ unsigned char d_type; |
+ char d_name[0]; |
+}; |
+ |
+#endif /* __KERNEL__ */ |
+ |
+ |
+#endif |
Index: linuxc26/include/linux/flat.h |
=================================================================== |
--- linuxc26/include/linux/flat.h (nonexistent) |
+++ linuxc26/include/linux/flat.h (revision 422) |
@@ -0,0 +1,100 @@ |
+/* |
+ * 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 _LINUX_FLAT_H |
+#define _LINUX_FLAT_H |
+ |
+#ifdef __KERNEL__ |
+#include <asm/flat.h> |
+#endif |
+ |
+#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 */ |
+ |
+ |
+#ifdef __KERNEL__ /* so systems without linux headers can compile the apps */ |
+/* |
+ * While it would be nice to keep this header clean, users of older |
+ * tools still need this support in the kernel. So this section is |
+ * purely for compatibility with old tool chains. |
+ * |
+ * DO NOT make changes or enhancements to the old format please, just work |
+ * with the format above, except to fix bugs with old format support. |
+ */ |
+ |
+#include <asm/byteorder.h> |
+ |
+#define OLD_FLAT_VERSION 0x00000002L |
+#define OLD_FLAT_RELOC_TYPE_TEXT 0 |
+#define OLD_FLAT_RELOC_TYPE_DATA 1 |
+#define OLD_FLAT_RELOC_TYPE_BSS 2 |
+ |
+typedef union { |
+ unsigned long value; |
+ struct { |
+# if defined(mc68000) && !defined(CONFIG_COLDFIRE) |
+ signed long offset : 30; |
+ unsigned long type : 2; |
+# define OLD_FLAT_FLAG_RAM 0x1 /* load program entirely into RAM */ |
+# elif defined(__BIG_ENDIAN_BITFIELD) |
+ unsigned long type : 2; |
+ signed long offset : 30; |
+# define OLD_FLAT_FLAG_RAM 0x1 /* load program entirely into RAM */ |
+# elif defined(__LITTLE_ENDIAN_BITFIELD) |
+ signed long offset : 30; |
+ unsigned long type : 2; |
+# define OLD_FLAT_FLAG_RAM 0x1 /* load program entirely into RAM */ |
+# else |
+# error "Unknown bitfield order for flat files." |
+# endif |
+ } reloc; |
+} flat_v2_reloc_t; |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* _LINUX_FLAT_H */ |
Index: linuxc26/include/linux/ppp_channel.h |
=================================================================== |
--- linuxc26/include/linux/ppp_channel.h (nonexistent) |
+++ linuxc26/include/linux/ppp_channel.h (revision 422) |
@@ -0,0 +1,81 @@ |
+#ifndef _PPP_CHANNEL_H_ |
+#define _PPP_CHANNEL_H_ |
+/* |
+ * Definitions for the interface between the generic PPP code |
+ * and a PPP channel. |
+ * |
+ * A PPP channel provides a way for the generic PPP code to send |
+ * and receive packets over some sort of communications medium. |
+ * Packets are stored in sk_buffs and have the 2-byte PPP protocol |
+ * number at the start, but not the address and control bytes. |
+ * |
+ * Copyright 1999 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. |
+ * |
+ * ==FILEVERSION 20000322== |
+ */ |
+ |
+#include <linux/list.h> |
+#include <linux/skbuff.h> |
+#include <linux/poll.h> |
+ |
+struct ppp_channel; |
+ |
+struct ppp_channel_ops { |
+ /* Send a packet (or multilink fragment) on this channel. |
+ Returns 1 if it was accepted, 0 if not. */ |
+ int (*start_xmit)(struct ppp_channel *, struct sk_buff *); |
+ /* Handle an ioctl call that has come in via /dev/ppp. */ |
+ int (*ioctl)(struct ppp_channel *, unsigned int, unsigned long); |
+}; |
+ |
+struct ppp_channel { |
+ void *private; /* channel private data */ |
+ struct ppp_channel_ops *ops; /* operations for this channel */ |
+ int mtu; /* max transmit packet size */ |
+ int hdrlen; /* amount of headroom channel needs */ |
+ void *ppp; /* opaque to channel */ |
+ /* the following are not used at present */ |
+ int speed; /* transfer rate (bytes/second) */ |
+ int latency; /* overhead time in milliseconds */ |
+}; |
+ |
+#ifdef __KERNEL__ |
+/* Called by the channel when it can send some more data. */ |
+extern void ppp_output_wakeup(struct ppp_channel *); |
+ |
+/* Called by the channel to process a received PPP packet. |
+ The packet should have just the 2-byte PPP protocol header. */ |
+extern void ppp_input(struct ppp_channel *, struct sk_buff *); |
+ |
+/* Called by the channel when an input error occurs, indicating |
+ that we may have missed a packet. */ |
+extern void ppp_input_error(struct ppp_channel *, int code); |
+ |
+/* Attach a channel to a given PPP unit. */ |
+extern int ppp_register_channel(struct ppp_channel *); |
+ |
+/* Detach a channel from its PPP unit (e.g. on hangup). */ |
+extern void ppp_unregister_channel(struct ppp_channel *); |
+ |
+/* Get the channel number for a channel */ |
+extern int ppp_channel_index(struct ppp_channel *); |
+ |
+/* Get the unit number associated with a channel, or -1 if none */ |
+extern int ppp_unit_number(struct ppp_channel *); |
+ |
+/* |
+ * SMP locking notes: |
+ * The channel code must ensure that when it calls ppp_unregister_channel, |
+ * nothing is executing in any of the procedures above, for that |
+ * channel. The generic layer will ensure that nothing is executing |
+ * in the start_xmit and ioctl routines for the channel by the time |
+ * that ppp_unregister_channel returns. |
+ */ |
+ |
+#endif /* __KERNEL__ */ |
+#endif |
Index: linuxc26/include/linux/openprom_fs.h |
=================================================================== |
--- linuxc26/include/linux/openprom_fs.h (nonexistent) |
+++ linuxc26/include/linux/openprom_fs.h (revision 422) |
@@ -0,0 +1,10 @@ |
+#ifndef _LINUX_OPENPROM_FS_H |
+#define _LINUX_OPENPROM_FS_H |
+ |
+/* |
+ * The openprom filesystem constants/structures |
+ */ |
+ |
+#define OPENPROM_SUPER_MAGIC 0x9fa1 |
+ |
+#endif /* _LINUX_OPENPROM_FS_H */ |
Index: linuxc26/include/linux/toshiba.h |
=================================================================== |
--- linuxc26/include/linux/toshiba.h (nonexistent) |
+++ linuxc26/include/linux/toshiba.h (revision 422) |
@@ -0,0 +1,36 @@ |
+/* 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 _LINUX_TOSHIBA_H |
+#define _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 |
Index: linuxc26/include/linux/irq.h |
=================================================================== |
--- linuxc26/include/linux/irq.h (nonexistent) |
+++ linuxc26/include/linux/irq.h (revision 422) |
@@ -0,0 +1,81 @@ |
+#ifndef __irq_h |
+#define __irq_h |
+ |
+/* |
+ * Please do not include this file in generic code. There is currently |
+ * no requirement for any architecture to implement anything held |
+ * within this file. |
+ * |
+ * Thanks. --rmk |
+ */ |
+ |
+#include <linux/config.h> |
+ |
+#if !defined(CONFIG_ARCH_S390) |
+ |
+#include <linux/cache.h> |
+#include <linux/spinlock.h> |
+#include <linux/cpumask.h> |
+ |
+#include <asm/irq.h> |
+#include <asm/ptrace.h> |
+ |
+/* |
+ * IRQ line status. |
+ */ |
+#define IRQ_INPROGRESS 1 /* IRQ handler active - do not enter! */ |
+#define IRQ_DISABLED 2 /* IRQ disabled - do not enter! */ |
+#define IRQ_PENDING 4 /* IRQ pending - replay on enable */ |
+#define IRQ_REPLAY 8 /* IRQ has been replayed but not acked yet */ |
+#define IRQ_AUTODETECT 16 /* IRQ is being autodetected */ |
+#define IRQ_WAITING 32 /* IRQ not yet seen - for autodetection */ |
+#define IRQ_LEVEL 64 /* IRQ level triggered */ |
+#define IRQ_MASKED 128 /* IRQ masked - shouldn't be seen again */ |
+#define IRQ_PER_CPU 256 /* IRQ is per CPU */ |
+ |
+/* |
+ * Interrupt controller descriptor. This is all we need |
+ * to describe about the low-level hardware. |
+ */ |
+struct hw_interrupt_type { |
+ const char * typename; |
+ unsigned int (*startup)(unsigned int irq); |
+ void (*shutdown)(unsigned int irq); |
+ void (*enable)(unsigned int irq); |
+ void (*disable)(unsigned int irq); |
+ void (*ack)(unsigned int irq); |
+ void (*end)(unsigned int irq); |
+ void (*set_affinity)(unsigned int irq, cpumask_t dest); |
+}; |
+ |
+typedef struct hw_interrupt_type hw_irq_controller; |
+ |
+/* |
+ * This is the "IRQ descriptor", which contains various information |
+ * about the irq, including what kind of hardware handling it has, |
+ * whether it is disabled etc etc. |
+ * |
+ * Pad this out to 32 bytes for cache and indexing reasons. |
+ */ |
+typedef struct irq_desc { |
+ unsigned int status; /* IRQ status */ |
+ hw_irq_controller *handler; |
+ struct irqaction *action; /* IRQ action list */ |
+ unsigned int depth; /* nested irq disables */ |
+ unsigned int irq_count; /* For detecting broken interrupts */ |
+ unsigned int irqs_unhandled; |
+ spinlock_t lock; |
+} ____cacheline_aligned irq_desc_t; |
+ |
+extern irq_desc_t irq_desc [NR_IRQS]; |
+ |
+#include <asm/hw_irq.h> /* the arch dependent stuff */ |
+ |
+extern int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); |
+extern int setup_irq(unsigned int , struct irqaction * ); |
+ |
+extern hw_irq_controller no_irq_type; /* needed in every arch ? */ |
+ |
+#endif |
+ |
+#endif /* __irq_h */ |
Index: linuxc26/include/linux/divert.h |
=================================================================== |
--- linuxc26/include/linux/divert.h (nonexistent) |
+++ linuxc26/include/linux/divert.h (revision 422) |
@@ -0,0 +1,130 @@ |
+/* |
+ * Frame Diversion, Benoit Locher <Benoit.Locher@skf.com> |
+ * |
+ * Changes: |
+ * 06/09/2000 BL: initial version |
+ * |
+ */ |
+ |
+#ifndef _LINUX_DIVERT_H |
+#define _LINUX_DIVERT_H |
+ |
+#include <asm/types.h> |
+ |
+#define MAX_DIVERT_PORTS 8 /* Max number of ports to divert (tcp, udp) */ |
+ |
+/* Divertable protocols */ |
+#define DIVERT_PROTO_NONE 0x0000 |
+#define DIVERT_PROTO_IP 0x0001 |
+#define DIVERT_PROTO_ICMP 0x0002 |
+#define DIVERT_PROTO_TCP 0x0004 |
+#define DIVERT_PROTO_UDP 0x0008 |
+ |
+/* |
+ * This is an Ethernet Frame Diverter option block |
+ */ |
+struct divert_blk |
+{ |
+ int divert; /* are we active */ |
+ unsigned int protos; /* protocols */ |
+ u16 tcp_dst[MAX_DIVERT_PORTS]; /* specific tcp dst ports to divert */ |
+ u16 tcp_src[MAX_DIVERT_PORTS]; /* specific tcp src ports to divert */ |
+ u16 udp_dst[MAX_DIVERT_PORTS]; /* specific udp dst ports to divert */ |
+ u16 udp_src[MAX_DIVERT_PORTS]; /* specific udp src ports to divert */ |
+}; |
+ |
+/* |
+ * Diversion control block, for configuration with the userspace tool |
+ * divert |
+ */ |
+ |
+typedef union _divert_cf_arg |
+{ |
+ s16 int16; |
+ u16 uint16; |
+ s32 int32; |
+ u32 uint32; |
+ s64 int64; |
+ u64 uint64; |
+ void *ptr; |
+} divert_cf_arg; |
+ |
+ |
+struct divert_cf |
+{ |
+ int cmd; /* Command */ |
+ divert_cf_arg arg1, |
+ arg2, |
+ arg3; |
+ int dev_index; /* device index (eth0=0, etc...) */ |
+}; |
+ |
+ |
+/* Diversion commands */ |
+#define DIVCMD_DIVERT 1 /* ENABLE/DISABLE diversion */ |
+#define DIVCMD_IP 2 /* ENABLE/DISABLE whold IP diversion */ |
+#define DIVCMD_TCP 3 /* ENABLE/DISABLE whold TCP diversion */ |
+#define DIVCMD_TCPDST 4 /* ADD/REMOVE TCP DST port for diversion */ |
+#define DIVCMD_TCPSRC 5 /* ADD/REMOVE TCP SRC port for diversion */ |
+#define DIVCMD_UDP 6 /* ENABLE/DISABLE whole UDP diversion */ |
+#define DIVCMD_UDPDST 7 /* ADD/REMOVE UDP DST port for diversion */ |
+#define DIVCMD_UDPSRC 8 /* ADD/REMOVE UDP SRC port for diversion */ |
+#define DIVCMD_ICMP 9 /* ENABLE/DISABLE whole ICMP diversion */ |
+#define DIVCMD_GETSTATUS 10 /* GET the status of the diverter */ |
+#define DIVCMD_RESET 11 /* Reset the diverter on the specified dev */ |
+#define DIVCMD_GETVERSION 12 /* Retrieve the diverter code version (char[32]) */ |
+ |
+/* General syntax of the commands: |
+ * |
+ * DIVCMD_xxxxxx(arg1, arg2, arg3, dev_index) |
+ * |
+ * SIOCSIFDIVERT: |
+ * DIVCMD_DIVERT(DIVARG1_ENABLE|DIVARG1_DISABLE, , ,ifindex) |
+ * DIVCMD_IP(DIVARG1_ENABLE|DIVARG1_DISABLE, , , ifindex) |
+ * DIVCMD_TCP(DIVARG1_ENABLE|DIVARG1_DISABLE, , , ifindex) |
+ * DIVCMD_TCPDST(DIVARG1_ADD|DIVARG1_REMOVE, port, , ifindex) |
+ * DIVCMD_TCPSRC(DIVARG1_ADD|DIVARG1_REMOVE, port, , ifindex) |
+ * DIVCMD_UDP(DIVARG1_ENABLE|DIVARG1_DISABLE, , , ifindex) |
+ * DIVCMD_UDPDST(DIVARG1_ADD|DIVARG1_REMOVE, port, , ifindex) |
+ * DIVCMD_UDPSRC(DIVARG1_ADD|DIVARG1_REMOVE, port, , ifindex) |
+ * DIVCMD_ICMP(DIVARG1_ENABLE|DIVARG1_DISABLE, , , ifindex) |
+ * DIVCMD_RESET(, , , ifindex) |
+ * |
+ * SIOGIFDIVERT: |
+ * DIVCMD_GETSTATUS(divert_blk, , , ifindex) |
+ * DIVCMD_GETVERSION(string[3]) |
+ */ |
+ |
+ |
+/* Possible values for arg1 */ |
+#define DIVARG1_ENABLE 0 /* ENABLE something */ |
+#define DIVARG1_DISABLE 1 /* DISABLE something */ |
+#define DIVARG1_ADD 2 /* ADD something */ |
+#define DIVARG1_REMOVE 3 /* REMOVE something */ |
+ |
+ |
+#ifdef __KERNEL__ |
+ |
+/* diverter functions */ |
+#include <linux/skbuff.h> |
+ |
+#ifdef CONFIG_NET_DIVERT |
+int alloc_divert_blk(struct net_device *); |
+void free_divert_blk(struct net_device *); |
+int divert_ioctl(unsigned int cmd, struct divert_cf *arg); |
+void divert_frame(struct sk_buff *skb); |
+static inline void handle_diverter(struct sk_buff *skb) |
+{ |
+ /* if diversion is supported on device, then divert */ |
+ if (skb->dev->divert && skb->dev->divert->divert) |
+ divert_frame(skb); |
+} |
+ |
+#else |
+# define alloc_divert_blk(dev) (0) |
+# define free_divert_blk(dev) do {} while (0) |
+# define divert_ioctl(cmd, arg) (-ENOPKG) |
+# define handle_diverter(skb) do {} while (0) |
+#endif |
+#endif |
+#endif /* _LINUX_DIVERT_H */ |
Index: linuxc26/include/linux/time.h |
=================================================================== |
--- linuxc26/include/linux/time.h (nonexistent) |
+++ linuxc26/include/linux/time.h (revision 422) |
@@ -0,0 +1,387 @@ |
+#ifndef _LINUX_TIME_H |
+#define _LINUX_TIME_H |
+ |
+#include <asm/param.h> |
+#include <linux/types.h> |
+ |
+#ifndef _STRUCT_TIMESPEC |
+#define _STRUCT_TIMESPEC |
+struct timespec { |
+ time_t tv_sec; /* seconds */ |
+ long tv_nsec; /* nanoseconds */ |
+}; |
+#endif /* _STRUCT_TIMESPEC */ |
+ |
+struct timeval { |
+ time_t tv_sec; /* seconds */ |
+ suseconds_t tv_usec; /* microseconds */ |
+}; |
+ |
+struct timezone { |
+ int tz_minuteswest; /* minutes west of Greenwich */ |
+ int tz_dsttime; /* type of dst correction */ |
+}; |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/spinlock.h> |
+#include <linux/seqlock.h> |
+#include <linux/timex.h> |
+#include <asm/div64.h> |
+#ifndef div_long_long_rem |
+ |
+#define div_long_long_rem(dividend,divisor,remainder) ({ \ |
+ u64 result = dividend; \ |
+ *remainder = do_div(result,divisor); \ |
+ result; }) |
+ |
+#endif |
+ |
+/* |
+ * Have the 32 bit jiffies value wrap 5 minutes after boot |
+ * so jiffies wrap bugs show up earlier. |
+ */ |
+#define INITIAL_JIFFIES ((unsigned long)(unsigned int) (-300*HZ)) |
+ |
+/* |
+ * Change timeval to jiffies, trying to avoid the |
+ * most obvious overflows.. |
+ * |
+ * And some not so obvious. |
+ * |
+ * Note that we don't want to return MAX_LONG, because |
+ * for various timeout reasons we often end up having |
+ * to wait "jiffies+1" in order to guarantee that we wait |
+ * at _least_ "jiffies" - so "jiffies+1" had better still |
+ * be positive. |
+ */ |
+#define MAX_JIFFY_OFFSET ((~0UL >> 1)-1) |
+ |
+/* Parameters used to convert the timespec values */ |
+#ifndef USEC_PER_SEC |
+#define USEC_PER_SEC (1000000L) |
+#endif |
+ |
+#ifndef NSEC_PER_SEC |
+#define NSEC_PER_SEC (1000000000L) |
+#endif |
+ |
+#ifndef NSEC_PER_USEC |
+#define NSEC_PER_USEC (1000L) |
+#endif |
+ |
+/* |
+ * We want to do realistic conversions of time so we need to use the same |
+ * values the update wall clock code uses as the jiffies size. This value |
+ * is: TICK_NSEC (which is defined in timex.h). This |
+ * is a constant and is in nanoseconds. We will used scaled math |
+ * with a set of scales defined here as SEC_JIFFIE_SC, USEC_JIFFIE_SC and |
+ * NSEC_JIFFIE_SC. Note that these defines contain nothing but |
+ * constants and so are computed at compile time. SHIFT_HZ (computed in |
+ * timex.h) adjusts the scaling for different HZ values. |
+ |
+ * Scaled math??? What is that? |
+ * |
+ * Scaled math is a way to do integer math on values that would, |
+ * otherwise, either overflow, underflow, or cause undesired div |
+ * instructions to appear in the execution path. In short, we "scale" |
+ * up the operands so they take more bits (more precision, less |
+ * underflow), do the desired operation and then "scale" the result back |
+ * by the same amount. If we do the scaling by shifting we avoid the |
+ * costly mpy and the dastardly div instructions. |
+ |
+ * Suppose, for example, we want to convert from seconds to jiffies |
+ * where jiffies is defined in nanoseconds as NSEC_PER_JIFFIE. The |
+ * simple math is: jiff = (sec * NSEC_PER_SEC) / NSEC_PER_JIFFIE; We |
+ * observe that (NSEC_PER_SEC / NSEC_PER_JIFFIE) is a constant which we |
+ * might calculate at compile time, however, the result will only have |
+ * about 3-4 bits of precision (less for smaller values of HZ). |
+ * |
+ * So, we scale as follows: |
+ * jiff = (sec) * (NSEC_PER_SEC / NSEC_PER_JIFFIE); |
+ * jiff = ((sec) * ((NSEC_PER_SEC * SCALE)/ NSEC_PER_JIFFIE)) / SCALE; |
+ * Then we make SCALE a power of two so: |
+ * jiff = ((sec) * ((NSEC_PER_SEC << SCALE)/ NSEC_PER_JIFFIE)) >> SCALE; |
+ * Now we define: |
+ * #define SEC_CONV = ((NSEC_PER_SEC << SCALE)/ NSEC_PER_JIFFIE)) |
+ * jiff = (sec * SEC_CONV) >> SCALE; |
+ * |
+ * Often the math we use will expand beyond 32-bits so we tell C how to |
+ * do this and pass the 64-bit result of the mpy through the ">> SCALE" |
+ * which should take the result back to 32-bits. We want this expansion |
+ * to capture as much precision as possible. At the same time we don't |
+ * want to overflow so we pick the SCALE to avoid this. In this file, |
+ * that means using a different scale for each range of HZ values (as |
+ * defined in timex.h). |
+ * |
+ * For those who want to know, gcc will give a 64-bit result from a "*" |
+ * operator if the result is a long long AND at least one of the |
+ * operands is cast to long long (usually just prior to the "*" so as |
+ * not to confuse it into thinking it really has a 64-bit operand, |
+ * which, buy the way, it can do, but it take more code and at least 2 |
+ * mpys). |
+ |
+ * We also need to be aware that one second in nanoseconds is only a |
+ * couple of bits away from overflowing a 32-bit word, so we MUST use |
+ * 64-bits to get the full range time in nanoseconds. |
+ |
+ */ |
+ |
+/* |
+ * Here are the scales we will use. One for seconds, nanoseconds and |
+ * microseconds. |
+ * |
+ * Within the limits of cpp we do a rough cut at the SEC_JIFFIE_SC and |
+ * check if the sign bit is set. If not, we bump the shift count by 1. |
+ * (Gets an extra bit of precision where we can use it.) |
+ * We know it is set for HZ = 1024 and HZ = 100 not for 1000. |
+ * Haven't tested others. |
+ |
+ * Limits of cpp (for #if expressions) only long (no long long), but |
+ * then we only need the most signicant bit. |
+ */ |
+ |
+#define SEC_JIFFIE_SC (31 - SHIFT_HZ) |
+#if !((((NSEC_PER_SEC << 2) / TICK_NSEC) << (SEC_JIFFIE_SC - 2)) & 0x80000000) |
+#undef SEC_JIFFIE_SC |
+#define SEC_JIFFIE_SC (32 - SHIFT_HZ) |
+#endif |
+#define NSEC_JIFFIE_SC (SEC_JIFFIE_SC + 29) |
+#define USEC_JIFFIE_SC (SEC_JIFFIE_SC + 19) |
+#define SEC_CONVERSION ((unsigned long)((((u64)NSEC_PER_SEC << SEC_JIFFIE_SC))\ |
+ / (u64)TICK_NSEC)) |
+ |
+#define NSEC_CONVERSION ((unsigned long)((((u64)1 << NSEC_JIFFIE_SC))\ |
+ / (u64)TICK_NSEC)) |
+#define USEC_CONVERSION \ |
+ ((unsigned long)((((u64)NSEC_PER_USEC << USEC_JIFFIE_SC)) \ |
+ / (u64)TICK_NSEC)) |
+/* |
+ * USEC_ROUND is used in the timeval to jiffie conversion. See there |
+ * for more details. It is the scaled resolution rounding value. Note |
+ * that it is a 64-bit value. Since, when it is applied, we are already |
+ * in jiffies (albit scaled), it is nothing but the bits we will shift |
+ * off. |
+ */ |
+#define USEC_ROUND (u64)(((u64)1 << USEC_JIFFIE_SC) - 1) |
+/* |
+ * The maximum jiffie value is (MAX_INT >> 1). Here we translate that |
+ * into seconds. The 64-bit case will overflow if we are not careful, |
+ * so use the messy SH_DIV macro to do it. Still all constants. |
+ */ |
+#if BITS_PER_LONG < 64 |
+# define MAX_SEC_IN_JIFFIES \ |
+ (long)((u64)((u64)MAX_JIFFY_OFFSET * TICK_NSEC) / NSEC_PER_SEC) |
+#else /* take care of overflow on 64 bits machines */ |
+# define MAX_SEC_IN_JIFFIES \ |
+ (SH_DIV((MAX_JIFFY_OFFSET >> SEC_JIFFIE_SC) * TICK_NSEC, NSEC_PER_SEC, 1) - 1) |
+ |
+#endif |
+/* |
+ * The TICK_NSEC - 1 rounds up the value to the next resolution. Note |
+ * that a remainder subtract here would not do the right thing as the |
+ * resolution values don't fall on second boundries. I.e. the line: |
+ * nsec -= nsec % TICK_NSEC; is NOT a correct resolution rounding. |
+ * |
+ * Rather, we just shift the bits off the right. |
+ * |
+ * The >> (NSEC_JIFFIE_SC - SEC_JIFFIE_SC) converts the scaled nsec |
+ * value to a scaled second value. |
+ */ |
+static __inline__ unsigned long |
+timespec_to_jiffies(struct timespec *value) |
+{ |
+ unsigned long sec = value->tv_sec; |
+ long nsec = value->tv_nsec + TICK_NSEC - 1; |
+ |
+ if (sec >= MAX_SEC_IN_JIFFIES){ |
+ sec = MAX_SEC_IN_JIFFIES; |
+ nsec = 0; |
+ } |
+ return (((u64)sec * SEC_CONVERSION) + |
+ (((u64)nsec * NSEC_CONVERSION) >> |
+ (NSEC_JIFFIE_SC - SEC_JIFFIE_SC))) >> SEC_JIFFIE_SC; |
+ |
+} |
+ |
+static __inline__ void |
+jiffies_to_timespec(unsigned long jiffies, struct timespec *value) |
+{ |
+ /* |
+ * Convert jiffies to nanoseconds and separate with |
+ * one divide. |
+ */ |
+ u64 nsec = (u64)jiffies * TICK_NSEC; |
+ value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &value->tv_nsec); |
+} |
+ |
+/* Same for "timeval" |
+ * |
+ * Well, almost. The problem here is that the real system resolution is |
+ * in nanoseconds and the value being converted is in micro seconds. |
+ * Also for some machines (those that use HZ = 1024, in-particular), |
+ * there is a LARGE error in the tick size in microseconds. |
+ |
+ * The solution we use is to do the rounding AFTER we convert the |
+ * microsecond part. Thus the USEC_ROUND, the bits to be shifted off. |
+ * Instruction wise, this should cost only an additional add with carry |
+ * instruction above the way it was done above. |
+ */ |
+static __inline__ unsigned long |
+timeval_to_jiffies(struct timeval *value) |
+{ |
+ unsigned long sec = value->tv_sec; |
+ long usec = value->tv_usec; |
+ |
+ if (sec >= MAX_SEC_IN_JIFFIES){ |
+ sec = MAX_SEC_IN_JIFFIES; |
+ usec = 0; |
+ } |
+ return (((u64)sec * SEC_CONVERSION) + |
+ (((u64)usec * USEC_CONVERSION + USEC_ROUND) >> |
+ (USEC_JIFFIE_SC - SEC_JIFFIE_SC))) >> SEC_JIFFIE_SC; |
+} |
+ |
+static __inline__ void |
+jiffies_to_timeval(unsigned long jiffies, struct timeval *value) |
+{ |
+ /* |
+ * Convert jiffies to nanoseconds and separate with |
+ * one divide. |
+ */ |
+ u64 nsec = (u64)jiffies * TICK_NSEC; |
+ value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &value->tv_usec); |
+ value->tv_usec /= NSEC_PER_USEC; |
+} |
+ |
+static __inline__ int timespec_equal(struct timespec *a, struct timespec *b) |
+{ |
+ return (a->tv_sec == b->tv_sec) && (a->tv_nsec == b->tv_nsec); |
+} |
+ |
+/* Converts Gregorian date to seconds since 1970-01-01 00:00:00. |
+ * Assumes input in normal date format, i.e. 1980-12-31 23:59:59 |
+ * => year=1980, mon=12, day=31, hour=23, min=59, sec=59. |
+ * |
+ * [For the Julian calendar (which was used in Russia before 1917, |
+ * Britain & colonies before 1752, anywhere else before 1582, |
+ * and is still in use by some communities) leave out the |
+ * -year/100+year/400 terms, and add 10.] |
+ * |
+ * This algorithm was first published by Gauss (I think). |
+ * |
+ * WARNING: this function will overflow on 2106-02-07 06:28:16 on |
+ * machines were long is 32-bit! (However, as time_t is signed, we |
+ * will already get problems at other places on 2038-01-19 03:14:08) |
+ */ |
+static inline unsigned long |
+mktime (unsigned int year, unsigned int mon, |
+ unsigned int day, unsigned int hour, |
+ unsigned int min, unsigned int sec) |
+{ |
+ if (0 >= (int) (mon -= 2)) { /* 1..12 -> 11,12,1..10 */ |
+ mon += 12; /* Puts Feb last since it has leap day */ |
+ year -= 1; |
+ } |
+ |
+ return ((( |
+ (unsigned long) (year/4 - year/100 + year/400 + 367*mon/12 + day) + |
+ year*365 - 719499 |
+ )*24 + hour /* now have hours */ |
+ )*60 + min /* now have minutes */ |
+ )*60 + sec; /* finally seconds */ |
+} |
+ |
+extern struct timespec xtime; |
+extern struct timespec wall_to_monotonic; |
+extern seqlock_t xtime_lock; |
+ |
+static inline unsigned long get_seconds(void) |
+{ |
+ return xtime.tv_sec; |
+} |
+ |
+struct timespec current_kernel_time(void); |
+ |
+#define CURRENT_TIME (current_kernel_time()) |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#define NFDBITS __NFDBITS |
+ |
+#ifdef __KERNEL__ |
+extern void do_gettimeofday(struct timeval *tv); |
+extern int do_settimeofday(struct timespec *tv); |
+extern int do_sys_settimeofday(struct timespec *tv, struct timezone *tz); |
+extern void clock_was_set(void); // call when ever the clock is set |
+extern int do_posix_clock_monotonic_gettime(struct timespec *tp); |
+extern long do_nanosleep(struct timespec *t); |
+extern long do_utimes(char __user * filename, struct timeval * times); |
+struct itimerval; |
+extern int do_setitimer(int which, struct itimerval *value, struct itimerval *ovalue); |
+extern int do_getitimer(int which, struct itimerval *value); |
+ |
+static inline void |
+set_normalized_timespec (struct timespec *ts, time_t sec, long nsec) |
+{ |
+ while (nsec > NSEC_PER_SEC) { |
+ nsec -= NSEC_PER_SEC; |
+ ++sec; |
+ } |
+ while (nsec < 0) { |
+ nsec += NSEC_PER_SEC; |
+ --sec; |
+ } |
+ ts->tv_sec = sec; |
+ ts->tv_nsec = nsec; |
+} |
+#endif |
+ |
+#define FD_SETSIZE __FD_SETSIZE |
+#define FD_SET(fd,fdsetp) __FD_SET(fd,fdsetp) |
+#define FD_CLR(fd,fdsetp) __FD_CLR(fd,fdsetp) |
+#define FD_ISSET(fd,fdsetp) __FD_ISSET(fd,fdsetp) |
+#define FD_ZERO(fdsetp) __FD_ZERO(fdsetp) |
+ |
+/* |
+ * 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_REALTIME_HR 4 |
+#define CLOCK_MONOTONIC_HR 5 |
+ |
+#define MAX_CLOCKS 6 |
+#define CLOCKS_MASK (CLOCK_REALTIME | CLOCK_MONOTONIC | \ |
+ CLOCK_REALTIME_HR | CLOCK_MONOTONIC_HR) |
+#define CLOCKS_MONO (CLOCK_MONOTONIC & CLOCK_MONOTONIC_HR) |
+ |
+/* |
+ * The various flags for setting POSIX.1b interval timers. |
+ */ |
+ |
+#define TIMER_ABSTIME 0x01 |
+ |
+ |
+#endif |
Index: linuxc26/include/linux/delay.h |
=================================================================== |
--- linuxc26/include/linux/delay.h (nonexistent) |
+++ linuxc26/include/linux/delay.h (revision 422) |
@@ -0,0 +1,41 @@ |
+#ifndef _LINUX_DELAY_H |
+#define _LINUX_DELAY_H |
+ |
+/* |
+ * Copyright (C) 1993 Linus Torvalds |
+ * |
+ * Delay routines, using a pre-computed "loops_per_jiffy" value. |
+ */ |
+ |
+extern unsigned long loops_per_jiffy; |
+ |
+#include <asm/delay.h> |
+ |
+/* |
+ * Using udelay() for intervals greater than a few milliseconds can |
+ * risk overflow for high loops_per_jiffy (high bogomips) machines. The |
+ * mdelay() provides a wrapper to prevent this. For delays greater |
+ * than MAX_UDELAY_MS milliseconds, the wrapper is used. Architecture |
+ * specific values can be defined in asm-???/delay.h as an override. |
+ * The 2nd mdelay() definition ensures GCC will optimize away the |
+ * while loop for the common cases where n <= MAX_UDELAY_MS -- Paul G. |
+ */ |
+ |
+#ifndef MAX_UDELAY_MS |
+#define MAX_UDELAY_MS 5 |
+#endif |
+ |
+#ifdef notdef |
+#define mdelay(n) (\ |
+ {unsigned long __ms=(n); while (__ms--) udelay(1000);}) |
+#else |
+#define mdelay(n) (\ |
+ (__builtin_constant_p(n) && (n)<=MAX_UDELAY_MS) ? udelay((n)*1000) : \ |
+ ({unsigned long __ms=(n); while (__ms--) udelay(1000);})) |
+#endif |
+ |
+#ifndef ndelay |
+#define ndelay(x) udelay(((x)+999)/1000) |
+#endif |
+ |
+#endif /* defined(_LINUX_DELAY_H) */ |
Index: linuxc26/include/linux/umsdos_fs.h |
=================================================================== |
--- linuxc26/include/linux/umsdos_fs.h (nonexistent) |
+++ linuxc26/include/linux/umsdos_fs.h (revision 422) |
@@ -0,0 +1,182 @@ |
+#ifndef LINUX_UMSDOS_FS_H |
+#define LINUX_UMSDOS_FS_H |
+ |
+ |
+/*#define UMS_DEBUG 1 // define for check_* functions */ |
+/*#define UMSDOS_DEBUG 1*/ |
+#define UMSDOS_PARANOIA 1 |
+ |
+#define UMSDOS_VERSION 0 |
+#define UMSDOS_RELEASE 4 |
+ |
+#define UMSDOS_ROOT_INO 1 |
+ |
+/* This is the file acting as a directory extension */ |
+#define UMSDOS_EMD_FILE "--linux-.---" |
+#define UMSDOS_EMD_NAMELEN 12 |
+#define UMSDOS_PSDROOT_NAME "linux" |
+#define UMSDOS_PSDROOT_LEN 5 |
+ |
+#ifndef _LINUX_TYPES_H |
+#include <linux/types.h> |
+#endif |
+#ifndef _LINUX_LIMITS_H |
+#include <linux/limits.h> |
+#endif |
+#ifndef _LINUX_DIRENT_H |
+#include <linux/dirent.h> |
+#endif |
+#ifndef _LINUX_IOCTL_H |
+#include <linux/ioctl.h> |
+#endif |
+ |
+ |
+#ifdef __KERNEL__ |
+/* #Specification: convention / PRINTK Printk and printk |
+ * Here is the convention for the use of printk inside fs/umsdos |
+ * |
+ * printk carry important message (error or status). |
+ * Printk is for debugging (it is a macro defined at the beginning of |
+ * most source. |
+ * PRINTK is a nulled Printk macro. |
+ * |
+ * This convention makes the source easier to read, and Printk easier |
+ * to shut off. |
+ */ |
+# define PRINTK(x) |
+# ifdef UMSDOS_DEBUG |
+# define Printk(x) printk x |
+# else |
+# define Printk(x) |
+# endif |
+#endif /* __KERNEL__ */ |
+ |
+ |
+struct umsdos_fake_info { |
+ char fname[13]; |
+ int len; |
+}; |
+ |
+#define UMSDOS_MAXNAME 220 |
+/* This structure is 256 bytes large, depending on the name, only part */ |
+/* of it is written to disk */ |
+/* nice though it would be, I can't change this and preserve backward compatibility */ |
+struct umsdos_dirent { |
+ unsigned char name_len; /* if == 0, then this entry is not used */ |
+ unsigned char flags; /* UMSDOS_xxxx */ |
+ unsigned short nlink; /* How many hard links point to this entry */ |
+ __kernel_uid_t uid; /* Owner user id */ |
+ __kernel_gid_t gid; /* Group id */ |
+ time_t atime; /* Access time */ |
+ time_t mtime; /* Last modification time */ |
+ time_t ctime; /* Creation time */ |
+ unsigned short rdev; /* major and minor of a device special file */ |
+ umode_t mode; /* Standard UNIX permissions bits + type of */ |
+ char spare[12]; /* unused bytes for future extensions */ |
+ /* file, see linux/stat.h */ |
+ char name[UMSDOS_MAXNAME]; /* Not '\0' terminated */ |
+ /* but '\0' padded, so it will allow */ |
+ /* for adding news fields in this record */ |
+ /* by reducing the size of name[] */ |
+}; |
+ |
+#define UMSDOS_HIDDEN 1 /* Never show this entry in directory search */ |
+#define UMSDOS_HLINK 2 /* It is a (pseudo) hard link */ |
+ |
+/* #Specification: EMD file / record size |
+ * Entry are 64 bytes wide in the EMD file. It allows for a 30 characters |
+ * name. If a name is longer, contiguous entries are allocated. So a |
+ * umsdos_dirent may span multiple records. |
+ */ |
+ |
+#define UMSDOS_REC_SIZE 64 |
+ |
+/* Translation between MSDOS name and UMSDOS name */ |
+ |
+struct umsdos_info { |
+ int msdos_reject; /* Tell if the file name is invalid for MSDOS */ |
+ /* See umsdos_parse */ |
+ struct umsdos_fake_info fake; |
+ struct umsdos_dirent entry; |
+ off_t f_pos; /* offset of the entry in the EMD file |
+ * or offset where the entry may be store |
+ * if it is a new entry |
+ */ |
+ int recsize; /* Record size needed to store entry */ |
+}; |
+ |
+/* Definitions for ioctl (number randomly chosen) |
+ * The next ioctl commands operate only on the DOS directory |
+ * The file umsdos_progs/umsdosio.c contain a string table |
+ * based on the order of those definition. Keep it in sync |
+ */ |
+#define UMSDOS_READDIR_DOS _IO(0x04,210) /* Do a readdir of the DOS directory */ |
+#define UMSDOS_UNLINK_DOS _IO(0x04,211) /* Erase in the DOS directory only */ |
+#define UMSDOS_RMDIR_DOS _IO(0x04,212) /* rmdir in the DOS directory only */ |
+#define UMSDOS_STAT_DOS _IO(0x04,213) /* Get info about a file */ |
+ |
+/* The next ioctl commands operate only on the EMD file */ |
+#define UMSDOS_CREAT_EMD _IO(0x04,214) /* Create a file */ |
+#define UMSDOS_UNLINK_EMD _IO(0x04,215) /* unlink (rmdir) a file */ |
+#define UMSDOS_READDIR_EMD _IO(0x04,216) /* read the EMD file only. */ |
+#define UMSDOS_GETVERSION _IO(0x04,217) /* Get the release number of UMSDOS */ |
+#define UMSDOS_INIT_EMD _IO(0x04,218) /* Create the EMD file if not there */ |
+#define UMSDOS_DOS_SETUP _IO(0x04,219) /* Set the defaults of the MS-DOS driver. */ |
+ |
+#define UMSDOS_RENAME_DOS _IO(0x04,220) /* rename a file/directory in the DOS |
+ * directory only */ |
+struct umsdos_ioctl { |
+ struct dirent dos_dirent; |
+ struct umsdos_dirent umsdos_dirent; |
+ /* The following structure is used to exchange some data with |
+ * utilities (umsdos_progs/util/umsdosio.c). The first releases |
+ * were using struct stat from "sys/stat.h". This was causing |
+ * some problem for cross compilation of the kernel. |
+ * Since I am not really using the structure stat, but only |
+ * some fields of it, I have decided to replicate the structure |
+ * here for compatibility with the binaries out there. |
+ * FIXME PTW 1998, this has probably changed |
+ */ |
+ |
+ struct { |
+ unsigned long st_dev; |
+ ino_t st_ino; /* used */ |
+ umode_t st_mode; /* used */ |
+ nlink_t st_nlink; |
+ __kernel_uid_t st_uid; |
+ __kernel_gid_t st_gid; |
+ unsigned long st_rdev; |
+ off_t st_size; /* used */ |
+ unsigned long st_blksize; |
+ unsigned long st_blocks; |
+ time_t st_atime; /* used */ |
+ unsigned long __unused1; |
+ time_t st_mtime; /* used */ |
+ unsigned long __unused2; |
+ time_t st_ctime; /* used */ |
+ unsigned long __unused3; |
+ uid_t st_uid32; |
+ gid_t st_gid32; |
+ } stat; |
+ char version, release; |
+}; |
+ |
+/* Different macros to access struct umsdos_dirent */ |
+#define EDM_ENTRY_ISUSED(e) ((e)->name_len!=0) |
+ |
+#ifdef __KERNEL__ |
+ |
+#ifndef LINUX_FS_H |
+#include <linux/fs.h> |
+#endif |
+ |
+extern struct inode_operations umsdos_dir_inode_operations; |
+extern struct inode_operations umsdos_rdir_inode_operations; |
+extern struct file_operations umsdos_dir_operations; |
+extern struct file_operations umsdos_rdir_operations; |
+ |
+#include <linux/umsdos_fs.p> |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif |
Index: linuxc26/include/linux/in_systm.h |
=================================================================== |
--- linuxc26/include/linux/in_systm.h (nonexistent) |
+++ linuxc26/include/linux/in_systm.h (revision 422) |
@@ -0,0 +1,32 @@ |
+/* |
+ * 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. |
+ * |
+ * Miscellaneous internetwork definitions for kernel. |
+ * |
+ * Version: @(#)in_systm.h 1.0.0 12/17/93 |
+ * |
+ * Authors: Original taken from Berkeley BSD UNIX 4.3-RENO. |
+ * 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_IN_SYSTM_H |
+#define _LINUX_IN_SYSTM_H |
+ |
+/* |
+ * Network types. |
+ * The n_ types are network-order variants of their natural |
+ * equivalents. The Linux kernel NET-2 code does not use |
+ * them (yet), but it might in the future. This is mostly |
+ * there for compatibility with BSD user-level programs. |
+ */ |
+typedef u_short n_short; /* short as received from the net */ |
+typedef u_long n_long; /* long as received from the net */ |
+typedef u_long n_time; /* ms since 00:00 GMT, byte rev */ |
+ |
+#endif /* _LINUX_IN_SYSTM_H */ |
Index: linuxc26/include/linux/console_struct.h |
=================================================================== |
--- linuxc26/include/linux/console_struct.h (nonexistent) |
+++ linuxc26/include/linux/console_struct.h (revision 422) |
@@ -0,0 +1,115 @@ |
+/* |
+ * console_struct.h |
+ * |
+ * Data structure describing single virtual console except for data |
+ * used by vt.c. |
+ * |
+ * Fields marked with [#] must be set by the low-level driver. |
+ * Fields marked with [!] can be changed by the low-level driver |
+ * to achieve effects such as fast scrolling by changing the origin. |
+ */ |
+ |
+#define NPAR 16 |
+ |
+struct vc_data { |
+ unsigned short vc_num; /* Console number */ |
+ unsigned int vc_cols; /* [#] Console size */ |
+ unsigned int vc_rows; |
+ unsigned int vc_size_row; /* Bytes per row */ |
+ unsigned int vc_scan_lines; /* # of scan lines */ |
+ unsigned long vc_origin; /* [!] Start of real screen */ |
+ unsigned long vc_scr_end; /* [!] End of real screen */ |
+ unsigned long vc_visible_origin; /* [!] Top of visible window */ |
+ unsigned int vc_top, vc_bottom; /* Scrolling region */ |
+ const struct consw *vc_sw; |
+ unsigned short *vc_screenbuf; /* In-memory character/attribute buffer */ |
+ unsigned int vc_screenbuf_size; |
+ /* attributes for all characters on screen */ |
+ unsigned char vc_attr; /* Current attributes */ |
+ unsigned char vc_def_color; /* Default colors */ |
+ unsigned char vc_color; /* Foreground & background */ |
+ unsigned char vc_s_color; /* Saved foreground & background */ |
+ unsigned char vc_ulcolor; /* Color for underline mode */ |
+ unsigned char vc_halfcolor; /* Color for half intensity mode */ |
+ /* cursor */ |
+ unsigned int vc_cursor_type; |
+ unsigned short vc_complement_mask; /* [#] Xor mask for mouse pointer */ |
+ unsigned short vc_s_complement_mask; /* Saved mouse pointer mask */ |
+ unsigned int vc_x, vc_y; /* Cursor position */ |
+ unsigned int vc_saved_x, vc_saved_y; |
+ unsigned long vc_pos; /* Cursor address */ |
+ /* fonts */ |
+ unsigned short vc_hi_font_mask; /* [#] Attribute set for upper 256 chars of font or 0 if not supported */ |
+ struct console_font_op vc_font; /* Current VC font set */ |
+ unsigned short vc_video_erase_char; /* Background erase character */ |
+ /* VT terminal data */ |
+ unsigned int vc_state; /* Escape sequence parser state */ |
+ unsigned int vc_npar,vc_par[NPAR]; /* Parameters of current escape sequence */ |
+ struct tty_struct *vc_tty; /* TTY we are attached to */ |
+ /* mode flags */ |
+ unsigned int vc_charset : 1; /* Character set G0 / G1 */ |
+ unsigned int vc_s_charset : 1; /* Saved character set */ |
+ unsigned int vc_disp_ctrl : 1; /* Display chars < 32? */ |
+ unsigned int vc_toggle_meta : 1; /* Toggle high bit? */ |
+ unsigned int vc_decscnm : 1; /* Screen Mode */ |
+ unsigned int vc_decom : 1; /* Origin Mode */ |
+ unsigned int vc_decawm : 1; /* Autowrap Mode */ |
+ unsigned int vc_deccm : 1; /* Cursor Visible */ |
+ unsigned int vc_decim : 1; /* Insert Mode */ |
+ unsigned int vc_deccolm : 1; /* 80/132 Column Mode */ |
+ /* attribute flags */ |
+ unsigned int vc_intensity : 2; /* 0=half-bright, 1=normal, 2=bold */ |
+ unsigned int vc_underline : 1; |
+ unsigned int vc_blink : 1; |
+ unsigned int vc_reverse : 1; |
+ unsigned int vc_s_intensity : 2; /* saved rendition */ |
+ unsigned int vc_s_underline : 1; |
+ unsigned int vc_s_blink : 1; |
+ unsigned int vc_s_reverse : 1; |
+ /* misc */ |
+ unsigned int vc_ques : 1; |
+ unsigned int vc_need_wrap : 1; |
+ unsigned int vc_can_do_color : 1; |
+ unsigned int vc_report_mouse : 2; |
+ unsigned int vc_kmalloced : 1; |
+ unsigned char vc_utf : 1; /* Unicode UTF-8 encoding */ |
+ unsigned char vc_utf_count; |
+ int vc_utf_char; |
+ unsigned int vc_tab_stop[8]; /* Tab stops. 256 columns. */ |
+ unsigned char vc_palette[16*3]; /* Colour palette for VGA+ */ |
+ unsigned short * vc_translate; |
+ unsigned char vc_G0_charset; |
+ unsigned char vc_G1_charset; |
+ unsigned char vc_saved_G0; |
+ unsigned char vc_saved_G1; |
+ unsigned int vc_bell_pitch; /* Console bell pitch */ |
+ unsigned int vc_bell_duration; /* Console bell duration */ |
+ struct vc_data **vc_display_fg; /* [!] Ptr to var holding fg console for this display */ |
+ unsigned long vc_uni_pagedir; |
+ unsigned long *vc_uni_pagedir_loc; /* [!] Location of uni_pagedir variable for this console */ |
+ /* additional information is in vt_kern.h */ |
+}; |
+ |
+struct vc { |
+ struct vc_data *d; |
+ |
+ /* might add scrmem, vt_struct, kbd at some time, |
+ to have everything in one place - the disadvantage |
+ would be that vc_cons etc can no longer be static */ |
+}; |
+ |
+extern struct vc vc_cons [MAX_NR_CONSOLES]; |
+ |
+#define CUR_DEF 0 |
+#define CUR_NONE 1 |
+#define CUR_UNDERLINE 2 |
+#define CUR_LOWER_THIRD 3 |
+#define CUR_LOWER_HALF 4 |
+#define CUR_TWO_THIRDS 5 |
+#define CUR_BLOCK 6 |
+#define CUR_HWMASK 0x0f |
+#define CUR_SWMASK 0xfff0 |
+ |
+#define CUR_DEFAULT CUR_UNDERLINE |
+ |
+#define CON_IS_VISIBLE(conp) (*conp->vc_display_fg == conp) |
Index: linuxc26/include/linux/coda_psdev.h |
=================================================================== |
--- linuxc26/include/linux/coda_psdev.h (nonexistent) |
+++ linuxc26/include/linux/coda_psdev.h (revision 422) |
@@ -0,0 +1,103 @@ |
+#ifndef __CODA_PSDEV_H |
+#define __CODA_PSDEV_H |
+ |
+#define CODA_PSDEV_MAJOR 67 |
+#define MAX_CODADEVS 5 /* how many do we allow */ |
+ |
+#define CODA_SUPER_MAGIC 0x73757245 |
+ |
+struct kstatfs; |
+ |
+struct coda_sb_info |
+{ |
+ struct venus_comm *sbi_vcomm; |
+}; |
+ |
+/* communication pending/processing queues */ |
+struct venus_comm { |
+ u_long vc_seq; |
+ wait_queue_head_t vc_waitq; /* Venus wait queue */ |
+ struct list_head vc_pending; |
+ struct list_head vc_processing; |
+ int vc_inuse; |
+ struct super_block *vc_sb; |
+}; |
+ |
+ |
+static inline struct coda_sb_info *coda_sbp(struct super_block *sb) |
+{ |
+ return ((struct coda_sb_info *)((sb)->s_fs_info)); |
+} |
+ |
+ |
+/* upcalls */ |
+int venus_rootfid(struct super_block *sb, struct CodaFid *fidp); |
+int venus_getattr(struct super_block *sb, struct CodaFid *fid, |
+ struct coda_vattr *attr); |
+int venus_setattr(struct super_block *, struct CodaFid *, struct coda_vattr *); |
+int venus_lookup(struct super_block *sb, struct CodaFid *fid, |
+ const char *name, int length, int *type, |
+ struct CodaFid *resfid); |
+int venus_store(struct super_block *sb, struct CodaFid *fid, int flags, |
+ vuid_t uid); |
+int venus_release(struct super_block *sb, struct CodaFid *fid, int flags); |
+int venus_close(struct super_block *sb, struct CodaFid *fid, int flags, |
+ vuid_t uid); |
+int venus_open(struct super_block *sb, struct CodaFid *fid, int flags, |
+ struct file **f); |
+int venus_mkdir(struct super_block *sb, struct CodaFid *dirfid, |
+ const char *name, int length, |
+ struct CodaFid *newfid, struct coda_vattr *attrs); |
+int venus_create(struct super_block *sb, struct CodaFid *dirfid, |
+ const char *name, int length, int excl, int mode, dev_t rdev, |
+ struct CodaFid *newfid, struct coda_vattr *attrs) ; |
+int venus_rmdir(struct super_block *sb, struct CodaFid *dirfid, |
+ const char *name, int length); |
+int venus_remove(struct super_block *sb, struct CodaFid *dirfid, |
+ const char *name, int length); |
+int venus_readlink(struct super_block *sb, struct CodaFid *fid, |
+ char *buffer, int *length); |
+int venus_rename(struct super_block *, struct CodaFid *new_fid, |
+ struct CodaFid *old_fid, size_t old_length, |
+ size_t new_length, const char *old_name, |
+ const char *new_name); |
+int venus_link(struct super_block *sb, struct CodaFid *fid, |
+ struct CodaFid *dirfid, const char *name, int len ); |
+int venus_symlink(struct super_block *sb, struct CodaFid *fid, |
+ const char *name, int len, const char *symname, int symlen); |
+int venus_access(struct super_block *sb, struct CodaFid *fid, int mask); |
+int venus_pioctl(struct super_block *sb, struct CodaFid *fid, |
+ unsigned int cmd, struct PioctlData *data); |
+int coda_downcall(int opcode, union outputArgs *out, struct super_block *sb); |
+int venus_fsync(struct super_block *sb, struct CodaFid *fid); |
+int venus_statfs(struct super_block *sb, struct kstatfs *sfs); |
+ |
+ |
+/* messages between coda filesystem in kernel and Venus */ |
+extern int coda_hard; |
+extern unsigned long coda_timeout; |
+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 */ |
+ unsigned long uc_posttime; |
+}; |
+ |
+#define REQ_ASYNC 0x1 |
+#define REQ_READ 0x2 |
+#define REQ_WRITE 0x4 |
+#define REQ_ABORT 0x8 |
+ |
+ |
+/* |
+ * Statistics |
+ */ |
+ |
+extern struct venus_comm coda_comms[]; |
+ |
+#endif |
Index: linuxc26/include/linux/aio.h |
=================================================================== |
--- linuxc26/include/linux/aio.h (nonexistent) |
+++ linuxc26/include/linux/aio.h (revision 422) |
@@ -0,0 +1,172 @@ |
+#ifndef __LINUX__AIO_H |
+#define __LINUX__AIO_H |
+ |
+#include <linux/list.h> |
+#include <linux/workqueue.h> |
+#include <linux/aio_abi.h> |
+ |
+#include <asm/atomic.h> |
+ |
+#define AIO_MAXSEGS 4 |
+#define AIO_KIOGRP_NR_ATOMIC 8 |
+ |
+struct kioctx; |
+ |
+/* Notes on cancelling a kiocb: |
+ * If a kiocb is cancelled, aio_complete may return 0 to indicate |
+ * that cancel has not yet disposed of the kiocb. All cancel |
+ * operations *must* call aio_put_req to dispose of the kiocb |
+ * to guard against races with the completion code. |
+ */ |
+#define KIOCB_C_CANCELLED 0x01 |
+#define KIOCB_C_COMPLETE 0x02 |
+ |
+#define KIOCB_SYNC_KEY (~0U) |
+ |
+#define KIOCB_PRIVATE_SIZE (24 * sizeof(long)) |
+ |
+/* ki_flags bits */ |
+#define KIF_LOCKED 0 |
+#define KIF_KICKED 1 |
+#define KIF_CANCELLED 2 |
+ |
+#define kiocbTryLock(iocb) test_and_set_bit(KIF_LOCKED, &(iocb)->ki_flags) |
+#define kiocbTryKick(iocb) test_and_set_bit(KIF_KICKED, &(iocb)->ki_flags) |
+ |
+#define kiocbSetLocked(iocb) set_bit(KIF_LOCKED, &(iocb)->ki_flags) |
+#define kiocbSetKicked(iocb) set_bit(KIF_KICKED, &(iocb)->ki_flags) |
+#define kiocbSetCancelled(iocb) set_bit(KIF_CANCELLED, &(iocb)->ki_flags) |
+ |
+#define kiocbClearLocked(iocb) clear_bit(KIF_LOCKED, &(iocb)->ki_flags) |
+#define kiocbClearKicked(iocb) clear_bit(KIF_KICKED, &(iocb)->ki_flags) |
+#define kiocbClearCancelled(iocb) clear_bit(KIF_CANCELLED, &(iocb)->ki_flags) |
+ |
+#define kiocbIsLocked(iocb) test_bit(KIF_LOCKED, &(iocb)->ki_flags) |
+#define kiocbIsKicked(iocb) test_bit(KIF_KICKED, &(iocb)->ki_flags) |
+#define kiocbIsCancelled(iocb) test_bit(KIF_CANCELLED, &(iocb)->ki_flags) |
+ |
+struct kiocb { |
+ struct list_head ki_run_list; |
+ long ki_flags; |
+ int ki_users; |
+ unsigned ki_key; /* id of this request */ |
+ |
+ struct file *ki_filp; |
+ struct kioctx *ki_ctx; /* may be NULL for sync ops */ |
+ int (*ki_cancel)(struct kiocb *, struct io_event *); |
+ long (*ki_retry)(struct kiocb *); |
+ |
+ struct list_head ki_list; /* the aio core uses this |
+ * for cancellation */ |
+ |
+ void *ki_user_obj; /* pointer to userland's iocb */ |
+ __u64 ki_user_data; /* user's data for completion */ |
+ loff_t ki_pos; |
+ |
+ char private[KIOCB_PRIVATE_SIZE]; |
+}; |
+ |
+#define is_sync_kiocb(iocb) ((iocb)->ki_key == KIOCB_SYNC_KEY) |
+#define init_sync_kiocb(x, filp) \ |
+ do { \ |
+ struct task_struct *tsk = current; \ |
+ (x)->ki_flags = 0; \ |
+ (x)->ki_users = 1; \ |
+ (x)->ki_key = KIOCB_SYNC_KEY; \ |
+ (x)->ki_filp = (filp); \ |
+ (x)->ki_ctx = &tsk->active_mm->default_kioctx; \ |
+ (x)->ki_cancel = NULL; \ |
+ (x)->ki_user_obj = tsk; \ |
+ } while (0) |
+ |
+#define AIO_RING_MAGIC 0xa10a10a1 |
+#define AIO_RING_COMPAT_FEATURES 1 |
+#define AIO_RING_INCOMPAT_FEATURES 0 |
+struct aio_ring { |
+ unsigned id; /* kernel internal index number */ |
+ unsigned nr; /* number of io_events */ |
+ unsigned head; |
+ unsigned tail; |
+ |
+ unsigned magic; |
+ unsigned compat_features; |
+ unsigned incompat_features; |
+ unsigned header_length; /* size of aio_ring */ |
+ |
+ |
+ struct io_event io_events[0]; |
+}; /* 128 bytes + ring size */ |
+ |
+#define aio_ring_avail(info, ring) (((ring)->head + (info)->nr - 1 - (ring)->tail) % (info)->nr) |
+ |
+#define AIO_RING_PAGES 8 |
+struct aio_ring_info { |
+ unsigned long mmap_base; |
+ unsigned long mmap_size; |
+ |
+ struct page **ring_pages; |
+ spinlock_t ring_lock; |
+ long nr_pages; |
+ |
+ unsigned nr, tail; |
+ |
+ struct page *internal_pages[AIO_RING_PAGES]; |
+}; |
+ |
+struct kioctx { |
+ atomic_t users; |
+ int dead; |
+ struct mm_struct *mm; |
+ |
+ /* This needs improving */ |
+ unsigned long user_id; |
+ struct kioctx *next; |
+ |
+ wait_queue_head_t wait; |
+ |
+ spinlock_t ctx_lock; |
+ |
+ int reqs_active; |
+ struct list_head active_reqs; /* used for cancellation */ |
+ struct list_head run_list; /* used for kicked reqs */ |
+ |
+ unsigned max_reqs; |
+ |
+ struct aio_ring_info ring_info; |
+ |
+ struct work_struct wq; |
+}; |
+ |
+/* prototypes */ |
+extern unsigned aio_max_size; |
+ |
+extern ssize_t FASTCALL(wait_on_sync_kiocb(struct kiocb *iocb)); |
+extern int FASTCALL(aio_put_req(struct kiocb *iocb)); |
+extern void FASTCALL(kick_iocb(struct kiocb *iocb)); |
+extern int FASTCALL(aio_complete(struct kiocb *iocb, long res, long res2)); |
+extern void FASTCALL(__put_ioctx(struct kioctx *ctx)); |
+struct mm_struct; |
+extern void FASTCALL(exit_aio(struct mm_struct *mm)); |
+extern struct kioctx *lookup_ioctx(unsigned long ctx_id); |
+extern int FASTCALL(io_submit_one(struct kioctx *ctx, |
+ struct iocb *user_iocb, struct iocb *iocb)); |
+ |
+/* semi private, but used by the 32bit emulations: */ |
+struct kioctx *lookup_ioctx(unsigned long ctx_id); |
+int FASTCALL(io_submit_one(struct kioctx *ctx, struct iocb *user_iocb, |
+ struct iocb *iocb)); |
+ |
+#define get_ioctx(kioctx) do { if (unlikely(atomic_read(&(kioctx)->users) <= 0)) BUG(); atomic_inc(&(kioctx)->users); } while (0) |
+#define put_ioctx(kioctx) do { if (unlikely(atomic_dec_and_test(&(kioctx)->users))) __put_ioctx(kioctx); else if (unlikely(atomic_read(&(kioctx)->users) < 0)) BUG(); } while (0) |
+ |
+#include <linux/aio_abi.h> |
+ |
+static inline struct kiocb *list_kiocb(struct list_head *h) |
+{ |
+ return list_entry(h, struct kiocb, ki_list); |
+} |
+ |
+/* for sysctl: */ |
+extern unsigned aio_max_nr, aio_max_size, aio_max_pinned; |
+ |
+#endif /* __LINUX__AIO_H */ |
Index: linuxc26/include/linux/rose.h |
=================================================================== |
--- linuxc26/include/linux/rose.h (nonexistent) |
+++ linuxc26/include/linux/rose.h (revision 422) |
@@ -0,0 +1,87 @@ |
+/* |
+ * 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 |
+ |
+#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 { |
+ sa_family_t srose_family; |
+ rose_address srose_addr; |
+ ax25_address srose_call; |
+ int srose_ndigis; |
+ ax25_address srose_digi; |
+}; |
+ |
+struct full_sockaddr_rose { |
+ 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 |
Index: linuxc26/include/linux/fcdevice.h |
=================================================================== |
--- linuxc26/include/linux/fcdevice.h (nonexistent) |
+++ linuxc26/include/linux/fcdevice.h (revision 422) |
@@ -0,0 +1,39 @@ |
+/* |
+ * INET An implementation of the TCP/IP protocol suite for the LINUX |
+ * operating system. NET is implemented using the BSD Socket |
+ * interface as the means of communication with the user level. |
+ * |
+ * Definitions for the Fibre Channel handlers. |
+ * |
+ * Version: @(#)fcdevice.h 1.0.0 09/26/98 |
+ * |
+ * Authors: Vineet Abraham <vma@iol.unh.edu> |
+ * |
+ * Relocated to include/linux where it belongs by Alan Cox |
+ * <gw4pts@gw4pts.ampr.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. |
+ * |
+ * WARNING: This move may well be temporary. This file will get merged with others RSN. |
+ * |
+ */ |
+#ifndef _LINUX_FCDEVICE_H |
+#define _LINUX_FCDEVICE_H |
+ |
+ |
+#include <linux/if_fc.h> |
+ |
+#ifdef __KERNEL__ |
+extern int fc_header(struct sk_buff *skb, struct net_device *dev, |
+ unsigned short type, void *daddr, |
+ void *saddr, unsigned len); |
+extern int fc_rebuild_header(struct sk_buff *skb); |
+extern unsigned short fc_type_trans(struct sk_buff *skb, struct net_device *dev); |
+ |
+extern struct net_device *alloc_fcdev(int sizeof_priv); |
+#endif |
+ |
+#endif /* _LINUX_FCDEVICE_H */ |
Index: linuxc26/include/linux/nfs2.h |
=================================================================== |
--- linuxc26/include/linux/nfs2.h (nonexistent) |
+++ linuxc26/include/linux/nfs2.h (revision 422) |
@@ -0,0 +1,74 @@ |
+/* |
+ * 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 |
+ |
+#define NFS_MNT_PROGRAM 100005 |
+#define NFS_MNT_VERSION 1 |
+#define MNTPROC_NULL 0 |
+#define MNTPROC_MNT 1 |
+#define MNTPROC_UMNT 3 |
+#define MNTPROC_UMNTALL 4 |
+ |
+#endif /* _LINUX_NFS2_H */ |
Index: linuxc26/include/linux/umsdos_fs.p |
=================================================================== |
--- linuxc26/include/linux/umsdos_fs.p (nonexistent) |
+++ linuxc26/include/linux/umsdos_fs.p (revision 422) |
@@ -0,0 +1,100 @@ |
+/* check.c 23/01/95 03.38.30 */ |
+void check_page_tables (void); |
+ |
+/* dir.c 22/06/95 00.22.12 */ |
+int dummy_dir_read ( struct file *filp, |
+ char *buf, |
+ size_t size, |
+ loff_t *count); |
+char * umsdos_d_path(struct dentry *, char *, int); |
+void umsdos_lookup_patch_new(struct dentry *, struct umsdos_info *); |
+int umsdos_is_pseudodos (struct inode *dir, struct dentry *dentry); |
+struct dentry *umsdos_lookup_x ( struct inode *dir, struct dentry *dentry, int nopseudo); |
+struct dentry *UMSDOS_lookup(struct inode *, struct dentry *, struct nameidata *); |
+struct dentry *umsdos_lookup_dentry(struct dentry *, char *, int, int); |
+struct dentry *umsdos_covered(struct dentry *, char *, int); |
+ |
+struct dentry *umsdos_solve_hlink (struct dentry *hlink); |
+ |
+/* emd.c 22/06/95 00.22.04 */ |
+struct dentry *umsdos_get_emd_dentry(struct dentry *); |
+int umsdos_have_emd(struct dentry *); |
+int umsdos_make_emd(struct dentry *); |
+int umsdos_emd_dir_readentry (struct dentry *, loff_t *, struct umsdos_dirent *); |
+int umsdos_newentry (struct dentry *, struct umsdos_info *); |
+int umsdos_newhidden (struct dentry *, struct umsdos_info *); |
+int umsdos_delentry (struct dentry *, struct umsdos_info *, int); |
+int umsdos_findentry (struct dentry *, struct umsdos_info *, int); |
+int umsdos_isempty (struct dentry *); |
+int umsdos_writeentry (struct dentry *, struct umsdos_info *, int); |
+ |
+/* file.c 25/01/95 02.25.38 */ |
+ |
+/* inode.c 12/06/95 09.49.40 */ |
+void fill_new_filp (struct file *filp, struct dentry *dentry); |
+void UMSDOS_read_inode (struct inode *); |
+void UMSDOS_write_inode (struct inode *, int); |
+int UMSDOS_notify_change (struct dentry *, struct iattr *attr); |
+int umsdos_notify_change_locked(struct dentry *, struct iattr *attr); |
+void UMSDOS_put_inode (struct inode *); |
+int UMSDOS_statfs (struct super_block *, struct statfs *); |
+struct super_block *UMSDOS_read_super (struct super_block *, void *, int); |
+void UMSDOS_put_super (struct super_block *); |
+ |
+void umsdos_setup_dir(struct dentry *); |
+void umsdos_set_dirinfo_new(struct dentry *, off_t); |
+void umsdos_patch_dentry_inode (struct dentry *, off_t); |
+int umsdos_get_dirowner (struct inode *inode, struct inode **result); |
+ |
+/* ioctl.c 22/06/95 00.22.08 */ |
+int UMSDOS_ioctl_dir (struct inode *dir, |
+ struct file *filp, |
+ unsigned int cmd, |
+ unsigned long data); |
+ |
+/* mangle.c 25/01/95 02.25.38 */ |
+void umsdos_manglename (struct umsdos_info *info); |
+int umsdos_evalrecsize (int len); |
+int umsdos_parse (const char *name,int len, struct umsdos_info *info); |
+ |
+/* namei.c 25/01/95 02.25.38 */ |
+void umsdos_lockcreate (struct inode *dir); |
+void umsdos_startlookup (struct inode *dir); |
+void umsdos_unlockcreate (struct inode *dir); |
+void umsdos_endlookup (struct inode *dir); |
+ |
+int umsdos_readlink_x ( struct dentry *dentry, |
+ char *buffer, |
+ int bufsiz); |
+int UMSDOS_symlink (struct inode *dir, |
+ struct dentry *dentry, |
+ const char *symname); |
+int UMSDOS_link (struct dentry *olddentry, |
+ struct inode *dir, |
+ struct dentry *dentry); |
+int UMSDOS_create (struct inode *dir, |
+ struct dentry *dentry, |
+ int mode); |
+ |
+int UMSDOS_mkdir (struct inode *dir, |
+ struct dentry *dentry, |
+ int mode); |
+int UMSDOS_mknod (struct inode *dir, |
+ struct dentry *dentry, |
+ int mode, |
+ dev_t rdev); |
+int UMSDOS_rmdir (struct inode *dir,struct dentry *dentry); |
+int UMSDOS_unlink (struct inode *dir, struct dentry *dentry); |
+int UMSDOS_rename (struct inode *old_dir, |
+ struct dentry *old_dentry, |
+ struct inode *new_dir, |
+ struct dentry *new_dentry); |
+ |
+/* rdir.c 22/03/95 03.31.42 */ |
+struct dentry *umsdos_rlookup_x (struct inode *dir, struct dentry *dentry, int nopseudo); |
+struct dentry *UMSDOS_rlookup (struct inode *dir, struct dentry *dentry, struct nameidata *nd); |
+ |
+static inline struct umsdos_inode_info *UMSDOS_I(struct inode *inode) |
+{ |
+ return &inode->u.umsdos_i; |
+} |
Index: linuxc26/include/linux/x25.h |
=================================================================== |
--- linuxc26/include/linux/x25.h (nonexistent) |
+++ linuxc26/include/linux/x25.h (revision 422) |
@@ -0,0 +1,112 @@ |
+/* |
+ * These are the public elements of the Linux kernel X.25 implementation. |
+ * |
+ * History |
+ * mar/20/00 Daniela Squassoni Disabling/enabling of facilities |
+ * negotiation. |
+ */ |
+ |
+#ifndef X25_KERNEL_H |
+#define X25_KERNEL_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) |
+ |
+/* |
+ * 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 { |
+ 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 |
+ |
+ |
+ |
+/* |
+ * 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; |
+}; |
+ |
+/* |
+ * 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; |
+}; |
+ |
+#endif |
Index: linuxc26/include/linux/romfs_fs.h |
=================================================================== |
--- linuxc26/include/linux/romfs_fs.h (nonexistent) |
+++ linuxc26/include/linux/romfs_fs.h (revision 422) |
@@ -0,0 +1,61 @@ |
+#ifndef __LINUX_ROMFS_FS_H |
+#define __LINUX_ROMFS_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) htonl(__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 { |
+ __u32 word0; |
+ __u32 word1; |
+ __u32 size; |
+ __u32 checksum; |
+ char name[0]; /* volume name */ |
+}; |
+ |
+/* On disk inode */ |
+ |
+struct romfs_inode { |
+ __u32 next; /* low 4 bits see ROMFH_ */ |
+ __u32 spec; |
+ __u32 size; |
+ __u32 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) |
+ |
+#ifdef __KERNEL__ |
+ |
+/* Not much now */ |
+ |
+#endif /* __KERNEL__ */ |
+#endif |
Index: linuxc26/include/linux/amifdreg.h |
=================================================================== |
--- linuxc26/include/linux/amifdreg.h (nonexistent) |
+++ linuxc26/include/linux/amifdreg.h (revision 422) |
@@ -0,0 +1,81 @@ |
+#ifndef _LINUX_AMIFDREG_H |
+#define _LINUX_AMIFDREG_H |
+ |
+/* |
+** CIAAPRA bits (read only) |
+*/ |
+ |
+#define DSKRDY (0x1<<5) /* disk ready when low */ |
+#define DSKTRACK0 (0x1<<4) /* head at track zero when low */ |
+#define DSKPROT (0x1<<3) /* disk protected when low */ |
+#define DSKCHANGE (0x1<<2) /* low when disk removed */ |
+ |
+/* |
+** CIAAPRB bits (read/write) |
+*/ |
+ |
+#define DSKMOTOR (0x1<<7) /* motor on when low */ |
+#define DSKSEL3 (0x1<<6) /* select drive 3 when low */ |
+#define DSKSEL2 (0x1<<5) /* select drive 2 when low */ |
+#define DSKSEL1 (0x1<<4) /* select drive 1 when low */ |
+#define DSKSEL0 (0x1<<3) /* select drive 0 when low */ |
+#define DSKSIDE (0x1<<2) /* side selection: 0 = upper, 1 = lower */ |
+#define DSKDIREC (0x1<<1) /* step direction: 0=in, 1=out (to trk 0) */ |
+#define DSKSTEP (0x1) /* pulse low to step head 1 track */ |
+ |
+/* |
+** DSKBYTR bits (read only) |
+*/ |
+ |
+#define DSKBYT (1<<15) /* register contains valid byte when set */ |
+#define DMAON (1<<14) /* disk DMA enabled */ |
+#define DISKWRITE (1<<13) /* disk write bit in DSKLEN enabled */ |
+#define WORDEQUAL (1<<12) /* DSKSYNC register match when true */ |
+/* bits 7-0 are data */ |
+ |
+/* |
+** ADKCON/ADKCONR bits |
+*/ |
+ |
+#ifndef SETCLR |
+#define ADK_SETCLR (1<<15) /* control bit */ |
+#endif |
+#define ADK_PRECOMP1 (1<<14) /* precompensation selection */ |
+#define ADK_PRECOMP0 (1<<13) /* 00=none, 01=140ns, 10=280ns, 11=500ns */ |
+#define ADK_MFMPREC (1<<12) /* 0=GCR precomp., 1=MFM precomp. */ |
+#define ADK_WORDSYNC (1<<10) /* enable DSKSYNC auto DMA */ |
+#define ADK_MSBSYNC (1<<9) /* when 1, enable sync on MSbit (for GCR) */ |
+#define ADK_FAST (1<<8) /* bit cell: 0=2us (GCR), 1=1us (MFM) */ |
+ |
+/* |
+** DSKLEN bits |
+*/ |
+ |
+#define DSKLEN_DMAEN (1<<15) |
+#define DSKLEN_WRITE (1<<14) |
+ |
+/* |
+** INTENA/INTREQ bits |
+*/ |
+ |
+#define DSKINDEX (0x1<<4) /* DSKINDEX bit */ |
+ |
+/* |
+** Misc |
+*/ |
+ |
+#define MFM_SYNC 0x4489 /* standard MFM sync value */ |
+ |
+/* 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 */ |
+ |
+#endif /* _LINUX_AMIFDREG_H */ |
Index: linuxc26/include/linux/cdev.h |
=================================================================== |
--- linuxc26/include/linux/cdev.h (nonexistent) |
+++ linuxc26/include/linux/cdev.h (revision 422) |
@@ -0,0 +1,29 @@ |
+#ifndef _LINUX_CDEV_H |
+#define _LINUX_CDEV_H |
+#ifdef __KERNEL__ |
+ |
+struct cdev { |
+ struct kobject kobj; |
+ struct module *owner; |
+ struct file_operations *ops; |
+ struct list_head list; |
+}; |
+ |
+void cdev_init(struct cdev *, struct file_operations *); |
+ |
+struct cdev *cdev_alloc(void); |
+ |
+void cdev_put(struct cdev *p); |
+ |
+struct kobject *cdev_get(struct cdev *); |
+ |
+int cdev_add(struct cdev *, dev_t, unsigned); |
+ |
+void cdev_del(struct cdev *); |
+ |
+void cdev_unmap(dev_t, unsigned); |
+ |
+void cd_forget(struct inode *); |
+ |
+#endif |
+#endif |
Index: linuxc26/include/linux/ipv6.h |
=================================================================== |
--- linuxc26/include/linux/ipv6.h (nonexistent) |
+++ linuxc26/include/linux/ipv6.h (revision 422) |
@@ -0,0 +1,286 @@ |
+#ifndef _IPV6_H |
+#define _IPV6_H |
+ |
+#include <linux/config.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 in6_ifreq { |
+ struct in6_addr ifr6_addr; |
+ __u32 ifr6_prefixlen; |
+ int ifr6_ifindex; |
+}; |
+ |
+#define IPV6_SRCRT_STRICT 0x01 /* this hop must be a neighbor */ |
+#define IPV6_SRCRT_TYPE_0 0 /* IPv6 type 0 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. |
+ */ |
+}; |
+ |
+#define ipv6_destopt_hdr ipv6_opt_hdr |
+#define ipv6_hopopt_hdr ipv6_opt_hdr |
+ |
+#ifdef __KERNEL__ |
+#define ipv6_optlen(p) (((p)->hdrlen+1) << 3) |
+#endif |
+ |
+/* |
+ * routing header type 0 (used in cmsghdr struct) |
+ */ |
+ |
+struct rt0_hdr { |
+ struct ipv6_rt_hdr rt_hdr; |
+ __u32 bitmap; /* strict/loose bit map */ |
+ struct in6_addr addr[0]; |
+ |
+#define rt0_type rt_hdr.type |
+}; |
+ |
+struct ipv6_auth_hdr { |
+ __u8 nexthdr; |
+ __u8 hdrlen; /* This one is measured in 32 bit units! */ |
+ __u16 reserved; |
+ __u32 spi; |
+ __u32 seq_no; /* Sequence number */ |
+ __u8 auth_data[0]; /* Length variable but >=4. Mind the 64 bit alignment! */ |
+}; |
+ |
+struct ipv6_esp_hdr { |
+ __u32 spi; |
+ __u32 seq_no; /* Sequence number */ |
+ __u8 enc_data[0]; /* Length variable but >=8. Mind the 64 bit alignment! */ |
+}; |
+ |
+struct ipv6_comp_hdr { |
+ __u8 nexthdr; |
+ __u8 flags; |
+ __u16 cpi; |
+}; |
+ |
+/* |
+ * 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]; |
+ |
+ __u16 payload_len; |
+ __u8 nexthdr; |
+ __u8 hop_limit; |
+ |
+ struct in6_addr saddr; |
+ struct in6_addr daddr; |
+}; |
+ |
+/* |
+ * This structure contains configuration options per IPv6 link. |
+ */ |
+struct ipv6_devconf { |
+ __s32 forwarding; |
+ __s32 hop_limit; |
+ __s32 mtu6; |
+ __s32 accept_ra; |
+ __s32 accept_redirects; |
+ __s32 autoconf; |
+ __s32 dad_transmits; |
+ __s32 rtr_solicits; |
+ __s32 rtr_solicit_interval; |
+ __s32 rtr_solicit_delay; |
+#ifdef CONFIG_IPV6_PRIVACY |
+ __s32 use_tempaddr; |
+ __s32 temp_valid_lft; |
+ __s32 temp_prefered_lft; |
+ __s32 regen_max_retry; |
+ __s32 max_desync_factor; |
+#endif |
+ void *sysctl; |
+}; |
+ |
+/* 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, |
+#ifdef CONFIG_IPV6_PRIVACY |
+ DEVCONF_USE_TEMPADDR, |
+ DEVCONF_TEMP_VALID_LFT, |
+ DEVCONF_TEMP_PREFERED_LFT, |
+ DEVCONF_REGEN_MAX_RETRY, |
+ DEVCONF_MAX_DESYNC_FACTOR, |
+#endif |
+ DEVCONF_MAX |
+}; |
+ |
+#ifdef __KERNEL__ |
+#include <linux/in6.h> /* struct sockaddr_in6 */ |
+#include <linux/icmpv6.h> |
+#include <net/if_inet6.h> /* struct ipv6_mc_socklist */ |
+#include <linux/tcp.h> |
+#include <linux/udp.h> |
+ |
+/* |
+ This structure contains results of exthdrs parsing |
+ as offsets from skb->nh. |
+ */ |
+ |
+struct inet6_skb_parm |
+{ |
+ int iif; |
+ __u16 ra; |
+ __u16 hop; |
+ __u16 auth; |
+ __u16 dst0; |
+ __u16 srcrt; |
+ __u16 dst1; |
+}; |
+ |
+struct ipv6_pinfo { |
+ struct in6_addr saddr; |
+ struct in6_addr rcv_saddr; |
+ struct in6_addr daddr; |
+ struct in6_addr *daddr_cache; |
+ |
+ __u32 flow_label; |
+ __u32 frag_size; |
+ int hop_limit; |
+ int mcast_hops; |
+ int mcast_oif; |
+ |
+ /* pktoption flags */ |
+ union { |
+ struct { |
+ __u8 srcrt:2, |
+ rxinfo:1, |
+ rxhlim:1, |
+ hopopts:1, |
+ dstopts:1, |
+ authhdr:1, |
+ rxflow:1; |
+ } bits; |
+ __u8 all; |
+ } rxopt; |
+ |
+ /* sockopt flags */ |
+ __u8 mc_loop:1, |
+ recverr:1, |
+ sndflow:1, |
+ pmtudisc:2, |
+ ipv6only:1; |
+ |
+ struct ipv6_mc_socklist *ipv6_mc_list; |
+ struct ipv6_ac_socklist *ipv6_ac_list; |
+ struct ipv6_fl_socklist *ipv6_fl_list; |
+ __u32 dst_cookie; |
+ |
+ struct ipv6_txoptions *opt; |
+ struct sk_buff *pktoptions; |
+ struct { |
+ struct ipv6_txoptions *opt; |
+ struct rt6_info *rt; |
+ int hop_limit; |
+ } cork; |
+}; |
+ |
+struct raw6_opt { |
+ __u32 checksum; /* perform checksum */ |
+ __u32 offset; /* checksum offset */ |
+ |
+ struct icmp6_filter filter; |
+}; |
+ |
+/* WARNING: don't change the layout of the members in {raw,udp,tcp}6_sock! */ |
+struct raw6_sock { |
+ struct sock sk; |
+ struct ipv6_pinfo *pinet6; |
+ struct inet_opt inet; |
+ struct raw6_opt raw6; |
+ struct ipv6_pinfo inet6; |
+}; |
+ |
+struct udp6_sock { |
+ struct sock sk; |
+ struct ipv6_pinfo *pinet6; |
+ struct inet_opt inet; |
+ struct udp_opt udp; |
+ struct ipv6_pinfo inet6; |
+}; |
+ |
+struct tcp6_sock { |
+ struct sock sk; |
+ struct ipv6_pinfo *pinet6; |
+ struct inet_opt inet; |
+ struct tcp_opt tcp; |
+ struct ipv6_pinfo inet6; |
+}; |
+ |
+#define inet6_sk(__sk) ((struct raw6_sock *)__sk)->pinet6 |
+#define raw6_sk(__sk) (&((struct raw6_sock *)__sk)->raw6) |
+ |
+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) |
+#define __ipv6_only_sock(sk) (inet6_sk(sk)->ipv6only) |
+#define ipv6_only_sock(sk) ((sk)->sk_family == PF_INET6 && __ipv6_only_sock(sk)) |
+#else |
+#define __ipv6_only_sock(sk) 0 |
+#define ipv6_only_sock(sk) 0 |
+#endif |
+ |
+#endif |
+ |
+#endif |
Index: linuxc26/include/linux/vmalloc.h |
=================================================================== |
--- linuxc26/include/linux/vmalloc.h (nonexistent) |
+++ linuxc26/include/linux/vmalloc.h (revision 422) |
@@ -0,0 +1,49 @@ |
+#ifndef _LINUX_VMALLOC_H |
+#define _LINUX_VMALLOC_H |
+ |
+#include <linux/spinlock.h> |
+#include <asm/page.h> /* pgprot_t */ |
+ |
+/* bits in vm_struct->flags */ |
+#define VM_IOREMAP 0x00000001 /* ioremap() and friends */ |
+#define VM_ALLOC 0x00000002 /* vmalloc() */ |
+#define VM_MAP 0x00000004 /* vmap()ed pages */ |
+ |
+struct vm_struct { |
+ void *addr; |
+ unsigned long size; |
+ unsigned long flags; |
+ struct page **pages; |
+ unsigned int nr_pages; |
+ unsigned long phys_addr; |
+ struct vm_struct *next; |
+}; |
+ |
+/* |
+ * Highlevel APIs for driver use |
+ */ |
+extern void *vmalloc(unsigned long size); |
+extern void *vmalloc_32(unsigned long size); |
+extern void *__vmalloc(unsigned long size, int gfp_mask, pgprot_t prot); |
+extern void vfree(void *addr); |
+ |
+extern void *vmap(struct page **pages, unsigned int count, |
+ unsigned long flags, pgprot_t prot); |
+extern void vunmap(void *addr); |
+ |
+/* |
+ * Lowlevel-APIs (not for driver use!) |
+ */ |
+extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags); |
+extern struct vm_struct *remove_vm_area(void *addr); |
+extern int map_vm_area(struct vm_struct *area, pgprot_t prot, |
+ struct page ***pages); |
+extern void unmap_vm_area(struct vm_struct *area); |
+ |
+/* |
+ * Internals. Dont't use.. |
+ */ |
+extern rwlock_t vmlist_lock; |
+extern struct vm_struct *vmlist; |
+ |
+#endif /* _LINUX_VMALLOC_H */ |
Index: linuxc26/include/linux/i2c-vid.h |
=================================================================== |
--- linuxc26/include/linux/i2c-vid.h (nonexistent) |
+++ linuxc26/include/linux/i2c-vid.h (revision 422) |
@@ -0,0 +1,62 @@ |
+/* |
+ i2c-vid.h - Part of lm_sensors, Linux kernel modules for hardware |
+ monitoring |
+ Copyright (c) 2002 Mark D. Studebaker <mdsxyz123@yahoo.com> |
+ With assistance from Trent Piepho <xyzzy@speakeasy.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., 675 Mass Ave, Cambridge, MA 02139, USA. |
+*/ |
+ |
+/* |
+ This file contains common code for decoding VID pins. |
+ This file is #included in various chip drivers in this directory. |
+ As the user is unlikely to load more than one driver which |
+ includes this code we don't worry about the wasted space. |
+ Reference: VRM x.y DC-DC Converter Design Guidelines, |
+ available at http://developer.intel.com |
+*/ |
+ |
+/* |
+ Legal val values 00 - 1F. |
+ vrm is the Intel VRM document version. |
+ Note: vrm version is scaled by 10 and the return value is scaled by 1000 |
+ to avoid floating point in the kernel. |
+*/ |
+ |
+#define DEFAULT_VRM 82 |
+ |
+static inline int vid_from_reg(int val, int vrm) |
+{ |
+ switch(vrm) { |
+ |
+ case 91: /* VRM 9.1 */ |
+ case 90: /* VRM 9.0 */ |
+ return(val == 0x1f ? 0 : |
+ 1850 - val * 25); |
+ |
+ case 85: /* VRM 8.5 */ |
+ return((val & 0x10 ? 25 : 0) + |
+ ((val & 0x0f) > 0x04 ? 2050 : 1250) - |
+ ((val & 0x0f) * 50)); |
+ |
+ case 84: /* VRM 8.4 */ |
+ val &= 0x0f; |
+ /* fall through */ |
+ default: /* VRM 8.2 */ |
+ return(val == 0x1f ? 0 : |
+ val & 0x10 ? 5100 - (val) * 100 : |
+ 2050 - (val) * 50); |
+ } |
+} |
Index: linuxc26/include/linux/ext3_fs_sb.h |
=================================================================== |
--- linuxc26/include/linux/ext3_fs_sb.h (nonexistent) |
+++ linuxc26/include/linux/ext3_fs_sb.h (revision 422) |
@@ -0,0 +1,73 @@ |
+/* |
+ * linux/include/linux/ext3_fs_sb.h |
+ * |
+ * Copyright (C) 1992, 1993, 1994, 1995 |
+ * Remy Card (card@masi.ibp.fr) |
+ * Laboratoire MASI - Institut Blaise Pascal |
+ * Universite Pierre et Marie Curie (Paris VI) |
+ * |
+ * from |
+ * |
+ * linux/include/linux/minix_fs_sb.h |
+ * |
+ * Copyright (C) 1991, 1992 Linus Torvalds |
+ */ |
+ |
+#ifndef _LINUX_EXT3_FS_SB |
+#define _LINUX_EXT3_FS_SB |
+ |
+#ifdef __KERNEL__ |
+#include <linux/timer.h> |
+#include <linux/wait.h> |
+#include <linux/blockgroup_lock.h> |
+#include <linux/percpu_counter.h> |
+#endif |
+ |
+/* |
+ * third extended-fs super-block data in memory |
+ */ |
+struct ext3_sb_info { |
+ unsigned long s_frag_size; /* Size of a fragment in bytes */ |
+ unsigned long s_frags_per_block;/* Number of fragments per block */ |
+ unsigned long s_inodes_per_block;/* Number of inodes per block */ |
+ unsigned long s_frags_per_group;/* Number of fragments in a group */ |
+ unsigned long s_blocks_per_group;/* Number of blocks in a group */ |
+ unsigned long s_inodes_per_group;/* Number of inodes in a group */ |
+ unsigned long s_itb_per_group; /* Number of inode table blocks per group */ |
+ unsigned long s_gdb_count; /* Number of group descriptor blocks */ |
+ unsigned long s_desc_per_block; /* Number of group descriptors per block */ |
+ unsigned long s_groups_count; /* Number of groups in the fs */ |
+ struct buffer_head * s_sbh; /* Buffer containing the super block */ |
+ struct ext3_super_block * s_es; /* Pointer to the super block in the buffer */ |
+ struct buffer_head ** s_group_desc; |
+ unsigned long s_mount_opt; |
+ uid_t s_resuid; |
+ gid_t s_resgid; |
+ unsigned short s_mount_state; |
+ unsigned short s_pad; |
+ int s_addr_per_block_bits; |
+ int s_desc_per_block_bits; |
+ int s_inode_size; |
+ int s_first_ino; |
+ u32 s_next_generation; |
+ u32 s_hash_seed[4]; |
+ int s_def_hash_version; |
+ u8 *s_debts; |
+ struct percpu_counter s_freeblocks_counter; |
+ struct percpu_counter s_freeinodes_counter; |
+ struct percpu_counter s_dirs_counter; |
+ struct blockgroup_lock s_blockgroup_lock; |
+ |
+ /* Journaling */ |
+ struct inode * s_journal_inode; |
+ struct journal_s * s_journal; |
+ struct list_head s_orphan; |
+ unsigned long s_commit_interval; |
+ struct block_device *journal_bdev; |
+#ifdef CONFIG_JBD_DEBUG |
+ struct timer_list turn_ro_timer; /* For turning read-only (crash simulation) */ |
+ wait_queue_head_t ro_wait_queue; /* For people waiting for the fs to go read-only */ |
+#endif |
+}; |
+ |
+#endif /* _LINUX_EXT3_FS_SB */ |
Index: linuxc26/include/linux/wait.h |
=================================================================== |
--- linuxc26/include/linux/wait.h (nonexistent) |
+++ linuxc26/include/linux/wait.h (revision 422) |
@@ -0,0 +1,263 @@ |
+#ifndef _LINUX_WAIT_H |
+#define _LINUX_WAIT_H |
+ |
+#define WNOHANG 0x00000001 |
+#define WUNTRACED 0x00000002 |
+ |
+#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 */ |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/config.h> |
+#include <linux/list.h> |
+#include <linux/stddef.h> |
+#include <linux/spinlock.h> |
+#include <asm/system.h> |
+ |
+typedef struct __wait_queue wait_queue_t; |
+typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int sync); |
+extern int default_wake_function(wait_queue_t *wait, unsigned mode, int sync); |
+ |
+struct __wait_queue { |
+ unsigned int flags; |
+#define WQ_FLAG_EXCLUSIVE 0x01 |
+ struct task_struct * task; |
+ wait_queue_func_t func; |
+ struct list_head task_list; |
+}; |
+ |
+struct __wait_queue_head { |
+ spinlock_t lock; |
+ struct list_head task_list; |
+}; |
+typedef struct __wait_queue_head wait_queue_head_t; |
+ |
+ |
+/* |
+ * Macros for declaration and initialisaton of the datatypes |
+ */ |
+ |
+#define __WAITQUEUE_INITIALIZER(name, tsk) { \ |
+ .task = tsk, \ |
+ .func = default_wake_function, \ |
+ .task_list = { NULL, NULL } } |
+ |
+#define DECLARE_WAITQUEUE(name, tsk) \ |
+ wait_queue_t name = __WAITQUEUE_INITIALIZER(name, tsk) |
+ |
+#define __WAIT_QUEUE_HEAD_INITIALIZER(name) { \ |
+ .lock = SPIN_LOCK_UNLOCKED, \ |
+ .task_list = { &(name).task_list, &(name).task_list } } |
+ |
+#define DECLARE_WAIT_QUEUE_HEAD(name) \ |
+ wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name) |
+ |
+static inline void init_waitqueue_head(wait_queue_head_t *q) |
+{ |
+ q->lock = SPIN_LOCK_UNLOCKED; |
+ INIT_LIST_HEAD(&q->task_list); |
+} |
+ |
+static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p) |
+{ |
+ q->flags = 0; |
+ q->task = p; |
+ q->func = default_wake_function; |
+} |
+ |
+static inline void init_waitqueue_func_entry(wait_queue_t *q, |
+ wait_queue_func_t func) |
+{ |
+ q->flags = 0; |
+ q->task = NULL; |
+ q->func = func; |
+} |
+ |
+static inline int waitqueue_active(wait_queue_head_t *q) |
+{ |
+ return !list_empty(&q->task_list); |
+} |
+ |
+extern void FASTCALL(add_wait_queue(wait_queue_head_t *q, wait_queue_t * wait)); |
+extern void FASTCALL(add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait)); |
+extern void FASTCALL(remove_wait_queue(wait_queue_head_t *q, wait_queue_t * wait)); |
+ |
+static inline void __add_wait_queue(wait_queue_head_t *head, wait_queue_t *new) |
+{ |
+ list_add(&new->task_list, &head->task_list); |
+} |
+ |
+/* |
+ * Used for wake-one threads: |
+ */ |
+static inline void __add_wait_queue_tail(wait_queue_head_t *head, |
+ wait_queue_t *new) |
+{ |
+ list_add_tail(&new->task_list, &head->task_list); |
+} |
+ |
+static inline void __remove_wait_queue(wait_queue_head_t *head, |
+ wait_queue_t *old) |
+{ |
+ list_del(&old->task_list); |
+} |
+ |
+extern void FASTCALL(__wake_up(wait_queue_head_t *q, unsigned int mode, int nr)); |
+extern void FASTCALL(__wake_up_locked(wait_queue_head_t *q, unsigned int mode)); |
+extern void FASTCALL(__wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr)); |
+ |
+#define wake_up(x) __wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 1) |
+#define wake_up_nr(x, nr) __wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, nr) |
+#define wake_up_all(x) __wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 0) |
+#define wake_up_all_sync(x) __wake_up_sync((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 0) |
+#define wake_up_interruptible(x) __wake_up((x),TASK_INTERRUPTIBLE, 1) |
+#define wake_up_interruptible_nr(x, nr) __wake_up((x),TASK_INTERRUPTIBLE, nr) |
+#define wake_up_interruptible_all(x) __wake_up((x),TASK_INTERRUPTIBLE, 0) |
+#define wake_up_locked(x) __wake_up_locked((x), TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE) |
+#define wake_up_interruptible_sync(x) __wake_up_sync((x),TASK_INTERRUPTIBLE, 1) |
+ |
+#define __wait_event(wq, condition) \ |
+do { \ |
+ wait_queue_t __wait; \ |
+ init_waitqueue_entry(&__wait, current); \ |
+ \ |
+ add_wait_queue(&wq, &__wait); \ |
+ for (;;) { \ |
+ set_current_state(TASK_UNINTERRUPTIBLE); \ |
+ if (condition) \ |
+ break; \ |
+ schedule(); \ |
+ } \ |
+ current->state = TASK_RUNNING; \ |
+ remove_wait_queue(&wq, &__wait); \ |
+} while (0) |
+ |
+#define wait_event(wq, condition) \ |
+do { \ |
+ if (condition) \ |
+ break; \ |
+ __wait_event(wq, condition); \ |
+} while (0) |
+ |
+#define __wait_event_interruptible(wq, condition, ret) \ |
+do { \ |
+ wait_queue_t __wait; \ |
+ init_waitqueue_entry(&__wait, current); \ |
+ \ |
+ add_wait_queue(&wq, &__wait); \ |
+ for (;;) { \ |
+ set_current_state(TASK_INTERRUPTIBLE); \ |
+ if (condition) \ |
+ break; \ |
+ if (!signal_pending(current)) { \ |
+ schedule(); \ |
+ continue; \ |
+ } \ |
+ ret = -ERESTARTSYS; \ |
+ break; \ |
+ } \ |
+ current->state = TASK_RUNNING; \ |
+ remove_wait_queue(&wq, &__wait); \ |
+} while (0) |
+ |
+#define wait_event_interruptible(wq, condition) \ |
+({ \ |
+ int __ret = 0; \ |
+ if (!(condition)) \ |
+ __wait_event_interruptible(wq, condition, __ret); \ |
+ __ret; \ |
+}) |
+ |
+#define __wait_event_interruptible_timeout(wq, condition, ret) \ |
+do { \ |
+ wait_queue_t __wait; \ |
+ init_waitqueue_entry(&__wait, current); \ |
+ \ |
+ add_wait_queue(&wq, &__wait); \ |
+ for (;;) { \ |
+ set_current_state(TASK_INTERRUPTIBLE); \ |
+ if (condition) \ |
+ break; \ |
+ if (!signal_pending(current)) { \ |
+ ret = schedule_timeout(ret); \ |
+ if (!ret) \ |
+ break; \ |
+ continue; \ |
+ } \ |
+ ret = -ERESTARTSYS; \ |
+ break; \ |
+ } \ |
+ current->state = TASK_RUNNING; \ |
+ remove_wait_queue(&wq, &__wait); \ |
+} while (0) |
+ |
+#define wait_event_interruptible_timeout(wq, condition, timeout) \ |
+({ \ |
+ long __ret = timeout; \ |
+ if (!(condition)) \ |
+ __wait_event_interruptible_timeout(wq, condition, __ret); \ |
+ __ret; \ |
+}) |
+ |
+/* |
+ * Must be called with the spinlock in the wait_queue_head_t held. |
+ */ |
+static inline void add_wait_queue_exclusive_locked(wait_queue_head_t *q, |
+ wait_queue_t * wait) |
+{ |
+ wait->flags |= WQ_FLAG_EXCLUSIVE; |
+ __add_wait_queue_tail(q, wait); |
+} |
+ |
+/* |
+ * Must be called with the spinlock in the wait_queue_head_t held. |
+ */ |
+static inline void remove_wait_queue_locked(wait_queue_head_t *q, |
+ wait_queue_t * wait) |
+{ |
+ __remove_wait_queue(q, wait); |
+} |
+ |
+/* |
+ * These are the old interfaces to sleep waiting for an event. |
+ * They are racy. DO NOT use them, use the wait_event* interfaces above. |
+ * We plan to remove these interfaces during 2.7. |
+ */ |
+extern void FASTCALL(sleep_on(wait_queue_head_t *q)); |
+extern long FASTCALL(sleep_on_timeout(wait_queue_head_t *q, |
+ signed long timeout)); |
+extern void FASTCALL(interruptible_sleep_on(wait_queue_head_t *q)); |
+extern long FASTCALL(interruptible_sleep_on_timeout(wait_queue_head_t *q, |
+ signed long timeout)); |
+ |
+/* |
+ * Waitqueues which are removed from the waitqueue_head at wakeup time |
+ */ |
+void FASTCALL(prepare_to_wait(wait_queue_head_t *q, |
+ wait_queue_t *wait, int state)); |
+void FASTCALL(prepare_to_wait_exclusive(wait_queue_head_t *q, |
+ wait_queue_t *wait, int state)); |
+void FASTCALL(finish_wait(wait_queue_head_t *q, wait_queue_t *wait)); |
+int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync); |
+ |
+#define DEFINE_WAIT(name) \ |
+ wait_queue_t name = { \ |
+ .task = current, \ |
+ .func = autoremove_wake_function, \ |
+ .task_list = { .next = &name.task_list, \ |
+ .prev = &name.task_list, \ |
+ }, \ |
+ } |
+ |
+#define init_wait(wait) \ |
+ do { \ |
+ wait->task = current; \ |
+ wait->func = autoremove_wake_function; \ |
+ INIT_LIST_HEAD(&wait->task_list); \ |
+ } while (0) |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif |
Index: linuxc26/include/linux/netrom.h |
=================================================================== |
--- linuxc26/include/linux/netrom.h (nonexistent) |
+++ linuxc26/include/linux/netrom.h (revision 422) |
@@ -0,0 +1,34 @@ |
+/* |
+ * 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 |
+ |
+#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 |
Index: linuxc26/include/linux/string.h |
=================================================================== |
--- linuxc26/include/linux/string.h (nonexistent) |
+++ linuxc26/include/linux/string.h (revision 422) |
@@ -0,0 +1,92 @@ |
+#ifndef _LINUX_STRING_H_ |
+#define _LINUX_STRING_H_ |
+ |
+/* We don't want strings.h stuff being user by user stuff by accident */ |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/types.h> /* for size_t */ |
+#include <linux/stddef.h> /* for NULL */ |
+ |
+#ifdef __cplusplus |
+extern "C" { |
+#endif |
+ |
+extern char * strpbrk(const char *,const char *); |
+extern char * strsep(char **,const char *); |
+extern __kernel_size_t strspn(const char *,const char *); |
+extern __kernel_size_t strcspn(const char *,const char *); |
+ |
+/* |
+ * Include machine specific inline routines |
+ */ |
+#include <asm/string.h> |
+ |
+#ifndef __HAVE_ARCH_STRCPY |
+extern char * strcpy(char *,const char *); |
+#endif |
+#ifndef __HAVE_ARCH_STRNCPY |
+extern char * strncpy(char *,const char *, __kernel_size_t); |
+#endif |
+#ifndef __HAVE_ARCH_STRLCPY |
+size_t strlcpy(char *, const char *, size_t); |
+#endif |
+#ifndef __HAVE_ARCH_STRCAT |
+extern char * strcat(char *, const char *); |
+#endif |
+#ifndef __HAVE_ARCH_STRNCAT |
+extern char * strncat(char *, const char *, __kernel_size_t); |
+#endif |
+#ifndef __HAVE_ARCH_STRLCAT |
+extern size_t strlcat(char *, const char *, __kernel_size_t); |
+#endif |
+#ifndef __HAVE_ARCH_STRCMP |
+extern int strcmp(const char *,const char *); |
+#endif |
+#ifndef __HAVE_ARCH_STRNCMP |
+extern int strncmp(const char *,const char *,__kernel_size_t); |
+#endif |
+#ifndef __HAVE_ARCH_STRNICMP |
+extern int strnicmp(const char *, const char *, __kernel_size_t); |
+#endif |
+#ifndef __HAVE_ARCH_STRCHR |
+extern char * strchr(const char *,int); |
+#endif |
+#ifndef __HAVE_ARCH_STRRCHR |
+extern char * strrchr(const char *,int); |
+#endif |
+#ifndef __HAVE_ARCH_STRSTR |
+extern char * strstr(const char *,const char *); |
+#endif |
+#ifndef __HAVE_ARCH_STRLEN |
+extern __kernel_size_t strlen(const char *); |
+#endif |
+#ifndef __HAVE_ARCH_STRNLEN |
+extern __kernel_size_t strnlen(const char *,__kernel_size_t); |
+#endif |
+ |
+#ifndef __HAVE_ARCH_MEMSET |
+extern void * memset(void *,int,__kernel_size_t); |
+#endif |
+#ifndef __HAVE_ARCH_MEMCPY |
+extern void * memcpy(void *,const void *,__kernel_size_t); |
+#endif |
+#ifndef __HAVE_ARCH_MEMMOVE |
+extern void * memmove(void *,const void *,__kernel_size_t); |
+#endif |
+#ifndef __HAVE_ARCH_MEMSCAN |
+extern void * memscan(void *,int,__kernel_size_t); |
+#endif |
+#ifndef __HAVE_ARCH_MEMCMP |
+extern int memcmp(const void *,const void *,__kernel_size_t); |
+#endif |
+#ifndef __HAVE_ARCH_MEMCHR |
+extern void * memchr(const void *,int,__kernel_size_t); |
+#endif |
+ |
+#ifdef __cplusplus |
+} |
+#endif |
+ |
+#endif |
+#endif /* _LINUX_STRING_H_ */ |
Index: linuxc26/include/linux/mm.h |
=================================================================== |
--- linuxc26/include/linux/mm.h (nonexistent) |
+++ linuxc26/include/linux/mm.h (revision 422) |
@@ -0,0 +1,626 @@ |
+#ifndef _LINUX_MM_H |
+#define _LINUX_MM_H |
+ |
+#include <linux/sched.h> |
+#include <linux/errno.h> |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/config.h> |
+#include <linux/gfp.h> |
+#include <linux/list.h> |
+#include <linux/mmzone.h> |
+#include <linux/rbtree.h> |
+#include <linux/fs.h> |
+ |
+#ifndef CONFIG_DISCONTIGMEM /* Don't use mapnrs, do it properly */ |
+extern unsigned long max_mapnr; |
+#endif |
+ |
+extern unsigned long num_physpages; |
+extern void * high_memory; |
+extern int page_cluster; |
+ |
+#include <asm/page.h> |
+#include <asm/pgtable.h> |
+#include <asm/processor.h> |
+#include <asm/atomic.h> |
+ |
+#ifndef MM_VM_SIZE |
+#define MM_VM_SIZE(mm) TASK_SIZE |
+#endif |
+ |
+/* |
+ * Linux kernel virtual memory manager primitives. |
+ * The idea being to have a "virtual" mm in the same way |
+ * we have a virtual fs - giving a cleaner interface to the |
+ * mm details, and allowing different kinds of memory mappings |
+ * (from shared memory to executable loading to arbitrary |
+ * mmap() functions). |
+ */ |
+ |
+/* |
+ * This struct defines a memory VMM memory area. There is one of these |
+ * per VM-area/task. A VM area is any part of the process virtual memory |
+ * space that has a special rule for the page-fault handlers (ie a shared |
+ * library, the executable area etc). |
+ * |
+ * This structure is exactly 64 bytes on ia32. Please think very, very hard |
+ * before adding anything to it. |
+ */ |
+struct vm_area_struct { |
+ struct mm_struct * vm_mm; /* The address space we belong to. */ |
+ unsigned long vm_start; /* Our start address within vm_mm. */ |
+ unsigned long vm_end; /* The first byte after our end address |
+ within vm_mm. */ |
+ |
+ /* linked list of VM areas per task, sorted by address */ |
+ struct vm_area_struct *vm_next; |
+ |
+ pgprot_t vm_page_prot; /* Access permissions of this VMA. */ |
+ unsigned long vm_flags; /* Flags, listed below. */ |
+ |
+ struct rb_node vm_rb; |
+ |
+ /* |
+ * For areas with an address space and backing store, |
+ * one of the address_space->i_mmap{,shared} lists, |
+ * for shm areas, the list of attaches, otherwise unused. |
+ */ |
+ struct list_head shared; |
+ |
+ /* Function pointers to deal with this struct. */ |
+ struct vm_operations_struct * vm_ops; |
+ |
+ /* Information about our backing store: */ |
+ unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE |
+ units, *not* PAGE_CACHE_SIZE */ |
+ struct file * vm_file; /* File we map to (can be NULL). */ |
+ void * vm_private_data; /* was vm_pte (shared mem) */ |
+}; |
+ |
+/* |
+ * vm_flags.. |
+ */ |
+#define VM_READ 0x00000001 /* currently active flags */ |
+#define VM_WRITE 0x00000002 |
+#define VM_EXEC 0x00000004 |
+#define VM_SHARED 0x00000008 |
+ |
+#define VM_MAYREAD 0x00000010 /* limits for mprotect() etc */ |
+#define VM_MAYWRITE 0x00000020 |
+#define VM_MAYEXEC 0x00000040 |
+#define VM_MAYSHARE 0x00000080 |
+ |
+#define VM_GROWSDOWN 0x00000100 /* general info on the segment */ |
+#define VM_GROWSUP 0x00000200 |
+#define VM_SHM 0x00000400 /* shared memory area, don't swap out */ |
+#define VM_DENYWRITE 0x00000800 /* ETXTBSY on write attempts.. */ |
+ |
+#define VM_EXECUTABLE 0x00001000 |
+#define VM_LOCKED 0x00002000 |
+#define VM_IO 0x00004000 /* Memory mapped I/O or similar */ |
+ |
+ /* Used by sys_madvise() */ |
+#define VM_SEQ_READ 0x00008000 /* App will access data sequentially */ |
+#define VM_RAND_READ 0x00010000 /* App will not benefit from clustered reads */ |
+ |
+#define VM_DONTCOPY 0x00020000 /* Do not copy this vma on fork */ |
+#define VM_DONTEXPAND 0x00040000 /* Cannot expand with mremap() */ |
+#define VM_RESERVED 0x00080000 /* Don't unmap it from swap_out */ |
+#define VM_ACCOUNT 0x00100000 /* Is a VM accounted object */ |
+#define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */ |
+#define VM_NONLINEAR 0x00800000 /* Is non-linear (remap_file_pages) */ |
+ |
+#ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ |
+#define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS |
+#endif |
+ |
+#ifdef CONFIG_STACK_GROWSUP |
+#define VM_STACK_FLAGS (VM_GROWSUP | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT) |
+#else |
+#define VM_STACK_FLAGS (VM_GROWSDOWN | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT) |
+#endif |
+ |
+#define VM_READHINTMASK (VM_SEQ_READ | VM_RAND_READ) |
+#define VM_ClearReadHint(v) (v)->vm_flags &= ~VM_READHINTMASK |
+#define VM_NormalReadHint(v) (!((v)->vm_flags & VM_READHINTMASK)) |
+#define VM_SequentialReadHint(v) ((v)->vm_flags & VM_SEQ_READ) |
+#define VM_RandomReadHint(v) ((v)->vm_flags & VM_RAND_READ) |
+ |
+/* |
+ * mapping from the currently active vm_flags protection bits (the |
+ * low four bits) to a page protection mask.. |
+ */ |
+extern pgprot_t protection_map[16]; |
+ |
+ |
+/* |
+ * These are the virtual MM functions - opening of an area, closing and |
+ * unmapping it (needed to keep files on disk up-to-date etc), pointer |
+ * to the functions called when a no-page or a wp-page exception occurs. |
+ */ |
+struct vm_operations_struct { |
+ void (*open)(struct vm_area_struct * area); |
+ void (*close)(struct vm_area_struct * area); |
+ struct page * (*nopage)(struct vm_area_struct * area, unsigned long address, int unused); |
+ int (*populate)(struct vm_area_struct * area, unsigned long address, unsigned long len, pgprot_t prot, unsigned long pgoff, int nonblock); |
+}; |
+ |
+/* forward declaration; pte_chain is meant to be internal to rmap.c */ |
+struct pte_chain; |
+struct mmu_gather; |
+struct inode; |
+ |
+/* |
+ * Each physical page in the system has a struct page associated with |
+ * it to keep track of whatever it is we are using the page for at the |
+ * moment. Note that we have no way to track which tasks are using |
+ * a page. |
+ * |
+ * Try to keep the most commonly accessed fields in single cache lines |
+ * here (16 bytes or greater). This ordering should be particularly |
+ * beneficial on 32-bit processors. |
+ * |
+ * The first line is data used in page cache lookup, the second line |
+ * is used for linear searches (eg. clock algorithm scans). |
+ * |
+ * TODO: make this structure smaller, it could be as small as 32 bytes. |
+ */ |
+struct page { |
+ unsigned long flags; /* atomic flags, some possibly |
+ updated asynchronously */ |
+ atomic_t count; /* Usage count, see below. */ |
+ struct list_head list; /* ->mapping has some page lists. */ |
+ struct address_space *mapping; /* The inode (or ...) we belong to. */ |
+ unsigned long index; /* Our offset within mapping. */ |
+ struct list_head lru; /* Pageout list, eg. active_list; |
+ protected by zone->lru_lock !! */ |
+ union { |
+ struct pte_chain *chain;/* Reverse pte mapping pointer. |
+ * protected by PG_chainlock */ |
+ pte_addr_t direct; |
+ } pte; |
+ unsigned long private; /* mapping-private opaque data */ |
+ |
+ /* |
+ * On machines where all RAM is mapped into kernel address space, |
+ * we can simply calculate the virtual address. On machines with |
+ * highmem some memory is mapped into kernel virtual memory |
+ * dynamically, so we need a place to store that address. |
+ * Note that this field could be 16 bits on x86 ... ;) |
+ * |
+ * Architectures with slow multiplication can define |
+ * WANT_PAGE_VIRTUAL in asm/page.h |
+ */ |
+#if defined(WANT_PAGE_VIRTUAL) |
+ void *virtual; /* Kernel virtual address (NULL if |
+ not kmapped, ie. highmem) */ |
+#endif /* WANT_PAGE_VIRTUAL */ |
+}; |
+ |
+/* |
+ * FIXME: take this include out, include page-flags.h in |
+ * files which need it (119 of them) |
+ */ |
+#include <linux/page-flags.h> |
+ |
+/* |
+ * Methods to modify the page usage count. |
+ * |
+ * What counts for a page usage: |
+ * - cache mapping (page->mapping) |
+ * - private data (page->private) |
+ * - page mapped in a task's page tables, each mapping |
+ * is counted separately |
+ * |
+ * Also, many kernel routines increase the page count before a critical |
+ * routine so they can be sure the page doesn't go away from under them. |
+ */ |
+#define put_page_testzero(p) \ |
+ ({ \ |
+ BUG_ON(page_count(p) == 0); \ |
+ atomic_dec_and_test(&(p)->count); \ |
+ }) |
+ |
+#define page_count(p) atomic_read(&(p)->count) |
+#define set_page_count(p,v) atomic_set(&(p)->count, v) |
+#define __put_page(p) atomic_dec(&(p)->count) |
+ |
+extern void FASTCALL(__page_cache_release(struct page *)); |
+ |
+#ifdef CONFIG_HUGETLB_PAGE |
+ |
+static inline void get_page(struct page *page) |
+{ |
+ if (PageCompound(page)) |
+ page = (struct page *)page->lru.next; |
+ atomic_inc(&page->count); |
+} |
+ |
+static inline void put_page(struct page *page) |
+{ |
+ if (PageCompound(page)) { |
+ page = (struct page *)page->lru.next; |
+ if (put_page_testzero(page)) { |
+ if (page->lru.prev) { /* destructor? */ |
+ (*(void (*)(struct page *))page->lru.prev)(page); |
+ } else { |
+ __page_cache_release(page); |
+ } |
+ } |
+ return; |
+ } |
+ if (!PageReserved(page) && put_page_testzero(page)) |
+ __page_cache_release(page); |
+} |
+ |
+#else /* CONFIG_HUGETLB_PAGE */ |
+ |
+static inline void get_page(struct page *page) |
+{ |
+ atomic_inc(&page->count); |
+} |
+ |
+static inline void put_page(struct page *page) |
+{ |
+ if (!PageReserved(page) && put_page_testzero(page)) |
+ __page_cache_release(page); |
+} |
+ |
+#endif /* CONFIG_HUGETLB_PAGE */ |
+ |
+/* |
+ * Multiple processes may "see" the same page. E.g. for untouched |
+ * mappings of /dev/null, all processes see the same page full of |
+ * zeroes, and text pages of executables and shared libraries have |
+ * only one copy in memory, at most, normally. |
+ * |
+ * For the non-reserved pages, page->count denotes a reference count. |
+ * page->count == 0 means the page is free. |
+ * page->count == 1 means the page is used for exactly one purpose |
+ * (e.g. a private data page of one process). |
+ * |
+ * A page may be used for kmalloc() or anyone else who does a |
+ * __get_free_page(). In this case the page->count is at least 1, and |
+ * all other fields are unused but should be 0 or NULL. The |
+ * management of this page is the responsibility of the one who uses |
+ * it. |
+ * |
+ * The other pages (we may call them "process pages") are completely |
+ * managed by the Linux memory manager: I/O, buffers, swapping etc. |
+ * The following discussion applies only to them. |
+ * |
+ * A page may belong to an inode's memory mapping. In this case, |
+ * page->mapping is the pointer to the inode, and page->index is the |
+ * file offset of the page, in units of PAGE_CACHE_SIZE. |
+ * |
+ * A page contains an opaque `private' member, which belongs to the |
+ * page's address_space. Usually, this is the address of a circular |
+ * list of the page's disk buffers. |
+ * |
+ * For pages belonging to inodes, the page->count is the number of |
+ * attaches, plus 1 if `private' contains something, plus one for |
+ * the page cache itself. |
+ * |
+ * All pages belonging to an inode are in these doubly linked lists: |
+ * mapping->clean_pages, mapping->dirty_pages and mapping->locked_pages; |
+ * using the page->list list_head. These fields are also used for |
+ * freelist managemet (when page->count==0). |
+ * |
+ * There is also a per-mapping radix tree mapping index to the page |
+ * in memory if present. The tree is rooted at mapping->root. |
+ * |
+ * All process pages can do I/O: |
+ * - inode pages may need to be read from disk, |
+ * - inode pages which have been modified and are MAP_SHARED may need |
+ * to be written to disk, |
+ * - private pages which have been modified may need to be swapped out |
+ * to swap space and (later) to be read back into memory. |
+ */ |
+ |
+/* |
+ * The zone field is never updated after free_area_init_core() |
+ * sets it, so none of the operations on it need to be atomic. |
+ */ |
+#define ZONE_SHIFT (BITS_PER_LONG - 8) |
+ |
+struct zone; |
+extern struct zone *zone_table[]; |
+ |
+static inline struct zone *page_zone(struct page *page) |
+{ |
+ return zone_table[page->flags >> ZONE_SHIFT]; |
+} |
+ |
+static inline void set_page_zone(struct page *page, unsigned long zone_num) |
+{ |
+ page->flags &= ~(~0UL << ZONE_SHIFT); |
+ page->flags |= zone_num << ZONE_SHIFT; |
+} |
+ |
+#ifndef CONFIG_DISCONTIGMEM |
+/* The array of struct pages - for discontigmem use pgdat->lmem_map */ |
+extern struct page *mem_map; |
+#endif |
+ |
+static inline void *lowmem_page_address(struct page *page) |
+{ |
+ return __va(page_to_pfn(page) << PAGE_SHIFT); |
+} |
+ |
+#if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL) |
+#define HASHED_PAGE_VIRTUAL |
+#endif |
+ |
+#if defined(WANT_PAGE_VIRTUAL) |
+#define page_address(page) ((page)->virtual) |
+#define set_page_address(page, address) \ |
+ do { \ |
+ (page)->virtual = (address); \ |
+ } while(0) |
+#define page_address_init() do { } while(0) |
+#endif |
+ |
+#if defined(HASHED_PAGE_VIRTUAL) |
+void *page_address(struct page *page); |
+void set_page_address(struct page *page, void *virtual); |
+void page_address_init(void); |
+#endif |
+ |
+#if !defined(HASHED_PAGE_VIRTUAL) && !defined(WANT_PAGE_VIRTUAL) |
+#define page_address(page) lowmem_page_address(page) |
+#define set_page_address(page, address) do { } while(0) |
+#define page_address_init() do { } while(0) |
+#endif |
+ |
+/* |
+ * Return true if this page is mapped into pagetables. Subtle: test pte.direct |
+ * rather than pte.chain. Because sometimes pte.direct is 64-bit, and .chain |
+ * is only 32-bit. |
+ */ |
+static inline int page_mapped(struct page *page) |
+{ |
+ return page->pte.direct != 0; |
+} |
+ |
+/* |
+ * Error return values for the *_nopage functions |
+ */ |
+#define NOPAGE_SIGBUS (NULL) |
+#define NOPAGE_OOM ((struct page *) (-1)) |
+ |
+/* |
+ * Different kinds of faults, as returned by handle_mm_fault(). |
+ * Used to decide whether a process gets delivered SIGBUS or |
+ * just gets major/minor fault counters bumped up. |
+ */ |
+#define VM_FAULT_OOM (-1) |
+#define VM_FAULT_SIGBUS 0 |
+#define VM_FAULT_MINOR 1 |
+#define VM_FAULT_MAJOR 2 |
+ |
+#define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK) |
+ |
+extern void show_free_areas(void); |
+ |
+struct page *shmem_nopage(struct vm_area_struct * vma, |
+ unsigned long address, int unused); |
+struct file *shmem_file_setup(char * name, loff_t size, unsigned long flags); |
+void shmem_lock(struct file * file, int lock); |
+int shmem_zero_setup(struct vm_area_struct *); |
+ |
+void zap_page_range(struct vm_area_struct *vma, unsigned long address, |
+ unsigned long size); |
+int unmap_vmas(struct mmu_gather **tlbp, struct mm_struct *mm, |
+ struct vm_area_struct *start_vma, unsigned long start_addr, |
+ unsigned long end_addr, unsigned long *nr_accounted); |
+void unmap_page_range(struct mmu_gather *tlb, struct vm_area_struct *vma, |
+ unsigned long address, unsigned long size); |
+void clear_page_tables(struct mmu_gather *tlb, unsigned long first, int nr); |
+int copy_page_range(struct mm_struct *dst, struct mm_struct *src, |
+ struct vm_area_struct *vma); |
+int zeromap_page_range(struct vm_area_struct *vma, unsigned long from, |
+ unsigned long size, pgprot_t prot); |
+ |
+extern void invalidate_mmap_range(struct address_space *mapping, |
+ loff_t const holebegin, |
+ loff_t const holelen); |
+extern int vmtruncate(struct inode * inode, loff_t offset); |
+extern pmd_t *FASTCALL(__pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)); |
+extern pte_t *FASTCALL(pte_alloc_kernel(struct mm_struct *mm, pmd_t *pmd, unsigned long address)); |
+extern pte_t *FASTCALL(pte_alloc_map(struct mm_struct *mm, pmd_t *pmd, unsigned long address)); |
+extern int install_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, struct page *page, pgprot_t prot); |
+extern int install_file_pte(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, unsigned long pgoff, pgprot_t prot); |
+extern int handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma, unsigned long address, int write_access); |
+extern int make_pages_present(unsigned long addr, unsigned long end); |
+extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write); |
+extern long sys_remap_file_pages(unsigned long start, unsigned long size, unsigned long prot, unsigned long pgoff, unsigned long nonblock); |
+extern long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice); |
+void put_dirty_page(struct task_struct *tsk, struct page *page, |
+ unsigned long address, pgprot_t prot); |
+ |
+int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start, |
+ int len, int write, int force, struct page **pages, struct vm_area_struct **vmas); |
+ |
+int __set_page_dirty_buffers(struct page *page); |
+int __set_page_dirty_nobuffers(struct page *page); |
+int set_page_dirty_lock(struct page *page); |
+ |
+/* |
+ * Prototype to add a shrinker callback for ageable caches. |
+ * |
+ * These functions are passed a count `nr_to_scan' and a gfpmask. They should |
+ * scan `nr_to_scan' objects, attempting to free them. |
+ * |
+ * The callback must the number of objects which remain in the cache. |
+ * |
+ * The callback will be passes nr_to_scan == 0 when the VM is querying the |
+ * cache size, so a fastpath for that case is appropriate. |
+ */ |
+typedef int (*shrinker_t)(int nr_to_scan, unsigned int gfp_mask); |
+ |
+/* |
+ * Add an aging callback. The int is the number of 'seeks' it takes |
+ * to recreate one of the objects that these functions age. |
+ */ |
+ |
+#define DEFAULT_SEEKS 2 |
+struct shrinker; |
+extern struct shrinker *set_shrinker(int, shrinker_t); |
+extern void remove_shrinker(struct shrinker *shrinker); |
+ |
+/* |
+ * If the mapping doesn't provide a set_page_dirty a_op, then |
+ * just fall through and assume that it wants buffer_heads. |
+ * FIXME: make the method unconditional. |
+ */ |
+static inline int set_page_dirty(struct page *page) |
+{ |
+ if (page->mapping) { |
+ int (*spd)(struct page *); |
+ |
+ spd = page->mapping->a_ops->set_page_dirty; |
+ if (spd) |
+ return (*spd)(page); |
+ } |
+ return __set_page_dirty_buffers(page); |
+} |
+ |
+/* |
+ * On a two-level page table, this ends up being trivial. Thus the |
+ * inlining and the symmetry break with pte_alloc_map() that does all |
+ * of this out-of-line. |
+ */ |
+static inline pmd_t *pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address) |
+{ |
+ if (pgd_none(*pgd)) |
+ return __pmd_alloc(mm, pgd, address); |
+ return pmd_offset(pgd, address); |
+} |
+ |
+extern void free_area_init(unsigned long * zones_size); |
+extern void free_area_init_node(int nid, pg_data_t *pgdat, struct page *pmap, |
+ unsigned long * zones_size, unsigned long zone_start_pfn, |
+ unsigned long *zholes_size); |
+extern void memmap_init_zone(struct page *, unsigned long, int, |
+ unsigned long, unsigned long); |
+extern void mem_init(void); |
+extern void show_mem(void); |
+extern void si_meminfo(struct sysinfo * val); |
+extern void si_meminfo_node(struct sysinfo *val, int nid); |
+ |
+/* mmap.c */ |
+extern void insert_vm_struct(struct mm_struct *, struct vm_area_struct *); |
+extern void build_mmap_rb(struct mm_struct *); |
+extern void exit_mmap(struct mm_struct *); |
+ |
+extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); |
+ |
+extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, |
+ unsigned long len, unsigned long prot, |
+ unsigned long flag, unsigned long pgoff); |
+ |
+static inline unsigned long do_mmap(struct file *file, unsigned long addr, |
+ unsigned long len, unsigned long prot, |
+ unsigned long flag, unsigned long offset) |
+{ |
+ unsigned long ret = -EINVAL; |
+ if ((offset + PAGE_ALIGN(len)) < offset) |
+ goto out; |
+ if (!(offset & ~PAGE_MASK)) |
+ ret = do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT); |
+out: |
+ return ret; |
+} |
+ |
+extern int do_munmap(struct mm_struct *, unsigned long, size_t); |
+ |
+extern unsigned long do_brk(unsigned long, unsigned long); |
+ |
+static inline void |
+__vma_unlink(struct mm_struct *mm, struct vm_area_struct *vma, |
+ struct vm_area_struct *prev) |
+{ |
+ prev->vm_next = vma->vm_next; |
+ rb_erase(&vma->vm_rb, &mm->mm_rb); |
+ if (mm->mmap_cache == vma) |
+ mm->mmap_cache = prev; |
+} |
+ |
+static inline int |
+can_vma_merge(struct vm_area_struct *vma, unsigned long vm_flags) |
+{ |
+#ifdef CONFIG_MMU |
+ if (!vma->vm_file && vma->vm_flags == vm_flags) |
+ return 1; |
+#endif |
+ return 0; |
+} |
+ |
+/* filemap.c */ |
+extern unsigned long page_unuse(struct page *); |
+extern void truncate_inode_pages(struct address_space *, loff_t); |
+ |
+/* generic vm_area_ops exported for stackable file systems */ |
+extern struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int); |
+ |
+/* mm/page-writeback.c */ |
+int write_one_page(struct page *page, int wait); |
+ |
+/* readahead.c */ |
+#define VM_MAX_READAHEAD 128 /* kbytes */ |
+#define VM_MIN_READAHEAD 16 /* kbytes (includes current page) */ |
+ |
+int do_page_cache_readahead(struct address_space *mapping, struct file *filp, |
+ unsigned long offset, unsigned long nr_to_read); |
+int force_page_cache_readahead(struct address_space *mapping, struct file *filp, |
+ unsigned long offset, unsigned long nr_to_read); |
+void page_cache_readahead(struct address_space *mapping, |
+ struct file_ra_state *ra, |
+ struct file *filp, |
+ unsigned long offset); |
+void handle_ra_miss(struct address_space *mapping, |
+ struct file_ra_state *ra, pgoff_t offset); |
+unsigned long max_sane_readahead(unsigned long nr); |
+ |
+/* Do stack extension */ |
+extern int expand_stack(struct vm_area_struct * vma, unsigned long address); |
+ |
+/* Look up the first VMA which satisfies addr < vm_end, NULL if none. */ |
+extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr); |
+extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr, |
+ struct vm_area_struct **pprev); |
+extern int split_vma(struct mm_struct * mm, struct vm_area_struct * vma, |
+ unsigned long addr, int new_below); |
+ |
+/* Look up the first VMA which intersects the interval start_addr..end_addr-1, |
+ NULL if none. Assume start_addr < end_addr. */ |
+static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr) |
+{ |
+ struct vm_area_struct * vma = find_vma(mm,start_addr); |
+ |
+ if (vma && end_addr <= vma->vm_start) |
+ vma = NULL; |
+ return vma; |
+} |
+ |
+extern struct vm_area_struct *find_extend_vma(struct mm_struct *mm, unsigned long addr); |
+ |
+extern unsigned int nr_used_zone_pages(void); |
+ |
+extern struct page * vmalloc_to_page(void *addr); |
+extern struct page * follow_page(struct mm_struct *mm, unsigned long address, |
+ int write); |
+extern int remap_page_range(struct vm_area_struct *vma, unsigned long from, |
+ unsigned long to, unsigned long size, pgprot_t prot); |
+ |
+#ifndef CONFIG_DEBUG_PAGEALLOC |
+static inline void |
+kernel_map_pages(struct page *page, int numpages, int enable) |
+{ |
+} |
+#endif |
+ |
+#endif /* __KERNEL__ */ |
+#endif /* _LINUX_MM_H */ |
Index: linuxc26/include/linux/efs_vh.h |
=================================================================== |
--- linuxc26/include/linux/efs_vh.h (nonexistent) |
+++ linuxc26/include/linux/efs_vh.h (revision 422) |
@@ -0,0 +1,70 @@ |
+/* |
+ * efs_vh.h |
+ * |
+ * Copyright (c) 1999 Al Smith |
+ * |
+ * Portions derived from IRIX header files (c) 1985 MIPS Computer Systems, Inc. |
+ */ |
+ |
+#ifndef __EFS_VH_H__ |
+#define __EFS_VH_H__ |
+ |
+#define VHMAGIC 0xbe5a941 /* volume header magic number */ |
+#define NPARTAB 16 /* 16 unix partitions */ |
+#define NVDIR 15 /* max of 15 directory entries */ |
+#define BFNAMESIZE 16 /* max 16 chars in boot file name */ |
+#define VDNAMESIZE 8 |
+ |
+struct volume_directory { |
+ char vd_name[VDNAMESIZE]; /* name */ |
+ int vd_lbn; /* logical block number */ |
+ int vd_nbytes; /* file length in bytes */ |
+}; |
+ |
+struct partition_table { /* one per logical partition */ |
+ int pt_nblks; /* # of logical blks in partition */ |
+ int pt_firstlbn; /* first lbn of partition */ |
+ int pt_type; /* use of partition */ |
+}; |
+ |
+struct volume_header { |
+ int vh_magic; /* identifies volume header */ |
+ short vh_rootpt; /* root partition number */ |
+ short vh_swappt; /* swap partition number */ |
+ char vh_bootfile[BFNAMESIZE]; /* name of file to boot */ |
+ char pad[48]; /* device param space */ |
+ struct volume_directory vh_vd[NVDIR]; /* other vol hdr contents */ |
+ struct partition_table vh_pt[NPARTAB]; /* device partition layout */ |
+ int vh_csum; /* volume header checksum */ |
+ int vh_fill; /* fill out to 512 bytes */ |
+}; |
+ |
+/* partition type sysv is used for EFS format CD-ROM partitions */ |
+#define SGI_SYSV 0x05 |
+#define SGI_EFS 0x07 |
+#define IS_EFS(x) (((x) == SGI_EFS) || ((x) == SGI_SYSV)) |
+ |
+struct pt_types { |
+ int pt_type; |
+ char *pt_name; |
+} sgi_pt_types[] = { |
+ {0x00, "SGI vh"}, |
+ {0x01, "SGI trkrepl"}, |
+ {0x02, "SGI secrepl"}, |
+ {0x03, "SGI raw"}, |
+ {0x04, "SGI bsd"}, |
+ {SGI_SYSV, "SGI sysv"}, |
+ {0x06, "SGI vol"}, |
+ {SGI_EFS, "SGI efs"}, |
+ {0x08, "SGI lv"}, |
+ {0x09, "SGI rlv"}, |
+ {0x0A, "SGI xfs"}, |
+ {0x0B, "SGI xfslog"}, |
+ {0x0C, "SGI xlv"}, |
+ {0x82, "Linux swap"}, |
+ {0x83, "Linux native"}, |
+ {0, NULL} |
+}; |
+ |
+#endif /* __EFS_VH_H__ */ |
+ |
Index: linuxc26/include/linux/jffs2_fs_i.h |
=================================================================== |
--- linuxc26/include/linux/jffs2_fs_i.h (nonexistent) |
+++ linuxc26/include/linux/jffs2_fs_i.h (revision 422) |
@@ -0,0 +1,44 @@ |
+/* $Id: jffs2_fs_i.h,v 1.1 2004-01-28 15:25:48 giacomo Exp $ */ |
+ |
+#ifndef _JFFS2_FS_I |
+#define _JFFS2_FS_I |
+ |
+#include <linux/version.h> |
+#include <linux/rbtree.h> |
+ |
+struct jffs2_inode_info { |
+ /* We need an internal semaphore similar to inode->i_sem. |
+ Unfortunately, we can't used the existing one, because |
+ either the GC would deadlock, or we'd have to release it |
+ before letting GC proceed. Or we'd have to put ugliness |
+ into the GC code so it didn't attempt to obtain the i_sem |
+ for the inode(s) which are already locked */ |
+ struct semaphore sem; |
+ |
+ /* The highest (datanode) version number used for this ino */ |
+ uint32_t highest_version; |
+ |
+ /* List of data fragments which make up the file */ |
+ struct rb_root fragtree; |
+ |
+ /* There may be one datanode which isn't referenced by any of the |
+ above fragments, if it contains a metadata update but no actual |
+ data - or if this is a directory inode */ |
+ /* This also holds the _only_ dnode for symlinks/device nodes, |
+ etc. */ |
+ struct jffs2_full_dnode *metadata; |
+ |
+ /* Directory entries */ |
+ struct jffs2_full_dirent *dents; |
+ |
+ /* Some stuff we just have to keep in-core at all times, for each inode. */ |
+ struct jffs2_inode_cache *inocache; |
+ |
+ uint16_t flags; |
+ uint8_t usercompr; |
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,2) |
+ struct inode vfs_inode; |
+#endif |
+}; |
+ |
+#endif /* _JFFS2_FS_I */ |
Index: linuxc26/include/linux/stat.h |
=================================================================== |
--- linuxc26/include/linux/stat.h (nonexistent) |
+++ linuxc26/include/linux/stat.h (revision 422) |
@@ -0,0 +1,77 @@ |
+#ifndef _LINUX_STAT_H |
+#define _LINUX_STAT_H |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <asm/stat.h> |
+ |
+#endif |
+ |
+#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 |
+ |
+#ifdef __KERNEL__ |
+#define S_IRWXUGO (S_IRWXU|S_IRWXG|S_IRWXO) |
+#define S_IALLUGO (S_ISUID|S_ISGID|S_ISVTX|S_IRWXUGO) |
+#define S_IRUGO (S_IRUSR|S_IRGRP|S_IROTH) |
+#define S_IWUGO (S_IWUSR|S_IWGRP|S_IWOTH) |
+#define S_IXUGO (S_IXUSR|S_IXGRP|S_IXOTH) |
+ |
+#include <linux/types.h> |
+#include <linux/time.h> |
+ |
+struct kstat { |
+ unsigned long ino; |
+ dev_t dev; |
+ umode_t mode; |
+ nlink_t nlink; |
+ uid_t uid; |
+ gid_t gid; |
+ dev_t rdev; |
+ loff_t size; |
+ struct timespec atime; |
+ struct timespec mtime; |
+ struct timespec ctime; |
+ unsigned long blksize; |
+ unsigned long blocks; |
+}; |
+ |
+#endif |
+ |
+#endif |
Index: linuxc26/include/linux/i2c.h |
=================================================================== |
--- linuxc26/include/linux/i2c.h (nonexistent) |
+++ linuxc26/include/linux/i2c.h (revision 422) |
@@ -0,0 +1,609 @@ |
+/* ------------------------------------------------------------------------- */ |
+/* */ |
+/* 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ |
+/* ------------------------------------------------------------------------- */ |
+ |
+/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and |
+ Frodo Looijaard <frodol@dds.nl> */ |
+ |
+/* $Id: i2c.h,v 1.1 2004-01-28 15:25:29 giacomo Exp $ */ |
+ |
+#ifndef _LINUX_I2C_H |
+#define _LINUX_I2C_H |
+ |
+#include <linux/module.h> |
+#include <linux/types.h> |
+#include <linux/i2c-id.h> |
+#include <linux/device.h> /* for struct device */ |
+#include <asm/semaphore.h> |
+ |
+/* --- General options ------------------------------------------------ */ |
+ |
+struct i2c_msg; |
+struct i2c_algorithm; |
+struct i2c_adapter; |
+struct i2c_client; |
+struct i2c_driver; |
+struct i2c_client_address_data; |
+union i2c_smbus_data; |
+ |
+/* |
+ * The master routines are the ones normally used to transmit data to devices |
+ * on a bus (or read from them). Apart from two basic transfer functions to |
+ * transmit one message at a time, a more complex version can be used to |
+ * transmit an arbitrary number of messages without interruption. |
+ */ |
+extern int i2c_master_send(struct i2c_client *,const char* ,int); |
+extern int i2c_master_recv(struct i2c_client *,char* ,int); |
+ |
+/* Transfer num messages. |
+ */ |
+extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],int num); |
+ |
+/* |
+ * Some adapter types (i.e. PCF 8584 based ones) may support slave behaviuor. |
+ * This is not tested/implemented yet and will change in the future. |
+ */ |
+extern int i2c_slave_send(struct i2c_client *,char*,int); |
+extern int i2c_slave_recv(struct i2c_client *,char*,int); |
+ |
+ |
+ |
+/* This is the very generalized SMBus access routine. You probably do not |
+ want to use this, though; one of the functions below may be much easier, |
+ and probably just as fast. |
+ Note that we use i2c_adapter here, because you do not need a specific |
+ smbus adapter to call this function. */ |
+extern s32 i2c_smbus_xfer (struct i2c_adapter * adapter, u16 addr, |
+ unsigned short flags, |
+ char read_write, u8 command, int size, |
+ union i2c_smbus_data * data); |
+ |
+/* Now follow the 'nice' access routines. These also document the calling |
+ conventions of smbus_access. */ |
+ |
+extern s32 i2c_smbus_write_quick(struct i2c_client * client, u8 value); |
+extern s32 i2c_smbus_read_byte(struct i2c_client * client); |
+extern s32 i2c_smbus_write_byte(struct i2c_client * client, u8 value); |
+extern s32 i2c_smbus_read_byte_data(struct i2c_client * client, u8 command); |
+extern s32 i2c_smbus_write_byte_data(struct i2c_client * client, |
+ u8 command, u8 value); |
+extern s32 i2c_smbus_read_word_data(struct i2c_client * client, u8 command); |
+extern s32 i2c_smbus_write_word_data(struct i2c_client * client, |
+ u8 command, u16 value); |
+extern s32 i2c_smbus_process_call(struct i2c_client * client, |
+ u8 command, u16 value); |
+/* Returns the number of read bytes */ |
+extern s32 i2c_smbus_read_block_data(struct i2c_client * client, |
+ u8 command, u8 *values); |
+extern s32 i2c_smbus_write_block_data(struct i2c_client * client, |
+ u8 command, u8 length, |
+ u8 *values); |
+extern s32 i2c_smbus_read_i2c_block_data(struct i2c_client * client, |
+ u8 command, u8 *values); |
+extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client * client, |
+ u8 command, u8 length, |
+ u8 *values); |
+ |
+ |
+/* |
+ * A driver is capable of handling one or more physical devices present on |
+ * I2C adapters. This information is used to inform the driver of adapter |
+ * events. |
+ */ |
+ |
+struct i2c_driver { |
+ struct module *owner; |
+ char name[32]; |
+ int id; |
+ unsigned int flags; /* div., see below */ |
+ |
+ /* Notifies the driver that a new bus has appeared. This routine |
+ * can be used by the driver to test if the bus meets its conditions |
+ * & seek for the presence of the chip(s) it supports. If found, it |
+ * registers the client(s) that are on the bus to the i2c admin. via |
+ * i2c_attach_client. |
+ */ |
+ int (*attach_adapter)(struct i2c_adapter *); |
+ int (*detach_adapter)(struct i2c_adapter *); |
+ |
+ /* tells the driver that a client is about to be deleted & gives it |
+ * the chance to remove its private data. Also, if the client struct |
+ * has been dynamically allocated by the driver in the function above, |
+ * it must be freed here. |
+ */ |
+ int (*detach_client)(struct i2c_client *); |
+ |
+ /* a ioctl like command that can be used to perform specific functions |
+ * with the device. |
+ */ |
+ int (*command)(struct i2c_client *client,unsigned int cmd, void *arg); |
+ |
+ struct device_driver driver; |
+ struct list_head list; |
+}; |
+#define to_i2c_driver(d) container_of(d, struct i2c_driver, driver) |
+ |
+extern struct bus_type i2c_bus_type; |
+ |
+#define I2C_NAME_SIZE 50 |
+ |
+/* |
+ * i2c_client identifies a single device (i.e. chip) that is connected to an |
+ * i2c bus. The behaviour is defined by the routines of the driver. This |
+ * function is mainly used for lookup & other admin. functions. |
+ */ |
+struct i2c_client { |
+ int id; |
+ unsigned int flags; /* div., see below */ |
+ unsigned int addr; /* chip address - NOTE: 7bit */ |
+ /* addresses are stored in the */ |
+ /* _LOWER_ 7 bits of this char */ |
+ /* addr: unsigned int to make lm_sensors i2c-isa adapter work |
+ more cleanly. It does not take any more memory space, due to |
+ alignment considerations */ |
+ struct i2c_adapter *adapter; /* the adapter we sit on */ |
+ struct i2c_driver *driver; /* and our access routines */ |
+ int usage_count; /* How many accesses currently */ |
+ /* to the client */ |
+ struct device dev; /* the device structure */ |
+ struct list_head list; |
+ char name[I2C_NAME_SIZE]; |
+ struct completion released; |
+}; |
+#define to_i2c_client(d) container_of(d, struct i2c_client, dev) |
+ |
+static inline void *i2c_get_clientdata (struct i2c_client *dev) |
+{ |
+ return dev_get_drvdata (&dev->dev); |
+} |
+ |
+static inline void i2c_set_clientdata (struct i2c_client *dev, void *data) |
+{ |
+ dev_set_drvdata (&dev->dev, data); |
+} |
+ |
+#define I2C_DEVNAME(str) .name = str |
+ |
+static inline char *i2c_clientname(struct i2c_client *c) |
+{ |
+ return &c->name[0]; |
+} |
+ |
+/* |
+ * The following structs are for those who like to implement new bus drivers: |
+ * i2c_algorithm is the interface to a class of hardware solutions which can |
+ * be addressed using the same bus algorithms - i.e. bit-banging or the PCF8584 |
+ * to name two of the most common. |
+ */ |
+struct i2c_algorithm { |
+ char name[32]; /* textual description */ |
+ unsigned int id; |
+ |
+ /* If an adapter algorithm can't to I2C-level access, set master_xfer |
+ to NULL. If an adapter algorithm can do SMBus access, set |
+ smbus_xfer. If set to NULL, the SMBus protocol is simulated |
+ using common I2C messages */ |
+ int (*master_xfer)(struct i2c_adapter *adap,struct i2c_msg msgs[], |
+ int num); |
+ int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr, |
+ unsigned short flags, char read_write, |
+ u8 command, int size, union i2c_smbus_data * data); |
+ |
+ /* --- these optional/future use for some adapter types.*/ |
+ int (*slave_send)(struct i2c_adapter *,char*,int); |
+ int (*slave_recv)(struct i2c_adapter *,char*,int); |
+ |
+ /* --- ioctl like call to set div. parameters. */ |
+ int (*algo_control)(struct i2c_adapter *, unsigned int, unsigned long); |
+ |
+ /* To determine what the adapter supports */ |
+ u32 (*functionality) (struct i2c_adapter *); |
+}; |
+ |
+/* |
+ * i2c_adapter is the structure used to identify a physical i2c bus along |
+ * with the access algorithms necessary to access it. |
+ */ |
+struct i2c_adapter { |
+ struct module *owner; |
+ unsigned int id;/* == is algo->id | hwdep.struct->id, */ |
+ /* for registered values see below */ |
+ unsigned int class; |
+ struct i2c_algorithm *algo;/* the algorithm to access the bus */ |
+ void *algo_data; |
+ |
+ /* --- administration stuff. */ |
+ int (*client_register)(struct i2c_client *); |
+ int (*client_unregister)(struct i2c_client *); |
+ |
+ /* data fields that are valid for all devices */ |
+ struct semaphore bus_lock; |
+ struct semaphore clist_lock; |
+ unsigned int flags;/* flags specifying div. data */ |
+ |
+ int timeout; |
+ int retries; |
+ struct device dev; /* the adapter device */ |
+ struct class_device class_dev; /* the class device */ |
+ |
+#ifdef CONFIG_PROC_FS |
+ /* No need to set this when you initialize the adapter */ |
+ int inode; |
+#endif /* def CONFIG_PROC_FS */ |
+ |
+ int nr; |
+ struct list_head clients; |
+ struct list_head list; |
+ char name[I2C_NAME_SIZE]; |
+ struct completion dev_released; |
+ struct completion class_dev_released; |
+}; |
+#define dev_to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev) |
+#define class_dev_to_i2c_adapter(d) container_of(d, struct i2c_adapter, class_dev) |
+ |
+static inline void *i2c_get_adapdata (struct i2c_adapter *dev) |
+{ |
+ return dev_get_drvdata (&dev->dev); |
+} |
+ |
+static inline void i2c_set_adapdata (struct i2c_adapter *dev, void *data) |
+{ |
+ dev_set_drvdata (&dev->dev, data); |
+} |
+ |
+/*flags for the driver struct: */ |
+#define I2C_DF_NOTIFY 0x01 /* notify on bus (de/a)ttaches */ |
+#if 0 |
+/* this flag is gone -- there is a (optional) driver->detach_adapter |
+ * callback now which can be used instead */ |
+# define I2C_DF_DUMMY 0x02 |
+#endif |
+ |
+/*flags for the client struct: */ |
+#define I2C_CLIENT_ALLOW_USE 0x01 /* Client allows access */ |
+#define I2C_CLIENT_ALLOW_MULTIPLE_USE 0x02 /* Allow multiple access-locks */ |
+ /* on an i2c_client */ |
+#define I2C_CLIENT_PEC 0x04 /* Use Packet Error Checking */ |
+#define I2C_CLIENT_TEN 0x10 /* we have a ten bit chip address */ |
+ /* Must equal I2C_M_TEN below */ |
+ |
+/* i2c adapter classes (bitmask) */ |
+#define I2C_ADAP_CLASS_SMBUS (1<<0) /* lm_sensors, ... */ |
+#define I2C_ADAP_CLASS_TV_ANALOG (1<<1) /* bttv + friends */ |
+#define I2C_ADAP_CLASS_TV_DIGITAL (1<<2) /* dbv cards */ |
+#define I2C_ADAP_CLASS_DDC (1<<3) /* i2c-matroxfb ? */ |
+#define I2C_ADAP_CLASS_CAM_ANALOG (1<<4) /* camera with analog CCD */ |
+#define I2C_ADAP_CLASS_CAM_DIGITAL (1<<5) /* most webcams */ |
+ |
+/* i2c_client_address_data is the struct for holding default client |
+ * addresses for a driver and for the parameters supplied on the |
+ * command line |
+ */ |
+struct i2c_client_address_data { |
+ unsigned short *normal_i2c; |
+ unsigned short *normal_i2c_range; |
+ unsigned short *probe; |
+ unsigned short *probe_range; |
+ unsigned short *ignore; |
+ unsigned short *ignore_range; |
+ unsigned short *force; |
+}; |
+ |
+/* Internal numbers to terminate lists */ |
+#define I2C_CLIENT_END 0xfffe |
+#define I2C_CLIENT_ISA_END 0xfffefffe |
+ |
+/* The numbers to use to set I2C bus address */ |
+#define ANY_I2C_BUS 0xffff |
+#define ANY_I2C_ISA_BUS 9191 |
+ |
+/* The length of the option lists */ |
+#define I2C_CLIENT_MAX_OPTS 48 |
+ |
+ |
+/* ----- functions exported by i2c.o */ |
+ |
+/* administration... |
+ */ |
+extern int i2c_add_adapter(struct i2c_adapter *); |
+extern int i2c_del_adapter(struct i2c_adapter *); |
+ |
+extern int i2c_add_driver(struct i2c_driver *); |
+extern int i2c_del_driver(struct i2c_driver *); |
+ |
+extern int i2c_attach_client(struct i2c_client *); |
+extern int i2c_detach_client(struct i2c_client *); |
+ |
+/* New function: This is to get an i2c_client-struct for controlling the |
+ client either by using i2c_control-function or having the |
+ client-module export functions that can be used with the i2c_client |
+ -struct. */ |
+extern struct i2c_client *i2c_get_client(int driver_id, int adapter_id, |
+ struct i2c_client *prev); |
+ |
+/* Should be used with new function |
+ extern struct i2c_client *i2c_get_client(int,int,struct i2c_client *); |
+ to make sure that client-struct is valid and that it is okay to access |
+ the i2c-client. |
+ returns -EACCES if client doesn't allow use (default) |
+ returns -EBUSY if client doesn't allow multiple use (default) and |
+ usage_count >0 */ |
+extern int i2c_use_client(struct i2c_client *); |
+extern int i2c_release_client(struct i2c_client *); |
+ |
+/* call the i2c_client->command() of all attached clients with |
+ * the given arguments */ |
+extern void i2c_clients_command(struct i2c_adapter *adap, |
+ unsigned int cmd, void *arg); |
+ |
+/* returns -EBUSY if address has been taken, 0 if not. Note that the only |
+ other place at which this is called is within i2c_attach_client; so |
+ you can cheat by simply not registering. Not recommended, of course! */ |
+extern int i2c_check_addr (struct i2c_adapter *adapter, int addr); |
+ |
+/* Detect function. It iterates over all possible addresses itself. |
+ * It will only call found_proc if some client is connected at the |
+ * specific address (unless a 'force' matched); |
+ */ |
+extern int i2c_probe(struct i2c_adapter *adapter, |
+ struct i2c_client_address_data *address_data, |
+ int (*found_proc) (struct i2c_adapter *, int, int)); |
+ |
+/* An ioctl like call to set div. parameters of the adapter. |
+ */ |
+extern int i2c_control(struct i2c_client *,unsigned int, unsigned long); |
+ |
+/* This call returns a unique low identifier for each registered adapter, |
+ * or -1 if the adapter was not registered. |
+ */ |
+extern int i2c_adapter_id(struct i2c_adapter *adap); |
+extern struct i2c_adapter* i2c_get_adapter(int id); |
+extern void i2c_put_adapter(struct i2c_adapter *adap); |
+ |
+ |
+/* Return the functionality mask */ |
+extern u32 i2c_get_functionality (struct i2c_adapter *adap); |
+ |
+/* Return 1 if adapter supports everything we need, 0 if not. */ |
+extern int i2c_check_functionality (struct i2c_adapter *adap, u32 func); |
+ |
+/* |
+ * I2C Message - used for pure i2c transaction, also from /dev interface |
+ */ |
+struct i2c_msg { |
+ __u16 addr; /* slave address */ |
+ __u16 flags; |
+#define I2C_M_TEN 0x10 /* we have a ten bit chip address */ |
+#define I2C_M_RD 0x01 |
+#define I2C_M_NOSTART 0x4000 |
+#define I2C_M_REV_DIR_ADDR 0x2000 |
+#define I2C_M_IGNORE_NAK 0x1000 |
+#define I2C_M_NO_RD_ACK 0x0800 |
+ __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_{REV_DIR_ADDR,NOSTART,..} */ |
+#define I2C_FUNC_SMBUS_HWPEC_CALC 0x00000008 /* SMBus 2.0 */ |
+#define I2C_FUNC_SMBUS_READ_WORD_DATA_PEC 0x00000800 /* SMBus 2.0 */ |
+#define I2C_FUNC_SMBUS_WRITE_WORD_DATA_PEC 0x00001000 /* SMBus 2.0 */ |
+#define I2C_FUNC_SMBUS_PROC_CALL_PEC 0x00002000 /* SMBus 2.0 */ |
+#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL_PEC 0x00004000 /* SMBus 2.0 */ |
+#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_READ_I2C_BLOCK_2 0x10000000 /* I2C-like block xfer */ |
+#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK_2 0x20000000 /* w/ 2-byte reg. addr. */ |
+#define I2C_FUNC_SMBUS_READ_BLOCK_DATA_PEC 0x40000000 /* SMBus 2.0 */ |
+#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA_PEC 0x80000000 /* SMBus 2.0 */ |
+ |
+#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_I2C_BLOCK_2 I2C_FUNC_SMBUS_READ_I2C_BLOCK_2 | \ |
+ I2C_FUNC_SMBUS_WRITE_I2C_BLOCK_2 |
+#define I2C_FUNC_SMBUS_BLOCK_DATA_PEC I2C_FUNC_SMBUS_READ_BLOCK_DATA_PEC | \ |
+ I2C_FUNC_SMBUS_WRITE_BLOCK_DATA_PEC |
+#define I2C_FUNC_SMBUS_WORD_DATA_PEC I2C_FUNC_SMBUS_READ_WORD_DATA_PEC | \ |
+ I2C_FUNC_SMBUS_WRITE_WORD_DATA_PEC |
+ |
+#define I2C_FUNC_SMBUS_READ_BYTE_PEC I2C_FUNC_SMBUS_READ_BYTE_DATA |
+#define I2C_FUNC_SMBUS_WRITE_BYTE_PEC I2C_FUNC_SMBUS_WRITE_BYTE_DATA |
+#define I2C_FUNC_SMBUS_READ_BYTE_DATA_PEC I2C_FUNC_SMBUS_READ_WORD_DATA |
+#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA_PEC I2C_FUNC_SMBUS_WRITE_WORD_DATA |
+#define I2C_FUNC_SMBUS_BYTE_PEC I2C_FUNC_SMBUS_BYTE_DATA |
+#define I2C_FUNC_SMBUS_BYTE_DATA_PEC I2C_FUNC_SMBUS_WORD_DATA |
+ |
+#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_WRITE_BLOCK_DATA_PEC | \ |
+ I2C_FUNC_SMBUS_I2C_BLOCK |
+ |
+/* |
+ * Data for SMBus Messages |
+ */ |
+#define I2C_SMBUS_BLOCK_MAX 32 /* As specified in SMBus standard */ |
+#define I2C_SMBUS_I2C_BLOCK_MAX 32 /* Not specified but we use same structure */ |
+union i2c_smbus_data { |
+ __u8 byte; |
+ __u16 word; |
+ __u8 block[I2C_SMBUS_BLOCK_MAX + 3]; /* block[0] is used for length */ |
+ /* one more for read length in block process call */ |
+ /* and one more for PEC */ |
+}; |
+ |
+/* smbus_access 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_DATA 6 |
+#define I2C_SMBUS_BLOCK_PROC_CALL 7 /* SMBus 2.0 */ |
+#define I2C_SMBUS_BLOCK_DATA_PEC 8 /* SMBus 2.0 */ |
+#define I2C_SMBUS_PROC_CALL_PEC 9 /* SMBus 2.0 */ |
+#define I2C_SMBUS_BLOCK_PROC_CALL_PEC 10 /* SMBus 2.0 */ |
+#define I2C_SMBUS_WORD_DATA_PEC 11 /* SMBus 2.0 */ |
+ |
+ |
+/* ----- commands for the ioctl like i2c_command call: |
+ * note that additional calls are defined in the algorithm and hw |
+ * dependent layers - these can be listed here, or see the |
+ * corresponding header files. |
+ */ |
+ /* -> bit-adapter specific ioctls */ |
+#define I2C_RETRIES 0x0701 /* number of times a device address */ |
+ /* should be polled when not */ |
+ /* acknowledging */ |
+#define I2C_TIMEOUT 0x0702 /* set timeout - call with int */ |
+ |
+ |
+/* this is for i2c-dev.c */ |
+#define I2C_SLAVE 0x0703 /* Change slave address */ |
+ /* Attn.: Slave address is 7 or 10 bits */ |
+#define I2C_SLAVE_FORCE 0x0706 /* Change slave address */ |
+ /* Attn.: Slave address is 7 or 10 bits */ |
+ /* This changes the address, even if it */ |
+ /* is already taken! */ |
+#define I2C_TENBIT 0x0704 /* 0 for 7 bit addrs, != 0 for 10 bit */ |
+ |
+#define I2C_FUNCS 0x0705 /* Get the adapter functionality */ |
+#define I2C_RDWR 0x0707 /* Combined R/W transfer (one stop only)*/ |
+#define I2C_PEC 0x0708 /* != 0 for SMBus PEC */ |
+#if 0 |
+#define I2C_ACK_TEST 0x0710 /* See if a slave is at a specific address */ |
+#endif |
+ |
+#define I2C_SMBUS 0x0720 /* SMBus-level access */ |
+ |
+/* ... algo-bit.c recognizes */ |
+#define I2C_UDELAY 0x0705 /* set delay in microsecs between each */ |
+ /* written byte (except address) */ |
+#define I2C_MDELAY 0x0706 /* millisec delay between written bytes */ |
+ |
+/* ----- I2C-DEV: char device interface stuff ------------------------- */ |
+ |
+#define I2C_MAJOR 89 /* Device major number */ |
+ |
+/* These defines are used for probing i2c client addresses */ |
+/* Default fill of many variables */ |
+#define I2C_CLIENT_DEFAULTS {I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ |
+ I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END} |
+ |
+/* This is ugly. We need to evaluate I2C_CLIENT_MAX_OPTS before it is |
+ stringified */ |
+#define I2C_CLIENT_MODPARM_AUX1(x) "1-" #x "h" |
+#define I2C_CLIENT_MODPARM_AUX(x) I2C_CLIENT_MODPARM_AUX1(x) |
+#define I2C_CLIENT_MODPARM I2C_CLIENT_MODPARM_AUX(I2C_CLIENT_MAX_OPTS) |
+ |
+/* I2C_CLIENT_MODULE_PARM creates a module parameter, and puts it in the |
+ module header */ |
+ |
+#define I2C_CLIENT_MODULE_PARM(var,desc) \ |
+ static unsigned short var[I2C_CLIENT_MAX_OPTS] = I2C_CLIENT_DEFAULTS; \ |
+ MODULE_PARM(var,I2C_CLIENT_MODPARM); \ |
+ MODULE_PARM_DESC(var,desc) |
+ |
+/* This is the one you want to use in your own modules */ |
+#define I2C_CLIENT_INSMOD \ |
+ I2C_CLIENT_MODULE_PARM(probe, \ |
+ "List of adapter,address pairs to scan additionally"); \ |
+ I2C_CLIENT_MODULE_PARM(probe_range, \ |
+ "List of adapter,start-addr,end-addr triples to scan " \ |
+ "additionally"); \ |
+ I2C_CLIENT_MODULE_PARM(ignore, \ |
+ "List of adapter,address pairs not to scan"); \ |
+ I2C_CLIENT_MODULE_PARM(ignore_range, \ |
+ "List of adapter,start-addr,end-addr triples not to " \ |
+ "scan"); \ |
+ I2C_CLIENT_MODULE_PARM(force, \ |
+ "List of adapter,address pairs to boldly assume " \ |
+ "to be present"); \ |
+ static struct i2c_client_address_data addr_data = { \ |
+ .normal_i2c = normal_i2c, \ |
+ .normal_i2c_range = normal_i2c_range, \ |
+ .probe = probe, \ |
+ .probe_range = probe_range, \ |
+ .ignore = ignore, \ |
+ .ignore_range = ignore_range, \ |
+ .force = force, \ |
+ } |
+ |
+/* Detect whether we are on the isa bus. If this returns true, all i2c |
+ access will fail! */ |
+#define i2c_is_isa_client(clientptr) \ |
+ ((clientptr)->adapter->algo->id == I2C_ALGO_ISA) |
+#define i2c_is_isa_adapter(adapptr) \ |
+ ((adapptr)->algo->id == I2C_ALGO_ISA) |
+ |
+/* Tiny delay function used by the i2c bus drivers */ |
+static inline void i2c_delay(signed long timeout) |
+{ |
+ set_current_state(TASK_INTERRUPTIBLE); |
+ schedule_timeout(timeout); |
+} |
+ |
+#endif /* _LINUX_I2C_H */ |
Index: linuxc26/include/linux/sys.h |
=================================================================== |
--- linuxc26/include/linux/sys.h (nonexistent) |
+++ linuxc26/include/linux/sys.h (revision 422) |
@@ -0,0 +1,29 @@ |
+#ifndef _LINUX_SYS_H |
+#define _LINUX_SYS_H |
+ |
+/* |
+ * This file is no longer used or needed |
+ */ |
+ |
+/* |
+ * These are system calls that will be removed at some time |
+ * due to newer versions existing.. |
+ * (please be careful - ibcs2 may need some of these). |
+ */ |
+#ifdef notdef |
+#define _sys_waitpid _sys_old_syscall /* _sys_wait4 */ |
+#define _sys_olduname _sys_old_syscall /* _sys_newuname */ |
+#define _sys_uname _sys_old_syscall /* _sys_newuname */ |
+#define _sys_stat _sys_old_syscall /* _sys_newstat */ |
+#define _sys_fstat _sys_old_syscall /* _sys_newfstat */ |
+#define _sys_lstat _sys_old_syscall /* _sys_newlstat */ |
+#define _sys_signal _sys_old_syscall /* _sys_sigaction */ |
+#define _sys_sgetmask _sys_old_syscall /* _sys_sigprocmask */ |
+#define _sys_ssetmask _sys_old_syscall /* _sys_sigprocmask */ |
+#endif |
+ |
+/* |
+ * These are system calls that haven't been implemented yet |
+ * but have an entry in the table for future expansion.. |
+ */ |
+#endif |
Index: linuxc26/include/linux/fsfilter.h |
=================================================================== |
--- linuxc26/include/linux/fsfilter.h (nonexistent) |
+++ linuxc26/include/linux/fsfilter.h (revision 422) |
@@ -0,0 +1,134 @@ |
+/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- |
+ * vim:expandtab:shiftwidth=8:tabstop=8: |
+ */ |
+ |
+#ifndef __FILTER_H_ |
+#define __FILTER_H_ 1 |
+ |
+#ifdef __KERNEL__ |
+ |
+/* cachetype.c */ |
+ |
+/* |
+ * it is important that things like inode, super and file operations |
+ * for intermezzo are not defined statically. If methods are NULL |
+ * the VFS takes special action based on that. Given that different |
+ * cache types have NULL ops at different slots, we must install opeation |
+ * talbes for InterMezzo with NULL's in the same spot |
+ */ |
+ |
+struct filter_ops { |
+ struct super_operations filter_sops; |
+ |
+ struct inode_operations filter_dir_iops; |
+ struct inode_operations filter_file_iops; |
+ struct inode_operations filter_sym_iops; |
+ |
+ struct file_operations filter_dir_fops; |
+ struct file_operations filter_file_fops; |
+ struct file_operations filter_sym_fops; |
+ |
+ struct dentry_operations filter_dentry_ops; |
+}; |
+ |
+struct cache_ops { |
+ /* operations on the file store */ |
+ struct super_operations *cache_sops; |
+ |
+ struct inode_operations *cache_dir_iops; |
+ struct inode_operations *cache_file_iops; |
+ struct inode_operations *cache_sym_iops; |
+ |
+ struct file_operations *cache_dir_fops; |
+ struct file_operations *cache_file_fops; |
+ struct file_operations *cache_sym_fops; |
+ |
+ struct dentry_operations *cache_dentry_ops; |
+}; |
+ |
+ |
+#define FILTER_DID_SUPER_OPS 0x1 |
+#define FILTER_DID_INODE_OPS 0x2 |
+#define FILTER_DID_FILE_OPS 0x4 |
+#define FILTER_DID_DENTRY_OPS 0x8 |
+#define FILTER_DID_DEV_OPS 0x10 |
+#define FILTER_DID_SYMLINK_OPS 0x20 |
+#define FILTER_DID_DIR_OPS 0x40 |
+ |
+struct filter_fs { |
+ int o_flags; |
+ struct filter_ops o_fops; |
+ struct cache_ops o_caops; |
+ struct journal_ops *o_trops; |
+ struct snapshot_ops *o_snops; |
+}; |
+ |
+#define FILTER_FS_TYPES 6 |
+#define FILTER_FS_EXT2 0 |
+#define FILTER_FS_EXT3 1 |
+#define FILTER_FS_REISERFS 2 |
+#define FILTER_FS_XFS 3 |
+#define FILTER_FS_OBDFS 4 |
+#define FILTER_FS_TMPFS 5 |
+extern struct filter_fs filter_oppar[FILTER_FS_TYPES]; |
+ |
+struct filter_fs *filter_get_filter_fs(const char *cache_type); |
+void filter_setup_journal_ops(struct filter_fs *ops, char *cache_type); |
+inline struct super_operations *filter_c2usops(struct filter_fs *cache); |
+inline struct inode_operations *filter_c2ufiops(struct filter_fs *cache); |
+inline struct inode_operations *filter_c2udiops(struct filter_fs *cache); |
+inline struct inode_operations *filter_c2usiops(struct filter_fs *cache); |
+inline struct file_operations *filter_c2uffops(struct filter_fs *cache); |
+inline struct file_operations *filter_c2udfops(struct filter_fs *cache); |
+inline struct file_operations *filter_c2usfops(struct filter_fs *cache); |
+inline struct super_operations *filter_c2csops(struct filter_fs *cache); |
+inline struct inode_operations *filter_c2cfiops(struct filter_fs *cache); |
+inline struct inode_operations *filter_c2cdiops(struct filter_fs *cache); |
+inline struct inode_operations *filter_c2csiops(struct filter_fs *cache); |
+inline struct file_operations *filter_c2cffops(struct filter_fs *cache); |
+inline struct file_operations *filter_c2cdfops(struct filter_fs *cache); |
+inline struct file_operations *filter_c2csfops(struct filter_fs *cache); |
+inline struct dentry_operations *filter_c2cdops(struct filter_fs *cache); |
+inline struct dentry_operations *filter_c2udops(struct filter_fs *cache); |
+ |
+void filter_setup_super_ops(struct filter_fs *cache, struct super_operations *cache_ops, struct super_operations *filter_sops); |
+void filter_setup_dir_ops(struct filter_fs *cache, struct inode *cache_inode, struct inode_operations *filter_iops, struct file_operations *ffops); |
+void filter_setup_file_ops(struct filter_fs *cache, struct inode *cache_inode, struct inode_operations *filter_iops, struct file_operations *filter_op); |
+void filter_setup_symlink_ops(struct filter_fs *cache, struct inode *cache_inode, struct inode_operations *filter_iops, struct file_operations *filter_op); |
+void filter_setup_dentry_ops(struct filter_fs *cache, struct dentry_operations *cache_dop, struct dentry_operations *filter_dop); |
+ |
+ |
+#define PRESTO_DEBUG |
+#ifdef PRESTO_DEBUG |
+/* debugging masks */ |
+#define D_SUPER 1 |
+#define D_INODE 2 /* print entry and exit into procedure */ |
+#define D_FILE 4 |
+#define D_CACHE 8 /* cache debugging */ |
+#define D_MALLOC 16 /* print malloc, de-alloc information */ |
+#define D_JOURNAL 32 |
+#define D_UPCALL 64 /* up and downcall debugging */ |
+#define D_PSDEV 128 |
+#define D_PIOCTL 256 |
+#define D_SPECIAL 512 |
+#define D_TIMING 1024 |
+#define D_DOWNCALL 2048 |
+ |
+#define FDEBUG(mask, format, a...) \ |
+ do { \ |
+ if (filter_debug & mask) { \ |
+ printk("(%s,l. %d): ", __FUNCTION__, __LINE__); \ |
+ printk(format, ##a); } \ |
+ } while (0) |
+ |
+#define FENTRY \ |
+ if(filter_print_entry) \ |
+ printk("Process %d entered %s\n", current->pid, __FUNCTION__) |
+ |
+#define FEXIT \ |
+ if(filter_print_entry) \ |
+ printk("Process %d leaving %s at %d\n", current->pid, \ |
+ __FUNCTION__,__LINE__) |
+#endif |
+#endif |
+#endif |
Index: linuxc26/include/linux/atm_suni.h |
=================================================================== |
--- linuxc26/include/linux/atm_suni.h (nonexistent) |
+++ linuxc26/include/linux/atm_suni.h (revision 422) |
@@ -0,0 +1,12 @@ |
+/* atm_suni.h - Driver-specific declarations of the SUNI driver (for use by |
+ driver-specific utilities) */ |
+ |
+/* Written 1998,2000 by Werner Almesberger, EPFL ICA */ |
+ |
+ |
+#ifndef LINUX_ATM_SUNI_H |
+#define LINUX_ATM_SUNI_H |
+ |
+/* everything obsoleted */ |
+ |
+#endif |
Index: linuxc26/include/linux/notifier.h |
=================================================================== |
--- linuxc26/include/linux/notifier.h (nonexistent) |
+++ linuxc26/include/linux/notifier.h (revision 422) |
@@ -0,0 +1,70 @@ |
+/* |
+ * Routines to manage notifier chains for passing status changes to any |
+ * interested routines. We need this instead of hard coded call lists so |
+ * that modules can poke their nose into the innards. The network devices |
+ * needed them so here they are for the rest of you. |
+ * |
+ * Alan Cox <Alan.Cox@linux.org> |
+ */ |
+ |
+#ifndef _LINUX_NOTIFIER_H |
+#define _LINUX_NOTIFIER_H |
+#include <linux/errno.h> |
+ |
+struct notifier_block |
+{ |
+ int (*notifier_call)(struct notifier_block *self, unsigned long, void *); |
+ struct notifier_block *next; |
+ int priority; |
+}; |
+ |
+ |
+#ifdef __KERNEL__ |
+ |
+extern int notifier_chain_register(struct notifier_block **list, struct notifier_block *n); |
+extern int notifier_chain_unregister(struct notifier_block **nl, struct notifier_block *n); |
+extern int notifier_call_chain(struct notifier_block **n, unsigned long val, void *v); |
+ |
+#define NOTIFY_DONE 0x0000 /* Don't care */ |
+#define NOTIFY_OK 0x0001 /* Suits me */ |
+#define NOTIFY_STOP_MASK 0x8000 /* Don't call further */ |
+#define NOTIFY_BAD (NOTIFY_STOP_MASK|0x0002) /* Bad/Veto action */ |
+ |
+/* |
+ * Declared notifiers so far. I can imagine quite a few more chains |
+ * over time (eg laptop power reset chains, reboot chain (to clean |
+ * device units up), device [un]mount chain, module load/unload chain, |
+ * low memory chain, screenblank chain (for plug in modular screenblankers) |
+ * VC switch chains (for loadable kernel svgalib VC switch helpers) etc... |
+ */ |
+ |
+/* netdevice notifier chain */ |
+#define NETDEV_UP 0x0001 /* For now you can't veto a device up/down */ |
+#define NETDEV_DOWN 0x0002 |
+#define NETDEV_REBOOT 0x0003 /* Tell a protocol stack a network interface |
+ detected a hardware crash and restarted |
+ - we can use this eg to kick tcp sessions |
+ once done */ |
+#define NETDEV_CHANGE 0x0004 /* Notify device state change */ |
+#define NETDEV_REGISTER 0x0005 |
+#define NETDEV_UNREGISTER 0x0006 |
+#define NETDEV_CHANGEMTU 0x0007 |
+#define NETDEV_CHANGEADDR 0x0008 |
+#define NETDEV_GOING_DOWN 0x0009 |
+#define NETDEV_CHANGENAME 0x000A |
+ |
+#define SYS_DOWN 0x0001 /* Notify of system down */ |
+#define SYS_RESTART SYS_DOWN |
+#define SYS_HALT 0x0002 /* Notify of system halt */ |
+#define SYS_POWER_OFF 0x0003 /* Notify of system power off */ |
+ |
+#define NETLINK_URELEASE 0x0001 /* Unicast netlink socket released */ |
+ |
+#define CPU_ONLINE 0x0002 /* CPU (unsigned)v is up */ |
+#define CPU_UP_PREPARE 0x0003 /* CPU (unsigned)v coming up */ |
+#define CPU_UP_CANCELED 0x0004 /* CPU (unsigned)v NOT coming up */ |
+#define CPU_OFFLINE 0x0005 /* CPU (unsigned)v offline (still scheduling) */ |
+#define CPU_DEAD 0x0006 /* CPU (unsigned)v dead */ |
+ |
+#endif /* __KERNEL__ */ |
+#endif /* _LINUX_NOTIFIER_H */ |
Index: linuxc26/include/linux/ioctl32.h |
=================================================================== |
--- linuxc26/include/linux/ioctl32.h (nonexistent) |
+++ linuxc26/include/linux/ioctl32.h (revision 422) |
@@ -0,0 +1,30 @@ |
+#ifndef IOCTL32_H |
+#define IOCTL32_H 1 |
+ |
+struct file; |
+ |
+extern long sys_ioctl(unsigned int, unsigned int, unsigned long); |
+ |
+/* |
+ * Register an 32bit ioctl translation handler for ioctl cmd. |
+ * |
+ * handler == NULL: use 64bit ioctl handler. |
+ * arguments to handler: fd: file descriptor |
+ * cmd: ioctl command. |
+ * arg: ioctl argument |
+ * struct file *file: file descriptor pointer. |
+ */ |
+ |
+extern int register_ioctl32_conversion(unsigned int cmd, int (*handler)(unsigned int, unsigned int, unsigned long, struct file *)); |
+ |
+extern int unregister_ioctl32_conversion(unsigned int cmd); |
+ |
+typedef int (*ioctl_trans_handler_t)(unsigned int, unsigned int, unsigned long, struct file *); |
+ |
+struct ioctl_trans { |
+ unsigned long cmd; |
+ ioctl_trans_handler_t handler; |
+ struct ioctl_trans *next; |
+}; |
+ |
+#endif |
Index: linuxc26/include/linux/compiler-gcc+.h |
=================================================================== |
--- linuxc26/include/linux/compiler-gcc+.h (nonexistent) |
+++ linuxc26/include/linux/compiler-gcc+.h (revision 422) |
@@ -0,0 +1,14 @@ |
+/* Never include this file directly. Include <linux/compiler.h> instead. */ |
+ |
+/* |
+ * These definitions are for Ueber-GCC: always newer than the latest |
+ * version and hence sporting everything plus a kitchen-sink. |
+ */ |
+#include <linux/compiler-gcc.h> |
+ |
+#define inline __inline__ __attribute__((always_inline)) |
+#define __inline__ __inline__ __attribute__((always_inline)) |
+#define __inline __inline__ __attribute__((always_inline)) |
+#define __deprecated __attribute__((deprecated)) |
+#define __attribute_used__ __attribute__((__used__)) |
+#define __attribute_pure__ __attribute__((pure)) |
Index: linuxc26/include/linux/qnx4_fs.h |
=================================================================== |
--- linuxc26/include/linux/qnx4_fs.h (nonexistent) |
+++ linuxc26/include/linux/qnx4_fs.h (revision 422) |
@@ -0,0 +1,152 @@ |
+/* |
+ * Name : qnx4_fs.h |
+ * Author : Richard Frowijn |
+ * Function : qnx4 global filesystem definitions |
+ * Version : 1.0.2 |
+ * Last modified : 2000-01-31 |
+ * |
+ * History : 23-03-1998 created |
+ */ |
+#ifndef _LINUX_QNX4_FS_H |
+#define _LINUX_QNX4_FS_H |
+ |
+#include <linux/qnxtypes.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_SUPER_MAGIC 0x002f /* qnx4 fs detection */ |
+#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; |
+ __u32 di_xblk; |
+ __s32 di_ftime; |
+ __s32 di_mtime; |
+ __s32 di_atime; |
+ __s32 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]; |
+ __u32 dl_inode_blk; |
+ __u8 dl_inode_ndx; |
+ __u8 dl_spare[10]; |
+ __u8 dl_status; |
+}; |
+ |
+struct qnx4_xblk { |
+ __u32 xblk_next_xblk; |
+ __u32 xblk_prev_xblk; |
+ __u8 xblk_num_xtnts; |
+ __u8 xblk_spare[3]; |
+ __s32 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; |
+}; |
+ |
+#ifdef __KERNEL__ |
+ |
+#define QNX4_DEBUG 0 |
+ |
+#if QNX4_DEBUG |
+#define QNX4DEBUG(X) printk X |
+#else |
+#define QNX4DEBUG(X) (void) 0 |
+#endif |
+ |
+struct qnx4_sb_info { |
+ struct buffer_head *sb_buf; /* superblock buffer */ |
+ struct qnx4_super_block *sb; /* our superblock */ |
+ unsigned int Version; /* may be useful */ |
+ struct qnx4_inode_entry *BitMap; /* useful */ |
+}; |
+ |
+struct qnx4_inode_info { |
+ struct qnx4_inode_entry raw; |
+ loff_t mmu_private; |
+ struct inode vfs_inode; |
+}; |
+ |
+extern struct dentry *qnx4_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd); |
+extern unsigned long qnx4_count_free_blocks(struct super_block *sb); |
+extern unsigned long qnx4_block_map(struct inode *inode, long iblock); |
+ |
+extern struct buffer_head *qnx4_getblk(struct inode *, int, int); |
+extern struct buffer_head *qnx4_bread(struct inode *, int, int); |
+ |
+extern struct inode_operations qnx4_file_inode_operations; |
+extern struct inode_operations qnx4_dir_inode_operations; |
+extern struct file_operations qnx4_file_operations; |
+extern struct file_operations qnx4_dir_operations; |
+extern int qnx4_is_free(struct super_block *sb, long block); |
+extern int qnx4_set_bitmap(struct super_block *sb, long block, int busy); |
+extern int qnx4_create(struct inode *inode, struct dentry *dentry, int mode, struct nameidata *nd); |
+extern void qnx4_truncate(struct inode *inode); |
+extern void qnx4_free_inode(struct inode *inode); |
+extern int qnx4_unlink(struct inode *dir, struct dentry *dentry); |
+extern int qnx4_rmdir(struct inode *dir, struct dentry *dentry); |
+extern int qnx4_sync_file(struct file *file, struct dentry *dentry, int); |
+extern int qnx4_sync_inode(struct inode *inode); |
+extern int qnx4_get_block(struct inode *inode, sector_t iblock, struct buffer_head *bh, int create); |
+ |
+static inline struct qnx4_sb_info *qnx4_sb(struct super_block *sb) |
+{ |
+ return sb->s_fs_info; |
+} |
+ |
+static inline struct qnx4_inode_info *qnx4_i(struct inode *inode) |
+{ |
+ return container_of(inode, struct qnx4_inode_info, vfs_inode); |
+} |
+ |
+static inline struct qnx4_inode_entry *qnx4_raw_inode(struct inode *inode) |
+{ |
+ return &qnx4_i(inode)->raw; |
+} |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif |
Index: linuxc26/include/linux/utime.h |
=================================================================== |
--- linuxc26/include/linux/utime.h (nonexistent) |
+++ linuxc26/include/linux/utime.h (revision 422) |
@@ -0,0 +1,9 @@ |
+#ifndef _LINUX_UTIME_H |
+#define _LINUX_UTIME_H |
+ |
+struct utimbuf { |
+ time_t actime; |
+ time_t modtime; |
+}; |
+ |
+#endif |
Index: linuxc26/include/linux/jffs2_fs_sb.h |
=================================================================== |
--- linuxc26/include/linux/jffs2_fs_sb.h (nonexistent) |
+++ linuxc26/include/linux/jffs2_fs_sb.h (revision 422) |
@@ -0,0 +1,117 @@ |
+/* $Id: jffs2_fs_sb.h,v 1.1 2004-01-28 15:25:48 giacomo Exp $ */ |
+ |
+#ifndef _JFFS2_FS_SB |
+#define _JFFS2_FS_SB |
+ |
+#include <linux/types.h> |
+#include <linux/spinlock.h> |
+#include <linux/workqueue.h> |
+#include <linux/completion.h> |
+#include <asm/semaphore.h> |
+#include <linux/timer.h> |
+#include <linux/wait.h> |
+#include <linux/list.h> |
+ |
+#define JFFS2_SB_FLAG_RO 1 |
+#define JFFS2_SB_FLAG_MOUNTING 2 |
+ |
+struct jffs2_inodirty; |
+ |
+/* A struct for the overall file system control. Pointers to |
+ jffs2_sb_info structs are named `c' in the source code. |
+ Nee jffs_control |
+*/ |
+struct jffs2_sb_info { |
+ struct mtd_info *mtd; |
+ |
+ uint32_t highest_ino; |
+ uint32_t checked_ino; |
+ |
+ unsigned int flags; |
+ |
+ struct task_struct *gc_task; /* GC task struct */ |
+ struct semaphore gc_thread_start; /* GC thread start mutex */ |
+ struct completion gc_thread_exit; /* GC thread exit completion port */ |
+ |
+ struct semaphore alloc_sem; /* Used to protect all the following |
+ fields, and also to protect against |
+ out-of-order writing of nodes. |
+ And GC. |
+ */ |
+ uint32_t cleanmarker_size; /* Size of an _inline_ CLEANMARKER |
+ (i.e. zero for OOB CLEANMARKER */ |
+ |
+ uint32_t flash_size; |
+ uint32_t used_size; |
+ uint32_t dirty_size; |
+ uint32_t wasted_size; |
+ uint32_t free_size; |
+ uint32_t erasing_size; |
+ uint32_t bad_size; |
+ uint32_t sector_size; |
+ uint32_t unchecked_size; |
+ |
+ uint32_t nr_free_blocks; |
+ uint32_t nr_erasing_blocks; |
+ |
+ /* Number of free blocks there must be before we... */ |
+ uint8_t resv_blocks_write; /* ... allow a normal filesystem write */ |
+ uint8_t resv_blocks_deletion; /* ... allow a normal filesystem deletion */ |
+ uint8_t resv_blocks_gctrigger; /* ... wake up the GC thread */ |
+ uint8_t resv_blocks_gcbad; /* ... pick a block from the bad_list to GC */ |
+ uint8_t resv_blocks_gcmerge; /* ... merge pages when garbage collecting */ |
+ |
+ uint32_t nospc_dirty_size; |
+ |
+ uint32_t nr_blocks; |
+ struct jffs2_eraseblock *blocks; /* The whole array of blocks. Used for getting blocks |
+ * from the offset (blocks[ofs / sector_size]) */ |
+ struct jffs2_eraseblock *nextblock; /* The block we're currently filling */ |
+ |
+ struct jffs2_eraseblock *gcblock; /* The block we're currently garbage-collecting */ |
+ |
+ struct list_head clean_list; /* Blocks 100% full of clean data */ |
+ struct list_head very_dirty_list; /* Blocks with lots of dirty space */ |
+ struct list_head dirty_list; /* Blocks with some dirty space */ |
+ struct list_head erasable_list; /* Blocks which are completely dirty, and need erasing */ |
+ struct list_head erasable_pending_wbuf_list; /* Blocks which need erasing but only after the current wbuf is flushed */ |
+ struct list_head erasing_list; /* Blocks which are currently erasing */ |
+ struct list_head erase_pending_list; /* Blocks which need erasing now */ |
+ struct list_head erase_complete_list; /* Blocks which are erased and need the clean marker written to them */ |
+ struct list_head free_list; /* Blocks which are free and ready to be used */ |
+ struct list_head bad_list; /* Bad blocks. */ |
+ struct list_head bad_used_list; /* Bad blocks with valid data in. */ |
+ |
+ spinlock_t erase_completion_lock; /* Protect free_list and erasing_list |
+ against erase completion handler */ |
+ wait_queue_head_t erase_wait; /* For waiting for erases to complete */ |
+ |
+ wait_queue_head_t inocache_wq; |
+ struct jffs2_inode_cache **inocache_list; |
+ spinlock_t inocache_lock; |
+ |
+ /* Sem to allow jffs2_garbage_collect_deletion_dirent to |
+ drop the erase_completion_lock while it's holding a pointer |
+ to an obsoleted node. I don't like this. Alternatives welcomed. */ |
+ struct semaphore erase_free_sem; |
+ |
+#ifdef CONFIG_JFFS2_FS_NAND |
+ /* Write-behind buffer for NAND flash */ |
+ unsigned char *wbuf; |
+ uint32_t wbuf_ofs; |
+ uint32_t wbuf_len; |
+ uint32_t wbuf_pagesize; |
+ struct jffs2_inodirty *wbuf_inodes; |
+ |
+ /* Information about out-of-band area usage... */ |
+ struct nand_oobinfo *oobinfo; |
+ uint32_t badblock_pos; |
+ uint32_t fsdata_pos; |
+ uint32_t fsdata_len; |
+#endif |
+ |
+ /* OS-private pointer for getting back to master superblock info */ |
+ void *os_priv; |
+}; |
+ |
+#endif /* _JFFS2_FB_SB */ |
Index: linuxc26/include/linux/sched.h |
=================================================================== |
--- linuxc26/include/linux/sched.h (nonexistent) |
+++ linuxc26/include/linux/sched.h (revision 422) |
@@ -0,0 +1,911 @@ |
+#ifndef _LINUX_SCHED_H |
+#define _LINUX_SCHED_H |
+ |
+#include <asm/param.h> /* for HZ */ |
+ |
+#include <linux/config.h> |
+#include <linux/capability.h> |
+#include <linux/threads.h> |
+#include <linux/kernel.h> |
+#include <linux/types.h> |
+#include <linux/timex.h> |
+#include <linux/jiffies.h> |
+#include <linux/rbtree.h> |
+#include <linux/thread_info.h> |
+#include <linux/cpumask.h> |
+ |
+#include <asm/system.h> |
+#include <asm/semaphore.h> |
+#include <asm/page.h> |
+#include <asm/ptrace.h> |
+#include <asm/mmu.h> |
+ |
+#include <linux/smp.h> |
+#include <linux/sem.h> |
+#include <linux/signal.h> |
+#include <linux/securebits.h> |
+#include <linux/fs_struct.h> |
+#include <linux/compiler.h> |
+#include <linux/completion.h> |
+#include <linux/pid.h> |
+#include <linux/percpu.h> |
+ |
+struct exec_domain; |
+ |
+/* |
+ * 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_IDLETASK 0x00001000 /* set if new pid should be 0 (kernel only)*/ |
+#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 /* Not used - CLONE_THREAD implies detached uniquely */ |
+#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 */ |
+#define CLONE_STOPPED 0x02000000 /* Start in stopped state */ |
+ |
+/* |
+ * List of flags we want to share for kernel threads, |
+ * if only because they are not used by them anyway. |
+ */ |
+#define CLONE_KERNEL (CLONE_FS | CLONE_FILES | CLONE_SIGHAND) |
+ |
+/* |
+ * These are the constant used to fake the fixed-point load-average |
+ * counting. Some notes: |
+ * - 11 bit fractions expand to 22 bits by the multiplies: this gives |
+ * a load-average precision of 10 bits integer + 11 bits fractional |
+ * - if you want to count load-averages more often, you need more |
+ * precision, or rounding will get you. With 2-second counting freq, |
+ * the EXP_n values would be 1981, 2034 and 2043 if still using only |
+ * 11 bit fractions. |
+ */ |
+extern unsigned long avenrun[]; /* Load averages */ |
+ |
+#define FSHIFT 11 /* nr of bits of precision */ |
+#define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */ |
+#define LOAD_FREQ (5*HZ) /* 5 sec intervals */ |
+#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */ |
+#define EXP_5 2014 /* 1/exp(5sec/5min) */ |
+#define EXP_15 2037 /* 1/exp(5sec/15min) */ |
+ |
+#define CALC_LOAD(load,exp,n) \ |
+ load *= exp; \ |
+ load += n*(FIXED_1-exp); \ |
+ load >>= FSHIFT; |
+ |
+#define CT_TO_SECS(x) ((x) / HZ) |
+#define CT_TO_USECS(x) (((x) % HZ) * 1000000/HZ) |
+ |
+extern int nr_threads; |
+extern int last_pid; |
+DECLARE_PER_CPU(unsigned long, process_counts); |
+extern int nr_processes(void); |
+extern unsigned long nr_running(void); |
+extern unsigned long nr_uninterruptible(void); |
+extern unsigned long nr_iowait(void); |
+ |
+#include <linux/time.h> |
+#include <linux/param.h> |
+#include <linux/resource.h> |
+#include <linux/timer.h> |
+ |
+#include <asm/processor.h> |
+ |
+#define TASK_RUNNING 0 |
+#define TASK_INTERRUPTIBLE 1 |
+#define TASK_UNINTERRUPTIBLE 2 |
+#define TASK_STOPPED 4 |
+#define TASK_ZOMBIE 8 |
+#define TASK_DEAD 16 |
+ |
+#define __set_task_state(tsk, state_value) \ |
+ do { (tsk)->state = (state_value); } while (0) |
+#define set_task_state(tsk, state_value) \ |
+ set_mb((tsk)->state, (state_value)) |
+ |
+#define __set_current_state(state_value) \ |
+ do { current->state = (state_value); } while (0) |
+#define set_current_state(state_value) \ |
+ set_mb(current->state, (state_value)) |
+ |
+/* |
+ * Scheduling policies |
+ */ |
+#define SCHED_NORMAL 0 |
+#define SCHED_FIFO 1 |
+#define SCHED_RR 2 |
+ |
+struct sched_param { |
+ int sched_priority; |
+}; |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/spinlock.h> |
+ |
+/* |
+ * This serializes "schedule()" and also protects |
+ * the run-queue from deletions/modifications (but |
+ * _adding_ to the beginning of the run-queue has |
+ * a separate lock). |
+ */ |
+extern rwlock_t tasklist_lock; |
+extern spinlock_t mmlist_lock; |
+ |
+typedef struct task_struct task_t; |
+ |
+extern void sched_init(void); |
+extern void init_idle(task_t *idle, int cpu); |
+ |
+extern void show_state(void); |
+extern void show_regs(struct pt_regs *); |
+ |
+/* |
+ * TASK is a pointer to the task whose backtrace we want to see (or NULL for current |
+ * task), SP is the stack pointer of the first frame that should be shown in the back |
+ * trace (or NULL if the entire call-chain of the task should be shown). |
+ */ |
+extern void show_stack(struct task_struct *task, unsigned long *sp); |
+ |
+void io_schedule(void); |
+long io_schedule_timeout(long timeout); |
+ |
+extern void cpu_init (void); |
+extern void trap_init(void); |
+extern void update_process_times(int user); |
+extern void update_one_process(struct task_struct *p, unsigned long user, |
+ unsigned long system, int cpu); |
+extern void scheduler_tick(int user_tick, int system); |
+extern unsigned long cache_decay_ticks; |
+ |
+ |
+#define MAX_SCHEDULE_TIMEOUT LONG_MAX |
+extern signed long FASTCALL(schedule_timeout(signed long timeout)); |
+asmlinkage void schedule(void); |
+ |
+struct namespace; |
+ |
+/* Maximum number of active map areas.. This is a random (large) number */ |
+#define MAX_MAP_COUNT (65536) |
+ |
+#include <linux/aio.h> |
+ |
+struct mm_struct { |
+ struct vm_area_struct * mmap; /* list of VMAs */ |
+ struct rb_root mm_rb; |
+ struct vm_area_struct * mmap_cache; /* last find_vma result */ |
+ unsigned long free_area_cache; /* first hole */ |
+ pgd_t * pgd; |
+ atomic_t mm_users; /* How many users with user space? */ |
+ atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */ |
+ int map_count; /* number of VMAs */ |
+ struct rw_semaphore mmap_sem; |
+ spinlock_t page_table_lock; /* Protects task page tables and mm->rss */ |
+ |
+ struct list_head mmlist; /* List of all active mm's. These are globally strung |
+ * together off init_mm.mmlist, and are protected |
+ * by mmlist_lock |
+ */ |
+ |
+ unsigned long start_code, end_code, start_data, end_data; |
+ unsigned long start_brk, brk, start_stack; |
+ unsigned long arg_start, arg_end, env_start, env_end; |
+ unsigned long rss, total_vm, locked_vm; |
+ unsigned long def_flags; |
+ cpumask_t cpu_vm_mask; |
+ unsigned long swap_address; |
+ |
+ unsigned long saved_auxv[40]; /* for /proc/PID/auxv */ |
+ |
+ unsigned dumpable:1; |
+#ifdef CONFIG_HUGETLB_PAGE |
+ int used_hugetlb; |
+#endif |
+ /* Architecture-specific MM context */ |
+ mm_context_t context; |
+ |
+ /* coredumping support */ |
+ int core_waiters; |
+ struct completion *core_startup_done, core_done; |
+ |
+ /* aio bits */ |
+ rwlock_t ioctx_list_lock; |
+ struct kioctx *ioctx_list; |
+ |
+ struct kioctx default_kioctx; |
+}; |
+ |
+extern int mmlist_nr; |
+ |
+struct sighand_struct { |
+ atomic_t count; |
+ struct k_sigaction action[_NSIG]; |
+ spinlock_t siglock; |
+}; |
+ |
+/* |
+ * NOTE! "signal_struct" does not have it's own |
+ * locking, because a shared signal_struct always |
+ * implies a shared sighand_struct, so locking |
+ * sighand_struct is always a proper superset of |
+ * the locking of signal_struct. |
+ */ |
+struct signal_struct { |
+ atomic_t count; |
+ |
+ /* current thread group signal load-balancing target: */ |
+ task_t *curr_target; |
+ |
+ /* shared signal handling: */ |
+ struct sigpending shared_pending; |
+ |
+ /* thread group exit support */ |
+ int group_exit; |
+ int group_exit_code; |
+ /* overloaded: |
+ * - notify group_exit_task when ->count is equal to notify_count |
+ * - everyone except group_exit_task is stopped during signal delivery |
+ * of fatal signals, group_exit_task processes the signal. |
+ */ |
+ struct task_struct *group_exit_task; |
+ int notify_count; |
+ |
+ /* thread group stop support, overloads group_exit_code too */ |
+ int group_stop_count; |
+}; |
+ |
+/* |
+ * Priority of a process goes from 0..MAX_PRIO-1, valid RT |
+ * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL tasks are |
+ * in the range MAX_RT_PRIO..MAX_PRIO-1. Priority values |
+ * are inverted: lower p->prio value means higher priority. |
+ * |
+ * The MAX_RT_USER_PRIO value allows the actual maximum |
+ * RT priority to be separate from the value exported to |
+ * user-space. This allows kernel threads to set their |
+ * priority to a value higher than any user task. Note: |
+ * MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO. |
+ */ |
+ |
+#define MAX_USER_RT_PRIO 100 |
+#define MAX_RT_PRIO MAX_USER_RT_PRIO |
+ |
+#define MAX_PRIO (MAX_RT_PRIO + 40) |
+ |
+#define rt_task(p) ((p)->prio < MAX_RT_PRIO) |
+ |
+/* |
+ * Some day this will be a full-fledged user tracking system.. |
+ */ |
+struct user_struct { |
+ atomic_t __count; /* reference count */ |
+ atomic_t processes; /* How many processes does this user have? */ |
+ atomic_t files; /* How many open files does this user have? */ |
+ |
+ /* Hash table maintenance information */ |
+ struct list_head uidhash_list; |
+ uid_t uid; |
+}; |
+ |
+extern struct user_struct *find_user(uid_t); |
+ |
+extern struct user_struct root_user; |
+#define INIT_USER (&root_user) |
+ |
+typedef struct prio_array prio_array_t; |
+struct backing_dev_info; |
+struct reclaim_state; |
+ |
+/* POSIX.1b interval timer structure. */ |
+struct k_itimer { |
+ struct list_head list; /* free/ allocate list */ |
+ spinlock_t it_lock; |
+ clockid_t it_clock; /* which timer type */ |
+ timer_t it_id; /* timer id */ |
+ int it_overrun; /* overrun on pending signal */ |
+ int it_overrun_last; /* overrun on last delivered signal */ |
+ int it_requeue_pending; /* waiting to requeue this timer */ |
+ int it_sigev_notify; /* notify word of sigevent struct */ |
+ int it_sigev_signo; /* signo word of sigevent struct */ |
+ sigval_t it_sigev_value; /* value word of sigevent struct */ |
+ unsigned long it_incr; /* interval specified in jiffies */ |
+ struct task_struct *it_process; /* process to send signal to */ |
+ struct timer_list it_timer; |
+ struct sigqueue *sigq; /* signal queue entry. */ |
+}; |
+ |
+ |
+struct io_context; /* See blkdev.h */ |
+void exit_io_context(void); |
+ |
+struct task_struct { |
+ volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ |
+ struct thread_info *thread_info; |
+ atomic_t usage; |
+ unsigned long flags; /* per process flags, defined below */ |
+ unsigned long ptrace; |
+ |
+ int lock_depth; /* Lock depth */ |
+ |
+ int prio, static_prio; |
+ struct list_head run_list; |
+ prio_array_t *array; |
+ |
+ unsigned long sleep_avg; |
+ long interactive_credit; |
+ unsigned long long timestamp; |
+ int activated; |
+ |
+ unsigned long policy; |
+ cpumask_t cpus_allowed; |
+ unsigned int time_slice, first_time_slice; |
+ |
+ struct list_head tasks; |
+ struct list_head ptrace_children; |
+ struct list_head ptrace_list; |
+ |
+ struct mm_struct *mm, *active_mm; |
+ |
+/* task state */ |
+ struct linux_binfmt *binfmt; |
+ int exit_code, exit_signal; |
+ int pdeath_signal; /* The signal sent when the parent dies */ |
+ /* ??? */ |
+ unsigned long personality; |
+ int did_exec:1; |
+ pid_t pid; |
+ pid_t __pgrp; /* Accessed via process_group() */ |
+ pid_t tty_old_pgrp; |
+ pid_t session; |
+ pid_t tgid; |
+ /* boolean value for session group leader */ |
+ int leader; |
+ /* |
+ * pointers to (original) parent process, youngest child, younger sibling, |
+ * older sibling, respectively. (p->father can be replaced with |
+ * p->parent->pid) |
+ */ |
+ struct task_struct *real_parent; /* real parent process (when being debugged) */ |
+ struct task_struct *parent; /* parent process */ |
+ struct list_head children; /* list of my children */ |
+ struct list_head sibling; /* linkage in my parent's children list */ |
+ struct task_struct *group_leader; /* threadgroup leader */ |
+ |
+ /* PID/PID hash table linkage. */ |
+ struct pid_link pids[PIDTYPE_MAX]; |
+ |
+ wait_queue_head_t wait_chldexit; /* for wait4() */ |
+ struct completion *vfork_done; /* for vfork() */ |
+ int __user *set_child_tid; /* CLONE_CHILD_SETTID */ |
+ int __user *clear_child_tid; /* CLONE_CHILD_CLEARTID */ |
+ |
+ unsigned long rt_priority; |
+ unsigned long it_real_value, it_prof_value, it_virt_value; |
+ unsigned long it_real_incr, it_prof_incr, it_virt_incr; |
+ struct timer_list real_timer; |
+ struct list_head posix_timers; /* POSIX.1b Interval Timers */ |
+ unsigned long utime, stime, cutime, cstime; |
+ unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw; /* context switch counts */ |
+ u64 start_time; |
+/* mm fault and swap info: this can arguably be seen as either mm-specific or thread-specific */ |
+ unsigned long min_flt, maj_flt, nswap, cmin_flt, cmaj_flt, cnswap; |
+/* process credentials */ |
+ uid_t uid,euid,suid,fsuid; |
+ gid_t gid,egid,sgid,fsgid; |
+ int ngroups; |
+ gid_t groups[NGROUPS]; |
+ kernel_cap_t cap_effective, cap_inheritable, cap_permitted; |
+ int keep_capabilities:1; |
+ struct user_struct *user; |
+/* limits */ |
+ struct rlimit rlim[RLIM_NLIMITS]; |
+ unsigned short used_math; |
+ char comm[16]; |
+/* file system info */ |
+ int link_count, total_link_count; |
+ struct tty_struct *tty; /* NULL if no tty */ |
+/* ipc stuff */ |
+ struct sysv_sem sysvsem; |
+/* CPU-specific state of this task */ |
+ struct thread_struct thread; |
+/* filesystem information */ |
+ struct fs_struct *fs; |
+/* open file information */ |
+ struct files_struct *files; |
+/* namespace */ |
+ struct namespace *namespace; |
+/* signal handlers */ |
+ struct signal_struct *signal; |
+ struct sighand_struct *sighand; |
+ |
+ sigset_t blocked, real_blocked; |
+ struct sigpending pending; |
+ |
+ unsigned long sas_ss_sp; |
+ size_t sas_ss_size; |
+ int (*notifier)(void *priv); |
+ void *notifier_data; |
+ sigset_t *notifier_mask; |
+ |
+ void *security; |
+ |
+/* Thread group tracking */ |
+ u32 parent_exec_id; |
+ u32 self_exec_id; |
+/* Protection of (de-)allocation: mm, files, fs, tty */ |
+ spinlock_t alloc_lock; |
+/* Protection of proc_dentry: nesting proc_lock, dcache_lock, write_lock_irq(&tasklist_lock); */ |
+ spinlock_t proc_lock; |
+/* context-switch lock */ |
+ spinlock_t switch_lock; |
+ |
+/* journalling filesystem info */ |
+ void *journal_info; |
+ |
+/* VM state */ |
+ struct reclaim_state *reclaim_state; |
+ |
+ struct dentry *proc_dentry; |
+ struct backing_dev_info *backing_dev_info; |
+ |
+ struct io_context *io_context; |
+ |
+ unsigned long ptrace_message; |
+ siginfo_t *last_siginfo; /* For ptrace use. */ |
+}; |
+ |
+static inline pid_t process_group(struct task_struct *tsk) |
+{ |
+ return tsk->group_leader->__pgrp; |
+} |
+ |
+extern void __put_task_struct(struct task_struct *tsk); |
+#define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0) |
+#define put_task_struct(tsk) \ |
+do { if (atomic_dec_and_test(&(tsk)->usage)) __put_task_struct(tsk); } while(0) |
+ |
+/* |
+ * Per process flags |
+ */ |
+#define PF_ALIGNWARN 0x00000001 /* Print alignment warning msgs */ |
+ /* Not implemented yet, only for 486*/ |
+#define PF_STARTING 0x00000002 /* being created */ |
+#define PF_EXITING 0x00000004 /* getting shut down */ |
+#define PF_DEAD 0x00000008 /* Dead */ |
+#define PF_FORKNOEXEC 0x00000040 /* forked but didn't exec */ |
+#define PF_SUPERPRIV 0x00000100 /* used super-user privileges */ |
+#define PF_DUMPCORE 0x00000200 /* dumped core */ |
+#define PF_SIGNALED 0x00000400 /* killed by a signal */ |
+#define PF_MEMALLOC 0x00000800 /* Allocating memory */ |
+#define PF_MEMDIE 0x00001000 /* Killed for out-of-memory */ |
+#define PF_FLUSHER 0x00002000 /* responsible for disk writeback */ |
+ |
+#define PF_FREEZE 0x00004000 /* this task should be frozen for suspend */ |
+#define PF_IOTHREAD 0x00008000 /* this thread is needed for doing I/O to swap */ |
+#define PF_FROZEN 0x00010000 /* frozen for system suspend */ |
+#define PF_FSTRANS 0x00020000 /* inside a filesystem transaction */ |
+#define PF_KSWAPD 0x00040000 /* I am kswapd */ |
+#define PF_SWAPOFF 0x00080000 /* I am in swapoff */ |
+#define PF_LESS_THROTTLE 0x00100000 /* Throttle me less: I clean memory */ |
+#define PF_SYNCWRITE 0x00200000 /* I am doing a sync write */ |
+ |
+#ifdef CONFIG_SMP |
+extern int set_cpus_allowed(task_t *p, cpumask_t new_mask); |
+#else |
+static inline int set_cpus_allowed(task_t *p, cpumask_t new_mask) |
+{ |
+ return 0; |
+} |
+#endif |
+ |
+extern unsigned long long sched_clock(void); |
+ |
+#ifdef CONFIG_NUMA |
+extern void sched_balance_exec(void); |
+extern void node_nr_running_init(void); |
+#else |
+#define sched_balance_exec() {} |
+#define node_nr_running_init() {} |
+#endif |
+ |
+extern void set_user_nice(task_t *p, long nice); |
+extern int task_prio(task_t *p); |
+extern int task_nice(task_t *p); |
+extern int task_curr(task_t *p); |
+extern int idle_cpu(int cpu); |
+ |
+void yield(void); |
+ |
+/* |
+ * The default (Linux) execution domain. |
+ */ |
+extern struct exec_domain default_exec_domain; |
+ |
+#ifndef INIT_THREAD_SIZE |
+# define INIT_THREAD_SIZE 2048*sizeof(long) |
+#endif |
+ |
+union thread_union { |
+ struct thread_info thread_info; |
+ unsigned long stack[INIT_THREAD_SIZE/sizeof(long)]; |
+}; |
+ |
+#ifndef __HAVE_ARCH_KSTACK_END |
+static inline int kstack_end(void *addr) |
+{ |
+ /* Reliable end of stack detection: |
+ * Some APM bios versions misalign the stack |
+ */ |
+ return !(((unsigned long)addr+sizeof(void*)-1) & (THREAD_SIZE-sizeof(void*))); |
+} |
+#endif |
+ |
+extern union thread_union init_thread_union; |
+extern struct task_struct init_task; |
+ |
+extern struct mm_struct init_mm; |
+ |
+extern struct task_struct *find_task_by_pid(int pid); |
+extern void set_special_pids(pid_t session, pid_t pgrp); |
+extern void __set_special_pids(pid_t session, pid_t pgrp); |
+ |
+/* per-UID process charging. */ |
+extern struct user_struct * alloc_uid(uid_t); |
+extern void free_uid(struct user_struct *); |
+extern void switch_uid(struct user_struct *); |
+ |
+#include <asm/current.h> |
+ |
+extern unsigned long itimer_ticks; |
+extern unsigned long itimer_next; |
+extern void do_timer(struct pt_regs *); |
+ |
+extern int FASTCALL(wake_up_state(struct task_struct * tsk, unsigned int state)); |
+extern int FASTCALL(wake_up_process(struct task_struct * tsk)); |
+#ifdef CONFIG_SMP |
+ extern void FASTCALL(kick_process(struct task_struct * tsk)); |
+#else |
+ static inline void kick_process(struct task_struct *tsk) { } |
+#endif |
+extern void FASTCALL(wake_up_forked_process(struct task_struct * tsk)); |
+extern void FASTCALL(sched_exit(task_t * p)); |
+ |
+asmlinkage long sys_wait4(pid_t pid,unsigned int * stat_addr, int options, struct rusage * ru); |
+ |
+extern int in_group_p(gid_t); |
+extern int in_egroup_p(gid_t); |
+ |
+extern void proc_caches_init(void); |
+extern void flush_signals(struct task_struct *); |
+extern void flush_signal_handlers(struct task_struct *, int force_default); |
+extern int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info); |
+ |
+static inline int dequeue_signal_lock(struct task_struct *tsk, sigset_t *mask, siginfo_t *info) |
+{ |
+ unsigned long flags; |
+ int ret; |
+ |
+ spin_lock_irqsave(&tsk->sighand->siglock, flags); |
+ ret = dequeue_signal(tsk, mask, info); |
+ spin_unlock_irqrestore(&tsk->sighand->siglock, flags); |
+ |
+ return ret; |
+} |
+ |
+extern void block_all_signals(int (*notifier)(void *priv), void *priv, |
+ sigset_t *mask); |
+extern void unblock_all_signals(void); |
+extern void release_task(struct task_struct * p); |
+extern int send_sig_info(int, struct siginfo *, struct task_struct *); |
+extern int send_group_sig_info(int, struct siginfo *, struct task_struct *); |
+extern int force_sig_info(int, struct siginfo *, struct task_struct *); |
+extern int __kill_pg_info(int sig, struct siginfo *info, pid_t pgrp); |
+extern int kill_pg_info(int, struct siginfo *, pid_t); |
+extern int kill_sl_info(int, struct siginfo *, pid_t); |
+extern int kill_proc_info(int, struct siginfo *, pid_t); |
+extern void notify_parent(struct task_struct *, int); |
+extern void do_notify_parent(struct task_struct *, int); |
+extern void force_sig(int, struct task_struct *); |
+extern void force_sig_specific(int, struct task_struct *); |
+extern int send_sig(int, struct task_struct *, int); |
+extern void zap_other_threads(struct task_struct *p); |
+extern int kill_pg(pid_t, int, int); |
+extern int kill_sl(pid_t, int, int); |
+extern int kill_proc(pid_t, int, int); |
+extern struct sigqueue *sigqueue_alloc(void); |
+extern void sigqueue_free(struct sigqueue *); |
+extern int send_sigqueue(int, struct sigqueue *, struct task_struct *); |
+extern int send_group_sigqueue(int, struct sigqueue *, struct task_struct *); |
+extern int do_sigaction(int, const struct k_sigaction *, struct k_sigaction *); |
+extern int do_sigaltstack(const stack_t __user *, stack_t __user *, unsigned long); |
+ |
+/* These can be the second arg to send_sig_info/send_group_sig_info. */ |
+#define SEND_SIG_NOINFO ((struct siginfo *) 0) |
+#define SEND_SIG_PRIV ((struct siginfo *) 1) |
+#define SEND_SIG_FORCED ((struct siginfo *) 2) |
+ |
+/* True if we are on the alternate signal stack. */ |
+ |
+static inline int on_sig_stack(unsigned long sp) |
+{ |
+ return (sp - current->sas_ss_sp < current->sas_ss_size); |
+} |
+ |
+static inline int sas_ss_flags(unsigned long sp) |
+{ |
+ return (current->sas_ss_size == 0 ? SS_DISABLE |
+ : on_sig_stack(sp) ? SS_ONSTACK : 0); |
+} |
+ |
+ |
+#ifdef CONFIG_SECURITY |
+/* code is in security.c */ |
+extern int capable(int cap); |
+#else |
+static inline int capable(int cap) |
+{ |
+ if (cap_raised(current->cap_effective, cap)) { |
+ current->flags |= PF_SUPERPRIV; |
+ return 1; |
+ } |
+ return 0; |
+} |
+#endif |
+ |
+/* |
+ * Routines for handling mm_structs |
+ */ |
+extern struct mm_struct * mm_alloc(void); |
+ |
+/* mmdrop drops the mm and the page tables */ |
+extern inline void FASTCALL(__mmdrop(struct mm_struct *)); |
+static inline void mmdrop(struct mm_struct * mm) |
+{ |
+ if (atomic_dec_and_test(&mm->mm_count)) |
+ __mmdrop(mm); |
+} |
+ |
+/* mmput gets rid of the mappings and all user-space */ |
+extern void mmput(struct mm_struct *); |
+/* Grab a reference to the mm if its not already going away */ |
+extern struct mm_struct *mmgrab(struct mm_struct *); |
+/* Remove the current tasks stale references to the old mm_struct */ |
+extern void mm_release(struct task_struct *, struct mm_struct *); |
+ |
+extern int copy_thread(int, unsigned long, unsigned long, unsigned long, struct task_struct *, struct pt_regs *); |
+extern void flush_thread(void); |
+extern void exit_thread(void); |
+ |
+extern void exit_mm(struct task_struct *); |
+extern void exit_files(struct task_struct *); |
+extern void exit_signal(struct task_struct *); |
+extern void __exit_signal(struct task_struct *); |
+extern void exit_sighand(struct task_struct *); |
+extern void __exit_sighand(struct task_struct *); |
+extern void exit_itimers(struct task_struct *); |
+ |
+extern NORET_TYPE void do_group_exit(int); |
+ |
+extern void reparent_to_init(void); |
+extern void daemonize(const char *, ...); |
+extern int allow_signal(int); |
+extern int disallow_signal(int); |
+extern task_t *child_reaper; |
+ |
+extern int do_execve(char *, char __user * __user *, char __user * __user *, struct pt_regs *); |
+extern long do_fork(unsigned long, unsigned long, struct pt_regs *, unsigned long, int __user *, int __user *); |
+extern struct task_struct * copy_process(unsigned long, unsigned long, struct pt_regs *, unsigned long, int __user *, int __user *); |
+ |
+#ifdef CONFIG_SMP |
+extern void wait_task_inactive(task_t * p); |
+#else |
+#define wait_task_inactive(p) do { } while (0) |
+#endif |
+ |
+#define remove_parent(p) list_del_init(&(p)->sibling) |
+#define add_parent(p, parent) list_add_tail(&(p)->sibling,&(parent)->children) |
+ |
+#define REMOVE_LINKS(p) do { \ |
+ if (thread_group_leader(p)) \ |
+ list_del_init(&(p)->tasks); \ |
+ remove_parent(p); \ |
+ } while (0) |
+ |
+#define SET_LINKS(p) do { \ |
+ if (thread_group_leader(p)) \ |
+ list_add_tail(&(p)->tasks,&init_task.tasks); \ |
+ add_parent(p, (p)->parent); \ |
+ } while (0) |
+ |
+#define next_task(p) list_entry((p)->tasks.next, struct task_struct, tasks) |
+#define prev_task(p) list_entry((p)->tasks.prev, struct task_struct, tasks) |
+ |
+#define for_each_process(p) \ |
+ for (p = &init_task ; (p = next_task(p)) != &init_task ; ) |
+ |
+/* |
+ * Careful: do_each_thread/while_each_thread is a double loop so |
+ * 'break' will not work as expected - use goto instead. |
+ */ |
+#define do_each_thread(g, t) \ |
+ for (g = t = &init_task ; (g = t = next_task(g)) != &init_task ; ) do |
+ |
+#define while_each_thread(g, t) \ |
+ while ((t = next_thread(t)) != g) |
+ |
+extern task_t * FASTCALL(next_thread(task_t *p)); |
+ |
+#define thread_group_leader(p) (p->pid == p->tgid) |
+ |
+static inline int thread_group_empty(task_t *p) |
+{ |
+ struct pid *pid = p->pids[PIDTYPE_TGID].pidptr; |
+ |
+ return pid->task_list.next->next == &pid->task_list; |
+} |
+ |
+#define delay_group_leader(p) \ |
+ (thread_group_leader(p) && !thread_group_empty(p)) |
+ |
+extern void unhash_process(struct task_struct *p); |
+ |
+/* Protects ->fs, ->files, ->mm, and synchronises with wait4(). |
+ * Nests both inside and outside of read_lock(&tasklist_lock). |
+ * It must not be nested with write_lock_irq(&tasklist_lock), |
+ * neither inside nor outside. |
+ */ |
+static inline void task_lock(struct task_struct *p) |
+{ |
+ spin_lock(&p->alloc_lock); |
+} |
+ |
+static inline void task_unlock(struct task_struct *p) |
+{ |
+ spin_unlock(&p->alloc_lock); |
+} |
+ |
+/** |
+ * get_task_mm - acquire a reference to the task's mm |
+ * |
+ * Returns %NULL if the task has no mm. User must release |
+ * the mm via mmput() after use. |
+ */ |
+static inline struct mm_struct * get_task_mm(struct task_struct * task) |
+{ |
+ struct mm_struct * mm; |
+ |
+ task_lock(task); |
+ mm = task->mm; |
+ if (mm) |
+ mm = mmgrab(mm); |
+ task_unlock(task); |
+ |
+ return mm; |
+} |
+ |
+ |
+/* set thread flags in other task's structures |
+ * - see asm/thread_info.h for TIF_xxxx flags available |
+ */ |
+static inline void set_tsk_thread_flag(struct task_struct *tsk, int flag) |
+{ |
+ set_ti_thread_flag(tsk->thread_info,flag); |
+} |
+ |
+static inline void clear_tsk_thread_flag(struct task_struct *tsk, int flag) |
+{ |
+ clear_ti_thread_flag(tsk->thread_info,flag); |
+} |
+ |
+static inline int test_and_set_tsk_thread_flag(struct task_struct *tsk, int flag) |
+{ |
+ return test_and_set_ti_thread_flag(tsk->thread_info,flag); |
+} |
+ |
+static inline int test_and_clear_tsk_thread_flag(struct task_struct *tsk, int flag) |
+{ |
+ return test_and_clear_ti_thread_flag(tsk->thread_info,flag); |
+} |
+ |
+static inline int test_tsk_thread_flag(struct task_struct *tsk, int flag) |
+{ |
+ return test_ti_thread_flag(tsk->thread_info,flag); |
+} |
+ |
+static inline void set_tsk_need_resched(struct task_struct *tsk) |
+{ |
+ set_tsk_thread_flag(tsk,TIF_NEED_RESCHED); |
+} |
+ |
+static inline void clear_tsk_need_resched(struct task_struct *tsk) |
+{ |
+ clear_tsk_thread_flag(tsk,TIF_NEED_RESCHED); |
+} |
+ |
+static inline int signal_pending(struct task_struct *p) |
+{ |
+ return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING)); |
+} |
+ |
+static inline int need_resched(void) |
+{ |
+ return unlikely(test_thread_flag(TIF_NEED_RESCHED)); |
+} |
+ |
+extern void __cond_resched(void); |
+static inline void cond_resched(void) |
+{ |
+ if (need_resched()) |
+ __cond_resched(); |
+} |
+ |
+/* |
+ * cond_resched_lock() - if a reschedule is pending, drop the given lock, |
+ * call schedule, and on return reacquire the lock. |
+ * |
+ * This works OK both with and without CONFIG_PREEMPT. We do strange low-level |
+ * operations here to prevent schedule() from being called twice (once via |
+ * spin_unlock(), once by hand). |
+ */ |
+static inline void cond_resched_lock(spinlock_t * lock) |
+{ |
+ if (need_resched()) { |
+ _raw_spin_unlock(lock); |
+ preempt_enable_no_resched(); |
+ __cond_resched(); |
+ spin_lock(lock); |
+ } |
+} |
+ |
+/* Reevaluate whether the task has signals pending delivery. |
+ This is required every time the blocked sigset_t changes. |
+ callers must hold sighand->siglock. */ |
+ |
+extern FASTCALL(void recalc_sigpending_tsk(struct task_struct *t)); |
+extern void recalc_sigpending(void); |
+ |
+extern void signal_wake_up(struct task_struct *t, int resume_stopped); |
+ |
+/* |
+ * Wrappers for p->thread_info->cpu access. No-op on UP. |
+ */ |
+#ifdef CONFIG_SMP |
+ |
+static inline unsigned int task_cpu(struct task_struct *p) |
+{ |
+ return p->thread_info->cpu; |
+} |
+ |
+static inline void set_task_cpu(struct task_struct *p, unsigned int cpu) |
+{ |
+ p->thread_info->cpu = cpu; |
+} |
+ |
+#else |
+ |
+static inline unsigned int task_cpu(struct task_struct *p) |
+{ |
+ return 0; |
+} |
+ |
+static inline void set_task_cpu(struct task_struct *p, unsigned int cpu) |
+{ |
+} |
+ |
+#endif /* CONFIG_SMP */ |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif |
Index: linuxc26/include/linux/etherdevice.h |
=================================================================== |
--- linuxc26/include/linux/etherdevice.h (nonexistent) |
+++ linuxc26/include/linux/etherdevice.h (revision 422) |
@@ -0,0 +1,73 @@ |
+/* |
+ * INET An implementation of the TCP/IP protocol suite for the LINUX |
+ * operating system. NET is implemented using the BSD Socket |
+ * interface as the means of communication with the user level. |
+ * |
+ * Definitions for the Ethernet handlers. |
+ * |
+ * Version: @(#)eth.h 1.0.4 05/13/93 |
+ * |
+ * Authors: Ross Biro, <bir7@leland.Stanford.Edu> |
+ * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> |
+ * |
+ * Relocated to include/linux where it belongs by Alan Cox |
+ * <gw4pts@gw4pts.ampr.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. |
+ * |
+ * WARNING: This move may well be temporary. This file will get merged with others RSN. |
+ * |
+ */ |
+#ifndef _LINUX_ETHERDEVICE_H |
+#define _LINUX_ETHERDEVICE_H |
+ |
+#include <linux/if_ether.h> |
+ |
+#ifdef __KERNEL__ |
+extern int eth_header(struct sk_buff *skb, struct net_device *dev, |
+ unsigned short type, void *daddr, |
+ void *saddr, unsigned len); |
+extern int eth_rebuild_header(struct sk_buff *skb); |
+extern unsigned short eth_type_trans(struct sk_buff *skb, struct net_device *dev); |
+extern void eth_header_cache_update(struct hh_cache *hh, struct net_device *dev, |
+ unsigned char * haddr); |
+extern int eth_header_cache(struct neighbour *neigh, |
+ struct hh_cache *hh); |
+extern int eth_header_parse(struct sk_buff *skb, |
+ unsigned char *haddr); |
+extern struct net_device *__init_etherdev(struct net_device *dev, int sizeof_priv); |
+static inline struct net_device *init_etherdev(struct net_device *dev, |
+ int sizeof_priv) |
+{ |
+ return __init_etherdev(dev, sizeof_priv); |
+} |
+ |
+extern struct net_device *alloc_etherdev(int sizeof_priv); |
+static inline void eth_copy_and_sum (struct sk_buff *dest, unsigned char *src, int len, int base) |
+{ |
+ memcpy (dest->data, src, len); |
+} |
+ |
+/** |
+ * is_valid_ether_addr - Determine if the given Ethernet address is valid |
+ * @addr: Pointer to a six-byte array containing the Ethernet address |
+ * |
+ * Check that the Ethernet address (MAC) is not 00:00:00:00:00:00, is not |
+ * a multicast address, and is not FF:FF:FF:FF:FF:FF. The multicast |
+ * and FF:FF:... tests are combined into the single test "!(addr[0]&1)". |
+ * |
+ * Return true if the address is valid. |
+ */ |
+static inline int is_valid_ether_addr( u8 *addr ) |
+{ |
+ const char zaddr[6] = {0,}; |
+ |
+ return !(addr[0]&1) && memcmp( addr, zaddr, 6); |
+} |
+ |
+#endif |
+ |
+#endif /* _LINUX_ETHERDEVICE_H */ |
Index: linuxc26/include/linux/resource.h |
=================================================================== |
--- linuxc26/include/linux/resource.h (nonexistent) |
+++ linuxc26/include/linux/resource.h (revision 422) |
@@ -0,0 +1,64 @@ |
+#ifndef _LINUX_RESOURCE_H |
+#define _LINUX_RESOURCE_H |
+ |
+#include <linux/time.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 */ |
+ |
+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 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) |
+ |
+/* |
+ * Due to binary compatibility, the actual resource numbers |
+ * may be different for different linux versions.. |
+ */ |
+#include <asm/resource.h> |
+ |
+#endif |
Index: linuxc26/include/linux/shm.h |
=================================================================== |
--- linuxc26/include/linux/shm.h (nonexistent) |
+++ linuxc26/include/linux/shm.h (revision 422) |
@@ -0,0 +1,100 @@ |
+#ifndef _LINUX_SHM_H_ |
+#define _LINUX_SHM_H_ |
+ |
+#include <linux/ipc.h> |
+#include <asm/page.h> |
+ |
+/* |
+ * 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 */ |
+#define SHMALL (SHMMAX/PAGE_SIZE*(SHMMNI/16)) /* max shm system wide (pages) */ |
+#define SHMSEG SHMMNI /* max shared segs per process */ |
+ |
+#include <asm/shmparam.h> |
+ |
+/* 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 */ |
+ |
+/* 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; |
+}; |
+ |
+#ifdef __KERNEL__ |
+struct shmid_kernel /* private to the kernel */ |
+{ |
+ struct kern_ipc_perm shm_perm; |
+ struct file * shm_file; |
+ int id; |
+ unsigned long shm_nattch; |
+ unsigned long shm_segsz; |
+ time_t shm_atim; |
+ time_t shm_dtim; |
+ time_t shm_ctim; |
+ pid_t shm_cprid; |
+ pid_t shm_lprid; |
+}; |
+ |
+/* shm_mode upper byte flags */ |
+#define SHM_DEST 01000 /* segment will be destroyed on last detach */ |
+#define SHM_LOCKED 02000 /* segment will not be swapped */ |
+#define SHM_HUGETLB 04000 /* segment will use huge TLB pages */ |
+ |
+long sys_shmat (int shmid, char __user *shmaddr, int shmflg, unsigned long *addr); |
+asmlinkage long sys_shmget (key_t key, size_t size, int flag); |
+asmlinkage long sys_shmdt (char __user *shmaddr); |
+asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds __user *buf); |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* _LINUX_SHM_H_ */ |
Index: linuxc26/include/linux/atmsvc.h |
=================================================================== |
--- linuxc26/include/linux/atmsvc.h (nonexistent) |
+++ linuxc26/include/linux/atmsvc.h (revision 422) |
@@ -0,0 +1,54 @@ |
+/* 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 }; |
+ |
+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 |
Index: linuxc26/include/linux/mca.h |
=================================================================== |
--- linuxc26/include/linux/mca.h (nonexistent) |
+++ linuxc26/include/linux/mca.h (revision 422) |
@@ -0,0 +1,152 @@ |
+/* |
+ * Header for Microchannel Architecture Bus |
+ * Written by Martin Kolinek, February 1996 |
+ */ |
+ |
+#ifndef _LINUX_MCA_H |
+#define _LINUX_MCA_H |
+ |
+/* FIXME: This shouldn't happen, but we need everything that previously |
+ * included mca.h to compile. Take it out later when the MCA #includes |
+ * are sorted out */ |
+#include <linux/device.h> |
+ |
+/* get the platform specific defines */ |
+#include <asm/mca.h> |
+ |
+/* The detection of MCA bus is done in the real mode (using BIOS). |
+ * The information is exported to the protected code, where this |
+ * variable is set to one in case MCA bus was detected. |
+ */ |
+#ifndef MCA_bus__is_a_macro |
+extern int MCA_bus; |
+#endif |
+ |
+/* This sets up an information callback for /proc/mca/slot?. The |
+ * function is called with the buffer, slot, and device pointer (or |
+ * some equally informative context information, or nothing, if you |
+ * prefer), and is expected to put useful information into the |
+ * buffer. The adapter name, id, and POS registers get printed |
+ * before this is called though, so don't do it again. |
+ * |
+ * This should be called with a NULL procfn when a module |
+ * unregisters, thus preventing kernel crashes and other such |
+ * nastiness. |
+ */ |
+typedef int (*MCA_ProcFn)(char* buf, int slot, void* dev); |
+ |
+/* Should only be called by the NMI interrupt handler, this will do some |
+ * fancy stuff to figure out what might have generated a NMI. |
+ */ |
+extern void mca_handle_nmi(void); |
+ |
+enum MCA_AdapterStatus { |
+ MCA_ADAPTER_NORMAL = 0, |
+ MCA_ADAPTER_NONE = 1, |
+ MCA_ADAPTER_DISABLED = 2, |
+ MCA_ADAPTER_ERROR = 3 |
+}; |
+ |
+struct mca_device { |
+ u64 dma_mask; |
+ int pos_id; |
+ int slot; |
+ |
+ /* index into id_table, set by the bus match routine */ |
+ int index; |
+ |
+ /* is there a driver installed? 0 - No, 1 - Yes */ |
+ int driver_loaded; |
+ /* POS registers */ |
+ unsigned char pos[8]; |
+ /* if a pseudo adapter of the motherboard, this is the motherboard |
+ * register value to use for setup cycles */ |
+ short pos_register; |
+ |
+ enum MCA_AdapterStatus status; |
+#ifdef CONFIG_MCA_PROC_FS |
+ /* name of the proc/mca file */ |
+ char procname[8]; |
+ /* /proc info callback */ |
+ MCA_ProcFn procfn; |
+ /* device/context info for proc callback */ |
+ void *proc_dev; |
+#endif |
+ struct device dev; |
+ char name[32]; |
+}; |
+#define to_mca_device(mdev) container_of(mdev, struct mca_device, dev) |
+ |
+struct mca_bus_accessor_functions { |
+ unsigned char (*mca_read_pos)(struct mca_device *, int reg); |
+ void (*mca_write_pos)(struct mca_device *, int reg, |
+ unsigned char byte); |
+ int (*mca_transform_irq)(struct mca_device *, int irq); |
+ int (*mca_transform_ioport)(struct mca_device *, |
+ int region); |
+ void * (*mca_transform_memory)(struct mca_device *, |
+ void *memory); |
+}; |
+ |
+struct mca_bus { |
+ u64 default_dma_mask; |
+ int number; |
+ struct mca_bus_accessor_functions f; |
+ struct device dev; |
+ char name[32]; |
+}; |
+#define to_mca_bus(mdev) container_of(mdev, struct mca_bus, dev) |
+ |
+struct mca_driver { |
+ const short *id_table; |
+ void *driver_data; |
+ struct device_driver driver; |
+}; |
+#define to_mca_driver(mdriver) container_of(mdriver, struct mca_driver, driver) |
+ |
+/* Ongoing supported API functions */ |
+extern struct mca_device *mca_find_device_by_slot(int slot); |
+extern int mca_system_init(void); |
+extern struct mca_bus *mca_attach_bus(int); |
+ |
+extern unsigned char mca_device_read_stored_pos(struct mca_device *mca_dev, |
+ int reg); |
+extern unsigned char mca_device_read_pos(struct mca_device *mca_dev, int reg); |
+extern void mca_device_write_pos(struct mca_device *mca_dev, int reg, |
+ unsigned char byte); |
+extern int mca_device_transform_irq(struct mca_device *mca_dev, int irq); |
+extern int mca_device_transform_ioport(struct mca_device *mca_dev, int port); |
+extern void *mca_device_transform_memory(struct mca_device *mca_dev, |
+ void *mem); |
+extern int mca_device_claimed(struct mca_device *mca_dev); |
+extern void mca_device_set_claim(struct mca_device *mca_dev, int val); |
+extern void mca_device_set_name(struct mca_device *mca_dev, const char *name); |
+static inline char *mca_device_get_name(struct mca_device *mca_dev) |
+{ |
+ return mca_dev ? mca_dev->name : NULL; |
+} |
+ |
+extern enum MCA_AdapterStatus mca_device_status(struct mca_device *mca_dev); |
+ |
+extern struct bus_type mca_bus_type; |
+ |
+extern int mca_register_driver(struct mca_driver *drv); |
+extern void mca_unregister_driver(struct mca_driver *drv); |
+ |
+/* WARNING: only called by the boot time device setup */ |
+extern int mca_register_device(int bus, struct mca_device *mca_dev); |
+ |
+#ifdef CONFIG_MCA_PROC_FS |
+extern void mca_do_proc_init(void); |
+extern void mca_set_adapter_procfn(int slot, MCA_ProcFn, void* dev); |
+#else |
+static inline void mca_do_proc_init(void) |
+{ |
+} |
+ |
+static inline void mca_set_adapter_procfn(int slot, MCA_ProcFn *fn, void* dev) |
+{ |
+} |
+#endif |
+ |
+#endif /* _LINUX_MCA_H */ |
Index: linuxc26/include/linux/hdsmart.h |
=================================================================== |
--- linuxc26/include/linux/hdsmart.h (nonexistent) |
+++ linuxc26/include/linux/hdsmart.h (revision 422) |
@@ -0,0 +1,124 @@ |
+/* |
+ * linux/include/linux/hdsmart.h |
+ * |
+ * Copyright (C) 1999-2000 Michael Cornwell <cornwell@acm.org> |
+ * Copyright (C) 2000 Andre Hedrick <andre@linux-ide.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. |
+ * |
+ * You should have received a copy of the GNU General Public License |
+ * (for example /usr/src/linux/COPYING); if not, write to the Free |
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
+ */ |
+ |
+#ifndef _LINUX_HDSMART_H |
+#define _LINUX_HDSMART_H |
+ |
+#define OFFLINE_FULL_SCAN 0 |
+#define SHORT_SELF_TEST 1 |
+#define EXTEND_SELF_TEST 2 |
+#define SHORT_CAPTIVE_SELF_TEST 129 |
+#define EXTEND_CAPTIVE_SELF_TEST 130 |
+ |
+/* smart_attribute is the vendor specific in SFF-8035 spec */ |
+typedef struct ata_smart_attribute_s { |
+ unsigned char id; |
+ unsigned short status_flag; |
+ unsigned char normalized; |
+ unsigned char worse_normal; |
+ unsigned char raw[6]; |
+ unsigned char reserv; |
+} __attribute__ ((packed)) ata_smart_attribute_t; |
+ |
+/* smart_values is format of the read drive Atrribute command */ |
+typedef struct ata_smart_values_s { |
+ unsigned short revnumber; |
+ ata_smart_attribute_t vendor_attributes [30]; |
+ unsigned char offline_data_collection_status; |
+ unsigned char self_test_exec_status; |
+ unsigned short total_time_to_complete_off_line; |
+ unsigned char vendor_specific_366; |
+ unsigned char offline_data_collection_capability; |
+ unsigned short smart_capability; |
+ unsigned char errorlog_capability; |
+ unsigned char vendor_specific_371; |
+ unsigned char short_test_completion_time; |
+ unsigned char extend_test_completion_time; |
+ unsigned char reserved_374_385 [12]; |
+ unsigned char vendor_specific_386_509 [125]; |
+ unsigned char chksum; |
+} __attribute__ ((packed)) ata_smart_values_t; |
+ |
+/* Smart Threshold data structures */ |
+/* Vendor attribute of SMART Threshold */ |
+typedef struct ata_smart_threshold_entry_s { |
+ unsigned char id; |
+ unsigned char normalized_threshold; |
+ unsigned char reserved[10]; |
+} __attribute__ ((packed)) ata_smart_threshold_entry_t; |
+ |
+/* Format of Read SMART THreshold Command */ |
+typedef struct ata_smart_thresholds_s { |
+ unsigned short revnumber; |
+ ata_smart_threshold_entry_t thres_entries[30]; |
+ unsigned char reserved[149]; |
+ unsigned char chksum; |
+} __attribute__ ((packed)) ata_smart_thresholds_t; |
+ |
+typedef struct ata_smart_errorlog_command_struct_s { |
+ unsigned char devicecontrolreg; |
+ unsigned char featuresreg; |
+ unsigned char sector_count; |
+ unsigned char sector_number; |
+ unsigned char cylinder_low; |
+ unsigned char cylinder_high; |
+ unsigned char drive_head; |
+ unsigned char commandreg; |
+ unsigned int timestamp; |
+} __attribute__ ((packed)) ata_smart_errorlog_command_struct_t; |
+ |
+typedef struct ata_smart_errorlog_error_struct_s { |
+ unsigned char error_condition; |
+ unsigned char extended_error[14]; |
+ unsigned char state; |
+ unsigned short timestamp; |
+} __attribute__ ((packed)) ata_smart_errorlog_error_struct_t; |
+ |
+typedef struct ata_smart_errorlog_struct_s { |
+ ata_smart_errorlog_command_struct_t commands[6]; |
+ ata_smart_errorlog_error_struct_t error_struct; |
+} __attribute__ ((packed)) ata_smart_errorlog_struct_t; |
+ |
+typedef struct ata_smart_errorlog_s { |
+ unsigned char revnumber; |
+ unsigned char error_log_pointer; |
+ ata_smart_errorlog_struct_t errorlog_struct[5]; |
+ unsigned short ata_error_count; |
+ unsigned short non_fatal_count; |
+ unsigned short drive_timeout_count; |
+ unsigned char reserved[53]; |
+ unsigned char chksum; |
+} __attribute__ ((packed)) ata_smart_errorlog_t; |
+ |
+typedef struct ata_smart_selftestlog_struct_s { |
+ unsigned char selftestnumber; |
+ unsigned char selfteststatus; |
+ unsigned short timestamp; |
+ unsigned char selftestfailurecheckpoint; |
+ unsigned int lbafirstfailure; |
+ unsigned char vendorspecific[15]; |
+} __attribute__ ((packed)) ata_smart_selftestlog_struct_t; |
+ |
+typedef struct ata_smart_selftestlog_s { |
+ unsigned short revnumber; |
+ ata_smart_selftestlog_struct_t selftest_struct[21]; |
+ unsigned char vendorspecific[2]; |
+ unsigned char mostrecenttest; |
+ unsigned char resevered[2]; |
+ unsigned char chksum; |
+} __attribute__ ((packed)) ata_smart_selftestlog_t; |
+ |
+#endif /* _LINUX_HDSMART_H */ |
Index: linuxc26/include/linux/parport_pc.h |
=================================================================== |
--- linuxc26/include/linux/parport_pc.h (nonexistent) |
+++ linuxc26/include/linux/parport_pc.h (revision 422) |
@@ -0,0 +1,225 @@ |
+#ifndef __LINUX_PARPORT_PC_H |
+#define __LINUX_PARPORT_PC_H |
+ |
+#include <asm/io.h> |
+ |
+/* --- register definitions ------------------------------- */ |
+ |
+#define ECONTROL(p) ((p)->base_hi + 0x2) |
+#define CONFIGB(p) ((p)->base_hi + 0x1) |
+#define CONFIGA(p) ((p)->base_hi + 0x0) |
+#define FIFO(p) ((p)->base_hi + 0x0) |
+#define EPPDATA(p) ((p)->base + 0x4) |
+#define EPPADDR(p) ((p)->base + 0x3) |
+#define CONTROL(p) ((p)->base + 0x2) |
+#define STATUS(p) ((p)->base + 0x1) |
+#define DATA(p) ((p)->base + 0x0) |
+ |
+struct parport_pc_private { |
+ /* Contents of CTR. */ |
+ unsigned char ctr; |
+ |
+ /* Bitmask of writable CTR bits. */ |
+ unsigned char ctr_writable; |
+ |
+ /* Whether or not there's an ECR. */ |
+ int ecr; |
+ |
+ /* Number of PWords that FIFO will hold. */ |
+ int fifo_depth; |
+ |
+ /* Number of bytes per portword. */ |
+ int pword; |
+ |
+ /* Not used yet. */ |
+ int readIntrThreshold; |
+ int writeIntrThreshold; |
+ |
+ /* buffer suitable for DMA, if DMA enabled */ |
+ char *dma_buf; |
+ dma_addr_t dma_handle; |
+ struct pci_dev *dev; |
+}; |
+ |
+extern __inline__ void parport_pc_write_data(struct parport *p, unsigned char d) |
+{ |
+#ifdef DEBUG_PARPORT |
+ printk (KERN_DEBUG "parport_pc_write_data(%p,0x%02x)\n", p, d); |
+#endif |
+ outb(d, DATA(p)); |
+} |
+ |
+extern __inline__ unsigned char parport_pc_read_data(struct parport *p) |
+{ |
+ unsigned char val = inb (DATA (p)); |
+#ifdef DEBUG_PARPORT |
+ printk (KERN_DEBUG "parport_pc_read_data(%p) = 0x%02x\n", |
+ p, val); |
+#endif |
+ return val; |
+} |
+ |
+#ifdef DEBUG_PARPORT |
+extern __inline__ void dump_parport_state (char *str, struct parport *p) |
+{ |
+ /* here's hoping that reading these ports won't side-effect anything underneath */ |
+ unsigned char ecr = inb (ECONTROL (p)); |
+ unsigned char dcr = inb (CONTROL (p)); |
+ unsigned char dsr = inb (STATUS (p)); |
+ static char *ecr_modes[] = {"SPP", "PS2", "PPFIFO", "ECP", "xXx", "yYy", "TST", "CFG"}; |
+ const struct parport_pc_private *priv = (parport_pc_private *)p->physport->private_data; |
+ int i; |
+ |
+ printk (KERN_DEBUG "*** parport state (%s): ecr=[%s", str, ecr_modes[(ecr & 0xe0) >> 5]); |
+ if (ecr & 0x10) printk (",nErrIntrEn"); |
+ if (ecr & 0x08) printk (",dmaEn"); |
+ if (ecr & 0x04) printk (",serviceIntr"); |
+ if (ecr & 0x02) printk (",f_full"); |
+ if (ecr & 0x01) printk (",f_empty"); |
+ for (i=0; i<2; i++) { |
+ printk ("] dcr(%s)=[", i ? "soft" : "hard"); |
+ dcr = i ? priv->ctr : inb (CONTROL (p)); |
+ |
+ if (dcr & 0x20) { |
+ printk ("rev"); |
+ } else { |
+ printk ("fwd"); |
+ } |
+ if (dcr & 0x10) printk (",ackIntEn"); |
+ if (!(dcr & 0x08)) printk (",N-SELECT-IN"); |
+ if (dcr & 0x04) printk (",N-INIT"); |
+ if (!(dcr & 0x02)) printk (",N-AUTOFD"); |
+ if (!(dcr & 0x01)) printk (",N-STROBE"); |
+ } |
+ printk ("] dsr=["); |
+ if (!(dsr & 0x80)) printk ("BUSY"); |
+ if (dsr & 0x40) printk (",N-ACK"); |
+ if (dsr & 0x20) printk (",PERROR"); |
+ if (dsr & 0x10) printk (",SELECT"); |
+ if (dsr & 0x08) printk (",N-FAULT"); |
+ printk ("]\n"); |
+ return; |
+} |
+#else /* !DEBUG_PARPORT */ |
+#define dump_parport_state(args...) |
+#endif /* !DEBUG_PARPORT */ |
+ |
+/* __parport_pc_frob_control differs from parport_pc_frob_control in that |
+ * it doesn't do any extra masking. */ |
+static __inline__ unsigned char __parport_pc_frob_control (struct parport *p, |
+ unsigned char mask, |
+ unsigned char val) |
+{ |
+ struct parport_pc_private *priv = p->physport->private_data; |
+ unsigned char ctr = priv->ctr; |
+#ifdef DEBUG_PARPORT |
+ printk (KERN_DEBUG |
+ "__parport_pc_frob_control(%02x,%02x): %02x -> %02x\n", |
+ mask, val, ctr, ((ctr & ~mask) ^ val) & priv->ctr_writable); |
+#endif |
+ ctr = (ctr & ~mask) ^ val; |
+ ctr &= priv->ctr_writable; /* only write writable bits. */ |
+ outb (ctr, CONTROL (p)); |
+ priv->ctr = ctr; /* Update soft copy */ |
+ return ctr; |
+} |
+ |
+extern __inline__ void parport_pc_data_reverse (struct parport *p) |
+{ |
+ __parport_pc_frob_control (p, 0x20, 0x20); |
+} |
+ |
+extern __inline__ void parport_pc_data_forward (struct parport *p) |
+{ |
+ __parport_pc_frob_control (p, 0x20, 0x00); |
+} |
+ |
+extern __inline__ void parport_pc_write_control (struct parport *p, |
+ unsigned char d) |
+{ |
+ const unsigned char wm = (PARPORT_CONTROL_STROBE | |
+ PARPORT_CONTROL_AUTOFD | |
+ PARPORT_CONTROL_INIT | |
+ PARPORT_CONTROL_SELECT); |
+ |
+ /* Take this out when drivers have adapted to newer interface. */ |
+ if (d & 0x20) { |
+ printk (KERN_DEBUG "%s (%s): use data_reverse for this!\n", |
+ p->name, p->cad->name); |
+ parport_pc_data_reverse (p); |
+ } |
+ |
+ __parport_pc_frob_control (p, wm, d & wm); |
+} |
+ |
+extern __inline__ unsigned char parport_pc_read_control(struct parport *p) |
+{ |
+ const unsigned char rm = (PARPORT_CONTROL_STROBE | |
+ PARPORT_CONTROL_AUTOFD | |
+ PARPORT_CONTROL_INIT | |
+ PARPORT_CONTROL_SELECT); |
+ const struct parport_pc_private *priv = p->physport->private_data; |
+ return priv->ctr & rm; /* Use soft copy */ |
+} |
+ |
+extern __inline__ unsigned char parport_pc_frob_control (struct parport *p, |
+ unsigned char mask, |
+ unsigned char val) |
+{ |
+ const unsigned char wm = (PARPORT_CONTROL_STROBE | |
+ PARPORT_CONTROL_AUTOFD | |
+ PARPORT_CONTROL_INIT | |
+ PARPORT_CONTROL_SELECT); |
+ |
+ /* Take this out when drivers have adapted to newer interface. */ |
+ if (mask & 0x20) { |
+ printk (KERN_DEBUG "%s (%s): use data_%s for this!\n", |
+ p->name, p->cad->name, |
+ (val & 0x20) ? "reverse" : "forward"); |
+ if (val & 0x20) |
+ parport_pc_data_reverse (p); |
+ else |
+ parport_pc_data_forward (p); |
+ } |
+ |
+ /* Restrict mask and val to control lines. */ |
+ mask &= wm; |
+ val &= wm; |
+ |
+ return __parport_pc_frob_control (p, mask, val); |
+} |
+ |
+extern __inline__ unsigned char parport_pc_read_status(struct parport *p) |
+{ |
+ return inb(STATUS(p)); |
+} |
+ |
+ |
+extern __inline__ void parport_pc_disable_irq(struct parport *p) |
+{ |
+ __parport_pc_frob_control (p, 0x10, 0x00); |
+} |
+ |
+extern __inline__ void parport_pc_enable_irq(struct parport *p) |
+{ |
+ __parport_pc_frob_control (p, 0x10, 0x10); |
+} |
+ |
+extern void parport_pc_release_resources(struct parport *p); |
+ |
+extern int parport_pc_claim_resources(struct parport *p); |
+ |
+extern void parport_pc_init_state(struct pardevice *, struct parport_state *s); |
+ |
+extern void parport_pc_save_state(struct parport *p, struct parport_state *s); |
+ |
+extern void parport_pc_restore_state(struct parport *p, struct parport_state *s); |
+ |
+/* PCMCIA code will want to get us to look at a port. Provide a mechanism. */ |
+extern struct parport *parport_pc_probe_port (unsigned long base, |
+ unsigned long base_hi, |
+ int irq, int dma, |
+ struct pci_dev *dev); |
+extern void parport_pc_unregister_port (struct parport *p); |
+ |
+#endif |
Index: linuxc26/include/linux/nfs3.h |
=================================================================== |
--- linuxc26/include/linux/nfs3.h (nonexistent) |
+++ linuxc26/include/linux/nfs3.h (revision 422) |
@@ -0,0 +1,105 @@ |
+/* |
+ * NFSv3 protocol definitions |
+ */ |
+#ifndef _LINUX_NFS3_H |
+#define _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_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_PROGRAM 100005 |
+#define NFS_MNT3_VERSION 3 |
+#define MOUNTPROC3_NULL 0 |
+#define MOUNTPROC3_MNT 1 |
+#define MOUNTPROC3_UMNT 3 |
+#define MOUNTPROC3_UMNTALL 4 |
+ |
+ |
+#if defined(__KERNEL__) || defined(NFS_NEED_KERNEL_TYPES) |
+ |
+/* Number of 32bit words in post_op_attr */ |
+#define NFS3_POST_OP_ATTR_WORDS 22 |
+ |
+#endif /* __KERNEL__ */ |
+#endif /* _LINUX_NFS3_H */ |
Index: linuxc26/include/linux/fd1772.h |
=================================================================== |
--- linuxc26/include/linux/fd1772.h (nonexistent) |
+++ linuxc26/include/linux/fd1772.h (revision 422) |
@@ -0,0 +1,80 @@ |
+#ifndef _LINUX_FD1772REG_H |
+#define _LINUX_FD1772REG_H |
+ |
+/* |
+** WD1772 stuff - originally from the M68K Linux |
+ * Modified for Archimedes by Dave Gilbert (gilbertd@cs.man.ac.uk) |
+ */ |
+ |
+/* register codes */ |
+ |
+#define FDC1772SELREG_STP (0x80) /* command/status register */ |
+#define FDC1772SELREG_TRA (0x82) /* track register */ |
+#define FDC1772SELREG_SEC (0x84) /* sector register */ |
+#define FDC1772SELREG_DTA (0x86) /* data register */ |
+ |
+/* register names for FDC1772_READ/WRITE macros */ |
+ |
+#define FDC1772REG_CMD 0 |
+#define FDC1772REG_STATUS 0 |
+#define FDC1772REG_TRACK 2 |
+#define FDC1772REG_SECTOR 4 |
+#define FDC1772REG_DATA 6 |
+ |
+/* command opcodes */ |
+ |
+#define FDC1772CMD_RESTORE (0x00) /* - */ |
+#define FDC1772CMD_SEEK (0x10) /* | */ |
+#define FDC1772CMD_STEP (0x20) /* | TYP 1 Commands */ |
+#define FDC1772CMD_STIN (0x40) /* | */ |
+#define FDC1772CMD_STOT (0x60) /* - */ |
+#define FDC1772CMD_RDSEC (0x80) /* - TYP 2 Commands */ |
+#define FDC1772CMD_WRSEC (0xa0) /* - " */ |
+#define FDC1772CMD_RDADR (0xc0) /* - */ |
+#define FDC1772CMD_RDTRA (0xe0) /* | TYP 3 Commands */ |
+#define FDC1772CMD_WRTRA (0xf0) /* - */ |
+#define FDC1772CMD_FORCI (0xd0) /* - TYP 4 Command */ |
+ |
+/* command modifier bits */ |
+ |
+#define FDC1772CMDADD_SR6 (0x00) /* step rate settings */ |
+#define FDC1772CMDADD_SR12 (0x01) |
+#define FDC1772CMDADD_SR2 (0x02) |
+#define FDC1772CMDADD_SR3 (0x03) |
+#define FDC1772CMDADD_V (0x04) /* verify */ |
+#define FDC1772CMDADD_H (0x08) /* wait for spin-up */ |
+#define FDC1772CMDADD_U (0x10) /* update track register */ |
+#define FDC1772CMDADD_M (0x10) /* multiple sector access */ |
+#define FDC1772CMDADD_E (0x04) /* head settling flag */ |
+#define FDC1772CMDADD_P (0x02) /* precompensation */ |
+#define FDC1772CMDADD_A0 (0x01) /* DAM flag */ |
+ |
+/* status register bits */ |
+ |
+#define FDC1772STAT_MOTORON (0x80) /* motor on */ |
+#define FDC1772STAT_WPROT (0x40) /* write protected (FDC1772CMD_WR*) */ |
+#define FDC1772STAT_SPINUP (0x20) /* motor speed stable (Type I) */ |
+#define FDC1772STAT_DELDAM (0x20) /* sector has deleted DAM (Type II+III) */ |
+#define FDC1772STAT_RECNF (0x10) /* record not found */ |
+#define FDC1772STAT_CRC (0x08) /* CRC error */ |
+#define FDC1772STAT_TR00 (0x04) /* Track 00 flag (Type I) */ |
+#define FDC1772STAT_LOST (0x04) /* Lost Data (Type II+III) */ |
+#define FDC1772STAT_IDX (0x02) /* Index status (Type I) */ |
+#define FDC1772STAT_DRQ (0x02) /* DRQ status (Type II+III) */ |
+#define FDC1772STAT_BUSY (0x01) /* FDC1772 is busy */ |
+ |
+ |
+/* PSG Port A Bit Nr 0 .. Side Sel .. 0 -> Side 1 1 -> Side 2 */ |
+#define DSKSIDE (0x01) |
+ |
+#define DSKDRVNONE (0x06) |
+#define DSKDRV0 (0x02) |
+#define DSKDRV1 (0x04) |
+ |
+/* step rates */ |
+#define FDC1772STEP_6 0x00 |
+#define FDC1772STEP_12 0x01 |
+#define FDC1772STEP_2 0x02 |
+#define FDC1772STEP_3 0x03 |
+ |
+#endif |
Index: linuxc26/include/linux/amigaffs.h |
=================================================================== |
--- linuxc26/include/linux/amigaffs.h (nonexistent) |
+++ linuxc26/include/linux/amigaffs.h (revision 422) |
@@ -0,0 +1,276 @@ |
+#ifndef AMIGAFFS_H |
+#define AMIGAFFS_H |
+ |
+#include <linux/types.h> |
+#include <linux/buffer_head.h> |
+#include <linux/string.h> |
+#include <asm/byteorder.h> |
+ |
+/* AmigaOS allows file names with up to 30 characters length. |
+ * Names longer than that will be silently truncated. If you |
+ * want to disallow this, comment out the following #define. |
+ * Creating filesystem objects with longer names will then |
+ * result in an error (ENAMETOOLONG). |
+ */ |
+/*#define AFFS_NO_TRUNCATE */ |
+ |
+/* Ugly macros make the code more pretty. */ |
+ |
+#define GET_END_PTR(st,p,sz) ((st *)((char *)(p)+((sz)-sizeof(st)))) |
+#define AFFS_GET_HASHENTRY(data,hashkey) be32_to_cpu(((struct dir_front *)data)->hashtable[hashkey]) |
+#define AFFS_BLOCK(sb, bh, blk) (AFFS_HEAD(bh)->table[AFFS_SB(sb)->s_hashsize-1-(blk)]) |
+ |
+static inline void |
+affs_set_blocksize(struct super_block *sb, int size) |
+{ |
+ sb_set_blocksize(sb, size); |
+} |
+static inline struct buffer_head * |
+affs_bread(struct super_block *sb, int block) |
+{ |
+ pr_debug("affs_bread: %d\n", block); |
+ if (block >= AFFS_SB(sb)->s_reserved && block < AFFS_SB(sb)->s_partition_size) |
+ return sb_bread(sb, block); |
+ return NULL; |
+} |
+static inline struct buffer_head * |
+affs_getblk(struct super_block *sb, int block) |
+{ |
+ pr_debug("affs_getblk: %d\n", block); |
+ if (block >= AFFS_SB(sb)->s_reserved && block < AFFS_SB(sb)->s_partition_size) |
+ return sb_getblk(sb, block); |
+ return NULL; |
+} |
+static inline struct buffer_head * |
+affs_getzeroblk(struct super_block *sb, int block) |
+{ |
+ struct buffer_head *bh; |
+ pr_debug("affs_getzeroblk: %d\n", block); |
+ if (block >= AFFS_SB(sb)->s_reserved && block < AFFS_SB(sb)->s_partition_size) { |
+ bh = sb_getblk(sb, block); |
+ lock_buffer(bh); |
+ memset(bh->b_data, 0 , sb->s_blocksize); |
+ set_buffer_uptodate(bh); |
+ unlock_buffer(bh); |
+ return bh; |
+ } |
+ return NULL; |
+} |
+static inline struct buffer_head * |
+affs_getemptyblk(struct super_block *sb, int block) |
+{ |
+ struct buffer_head *bh; |
+ pr_debug("affs_getemptyblk: %d\n", block); |
+ if (block >= AFFS_SB(sb)->s_reserved && block < AFFS_SB(sb)->s_partition_size) { |
+ bh = sb_getblk(sb, block); |
+ wait_on_buffer(bh); |
+ set_buffer_uptodate(bh); |
+ return bh; |
+ } |
+ return NULL; |
+} |
+static inline void |
+affs_brelse(struct buffer_head *bh) |
+{ |
+ if (bh) |
+ pr_debug("affs_brelse: %lld\n", (long long) bh->b_blocknr); |
+ brelse(bh); |
+} |
+ |
+static inline void |
+affs_adjust_checksum(struct buffer_head *bh, u32 val) |
+{ |
+ u32 tmp = be32_to_cpu(((u32 *)bh->b_data)[5]); |
+ ((u32 *)bh->b_data)[5] = cpu_to_be32(tmp - val); |
+} |
+static inline void |
+affs_adjust_bitmapchecksum(struct buffer_head *bh, u32 val) |
+{ |
+ u32 tmp = be32_to_cpu(((u32 *)bh->b_data)[0]); |
+ ((u32 *)bh->b_data)[0] = cpu_to_be32(tmp - val); |
+} |
+ |
+static inline void |
+affs_lock_link(struct inode *inode) |
+{ |
+ down(&AFFS_I(inode)->i_link_lock); |
+} |
+static inline void |
+affs_unlock_link(struct inode *inode) |
+{ |
+ up(&AFFS_I(inode)->i_link_lock); |
+} |
+static inline void |
+affs_lock_dir(struct inode *inode) |
+{ |
+ down(&AFFS_I(inode)->i_hash_lock); |
+} |
+static inline void |
+affs_unlock_dir(struct inode *inode) |
+{ |
+ up(&AFFS_I(inode)->i_hash_lock); |
+} |
+static inline void |
+affs_lock_ext(struct inode *inode) |
+{ |
+ down(&AFFS_I(inode)->i_ext_lock); |
+} |
+static inline void |
+affs_unlock_ext(struct inode *inode) |
+{ |
+ up(&AFFS_I(inode)->i_ext_lock); |
+} |
+ |
+#ifdef __LITTLE_ENDIAN |
+#define BO_EXBITS 0x18UL |
+#elif defined(__BIG_ENDIAN) |
+#define BO_EXBITS 0x00UL |
+#else |
+#error Endianness must be known for affs to work. |
+#endif |
+ |
+#define FS_OFS 0x444F5300 |
+#define FS_FFS 0x444F5301 |
+#define FS_INTLOFS 0x444F5302 |
+#define FS_INTLFFS 0x444F5303 |
+#define FS_DCOFS 0x444F5304 |
+#define FS_DCFFS 0x444F5305 |
+#define MUFS_FS 0x6d754653 /* 'muFS' */ |
+#define MUFS_OFS 0x6d754600 /* 'muF\0' */ |
+#define MUFS_FFS 0x6d754601 /* 'muF\1' */ |
+#define MUFS_INTLOFS 0x6d754602 /* 'muF\2' */ |
+#define MUFS_INTLFFS 0x6d754603 /* 'muF\3' */ |
+#define MUFS_DCOFS 0x6d754604 /* 'muF\4' */ |
+#define MUFS_DCFFS 0x6d754605 /* 'muF\5' */ |
+ |
+#define T_SHORT 2 |
+#define T_LIST 16 |
+#define T_DATA 8 |
+ |
+#define ST_LINKFILE -4 |
+#define ST_FILE -3 |
+#define ST_ROOT 1 |
+#define ST_USERDIR 2 |
+#define ST_SOFTLINK 3 |
+#define ST_LINKDIR 4 |
+ |
+#define AFFS_ROOT_BMAPS 25 |
+ |
+#define AFFS_HEAD(bh) ((struct affs_head *)(bh)->b_data) |
+#define AFFS_TAIL(sb, bh) ((struct affs_tail *)((bh)->b_data+(sb)->s_blocksize-sizeof(struct affs_tail))) |
+#define AFFS_ROOT_HEAD(bh) ((struct affs_root_head *)(bh)->b_data) |
+#define AFFS_ROOT_TAIL(sb, bh) ((struct affs_root_tail *)((bh)->b_data+(sb)->s_blocksize-sizeof(struct affs_root_tail))) |
+#define AFFS_DATA_HEAD(bh) ((struct affs_data_head *)(bh)->b_data) |
+#define AFFS_DATA(bh) (((struct affs_data_head *)(bh)->b_data)->data) |
+ |
+struct affs_date { |
+ u32 days; |
+ u32 mins; |
+ u32 ticks; |
+}; |
+ |
+struct affs_short_date { |
+ u16 days; |
+ u16 mins; |
+ u16 ticks; |
+}; |
+ |
+struct affs_root_head { |
+ u32 ptype; |
+ u32 spare1; |
+ u32 spare2; |
+ u32 hash_size; |
+ u32 spare3; |
+ u32 checksum; |
+ u32 hashtable[1]; |
+}; |
+ |
+struct affs_root_tail { |
+ u32 bm_flag; |
+ u32 bm_blk[AFFS_ROOT_BMAPS]; |
+ u32 bm_ext; |
+ struct affs_date root_change; |
+ u8 disk_name[32]; |
+ u32 spare1; |
+ u32 spare2; |
+ struct affs_date disk_change; |
+ struct affs_date disk_create; |
+ u32 spare3; |
+ u32 spare4; |
+ u32 dcache; |
+ u32 stype; |
+}; |
+ |
+struct affs_head { |
+ u32 ptype; |
+ u32 key; |
+ u32 block_count; |
+ u32 spare1; |
+ u32 first_data; |
+ u32 checksum; |
+ u32 table[1]; |
+}; |
+ |
+struct affs_tail { |
+ u32 spare1; |
+ u16 uid; |
+ u16 gid; |
+ u32 protect; |
+ u32 size; |
+ u8 comment[92]; |
+ struct affs_date change; |
+ u8 name[32]; |
+ u32 spare2; |
+ u32 original; |
+ u32 link_chain; |
+ u32 spare[5]; |
+ u32 hash_chain; |
+ u32 parent; |
+ u32 extension; |
+ u32 stype; |
+}; |
+ |
+struct slink_front |
+{ |
+ u32 ptype; |
+ u32 key; |
+ u32 spare1[3]; |
+ u32 checksum; |
+ u8 symname[1]; /* depends on block size */ |
+}; |
+ |
+struct affs_data_head |
+{ |
+ u32 ptype; |
+ u32 key; |
+ u32 sequence; |
+ u32 size; |
+ u32 next; |
+ u32 checksum; |
+ u8 data[1]; /* depends on block size */ |
+}; |
+ |
+/* Permission bits */ |
+ |
+#define FIBF_OTR_READ 0x8000 |
+#define FIBF_OTR_WRITE 0x4000 |
+#define FIBF_OTR_EXECUTE 0x2000 |
+#define FIBF_OTR_DELETE 0x1000 |
+#define FIBF_GRP_READ 0x0800 |
+#define FIBF_GRP_WRITE 0x0400 |
+#define FIBF_GRP_EXECUTE 0x0200 |
+#define FIBF_GRP_DELETE 0x0100 |
+ |
+#define FIBF_HIDDEN 0x0080 |
+#define FIBF_SCRIPT 0x0040 |
+#define FIBF_PURE 0x0020 /* no use under linux */ |
+#define FIBF_ARCHIVED 0x0010 /* never set, always cleared on write */ |
+#define FIBF_NOREAD 0x0008 /* 0 means allowed */ |
+#define FIBF_NOWRITE 0x0004 /* 0 means allowed */ |
+#define FIBF_NOEXECUTE 0x0002 /* 0 means allowed, ignored under linux */ |
+#define FIBF_NODELETE 0x0001 /* 0 means allowed */ |
+ |
+#define FIBF_OWNER 0x000F /* Bits pertaining to owner */ |
+#define FIBF_MASK 0xEE0E /* Bits modified by Linux */ |
+ |
+#endif |
Index: linuxc26/include/linux/serial167.h |
=================================================================== |
--- linuxc26/include/linux/serial167.h (nonexistent) |
+++ linuxc26/include/linux/serial167.h (revision 422) |
@@ -0,0 +1,171 @@ |
+/* |
+ * serial167.h |
+ * |
+ * Richard Hirst [richard@sleepie.demon.co.uk] |
+ * |
+ * Based on cyclades.h |
+ */ |
+ |
+struct cyclades_monitor { |
+ unsigned long int_count; |
+ unsigned long char_count; |
+ unsigned long char_max; |
+ unsigned long char_last; |
+}; |
+ |
+/* |
+ * This is our internal structure for each serial port's state. |
+ * |
+ * Many fields are paralleled by the structure used by the serial_struct |
+ * structure. |
+ * |
+ * For definitions of the flags field, see tty.h |
+ */ |
+ |
+struct cyclades_port { |
+ int magic; |
+ int type; |
+ int card; |
+ int line; |
+ int flags; /* defined in tty.h */ |
+ struct tty_struct *tty; |
+ int read_status_mask; |
+ int timeout; |
+ int xmit_fifo_size; |
+ int cor1,cor2,cor3,cor4,cor5,cor6,cor7; |
+ int tbpr,tco,rbpr,rco; |
+ int ignore_status_mask; |
+ int close_delay; |
+ int IER; /* Interrupt Enable Register */ |
+ unsigned long event; |
+ unsigned long last_active; |
+ int count; /* # of fd on device */ |
+ int x_char; /* to be pushed out ASAP */ |
+ int x_break; |
+ int blocked_open; /* # of blocked opens */ |
+ unsigned char *xmit_buf; |
+ int xmit_head; |
+ int xmit_tail; |
+ int xmit_cnt; |
+ int default_threshold; |
+ int default_timeout; |
+ struct work_struct tqueue; |
+ wait_queue_head_t open_wait; |
+ wait_queue_head_t close_wait; |
+ struct cyclades_monitor mon; |
+}; |
+ |
+#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 |
+ |
+/* |
+ * Events are used to schedule things to happen at timer-interrupt |
+ * time, instead of at cy interrupt time. |
+ */ |
+#define Cy_EVENT_READ_PROCESS 0 |
+#define Cy_EVENT_WRITE_WAKEUP 1 |
+#define Cy_EVENT_HANGUP 2 |
+#define Cy_EVENT_BREAK 3 |
+#define Cy_EVENT_OPEN_WAKEUP 4 |
+ |
+ |
+ |
+#define CyMaxChipsPerCard 1 |
+ |
+/**** cd2401 registers ****/ |
+ |
+#define CyGFRCR (0x81) |
+#define CyCCR (0x13) |
+#define CyCLR_CHAN (0x40) |
+#define CyINIT_CHAN (0x20) |
+#define CyCHIP_RESET (0x10) |
+#define CyENB_XMTR (0x08) |
+#define CyDIS_XMTR (0x04) |
+#define CyENB_RCVR (0x02) |
+#define CyDIS_RCVR (0x01) |
+#define CyCAR (0xee) |
+#define CyIER (0x11) |
+#define CyMdmCh (0x80) |
+#define CyRxExc (0x20) |
+#define CyRxData (0x08) |
+#define CyTxMpty (0x02) |
+#define CyTxRdy (0x01) |
+#define CyLICR (0x26) |
+#define CyRISR (0x89) |
+#define CyTIMEOUT (0x80) |
+#define CySPECHAR (0x70) |
+#define CyOVERRUN (0x08) |
+#define CyPARITY (0x04) |
+#define CyFRAME (0x02) |
+#define CyBREAK (0x01) |
+#define CyREOIR (0x84) |
+#define CyTEOIR (0x85) |
+#define CyMEOIR (0x86) |
+#define CyNOTRANS (0x08) |
+#define CyRFOC (0x30) |
+#define CyRDR (0xf8) |
+#define CyTDR (0xf8) |
+#define CyMISR (0x8b) |
+#define CyRISR (0x89) |
+#define CyTISR (0x8a) |
+#define CyMSVR1 (0xde) |
+#define CyMSVR2 (0xdf) |
+#define CyDSR (0x80) |
+#define CyDCD (0x40) |
+#define CyCTS (0x20) |
+#define CyDTR (0x02) |
+#define CyRTS (0x01) |
+#define CyRTPRL (0x25) |
+#define CyRTPRH (0x24) |
+#define CyCOR1 (0x10) |
+#define CyPARITY_NONE (0x00) |
+#define CyPARITY_E (0x40) |
+#define CyPARITY_O (0xC0) |
+#define Cy_5_BITS (0x04) |
+#define Cy_6_BITS (0x05) |
+#define Cy_7_BITS (0x06) |
+#define Cy_8_BITS (0x07) |
+#define CyCOR2 (0x17) |
+#define CyETC (0x20) |
+#define CyCtsAE (0x02) |
+#define CyCOR3 (0x16) |
+#define Cy_1_STOP (0x02) |
+#define Cy_2_STOP (0x04) |
+#define CyCOR4 (0x15) |
+#define CyREC_FIFO (0x0F) /* Receive FIFO threshold */ |
+#define CyCOR5 (0x14) |
+#define CyCOR6 (0x18) |
+#define CyCOR7 (0x07) |
+#define CyRBPR (0xcb) |
+#define CyRCOR (0xc8) |
+#define CyTBPR (0xc3) |
+#define CyTCOR (0xc0) |
+#define CySCHR1 (0x1f) |
+#define CySCHR2 (0x1e) |
+#define CyTPR (0xda) |
+#define CyPILR1 (0xe3) |
+#define CyPILR2 (0xe0) |
+#define CyPILR3 (0xe1) |
+#define CyCMR (0x1b) |
+#define CyASYNC (0x02) |
+#define CyLICR (0x26) |
+#define CyLIVR (0x09) |
+#define CySCRL (0x23) |
+#define CySCRH (0x22) |
+#define CyTFTC (0x80) |
+ |
+ |
+/* max number of chars in the FIFO */ |
+ |
+#define CyMAX_CHAR_FIFO 12 |
+ |
+/***************************************************************************/ |
Index: linuxc26/include/linux/tty.h |
=================================================================== |
--- linuxc26/include/linux/tty.h (nonexistent) |
+++ linuxc26/include/linux/tty.h (revision 422) |
@@ -0,0 +1,411 @@ |
+#ifndef _LINUX_TTY_H |
+#define _LINUX_TTY_H |
+ |
+/* |
+ * 'tty.h' defines some structures used by tty_io.c and some defines. |
+ */ |
+ |
+/* |
+ * 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) */ |
+ |
+#ifdef __KERNEL__ |
+#include <linux/config.h> |
+#include <linux/fs.h> |
+#include <linux/major.h> |
+#include <linux/termios.h> |
+#include <linux/workqueue.h> |
+#include <linux/tty_driver.h> |
+#include <linux/tty_ldisc.h> |
+ |
+#include <asm/system.h> |
+ |
+ |
+/* |
+ * Note: don't mess with NR_PTYS until you understand the tty minor |
+ * number allocation game... |
+ * (Note: the *_driver.minor_start values 1, 64, 128, 192 are |
+ * hardcoded at present.) |
+ */ |
+#define NR_PTYS 256 /* ptys/major */ |
+#define NR_LDISCS 16 |
+ |
+/* |
+ * Unix98 PTY's can be defined as any multiple of NR_PTYS up to |
+ * UNIX98_PTY_MAJOR_COUNT; this section defines what we need from the |
+ * config options |
+ */ |
+#ifdef CONFIG_UNIX98_PTYS |
+# define UNIX98_NR_MAJORS ((CONFIG_UNIX98_PTY_COUNT+NR_PTYS-1)/NR_PTYS) |
+# if UNIX98_NR_MAJORS <= 0 |
+# undef CONFIG_UNIX98_PTYS |
+# elif UNIX98_NR_MAJORS > UNIX98_PTY_MAJOR_COUNT |
+# error Too many Unix98 ptys defined |
+# undef UNIX98_NR_MAJORS |
+# define UNIX98_NR_MAJORS UNIX98_PTY_MAJOR_COUNT |
+# endif |
+#endif |
+ |
+/* |
+ * These are set up by the setup-routine at boot-time: |
+ */ |
+ |
+struct screen_info { |
+ u8 orig_x; /* 0x00 */ |
+ u8 orig_y; /* 0x01 */ |
+ u16 dontuse1; /* 0x02 -- EXT_MEM_K sits here */ |
+ u16 orig_video_page; /* 0x04 */ |
+ u8 orig_video_mode; /* 0x06 */ |
+ u8 orig_video_cols; /* 0x07 */ |
+ u16 unused2; /* 0x08 */ |
+ 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 dontuse2, dontuse3; /* 0x20 -- CL_MAGIC and CL_OFFSET here */ |
+ 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 */ |
+ /* 0x36 -- 0x3f reserved for future expansion */ |
+}; |
+ |
+extern struct screen_info screen_info; |
+ |
+#define ORIG_X (screen_info.orig_x) |
+#define ORIG_Y (screen_info.orig_y) |
+#define ORIG_VIDEO_MODE (screen_info.orig_video_mode) |
+#define ORIG_VIDEO_COLS (screen_info.orig_video_cols) |
+#define ORIG_VIDEO_EGA_BX (screen_info.orig_video_ega_bx) |
+#define ORIG_VIDEO_LINES (screen_info.orig_video_lines) |
+#define ORIG_VIDEO_ISVGA (screen_info.orig_video_isVGA) |
+#define ORIG_VIDEO_POINTS (screen_info.orig_video_points) |
+ |
+#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_SNI_RM 0x32 /* SNI RM200 PCI 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. */ |
+ |
+/* |
+ * This character is the same as _POSIX_VDISABLE: it cannot be used as |
+ * a c_cc[] character, but indicates that a particular special character |
+ * isn't in use (eg VINTR has no character etc) |
+ */ |
+#define __DISABLED_CHAR '\0' |
+ |
+/* |
+ * This is the flip buffer used for the tty driver. The buffer is |
+ * located in the tty structure, and is used as a high speed interface |
+ * between the tty driver and the tty line discipline. |
+ */ |
+#define TTY_FLIPBUF_SIZE 512 |
+ |
+struct tty_flip_buffer { |
+ struct work_struct work; |
+ struct semaphore pty_sem; |
+ char *char_buf_ptr; |
+ unsigned char *flag_buf_ptr; |
+ int count; |
+ int buf_num; |
+ unsigned char char_buf[2*TTY_FLIPBUF_SIZE]; |
+ char flag_buf[2*TTY_FLIPBUF_SIZE]; |
+ unsigned char slop[4]; /* N.B. bug overwrites buffer by 1 */ |
+}; |
+/* |
+ * The pty uses char_buf and flag_buf as a contiguous buffer |
+ */ |
+#define PTY_BUF_SIZE 4*TTY_FLIPBUF_SIZE |
+ |
+/* |
+ * When a break, frame error, or parity error happens, these codes are |
+ * stuffed into the flags buffer. |
+ */ |
+#define TTY_NORMAL 0 |
+#define TTY_BREAK 1 |
+#define TTY_FRAME 2 |
+#define TTY_PARITY 3 |
+#define TTY_OVERRUN 4 |
+ |
+#define INTR_CHAR(tty) ((tty)->termios->c_cc[VINTR]) |
+#define QUIT_CHAR(tty) ((tty)->termios->c_cc[VQUIT]) |
+#define ERASE_CHAR(tty) ((tty)->termios->c_cc[VERASE]) |
+#define KILL_CHAR(tty) ((tty)->termios->c_cc[VKILL]) |
+#define EOF_CHAR(tty) ((tty)->termios->c_cc[VEOF]) |
+#define TIME_CHAR(tty) ((tty)->termios->c_cc[VTIME]) |
+#define MIN_CHAR(tty) ((tty)->termios->c_cc[VMIN]) |
+#define SWTC_CHAR(tty) ((tty)->termios->c_cc[VSWTC]) |
+#define START_CHAR(tty) ((tty)->termios->c_cc[VSTART]) |
+#define STOP_CHAR(tty) ((tty)->termios->c_cc[VSTOP]) |
+#define SUSP_CHAR(tty) ((tty)->termios->c_cc[VSUSP]) |
+#define EOL_CHAR(tty) ((tty)->termios->c_cc[VEOL]) |
+#define REPRINT_CHAR(tty) ((tty)->termios->c_cc[VREPRINT]) |
+#define DISCARD_CHAR(tty) ((tty)->termios->c_cc[VDISCARD]) |
+#define WERASE_CHAR(tty) ((tty)->termios->c_cc[VWERASE]) |
+#define LNEXT_CHAR(tty) ((tty)->termios->c_cc[VLNEXT]) |
+#define EOL2_CHAR(tty) ((tty)->termios->c_cc[VEOL2]) |
+ |
+#define _I_FLAG(tty,f) ((tty)->termios->c_iflag & (f)) |
+#define _O_FLAG(tty,f) ((tty)->termios->c_oflag & (f)) |
+#define _C_FLAG(tty,f) ((tty)->termios->c_cflag & (f)) |
+#define _L_FLAG(tty,f) ((tty)->termios->c_lflag & (f)) |
+ |
+#define I_IGNBRK(tty) _I_FLAG((tty),IGNBRK) |
+#define I_BRKINT(tty) _I_FLAG((tty),BRKINT) |
+#define I_IGNPAR(tty) _I_FLAG((tty),IGNPAR) |
+#define I_PARMRK(tty) _I_FLAG((tty),PARMRK) |
+#define I_INPCK(tty) _I_FLAG((tty),INPCK) |
+#define I_ISTRIP(tty) _I_FLAG((tty),ISTRIP) |
+#define I_INLCR(tty) _I_FLAG((tty),INLCR) |
+#define I_IGNCR(tty) _I_FLAG((tty),IGNCR) |
+#define I_ICRNL(tty) _I_FLAG((tty),ICRNL) |
+#define I_IUCLC(tty) _I_FLAG((tty),IUCLC) |
+#define I_IXON(tty) _I_FLAG((tty),IXON) |
+#define I_IXANY(tty) _I_FLAG((tty),IXANY) |
+#define I_IXOFF(tty) _I_FLAG((tty),IXOFF) |
+#define I_IMAXBEL(tty) _I_FLAG((tty),IMAXBEL) |
+ |
+#define O_OPOST(tty) _O_FLAG((tty),OPOST) |
+#define O_OLCUC(tty) _O_FLAG((tty),OLCUC) |
+#define O_ONLCR(tty) _O_FLAG((tty),ONLCR) |
+#define O_OCRNL(tty) _O_FLAG((tty),OCRNL) |
+#define O_ONOCR(tty) _O_FLAG((tty),ONOCR) |
+#define O_ONLRET(tty) _O_FLAG((tty),ONLRET) |
+#define O_OFILL(tty) _O_FLAG((tty),OFILL) |
+#define O_OFDEL(tty) _O_FLAG((tty),OFDEL) |
+#define O_NLDLY(tty) _O_FLAG((tty),NLDLY) |
+#define O_CRDLY(tty) _O_FLAG((tty),CRDLY) |
+#define O_TABDLY(tty) _O_FLAG((tty),TABDLY) |
+#define O_BSDLY(tty) _O_FLAG((tty),BSDLY) |
+#define O_VTDLY(tty) _O_FLAG((tty),VTDLY) |
+#define O_FFDLY(tty) _O_FLAG((tty),FFDLY) |
+ |
+#define C_BAUD(tty) _C_FLAG((tty),CBAUD) |
+#define C_CSIZE(tty) _C_FLAG((tty),CSIZE) |
+#define C_CSTOPB(tty) _C_FLAG((tty),CSTOPB) |
+#define C_CREAD(tty) _C_FLAG((tty),CREAD) |
+#define C_PARENB(tty) _C_FLAG((tty),PARENB) |
+#define C_PARODD(tty) _C_FLAG((tty),PARODD) |
+#define C_HUPCL(tty) _C_FLAG((tty),HUPCL) |
+#define C_CLOCAL(tty) _C_FLAG((tty),CLOCAL) |
+#define C_CIBAUD(tty) _C_FLAG((tty),CIBAUD) |
+#define C_CRTSCTS(tty) _C_FLAG((tty),CRTSCTS) |
+ |
+#define L_ISIG(tty) _L_FLAG((tty),ISIG) |
+#define L_ICANON(tty) _L_FLAG((tty),ICANON) |
+#define L_XCASE(tty) _L_FLAG((tty),XCASE) |
+#define L_ECHO(tty) _L_FLAG((tty),ECHO) |
+#define L_ECHOE(tty) _L_FLAG((tty),ECHOE) |
+#define L_ECHOK(tty) _L_FLAG((tty),ECHOK) |
+#define L_ECHONL(tty) _L_FLAG((tty),ECHONL) |
+#define L_NOFLSH(tty) _L_FLAG((tty),NOFLSH) |
+#define L_TOSTOP(tty) _L_FLAG((tty),TOSTOP) |
+#define L_ECHOCTL(tty) _L_FLAG((tty),ECHOCTL) |
+#define L_ECHOPRT(tty) _L_FLAG((tty),ECHOPRT) |
+#define L_ECHOKE(tty) _L_FLAG((tty),ECHOKE) |
+#define L_FLUSHO(tty) _L_FLAG((tty),FLUSHO) |
+#define L_PENDIN(tty) _L_FLAG((tty),PENDIN) |
+#define L_IEXTEN(tty) _L_FLAG((tty),IEXTEN) |
+ |
+struct device; |
+/* |
+ * Where all of the state associated with a tty is kept while the tty |
+ * is open. Since the termios state should be kept even if the tty |
+ * has been closed --- for things like the baud rate, etc --- it is |
+ * not stored here, but rather a pointer to the real state is stored |
+ * here. Possible the winsize structure should have the same |
+ * treatment, but (1) the default 80x24 is usually right and (2) it's |
+ * most often used by a windowing system, which will set the correct |
+ * size each time the window is created or resized anyway. |
+ * - TYT, 9/14/92 |
+ */ |
+struct tty_struct { |
+ int magic; |
+ struct tty_driver *driver; |
+ int index; |
+ struct tty_ldisc ldisc; |
+ struct termios *termios, *termios_locked; |
+ char name[64]; |
+ int pgrp; |
+ int session; |
+ unsigned long flags; |
+ int count; |
+ struct winsize winsize; |
+ unsigned char stopped:1, hw_stopped:1, flow_stopped:1, packet:1; |
+ unsigned char low_latency:1, warned:1; |
+ unsigned char ctrl_status; |
+ |
+ struct tty_struct *link; |
+ struct fasync_struct *fasync; |
+ struct tty_flip_buffer flip; |
+ int max_flip_cnt; |
+ int alt_speed; /* For magic substitution of 38400 bps */ |
+ wait_queue_head_t write_wait; |
+ wait_queue_head_t read_wait; |
+ struct work_struct hangup_work; |
+ void *disc_data; |
+ void *driver_data; |
+ struct list_head tty_files; |
+ |
+#define N_TTY_BUF_SIZE 4096 |
+ |
+ /* |
+ * The following is data for the N_TTY line discipline. For |
+ * historical reasons, this is included in the tty structure. |
+ */ |
+ unsigned int column; |
+ unsigned char lnext:1, erasing:1, raw:1, real_raw:1, icanon:1; |
+ unsigned char closing:1; |
+ unsigned short minimum_to_wake; |
+ unsigned long overrun_time; |
+ int num_overrun; |
+ unsigned long process_char_map[256/(8*sizeof(unsigned long))]; |
+ char *read_buf; |
+ int read_head; |
+ int read_tail; |
+ int read_cnt; |
+ unsigned long read_flags[N_TTY_BUF_SIZE/(8*sizeof(unsigned long))]; |
+ int canon_data; |
+ unsigned long canon_head; |
+ unsigned int canon_column; |
+ struct semaphore atomic_read; |
+ struct semaphore atomic_write; |
+ spinlock_t read_lock; |
+ /* If the tty has a pending do_SAK, queue it here - akpm */ |
+ struct work_struct SAK_work; |
+}; |
+ |
+/* tty magic number */ |
+#define TTY_MAGIC 0x5401 |
+ |
+/* |
+ * These bits are used in the flags field of the tty structure. |
+ * |
+ * So that interrupts won't be able to mess up the queues, |
+ * copy_to_cooked must be atomic with respect to itself, as must |
+ * tty->write. Thus, you must use the inline functions set_bit() and |
+ * clear_bit() to make things atomic. |
+ */ |
+#define TTY_THROTTLED 0 |
+#define TTY_IO_ERROR 1 |
+#define TTY_OTHER_CLOSED 2 |
+#define TTY_EXCLUSIVE 3 |
+#define TTY_DEBUG 4 |
+#define TTY_DO_WRITE_WAKEUP 5 |
+#define TTY_PUSH 6 |
+#define TTY_CLOSING 7 |
+#define TTY_DONT_FLIP 8 |
+#define TTY_HW_COOK_OUT 14 |
+#define TTY_HW_COOK_IN 15 |
+#define TTY_PTY_LOCK 16 |
+#define TTY_NO_WRITE_SPLIT 17 |
+ |
+#define TTY_WRITE_FLUSH(tty) tty_write_flush((tty)) |
+ |
+extern void tty_write_flush(struct tty_struct *); |
+ |
+extern struct termios tty_std_termios; |
+extern struct tty_ldisc ldiscs[]; |
+extern int fg_console, last_console, want_console; |
+ |
+extern int kmsg_redirect; |
+ |
+extern void console_init(void); |
+extern int vcs_init(void); |
+ |
+extern int tty_paranoia_check(struct tty_struct *tty, struct inode *inode, |
+ const char *routine); |
+extern char *tty_name(struct tty_struct *tty, char *buf); |
+extern void tty_wait_until_sent(struct tty_struct * tty, long timeout); |
+extern int tty_check_change(struct tty_struct * tty); |
+extern void stop_tty(struct tty_struct * tty); |
+extern void start_tty(struct tty_struct * tty); |
+extern int tty_register_ldisc(int disc, struct tty_ldisc *new_ldisc); |
+extern int tty_register_driver(struct tty_driver *driver); |
+extern int tty_unregister_driver(struct tty_driver *driver); |
+extern void tty_register_device(struct tty_driver *driver, unsigned index, struct device *dev); |
+extern void tty_unregister_device(struct tty_driver *driver, unsigned index); |
+extern int tty_read_raw_data(struct tty_struct *tty, unsigned char *bufp, |
+ int buflen); |
+extern void tty_write_message(struct tty_struct *tty, char *msg); |
+ |
+extern int is_orphaned_pgrp(int pgrp); |
+extern int is_ignored(int sig); |
+extern int tty_signal(int sig, struct tty_struct *tty); |
+extern void tty_hangup(struct tty_struct * tty); |
+extern void tty_vhangup(struct tty_struct * tty); |
+extern void tty_unhangup(struct file *filp); |
+extern int tty_hung_up_p(struct file * filp); |
+extern void do_SAK(struct tty_struct *tty); |
+extern void disassociate_ctty(int priv); |
+extern void tty_flip_buffer_push(struct tty_struct *tty); |
+extern int tty_get_baud_rate(struct tty_struct *tty); |
+extern int tty_termios_baud_rate(struct termios *termios); |
+ |
+/* n_tty.c */ |
+extern struct tty_ldisc tty_ldisc_N_TTY; |
+ |
+/* tty_ioctl.c */ |
+extern int n_tty_ioctl(struct tty_struct * tty, struct file * file, |
+ unsigned int cmd, unsigned long arg); |
+ |
+/* serial.c */ |
+ |
+extern void serial_console_init(void); |
+ |
+/* pcxx.c */ |
+ |
+extern int pcxe_open(struct tty_struct *tty, struct file *filp); |
+ |
+/* printk.c */ |
+ |
+extern void console_print(const char *); |
+ |
+/* vt.c */ |
+ |
+extern int vt_ioctl(struct tty_struct *tty, struct file * file, |
+ unsigned int cmd, unsigned long arg); |
+ |
+static inline dev_t tty_devnum(struct tty_struct *tty) |
+{ |
+ return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index; |
+} |
+ |
+#endif /* __KERNEL__ */ |
+#endif |
Index: linuxc26/include/linux/if_ether.h |
=================================================================== |
--- linuxc26/include/linux/if_ether.h (nonexistent) |
+++ linuxc26/include/linux/if_ether.h (revision 422) |
@@ -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 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@redhat.com> |
+ * 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 _LINUX_IF_ETHER_H |
+#define _LINUX_IF_ETHER_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 */ |
+ |
+/* |
+ * 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_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_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_ATMFATE 0x8884 /* Frame-based ATM Transport |
+ * over Ethernet |
+ */ |
+#define ETH_P_EDP2 0x88A2 /* Coraid EDP2 */ |
+ |
+/* |
+ * 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_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 */ |
+ |
+/* |
+ * 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 */ |
+ unsigned short h_proto; /* packet type ID field */ |
+} __attribute__((packed)); |
+ |
+#endif /* _LINUX_IF_ETHER_H */ |
Index: linuxc26/include/linux/timex.h |
=================================================================== |
--- linuxc26/include/linux/timex.h (nonexistent) |
+++ linuxc26/include/linux/timex.h (revision 422) |
@@ -0,0 +1,422 @@ |
+/***************************************************************************** |
+ * * |
+ * 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 |
+ */ |
+#ifndef _LINUX_TIMEX_H |
+#define _LINUX_TIMEX_H |
+ |
+#include <linux/config.h> |
+#include <linux/compiler.h> |
+ |
+#include <asm/param.h> |
+ |
+/* |
+ * The following defines establish the engineering parameters of the PLL |
+ * model. The HZ variable establishes the timer interrupt frequency, 100 Hz |
+ * for the SunOS kernel, 256 Hz for the Ultrix kernel and 1024 Hz for the |
+ * OSF/1 kernel. The SHIFT_HZ define expresses the same value as the |
+ * nearest power of two in order to avoid hardware multiply operations. |
+ */ |
+#if HZ >= 12 && HZ < 24 |
+# define SHIFT_HZ 4 |
+#elif HZ >= 24 && HZ < 48 |
+# define SHIFT_HZ 5 |
+#elif HZ >= 48 && HZ < 96 |
+# define SHIFT_HZ 6 |
+#elif HZ >= 96 && HZ < 192 |
+# define SHIFT_HZ 7 |
+#elif HZ >= 192 && HZ < 384 |
+# define SHIFT_HZ 8 |
+#elif HZ >= 384 && HZ < 768 |
+# define SHIFT_HZ 9 |
+#elif HZ >= 768 && HZ < 1536 |
+# define SHIFT_HZ 10 |
+#else |
+# error You lose. |
+#endif |
+ |
+/* |
+ * SHIFT_KG and SHIFT_KF establish the damping of the PLL and are chosen |
+ * for a slightly underdamped convergence characteristic. SHIFT_KH |
+ * establishes the damping of the FLL and is chosen by wisdom and black |
+ * art. |
+ * |
+ * MAXTC establishes the maximum time constant of the PLL. With the |
+ * SHIFT_KG and SHIFT_KF values given and a time constant range from |
+ * zero to MAXTC, the PLL will converge in 15 minutes to 16 hours, |
+ * respectively. |
+ */ |
+#define SHIFT_KG 6 /* phase factor (shift) */ |
+#define SHIFT_KF 16 /* PLL frequency factor (shift) */ |
+#define SHIFT_KH 2 /* FLL frequency factor (shift) */ |
+#define MAXTC 6 /* maximum time constant (shift) */ |
+ |
+/* |
+ * The SHIFT_SCALE define establishes the decimal point of the time_phase |
+ * variable which serves as an extension to the low-order bits of the |
+ * system clock variable. The SHIFT_UPDATE define establishes the decimal |
+ * point of the time_offset variable which represents the current offset |
+ * with respect to standard time. The FINENSEC define represents 1 nsec in |
+ * scaled units. |
+ * |
+ * SHIFT_USEC defines the scaling (shift) of the time_freq and |
+ * time_tolerance variables, which represent the current frequency |
+ * offset and maximum frequency tolerance. |
+ * |
+ * FINENSEC is 1 ns in SHIFT_UPDATE units of the time_phase variable. |
+ */ |
+#define SHIFT_SCALE 22 /* phase scale (shift) */ |
+#define SHIFT_UPDATE (SHIFT_KG + MAXTC) /* time offset scale (shift) */ |
+#define SHIFT_USEC 16 /* frequency offset scale (shift) */ |
+#define FINENSEC (1L << (SHIFT_SCALE - 10)) /* ~1 ns in phase units */ |
+ |
+#define MAXPHASE 512000L /* max phase error (us) */ |
+#define MAXFREQ (512L << SHIFT_USEC) /* max frequency error (ppm) */ |
+#define MAXTIME (200L << PPS_AVG) /* max PPS error (jitter) (200 us) */ |
+#define MINSEC 16L /* min interval between updates (s) */ |
+#define MAXSEC 1200L /* max interval between updates (s) */ |
+#define NTP_PHASE_LIMIT (MAXPHASE << 5) /* beyond max. dispersion */ |
+ |
+/* |
+ * The following defines are used only if a pulse-per-second (PPS) |
+ * signal is available and connected via a modem control lead, such as |
+ * produced by the optional ppsclock feature incorporated in the Sun |
+ * asynch driver. They establish the design parameters of the frequency- |
+ * lock loop used to discipline the CPU clock oscillator to the PPS |
+ * signal. |
+ * |
+ * PPS_AVG is the averaging factor for the frequency loop, as well as |
+ * the time and frequency dispersion. |
+ * |
+ * PPS_SHIFT and PPS_SHIFTMAX specify the minimum and maximum |
+ * calibration intervals, respectively, in seconds as a power of two. |
+ * |
+ * PPS_VALID is the maximum interval before the PPS signal is considered |
+ * invalid and protocol updates used directly instead. |
+ * |
+ * MAXGLITCH is the maximum interval before a time offset of more than |
+ * MAXTIME is believed. |
+ */ |
+#define PPS_AVG 2 /* pps averaging constant (shift) */ |
+#define PPS_SHIFT 2 /* min interval duration (s) (shift) */ |
+#define PPS_SHIFTMAX 8 /* max interval duration (s) (shift) */ |
+#define PPS_VALID 120 /* pps signal watchdog max (s) */ |
+#define MAXGLITCH 30 /* pps signal glitch max (s) */ |
+ |
+/* |
+ * Pick up the architecture specific timex specifications |
+ */ |
+#include <asm/timex.h> |
+ |
+/* LATCH is used in the interval timer and ftape setup. */ |
+#define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */ |
+ |
+/* Suppose we want to devide two numbers NOM and DEN: NOM/DEN, the we can |
+ * improve accuracy by shifting LSH bits, hence calculating: |
+ * (NOM << LSH) / DEN |
+ * This however means trouble for large NOM, because (NOM << LSH) may no |
+ * longer fit in 32 bits. The following way of calculating this gives us |
+ * some slack, under the following conditions: |
+ * - (NOM / DEN) fits in (32 - LSH) bits. |
+ * - (NOM % DEN) fits in (32 - LSH) bits. |
+ */ |
+#define SH_DIV(NOM,DEN,LSH) ( ((NOM / DEN) << LSH) \ |
+ + (((NOM % DEN) << LSH) + DEN / 2) / DEN) |
+ |
+/* HZ is the requested value. ACTHZ is actual HZ ("<< 8" is for accuracy) */ |
+#define ACTHZ (SH_DIV (CLOCK_TICK_RATE, LATCH, 8)) |
+ |
+/* TICK_NSEC is the time between ticks in nsec assuming real ACTHZ */ |
+#define TICK_NSEC (SH_DIV (1000000UL * 1000, ACTHZ, 8)) |
+ |
+/* TICK_USEC is the time between ticks in usec assuming fake USER_HZ */ |
+#define TICK_USEC ((1000000UL + USER_HZ/2) / USER_HZ) |
+ |
+/* TICK_USEC_TO_NSEC is the time between ticks in nsec assuming real ACTHZ and */ |
+/* a value TUSEC for TICK_USEC (can be set bij adjtimex) */ |
+#define TICK_USEC_TO_NSEC(TUSEC) (SH_DIV (TUSEC * USER_HZ * 1000, ACTHZ, 8)) |
+ |
+ |
+#include <linux/time.h> |
+/* |
+ * 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) */ |
+ 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 :32; 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_TICK 0x4000 /* tick value */ |
+#define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime */ |
+ |
+/* xntp 3.4 compatibility names */ |
+#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_CLKB ADJ_TICK |
+#define MOD_CLKA ADJ_OFFSET_SINGLESHOT /* 0x8000 in original */ |
+ |
+ |
+/* |
+ * 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_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \ |
+ STA_PPSERROR | STA_CLOCKERR) /* read-only bits */ |
+ |
+/* |
+ * 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 */ |
+ |
+#ifdef __KERNEL__ |
+/* |
+ * kernel variables |
+ * Note: maximum error = NTP synch distance = dispersion + delay / 2; |
+ * estimated error = NTP dispersion. |
+ */ |
+extern unsigned long tick_usec; /* USER_HZ period (usec) */ |
+extern unsigned long tick_nsec; /* ACTHZ period (nsec) */ |
+extern int tickadj; /* amount of adjustment per tick */ |
+ |
+/* |
+ * phase-lock loop variables |
+ */ |
+extern int time_state; /* clock status */ |
+extern int time_status; /* clock synchronization status bits */ |
+extern long time_offset; /* time adjustment (us) */ |
+extern long time_constant; /* pll time constant */ |
+extern long time_tolerance; /* frequency tolerance (ppm) */ |
+extern long time_precision; /* clock precision (us) */ |
+extern long time_maxerror; /* maximum error */ |
+extern long time_esterror; /* estimated error */ |
+ |
+extern long time_phase; /* phase offset (scaled us) */ |
+extern long time_freq; /* frequency offset (scaled ppm) */ |
+extern long time_adj; /* tick adjust (scaled 1 / HZ) */ |
+extern long time_reftime; /* time at last adjustment (s) */ |
+ |
+extern long time_adjust; /* The amount of adjtime left */ |
+extern long time_next_adjust; /* Value for time_adjust at next tick */ |
+ |
+/* interface variables pps->timer interrupt */ |
+extern long pps_offset; /* pps time offset (us) */ |
+extern long pps_jitter; /* time dispersion (jitter) (us) */ |
+extern long pps_freq; /* frequency offset (scaled ppm) */ |
+extern long pps_stabil; /* frequency dispersion (scaled ppm) */ |
+extern long pps_valid; /* pps signal watchdog counter */ |
+ |
+/* interface variables pps->adjtimex */ |
+extern int pps_shift; /* interval duration (s) (shift) */ |
+extern long pps_jitcnt; /* jitter limit exceeded */ |
+extern long pps_calcnt; /* calibration intervals */ |
+extern long pps_errcnt; /* calibration errors */ |
+extern long pps_stbcnt; /* stability limit exceeded */ |
+ |
+#ifdef CONFIG_TIME_INTERPOLATION |
+ |
+struct time_interpolator { |
+ /* cache-hot stuff first: */ |
+ unsigned long (*get_offset) (void); |
+ void (*update) (long); |
+ void (*reset) (void); |
+ |
+ /* cache-cold stuff follows here: */ |
+ struct time_interpolator *next; |
+ unsigned long frequency; /* frequency in counts/second */ |
+ long drift; /* drift in parts-per-million (or -1) */ |
+}; |
+ |
+extern volatile unsigned long last_nsec_offset; |
+#ifndef __HAVE_ARCH_CMPXCHG |
+extern spin_lock_t last_nsec_offset_lock; |
+#endif |
+extern struct time_interpolator *time_interpolator; |
+ |
+extern void register_time_interpolator(struct time_interpolator *); |
+extern void unregister_time_interpolator(struct time_interpolator *); |
+ |
+/* Called with xtime WRITE-lock acquired. */ |
+static inline void |
+time_interpolator_update(long delta_nsec) |
+{ |
+ struct time_interpolator *ti = time_interpolator; |
+ |
+ if (last_nsec_offset > 0) { |
+#ifdef __HAVE_ARCH_CMPXCHG |
+ unsigned long new, old; |
+ |
+ do { |
+ old = last_nsec_offset; |
+ if (old > delta_nsec) |
+ new = old - delta_nsec; |
+ else |
+ new = 0; |
+ } while (cmpxchg(&last_nsec_offset, old, new) != old); |
+#else |
+ /* |
+ * This really hurts, because it serializes gettimeofday(), but without an |
+ * atomic single-word compare-and-exchange, there isn't all that much else |
+ * we can do. |
+ */ |
+ spin_lock(&last_nsec_offset_lock); |
+ { |
+ last_nsec_offset -= min(last_nsec_offset, delta_nsec); |
+ } |
+ spin_unlock(&last_nsec_offset_lock); |
+#endif |
+ } |
+ |
+ if (ti) |
+ (*ti->update)(delta_nsec); |
+} |
+ |
+/* Called with xtime WRITE-lock acquired. */ |
+static inline void |
+time_interpolator_reset(void) |
+{ |
+ struct time_interpolator *ti = time_interpolator; |
+ |
+ last_nsec_offset = 0; |
+ if (ti) |
+ (*ti->reset)(); |
+} |
+ |
+/* Called with xtime READ-lock acquired. */ |
+static inline unsigned long |
+time_interpolator_get_offset(void) |
+{ |
+ struct time_interpolator *ti = time_interpolator; |
+ if (ti) |
+ return (*ti->get_offset)(); |
+ return last_nsec_offset; |
+} |
+ |
+#else /* !CONFIG_TIME_INTERPOLATION */ |
+ |
+static inline void |
+time_interpolator_update(long delta_nsec) |
+{ |
+} |
+ |
+static inline void |
+time_interpolator_reset(void) |
+{ |
+} |
+ |
+static inline unsigned long |
+time_interpolator_get_offset(void) |
+{ |
+ return 0; |
+} |
+ |
+#endif /* !CONFIG_TIME_INTERPOLATION */ |
+ |
+#endif /* KERNEL */ |
+ |
+#endif /* LINUX_TIMEX_H */ |
Index: linuxc26/include/linux/libata.h |
=================================================================== |
--- linuxc26/include/linux/libata.h (nonexistent) |
+++ linuxc26/include/linux/libata.h (revision 422) |
@@ -0,0 +1,581 @@ |
+/* |
+ Copyright 2003 Red Hat, Inc. All rights reserved. |
+ Copyright 2003 Jeff Garzik |
+ |
+ The contents of this file are subject to the Open |
+ Software License version 1.1 that can be found at |
+ http://www.opensource.org/licenses/osl-1.1.txt and is included herein |
+ by reference. |
+ |
+ Alternatively, the contents of this file may be used under the terms |
+ of the GNU General Public License version 2 (the "GPL") as distributed |
+ in the kernel source COPYING file, in which case the provisions of |
+ the GPL are applicable instead of the above. If you wish to allow |
+ the use of your version of this file only under the terms of the |
+ GPL and not to allow others to use your version of this file under |
+ the OSL, indicate your decision by deleting the provisions above and |
+ replace them with the notice and other provisions required by the GPL. |
+ If you do not delete the provisions above, a recipient may use your |
+ version of this file under either the OSL or the GPL. |
+ |
+ */ |
+ |
+#ifndef __LINUX_LIBATA_H__ |
+#define __LINUX_LIBATA_H__ |
+ |
+#include <linux/delay.h> |
+#include <linux/interrupt.h> |
+#include <asm/io.h> |
+#include <linux/ata.h> |
+ |
+/* |
+ * compile-time options |
+ */ |
+#undef ATA_FORCE_PIO /* do not configure or use DMA */ |
+#undef ATA_DEBUG /* debugging output */ |
+#undef ATA_VERBOSE_DEBUG /* yet more debugging output */ |
+#undef ATA_IRQ_TRAP /* define to ack screaming irqs */ |
+#undef ATA_NDEBUG /* define to disable quick runtime checks */ |
+#undef ATA_ENABLE_ATAPI /* define to enable ATAPI support */ |
+#undef ATA_ENABLE_PATA /* define to enable PATA support in some |
+ * low-level drivers */ |
+ |
+ |
+/* note: prints function name for you */ |
+#ifdef ATA_DEBUG |
+#define DPRINTK(fmt, args...) printk(KERN_ERR "%s: " fmt, __FUNCTION__, ## args) |
+#ifdef ATA_VERBOSE_DEBUG |
+#define VPRINTK(fmt, args...) printk(KERN_ERR "%s: " fmt, __FUNCTION__, ## args) |
+#else |
+#define VPRINTK(fmt, args...) |
+#endif /* ATA_VERBOSE_DEBUG */ |
+#else |
+#define DPRINTK(fmt, args...) |
+#define VPRINTK(fmt, args...) |
+#endif /* ATA_DEBUG */ |
+ |
+#ifdef ATA_NDEBUG |
+#define assert(expr) |
+#else |
+#define assert(expr) \ |
+ if(unlikely(!(expr))) { \ |
+ printk(KERN_ERR "Assertion failed! %s,%s,%s,line=%d\n", \ |
+ #expr,__FILE__,__FUNCTION__,__LINE__); \ |
+ } |
+#endif |
+ |
+/* defines only for the constants which don't work well as enums */ |
+#define ATA_TAG_POISON 0xfafbfcfdU |
+#define ATA_DMA_BOUNDARY 0xffffUL |
+#define ATA_DMA_MASK 0xffffffffULL |
+ |
+enum { |
+ /* various global constants */ |
+ ATA_MAX_PORTS = 8, |
+ ATA_DEF_QUEUE = 1, |
+ ATA_MAX_QUEUE = 1, |
+ ATA_MAX_SECTORS = 200, /* FIXME */ |
+ ATA_MAX_BUS = 2, |
+ ATA_DEF_BUSY_WAIT = 10000, |
+ ATA_SHORT_PAUSE = (HZ >> 6) + 1, |
+ |
+ ATA_SHT_EMULATED = 1, |
+ ATA_SHT_CMD_PER_LUN = 1, |
+ ATA_SHT_THIS_ID = -1, |
+ ATA_SHT_USE_CLUSTERING = 1, |
+ |
+ /* struct ata_device stuff */ |
+ ATA_DFLAG_LBA48 = (1 << 0), /* device supports LBA48 */ |
+ ATA_DFLAG_PIO = (1 << 1), /* device currently in PIO mode */ |
+ ATA_DFLAG_MASTER = (1 << 2), /* is device 0? */ |
+ ATA_DFLAG_WCACHE = (1 << 3), /* has write cache we can |
+ * (hopefully) flush? */ |
+ |
+ ATA_DEV_UNKNOWN = 0, /* unknown device */ |
+ ATA_DEV_ATA = 1, /* ATA device */ |
+ ATA_DEV_ATA_UNSUP = 2, /* ATA device (unsupported) */ |
+ ATA_DEV_ATAPI = 3, /* ATAPI device */ |
+ ATA_DEV_ATAPI_UNSUP = 4, /* ATAPI device (unsupported) */ |
+ ATA_DEV_NONE = 5, /* no device */ |
+ |
+ /* struct ata_port flags */ |
+ ATA_FLAG_SLAVE_POSS = (1 << 1), /* host supports slave dev */ |
+ /* (doesn't imply presence) */ |
+ ATA_FLAG_PORT_DISABLED = (1 << 2), /* port is disabled, ignore it */ |
+ ATA_FLAG_SATA = (1 << 3), |
+ ATA_FLAG_NO_LEGACY = (1 << 4), /* no legacy mode check */ |
+ ATA_FLAG_SRST = (1 << 5), /* use ATA SRST, not E.D.D. */ |
+ ATA_FLAG_MMIO = (1 << 6), /* use MMIO, not PIO */ |
+ ATA_FLAG_SATA_RESET = (1 << 7), /* use COMRESET */ |
+ |
+ /* struct ata_taskfile flags */ |
+ ATA_TFLAG_LBA48 = (1 << 0), |
+ ATA_TFLAG_ISADDR = (1 << 1), /* enable r/w to nsect/lba regs */ |
+ ATA_TFLAG_DEVICE = (1 << 2), /* enable r/w to device reg */ |
+ |
+ ATA_QCFLAG_WRITE = (1 << 0), /* read==0, write==1 */ |
+ ATA_QCFLAG_ACTIVE = (1 << 1), /* cmd not yet ack'd to scsi lyer */ |
+ ATA_QCFLAG_DMA = (1 << 2), /* data delivered via DMA */ |
+ ATA_QCFLAG_ATAPI = (1 << 3), /* is ATAPI packet command? */ |
+ ATA_QCFLAG_SG = (1 << 4), /* have s/g table? */ |
+ ATA_QCFLAG_POLL = (1 << 5), /* polling, no interrupts */ |
+ |
+ /* struct ata_engine atomic flags (use test_bit, etc.) */ |
+ ATA_EFLG_ACTIVE = 0, /* engine is active */ |
+ |
+ /* various lengths of time */ |
+ ATA_TMOUT_EDD = 5 * HZ, /* hueristic */ |
+ ATA_TMOUT_PIO = 30 * HZ, |
+ ATA_TMOUT_BOOT = 30 * HZ, /* hueristic */ |
+ ATA_TMOUT_BOOT_QUICK = 7 * HZ, /* hueristic */ |
+ ATA_TMOUT_CDB = 30 * HZ, |
+ ATA_TMOUT_CDB_QUICK = 5 * HZ, |
+ |
+ /* ATA bus states */ |
+ BUS_UNKNOWN = 0, |
+ BUS_DMA = 1, |
+ BUS_IDLE = 2, |
+ BUS_NOINTR = 3, |
+ BUS_NODATA = 4, |
+ BUS_TIMER = 5, |
+ BUS_PIO = 6, |
+ BUS_EDD = 7, |
+ BUS_IDENTIFY = 8, |
+ BUS_PACKET = 9, |
+ |
+ /* thread states */ |
+ THR_UNKNOWN = 0, |
+ THR_PORT_RESET = (THR_UNKNOWN + 1), |
+ THR_AWAIT_DEATH = (THR_PORT_RESET + 1), |
+ THR_PROBE_FAILED = (THR_AWAIT_DEATH + 1), |
+ THR_IDLE = (THR_PROBE_FAILED + 1), |
+ THR_PROBE_SUCCESS = (THR_IDLE + 1), |
+ THR_PROBE_START = (THR_PROBE_SUCCESS + 1), |
+ THR_PIO_POLL = (THR_PROBE_START + 1), |
+ THR_PIO_TMOUT = (THR_PIO_POLL + 1), |
+ THR_PIO = (THR_PIO_TMOUT + 1), |
+ THR_PIO_LAST = (THR_PIO + 1), |
+ THR_PIO_LAST_POLL = (THR_PIO_LAST + 1), |
+ THR_PIO_ERR = (THR_PIO_LAST_POLL + 1), |
+ THR_PACKET = (THR_PIO_ERR + 1), |
+ |
+ /* SATA port states */ |
+ PORT_UNKNOWN = 0, |
+ PORT_ENABLED = 1, |
+ PORT_DISABLED = 2, |
+ |
+ /* ata_qc_cb_t flags - note uses above ATA_QCFLAG_xxx namespace, |
+ * but not numberspace |
+ */ |
+ ATA_QCFLAG_TIMEOUT = (1 << 0), |
+}; |
+ |
+/* forward declarations */ |
+struct ata_port_operations; |
+struct ata_port; |
+struct ata_queued_cmd; |
+ |
+/* typedefs */ |
+typedef void (*ata_qc_cb_t) (struct ata_queued_cmd *qc, unsigned int flags); |
+ |
+struct ata_ioports { |
+ unsigned long cmd_addr; |
+ unsigned long data_addr; |
+ unsigned long error_addr; |
+ unsigned long nsect_addr; |
+ unsigned long lbal_addr; |
+ unsigned long lbam_addr; |
+ unsigned long lbah_addr; |
+ unsigned long device_addr; |
+ unsigned long cmdstat_addr; |
+ unsigned long ctl_addr; |
+ unsigned long bmdma_addr; |
+ unsigned long scr_addr; |
+}; |
+ |
+struct ata_probe_ent { |
+ struct list_head node; |
+ struct pci_dev *pdev; |
+ struct ata_port_operations *port_ops; |
+ Scsi_Host_Template *sht; |
+ struct ata_ioports port[ATA_MAX_PORTS]; |
+ unsigned int n_ports; |
+ unsigned int pio_mask; |
+ unsigned int udma_mask; |
+ unsigned int legacy_mode; |
+ unsigned long irq; |
+ unsigned int irq_flags; |
+ unsigned long host_flags; |
+ void *mmio_base; |
+ void *private_data; |
+}; |
+ |
+struct ata_host_set { |
+ spinlock_t lock; |
+ struct pci_dev *pdev; |
+ unsigned long irq; |
+ void *mmio_base; |
+ unsigned int n_ports; |
+ void *private_data; |
+ struct ata_port * ports[0]; |
+}; |
+ |
+struct ata_taskfile { |
+ unsigned long flags; /* ATA_TFLAG_xxx */ |
+ u8 protocol; /* ATA_PROT_xxx */ |
+ |
+ u8 ctl; /* control reg */ |
+ |
+ u8 hob_feature; /* additional data */ |
+ u8 hob_nsect; /* to support LBA48 */ |
+ u8 hob_lbal; |
+ u8 hob_lbam; |
+ u8 hob_lbah; |
+ |
+ u8 feature; |
+ u8 nsect; |
+ u8 lbal; |
+ u8 lbam; |
+ u8 lbah; |
+ |
+ u8 device; |
+ |
+ u8 command; /* IO operation */ |
+}; |
+ |
+struct ata_queued_cmd { |
+ struct ata_port *ap; |
+ struct ata_device *dev; |
+ |
+ Scsi_Cmnd *scsicmd; |
+ void (*scsidone)(Scsi_Cmnd *); |
+ |
+ struct list_head node; |
+ unsigned long flags; /* ATA_QCFLAG_xxx */ |
+ unsigned int tag; |
+ unsigned int n_elem; |
+ unsigned int nsect; |
+ unsigned int cursect; |
+ unsigned int cursg; |
+ unsigned int cursg_ofs; |
+ struct ata_taskfile tf; |
+ struct scatterlist sgent; |
+ |
+ struct scatterlist *sg; |
+ |
+ ata_qc_cb_t callback; |
+ |
+ struct semaphore sem; |
+ |
+ void *private_data; |
+}; |
+ |
+struct ata_host_stats { |
+ unsigned long unhandled_irq; |
+ unsigned long idle_irq; |
+ unsigned long rw_reqbuf; |
+}; |
+ |
+struct ata_device { |
+ u64 n_sectors; /* size of device, if ATA */ |
+ unsigned long flags; /* ATA_DFLAG_xxx */ |
+ unsigned int class; /* ATA_DEV_xxx */ |
+ unsigned int devno; /* 0 or 1 */ |
+ u16 id[ATA_ID_WORDS]; /* IDENTIFY xxx DEVICE data */ |
+ unsigned int pio_mode; |
+ unsigned int udma_mode; |
+ |
+ unsigned char vendor[8]; /* space-padded, not ASCIIZ */ |
+ unsigned char product[32]; /* WARNING: shorter than |
+ * ATAPI7 spec size, 40 ASCII |
+ * characters |
+ */ |
+}; |
+ |
+struct ata_engine { |
+ unsigned long flags; |
+ struct list_head q; |
+}; |
+ |
+struct ata_port { |
+ struct Scsi_Host *host; /* our co-allocated scsi host */ |
+ struct ata_port_operations *ops; |
+ unsigned long flags; /* ATA_FLAG_xxx */ |
+ unsigned int id; /* unique id req'd by scsi midlyr */ |
+ unsigned int port_no; /* unique port #; from zero */ |
+ |
+ struct ata_prd *prd; /* our SG list */ |
+ dma_addr_t prd_dma; /* and its DMA mapping */ |
+ |
+ struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */ |
+ |
+ u8 ctl; /* cache of ATA control register */ |
+ u8 last_ctl; /* Cache last written value */ |
+ unsigned int bus_state; |
+ unsigned int port_state; |
+ unsigned int pio_mask; |
+ unsigned int udma_mask; |
+ unsigned int cbl; /* cable type; ATA_CBL_xxx */ |
+ |
+ struct ata_engine eng; |
+ |
+ struct ata_device device[ATA_MAX_DEVICES]; |
+ |
+ struct ata_queued_cmd qcmd[ATA_MAX_QUEUE]; |
+ unsigned long qactive; |
+ unsigned int active_tag; |
+ |
+ struct ata_host_stats stats; |
+ struct ata_host_set *host_set; |
+ |
+ struct semaphore sem; |
+ struct semaphore probe_sem; |
+ |
+ unsigned int thr_state; |
+ int time_to_die; |
+ pid_t thr_pid; |
+ struct completion thr_exited; |
+ struct semaphore thr_sem; |
+ struct timer_list thr_timer; |
+ unsigned long thr_timeout; |
+ |
+ void *private_data; |
+}; |
+ |
+struct ata_port_operations { |
+ void (*port_disable) (struct ata_port *); |
+ |
+ void (*dev_config) (struct ata_port *, struct ata_device *); |
+ |
+ void (*set_piomode) (struct ata_port *, struct ata_device *, |
+ unsigned int); |
+ void (*set_udmamode) (struct ata_port *, struct ata_device *, |
+ unsigned int); |
+ |
+ void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf); |
+ void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf); |
+ |
+ void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf); |
+ u8 (*check_status)(struct ata_port *ap); |
+ |
+ void (*phy_reset) (struct ata_port *ap); |
+ void (*phy_config) (struct ata_port *ap); |
+ |
+ void (*bmdma_start) (struct ata_queued_cmd *qc); |
+ void (*fill_sg) (struct ata_queued_cmd *qc); |
+ void (*eng_timeout) (struct ata_port *ap); |
+ |
+ irqreturn_t (*irq_handler)(int, void *, struct pt_regs *); |
+ |
+ u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg); |
+ void (*scr_write) (struct ata_port *ap, unsigned int sc_reg, |
+ u32 val); |
+ |
+ int (*port_start) (struct ata_port *ap); |
+ void (*port_stop) (struct ata_port *ap); |
+ |
+ void (*host_stop) (struct ata_host_set *host_set); |
+}; |
+ |
+struct ata_port_info { |
+ Scsi_Host_Template *sht; |
+ unsigned long host_flags; |
+ unsigned long pio_mask; |
+ unsigned long udma_mask; |
+ struct ata_port_operations *port_ops; |
+}; |
+ |
+struct pci_bits { |
+ unsigned int reg; /* PCI config register to read */ |
+ unsigned int width; /* 1 (8 bit), 2 (16 bit), 4 (32 bit) */ |
+ unsigned long mask; |
+ unsigned long val; |
+}; |
+ |
+extern void ata_port_probe(struct ata_port *); |
+extern void pata_phy_config(struct ata_port *ap); |
+extern void sata_phy_reset(struct ata_port *ap); |
+extern void ata_bus_reset(struct ata_port *ap); |
+extern void ata_port_disable(struct ata_port *); |
+extern void ata_std_ports(struct ata_ioports *ioaddr); |
+extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info, |
+ unsigned int n_ports); |
+extern void ata_pci_remove_one (struct pci_dev *pdev); |
+extern int ata_device_add(struct ata_probe_ent *ent); |
+extern int ata_scsi_detect(Scsi_Host_Template *sht); |
+extern int ata_scsi_queuecmd(Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *)); |
+extern int ata_scsi_error(struct Scsi_Host *host); |
+extern int ata_scsi_release(struct Scsi_Host *host); |
+extern int ata_scsi_slave_config(struct scsi_device *sdev); |
+/* |
+ * Default driver ops implementations |
+ */ |
+extern void ata_tf_load_pio(struct ata_port *ap, struct ata_taskfile *tf); |
+extern void ata_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf); |
+extern void ata_tf_read_pio(struct ata_port *ap, struct ata_taskfile *tf); |
+extern void ata_tf_read_mmio(struct ata_port *ap, struct ata_taskfile *tf); |
+extern u8 ata_check_status_pio(struct ata_port *ap); |
+extern u8 ata_check_status_mmio(struct ata_port *ap); |
+extern void ata_exec_command_pio(struct ata_port *ap, struct ata_taskfile *tf); |
+extern void ata_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf); |
+extern int ata_port_start (struct ata_port *ap); |
+extern void ata_port_stop (struct ata_port *ap); |
+extern irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs); |
+extern void ata_fill_sg(struct ata_queued_cmd *qc); |
+extern void ata_bmdma_start_mmio (struct ata_queued_cmd *qc); |
+extern void ata_bmdma_start_pio (struct ata_queued_cmd *qc); |
+extern int pci_test_config_bits(struct pci_dev *pdev, struct pci_bits *bits); |
+extern void ata_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat, unsigned int done_late); |
+extern void ata_eng_timeout(struct ata_port *ap); |
+ |
+ |
+static inline unsigned long msecs_to_jiffies(unsigned long msecs) |
+{ |
+ return ((HZ * msecs + 999) / 1000); |
+} |
+ |
+static inline unsigned int ata_tag_valid(unsigned int tag) |
+{ |
+ return (tag < ATA_MAX_QUEUE) ? 1 : 0; |
+} |
+ |
+static inline unsigned int ata_dev_present(struct ata_device *dev) |
+{ |
+ return ((dev->class == ATA_DEV_ATA) || |
+ (dev->class == ATA_DEV_ATAPI)); |
+} |
+ |
+static inline u8 ata_chk_err(struct ata_port *ap) |
+{ |
+ if (ap->flags & ATA_FLAG_MMIO) { |
+ return readb((void *) ap->ioaddr.error_addr); |
+ } |
+ return inb(ap->ioaddr.error_addr); |
+} |
+ |
+static inline u8 ata_chk_status(struct ata_port *ap) |
+{ |
+ return ap->ops->check_status(ap); |
+} |
+ |
+static inline u8 ata_altstatus(struct ata_port *ap) |
+{ |
+ if (ap->flags & ATA_FLAG_MMIO) |
+ return readb(ap->ioaddr.ctl_addr); |
+ return inb(ap->ioaddr.ctl_addr); |
+} |
+ |
+static inline void ata_pause(struct ata_port *ap) |
+{ |
+ ata_altstatus(ap); |
+ ndelay(400); |
+} |
+ |
+static inline u8 ata_busy_wait(struct ata_port *ap, unsigned int bits, |
+ unsigned int max) |
+{ |
+ u8 status; |
+ |
+ do { |
+ udelay(10); |
+ status = ata_chk_status(ap); |
+ max--; |
+ } while ((status & bits) && (max > 0)); |
+ |
+ return status; |
+} |
+ |
+static inline u8 ata_wait_idle(struct ata_port *ap) |
+{ |
+ u8 status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000); |
+ |
+ if (status & (ATA_BUSY | ATA_DRQ)) { |
+ unsigned long l = ap->ioaddr.cmdstat_addr; |
+ printk(KERN_WARNING |
+ "ATA: abnormal status 0x%X on port 0x%lX\n", |
+ status, l); |
+ } |
+ |
+ return status; |
+} |
+ |
+static inline struct ata_queued_cmd *ata_qc_from_tag (struct ata_port *ap, |
+ unsigned int tag) |
+{ |
+ if (likely(ata_tag_valid(tag))) |
+ return &ap->qcmd[tag]; |
+ return NULL; |
+} |
+ |
+static inline void ata_tf_init(struct ata_port *ap, struct ata_taskfile *tf, unsigned int device) |
+{ |
+ memset(tf, 0, sizeof(*tf)); |
+ |
+ tf->ctl = ap->ctl; |
+ if (device == 0) |
+ tf->device = ATA_DEVICE_OBS; |
+ else |
+ tf->device = ATA_DEVICE_OBS | ATA_DEV1; |
+} |
+ |
+static inline u8 ata_irq_on(struct ata_port *ap) |
+{ |
+ struct ata_ioports *ioaddr = &ap->ioaddr; |
+ |
+ ap->ctl &= ~ATA_NIEN; |
+ ap->last_ctl = ap->ctl; |
+ |
+ if (ap->flags & ATA_FLAG_MMIO) |
+ writeb(ap->ctl, ioaddr->ctl_addr); |
+ else |
+ outb(ap->ctl, ioaddr->ctl_addr); |
+ return ata_wait_idle(ap); |
+} |
+ |
+static inline u8 ata_irq_ack(struct ata_port *ap, unsigned int chk_drq) |
+{ |
+ unsigned int bits = chk_drq ? ATA_BUSY | ATA_DRQ : ATA_BUSY; |
+ u8 host_stat, post_stat, status; |
+ |
+ status = ata_busy_wait(ap, bits, 1000); |
+ if (status & bits) |
+ DPRINTK("abnormal status 0x%X\n", status); |
+ |
+ /* get controller status; clear intr, err bits */ |
+ if (ap->flags & ATA_FLAG_MMIO) { |
+ void *mmio = (void *) ap->ioaddr.bmdma_addr; |
+ host_stat = readb(mmio + ATA_DMA_STATUS); |
+ writeb(host_stat | ATA_DMA_INTR | ATA_DMA_ERR, |
+ mmio + ATA_DMA_STATUS); |
+ |
+ post_stat = readb(mmio + ATA_DMA_STATUS); |
+ } else { |
+ host_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS); |
+ outb(host_stat | ATA_DMA_INTR | ATA_DMA_ERR, |
+ ap->ioaddr.bmdma_addr + ATA_DMA_STATUS); |
+ |
+ post_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS); |
+ } |
+ |
+ VPRINTK("irq ack: host_stat 0x%X, new host_stat 0x%X, drv_stat 0x%X\n", |
+ host_stat, post_stat, status); |
+ |
+ return status; |
+} |
+ |
+static inline u32 scr_read(struct ata_port *ap, unsigned int reg) |
+{ |
+ return ap->ops->scr_read(ap, reg); |
+} |
+ |
+static inline void scr_write(struct ata_port *ap, unsigned int reg, u32 val) |
+{ |
+ ap->ops->scr_write(ap, reg, val); |
+} |
+ |
+static inline unsigned int sata_dev_present(struct ata_port *ap) |
+{ |
+ return ((scr_read(ap, SCR_STATUS) & 0xf) == 0x3) ? 1 : 0; |
+} |
+ |
+#endif /* __LINUX_LIBATA_H__ */ |
Index: linuxc26/include/linux/reiserfs_fs_sb.h |
=================================================================== |
--- linuxc26/include/linux/reiserfs_fs_sb.h (nonexistent) |
+++ linuxc26/include/linux/reiserfs_fs_sb.h (revision 422) |
@@ -0,0 +1,504 @@ |
+/* Copyright 1996-2000 Hans Reiser, see reiserfs/README for licensing |
+ * and copyright details */ |
+ |
+#ifndef _LINUX_REISER_FS_SB |
+#define _LINUX_REISER_FS_SB |
+ |
+#ifdef __KERNEL__ |
+#include <linux/workqueue.h> |
+#endif |
+ |
+typedef enum { |
+ reiserfs_attrs_cleared = 0x00000001, |
+} reiserfs_super_block_flags; |
+ |
+/* struct reiserfs_super_block accessors/mutators |
+ * since this is a disk structure, it will always be in |
+ * little endian format. */ |
+#define sb_block_count(sbp) (le32_to_cpu((sbp)->s_v1.s_block_count)) |
+#define set_sb_block_count(sbp,v) ((sbp)->s_v1.s_block_count = cpu_to_le32(v)) |
+#define sb_free_blocks(sbp) (le32_to_cpu((sbp)->s_v1.s_free_blocks)) |
+#define set_sb_free_blocks(sbp,v) ((sbp)->s_v1.s_free_blocks = cpu_to_le32(v)) |
+#define sb_root_block(sbp) (le32_to_cpu((sbp)->s_v1.s_root_block)) |
+#define set_sb_root_block(sbp,v) ((sbp)->s_v1.s_root_block = cpu_to_le32(v)) |
+ |
+#define sb_jp_journal_1st_block(sbp) \ |
+ (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_1st_block)) |
+#define set_sb_jp_journal_1st_block(sbp,v) \ |
+ ((sbp)->s_v1.s_journal.jp_journal_1st_block = cpu_to_le32(v)) |
+#define sb_jp_journal_dev(sbp) \ |
+ (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_dev)) |
+#define set_sb_jp_journal_dev(sbp,v) \ |
+ ((sbp)->s_v1.s_journal.jp_journal_dev = cpu_to_le32(v)) |
+#define sb_jp_journal_size(sbp) \ |
+ (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_size)) |
+#define set_sb_jp_journal_size(sbp,v) \ |
+ ((sbp)->s_v1.s_journal.jp_journal_size = cpu_to_le32(v)) |
+#define sb_jp_journal_trans_max(sbp) \ |
+ (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_trans_max)) |
+#define set_sb_jp_journal_trans_max(sbp,v) \ |
+ ((sbp)->s_v1.s_journal.jp_journal_trans_max = cpu_to_le32(v)) |
+#define sb_jp_journal_magic(sbp) \ |
+ (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_magic)) |
+#define set_sb_jp_journal_magic(sbp,v) \ |
+ ((sbp)->s_v1.s_journal.jp_journal_magic = cpu_to_le32(v)) |
+#define sb_jp_journal_max_batch(sbp) \ |
+ (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_max_batch)) |
+#define set_sb_jp_journal_max_batch(sbp,v) \ |
+ ((sbp)->s_v1.s_journal.jp_journal_max_batch = cpu_to_le32(v)) |
+#define sb_jp_jourmal_max_commit_age(sbp) \ |
+ (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_max_commit_age)) |
+#define set_sb_jp_journal_max_commit_age(sbp,v) \ |
+ ((sbp)->s_v1.s_journal.jp_journal_max_commit_age = cpu_to_le32(v)) |
+ |
+#define sb_blocksize(sbp) (le16_to_cpu((sbp)->s_v1.s_blocksize)) |
+#define set_sb_blocksize(sbp,v) ((sbp)->s_v1.s_blocksize = cpu_to_le16(v)) |
+#define sb_oid_maxsize(sbp) (le16_to_cpu((sbp)->s_v1.s_oid_maxsize)) |
+#define set_sb_oid_maxsize(sbp,v) ((sbp)->s_v1.s_oid_maxsize = cpu_to_le16(v)) |
+#define sb_oid_cursize(sbp) (le16_to_cpu((sbp)->s_v1.s_oid_cursize)) |
+#define set_sb_oid_cursize(sbp,v) ((sbp)->s_v1.s_oid_cursize = cpu_to_le16(v)) |
+#define sb_umount_state(sbp) (le16_to_cpu((sbp)->s_v1.s_umount_state)) |
+#define set_sb_umount_state(sbp,v) ((sbp)->s_v1.s_umount_state = cpu_to_le16(v)) |
+#define sb_fs_state(sbp) (le16_to_cpu((sbp)->s_v1.s_fs_state)) |
+#define set_sb_fs_state(sbp,v) ((sbp)->s_v1.s_fs_state = cpu_to_le16(v)) |
+#define sb_hash_function_code(sbp) \ |
+ (le32_to_cpu((sbp)->s_v1.s_hash_function_code)) |
+#define set_sb_hash_function_code(sbp,v) \ |
+ ((sbp)->s_v1.s_hash_function_code = cpu_to_le32(v)) |
+#define sb_tree_height(sbp) (le16_to_cpu((sbp)->s_v1.s_tree_height)) |
+#define set_sb_tree_height(sbp,v) ((sbp)->s_v1.s_tree_height = cpu_to_le16(v)) |
+#define sb_bmap_nr(sbp) (le16_to_cpu((sbp)->s_v1.s_bmap_nr)) |
+#define set_sb_bmap_nr(sbp,v) ((sbp)->s_v1.s_bmap_nr = cpu_to_le16(v)) |
+#define sb_version(sbp) (le16_to_cpu((sbp)->s_v1.s_version)) |
+#define set_sb_version(sbp,v) ((sbp)->s_v1.s_version = cpu_to_le16(v)) |
+ |
+#define sb_reserved_for_journal(sbp) \ |
+ (le16_to_cpu((sbp)->s_v1.s_reserved_for_journal)) |
+#define set_sb_reserved_for_journal(sbp,v) \ |
+ ((sbp)->s_v1.s_reserved_for_journal = cpu_to_le16(v)) |
+ |
+/* LOGGING -- */ |
+ |
+/* These all interelate for performance. |
+** |
+** If the journal block count is smaller than n transactions, you lose speed. |
+** I don't know what n is yet, I'm guessing 8-16. |
+** |
+** typical transaction size depends on the application, how often fsync is |
+** called, and how many metadata blocks you dirty in a 30 second period. |
+** The more small files (<16k) you use, the larger your transactions will |
+** be. |
+** |
+** If your journal fills faster than dirty buffers get flushed to disk, it must flush them before allowing the journal |
+** to wrap, which slows things down. If you need high speed meta data updates, the journal should be big enough |
+** to prevent wrapping before dirty meta blocks get to disk. |
+** |
+** If the batch max is smaller than the transaction max, you'll waste space at the end of the journal |
+** because journal_end sets the next transaction to start at 0 if the next transaction has any chance of wrapping. |
+** |
+** The large the batch max age, the better the speed, and the more meta data changes you'll lose after a crash. |
+** |
+*/ |
+ |
+/* don't mess with these for a while */ |
+ /* we have a node size define somewhere in reiserfs_fs.h. -Hans */ |
+#define JOURNAL_BLOCK_SIZE 4096 /* BUG gotta get rid of this */ |
+#define JOURNAL_MAX_CNODE 1500 /* max cnodes to allocate. */ |
+#define JOURNAL_HASH_SIZE 8192 |
+#define JOURNAL_NUM_BITMAPS 5 /* number of copies of the bitmaps to have floating. Must be >= 2 */ |
+#define JOURNAL_LIST_COUNT 64 |
+ |
+/* these are bh_state bit flag offset numbers, for use in the buffer head */ |
+ |
+#define BH_JDirty 16 /* journal data needs to be written before buffer can be marked dirty */ |
+#define BH_JDirty_wait 18 /* commit is done, buffer marked dirty */ |
+#define BH_JNew 19 /* buffer allocated during this transaction, no need to write if freed during this trans too */ |
+ |
+/* ugly. metadata blocks must be prepared before they can be logged. |
+** prepared means unlocked and cleaned. If the block is prepared, but not |
+** logged for some reason, any bits cleared while preparing it must be |
+** set again. |
+*/ |
+#define BH_JPrepared 20 /* block has been prepared for the log */ |
+#define BH_JRestore_dirty 22 /* restore the dirty bit later */ |
+ |
+/* One of these for every block in every transaction |
+** Each one is in two hash tables. First, a hash of the current transaction, and after journal_end, a |
+** hash of all the in memory transactions. |
+** next and prev are used by the current transaction (journal_hash). |
+** hnext and hprev are used by journal_list_hash. If a block is in more than one transaction, the journal_list_hash |
+** links it in multiple times. This allows flush_journal_list to remove just the cnode belonging |
+** to a given transaction. |
+*/ |
+struct reiserfs_journal_cnode { |
+ struct buffer_head *bh ; /* real buffer head */ |
+ struct super_block *sb ; /* dev of real buffer head */ |
+ __u32 blocknr ; /* block number of real buffer head, == 0 when buffer on disk */ |
+ long state ; |
+ struct reiserfs_journal_list *jlist ; /* journal list this cnode lives in */ |
+ struct reiserfs_journal_cnode *next ; /* next in transaction list */ |
+ struct reiserfs_journal_cnode *prev ; /* prev in transaction list */ |
+ struct reiserfs_journal_cnode *hprev ; /* prev in hash list */ |
+ struct reiserfs_journal_cnode *hnext ; /* next in hash list */ |
+}; |
+ |
+struct reiserfs_bitmap_node { |
+ int id ; |
+ char *data ; |
+ struct list_head list ; |
+} ; |
+ |
+struct reiserfs_list_bitmap { |
+ struct reiserfs_journal_list *journal_list ; |
+ struct reiserfs_bitmap_node **bitmaps ; |
+} ; |
+ |
+/* |
+** transaction handle which is passed around for all journal calls |
+*/ |
+struct reiserfs_transaction_handle { |
+ /* ifdef it. -Hans */ |
+ char *t_caller ; /* debugging use */ |
+ int t_blocks_logged ; /* number of blocks this writer has logged */ |
+ int t_blocks_allocated ; /* number of blocks this writer allocated */ |
+ unsigned long t_trans_id ; /* sanity check, equals the current trans id */ |
+ struct super_block *t_super ; /* super for this FS when journal_begin was |
+ called. saves calls to reiserfs_get_super */ |
+ int displace_new_blocks:1; /* if new block allocation occurres, that block |
+ should be displaced from others */ |
+ |
+} ; |
+ |
+/* |
+** one of these for each transaction. The most important part here is the j_realblock. |
+** this list of cnodes is used to hash all the blocks in all the commits, to mark all the |
+** real buffer heads dirty once all the commits hit the disk, |
+** and to make sure every real block in a transaction is on disk before allowing the log area |
+** to be overwritten */ |
+struct reiserfs_journal_list { |
+ unsigned long j_start ; |
+ unsigned long j_len ; |
+ atomic_t j_nonzerolen ; |
+ atomic_t j_commit_left ; |
+ atomic_t j_flushing ; |
+ atomic_t j_commit_flushing ; |
+ atomic_t j_older_commits_done ; /* all commits older than this on disk*/ |
+ unsigned long j_trans_id ; |
+ time_t j_timestamp ; |
+ struct reiserfs_list_bitmap *j_list_bitmap ; |
+ struct buffer_head *j_commit_bh ; /* commit buffer head */ |
+ struct reiserfs_journal_cnode *j_realblock ; |
+ struct reiserfs_journal_cnode *j_freedlist ; /* list of buffers that were freed during this trans. free each of these on flush */ |
+ wait_queue_head_t j_commit_wait ; /* wait for all the commit blocks to be flushed */ |
+ wait_queue_head_t j_flush_wait ; /* wait for all the real blocks to be flushed */ |
+} ; |
+ |
+struct reiserfs_page_list ; /* defined in reiserfs_fs.h */ |
+ |
+struct reiserfs_journal { |
+ struct buffer_head ** j_ap_blocks ; /* journal blocks on disk */ |
+ struct reiserfs_journal_cnode *j_last ; /* newest journal block */ |
+ struct reiserfs_journal_cnode *j_first ; /* oldest journal block. start here for traverse */ |
+ |
+ struct file *j_dev_file; |
+ struct block_device *j_dev_bd; |
+ int j_1st_reserved_block; /* first block on s_dev of reserved area journal */ |
+ |
+ long j_state ; |
+ unsigned long j_trans_id ; |
+ unsigned long j_mount_id ; |
+ unsigned long j_start ; /* start of current waiting commit (index into j_ap_blocks) */ |
+ unsigned long j_len ; /* lenght of current waiting commit */ |
+ unsigned long j_len_alloc ; /* number of buffers requested by journal_begin() */ |
+ atomic_t j_wcount ; /* count of writers for current commit */ |
+ unsigned long j_bcount ; /* batch count. allows turning X transactions into 1 */ |
+ unsigned long j_first_unflushed_offset ; /* first unflushed transactions offset */ |
+ unsigned long j_last_flush_trans_id ; /* last fully flushed journal timestamp */ |
+ struct buffer_head *j_header_bh ; |
+ |
+ /* j_flush_pages must be flushed before the current transaction can |
+ ** commit |
+ */ |
+ struct reiserfs_page_list *j_flush_pages ; |
+ time_t j_trans_start_time ; /* time this transaction started */ |
+ wait_queue_head_t j_wait ; /* wait journal_end to finish I/O */ |
+ atomic_t j_wlock ; /* lock for j_wait */ |
+ wait_queue_head_t j_join_wait ; /* wait for current transaction to finish before starting new one */ |
+ atomic_t j_jlock ; /* lock for j_join_wait */ |
+ int j_journal_list_index ; /* journal list number of the current trans */ |
+ int j_list_bitmap_index ; /* number of next list bitmap to use */ |
+ int j_must_wait ; /* no more journal begins allowed. MUST sleep on j_join_wait */ |
+ int j_next_full_flush ; /* next journal_end will flush all journal list */ |
+ int j_next_async_flush ; /* next journal_end will flush all async commits */ |
+ |
+ int j_cnode_used ; /* number of cnodes on the used list */ |
+ int j_cnode_free ; /* number of cnodes on the free list */ |
+ |
+ unsigned int s_journal_trans_max ; /* max number of blocks in a transaction. */ |
+ unsigned int s_journal_max_batch ; /* max number of blocks to batch into a trans */ |
+ unsigned int s_journal_max_commit_age ; /* in seconds, how old can an async commit be */ |
+ unsigned int s_journal_max_trans_age ; /* in seconds, how old can a transaction be */ |
+ |
+ struct reiserfs_journal_cnode *j_cnode_free_list ; |
+ struct reiserfs_journal_cnode *j_cnode_free_orig ; /* orig pointer returned from vmalloc */ |
+ |
+ int j_free_bitmap_nodes ; |
+ int j_used_bitmap_nodes ; |
+ struct list_head j_bitmap_nodes ; |
+ struct list_head j_dirty_buffers ; |
+ spinlock_t j_dirty_buffers_lock ; /* protects j_dirty_buffers */ |
+ struct reiserfs_list_bitmap j_list_bitmap[JOURNAL_NUM_BITMAPS] ; /* array of bitmaps to record the deleted blocks */ |
+ struct reiserfs_journal_list j_journal_list[JOURNAL_LIST_COUNT] ; /* array of all the journal lists */ |
+ struct reiserfs_journal_cnode *j_hash_table[JOURNAL_HASH_SIZE] ; /* hash table for real buffer heads in current trans */ |
+ struct reiserfs_journal_cnode *j_list_hash_table[JOURNAL_HASH_SIZE] ; /* hash table for all the real buffer heads in all |
+ the transactions */ |
+ struct list_head j_prealloc_list; /* list of inodes which have preallocated blocks */ |
+ unsigned long j_max_trans_size ; |
+ unsigned long j_max_batch_size ; |
+}; |
+ |
+#define JOURNAL_DESC_MAGIC "ReIsErLB" /* ick. magic string to find desc blocks in the journal */ |
+ |
+ |
+typedef __u32 (*hashf_t) (const signed char *, int); |
+ |
+struct reiserfs_bitmap_info |
+{ |
+ // FIXME: Won't work with block sizes > 8K |
+ __u16 first_zero_hint; |
+ __u16 free_count; |
+ struct buffer_head *bh; /* the actual bitmap */ |
+}; |
+ |
+struct proc_dir_entry; |
+ |
+#if defined( CONFIG_PROC_FS ) && defined( CONFIG_REISERFS_PROC_INFO ) |
+typedef unsigned long int stat_cnt_t; |
+typedef struct reiserfs_proc_info_data |
+{ |
+ spinlock_t lock; |
+ int exiting; |
+ int max_hash_collisions; |
+ |
+ stat_cnt_t breads; |
+ stat_cnt_t bread_miss; |
+ stat_cnt_t search_by_key; |
+ stat_cnt_t search_by_key_fs_changed; |
+ stat_cnt_t search_by_key_restarted; |
+ |
+ stat_cnt_t insert_item_restarted; |
+ stat_cnt_t paste_into_item_restarted; |
+ stat_cnt_t cut_from_item_restarted; |
+ stat_cnt_t delete_solid_item_restarted; |
+ stat_cnt_t delete_item_restarted; |
+ |
+ stat_cnt_t leaked_oid; |
+ stat_cnt_t leaves_removable; |
+ |
+ /* balances per level. Use explicit 5 as MAX_HEIGHT is not visible yet. */ |
+ stat_cnt_t balance_at[ 5 ]; /* XXX */ |
+ /* sbk == search_by_key */ |
+ stat_cnt_t sbk_read_at[ 5 ]; /* XXX */ |
+ stat_cnt_t sbk_fs_changed[ 5 ]; |
+ stat_cnt_t sbk_restarted[ 5 ]; |
+ stat_cnt_t items_at[ 5 ]; /* XXX */ |
+ stat_cnt_t free_at[ 5 ]; /* XXX */ |
+ stat_cnt_t can_node_be_removed[ 5 ]; /* XXX */ |
+ long int lnum[ 5 ]; /* XXX */ |
+ long int rnum[ 5 ]; /* XXX */ |
+ long int lbytes[ 5 ]; /* XXX */ |
+ long int rbytes[ 5 ]; /* XXX */ |
+ stat_cnt_t get_neighbors[ 5 ]; |
+ stat_cnt_t get_neighbors_restart[ 5 ]; |
+ stat_cnt_t need_l_neighbor[ 5 ]; |
+ stat_cnt_t need_r_neighbor[ 5 ]; |
+ |
+ stat_cnt_t free_block; |
+ struct __scan_bitmap_stats { |
+ stat_cnt_t call; |
+ stat_cnt_t wait; |
+ stat_cnt_t bmap; |
+ stat_cnt_t retry; |
+ stat_cnt_t in_journal_hint; |
+ stat_cnt_t in_journal_nohint; |
+ stat_cnt_t stolen; |
+ } scan_bitmap; |
+ struct __journal_stats { |
+ stat_cnt_t in_journal; |
+ stat_cnt_t in_journal_bitmap; |
+ stat_cnt_t in_journal_reusable; |
+ stat_cnt_t lock_journal; |
+ stat_cnt_t lock_journal_wait; |
+ stat_cnt_t journal_being; |
+ stat_cnt_t journal_relock_writers; |
+ stat_cnt_t journal_relock_wcount; |
+ stat_cnt_t mark_dirty; |
+ stat_cnt_t mark_dirty_already; |
+ stat_cnt_t mark_dirty_notjournal; |
+ stat_cnt_t restore_prepared; |
+ stat_cnt_t prepare; |
+ stat_cnt_t prepare_retry; |
+ } journal; |
+} reiserfs_proc_info_data_t; |
+#else |
+typedef struct reiserfs_proc_info_data |
+{} reiserfs_proc_info_data_t; |
+#endif |
+ |
+/* reiserfs union of in-core super block data */ |
+struct reiserfs_sb_info |
+{ |
+ struct buffer_head * s_sbh; /* Buffer containing the super block */ |
+ /* both the comment and the choice of |
+ name are unclear for s_rs -Hans */ |
+ struct reiserfs_super_block * s_rs; /* Pointer to the super block in the buffer */ |
+ struct reiserfs_bitmap_info * s_ap_bitmap; |
+ struct reiserfs_journal *s_journal ; /* pointer to journal information */ |
+ unsigned short s_mount_state; /* reiserfs state (valid, invalid) */ |
+ |
+ /* Comment? -Hans */ |
+ void (*end_io_handler)(struct buffer_head *, int); |
+ hashf_t s_hash_function; /* pointer to function which is used |
+ to sort names in directory. Set on |
+ mount */ |
+ unsigned long s_mount_opt; /* reiserfs's mount options are set |
+ here (currently - NOTAIL, NOLOG, |
+ REPLAYONLY) */ |
+ |
+ struct { /* This is a structure that describes block allocator options */ |
+ unsigned long bits; /* Bitfield for enable/disable kind of options */ |
+ unsigned long large_file_size; /* size started from which we consider file to be a large one(in blocks) */ |
+ int border; /* percentage of disk, border takes */ |
+ int preallocmin; /* Minimal file size (in blocks) starting from which we do preallocations */ |
+ int preallocsize; /* Number of blocks we try to prealloc when file |
+ reaches preallocmin size (in blocks) or |
+ prealloc_list is empty. */ |
+ } s_alloc_options; |
+ |
+ /* Comment? -Hans */ |
+ wait_queue_head_t s_wait; |
+ /* To be obsoleted soon by per buffer seals.. -Hans */ |
+ atomic_t s_generation_counter; // increased by one every time the |
+ // tree gets re-balanced |
+ unsigned long s_properties; /* File system properties. Currently holds |
+ on-disk FS format */ |
+ |
+ /* session statistics */ |
+ int s_kmallocs; |
+ int s_disk_reads; |
+ int s_disk_writes; |
+ int s_fix_nodes; |
+ int s_do_balance; |
+ int s_unneeded_left_neighbor; |
+ int s_good_search_by_key_reada; |
+ int s_bmaps; |
+ int s_bmaps_without_search; |
+ int s_direct2indirect; |
+ int s_indirect2direct; |
+ /* set up when it's ok for reiserfs_read_inode2() to read from |
+ disk inode with nlink==0. Currently this is only used during |
+ finish_unfinished() processing at mount time */ |
+ int s_is_unlinked_ok; |
+ reiserfs_proc_info_data_t s_proc_info_data; |
+ struct proc_dir_entry *procdir; |
+ int reserved_blocks; /* amount of blocks reserved for further allocations */ |
+ spinlock_t bitmap_lock; /* this lock on now only used to protect reserved_blocks variable */ |
+}; |
+ |
+/* Definitions of reiserfs on-disk properties: */ |
+#define REISERFS_3_5 0 |
+#define REISERFS_3_6 1 |
+ |
+/* Mount options */ |
+#define REISERFS_LARGETAIL 0 /* large tails will be created in a session */ |
+#define REISERFS_SMALLTAIL 17 /* small (for files less than block size) tails will be created in a session */ |
+#define REPLAYONLY 3 /* replay journal and return 0. Use by fsck */ |
+#define REISERFS_NOLOG 4 /* -o nolog: turn journalling off */ |
+#define REISERFS_CONVERT 5 /* -o conv: causes conversion of old |
+ format super block to the new |
+ format. If not specified - old |
+ partition will be dealt with in a |
+ manner of 3.5.x */ |
+ |
+/* -o hash={tea, rupasov, r5, detect} is meant for properly mounting |
+** reiserfs disks from 3.5.19 or earlier. 99% of the time, this option |
+** is not required. If the normal autodection code can't determine which |
+** hash to use (because both hases had the same value for a file) |
+** use this option to force a specific hash. It won't allow you to override |
+** the existing hash on the FS, so if you have a tea hash disk, and mount |
+** with -o hash=rupasov, the mount will fail. |
+*/ |
+#define FORCE_TEA_HASH 6 /* try to force tea hash on mount */ |
+#define FORCE_RUPASOV_HASH 7 /* try to force rupasov hash on mount */ |
+#define FORCE_R5_HASH 8 /* try to force rupasov hash on mount */ |
+#define FORCE_HASH_DETECT 9 /* try to detect hash function on mount */ |
+ |
+ |
+/* used for testing experimental features, makes benchmarking new |
+ features with and without more convenient, should never be used by |
+ users in any code shipped to users (ideally) */ |
+ |
+#define REISERFS_NO_BORDER 11 |
+#define REISERFS_NO_UNHASHED_RELOCATION 12 |
+#define REISERFS_HASHED_RELOCATION 13 |
+ |
+#define REISERFS_ATTRS 15 |
+ |
+#define REISERFS_TEST1 11 |
+#define REISERFS_TEST2 12 |
+#define REISERFS_TEST3 13 |
+#define REISERFS_TEST4 14 |
+ |
+#define reiserfs_r5_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_R5_HASH)) |
+#define reiserfs_rupasov_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_RUPASOV_HASH)) |
+#define reiserfs_tea_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_TEA_HASH)) |
+#define reiserfs_hash_detect(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_HASH_DETECT)) |
+#define reiserfs_no_border(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_NO_BORDER)) |
+#define reiserfs_no_unhashed_relocation(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_NO_UNHASHED_RELOCATION)) |
+#define reiserfs_hashed_relocation(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_HASHED_RELOCATION)) |
+#define reiserfs_test4(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_TEST4)) |
+ |
+#define have_large_tails(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_LARGETAIL)) |
+#define have_small_tails(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_SMALLTAIL)) |
+#define replay_only(s) (REISERFS_SB(s)->s_mount_opt & (1 << REPLAYONLY)) |
+#define reiserfs_dont_log(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_NOLOG)) |
+#define reiserfs_attrs(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_ATTRS)) |
+#define old_format_only(s) (REISERFS_SB(s)->s_properties & (1 << REISERFS_3_5)) |
+#define convert_reiserfs(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_CONVERT)) |
+ |
+ |
+void reiserfs_file_buffer (struct buffer_head * bh, int list); |
+extern struct file_system_type reiserfs_fs_type; |
+int journal_mark_dirty(struct reiserfs_transaction_handle *, struct super_block *, struct buffer_head *bh) ; |
+int flush_old_commits(struct super_block *s, int) ; |
+int show_reiserfs_locks(void) ; |
+int reiserfs_resize(struct super_block *, unsigned long) ; |
+ |
+#define CARRY_ON 0 |
+#define SCHEDULE_OCCURRED 1 |
+ |
+ |
+#define SB_BUFFER_WITH_SB(s) (REISERFS_SB(s)->s_sbh) |
+#define SB_JOURNAL(s) (REISERFS_SB(s)->s_journal) |
+#define SB_JOURNAL_1st_RESERVED_BLOCK(s) (SB_JOURNAL(s)->j_1st_reserved_block) |
+#define SB_JOURNAL_LIST(s) (SB_JOURNAL(s)->j_journal_list) |
+#define SB_JOURNAL_LIST_INDEX(s) (SB_JOURNAL(s)->j_journal_list_index) |
+#define SB_JOURNAL_LEN_FREE(s) (SB_JOURNAL(s)->j_journal_len_free) |
+#define SB_AP_BITMAP(s) (REISERFS_SB(s)->s_ap_bitmap) |
+ |
+#define SB_DISK_JOURNAL_HEAD(s) (SB_JOURNAL(s)->j_header_bh->) |
+ |
+#define SB_JOURNAL_TRANS_MAX(s) (SB_JOURNAL(s)->s_journal_trans_max) |
+#define SB_JOURNAL_MAX_BATCH(s) (SB_JOURNAL(s)->s_journal_max_batch) |
+#define SB_JOURNAL_MAX_COMMIT_AGE(s) (SB_JOURNAL(s)->s_journal_max_commit_age) |
+#define SB_JOURNAL_MAX_TRANS_AGE(s) (SB_JOURNAL(s)->s_journal_max_trans_age) |
+ |
+/* A safe version of the "bdevname", which returns the "s_id" field of |
+ * a superblock or else "Null superblock" if the super block is NULL. |
+ */ |
+static inline char *reiserfs_bdevname(struct super_block *s) |
+{ |
+ return (s == NULL) ? "Null superblock" : s -> s_id; |
+} |
+ |
+#endif /* _LINUX_REISER_FS_SB */ |
Index: linuxc26/include/linux/sdla_asy.h |
=================================================================== |
--- linuxc26/include/linux/sdla_asy.h (nonexistent) |
+++ linuxc26/include/linux/sdla_asy.h (revision 422) |
@@ -0,0 +1,226 @@ |
+/***************************************************************************** |
+* sdla_asy.h Header file for the Sangoma S508/S514 asynchronous code API |
+* |
+* Author: Gideon Hack |
+* |
+* Copyright: (c) 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. |
+* ============================================================================ |
+* |
+* Jan 28, 2000 Gideon Hack Initial Version |
+* |
+*****************************************************************************/ |
+ |
+ |
+#ifndef _WANPIPE_ASYNC_H |
+#define _WANPIPE_ASYNC_H |
+ |
+/* ---------------------------------------------------------------------------- |
+ * Interface commands |
+ * --------------------------------------------------------------------------*/ |
+ |
+#define SET_ASY_CONFIGURATION 0xE2 /* set the asychronous operational configuration */ |
+#define READ_ASY_CONFIGURATION 0xE3 /* read the current asychronous operational configuration */ |
+#define ENABLE_ASY_COMMUNICATIONS 0xE4 /* enable asychronous communications */ |
+#define DISABLE_ASY_COMMUNICATIONS 0xE5 /* disable asychronous communications */ |
+#define READ_ASY_OPERATIONAL_STATS 0xE7 /* retrieve the asychronous operational statistics */ |
+#define FLUSH_ASY_OPERATIONAL_STATS 0xE8 /* flush the asychronous operational statistics */ |
+#define TRANSMIT_ASY_BREAK_SIGNAL 0xEC /* transmit an asychronous break signal */ |
+ |
+ |
+ |
+/* ---------------------------------------------------------------------------- |
+ * Return codes from interface commands |
+ * --------------------------------------------------------------------------*/ |
+ |
+#define COMMAND_INVALID_FOR_PORT 0x50 /* the command is invalid for the selected port */ |
+#define DISABLE_ASY_COMMS_BEFORE_CFG 0xE1 /* communications must be disabled before setting the configuration */ |
+#define ASY_COMMS_ENABLED 0xE1 /* communications are currently enabled */ |
+#define ASY_COMMS_DISABLED 0xE1 /* communications are currently disabled */ |
+#define ASY_CFG_BEFORE_COMMS_ENABLED 0xE2 /* perform a SET_ASY_CONFIGURATION before enabling comms */ |
+#define LGTH_ASY_CFG_DATA_INVALID 0xE2 /* the length of the passed configuration data is invalid */ |
+#define INVALID_ASY_CFG_DATA 0xE3 /* the passed configuration data is invalid */ |
+#define ASY_BREAK_SIGNAL_BUSY 0xEC /* a break signal is being transmitted */ |
+ |
+ |
+ |
+/* ---------------------------------------------------------------------------- |
+ * Constants for the SET_ASY_CONFIGURATION/READ_ASY_CONFIGURATION command |
+ * --------------------------------------------------------------------------*/ |
+ |
+/* the asynchronous configuration structure */ |
+typedef struct { |
+ unsigned long baud_rate PACKED; /* the baud rate */ |
+ unsigned short line_config_options PACKED; /* line configuration options */ |
+ unsigned short modem_config_options PACKED; /* modem configuration options */ |
+ unsigned short asy_API_options PACKED; /* asynchronous API options */ |
+ unsigned short asy_protocol_options PACKED; /* asynchronous protocol options */ |
+ unsigned short Tx_bits_per_char PACKED; /* number of bits per tx character */ |
+ unsigned short Rx_bits_per_char PACKED; /* number of bits per received character */ |
+ unsigned short stop_bits PACKED; /* number of stop bits per character */ |
+ unsigned short parity PACKED; /* parity definition */ |
+ unsigned short break_timer PACKED; /* the break signal timer */ |
+ unsigned short asy_Rx_inter_char_timer PACKED; /* the receive inter-character timer */ |
+ unsigned short asy_Rx_complete_length PACKED; /* the receive 'buffer complete' length */ |
+ unsigned short XON_char PACKED; /* the XON character */ |
+ unsigned short XOFF_char PACKED; /* the XOFF character */ |
+ unsigned short asy_statistics_options PACKED; /* async operational stat options */ |
+ unsigned long ptr_shared_mem_info_struct PACKED;/* ptr to the shared memory area information structure */ |
+ unsigned long ptr_asy_Tx_stat_el_cfg_struct PACKED;/* ptr to the transmit status element configuration structure */ |
+ unsigned long ptr_asy_Rx_stat_el_cfg_struct PACKED;/* ptr to the receive status element configuration structure */ |
+} ASY_CONFIGURATION_STRUCT; |
+ |
+/* permitted minimum and maximum values for setting the asynchronous configuration */ |
+#define MIN_ASY_BAUD_RATE 50 /* maximum baud rate */ |
+#define MAX_ASY_BAUD_RATE 250000 /* minimum baud rate */ |
+#define MIN_ASY_BITS_PER_CHAR 5 /* minimum number of bits per character */ |
+#define MAX_ASY_BITS_PER_CHAR 8 /* maximum number of bits per character */ |
+#define MIN_BREAK_TMR_VAL 0 /* minimum break signal timer */ |
+#define MAX_BREAK_TMR_VAL 5000 /* maximum break signal timer */ |
+#define MIN_ASY_RX_INTER_CHAR_TMR 0 /* minimum receive inter-character timer */ |
+#define MAX_ASY_RX_INTER_CHAR_TMR 30000 /* maximum receive inter-character timer */ |
+#define MIN_ASY_RX_CPLT_LENGTH 0 /* minimum receive 'length complete' value */ |
+#define MAX_ASY_RX_CPLT_LENGTH 2000 /* maximum receive 'length complete' value */ |
+ |
+/* bit settings for the 'asy_API_options' */ |
+#define ASY_RX_DATA_TRANSPARENT 0x0001 /* do not strip parity and unused bits from received characters */ |
+ |
+/* bit settings for the 'asy_protocol_options' */ |
+#define ASY_RTS_HS_FOR_RX 0x0001 /* RTS handshaking is used for reception control */ |
+#define ASY_XON_XOFF_HS_FOR_RX 0x0002 /* XON/XOFF handshaking is used for reception control */ |
+#define ASY_XON_XOFF_HS_FOR_TX 0x0004 /* XON/XOFF handshaking is used for transmission control */ |
+#define ASY_DCD_HS_FOR_TX 0x0008 /* DCD handshaking is used for transmission control */ |
+#define ASY_CTS_HS_FOR_TX 0x0020 /* CTS handshaking is used for transmission control */ |
+ |
+/* bit settings for the 'stop_bits' definition */ |
+#define ONE_STOP_BIT 1 /* representation for 1 stop bit */ |
+#define TWO_STOP_BITS 2 /* representation for 2 stop bits */ |
+#define ONE_AND_A_HALF_STOP_BITS 3 /* representation for 1.5 stop bits */ |
+ |
+/* bit settings for the 'parity' definition */ |
+#define NO_PARITY 0 /* representation for no parity */ |
+#define ODD_PARITY 1 /* representation for odd parity */ |
+#define EVEN_PARITY 2 /* representation for even parity */ |
+ |
+ |
+ |
+/* ---------------------------------------------------------------------------- |
+ * Constants for the READ_COMMS_ERROR_STATS command (asynchronous mode) |
+ * --------------------------------------------------------------------------*/ |
+ |
+/* the communications error statistics structure */ |
+typedef struct { |
+ unsigned short Rx_overrun_err_count PACKED; /* receiver overrun error count */ |
+ unsigned short Rx_parity_err_count PACKED; /* parity errors received count */ |
+ unsigned short Rx_framing_err_count PACKED; /* framing errors received count */ |
+ unsigned short comms_err_stat_reserved_1 PACKED;/* reserved for later use */ |
+ unsigned short comms_err_stat_reserved_2 PACKED;/* reserved for later use */ |
+ unsigned short comms_err_stat_reserved_3 PACKED;/* reserved for later use */ |
+ unsigned short comms_err_stat_reserved_4 PACKED;/* reserved for later use */ |
+ unsigned short comms_err_stat_reserved_5 PACKED;/* reserved for later use */ |
+ unsigned short DCD_state_change_count PACKED; /* DCD state change count */ |
+ unsigned short CTS_state_change_count PACKED; /* CTS state change count */ |
+} ASY_COMMS_ERROR_STATS_STRUCT; |
+ |
+ |
+ |
+/* ---------------------------------------------------------------------------- |
+ * Constants for the READ_ASY_OPERATIONAL_STATS command |
+ * --------------------------------------------------------------------------*/ |
+ |
+/* the asynchronous operational statistics structure */ |
+typedef struct { |
+ |
+ /* Data transmission statistics */ |
+ unsigned long Data_blocks_Tx_count PACKED;/* number of blocks transmitted */ |
+ unsigned long Data_bytes_Tx_count PACKED;/* number of bytes transmitted */ |
+ unsigned long Data_Tx_throughput PACKED;/* transmit throughput */ |
+ unsigned long no_ms_for_Data_Tx_thruput_comp PACKED;/* millisecond time used for the Tx throughput computation */ |
+ unsigned long Tx_Data_discard_lgth_err_count PACKED;/* number of Data blocks discarded (length error) */ |
+ unsigned long reserved_Data_frm_Tx_stat1 PACKED;/* reserved for later use */ |
+ unsigned long reserved_Data_frm_Tx_stat2 PACKED;/* reserved for later use */ |
+ unsigned long reserved_Data_frm_Tx_stat3 PACKED;/* reserved for later use */ |
+ |
+ /* Data reception statistics */ |
+ unsigned long Data_blocks_Rx_count PACKED;/* number of blocks received */ |
+ unsigned long Data_bytes_Rx_count PACKED;/* number of bytes received */ |
+ unsigned long Data_Rx_throughput PACKED;/* receive throughput */ |
+ unsigned long no_ms_for_Data_Rx_thruput_comp PACKED;/* millisecond time used for the Rx throughput computation */ |
+ unsigned long Rx_Data_bytes_discard_count PACKED;/* received Data bytes discarded */ |
+ unsigned long reserved_Data_frm_Rx_stat1 PACKED;/* reserved for later use */ |
+ |
+ /* handshaking protocol statistics */ |
+ unsigned short XON_chars_Tx_count PACKED; /* number of XON characters transmitted */ |
+ unsigned short XOFF_chars_Tx_count PACKED; /* number of XOFF characters transmitted */ |
+ unsigned short XON_chars_Rx_count PACKED; /* number of XON characters received */ |
+ unsigned short XOFF_chars_Rx_count PACKED; /* number of XOFF characters received */ |
+ unsigned short Tx_halt_modem_low_count PACKED; /* number of times Tx halted (modem line low) */ |
+ unsigned short Rx_halt_RTS_low_count PACKED; /* number of times Rx halted by setting RTS low */ |
+ unsigned long reserved_handshaking_stat1 PACKED;/* reserved for later use */ |
+ |
+ /* break statistics */ |
+ unsigned short break_Tx_count PACKED; /* number of break sequences transmitted */ |
+ unsigned short break_Rx_count PACKED; /* number of break sequences received */ |
+ unsigned long reserved_break_stat1 PACKED;/* reserved for later use */ |
+ |
+ /* miscellaneous statistics */ |
+ unsigned long reserved_misc_stat1 PACKED; /* reserved for later use */ |
+ unsigned long reserved_misc_stat2 PACKED; /* reserved for later use */ |
+ |
+} ASY_OPERATIONAL_STATS_STRUCT; |
+ |
+ |
+ |
+/* ---------------------------------------------------------------------------- |
+ * Constants for Data transmission |
+ * --------------------------------------------------------------------------*/ |
+ |
+/* the Data block transmit status element configuration structure */ |
+typedef struct { |
+ unsigned short number_Tx_status_elements PACKED; /* number of transmit status elements */ |
+ unsigned long base_addr_Tx_status_elements PACKED; /* base address of the transmit element list */ |
+ unsigned long next_Tx_status_element_to_use PACKED; /* pointer to the next transmit element to be used */ |
+} ASY_TX_STATUS_EL_CFG_STRUCT; |
+ |
+ |
+/* the Data block transmit status element structure */ |
+typedef struct { |
+ unsigned char opp_flag PACKED; /* opp flag */ |
+ unsigned short data_length PACKED; /* length of the block to be transmitted */ |
+ unsigned char reserved_1 PACKED; /* reserved for internal use */ |
+ unsigned long reserved_2 PACKED; /* reserved for internal use */ |
+ unsigned long reserved_3 PACKED; /* reserved for internal use */ |
+ unsigned long ptr_data_bfr PACKED; /* pointer to the data area */ |
+} ASY_DATA_TX_STATUS_EL_STRUCT; |
+ |
+ |
+ |
+/* ---------------------------------------------------------------------------- |
+ * Constants for Data reception |
+ * --------------------------------------------------------------------------*/ |
+ |
+/* the Data block receive status element configuration structure */ |
+typedef struct { |
+ unsigned short number_Rx_status_elements PACKED;/* number of receive status elements */ |
+ unsigned long base_addr_Rx_status_elements PACKED;/* base address of the receive element list */ |
+ unsigned long next_Rx_status_element_to_use PACKED;/* pointer to the next receive element to be used */ |
+ unsigned long base_addr_Rx_buffer PACKED;/* base address of the receive data buffer */ |
+ unsigned long end_addr_Rx_buffer PACKED;/* end address of the receive data buffer */ |
+} ASY_RX_STATUS_EL_CFG_STRUCT; |
+ |
+/* the Data block receive status element structure */ |
+typedef struct { |
+ unsigned char opp_flag PACKED; /* opp flag */ |
+ unsigned short data_length PACKED; /* length of the received data block */ |
+ unsigned char reserved_1 PACKED; /* reserved for internal use */ |
+ unsigned short time_stamp PACKED; /* receive time stamp (HDLC_STREAMING_MODE) */ |
+ unsigned short data_buffered PACKED; /* the number of data bytes still buffered */ |
+ unsigned long reserved_2 PACKED; /* reserved for internal use */ |
+ unsigned long ptr_data_bfr PACKED; /* pointer to the data area */ |
+} ASY_DATA_RX_STATUS_EL_STRUCT; |
+ |
+#endif |
Index: linuxc26/include/linux/inet.h |
=================================================================== |
--- linuxc26/include/linux/inet.h (nonexistent) |
+++ linuxc26/include/linux/inet.h (revision 422) |
@@ -0,0 +1,48 @@ |
+/* |
+ * Swansea University Computer Society NET3 |
+ * |
+ * This work is derived from NET2Debugged, which is in turn derived |
+ * from NET2D which was written by: |
+ * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> |
+ * |
+ * This work was derived from Ross Biro's inspirational work |
+ * for the LINUX operating system. His version numbers were: |
+ * |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * $Id: inet.h,v 1.1 2004-01-28 15:25:39 giacomo Exp $ |
+ * |
+ * 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_INET_H |
+#define _LINUX_INET_H |
+ |
+#ifdef __KERNEL__ |
+extern __u32 in_aton(const char *str); |
+#endif |
+#endif /* _LINUX_INET_H */ |
Index: linuxc26/include/linux/dcookies.h |
=================================================================== |
--- linuxc26/include/linux/dcookies.h (nonexistent) |
+++ linuxc26/include/linux/dcookies.h (revision 422) |
@@ -0,0 +1,69 @@ |
+/* |
+ * dcookies.h |
+ * |
+ * Persistent cookie-path mappings |
+ * |
+ * Copyright 2002 John Levon <levon@movementarian.org> |
+ */ |
+ |
+#ifndef DCOOKIES_H |
+#define DCOOKIES_H |
+ |
+#include <linux/config.h> |
+ |
+#ifdef CONFIG_PROFILING |
+ |
+#include <linux/types.h> |
+ |
+struct dcookie_user; |
+ |
+/** |
+ * dcookie_register - register a user of dcookies |
+ * |
+ * Register as a dcookie user. Returns %NULL on failure. |
+ */ |
+struct dcookie_user * dcookie_register(void); |
+ |
+/** |
+ * dcookie_unregister - unregister a user of dcookies |
+ * |
+ * Unregister as a dcookie user. This may invalidate |
+ * any dcookie values returned from get_dcookie(). |
+ */ |
+void dcookie_unregister(struct dcookie_user * user); |
+ |
+/** |
+ * get_dcookie - acquire a dcookie |
+ * |
+ * Convert the given dentry/vfsmount pair into |
+ * a cookie value. |
+ * |
+ * Returns -EINVAL if no living task has registered as a |
+ * dcookie user. |
+ * |
+ * Returns 0 on success, with *cookie filled in |
+ */ |
+int get_dcookie(struct dentry * dentry, struct vfsmount * vfsmnt, |
+ unsigned long * cookie); |
+ |
+#else |
+ |
+struct dcookie_user * dcookie_register(void) |
+{ |
+ return 0; |
+} |
+ |
+void dcookie_unregister(struct dcookie_user * user) |
+{ |
+ return; |
+} |
+ |
+static inline int get_dcookie(struct dentry * dentry, |
+ struct vfsmount * vfsmnt, unsigned long * cookie) |
+{ |
+ return -ENOSYS; |
+} |
+ |
+#endif /* CONFIG_PROFILING */ |
+ |
+#endif /* DCOOKIES_H */ |
Index: linuxc26/include/linux/auto_fs.h |
=================================================================== |
--- linuxc26/include/linux/auto_fs.h (nonexistent) |
+++ linuxc26/include/linux/auto_fs.h (revision 422) |
@@ -0,0 +1,84 @@ |
+/* -*- 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 _LINUX_AUTO_FS_H |
+#define _LINUX_AUTO_FS_H |
+ |
+#ifdef __KERNEL__ |
+#include <linux/fs.h> |
+#include <linux/limits.h> |
+#include <asm/types.h> |
+#endif /* __KERNEL__ */ |
+ |
+#include <linux/ioctl.h> |
+ |
+/* 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_SETTIMEOUT _IOWR(0x93,0x64,unsigned long) |
+#define AUTOFS_IOC_EXPIRE _IOR(0x93,0x65,struct autofs_packet_expire) |
+ |
+#endif /* _LINUX_AUTO_FS_H */ |
Index: linuxc26/include/linux/posix-timers.h |
=================================================================== |
--- linuxc26/include/linux/posix-timers.h (nonexistent) |
+++ linuxc26/include/linux/posix-timers.h (revision 422) |
@@ -0,0 +1,30 @@ |
+#ifndef _linux_POSIX_TIMERS_H |
+#define _linux_POSIX_TIMERS_H |
+ |
+struct k_clock { |
+ int res; /* in nano seconds */ |
+ int (*clock_set) (struct timespec * tp); |
+ int (*clock_get) (struct timespec * tp); |
+ int (*nsleep) (int flags, |
+ struct timespec * new_setting, |
+ struct itimerspec * old_setting); |
+ int (*timer_set) (struct k_itimer * timr, int flags, |
+ struct itimerspec * new_setting, |
+ struct itimerspec * old_setting); |
+ int (*timer_del) (struct k_itimer * timr); |
+ void (*timer_get) (struct k_itimer * timr, |
+ struct itimerspec * cur_setting); |
+}; |
+struct now_struct { |
+ unsigned long jiffies; |
+}; |
+ |
+#define posix_get_now(now) (now)->jiffies = jiffies; |
+#define posix_time_before(timer, now) \ |
+ time_before((timer)->expires, (now)->jiffies) |
+ |
+#define posix_bump_timer(timr) do { \ |
+ (timr)->it_timer.expires += (timr)->it_incr; \ |
+ (timr)->it_overrun++; \ |
+ }while (0) |
+#endif |
Index: linuxc26/include/linux/config.h |
=================================================================== |
--- linuxc26/include/linux/config.h (nonexistent) |
+++ linuxc26/include/linux/config.h (revision 422) |
@@ -0,0 +1,4 @@ |
+#ifndef _LINUX_CONFIG_H |
+#define _LINUX_CONFIG_H |
+ |
+#endif |
Index: linuxc26/include/linux/ps2esdi.h |
=================================================================== |
--- linuxc26/include/linux/ps2esdi.h (nonexistent) |
+++ linuxc26/include/linux/ps2esdi.h (revision 422) |
@@ -0,0 +1,98 @@ |
+#ifndef _PS2ESDI_H_ |
+#define _PS2ESDI_H_ |
+ |
+#define NRML_ESDI_ID 0xddff |
+#define INTG_ESDI_ID 0xdf9f |
+ |
+#define PRIMARY_IO_BASE 0x3510 |
+#define ALT_IO_BASE 0x3518 |
+ |
+#define ESDI_CMD_INT (io_base+0) |
+#define ESDI_STT_INT (io_base+0) |
+#define ESDI_CONTROL (io_base+2) |
+#define ESDI_STATUS (io_base+2) |
+#define ESDI_ATTN (io_base+3) |
+#define ESDI_INTRPT (io_base+3) |
+ |
+#define STATUS_ENABLED 0x01 |
+#define STATUS_ALTERNATE 0x02 |
+#define STATUS_BUSY 0x10 |
+#define STATUS_STAT_AVAIL 0x08 |
+#define STATUS_INTR 0x01 |
+#define STATUS_RESET_FAIL 0xea |
+#define STATUS_CMD_INF 0x04 |
+ |
+#define CTRL_SOFT_RESET 0xe4 |
+#define CTRL_HARD_RESET 0x80 |
+#define CTRL_EOI 0xe2 |
+#define CTRL_ENABLE_DMA 0x02 |
+#define CTRL_ENABLE_INTR 0x01 |
+#define CTRL_DISABLE_INTR 0x00 |
+ |
+#define ATT_EOI 0x02 |
+ |
+/* bits of word 0 of configuration status block. more info see p.38 of tech ref */ |
+#define CONFIG_IS 0x10 /* Invalid Secondary */ |
+#define CONFIG_ZD 0x08 /* Zero Defect */ |
+#define CONFIG_SF 0x04 /* Skewed Format */ |
+#define CONFIG_FR 0x02 /* Removable */ |
+#define CONFIG_RT 0x01 /* Retries */ |
+ |
+#define PORT_SYS_A 0x92 |
+#define PORT_DMA_FN 0x18 |
+#define PORT_DMA_EX 0x1a |
+ |
+#define ON (unsigned char)0x40 |
+#define OFF (unsigned char)~ON |
+#define LITE_ON outb(inb(PORT_SYS_A) | ON,PORT_SYS_A) |
+#define LITE_OFF outb((inb(PORT_SYS_A) & OFF),PORT_SYS_A) |
+ |
+#define FAIL 0 |
+#define SUCCES 1 |
+ |
+#define INT_CMD_COMPLETE 0x01 |
+#define INT_CMD_ECC 0x03 |
+#define INT_CMD_RETRY 0x05 |
+#define INT_CMD_FORMAT 0x06 |
+#define INT_CMD_ECC_RETRY 0x07 |
+#define INT_CMD_WARNING 0x08 |
+#define INT_CMD_ABORT 0x09 |
+#define INT_RESET 0x0A |
+#define INT_TRANSFER_REQ 0x0B |
+#define INT_CMD_FAILED 0x0C |
+#define INT_DMA_ERR 0x0D |
+#define INT_CMD_BLK_ERR 0x0E |
+#define INT_ATTN_ERROR 0x0F |
+ |
+#define DMA_MASK_CHAN 0x90 |
+#define DMA_UNMASK_CHAN 0xA0 |
+#define DMA_WRITE_ADDR 0x20 |
+#define DMA_WRITE_TC 0x40 |
+#define DMA_WRITE_MODE 0x70 |
+ |
+#define CMD_GET_DEV_CONFIG 0x09 |
+#define CMD_READ 0x4601 |
+#define CMD_WRITE 0x4602 |
+#define DMA_READ_16 0x4C |
+#define DMA_WRITE_16 0x44 |
+ |
+ |
+#define MB 1024*1024 |
+#define SECT_SIZE 512 |
+ |
+#define ERROR 1 |
+#define OK 0 |
+ |
+#define HDIO_GETGEO 0x0301 |
+ |
+#define FALSE 0 |
+#define TRUE !FALSE |
+ |
+struct ps2esdi_geometry { |
+ unsigned char heads; |
+ unsigned char sectors; |
+ unsigned short cylinders; |
+ unsigned long start; |
+}; |
+ |
+#endif /* _PS2ESDI_H_ */ |
Index: linuxc26/include/linux/personality.h |
=================================================================== |
--- linuxc26/include/linux/personality.h (nonexistent) |
+++ linuxc26/include/linux/personality.h (revision 422) |
@@ -0,0 +1,112 @@ |
+#ifndef _LINUX_PERSONALITY_H |
+#define _LINUX_PERSONALITY_H |
+ |
+/* |
+ * Handling of different ABIs (personalities). |
+ */ |
+ |
+struct exec_domain; |
+struct pt_regs; |
+ |
+extern int register_exec_domain(struct exec_domain *); |
+extern int unregister_exec_domain(struct exec_domain *); |
+extern int __set_personality(unsigned long); |
+ |
+ |
+/* |
+ * Sysctl variables related to binary emulation. |
+ */ |
+extern unsigned long abi_defhandler_coff; |
+extern unsigned long abi_defhandler_elf; |
+extern unsigned long abi_defhandler_lcall7; |
+extern unsigned long abi_defhandler_libcso; |
+extern int abi_fake_utsname; |
+ |
+ |
+/* |
+ * Flags for bug emulation. |
+ * |
+ * These occupy the top three bytes. |
+ */ |
+enum { |
+ MMAP_PAGE_ZERO = 0x0100000, |
+ ADDR_LIMIT_32BIT = 0x0800000, |
+ SHORT_INODE = 0x1000000, |
+ WHOLE_SECONDS = 0x2000000, |
+ STICKY_TIMEOUTS = 0x4000000, |
+ ADDR_LIMIT_3GB = 0x8000000, |
+}; |
+ |
+/* |
+ * 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_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, |
+}; |
+ |
+ |
+/* |
+ * Description of an execution domain. |
+ * |
+ * The first two members are refernced from assembly source |
+ * and should stay where they are unless explicitly needed. |
+ */ |
+typedef void (*handler_t)(int, struct pt_regs *); |
+ |
+struct exec_domain { |
+ const char *name; /* name of the execdomain */ |
+ handler_t handler; /* handler for syscalls */ |
+ unsigned char pers_low; /* lowest personality */ |
+ unsigned char pers_high; /* highest personality */ |
+ unsigned long *signal_map; /* signal mapping */ |
+ unsigned long *signal_invmap; /* reverse signal mapping */ |
+ struct map_segment *err_map; /* error mapping */ |
+ struct map_segment *socktype_map; /* socket type mapping */ |
+ struct map_segment *sockopt_map; /* socket option mapping */ |
+ struct map_segment *af_map; /* address family mapping */ |
+ struct module *module; /* module context of the ed. */ |
+ struct exec_domain *next; /* linked list (internal) */ |
+}; |
+ |
+/* |
+ * Return the base personality without flags. |
+ */ |
+#define personality(pers) (pers & PER_MASK) |
+ |
+/* |
+ * Personality of the currently running process. |
+ */ |
+#define get_personality (current->personality) |
+ |
+/* |
+ * Change personality of the currently running process. |
+ */ |
+#define set_personality(pers) \ |
+ ((current->personality == pers) ? 0 : __set_personality(pers)) |
+ |
+#endif /* _LINUX_PERSONALITY_H */ |
Index: linuxc26/include/linux/sdla_fr.h |
=================================================================== |
--- linuxc26/include/linux/sdla_fr.h (nonexistent) |
+++ linuxc26/include/linux/sdla_fr.h (revision 422) |
@@ -0,0 +1,638 @@ |
+/***************************************************************************** |
+* sdla_fr.h Sangoma frame relay firmware API definitions. |
+* |
+* Author: Gideon Hack |
+* Nenad Corbic <ncorbic@sangoma.com> |
+* |
+* 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. |
+* ============================================================================ |
+* Oct 04, 1999 Gideon Hack Updated API structures |
+* Jun 02, 1999 Gideon Hack Modifications for S514 support |
+* Oct 12, 1997 Jaspreet Singh Added FR_READ_DLCI_IB_MAPPING |
+* Jul 21, 1997 Jaspreet Singh Changed FRRES_TOO_LONG and FRRES_TOO_MANY to |
+* 0x05 and 0x06 respectively. |
+* Dec 23, 1996 Gene Kozin v2.0 |
+* Apr 29, 1996 Gene Kozin v1.0 (merged version S502 & S508 definitions). |
+* Sep 26, 1995 Gene Kozin Initial version. |
+*****************************************************************************/ |
+#ifndef _SDLA_FR_H |
+#define _SDLA_FR_H |
+ |
+/*---------------------------------------------------------------------------- |
+ * Notes: |
+ * ------ |
+ * 1. All structures defined in this file are byte-alined. |
+ * |
+ * Compiler Platform |
+ * -------- -------- |
+ * GNU C Linux |
+ */ |
+ |
+#ifndef PACKED |
+# define PACKED __attribute__((packed)) |
+#endif /* PACKED */ |
+ |
+/* Adapter memory layout */ |
+#define FR_MB_VECTOR 0xE000 /* mailbox window vector */ |
+#define FR502_RX_VECTOR 0xA000 /* S502 direct receive window vector */ |
+#define FR502_MBOX_OFFS 0xF60 /* S502 mailbox offset */ |
+#define FR508_MBOX_OFFS 0 /* S508 mailbox offset */ |
+#define FR502_FLAG_OFFS 0x1FF0 /* S502 status flags offset */ |
+#define FR508_FLAG_OFFS 0x1000 /* S508 status flags offset */ |
+#define FR502_RXMB_OFFS 0x900 /* S502 direct receive mailbox offset */ |
+#define FR508_TXBC_OFFS 0x1100 /* S508 Tx buffer info offset */ |
+#define FR508_RXBC_OFFS 0x1120 /* S508 Rx buffer info offset */ |
+ |
+/* Important constants */ |
+#define FR502_MAX_DATA 4096 /* maximum data buffer length */ |
+#define FR508_MAX_DATA 4080 /* maximum data buffer length */ |
+#define MIN_LGTH_FR_DATA_CFG 300 /* min Information frame length |
+(for configuration purposes) */ |
+#define FR_MAX_NO_DATA_BYTES_IN_FRAME 15354 /* max Information frame length */ |
+ |
+#define HIGHEST_VALID_DLCI 991 |
+ |
+/****** Data Structures *****************************************************/ |
+ |
+/*---------------------------------------------------------------------------- |
+ * Frame relay command block. |
+ */ |
+typedef struct fr_cmd |
+{ |
+ unsigned char command PACKED; /* command code */ |
+ unsigned short length PACKED; /* length of data buffer */ |
+ unsigned char result PACKED; /* return code */ |
+ unsigned short dlci PACKED; /* DLCI number */ |
+ unsigned char attr PACKED; /* FECN, BECN, DE and C/R bits */ |
+ unsigned short rxlost1 PACKED; /* frames discarded at int. level */ |
+ unsigned long rxlost2 PACKED; /* frames discarded at app. level */ |
+ unsigned char rsrv[2] PACKED; /* reserved for future use */ |
+} fr_cmd_t; |
+ |
+/* 'command' field defines */ |
+#define FR_WRITE 0x01 |
+#define FR_READ 0x02 |
+#define FR_ISSUE_IS_FRAME 0x03 |
+#define FR_SET_CONFIG 0x10 |
+#define FR_READ_CONFIG 0x11 |
+#define FR_COMM_DISABLE 0x12 |
+#define FR_COMM_ENABLE 0x13 |
+#define FR_READ_STATUS 0x14 |
+#define FR_READ_STATISTICS 0x15 |
+#define FR_FLUSH_STATISTICS 0x16 |
+#define FR_LIST_ACTIVE_DLCI 0x17 |
+#define FR_FLUSH_DATA_BUFFERS 0x18 |
+#define FR_READ_ADD_DLC_STATS 0x19 |
+#define FR_ADD_DLCI 0x20 |
+#define FR_DELETE_DLCI 0x21 |
+#define FR_ACTIVATE_DLCI 0x22 |
+#define FR_DEACTIVATE_DLCI 0x22 |
+#define FR_READ_MODEM_STATUS 0x30 |
+#define FR_SET_MODEM_STATUS 0x31 |
+#define FR_READ_ERROR_STATS 0x32 |
+#define FR_FLUSH_ERROR_STATS 0x33 |
+#define FR_READ_DLCI_IB_MAPPING 0x34 |
+#define FR_READ_CODE_VERSION 0x40 |
+#define FR_SET_INTR_MODE 0x50 |
+#define FR_READ_INTR_MODE 0x51 |
+#define FR_SET_TRACE_CONFIG 0x60 |
+#define FR_FT1_STATUS_CTRL 0x80 |
+#define FR_SET_FT1_MODE 0x81 |
+ |
+/* Special UDP drivers management commands */ |
+#define FPIPE_ENABLE_TRACING 0x41 |
+#define FPIPE_DISABLE_TRACING 0x42 |
+#define FPIPE_GET_TRACE_INFO 0x43 |
+#define FPIPE_FT1_READ_STATUS 0x44 |
+#define FPIPE_DRIVER_STAT_IFSEND 0x45 |
+#define FPIPE_DRIVER_STAT_INTR 0x46 |
+#define FPIPE_DRIVER_STAT_GEN 0x47 |
+#define FPIPE_FLUSH_DRIVER_STATS 0x48 |
+#define FPIPE_ROUTER_UP_TIME 0x49 |
+ |
+/* 'result' field defines */ |
+#define FRRES_OK 0x00 /* command executed successfully */ |
+#define FRRES_DISABLED 0x01 /* communications not enabled */ |
+#define FRRES_INOPERATIVE 0x02 /* channel inoperative */ |
+#define FRRES_DLCI_INACTIVE 0x03 /* DLCI is inactive */ |
+#define FRRES_DLCI_INVALID 0x04 /* DLCI is not configured */ |
+#define FRRES_TOO_LONG 0x05 |
+#define FRRES_TOO_MANY 0x06 |
+#define FRRES_CIR_OVERFLOW 0x07 /* Tx throughput has exceeded CIR */ |
+#define FRRES_BUFFER_OVERFLOW 0x08 |
+#define FRRES_MODEM_FAILURE 0x10 /* DCD and/or CTS dropped */ |
+#define FRRES_CHANNEL_DOWN 0x11 /* channel became inoperative */ |
+#define FRRES_CHANNEL_UP 0x12 /* channel became operative */ |
+#define FRRES_DLCI_CHANGE 0x13 /* DLCI status (or number) changed */ |
+#define FRRES_DLCI_MISMATCH 0x14 |
+#define FRRES_INVALID_CMD 0x1F /* invalid command */ |
+ |
+/* 'attr' field defines */ |
+#define FRATTR_ |
+ |
+/*---------------------------------------------------------------------------- |
+ * Frame relay mailbox. |
+ * This structure is located at offset FR50?_MBOX_OFFS into FR_MB_VECTOR. |
+ * For S502 it is also located at offset FR502_RXMB_OFFS into |
+ * FR502_RX_VECTOR. |
+ */ |
+typedef struct fr_mbox |
+{ |
+ unsigned char opflag PACKED; /* 00h: execution flag */ |
+ fr_cmd_t cmd PACKED; /* 01h: command block */ |
+ unsigned char data[1] PACKED; /* 10h: variable length data buffer */ |
+} fr_mbox_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * S502 frame relay status flags. |
+ * This structure is located at offset FR502_FLAG_OFFS into FR_MB_VECTOR. |
+ */ |
+typedef struct fr502_flags |
+{ |
+ unsigned char rsrv1[1] PACKED; /* 00h: */ |
+ unsigned char tx_ready PACKED; /* 01h: Tx buffer available */ |
+ unsigned char rx_ready PACKED; /* 02h: Rx frame available */ |
+ unsigned char event PACKED; /* 03h: asynchronous event */ |
+ unsigned char mstatus PACKED; /* 04h: modem status */ |
+ unsigned char rsrv2[8] PACKED; /* 05h: */ |
+ unsigned char iflag PACKED; /* 0Dh: interrupt flag */ |
+ unsigned char imask PACKED; /* 0Eh: interrupt mask */ |
+} fr502_flags_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * S508 frame relay status flags. |
+ * This structure is located at offset FR508_FLAG_OFFS into FR_MB_VECTOR. |
+ */ |
+typedef struct fr508_flags |
+{ |
+ unsigned char rsrv1[3] PACKED; /* 00h: reserved */ |
+ unsigned char event PACKED; /* 03h: asynchronous event */ |
+ unsigned char mstatus PACKED; /* 04h: modem status */ |
+ unsigned char rsrv2[11] PACKED; /* 05h: reserved */ |
+ unsigned char iflag PACKED; /* 10h: interrupt flag */ |
+ unsigned char imask PACKED; /* 11h: interrupt mask */ |
+ unsigned long tse_offs PACKED; /* 12h: Tx status element */ |
+ unsigned short dlci PACKED; /* 16h: DLCI NUMBER */ |
+} fr508_flags_t; |
+ |
+/* 'event' field defines */ |
+#define FR_EVENT_STATUS 0x01 /* channel status change */ |
+#define FR_EVENT_DLC_STATUS 0x02 /* DLC status change */ |
+#define FR_EVENT_BAD_DLCI 0x04 /* FSR included wrong DLCI */ |
+#define FR_EVENT_LINK_DOWN 0x40 /* DCD or CTS low */ |
+ |
+/* 'mstatus' field defines */ |
+#define FR_MDM_DCD 0x08 /* mdm_status: DCD */ |
+#define FR_MDM_CTS 0x20 /* mdm_status: CTS */ |
+ |
+/* 'iflag' & 'imask' fields defines */ |
+#define FR_INTR_RXRDY 0x01 /* Rx ready */ |
+#define FR_INTR_TXRDY 0x02 /* Tx ready */ |
+#define FR_INTR_MODEM 0x04 /* modem status change (DCD, CTS) */ |
+#define FR_INTR_READY 0x08 /* interface command completed */ |
+#define FR_INTR_DLC 0x10 /* DLC status change */ |
+#define FR_INTR_TIMER 0x20 /* millisecond timer */ |
+#define FR_INTR_TX_MULT_DLCIs 0x80 /* Tx interrupt on multiple DLCIs */ |
+ |
+ |
+/*---------------------------------------------------------------------------- |
+ * Receive Buffer Configuration Info. S508 only! |
+ * This structure is located at offset FR508_RXBC_OFFS into FR_MB_VECTOR. |
+ */ |
+typedef struct fr_buf_info |
+{ |
+ unsigned short rse_num PACKED; /* 00h: number of status elements */ |
+ unsigned long rse_base PACKED; /* 02h: receive status array base */ |
+ unsigned long rse_next PACKED; /* 06h: next status element */ |
+ unsigned long buf_base PACKED; /* 0Ah: rotational buffer base */ |
+ unsigned short reserved PACKED; /* 0Eh: */ |
+ unsigned long buf_top PACKED; /* 10h: rotational buffer top */ |
+} fr_buf_info_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * Buffer Status Element. S508 only! |
+ * Array of structures of this type is located at offset defined by the |
+ * 'rse_base' field of the frBufInfo_t structure into absolute adapter |
+ * memory address space. |
+ */ |
+typedef struct fr_rx_buf_ctl |
+{ |
+ unsigned char flag PACKED; /* 00h: ready flag */ |
+ unsigned short length PACKED; /* 01h: frame length */ |
+ unsigned short dlci PACKED; /* 03h: DLCI */ |
+ unsigned char attr PACKED; /* 05h: FECN/BECN/DE/CR */ |
+ unsigned short tmstamp PACKED; /* 06h: time stamp */ |
+ unsigned short rsrv[2] PACKED; /* 08h: */ |
+ unsigned long offset PACKED; /* 0Ch: buffer absolute address */ |
+} fr_rx_buf_ctl_t; |
+ |
+typedef struct fr_tx_buf_ctl |
+{ |
+ unsigned char flag PACKED; /* 00h: ready flag */ |
+ unsigned short rsrv0[2] PACKED; /* 01h: */ |
+ unsigned short length PACKED; /* 05h: frame length */ |
+ unsigned short dlci PACKED; /* 07h: DLCI */ |
+ unsigned char attr PACKED; /* 09h: FECN/BECN/DE/CR */ |
+ unsigned short rsrv1 PACKED; /* 0Ah: */ |
+ unsigned long offset PACKED; /* 0Ch: buffer absolute address */ |
+} fr_tx_buf_ctl_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * Global Configuration Block. Passed to FR_SET_CONFIG command when dlci == 0. |
+ */ |
+typedef struct fr_conf |
+{ |
+ unsigned short station PACKED; /* 00h: CPE/Node */ |
+ unsigned short options PACKED; /* 02h: configuration options */ |
+ unsigned short kbps PACKED; /* 04h: baud rate in kbps */ |
+ unsigned short port PACKED; /* 06h: RS-232/V.35 */ |
+ unsigned short mtu PACKED; /* 08h: max. transmit length */ |
+ unsigned short t391 PACKED; /* 0Ah: */ |
+ unsigned short t392 PACKED; /* 0Ch: */ |
+ unsigned short n391 PACKED; /* 0Eh: */ |
+ unsigned short n392 PACKED; /* 10h: */ |
+ unsigned short n393 PACKED; /* 12h: */ |
+ unsigned short cir_fwd PACKED; /* 14h: */ |
+ unsigned short bc_fwd PACKED; /* 16h: */ |
+ unsigned short be_fwd PACKED; /* 18h: */ |
+ unsigned short cir_bwd PACKED; /* 1Ah: */ |
+ unsigned short bc_bwd PACKED; /* 1Ch: */ |
+ unsigned short be_bwd PACKED; /* 1Eh: */ |
+ unsigned short dlci[0] PACKED; /* 20h: */ |
+} fr_conf_t; |
+ |
+/* 'station_type' defines */ |
+#define FRCFG_STATION_CPE 0 |
+#define FRCFG_STATION_NODE 1 |
+ |
+/* 'conf_flags' defines */ |
+#define FRCFG_IGNORE_TX_CIR 0x0001 |
+#define FRCFG_IGNORE_RX_CIR 0x0002 |
+#define FRCFG_DONT_RETRANSMIT 0x0004 |
+#define FRCFG_IGNORE_CBS 0x0008 |
+#define FRCFG_THROUGHPUT 0x0010 /* enable throughput calculation */ |
+#define FRCFG_DIRECT_RX 0x0080 /* enable direct receive buffer */ |
+#define FRCFG_AUTO_CONFIG 0x8000 /* enable auto DLCI configuration */ |
+ |
+/* 'baud_rate' defines */ |
+#define FRCFG_BAUD_1200 12 |
+#define FRCFG_BAUD_2400 24 |
+#define FRCFG_BAUD_4800 48 |
+#define FRCFG_BAUD_9600 96 |
+#define FRCFG_BAUD_19200 19 |
+#define FRCFG_BAUD_38400 38 |
+#define FRCFG_BAUD_56000 56 |
+#define FRCFG_BAUD_64000 64 |
+#define FRCFG_BAUD_128000 128 |
+ |
+/* 'port_mode' defines */ |
+#define FRCFG_MODE_EXT_CLK 0x0000 |
+#define FRCFG_MODE_INT_CLK 0x0001 |
+#define FRCFG_MODE_V35 0x0000 /* S508 only */ |
+#define FRCFG_MODE_RS232 0x0002 /* S508 only */ |
+ |
+/* defines for line tracing */ |
+ |
+/* the line trace status element presented by the frame relay code */ |
+typedef struct { |
+ unsigned char flag PACKED; /* ready flag */ |
+ unsigned short length PACKED; /* trace length */ |
+ unsigned char rsrv0[2] PACKED; /* reserved */ |
+ unsigned char attr PACKED; /* trace attributes */ |
+ unsigned short tmstamp PACKED; /* time stamp */ |
+ unsigned char rsrv1[4] PACKED; /* reserved */ |
+ unsigned long offset PACKED; /* buffer absolute address */ |
+} fr_trc_el_t; |
+ |
+typedef struct { |
+ unsigned char status PACKED; /* status flag */ |
+ unsigned char data_passed PACKED; /* 0 if no data passed, 1 if */ |
+ /* data passed */ |
+ unsigned short length PACKED; /* frame length */ |
+ unsigned short tmstamp PACKED; /* time stamp */ |
+} fpipemon_trc_hdr_t; |
+ |
+typedef struct { |
+ fpipemon_trc_hdr_t fpipemon_trc_hdr PACKED; |
+ unsigned char data[FR_MAX_NO_DATA_BYTES_IN_FRAME] PACKED; |
+} fpipemon_trc_t; |
+ |
+/* bit settings for the 'status' byte - note that bits 1, 2 and 3 are used */ |
+/* for returning the number of frames being passed to fpipemon */ |
+#define TRC_OUTGOING_FRM 0x01 |
+#define TRC_ABORT_ERROR 0x10 |
+#define TRC_CRC_ERROR 0x20 |
+#define TRC_OVERRUN_ERROR 0x40 |
+#define MORE_TRC_DATA 0x80 |
+ |
+#define MAX_FRMS_TRACED 0x07 |
+ |
+#define NO_TRC_ELEMENTS_OFF 0x9000 |
+#define BASE_TRC_ELEMENTS_OFF 0x9002 |
+#define TRC_ACTIVE 0x01 |
+#define FLUSH_TRC_BUFFERS 0x02 |
+#define FLUSH_TRC_STATISTICS 0x04 |
+#define TRC_SIGNALLING_FRMS 0x10 |
+#define TRC_INFO_FRMS 0x20 |
+#define ACTIVATE_TRC (TRC_ACTIVE | TRC_SIGNALLING_FRMS | TRC_INFO_FRMS) |
+#define RESET_TRC (FLUSH_TRC_BUFFERS | FLUSH_TRC_STATISTICS) |
+ |
+/*---------------------------------------------------------------------------- |
+ * Channel configuration. |
+ * This structure is passed to the FR_SET_CONFIG command when dlci != 0. |
+ */ |
+typedef struct fr_dlc_conf |
+{ |
+ unsigned short conf_flags PACKED; /* 00h: configuration bits */ |
+ unsigned short cir_fwd PACKED; /* 02h: */ |
+ unsigned short bc_fwd PACKED; /* 04h: */ |
+ unsigned short be_fwd PACKED; /* 06h: */ |
+ unsigned short cir_bwd PACKED; /* 08h: */ |
+ unsigned short bc_bwd PACKED; /* 0Ah: */ |
+ unsigned short be_bwd PACKED; /* 0Ch: */ |
+} fr_dlc_conf_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * S502 interrupt mode control block. |
+ * This structure is passed to the FR_SET_INTR_FLAGS and returned by the |
+ * FR_READ_INTR_FLAGS commands. |
+ */ |
+typedef struct fr502_intr_ctl |
+{ |
+ unsigned char mode PACKED; /* 00h: interrupt enable flags */ |
+ unsigned short tx_len PACKED; /* 01h: required Tx buffer size */ |
+} fr502_intr_ctl_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * S508 interrupt mode control block. |
+ * This structure is passed to the FR_SET_INTR_FLAGS and returned by the |
+ * FR_READ_INTR_FLAGS commands. |
+ */ |
+typedef struct fr508_intr_ctl |
+{ |
+ unsigned char mode PACKED; /* 00h: interrupt enable flags */ |
+ unsigned short tx_len PACKED; /* 01h: required Tx buffer size */ |
+ unsigned char irq PACKED; /* 03h: IRQ level to activate */ |
+ unsigned char flags PACKED; /* 04h: ?? */ |
+ unsigned short timeout PACKED; /* 05h: ms, for timer interrupt */ |
+} fr508_intr_ctl_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * Channel status. |
+ * This structure is returned by the FR_READ_STATUS command. |
+ */ |
+typedef struct fr_dlc_Status |
+{ |
+ unsigned char status PACKED; /* 00h: link/DLCI status */ |
+ struct |
+ { |
+ unsigned short dlci PACKED; /* 01h: DLCI number */ |
+ unsigned char status PACKED; /* 03h: DLCI status */ |
+ } circuit[1] PACKED; |
+} fr_dlc_status_t; |
+ |
+/* 'status' defines */ |
+#define FR_LINK_INOPER 0x00 /* for global status (DLCI == 0) */ |
+#define FR_LINK_OPER 0x01 |
+#define FR_DLCI_DELETED 0x01 /* for circuit status (DLCI != 0) */ |
+#define FR_DLCI_ACTIVE 0x02 |
+#define FR_DLCI_WAITING 0x04 |
+#define FR_DLCI_NEW 0x08 |
+#define FR_DLCI_REPORT 0x40 |
+ |
+/*---------------------------------------------------------------------------- |
+ * Global Statistics Block. |
+ * This structure is returned by the FR_READ_STATISTICS command when |
+ * dcli == 0. |
+ */ |
+typedef struct fr_link_stat |
+{ |
+ unsigned short rx_too_long PACKED; /* 00h: */ |
+ unsigned short rx_dropped PACKED; /* 02h: */ |
+ unsigned short rx_dropped2 PACKED; /* 04h: */ |
+ unsigned short rx_bad_dlci PACKED; /* 06h: */ |
+ unsigned short rx_bad_format PACKED; /* 08h: */ |
+ unsigned short retransmitted PACKED; /* 0Ah: */ |
+ unsigned short cpe_tx_FSE PACKED; /* 0Ch: */ |
+ unsigned short cpe_tx_LIV PACKED; /* 0Eh: */ |
+ unsigned short cpe_rx_FSR PACKED; /* 10h: */ |
+ unsigned short cpe_rx_LIV PACKED; /* 12h: */ |
+ unsigned short node_rx_FSE PACKED; /* 14h: */ |
+ unsigned short node_rx_LIV PACKED; /* 16h: */ |
+ unsigned short node_tx_FSR PACKED; /* 18h: */ |
+ unsigned short node_tx_LIV PACKED; /* 1Ah: */ |
+ unsigned short rx_ISF_err PACKED; /* 1Ch: */ |
+ unsigned short rx_unsolicited PACKED; /* 1Eh: */ |
+ unsigned short rx_SSN_err PACKED; /* 20h: */ |
+ unsigned short rx_RSN_err PACKED; /* 22h: */ |
+ unsigned short T391_timeouts PACKED; /* 24h: */ |
+ unsigned short T392_timeouts PACKED; /* 26h: */ |
+ unsigned short N392_reached PACKED; /* 28h: */ |
+ unsigned short cpe_SSN_RSN PACKED; /* 2Ah: */ |
+ unsigned short current_SSN PACKED; /* 2Ch: */ |
+ unsigned short current_RSN PACKED; /* 2Eh: */ |
+ unsigned short curreny_T391 PACKED; /* 30h: */ |
+ unsigned short current_T392 PACKED; /* 32h: */ |
+ unsigned short current_N392 PACKED; /* 34h: */ |
+ unsigned short current_N393 PACKED; /* 36h: */ |
+} fr_link_stat_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * DLCI statistics. |
+ * This structure is returned by the FR_READ_STATISTICS command when |
+ * dlci != 0. |
+ */ |
+typedef struct fr_dlci_stat |
+{ |
+ unsigned long tx_frames PACKED; /* 00h: */ |
+ unsigned long tx_bytes PACKED; /* 04h: */ |
+ unsigned long rx_frames PACKED; /* 08h: */ |
+ unsigned long rx_bytes PACKED; /* 0Ch: */ |
+ unsigned long rx_dropped PACKED; /* 10h: */ |
+ unsigned long rx_inactive PACKED; /* 14h: */ |
+ unsigned long rx_exceed_CIR PACKED; /* 18h: */ |
+ unsigned long rx_DE_set PACKED; /* 1Ch: */ |
+ unsigned long tx_throughput PACKED; /* 20h: */ |
+ unsigned long tx_calc_timer PACKED; /* 24h: */ |
+ unsigned long rx_throughput PACKED; /* 28h: */ |
+ unsigned long rx_calc_timer PACKED; /* 2Ch: */ |
+} fr_dlci_stat_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * Communications error statistics. |
+ * This structure is returned by the FR_READ_ERROR_STATS command. |
+ */ |
+typedef struct fr_comm_stat |
+{ |
+ unsigned char rx_overruns PACKED; /* 00h: */ |
+ unsigned char rx_bad_crc PACKED; /* 01h: */ |
+ unsigned char rx_aborts PACKED; /* 02h: */ |
+ unsigned char rx_too_long PACKED; /* 03h: */ |
+ unsigned char tx_aborts PACKED; /* 04h: */ |
+ unsigned char tx_underruns PACKED; /* 05h: */ |
+ unsigned char tx_missed_undr PACKED; /* 06h: */ |
+ unsigned char dcd_dropped PACKED; /* 07h: */ |
+ unsigned char cts_dropped PACKED; /* 08h: */ |
+} fr_comm_stat_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * Defines for the FR_ISSUE_IS_FRAME command. |
+ */ |
+#define FR_ISF_LVE 2 /* issue Link Verification Enquiry */ |
+#define FR_ISF_FSE 3 /* issue Full Status Enquiry */ |
+ |
+/*---------------------------------------------------------------------------- |
+ * Frame Relay ARP Header -- Used for Dynamic route creation with InvARP |
+ */ |
+ |
+typedef struct arphdr_fr |
+ { |
+ unsigned short ar_hrd PACKED; /* format of hardware addr */ |
+ unsigned short ar_pro PACKED; /* format of protocol addr */ |
+ unsigned char ar_hln PACKED; /* length of hardware addr */ |
+ unsigned char ar_pln PACKED; /* length of protocol addr */ |
+ unsigned short ar_op PACKED; /* ARP opcode */ |
+ unsigned short ar_sha PACKED; /* Sender DLCI addr 2 bytes */ |
+ unsigned long ar_sip PACKED; /* Sender IP addr 4 bytes */ |
+ unsigned short ar_tha PACKED; /* Target DLCI addr 2 bytes */ |
+ unsigned long ar_tip PACKED; /* Target IP addr 4 bytes */ |
+ } arphdr_fr_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * Frame Relay RFC 1490 SNAP Header -- Used to check for ARP packets |
+ */ |
+typedef struct arphdr_1490 |
+ { |
+ unsigned char control PACKED; /* UI, etc... */ |
+ unsigned char pad PACKED; /* Pad */ |
+ unsigned char NLPID PACKED; /* SNAP */ |
+ unsigned char OUI[3] PACKED; /* Ethertype, etc... */ |
+ unsigned short PID PACKED; /* ARP, IP, etc... */ |
+ } arphdr_1490_t; |
+ |
+/* UDP/IP packet (for UDP management) layout */ |
+ |
+/* The embedded control block for UDP mgmt |
+ This is essentially a mailbox structure, without the large data field */ |
+ |
+typedef struct { |
+ unsigned char opp_flag PACKED; /* the opp flag */ |
+ unsigned char command PACKED; /* command code */ |
+ unsigned short length PACKED; /* length of data buffer */ |
+ unsigned char result PACKED; /* return code */ |
+ unsigned short dlci PACKED; /* DLCI number */ |
+ unsigned char attr PACKED; /* FECN, BECN, DE and C/R bits */ |
+ unsigned short rxlost1 PACKED; /* frames discarded at int. level */ |
+ unsigned long rxlost2 PACKED; /* frames discarded at app. level */ |
+ unsigned char rsrv[2] PACKED; /* reserved for future use */ |
+} cblock_t; |
+ |
+ |
+/* UDP management packet layout (data area of ip packet) */ |
+ |
+typedef struct { |
+ unsigned char control PACKED; |
+ unsigned char NLPID PACKED; |
+} fr_encap_hdr_t; |
+ |
+typedef struct { |
+// fr_encap_hdr_t fr_encap_hdr PACKED; |
+ ip_pkt_t ip_pkt PACKED; |
+ udp_pkt_t udp_pkt PACKED; |
+ wp_mgmt_t wp_mgmt PACKED; |
+ cblock_t cblock PACKED; |
+ unsigned char data[4080] PACKED; |
+} fr_udp_pkt_t; |
+ |
+ |
+/* valid ip_protocol for UDP management */ |
+#define UDPMGMT_UDP_PROTOCOL 0x11 |
+ |
+#define UDPMGMT_FPIPE_SIGNATURE "FPIPE8ND" |
+#define UDPMGMT_DRVRSTATS_SIGNATURE "DRVSTATS" |
+ |
+/* values for request/reply byte */ |
+#define UDPMGMT_REQUEST 0x01 |
+#define UDPMGMT_REPLY 0x02 |
+#define UDP_OFFSET 12 |
+ |
+typedef struct { |
+ unsigned long if_send_entry; |
+ unsigned long if_send_skb_null; |
+ unsigned long if_send_broadcast; |
+ unsigned long if_send_multicast; |
+ unsigned long if_send_critical_ISR; |
+ unsigned long if_send_critical_non_ISR; |
+ unsigned long if_send_busy; |
+ unsigned long if_send_busy_timeout; |
+ unsigned long if_send_DRVSTATS_request; |
+ unsigned long if_send_FPIPE_request; |
+ unsigned long if_send_wan_disconnected; |
+ unsigned long if_send_dlci_disconnected; |
+ unsigned long if_send_no_bfrs; |
+ unsigned long if_send_adptr_bfrs_full; |
+ unsigned long if_send_bfrs_passed_to_adptr; |
+ unsigned long if_send_consec_send_fail; |
+} drvstats_if_send_t; |
+ |
+typedef struct { |
+ unsigned long rx_intr_no_socket; |
+ unsigned long rx_intr_dev_not_started; |
+ unsigned long rx_intr_DRVSTATS_request; |
+ unsigned long rx_intr_FPIPE_request; |
+ unsigned long rx_intr_bfr_not_passed_to_stack; |
+ unsigned long rx_intr_bfr_passed_to_stack; |
+ } drvstats_rx_intr_t; |
+ |
+typedef struct { |
+ unsigned long UDP_FPIPE_mgmt_kmalloc_err; |
+ unsigned long UDP_FPIPE_mgmt_direction_err; |
+ unsigned long UDP_FPIPE_mgmt_adptr_type_err; |
+ unsigned long UDP_FPIPE_mgmt_adptr_cmnd_OK; |
+ unsigned long UDP_FPIPE_mgmt_adptr_cmnd_timeout; |
+ unsigned long UDP_FPIPE_mgmt_adptr_send_passed; |
+ unsigned long UDP_FPIPE_mgmt_adptr_send_failed; |
+ unsigned long UDP_FPIPE_mgmt_not_passed_to_stack; |
+ unsigned long UDP_FPIPE_mgmt_passed_to_stack; |
+ unsigned long UDP_FPIPE_mgmt_no_socket; |
+ unsigned long UDP_DRVSTATS_mgmt_kmalloc_err; |
+ unsigned long UDP_DRVSTATS_mgmt_adptr_cmnd_OK; |
+ unsigned long UDP_DRVSTATS_mgmt_adptr_cmnd_timeout; |
+ unsigned long UDP_DRVSTATS_mgmt_adptr_send_passed; |
+ unsigned long UDP_DRVSTATS_mgmt_adptr_send_failed; |
+ unsigned long UDP_DRVSTATS_mgmt_not_passed_to_stack; |
+ unsigned long UDP_DRVSTATS_mgmt_passed_to_stack; |
+ unsigned long UDP_DRVSTATS_mgmt_no_socket; |
+} drvstats_gen_t; |
+ |
+typedef struct { |
+ unsigned char attr PACKED; |
+ unsigned short time_stamp PACKED; |
+ unsigned char reserved[13] PACKED; |
+} api_rx_hdr_t; |
+ |
+typedef struct { |
+ api_rx_hdr_t api_rx_hdr PACKED; |
+ void * data PACKED; |
+} api_rx_element_t; |
+ |
+typedef struct { |
+ unsigned char attr PACKED; |
+ unsigned char reserved[15] PACKED; |
+} api_tx_hdr_t; |
+ |
+typedef struct { |
+ api_tx_hdr_t api_tx_hdr PACKED; |
+ void * data PACKED; |
+} api_tx_element_t; |
+ |
+#ifdef _MSC_ |
+# pragma pack() |
+#endif |
+#endif /* _SDLA_FR_H */ |
+ |
Index: linuxc26/include/linux/dp83840.h |
=================================================================== |
--- linuxc26/include/linux/dp83840.h (nonexistent) |
+++ linuxc26/include/linux/dp83840.h (revision 422) |
@@ -0,0 +1,41 @@ |
+/* |
+ * linux/dp83840.h: definitions for DP83840 MII-compatible transceivers |
+ * |
+ * Copyright (C) 1996, 1999 David S. Miller (davem@redhat.com) |
+ */ |
+#ifndef __LINUX_DP83840_H |
+#define __LINUX_DP83840_H |
+ |
+#include <linux/mii.h> |
+ |
+/* |
+ * Data sheets and programming docs for the DP83840 are available at |
+ * from http://www.national.com/ |
+ * |
+ * The DP83840 is capable of both 10 and 100Mbps ethernet, in both |
+ * half and full duplex mode. It also supports auto negotiation. |
+ * |
+ * But.... THIS THING IS A PAIN IN THE ASS TO PROGRAM! |
+ * Debugging eeprom burnt code is more fun than programming this chip! |
+ */ |
+ |
+/* First, the MII register numbers (actually DP83840 register numbers). */ |
+#define MII_CSCONFIG 0x17 /* CS configuration */ |
+ |
+/* The Carrier Sense config register. */ |
+#define CSCONFIG_RESV1 0x0001 /* Unused... */ |
+#define CSCONFIG_LED4 0x0002 /* Pin for full-dplx LED4 */ |
+#define CSCONFIG_LED1 0x0004 /* Pin for conn-status LED1 */ |
+#define CSCONFIG_RESV2 0x0008 /* Unused... */ |
+#define CSCONFIG_TCVDISAB 0x0010 /* Turns off the transceiver */ |
+#define CSCONFIG_DFBYPASS 0x0020 /* Bypass disconnect function */ |
+#define CSCONFIG_GLFORCE 0x0040 /* Good link force for 100mbps */ |
+#define CSCONFIG_CLKTRISTATE 0x0080 /* Tristate 25m clock */ |
+#define CSCONFIG_RESV3 0x0700 /* Unused... */ |
+#define CSCONFIG_ENCODE 0x0800 /* 1=MLT-3, 0=binary */ |
+#define CSCONFIG_RENABLE 0x1000 /* Repeater mode enable */ |
+#define CSCONFIG_TCDISABLE 0x2000 /* Disable timeout counter */ |
+#define CSCONFIG_RESV4 0x4000 /* Unused... */ |
+#define CSCONFIG_NDISABLE 0x8000 /* Disable NRZI */ |
+ |
+#endif /* __LINUX_DP83840_H */ |
Index: linuxc26/include/linux/oprofile.h |
=================================================================== |
--- linuxc26/include/linux/oprofile.h (nonexistent) |
+++ linuxc26/include/linux/oprofile.h (revision 422) |
@@ -0,0 +1,106 @@ |
+/** |
+ * @file oprofile.h |
+ * |
+ * API for machine-specific interrupts to interface |
+ * to oprofile. |
+ * |
+ * @remark Copyright 2002 OProfile authors |
+ * @remark Read the file COPYING |
+ * |
+ * @author John Levon <levon@movementarian.org> |
+ */ |
+ |
+#ifndef OPROFILE_H |
+#define OPROFILE_H |
+ |
+#include <linux/types.h> |
+#include <linux/spinlock.h> |
+#include <asm/atomic.h> |
+ |
+struct super_block; |
+struct dentry; |
+struct file_operations; |
+ |
+/* Operations structure to be filled in */ |
+struct oprofile_operations { |
+ /* create any necessary configuration files in the oprofile fs. |
+ * Optional. */ |
+ int (*create_files)(struct super_block * sb, struct dentry * root); |
+ /* Do any necessary interrupt setup. Optional. */ |
+ int (*setup)(void); |
+ /* Do any necessary interrupt shutdown. Optional. */ |
+ void (*shutdown)(void); |
+ /* Start delivering interrupts. */ |
+ int (*start)(void); |
+ /* Stop delivering interrupts. */ |
+ void (*stop)(void); |
+ /* CPU identification string. */ |
+ char * cpu_type; |
+}; |
+ |
+/** |
+ * One-time initialisation. *ops must be set to a filled-in |
+ * operations structure. This is called even in timer interrupt |
+ * mode. |
+ * |
+ * Return 0 on success. |
+ */ |
+int oprofile_arch_init(struct oprofile_operations ** ops); |
+ |
+/** |
+ * One-time exit/cleanup for the arch. |
+ */ |
+void oprofile_arch_exit(void); |
+ |
+/** |
+ * Add a sample. This may be called from any context. Pass |
+ * smp_processor_id() as cpu. |
+ */ |
+extern void oprofile_add_sample(unsigned long eip, unsigned int is_kernel, |
+ unsigned long event, int cpu); |
+ |
+/** |
+ * Create a file of the given name as a child of the given root, with |
+ * the specified file operations. |
+ */ |
+int oprofilefs_create_file(struct super_block * sb, struct dentry * root, |
+ char const * name, struct file_operations * fops); |
+ |
+/** Create a file for read/write access to an unsigned long. */ |
+int oprofilefs_create_ulong(struct super_block * sb, struct dentry * root, |
+ char const * name, ulong * val); |
+ |
+/** Create a file for read-only access to an unsigned long. */ |
+int oprofilefs_create_ro_ulong(struct super_block * sb, struct dentry * root, |
+ char const * name, ulong * val); |
+ |
+/** Create a file for read-only access to an atomic_t. */ |
+int oprofilefs_create_ro_atomic(struct super_block * sb, struct dentry * root, |
+ char const * name, atomic_t * val); |
+ |
+/** create a directory */ |
+struct dentry * oprofilefs_mkdir(struct super_block * sb, struct dentry * root, |
+ char const * name); |
+ |
+/** |
+ * Write the given asciz string to the given user buffer @buf, updating *offset |
+ * appropriately. Returns bytes written or -EFAULT. |
+ */ |
+ssize_t oprofilefs_str_to_user(char const * str, char * buf, size_t count, loff_t * offset); |
+ |
+/** |
+ * Convert an unsigned long value into ASCII and copy it to the user buffer @buf, |
+ * updating *offset appropriately. Returns bytes written or -EFAULT. |
+ */ |
+ssize_t oprofilefs_ulong_to_user(unsigned long val, char * buf, size_t count, loff_t * offset); |
+ |
+/** |
+ * Read an ASCII string for a number from a userspace buffer and fill *val on success. |
+ * Returns 0 on success, < 0 on error. |
+ */ |
+int oprofilefs_ulong_from_user(unsigned long * val, char const * buf, size_t count); |
+ |
+/** lock for read/write safety */ |
+extern spinlock_t oprofilefs_lock; |
+ |
+#endif /* OPROFILE_H */ |
Index: linuxc26/include/linux/hfs_fs_i.h |
=================================================================== |
--- linuxc26/include/linux/hfs_fs_i.h (nonexistent) |
+++ linuxc26/include/linux/hfs_fs_i.h (revision 422) |
@@ -0,0 +1,45 @@ |
+/* |
+ * linux/include/linux/hfs_fs_i.h |
+ * |
+ * Copyright (C) 1995, 1996 Paul H. Hargrove |
+ * This file may be distributed under the terms of the GNU General Public License. |
+ * |
+ * This file defines the type (struct hfs_inode_info) and the two |
+ * subordinate types hfs_extent and hfs_file. |
+ */ |
+ |
+#ifndef _LINUX_HFS_FS_I_H |
+#define _LINUX_HFS_FS_I_H |
+ |
+/* |
+ * struct hfs_inode_info |
+ * |
+ * The HFS-specific part of a Linux (struct inode) |
+ */ |
+struct hfs_inode_info { |
+ int magic; /* A magic number */ |
+ |
+ loff_t mmu_private; |
+ struct hfs_cat_entry *entry; |
+ |
+ /* For a regular or header file */ |
+ struct hfs_fork *fork; |
+ int convert; |
+ |
+ /* For a directory */ |
+ ino_t file_type; |
+ char dir_size; |
+ |
+ /* For header files */ |
+ const struct hfs_hdr_layout *default_layout; |
+ struct hfs_hdr_layout *layout; |
+ |
+ /* to deal with localtime ugliness */ |
+ int tz_secondswest; |
+ |
+ /* for dentry cleanup */ |
+ void (*d_drop_op)(struct dentry *, const ino_t); |
+ struct inode vfs_inode; |
+}; |
+ |
+#endif |
Index: linuxc26/include/linux/udp.h |
=================================================================== |
--- linuxc26/include/linux/udp.h (nonexistent) |
+++ linuxc26/include/linux/udp.h (revision 422) |
@@ -0,0 +1,67 @@ |
+/* |
+ * 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 _LINUX_UDP_H |
+#define _LINUX_UDP_H |
+ |
+#include <linux/types.h> |
+ |
+struct udphdr { |
+ __u16 source; |
+ __u16 dest; |
+ __u16 len; |
+ __u16 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 2 /* draft-ietf-ipsec-udp-encaps-06 */ |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/config.h> |
+#include <net/sock.h> |
+#include <linux/ip.h> |
+ |
+struct udp_opt { |
+ int pending; /* Any pending frames ? */ |
+ unsigned int corkflag; /* Cork is required */ |
+ __u16 encap_type; /* Is this an Encapsulation socket? */ |
+ /* |
+ * Following member retains the infomation to create a UDP header |
+ * when the socket is uncorked. |
+ */ |
+ __u16 len; /* total length of pending frames */ |
+}; |
+ |
+/* WARNING: don't change the layout of the members in udp_sock! */ |
+struct udp_sock { |
+ struct sock sk; |
+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) |
+ struct ipv6_pinfo *pinet6; |
+#endif |
+ struct inet_opt inet; |
+ struct udp_opt udp; |
+}; |
+ |
+#define udp_sk(__sk) (&((struct udp_sock *)__sk)->udp) |
+ |
+#endif |
+ |
+#endif /* _LINUX_UDP_H */ |
Index: linuxc26/include/linux/threads.h |
=================================================================== |
--- linuxc26/include/linux/threads.h (nonexistent) |
+++ linuxc26/include/linux/threads.h (revision 422) |
@@ -0,0 +1,35 @@ |
+#ifndef _LINUX_THREADS_H |
+#define _LINUX_THREADS_H |
+ |
+#include <linux/config.h> |
+ |
+/* |
+ * The default limit for the nr of threads is now in |
+ * /proc/sys/kernel/threads-max. |
+ */ |
+ |
+/* |
+ * Maximum supported processors that can run under SMP. This value is |
+ * set via configure setting. The maximum is equal to the size of the |
+ * bitmasks used on that platform, i.e. 32 or 64. Setting this smaller |
+ * saves quite a bit of memory. |
+ */ |
+#ifdef CONFIG_SMP |
+#define NR_CPUS CONFIG_NR_CPUS |
+#else |
+#define NR_CPUS 1 |
+#endif |
+ |
+#define MIN_THREADS_LEFT_FOR_ROOT 4 |
+ |
+/* |
+ * This controls the default maximum pid allocated to a process |
+ */ |
+#define PID_MAX_DEFAULT 0x8000 |
+ |
+/* |
+ * A maximum of 4 million PIDs should be enough for a while: |
+ */ |
+#define PID_MAX_LIMIT (4*1024*1024) |
+ |
+#endif |
Index: linuxc26/include/linux/affs_fs_sb.h |
=================================================================== |
--- linuxc26/include/linux/affs_fs_sb.h (nonexistent) |
+++ linuxc26/include/linux/affs_fs_sb.h (revision 422) |
@@ -0,0 +1,58 @@ |
+#ifndef _AFFS_FS_SB |
+#define _AFFS_FS_SB |
+ |
+/* |
+ * super-block data in memory |
+ * |
+ * Block numbers are adjusted for their actual size |
+ * |
+ */ |
+ |
+struct affs_bm_info { |
+ u32 bm_key; /* Disk block number */ |
+ u32 bm_free; /* Free blocks in here */ |
+}; |
+ |
+struct affs_sb_info { |
+ int s_partition_size; /* Partition size in blocks. */ |
+ int s_reserved; /* Number of reserved blocks. */ |
+ //u32 s_blksize; /* Initial device blksize */ |
+ u32 s_data_blksize; /* size of the data block w/o header */ |
+ u32 s_root_block; /* FFS root block number. */ |
+ int s_hashsize; /* Size of hash table. */ |
+ unsigned long s_flags; /* See below. */ |
+ uid_t s_uid; /* uid to override */ |
+ gid_t s_gid; /* gid to override */ |
+ umode_t s_mode; /* mode to override */ |
+ struct buffer_head *s_root_bh; /* Cached root block. */ |
+ struct semaphore s_bmlock; /* Protects bitmap access. */ |
+ struct affs_bm_info *s_bitmap; /* Bitmap infos. */ |
+ u32 s_bmap_count; /* # of bitmap blocks. */ |
+ u32 s_bmap_bits; /* # of bits in one bitmap blocks */ |
+ u32 s_last_bmap; |
+ struct buffer_head *s_bmap_bh; |
+ char *s_prefix; /* Prefix for volumes and assigns. */ |
+ int s_prefix_len; /* Length of prefix. */ |
+ char s_volume[32]; /* Volume prefix for absolute symlinks. */ |
+}; |
+ |
+#define SF_INTL 0x0001 /* International filesystem. */ |
+#define SF_BM_VALID 0x0002 /* Bitmap is valid. */ |
+#define SF_IMMUTABLE 0x0004 /* Protection bits cannot be changed */ |
+#define SF_QUIET 0x0008 /* chmod errors will be not reported */ |
+#define SF_SETUID 0x0010 /* Ignore Amiga uid */ |
+#define SF_SETGID 0x0020 /* Ignore Amiga gid */ |
+#define SF_SETMODE 0x0040 /* Ignore Amiga protection bits */ |
+#define SF_MUFS 0x0100 /* Use MUFS uid/gid mapping */ |
+#define SF_OFS 0x0200 /* Old filesystem */ |
+#define SF_PREFIX 0x0400 /* Buffer for prefix is allocated */ |
+#define SF_VERBOSE 0x0800 /* Talk about fs when mounting */ |
+#define SF_READONLY 0x1000 /* Don't allow to remount rw */ |
+ |
+/* short cut to get to the affs specific sb data */ |
+static inline struct affs_sb_info *AFFS_SB(struct super_block *sb) |
+{ |
+ return sb->s_fs_info; |
+} |
+ |
+#endif |
Index: linuxc26/include/linux/video_decoder.h |
=================================================================== |
--- linuxc26/include/linux/video_decoder.h (nonexistent) |
+++ linuxc26/include/linux/video_decoder.h (revision 422) |
@@ -0,0 +1,37 @@ |
+#ifndef _LINUX_VIDEO_DECODER_H |
+#define _LINUX_VIDEO_DECODER_H |
+ |
+struct video_decoder_capability { /* this name is too long */ |
+ __u32 flags; |
+#define VIDEO_DECODER_PAL 1 /* can decode PAL signal */ |
+#define VIDEO_DECODER_NTSC 2 /* can decode NTSC */ |
+#define VIDEO_DECODER_SECAM 4 /* can decode SECAM */ |
+#define VIDEO_DECODER_AUTO 8 /* can autosense norm */ |
+#define VIDEO_DECODER_CCIR 16 /* CCIR-601 pixel rate (720 pixels per line) instead of square pixel rate */ |
+ int inputs; /* number of inputs */ |
+ int outputs; /* number of outputs */ |
+}; |
+ |
+/* |
+DECODER_GET_STATUS returns the following flags. The only one you need is |
+DECODER_STATUS_GOOD, the others are just nice things to know. |
+*/ |
+#define DECODER_STATUS_GOOD 1 /* receiving acceptable input */ |
+#define DECODER_STATUS_COLOR 2 /* receiving color information */ |
+#define DECODER_STATUS_PAL 4 /* auto detected */ |
+#define DECODER_STATUS_NTSC 8 /* auto detected */ |
+#define DECODER_STATUS_SECAM 16 /* auto detected */ |
+ |
+ |
+#define DECODER_GET_CAPABILITIES _IOR('d', 1, struct video_decoder_capability) |
+#define DECODER_GET_STATUS _IOR('d', 2, int) |
+#define DECODER_SET_NORM _IOW('d', 3, int) |
+#define DECODER_SET_INPUT _IOW('d', 4, int) /* 0 <= input < #inputs */ |
+#define DECODER_SET_OUTPUT _IOW('d', 5, int) /* 0 <= output < #outputs */ |
+#define DECODER_ENABLE_OUTPUT _IOW('d', 6, int) /* boolean output enable control */ |
+#define DECODER_SET_PICTURE _IOW('d', 7, struct video_picture) |
+ |
+#define DECODER_DUMP _IO('d', 192) /* debug hook */ |
+ |
+ |
+#endif |
Index: linuxc26/include/linux/i8k.h |
=================================================================== |
--- linuxc26/include/linux/i8k.h (nonexistent) |
+++ linuxc26/include/linux/i8k.h (revision 422) |
@@ -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 |
Index: linuxc26/include/linux/dm-ioctl-v1.h |
=================================================================== |
--- linuxc26/include/linux/dm-ioctl-v1.h (nonexistent) |
+++ linuxc26/include/linux/dm-ioctl-v1.h (revision 422) |
@@ -0,0 +1,149 @@ |
+/* |
+ * Copyright (C) 2001 Sistina Software (UK) Limited. |
+ * |
+ * This file is released under the LGPL. |
+ */ |
+ |
+#ifndef _LINUX_DM_IOCTL_V1_H |
+#define _LINUX_DM_IOCTL_V1_H |
+ |
+#include <linux/types.h> |
+ |
+#define DM_DIR "mapper" /* Slashes not supported */ |
+#define DM_MAX_TYPE_NAME 16 |
+#define DM_NAME_LEN 128 |
+#define DM_UUID_LEN 129 |
+ |
+/* |
+ * Implements a traditional ioctl interface to the device mapper. |
+ */ |
+ |
+/* |
+ * 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. |
+ */ |
+ uint32_t version[3]; /* in/out */ |
+ uint32_t data_size; /* total size of data passed in |
+ * including this struct */ |
+ |
+ uint32_t data_start; /* offset to start of data |
+ * relative to start of this struct */ |
+ |
+ uint32_t target_count; /* in/out */ |
+ uint32_t open_count; /* out */ |
+ uint32_t flags; /* in/out */ |
+ |
+ __kernel_old_dev_t dev; /* in/out */ |
+ |
+ char name[DM_NAME_LEN]; /* device name */ |
+ char uuid[DM_UUID_LEN]; /* unique identifier for |
+ * the block device */ |
+}; |
+ |
+/* |
+ * Used to specify tables. These structures appear after the |
+ * dm_ioctl. |
+ */ |
+struct dm_target_spec { |
+ int32_t status; /* used when reading from kernel only */ |
+ uint64_t sector_start; |
+ uint32_t length; |
+ |
+ /* |
+ * Offset in bytes (from the start of this struct) to |
+ * next target_spec. |
+ */ |
+ uint32_t 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 { |
+ uint32_t count; |
+ |
+ __kernel_old_dev_t dev[0]; /* out */ |
+}; |
+ |
+/* |
+ * 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, |
+ |
+ /* device level cmds */ |
+ DM_DEV_CREATE_CMD, |
+ DM_DEV_REMOVE_CMD, |
+ DM_DEV_RELOAD_CMD, |
+ DM_DEV_RENAME_CMD, |
+ DM_DEV_SUSPEND_CMD, |
+ DM_DEV_DEPS_CMD, |
+ DM_DEV_STATUS_CMD, |
+ |
+ /* target level cmds */ |
+ DM_TARGET_STATUS_CMD, |
+ DM_TARGET_WAIT_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_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_RELOAD _IOWR(DM_IOCTL, DM_DEV_RELOAD_CMD, struct dm_ioctl) |
+#define DM_DEV_SUSPEND _IOWR(DM_IOCTL, DM_DEV_SUSPEND_CMD, struct dm_ioctl) |
+#define DM_DEV_RENAME _IOWR(DM_IOCTL, DM_DEV_RENAME_CMD, struct dm_ioctl) |
+#define DM_DEV_DEPS _IOWR(DM_IOCTL, DM_DEV_DEPS_CMD, struct dm_ioctl) |
+#define DM_DEV_STATUS _IOWR(DM_IOCTL, DM_DEV_STATUS_CMD, struct dm_ioctl) |
+ |
+#define DM_TARGET_STATUS _IOWR(DM_IOCTL, DM_TARGET_STATUS_CMD, struct dm_ioctl) |
+#define DM_TARGET_WAIT _IOWR(DM_IOCTL, DM_TARGET_WAIT_CMD, struct dm_ioctl) |
+ |
+#define DM_VERSION_MAJOR 1 |
+#define DM_VERSION_MINOR 0 |
+#define DM_VERSION_PATCHLEVEL 6 |
+#define DM_VERSION_EXTRA "-ioctl (2002-10-15)" |
+ |
+/* Status bits */ |
+#define DM_READONLY_FLAG 0x00000001 |
+#define DM_SUSPEND_FLAG 0x00000002 |
+#define DM_EXISTS_FLAG 0x00000004 |
+#define DM_PERSISTENT_DEV_FLAG 0x00000008 |
+ |
+/* |
+ * Flag passed into ioctl STATUS command to get table information |
+ * rather than current status. |
+ */ |
+#define DM_STATUS_TABLE_FLAG 0x00000010 |
+ |
+#endif /* _LINUX_DM_IOCTL_H */ |
Index: linuxc26/include/linux/kmalloc_sizes.h |
=================================================================== |
--- linuxc26/include/linux/kmalloc_sizes.h (nonexistent) |
+++ linuxc26/include/linux/kmalloc_sizes.h (revision 422) |
@@ -0,0 +1,33 @@ |
+#if (PAGE_SIZE == 4096) |
+ CACHE(32) |
+#endif |
+ CACHE(64) |
+#if L1_CACHE_BYTES < 64 |
+ CACHE(96) |
+#endif |
+ CACHE(128) |
+#if L1_CACHE_BYTES < 128 |
+ CACHE(192) |
+#endif |
+ CACHE(256) |
+ CACHE(512) |
+ CACHE(1024) |
+ CACHE(2048) |
+ CACHE(4096) |
+ CACHE(8192) |
+ CACHE(16384) |
+ CACHE(32768) |
+ CACHE(65536) |
+ CACHE(131072) |
+#ifndef CONFIG_MMU |
+ CACHE(262144) |
+ CACHE(524288) |
+ CACHE(1048576) |
+#ifdef CONFIG_LARGE_ALLOCS |
+ CACHE(2097152) |
+ CACHE(4194304) |
+ CACHE(8388608) |
+ CACHE(16777216) |
+ CACHE(33554432) |
+#endif /* CONFIG_LARGE_ALLOCS */ |
+#endif /* CONFIG_MMU */ |
Index: linuxc26/include/linux/sdladrv.h |
=================================================================== |
--- linuxc26/include/linux/sdladrv.h (nonexistent) |
+++ linuxc26/include/linux/sdladrv.h (revision 422) |
@@ -0,0 +1,70 @@ |
+/***************************************************************************** |
+* sdladrv.h SDLA Support Module. Kernel API Definitions. |
+* |
+* Author: Gideon Hack |
+* |
+* 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. |
+* ============================================================================ |
+* Jun 02, 1999 Gideon Hack Added support for the S514 PCI adapter. |
+* Dec 11, 1996 Gene Kozin Complete overhaul. |
+* Oct 17, 1996 Gene Kozin Minor bug fixes. |
+* Jun 12, 1996 Gene Kozin Added support for S503 card. |
+* Dec 06, 1995 Gene Kozin Initial version. |
+*****************************************************************************/ |
+#ifndef _SDLADRV_H |
+#define _SDLADRV_H |
+ |
+ |
+#define SDLA_MAXIORANGE 4 /* maximum I/O port range */ |
+#define SDLA_WINDOWSIZE 0x2000 /* default dual-port memory window size */ |
+/****** Data Structures *****************************************************/ |
+ |
+/*---------------------------------------------------------------------------- |
+ * Adapter hardware configuration. Pointer to this structure is passed to all |
+ * APIs. |
+ */ |
+typedef struct sdlahw |
+{ |
+ unsigned type; /* adapter type */ |
+ unsigned fwid; /* firmware ID */ |
+ unsigned port; /* adapter I/O port base */ |
+ int irq; /* interrupt request level */ |
+ char S514_cpu_no[1]; /* PCI CPU Number */ |
+ unsigned char S514_slot_no; /* PCI Slot Number */ |
+ char auto_pci_cfg; /* Autodetect PCI Slot */ |
+ struct pci_dev *pci_dev; /* PCI device */ |
+ void * dpmbase; /* dual-port memory base */ |
+ unsigned dpmsize; /* dual-port memory size */ |
+ unsigned pclk; /* CPU clock rate, kHz */ |
+ unsigned long memory; /* memory size */ |
+ unsigned long vector; /* local offset of the DPM window */ |
+ unsigned io_range; /* I/O port range */ |
+ unsigned char regs[SDLA_MAXIORANGE]; /* was written to registers */ |
+ unsigned reserved[5]; |
+} sdlahw_t; |
+ |
+/****** Function Prototypes *************************************************/ |
+ |
+extern int sdla_setup (sdlahw_t* hw, void* sfm, unsigned len); |
+extern int sdla_down (sdlahw_t* hw); |
+extern int sdla_inten (sdlahw_t* hw); |
+extern int sdla_intde (sdlahw_t* hw); |
+extern int sdla_intack (sdlahw_t* hw); |
+extern void S514_intack (sdlahw_t* hw, u32 int_status); |
+extern void read_S514_int_stat (sdlahw_t* hw, u32* int_status); |
+extern int sdla_intr (sdlahw_t* hw); |
+extern int sdla_mapmem (sdlahw_t* hw, unsigned long addr); |
+extern int sdla_peek (sdlahw_t* hw, unsigned long addr, void* buf, |
+ unsigned len); |
+extern int sdla_poke (sdlahw_t* hw, unsigned long addr, void* buf, |
+ unsigned len); |
+extern int sdla_exec (void* opflag); |
+ |
+extern unsigned wanpipe_hw_probe(void); |
+ |
+#endif /* _SDLADRV_H */ |
Index: linuxc26/include/linux/sdla_ppp.h |
=================================================================== |
--- linuxc26/include/linux/sdla_ppp.h (nonexistent) |
+++ linuxc26/include/linux/sdla_ppp.h (revision 422) |
@@ -0,0 +1,575 @@ |
+/***************************************************************************** |
+* sdla_ppp.h Sangoma PPP firmware API definitions. |
+* |
+* Author: Nenad Corbic <ncorbic@sangoma.com> |
+* |
+* Copyright: (c) 1995-1997 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. |
+* ============================================================================ |
+* Feb 24, 2000 Nenad Corbic v2.1.2 |
+* Jan 06, 1997 Gene Kozin v2.0 |
+* Apr 11, 1996 Gene Kozin Initial version. |
+*****************************************************************************/ |
+#ifndef _SDLA_PPP_H |
+#define _SDLA_PPP_H |
+ |
+/*---------------------------------------------------------------------------- |
+ * Notes: |
+ * ------ |
+ * 1. All structures defined in this file are byte-alined. |
+ * |
+ * Compiler Platform |
+ * -------- -------- |
+ * GNU C Linux |
+ */ |
+ |
+#ifndef PACKED |
+# define PACKED __attribute__((packed)) |
+#endif /* PACKED */ |
+ |
+/* Adapter memory layout and important constants */ |
+#define PPP508_MB_VECT 0xE000 /* mailbox window vector */ |
+#define PPP508_MB_OFFS 0 /* mailbox offset */ |
+#define PPP508_FLG_OFFS 0x1000 /* status flags offset */ |
+#define PPP508_BUF_OFFS 0x1100 /* buffer info block offset */ |
+#define PPP514_MB_OFFS 0xE000 /* mailbox offset */ |
+#define PPP514_FLG_OFFS 0xF000 /* status flags offset */ |
+#define PPP514_BUF_OFFS 0xF100 /* buffer info block offset */ |
+ |
+#define PPP_MAX_DATA 1008 /* command block data buffer length */ |
+ |
+/****** Data Structures *****************************************************/ |
+ |
+/*---------------------------------------------------------------------------- |
+ * PPP Command Block. |
+ */ |
+typedef struct ppp_cmd{ |
+ unsigned char command PACKED; /* command code */ |
+ unsigned short length PACKED; /* length of data buffer */ |
+ unsigned char result PACKED; /* return code */ |
+ unsigned char rsrv[11] PACKED; /* reserved for future use */ |
+} ppp_cmd_t; |
+ |
+typedef struct cblock{ |
+ unsigned char opp_flag PACKED; |
+ unsigned char command PACKED; /* command code */ |
+ unsigned short length PACKED; /* length of data buffer */ |
+ unsigned char result PACKED; /* return code */ |
+ unsigned char rsrv[11] PACKED; /* reserved for future use */ |
+} cblock_t; |
+ |
+typedef struct ppp_udp_pkt{ |
+ ip_pkt_t ip_pkt PACKED; |
+ udp_pkt_t udp_pkt PACKED; |
+ wp_mgmt_t wp_mgmt PACKED; |
+ cblock_t cblock PACKED; |
+ unsigned char data[MAX_LGTH_UDP_MGNT_PKT] PACKED; |
+} ppp_udp_pkt_t; |
+ |
+typedef struct { |
+ unsigned char status PACKED; |
+ unsigned char data_avail PACKED; |
+ unsigned short real_length PACKED; |
+ unsigned short time_stamp PACKED; |
+ unsigned char data[1] PACKED; |
+} trace_pkt_t; |
+ |
+ |
+typedef struct { |
+ unsigned char opp_flag PACKED; |
+ unsigned char trace_type PACKED; |
+ unsigned short trace_length PACKED; |
+ unsigned short trace_data_ptr PACKED; |
+ unsigned short trace_time_stamp PACKED; |
+} trace_element_t; |
+ |
+/* 'command' field defines */ |
+#define PPP_READ_CODE_VERSION 0x10 /* configuration commands */ |
+#define PPP_SET_CONFIG 0x05 |
+#define PPP_READ_CONFIG 0x06 |
+#define PPP_SET_INTR_FLAGS 0x20 |
+#define PPP_READ_INTR_FLAGS 0x21 |
+#define PPP_SET_INBOUND_AUTH 0x30 |
+#define PPP_SET_OUTBOUND_AUTH 0x31 |
+#define PPP_GET_CONNECTION_INFO 0x32 |
+ |
+#define PPP_COMM_ENABLE 0x03 /* operational commands */ |
+#define PPP_COMM_DISABLE 0x04 |
+#define PPP_SEND_SIGN_FRAME 0x23 |
+#define PPP_READ_SIGN_RESPONSE 0x24 |
+#define PPP_DATALINE_MONITOR 0x33 |
+ |
+#define PPP_READ_STATISTICS 0x07 /* statistics commands */ |
+#define PPP_FLUSH_STATISTICS 0x08 |
+#define PPP_READ_ERROR_STATS 0x09 |
+#define PPP_FLUSH_ERROR_STATS 0x0A |
+#define PPP_READ_PACKET_STATS 0x12 |
+#define PPP_FLUSH_PACKET_STATS 0x13 |
+#define PPP_READ_LCP_STATS 0x14 |
+#define PPP_FLUSH_LCP_STATS 0x15 |
+#define PPP_READ_LPBK_STATS 0x16 |
+#define PPP_FLUSH_LPBK_STATS 0x17 |
+#define PPP_READ_IPCP_STATS 0x18 |
+#define PPP_FLUSH_IPCP_STATS 0x19 |
+#define PPP_READ_IPXCP_STATS 0x1A |
+#define PPP_FLUSH_IPXCP_STATS 0x1B |
+#define PPP_READ_PAP_STATS 0x1C |
+#define PPP_FLUSH_PAP_STATS 0x1D |
+#define PPP_READ_CHAP_STATS 0x1E |
+#define PPP_FLUSH_CHAP_STATS 0x1F |
+ |
+/* 'result' field defines */ |
+#define PPPRES_OK 0x00 /* command executed successfully */ |
+#define PPPRES_INVALID_STATE 0x09 /* invalid command in this context */ |
+ |
+/*---------------------------------------------------------------------------- |
+ * PPP Mailbox. |
+ * This structure is located at offset PPP???_MB_OFFS into PPP???_MB_VECT |
+ */ |
+typedef struct ppp_mbox |
+{ |
+ unsigned char flag PACKED; /* 00h: command execution flag */ |
+ ppp_cmd_t cmd PACKED; /* 01h: command block */ |
+ unsigned char data[1] PACKED; /* 10h: variable length data buffer */ |
+} ppp_mbox_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * PPP Status Flags. |
+ * This structure is located at offset PPP???_FLG_OFFS into |
+ * PPP???_MB_VECT. |
+ */ |
+typedef struct ppp_flags |
+{ |
+ unsigned char iflag PACKED; /* 00: interrupt flag */ |
+ unsigned char imask PACKED; /* 01: interrupt mask */ |
+ unsigned char resrv PACKED; |
+ unsigned char mstatus PACKED; /* 03: modem status */ |
+ unsigned char lcp_state PACKED; /* 04: LCP state */ |
+ unsigned char ppp_phase PACKED; /* 05: PPP phase */ |
+ unsigned char ip_state PACKED; /* 06: IPCP state */ |
+ unsigned char ipx_state PACKED; /* 07: IPXCP state */ |
+ unsigned char pap_state PACKED; /* 08: PAP state */ |
+ unsigned char chap_state PACKED; /* 09: CHAP state */ |
+ unsigned short disc_cause PACKED; /* 0A: disconnection cause */ |
+} ppp_flags_t; |
+ |
+/* 'iflag' defines */ |
+#define PPP_INTR_RXRDY 0x01 /* Rx ready */ |
+#define PPP_INTR_TXRDY 0x02 /* Tx ready */ |
+#define PPP_INTR_MODEM 0x04 /* modem status change (DCD, CTS) */ |
+#define PPP_INTR_CMD 0x08 /* interface command completed */ |
+#define PPP_INTR_DISC 0x10 /* data link disconnected */ |
+#define PPP_INTR_OPEN 0x20 /* data link open */ |
+#define PPP_INTR_DROP_DTR 0x40 /* DTR drop timeout expired */ |
+#define PPP_INTR_TIMER 0x80 /* timer interrupt */ |
+ |
+ |
+/* 'mstatus' defines */ |
+#define PPP_MDM_DCD 0x08 /* mdm_status: DCD */ |
+#define PPP_MDM_CTS 0x20 /* mdm_status: CTS */ |
+ |
+/* 'disc_cause' defines */ |
+#define PPP_LOCAL_TERMINATION 0x0001 /* Local Request by PPP termination phase */ |
+#define PPP_DCD_CTS_DROP 0x0002 /* DCD and/or CTS dropped. Link down */ |
+#define PPP_REMOTE_TERMINATION 0x0800 /* Remote Request by PPP termination phase */ |
+ |
+/* 'misc_config_bits' defines */ |
+#define DONT_RE_TX_ABORTED_I_FRAMES 0x01 |
+#define TX_FRM_BYTE_COUNT_STATS 0x02 |
+#define RX_FRM_BYTE_COUNT_STATS 0x04 |
+#define TIME_STAMP_IN_RX_FRAMES 0x08 |
+#define NON_STD_ADPTR_FREQ 0x10 |
+#define INTERFACE_LEVEL_RS232 0x20 |
+#define AUTO_LINK_RECOVERY 0x100 |
+#define DONT_TERMINATE_LNK_MAX_CONFIG 0x200 |
+ |
+/* 'authentication options' defines */ |
+#define NO_AUTHENTICATION 0x00 |
+#define INBOUND_AUTH 0x80 |
+#define PAP_AUTH 0x01 |
+#define CHAP_AUTH 0x02 |
+ |
+/* 'ip options' defines */ |
+#define L_AND_R_IP_NO_ASSIG 0x00 |
+#define L_IP_LOCAL_ASSIG 0x01 |
+#define L_IP_REMOTE_ASSIG 0x02 |
+#define R_IP_LOCAL_ASSIG 0x04 |
+#define R_IP_REMOTE_ASSIG 0x08 |
+#define ENABLE_IP 0x80 |
+ |
+/* 'ipx options' defines */ |
+#define ROUTING_PROT_DEFAULT 0x20 |
+#define ENABLE_IPX 0x80 |
+#define DISABLE_IPX 0x00 |
+ |
+/*---------------------------------------------------------------------------- |
+ * PPP Buffer Info. |
+ * This structure is located at offset PPP508_BUF_OFFS into |
+ * PPP508_MB_VECT. |
+ */ |
+typedef struct ppp508_buf_info |
+{ |
+ unsigned short txb_num PACKED; /* 00: number of transmit buffers */ |
+ unsigned long txb_ptr PACKED; /* 02: pointer to the buffer ctl. */ |
+ unsigned long txb_nxt PACKED; |
+ unsigned char rsrv1[22] PACKED; |
+ unsigned short rxb_num PACKED; /* 20: number of receive buffers */ |
+ unsigned long rxb_ptr PACKED; /* 22: pointer to the buffer ctl. */ |
+ unsigned long rxb1_ptr PACKED; /* 26: pointer to the first buf.ctl. */ |
+ unsigned long rxb_base PACKED; /* 2A: pointer to the buffer base */ |
+ unsigned char rsrv2[2] PACKED; |
+ unsigned long rxb_end PACKED; /* 30: pointer to the buffer end */ |
+} ppp508_buf_info_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * Transmit/Receive Buffer Control Block. |
+ */ |
+typedef struct ppp_buf_ctl |
+{ |
+ unsigned char flag PACKED; /* 00: 'buffer ready' flag */ |
+ unsigned short length PACKED; /* 01: length of data */ |
+ unsigned char reserved1[1] PACKED; /* 03: */ |
+ unsigned char proto PACKED; /* 04: protocol */ |
+ unsigned short timestamp PACKED; /* 05: time stamp (Rx only) */ |
+ unsigned char reserved2[5] PACKED; /* 07: */ |
+ union |
+ { |
+ unsigned short o_p[2]; /* 1C: buffer offset & page (S502) */ |
+ unsigned long ptr; /* 1C: buffer pointer (S508) */ |
+ } buf PACKED; |
+} ppp_buf_ctl_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * S508 Adapter Configuration Block (passed to the PPP_SET_CONFIG command). |
+ */ |
+typedef struct ppp508_conf |
+{ |
+ unsigned long line_speed PACKED; /* 00: baud rate, bps */ |
+ unsigned short txbuf_percent PACKED; /* 04: % of Tx buffer */ |
+ unsigned short conf_flags PACKED; /* 06: configuration bits */ |
+ unsigned short mtu_local PACKED; /* 08: local MTU */ |
+ unsigned short mtu_remote PACKED; /* 0A: remote MTU */ |
+ unsigned short restart_tmr PACKED; /* 0C: restart timer */ |
+ unsigned short auth_rsrt_tmr PACKED; /* 0E: authentication timer */ |
+ unsigned short auth_wait_tmr PACKED; /* 10: authentication timer */ |
+ unsigned short mdm_fail_tmr PACKED; /* 12: modem failure timer */ |
+ unsigned short dtr_drop_tmr PACKED; /* 14: DTR drop timer */ |
+ unsigned short connect_tmout PACKED; /* 16: connection timeout */ |
+ unsigned short conf_retry PACKED; /* 18: max. retry */ |
+ unsigned short term_retry PACKED; /* 1A: max. retry */ |
+ unsigned short fail_retry PACKED; /* 1C: max. retry */ |
+ unsigned short auth_retry PACKED; /* 1E: max. retry */ |
+ unsigned char auth_options PACKED; /* 20: authentication opt. */ |
+ unsigned char ip_options PACKED; /* 21: IP options */ |
+ unsigned long ip_local PACKED; /* 22: local IP address */ |
+ unsigned long ip_remote PACKED; /* 26: remote IP address */ |
+ unsigned char ipx_options PACKED; /* 2A: IPX options */ |
+ unsigned char ipx_netno[4] PACKED; /* 2B: IPX net number */ |
+ unsigned char ipx_local[6] PACKED; /* 2F: local IPX node number*/ |
+ unsigned char ipx_remote[6] PACKED; /* 35: remote IPX node num.*/ |
+ unsigned char ipx_router[48] PACKED; /* 3B: IPX router name*/ |
+ unsigned long alt_cpu_clock PACKED; /* 6B: */ |
+} ppp508_conf_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * S508 Adapter Read Connection Information Block |
+ * Returned by the PPP_GET_CONNECTION_INFO command |
+ */ |
+typedef struct ppp508_connect_info |
+{ |
+ unsigned short mru PACKED; /* 00-01 Remote Max Rec' Unit */ |
+ unsigned char ip_options PACKED; /* 02: Negotiated ip options */ |
+ unsigned long ip_local PACKED; /* 03-06: local IP address */ |
+ unsigned long ip_remote PACKED; /* 07-0A: remote IP address */ |
+ unsigned char ipx_options PACKED; /* 0B: Negotiated ipx options */ |
+ unsigned char ipx_netno[4] PACKED; /* 0C-0F: IPX net number */ |
+ unsigned char ipx_local[6] PACKED; /* 10-1F: local IPX node # */ |
+ unsigned char ipx_remote[6] PACKED; /* 16-1B: remote IPX node # */ |
+ unsigned char ipx_router[48] PACKED; /* 1C-4B: IPX router name */ |
+ unsigned char auth_status PACKED; /* 4C: Authentication Status */ |
+ unsigned char inbd_auth_peerID[1] PACKED; /* 4D: variable length inbound authenticated peer ID */ |
+} ppp508_connect_info_t; |
+ |
+/* 'line_speed' field */ |
+#define PPP_BITRATE_1200 0x01 |
+#define PPP_BITRATE_2400 0x02 |
+#define PPP_BITRATE_4800 0x03 |
+#define PPP_BITRATE_9600 0x04 |
+#define PPP_BITRATE_19200 0x05 |
+#define PPP_BITRATE_38400 0x06 |
+#define PPP_BITRATE_45000 0x07 |
+#define PPP_BITRATE_56000 0x08 |
+#define PPP_BITRATE_64000 0x09 |
+#define PPP_BITRATE_74000 0x0A |
+#define PPP_BITRATE_112000 0x0B |
+#define PPP_BITRATE_128000 0x0C |
+#define PPP_BITRATE_156000 0x0D |
+ |
+/* Defines for the 'conf_flags' field */ |
+#define PPP_IGNORE_TX_ABORT 0x01 /* don't re-transmit aborted frames */ |
+#define PPP_ENABLE_TX_STATS 0x02 /* enable Tx statistics */ |
+#define PPP_ENABLE_RX_STATS 0x04 /* enable Rx statistics */ |
+#define PPP_ENABLE_TIMESTAMP 0x08 /* enable timestamp */ |
+ |
+/* 'ip_options' defines */ |
+#define PPP_LOCAL_IP_LOCAL 0x01 |
+#define PPP_LOCAL_IP_REMOTE 0x02 |
+#define PPP_REMOTE_IP_LOCAL 0x04 |
+#define PPP_REMOTE_IP_REMOTE 0x08 |
+ |
+/* 'ipx_options' defines */ |
+#define PPP_REMOTE_IPX_NETNO 0x01 |
+#define PPP_REMOTE_IPX_LOCAL 0x02 |
+#define PPP_REMOTE_IPX_REMOTE 0x04 |
+#define PPP_IPX_ROUTE_RIP_SAP 0x08 |
+#define PPP_IPX_ROUTE_NLSP 0x10 |
+#define PPP_IPX_ROUTE_DEFAULT 0x20 |
+#define PPP_IPX_CONF_COMPLETE 0x40 |
+#define PPP_IPX_ENABLE 0x80 |
+ |
+/*---------------------------------------------------------------------------- |
+ * S508 Adapter Configuration Block (returned by the PPP_READ_CONFIG command). |
+ */ |
+typedef struct ppp508_get_conf |
+{ |
+ unsigned long bps PACKED; /* 00: baud rate, bps */ |
+ ppp508_conf_t conf PACKED; /* 04: requested config. */ |
+ unsigned short txb_num PACKED; /* 6F: number of Tx buffers */ |
+ unsigned short rxb_num PACKED; /* 71: number of Rx buffers */ |
+} ppp508_get_conf_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * S508 Operational Statistics (returned by the PPP_READ_STATISTIC command). |
+ */ |
+typedef struct ppp508_stats |
+{ |
+ unsigned short reserved1 PACKED; /* 00: */ |
+ unsigned short rx_bad_len PACKED; /* 02: */ |
+ unsigned short reserved2 PACKED; /* 04: */ |
+ unsigned long tx_frames PACKED; /* 06: */ |
+ unsigned long tx_bytes PACKED; /* 0A: */ |
+ unsigned long rx_frames PACKED; /* 0E: */ |
+ unsigned long rx_bytes PACKED; /* 12: */ |
+} ppp508_stats_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * Adapter Error Statistics (returned by the PPP_READ_ERROR_STATS command). |
+ */ |
+typedef struct ppp_err_stats |
+{ |
+ unsigned char rx_overrun PACKED; /* 00: Rx overrun errors */ |
+ unsigned char rx_bad_crc PACKED; /* 01: Rx CRC errors */ |
+ unsigned char rx_abort PACKED; /* 02: Rx aborted frames */ |
+ unsigned char rx_lost PACKED; /* 03: Rx frames lost */ |
+ unsigned char tx_abort PACKED; /* 04: Tx aborted frames */ |
+ unsigned char tx_underrun PACKED; /* 05: Tx underrun errors */ |
+ unsigned char tx_missed_intr PACKED; /* 06: Tx underruns missed */ |
+ unsigned char reserved PACKED; /* 07: Tx underruns missed */ |
+ unsigned char dcd_trans PACKED; /* 08: DCD transitions */ |
+ unsigned char cts_trans PACKED; /* 09: CTS transitions */ |
+} ppp_err_stats_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * Packet Statistics (returned by the PPP_READ_PACKET_STATS command). |
+ */ |
+typedef struct ppp_pkt_stats |
+{ |
+ unsigned short rx_bad_header PACKED; /* 00: */ |
+ unsigned short rx_prot_unknwn PACKED; /* 02: */ |
+ unsigned short rx_too_large PACKED; /* 04: */ |
+ unsigned short rx_lcp PACKED; /* 06: */ |
+ unsigned short tx_lcp PACKED; /* 08: */ |
+ unsigned short rx_ipcp PACKED; /* 0A: */ |
+ unsigned short tx_ipcp PACKED; /* 0C: */ |
+ unsigned short rx_ipxcp PACKED; /* 0E: */ |
+ unsigned short tx_ipxcp PACKED; /* 10: */ |
+ unsigned short rx_pap PACKED; /* 12: */ |
+ unsigned short tx_pap PACKED; /* 14: */ |
+ unsigned short rx_chap PACKED; /* 16: */ |
+ unsigned short tx_chap PACKED; /* 18: */ |
+ unsigned short rx_lqr PACKED; /* 1A: */ |
+ unsigned short tx_lqr PACKED; /* 1C: */ |
+ unsigned short rx_ip PACKED; /* 1E: */ |
+ unsigned short tx_ip PACKED; /* 20: */ |
+ unsigned short rx_ipx PACKED; /* 22: */ |
+ unsigned short tx_ipx PACKED; /* 24: */ |
+} ppp_pkt_stats_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * LCP Statistics (returned by the PPP_READ_LCP_STATS command). |
+ */ |
+typedef struct ppp_lcp_stats |
+{ |
+ unsigned short rx_unknown PACKED; /* 00: unknown LCP type */ |
+ unsigned short rx_conf_rqst PACKED; /* 02: Configure-Request */ |
+ unsigned short rx_conf_ack PACKED; /* 04: Configure-Ack */ |
+ unsigned short rx_conf_nak PACKED; /* 06: Configure-Nak */ |
+ unsigned short rx_conf_rej PACKED; /* 08: Configure-Reject */ |
+ unsigned short rx_term_rqst PACKED; /* 0A: Terminate-Request */ |
+ unsigned short rx_term_ack PACKED; /* 0C: Terminate-Ack */ |
+ unsigned short rx_code_rej PACKED; /* 0E: Code-Reject */ |
+ unsigned short rx_proto_rej PACKED; /* 10: Protocol-Reject */ |
+ unsigned short rx_echo_rqst PACKED; /* 12: Echo-Request */ |
+ unsigned short rx_echo_reply PACKED; /* 14: Echo-Reply */ |
+ unsigned short rx_disc_rqst PACKED; /* 16: Discard-Request */ |
+ unsigned short tx_conf_rqst PACKED; /* 18: Configure-Request */ |
+ unsigned short tx_conf_ack PACKED; /* 1A: Configure-Ack */ |
+ unsigned short tx_conf_nak PACKED; /* 1C: Configure-Nak */ |
+ unsigned short tx_conf_rej PACKED; /* 1E: Configure-Reject */ |
+ unsigned short tx_term_rqst PACKED; /* 20: Terminate-Request */ |
+ unsigned short tx_term_ack PACKED; /* 22: Terminate-Ack */ |
+ unsigned short tx_code_rej PACKED; /* 24: Code-Reject */ |
+ unsigned short tx_proto_rej PACKED; /* 26: Protocol-Reject */ |
+ unsigned short tx_echo_rqst PACKED; /* 28: Echo-Request */ |
+ unsigned short tx_echo_reply PACKED; /* 2A: Echo-Reply */ |
+ unsigned short tx_disc_rqst PACKED; /* 2E: Discard-Request */ |
+ unsigned short rx_too_large PACKED; /* 30: packets too large */ |
+ unsigned short rx_ack_inval PACKED; /* 32: invalid Conf-Ack */ |
+ unsigned short rx_rej_inval PACKED; /* 34: invalid Conf-Reject */ |
+ unsigned short rx_rej_badid PACKED; /* 36: Conf-Reject w/bad ID */ |
+} ppp_lcp_stats_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * Loopback Error Statistics (returned by the PPP_READ_LPBK_STATS command). |
+ */ |
+typedef struct ppp_lpbk_stats |
+{ |
+ unsigned short conf_magic PACKED; /* 00: */ |
+ unsigned short loc_echo_rqst PACKED; /* 02: */ |
+ unsigned short rem_echo_rqst PACKED; /* 04: */ |
+ unsigned short loc_echo_reply PACKED; /* 06: */ |
+ unsigned short rem_echo_reply PACKED; /* 08: */ |
+ unsigned short loc_disc_rqst PACKED; /* 0A: */ |
+ unsigned short rem_disc_rqst PACKED; /* 0C: */ |
+ unsigned short echo_tx_collsn PACKED; /* 0E: */ |
+ unsigned short echo_rx_collsn PACKED; /* 10: */ |
+} ppp_lpbk_stats_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * Protocol Statistics (returned by the PPP_READ_IPCP_STATS and |
+ * PPP_READ_IPXCP_STATS commands). |
+ */ |
+typedef struct ppp_prot_stats |
+{ |
+ unsigned short rx_unknown PACKED; /* 00: unknown type */ |
+ unsigned short rx_conf_rqst PACKED; /* 02: Configure-Request */ |
+ unsigned short rx_conf_ack PACKED; /* 04: Configure-Ack */ |
+ unsigned short rx_conf_nak PACKED; /* 06: Configure-Nak */ |
+ unsigned short rx_conf_rej PACKED; /* 08: Configure-Reject */ |
+ unsigned short rx_term_rqst PACKED; /* 0A: Terminate-Request */ |
+ unsigned short rx_term_ack PACKED; /* 0C: Terminate-Ack */ |
+ unsigned short rx_code_rej PACKED; /* 0E: Code-Reject */ |
+ unsigned short reserved PACKED; /* 10: */ |
+ unsigned short tx_conf_rqst PACKED; /* 12: Configure-Request */ |
+ unsigned short tx_conf_ack PACKED; /* 14: Configure-Ack */ |
+ unsigned short tx_conf_nak PACKED; /* 16: Configure-Nak */ |
+ unsigned short tx_conf_rej PACKED; /* 18: Configure-Reject */ |
+ unsigned short tx_term_rqst PACKED; /* 1A: Terminate-Request */ |
+ unsigned short tx_term_ack PACKED; /* 1C: Terminate-Ack */ |
+ unsigned short tx_code_rej PACKED; /* 1E: Code-Reject */ |
+ unsigned short rx_too_large PACKED; /* 20: packets too large */ |
+ unsigned short rx_ack_inval PACKED; /* 22: invalid Conf-Ack */ |
+ unsigned short rx_rej_inval PACKED; /* 24: invalid Conf-Reject */ |
+ unsigned short rx_rej_badid PACKED; /* 26: Conf-Reject w/bad ID */ |
+} ppp_prot_stats_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * PAP Statistics (returned by the PPP_READ_PAP_STATS command). |
+ */ |
+typedef struct ppp_pap_stats |
+{ |
+ unsigned short rx_unknown PACKED; /* 00: unknown type */ |
+ unsigned short rx_auth_rqst PACKED; /* 02: Authenticate-Request */ |
+ unsigned short rx_auth_ack PACKED; /* 04: Authenticate-Ack */ |
+ unsigned short rx_auth_nak PACKED; /* 06: Authenticate-Nak */ |
+ unsigned short reserved PACKED; /* 08: */ |
+ unsigned short tx_auth_rqst PACKED; /* 0A: Authenticate-Request */ |
+ unsigned short tx_auth_ack PACKED; /* 0C: Authenticate-Ack */ |
+ unsigned short tx_auth_nak PACKED; /* 0E: Authenticate-Nak */ |
+ unsigned short rx_too_large PACKED; /* 10: packets too large */ |
+ unsigned short rx_bad_peerid PACKED; /* 12: invalid peer ID */ |
+ unsigned short rx_bad_passwd PACKED; /* 14: invalid password */ |
+} ppp_pap_stats_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * CHAP Statistics (returned by the PPP_READ_CHAP_STATS command). |
+ */ |
+typedef struct ppp_chap_stats |
+{ |
+ unsigned short rx_unknown PACKED; /* 00: unknown type */ |
+ unsigned short rx_challenge PACKED; /* 02: Authenticate-Request */ |
+ unsigned short rx_response PACKED; /* 04: Authenticate-Ack */ |
+ unsigned short rx_success PACKED; /* 06: Authenticate-Nak */ |
+ unsigned short rx_failure PACKED; /* 08: Authenticate-Nak */ |
+ unsigned short reserved PACKED; /* 0A: */ |
+ unsigned short tx_challenge PACKED; /* 0C: Authenticate-Request */ |
+ unsigned short tx_response PACKED; /* 0E: Authenticate-Ack */ |
+ unsigned short tx_success PACKED; /* 10: Authenticate-Nak */ |
+ unsigned short tx_failure PACKED; /* 12: Authenticate-Nak */ |
+ unsigned short rx_too_large PACKED; /* 14: packets too large */ |
+ unsigned short rx_bad_peerid PACKED; /* 16: invalid peer ID */ |
+ unsigned short rx_bad_passwd PACKED; /* 18: invalid password */ |
+ unsigned short rx_bad_md5 PACKED; /* 1A: invalid MD5 format */ |
+ unsigned short rx_bad_resp PACKED; /* 1C: invalid response */ |
+} ppp_chap_stats_t; |
+ |
+/*---------------------------------------------------------------------------- |
+ * Connection Information (returned by the PPP_GET_CONNECTION_INFO command). |
+ */ |
+typedef struct ppp_conn_info |
+{ |
+ unsigned short remote_mru PACKED; /* 00: */ |
+ unsigned char ip_options PACKED; /* 02: */ |
+ unsigned char ip_local[4] PACKED; /* 03: */ |
+ unsigned char ip_remote[4] PACKED; /* 07: */ |
+ unsigned char ipx_options PACKED; /* 0B: */ |
+ unsigned char ipx_network[4] PACKED; /* 0C: */ |
+ unsigned char ipx_local[6] PACKED; /* 10: */ |
+ unsigned char ipx_remote[6] PACKED; /* 16: */ |
+ unsigned char ipx_router[48] PACKED; /* 1C: */ |
+ unsigned char auth_status PACKED; /* 4C: */ |
+ unsigned char peer_id[0] PACKED; /* 4D: */ |
+} ppp_conn_info_t; |
+ |
+/* Data structure for SET_TRIGGER_INTR command |
+ */ |
+ |
+typedef struct ppp_intr_info{ |
+ unsigned char i_enable PACKED; /* 0 Interrupt enable bits */ |
+ unsigned char irq PACKED; /* 1 Irq number */ |
+ unsigned short timer_len PACKED; /* 2 Timer delay */ |
+} ppp_intr_info_t; |
+ |
+ |
+#define FT1_MONITOR_STATUS_CTRL 0x80 |
+#define SET_FT1_MODE 0x81 |
+ |
+ |
+ |
+/* Special UDP drivers management commands */ |
+#define PPIPE_ENABLE_TRACING 0x20 |
+#define PPIPE_DISABLE_TRACING 0x21 |
+#define PPIPE_GET_TRACE_INFO 0x22 |
+#define PPIPE_GET_IBA_DATA 0x23 |
+#define PPIPE_KILL_BOARD 0x24 |
+#define PPIPE_FT1_READ_STATUS 0x25 |
+#define PPIPE_DRIVER_STAT_IFSEND 0x26 |
+#define PPIPE_DRIVER_STAT_INTR 0x27 |
+#define PPIPE_DRIVER_STAT_GEN 0x28 |
+#define PPIPE_FLUSH_DRIVER_STATS 0x29 |
+#define PPIPE_ROUTER_UP_TIME 0x30 |
+ |
+#define DISABLE_TRACING 0x00 |
+#define TRACE_SIGNALLING_FRAMES 0x01 |
+#define TRACE_DATA_FRAMES 0x02 |
+ |
+ |
+ |
+#ifdef _MSC_ |
+# pragma pack() |
+#endif |
+#endif /* _SDLA_PPP_H */ |
Index: linuxc26/include/linux/brlvger.h |
=================================================================== |
--- linuxc26/include/linux/brlvger.h (nonexistent) |
+++ linuxc26/include/linux/brlvger.h (revision 422) |
@@ -0,0 +1,54 @@ |
+/* |
+ * Tieman Voyager braille display USB driver. |
+ * |
+ * Copyright 2001-2002 Stephane Dalton <sdalton@videotron.ca> |
+ * and Stéphane Doyon <s.doyon@videotron.ca> |
+ * Maintained by Stéphane Doyon <s.doyon@videotron.ca>. |
+ */ |
+/* |
+ * 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_BRLVGER_H |
+#define _LINUX_BRLVGER_H |
+ |
+/* Ioctl request codes */ |
+#define BRLVGER_GET_INFO 0 |
+#define BRLVGER_DISPLAY_ON 2 |
+#define BRLVGER_DISPLAY_OFF 3 |
+#define BRLVGER_BUZZ 4 |
+ |
+/* Base minor for the char devices */ |
+#define BRLVGER_MINOR 128 |
+ |
+/* Size of some fields */ |
+#define BRLVGER_HWVER_SIZE 2 |
+#define BRLVGER_FWVER_SIZE 200 /* arbitrary, a long string */ |
+#define BRLVGER_SERIAL_BIN_SIZE 8 |
+#define BRLVGER_SERIAL_SIZE ((2*BRLVGER_SERIAL_BIN_SIZE)+1) |
+ |
+struct brlvger_info { |
+ __u8 driver_version[12]; |
+ __u8 driver_banner[200]; |
+ |
+ __u32 display_length; |
+ /* All other char[] fields are strings except this one. |
+ Hardware version: first byte is major, second byte is minor. */ |
+ __u8 hwver[BRLVGER_HWVER_SIZE]; |
+ __u8 fwver[BRLVGER_FWVER_SIZE]; |
+ __u8 serialnum[BRLVGER_SERIAL_SIZE]; |
+}; |
+ |
+#endif |
Index: linuxc26/include/linux/posix_acl_xattr.h |
=================================================================== |
--- linuxc26/include/linux/posix_acl_xattr.h (nonexistent) |
+++ linuxc26/include/linux/posix_acl_xattr.h (revision 422) |
@@ -0,0 +1,55 @@ |
+/* |
+ File: linux/posix_acl_xattr.h |
+ |
+ Extended attribute system call representation of Access Control Lists. |
+ |
+ Copyright (C) 2000 by Andreas Gruenbacher <a.gruenbacher@computer.org> |
+ Copyright (C) 2002 SGI - Silicon Graphics, Inc <linux-xfs@oss.sgi.com> |
+ */ |
+#ifndef _POSIX_ACL_XATTR_H |
+#define _POSIX_ACL_XATTR_H |
+ |
+#include <linux/posix_acl.h> |
+ |
+/* Extended attribute names */ |
+#define POSIX_ACL_XATTR_ACCESS "system.posix_acl_access" |
+#define POSIX_ACL_XATTR_DEFAULT "system.posix_acl_default" |
+ |
+/* Supported ACL a_version fields */ |
+#define POSIX_ACL_XATTR_VERSION 0x0002 |
+ |
+ |
+/* An undefined entry e_id value */ |
+#define ACL_UNDEFINED_ID (-1) |
+ |
+typedef struct { |
+ __u16 e_tag; |
+ __u16 e_perm; |
+ __u32 e_id; |
+} posix_acl_xattr_entry; |
+ |
+typedef struct { |
+ __u32 a_version; |
+ posix_acl_xattr_entry a_entries[0]; |
+} posix_acl_xattr_header; |
+ |
+ |
+static inline size_t |
+posix_acl_xattr_size(int count) |
+{ |
+ return (sizeof(posix_acl_xattr_header) + |
+ (count * sizeof(posix_acl_xattr_entry))); |
+} |
+ |
+static inline int |
+posix_acl_xattr_count(size_t size) |
+{ |
+ if (size < sizeof(posix_acl_xattr_header)) |
+ return -1; |
+ size -= sizeof(posix_acl_xattr_header); |
+ if (size % sizeof(posix_acl_xattr_entry)) |
+ return -1; |
+ return size / sizeof(posix_acl_xattr_entry); |
+} |
+ |
+#endif /* _POSIX_ACL_XATTR_H */ |
Index: linuxc26/include/linux/isdn_lzscomp.h |
=================================================================== |
--- linuxc26/include/linux/isdn_lzscomp.h (nonexistent) |
+++ linuxc26/include/linux/isdn_lzscomp.h (revision 422) |
@@ -0,0 +1,28 @@ |
+/* $Id: isdn_lzscomp.h,v 1.1 2004-01-28 15:25:44 giacomo Exp $ |
+ * |
+ * Header for isdn_lzscomp.c |
+ * Concentrated here to not mess up half a dozen kernel headers with code |
+ * snippets |
+ * |
+ * This software may be used and distributed according to the terms |
+ * of the GNU General Public License, incorporated herein by reference. |
+ * |
+ */ |
+ |
+#define CI_LZS_COMPRESS 17 |
+#define CILEN_LZS_COMPRESS 5 |
+ |
+#define LZS_CMODE_NONE 0 |
+#define LZS_CMODE_LCB 1 |
+#define LZS_CMODE_CRC 2 |
+#define LZS_CMODE_SEQNO 3 /* MUST be implemented (default) */ |
+#define LZS_CMODE_EXT 4 /* Seems to be what Win0.95 uses */ |
+ |
+#define LZS_COMP_MAX_HISTS 1 /* Don't waste peers ressources */ |
+#define LZS_COMP_DEF_HISTS 1 /* Most likely to negotiate */ |
+#define LZS_DECOMP_MAX_HISTS 32 /* More is really nonsense */ |
+#define LZS_DECOMP_DEF_HISTS 8 /* If we get it, this may be optimal */ |
+ |
+#define LZS_HIST_BYTE1(word) (word>>8) /* Just for better reading */ |
+#define LZS_HIST_BYTE2(word) (word&0xff) /* of this big endian stuff */ |
+#define LZS_HIST_WORD(b1,b2) ((b1<<8)|b2) /* (network byte order rulez) */ |
Index: linuxc26/include/linux/vt_kern.h |
=================================================================== |
--- linuxc26/include/linux/vt_kern.h (nonexistent) |
+++ linuxc26/include/linux/vt_kern.h (revision 422) |
@@ -0,0 +1,86 @@ |
+#ifndef _VT_KERN_H |
+#define _VT_KERN_H |
+ |
+/* |
+ * this really is an extension of the vc_cons structure in console.c, but |
+ * with information needed by the vt package |
+ */ |
+ |
+#include <linux/config.h> |
+#include <linux/vt.h> |
+#include <linux/kd.h> |
+#include <linux/tty.h> |
+#include <linux/console_struct.h> |
+ |
+/* |
+ * Presently, a lot of graphics programs do not restore the contents of |
+ * the higher font pages. Defining this flag will avoid use of them, but |
+ * will lose support for PIO_FONTRESET. Note that many font operations are |
+ * not likely to work with these programs anyway; they need to be |
+ * fixed. The linux/Documentation directory includes a code snippet |
+ * to save and restore the text font. |
+ */ |
+#ifdef CONFIG_VGA_CONSOLE |
+#define BROKEN_GRAPHICS_PROGRAMS 1 |
+#endif |
+ |
+extern struct vt_struct { |
+ int vc_num; /* The console number */ |
+ unsigned char vc_mode; /* KD_TEXT, ... */ |
+ struct vt_mode vt_mode; |
+ int vt_pid; |
+ int vt_newvt; |
+ wait_queue_head_t paste_wait; |
+} *vt_cons[MAX_NR_CONSOLES]; |
+ |
+extern void kd_mksound(unsigned int hz, unsigned int ticks); |
+extern int kbd_rate(struct kbd_repeat *rep); |
+ |
+/* console.c */ |
+ |
+int vc_allocate(unsigned int console); |
+int vc_cons_allocated(unsigned int console); |
+int vc_resize(int currcons, unsigned int cols, unsigned int lines); |
+void vc_disallocate(unsigned int console); |
+void reset_palette(int currcons); |
+void set_palette(int currcons); |
+void do_blank_screen(int gfx_mode); |
+void unblank_screen(void); |
+void poke_blanked_console(void); |
+int con_font_op(int currcons, struct console_font_op *op); |
+int con_set_cmap(unsigned char *cmap); |
+int con_get_cmap(unsigned char *cmap); |
+void scrollback(int); |
+void scrollfront(int); |
+void update_region(int currcons, unsigned long start, int count); |
+void redraw_screen(int new_console, int is_switch); |
+#define update_screen(x) redraw_screen(x, 0) |
+#define switch_screen(x) redraw_screen(x, 1) |
+ |
+struct tty_struct; |
+int tioclinux(struct tty_struct *tty, unsigned long arg); |
+ |
+/* consolemap.c */ |
+ |
+struct unimapinit; |
+struct unipair; |
+ |
+int con_set_trans_old(unsigned char * table); |
+int con_get_trans_old(unsigned char * table); |
+int con_set_trans_new(unsigned short * table); |
+int con_get_trans_new(unsigned short * table); |
+int con_clear_unimap(int currcons, struct unimapinit *ui); |
+int con_set_unimap(int currcons, ushort ct, struct unipair *list); |
+int con_get_unimap(int currcons, ushort ct, ushort *uct, struct unipair *list); |
+int con_set_default_unimap(int currcons); |
+void con_free_unimap(int currcons); |
+void con_protect_unimap(int currcons, int rdonly); |
+int con_copy_unimap(int dstcons, int srccons); |
+ |
+/* vt.c */ |
+void complete_change_console(unsigned int new_console); |
+int vt_waitactive(int vt); |
+void change_console(unsigned int); |
+void reset_vc(unsigned int new_console); |
+ |
+#endif /* _VT_KERN_H */ |
Index: linuxc26/include/linux/bio.h |
=================================================================== |
--- linuxc26/include/linux/bio.h (nonexistent) |
+++ linuxc26/include/linux/bio.h (revision 422) |
@@ -0,0 +1,299 @@ |
+/* |
+ * 2.5 block I/O model |
+ * |
+ * Copyright (C) 2001 Jens Axboe <axboe@suse.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. |
+ * |
+ * 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 Licens |
+ * along with this program; if not, write to the Free Software |
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111- |
+ */ |
+#ifndef __LINUX_BIO_H |
+#define __LINUX_BIO_H |
+ |
+#include <linux/highmem.h> |
+#include <linux/mempool.h> |
+ |
+/* Platforms may set this to teach the BIO layer about IOMMU hardware. */ |
+#include <asm/io.h> |
+#ifndef BIO_VMERGE_BOUNDARY |
+#define BIO_VMERGE_BOUNDARY 0 |
+#endif |
+ |
+#define BIO_DEBUG |
+ |
+#ifdef BIO_DEBUG |
+#define BIO_BUG_ON BUG_ON |
+#else |
+#define BIO_BUG_ON |
+#endif |
+ |
+#define BIO_MAX_PAGES (256) |
+#define BIO_MAX_SIZE (BIO_MAX_PAGES << PAGE_CACHE_SHIFT) |
+#define BIO_MAX_SECTORS (BIO_MAX_SIZE >> 9) |
+ |
+/* |
+ * was unsigned short, but we might as well be ready for > 64kB I/O pages |
+ */ |
+struct bio_vec { |
+ struct page *bv_page; |
+ unsigned int bv_len; |
+ unsigned int bv_offset; |
+}; |
+ |
+struct bio; |
+typedef int (bio_end_io_t) (struct bio *, unsigned int, int); |
+typedef void (bio_destructor_t) (struct bio *); |
+ |
+/* |
+ * main unit of I/O for the block layer and lower layers (ie drivers and |
+ * stacking drivers) |
+ */ |
+struct bio { |
+ sector_t bi_sector; |
+ struct bio *bi_next; /* request queue link */ |
+ struct block_device *bi_bdev; |
+ unsigned long bi_flags; /* status, command, etc */ |
+ unsigned long bi_rw; /* bottom bits READ/WRITE, |
+ * top bits priority |
+ */ |
+ |
+ unsigned short bi_vcnt; /* how many bio_vec's */ |
+ unsigned short bi_idx; /* current index into bvl_vec */ |
+ |
+ /* Number of segments in this BIO after |
+ * physical address coalescing is performed. |
+ */ |
+ unsigned short bi_phys_segments; |
+ |
+ /* Number of segments after physical and DMA remapping |
+ * hardware coalescing is performed. |
+ */ |
+ unsigned short bi_hw_segments; |
+ |
+ unsigned int bi_size; /* residual I/O count */ |
+ unsigned int bi_max_vecs; /* max bvl_vecs we can hold */ |
+ |
+ struct bio_vec *bi_io_vec; /* the actual vec list */ |
+ |
+ bio_end_io_t *bi_end_io; |
+ atomic_t bi_cnt; /* pin count */ |
+ |
+ void *bi_private; |
+ |
+ bio_destructor_t *bi_destructor; /* destructor */ |
+}; |
+ |
+/* |
+ * bio flags |
+ */ |
+#define BIO_UPTODATE 0 /* ok after I/O completion */ |
+#define BIO_RW_BLOCK 1 /* RW_AHEAD set, and read/write would block */ |
+#define BIO_EOF 2 /* out-out-bounds error */ |
+#define BIO_SEG_VALID 3 /* nr_hw_seg valid */ |
+#define BIO_CLONED 4 /* doesn't own data */ |
+#define BIO_BOUNCED 5 /* bio is a bounce bio */ |
+#define bio_flagged(bio, flag) ((bio)->bi_flags & (1 << (flag))) |
+ |
+/* |
+ * top 4 bits of bio flags indicate the pool this bio came from |
+ */ |
+#define BIO_POOL_BITS (4) |
+#define BIO_POOL_OFFSET (BITS_PER_LONG - BIO_POOL_BITS) |
+#define BIO_POOL_MASK (1UL << BIO_POOL_OFFSET) |
+#define BIO_POOL_IDX(bio) ((bio)->bi_flags >> BIO_POOL_OFFSET) |
+ |
+/* |
+ * bio bi_rw flags |
+ * |
+ * bit 0 -- read (not set) or write (set) |
+ * bit 1 -- rw-ahead when set |
+ * bit 2 -- barrier |
+ * bit 3 -- fail fast, don't want low level driver retries |
+ */ |
+#define BIO_RW 0 |
+#define BIO_RW_AHEAD 1 |
+#define BIO_RW_BARRIER 2 |
+#define BIO_RW_FAILFAST 3 |
+ |
+/* |
+ * various member access, note that bio_data should of course not be used |
+ * on highmem page vectors |
+ */ |
+#define bio_iovec_idx(bio, idx) (&((bio)->bi_io_vec[(idx)])) |
+#define bio_iovec(bio) bio_iovec_idx((bio), (bio)->bi_idx) |
+#define bio_page(bio) bio_iovec((bio))->bv_page |
+#define bio_offset(bio) bio_iovec((bio))->bv_offset |
+#define bio_segments(bio) ((bio)->bi_vcnt - (bio)->bi_idx) |
+#define bio_sectors(bio) ((bio)->bi_size >> 9) |
+#define bio_cur_sectors(bio) (bio_iovec(bio)->bv_len >> 9) |
+#define bio_data(bio) (page_address(bio_page((bio))) + bio_offset((bio))) |
+#define bio_barrier(bio) ((bio)->bi_rw & (1 << BIO_RW_BARRIER)) |
+ |
+/* |
+ * will die |
+ */ |
+#define bio_to_phys(bio) (page_to_phys(bio_page((bio))) + (unsigned long) bio_offset((bio))) |
+#define bvec_to_phys(bv) (page_to_phys((bv)->bv_page) + (unsigned long) (bv)->bv_offset) |
+ |
+/* |
+ * queues that have highmem support enabled may still need to revert to |
+ * PIO transfers occasionally and thus map high pages temporarily. For |
+ * permanent PIO fall back, user is probably better off disabling highmem |
+ * I/O completely on that queue (see ide-dma for example) |
+ */ |
+#define __bio_kmap_atomic(bio, idx, kmtype) \ |
+ (kmap_atomic(bio_iovec_idx((bio), (idx))->bv_page, kmtype) + \ |
+ bio_iovec_idx((bio), (idx))->bv_offset) |
+ |
+#define __bio_kunmap_atomic(addr, kmtype) kunmap_atomic(addr, kmtype) |
+ |
+/* |
+ * merge helpers etc |
+ */ |
+ |
+#define __BVEC_END(bio) bio_iovec_idx((bio), (bio)->bi_vcnt - 1) |
+#define __BVEC_START(bio) bio_iovec_idx((bio), 0) |
+#define BIOVEC_PHYS_MERGEABLE(vec1, vec2) \ |
+ ((bvec_to_phys((vec1)) + (vec1)->bv_len) == bvec_to_phys((vec2))) |
+#define BIOVEC_VIRT_MERGEABLE(vec1, vec2) \ |
+ ((((bvec_to_phys((vec1)) + (vec1)->bv_len) | bvec_to_phys((vec2))) & (BIO_VMERGE_BOUNDARY - 1)) == 0) |
+#define __BIO_SEG_BOUNDARY(addr1, addr2, mask) \ |
+ (((addr1) | (mask)) == (((addr2) - 1) | (mask))) |
+#define BIOVEC_SEG_BOUNDARY(q, b1, b2) \ |
+ __BIO_SEG_BOUNDARY(bvec_to_phys((b1)), bvec_to_phys((b2)) + (b2)->bv_len, (q)->seg_boundary_mask) |
+#define BIO_SEG_BOUNDARY(q, b1, b2) \ |
+ BIOVEC_SEG_BOUNDARY((q), __BVEC_END((b1)), __BVEC_START((b2))) |
+ |
+#define bio_io_error(bio, bytes) bio_endio((bio), (bytes), -EIO) |
+ |
+/* |
+ * drivers should not use the __ version unless they _really_ want to |
+ * run through the entire bio and not just pending pieces |
+ */ |
+#define __bio_for_each_segment(bvl, bio, i, start_idx) \ |
+ for (bvl = bio_iovec_idx((bio), (start_idx)), i = (start_idx); \ |
+ i < (bio)->bi_vcnt; \ |
+ bvl++, i++) |
+ |
+#define bio_for_each_segment(bvl, bio, i) \ |
+ __bio_for_each_segment(bvl, bio, i, (bio)->bi_idx) |
+ |
+/* |
+ * get a reference to a bio, so it won't disappear. the intended use is |
+ * something like: |
+ * |
+ * bio_get(bio); |
+ * submit_bio(rw, bio); |
+ * if (bio->bi_flags ...) |
+ * do_something |
+ * bio_put(bio); |
+ * |
+ * without the bio_get(), it could potentially complete I/O before submit_bio |
+ * returns. and then bio would be freed memory when if (bio->bi_flags ...) |
+ * runs |
+ */ |
+#define bio_get(bio) atomic_inc(&(bio)->bi_cnt) |
+ |
+ |
+/* |
+ * A bio_pair is used when we need to split a bio. |
+ * This can only happen for a bio that refers to just one |
+ * page of data, and in the unusual situation when the |
+ * page crosses a chunk/device boundary |
+ * |
+ * The address of the master bio is stored in bio1.bi_private |
+ * The address of the pool the pair was allocated from is stored |
+ * in bio2.bi_private |
+ */ |
+struct bio_pair { |
+ struct bio bio1, bio2; |
+ struct bio_vec bv1, bv2; |
+ atomic_t cnt; |
+ int error; |
+}; |
+extern struct bio_pair *bio_split(struct bio *bi, mempool_t *pool, |
+ int first_sectors); |
+extern mempool_t *bio_split_pool; |
+extern void bio_pair_release(struct bio_pair *dbio); |
+ |
+extern struct bio *bio_alloc(int, int); |
+extern void bio_put(struct bio *); |
+ |
+extern void bio_endio(struct bio *, unsigned int, int); |
+struct request_queue; |
+extern inline int bio_phys_segments(struct request_queue *, struct bio *); |
+extern inline int bio_hw_segments(struct request_queue *, struct bio *); |
+ |
+extern inline void __bio_clone(struct bio *, struct bio *); |
+extern struct bio *bio_clone(struct bio *, int); |
+ |
+extern inline void bio_init(struct bio *); |
+ |
+extern int bio_add_page(struct bio *, struct page *, unsigned int,unsigned int); |
+extern int bio_get_nr_vecs(struct block_device *); |
+extern struct bio *bio_map_user(struct block_device *, unsigned long, |
+ unsigned int, int); |
+extern void bio_unmap_user(struct bio *, int); |
+extern void bio_set_pages_dirty(struct bio *bio); |
+extern void bio_check_pages_dirty(struct bio *bio); |
+ |
+#ifdef CONFIG_HIGHMEM |
+/* |
+ * remember to add offset! and never ever reenable interrupts between a |
+ * bvec_kmap_irq and bvec_kunmap_irq!! |
+ * |
+ * This function MUST be inlined - it plays with the CPU interrupt flags. |
+ * Hence the `extern inline'. |
+ */ |
+extern inline char *bvec_kmap_irq(struct bio_vec *bvec, unsigned long *flags) |
+{ |
+ unsigned long addr; |
+ |
+ /* |
+ * might not be a highmem page, but the preempt/irq count |
+ * balancing is a lot nicer this way |
+ */ |
+ local_irq_save(*flags); |
+ addr = (unsigned long) kmap_atomic(bvec->bv_page, KM_BIO_SRC_IRQ); |
+ |
+ if (addr & ~PAGE_MASK) |
+ BUG(); |
+ |
+ return (char *) addr + bvec->bv_offset; |
+} |
+ |
+extern inline void bvec_kunmap_irq(char *buffer, unsigned long *flags) |
+{ |
+ unsigned long ptr = (unsigned long) buffer & PAGE_MASK; |
+ |
+ kunmap_atomic((void *) ptr, KM_BIO_SRC_IRQ); |
+ local_irq_restore(*flags); |
+} |
+ |
+#else |
+#define bvec_kmap_irq(bvec, flags) (page_address((bvec)->bv_page) + (bvec)->bv_offset) |
+#define bvec_kunmap_irq(buf, flags) do { *(flags) = 0; } while (0) |
+#endif |
+ |
+extern inline char *__bio_kmap_irq(struct bio *bio, unsigned short idx, |
+ unsigned long *flags) |
+{ |
+ return bvec_kmap_irq(bio_iovec_idx(bio, idx), flags); |
+} |
+#define __bio_kunmap_irq(buf, flags) bvec_kunmap_irq(buf, flags) |
+ |
+#define bio_kmap_irq(bio, flags) \ |
+ __bio_kmap_irq((bio), (bio)->bi_idx, (flags)) |
+#define bio_kunmap_irq(buf,flags) __bio_kunmap_irq(buf, flags) |
+ |
+#endif /* __LINUX_BIO_H */ |
Index: linuxc26/include/linux/nfs4.h |
=================================================================== |
--- linuxc26/include/linux/nfs4.h (nonexistent) |
+++ linuxc26/include/linux/nfs4.h (revision 422) |
@@ -0,0 +1,233 @@ |
+/* |
+ * 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 _LINUX_NFS4_H |
+#define _LINUX_NFS4_H |
+ |
+#define NFS4_VERIFIER_SIZE 8 |
+#define NFS4_FHSIZE 128 |
+#define NFS4_MAXNAMLEN NAME_MAX |
+ |
+#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_PERISTENT 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_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_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 |
+ |
+typedef struct { char data[NFS4_VERIFIER_SIZE]; } nfs4_verifier; |
+typedef struct { char data[16]; } nfs4_stateid; |
+ |
+enum nfs_opnum4 { |
+ OP_ACCESS = 3, |
+ OP_CLOSE = 4, |
+ OP_COMMIT = 5, |
+ OP_CREATE = 6, |
+ OP_DELEGPURGE = 7, |
+ OP_DELEGRETURN = 8, |
+ OP_GETATTR = 9, |
+ OP_GETFH = 10, |
+ OP_LINK = 11, |
+ OP_LOCK = 12, |
+ OP_LOCKT = 13, |
+ OP_LOCKU = 14, |
+ OP_LOOKUP = 15, |
+ OP_LOOKUPP = 16, |
+ OP_NVERIFY = 17, |
+ OP_OPEN = 18, |
+ OP_OPENATTR = 19, |
+ OP_OPEN_CONFIRM = 20, |
+ OP_OPEN_DOWNGRADE = 21, |
+ OP_PUTFH = 22, |
+ OP_PUTPUBFH = 23, |
+ OP_PUTROOTFH = 24, |
+ OP_READ = 25, |
+ OP_READDIR = 26, |
+ OP_READLINK = 27, |
+ OP_REMOVE = 28, |
+ OP_RENAME = 29, |
+ OP_RENEW = 30, |
+ OP_RESTOREFH = 31, |
+ OP_SAVEFH = 32, |
+ OP_SECINFO = 33, |
+ OP_SETATTR = 34, |
+ OP_SETCLIENTID = 35, |
+ OP_SETCLIENTID_CONFIRM = 36, |
+ OP_VERIFY = 37, |
+ OP_WRITE = 38, |
+}; |
+ |
+/* |
+ * Note: NF4BAD is not actually part of the protocol; it is just used |
+ * internally by nfsd. |
+ */ |
+enum nfs_ftype4 { |
+ NF4BAD = 0, |
+ NF4REG = 1, /* Regular File */ |
+ NF4DIR = 2, /* Directory */ |
+ NF4BLK = 3, /* Special File - block device */ |
+ NF4CHR = 4, /* Special File - character device */ |
+ NF4LNK = 5, /* Symbolic Link */ |
+ NF4SOCK = 6, /* Special File - socket */ |
+ NF4FIFO = 7, /* Special File - fifo */ |
+ NF4ATTRDIR = 8, /* Attribute Directory */ |
+ NF4NAMEDATTR = 9 /* Named Attribute */ |
+}; |
+ |
+enum open_claim_type4 { |
+ NFS4_OPEN_CLAIM_NULL = 0, |
+ NFS4_OPEN_CLAIM_PREVIOUS = 1, |
+ NFS4_OPEN_CLAIM_DELEGATE_CUR = 2, |
+ NFS4_OPEN_CLAIM_DELEGATE_PREV = 3 |
+}; |
+ |
+enum opentype4 { |
+ NFS4_OPEN_NOCREATE = 0, |
+ NFS4_OPEN_CREATE = 1 |
+}; |
+ |
+enum createmode4 { |
+ NFS4_CREATE_UNCHECKED = 0, |
+ NFS4_CREATE_GUARDED = 1, |
+ NFS4_CREATE_EXCLUSIVE = 2 |
+}; |
+ |
+enum limit_by4 { |
+ NFS4_LIMIT_SIZE = 1, |
+ NFS4_LIMIT_BLOCKS = 2 |
+}; |
+ |
+enum open_delegation_type4 { |
+ NFS4_OPEN_DELEGATE_NONE = 0, |
+ NFS4_OPEN_DELEGATE_READ = 1, |
+ NFS4_OPEN_DELEGATE_WRITE = 2 |
+}; |
+ |
+enum lock_type4 { |
+ NFS4_UNLOCK_LT = 0, |
+ NFS4_READ_LT = 1, |
+ NFS4_WRITE_LT = 2, |
+ NFS4_READW_LT = 3, |
+ NFS4_WRITEW_LT = 4 |
+}; |
+ |
+ |
+/* Mandatory Attributes */ |
+#define FATTR4_WORD0_SUPPORTED_ATTRS (1) |
+#define FATTR4_WORD0_TYPE (1 << 1) |
+#define FATTR4_WORD0_FH_EXPIRE_TYPE (1 << 2) |
+#define FATTR4_WORD0_CHANGE (1 << 3) |
+#define FATTR4_WORD0_SIZE (1 << 4) |
+#define FATTR4_WORD0_LINK_SUPPORT (1 << 5) |
+#define FATTR4_WORD0_SYMLINK_SUPPORT (1 << 6) |
+#define FATTR4_WORD0_NAMED_ATTR (1 << 7) |
+#define FATTR4_WORD0_FSID (1 << 8) |
+#define FATTR4_WORD0_UNIQUE_HANDLES (1 << 9) |
+#define FATTR4_WORD0_LEASE_TIME (1 << 10) |
+#define FATTR4_WORD0_RDATTR_ERROR (1 << 11) |
+ |
+/* Recommended Attributes */ |
+#define FATTR4_WORD0_ACL (1 << 12) |
+#define FATTR4_WORD0_ACLSUPPORT (1 << 13) |
+#define FATTR4_WORD0_ARCHIVE (1 << 14) |
+#define FATTR4_WORD0_CANSETTIME (1 << 15) |
+#define FATTR4_WORD0_CASE_INSENSITIVE (1 << 16) |
+#define FATTR4_WORD0_CASE_PRESERVING (1 << 17) |
+#define FATTR4_WORD0_CHOWN_RESTRICTED (1 << 18) |
+#define FATTR4_WORD0_FILEHANDLE (1 << 19) |
+#define FATTR4_WORD0_FILEID (1 << 20) |
+#define FATTR4_WORD0_FILES_AVAIL (1 << 21) |
+#define FATTR4_WORD0_FILES_FREE (1 << 22) |
+#define FATTR4_WORD0_FILES_TOTAL (1 << 23) |
+#define FATTR4_WORD0_FS_LOCATIONS (1 << 24) |
+#define FATTR4_WORD0_HIDDEN (1 << 25) |
+#define FATTR4_WORD0_HOMOGENEOUS (1 << 26) |
+#define FATTR4_WORD0_MAXFILESIZE (1 << 27) |
+#define FATTR4_WORD0_MAXLINK (1 << 28) |
+#define FATTR4_WORD0_MAXNAME (1 << 29) |
+#define FATTR4_WORD0_MAXREAD (1 << 30) |
+#define FATTR4_WORD0_MAXWRITE (1 << 31) |
+#define FATTR4_WORD1_MIMETYPE (1) |
+#define FATTR4_WORD1_MODE (1 << 1) |
+#define FATTR4_WORD1_NO_TRUNC (1 << 2) |
+#define FATTR4_WORD1_NUMLINKS (1 << 3) |
+#define FATTR4_WORD1_OWNER (1 << 4) |
+#define FATTR4_WORD1_OWNER_GROUP (1 << 5) |
+#define FATTR4_WORD1_QUOTA_HARD (1 << 6) |
+#define FATTR4_WORD1_QUOTA_SOFT (1 << 7) |
+#define FATTR4_WORD1_QUOTA_USED (1 << 8) |
+#define FATTR4_WORD1_RAWDEV (1 << 9) |
+#define FATTR4_WORD1_SPACE_AVAIL (1 << 10) |
+#define FATTR4_WORD1_SPACE_FREE (1 << 11) |
+#define FATTR4_WORD1_SPACE_TOTAL (1 << 12) |
+#define FATTR4_WORD1_SPACE_USED (1 << 13) |
+#define FATTR4_WORD1_SYSTEM (1 << 14) |
+#define FATTR4_WORD1_TIME_ACCESS (1 << 15) |
+#define FATTR4_WORD1_TIME_ACCESS_SET (1 << 16) |
+#define FATTR4_WORD1_TIME_BACKUP (1 << 17) |
+#define FATTR4_WORD1_TIME_CREATE (1 << 18) |
+#define FATTR4_WORD1_TIME_DELTA (1 << 19) |
+#define FATTR4_WORD1_TIME_METADATA (1 << 20) |
+#define FATTR4_WORD1_TIME_MODIFY (1 << 21) |
+#define FATTR4_WORD1_TIME_MODIFY_SET (1 << 22) |
+ |
+#define NFSPROC4_NULL 0 |
+#define NFSPROC4_COMPOUND 1 |
+#define NFS4_MINOR_VERSION 0 |
+#define NFS4_DEBUG 1 |
+ |
+#ifdef __KERNEL__ |
+ |
+/* Index of predefined Linux client operations */ |
+ |
+enum { |
+ NFSPROC4_CLNT_NULL = 0, /* Unused */ |
+ NFSPROC4_CLNT_COMPOUND, /* Soon to be unused */ |
+ NFSPROC4_CLNT_READ, |
+ NFSPROC4_CLNT_WRITE, |
+ NFSPROC4_CLNT_COMMIT, |
+ NFSPROC4_CLNT_OPEN, |
+ NFSPROC4_CLNT_OPEN_CONFIRM, |
+ NFSPROC4_CLNT_CLOSE, |
+ NFSPROC4_CLNT_SETATTR, |
+}; |
+ |
+#endif |
+#endif |
+ |
+/* |
+ * Local variables: |
+ * c-basic-offset: 8 |
+ * End: |
+ */ |
Index: linuxc26/include/linux/lp.h |
=================================================================== |
--- linuxc26/include/linux/lp.h (nonexistent) |
+++ linuxc26/include/linux/lp.h (revision 422) |
@@ -0,0 +1,197 @@ |
+#ifndef _LINUX_LP_H |
+#define _LINUX_LP_H |
+ |
+/* |
+ * 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 |
+ */ |
+ |
+/* |
+ * 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) |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/wait.h> |
+#include <asm/semaphore.h> |
+ |
+/* Magic numbers for defining port-device mappings */ |
+#define LP_PARPORT_UNSPEC -4 |
+#define LP_PARPORT_AUTO -3 |
+#define LP_PARPORT_OFF -2 |
+#define LP_PARPORT_NONE -1 |
+ |
+#define LP_F(minor) lp_table[(minor)].flags /* flags for busy, etc. */ |
+#define LP_CHAR(minor) lp_table[(minor)].chars /* busy timeout */ |
+#define LP_TIME(minor) lp_table[(minor)].time /* wait time */ |
+#define LP_WAIT(minor) lp_table[(minor)].wait /* strobe wait */ |
+#define LP_IRQ(minor) lp_table[(minor)].dev->port->irq /* interrupt # */ |
+ /* PARPORT_IRQ_NONE means polled */ |
+#ifdef LP_STATS |
+#define LP_STAT(minor) lp_table[(minor)].stats /* statistics area */ |
+#endif |
+#define LP_BUFFER_SIZE PAGE_SIZE |
+ |
+#define LP_BASE(x) lp_table[(x)].dev->port->base |
+ |
+#ifdef LP_STATS |
+struct lp_stats { |
+ unsigned long chars; |
+ unsigned long sleeps; |
+ unsigned int maxrun; |
+ unsigned int maxwait; |
+ unsigned int meanwait; |
+ unsigned int mdev; |
+}; |
+#endif |
+ |
+struct lp_struct { |
+ struct pardevice *dev; |
+ unsigned long flags; |
+ unsigned int chars; |
+ unsigned int time; |
+ unsigned int wait; |
+ char *lp_buffer; |
+#ifdef LP_STATS |
+ unsigned int lastcall; |
+ unsigned int runchars; |
+ struct lp_stats stats; |
+#endif |
+ wait_queue_head_t waitq; |
+ unsigned int last_error; |
+ struct semaphore port_mutex; |
+ wait_queue_head_t dataq; |
+ long timeout; |
+ unsigned int best_mode; |
+ unsigned int current_mode; |
+ unsigned long bits; |
+}; |
+ |
+/* |
+ * The following constants describe the various signals of the printer port |
+ * hardware. Note that the hardware inverts some signals and that some |
+ * signals are active low. An example is LP_STROBE, which must be programmed |
+ * with 1 for being active and 0 for being inactive, because the strobe signal |
+ * gets inverted, but it is also active low. |
+ */ |
+ |
+ |
+/* |
+ * defines for 8255 control port |
+ * base + 2 |
+ * accessed with LP_C(minor) |
+ */ |
+#define LP_PINTEN 0x10 /* high to read data in or-ed with data out */ |
+#define LP_PSELECP 0x08 /* inverted output, active low */ |
+#define LP_PINITP 0x04 /* unchanged output, active low */ |
+#define LP_PAUTOLF 0x02 /* inverted output, active low */ |
+#define LP_PSTROBE 0x01 /* short high output on raising edge */ |
+ |
+/* |
+ * the value written to ports to test existence. PC-style ports will |
+ * return the value written. AT-style ports will return 0. so why not |
+ * make them the same ? |
+ */ |
+#define LP_DUMMY 0x00 |
+ |
+/* |
+ * This is the port delay time, in microseconds. |
+ * It is used only in the lp_init() and lp_reset() routine. |
+ */ |
+#define LP_DELAY 50 |
+ |
+/* |
+ * function prototypes |
+ */ |
+ |
+extern int lp_init(void); |
+ |
+#endif |
+ |
+#endif |
Index: linuxc26/include/linux/atmioc.h |
=================================================================== |
--- linuxc26/include/linux/atmioc.h (nonexistent) |
+++ linuxc26/include/linux/atmioc.h (revision 422) |
@@ -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 |
Index: linuxc26/include/linux/mii.h |
=================================================================== |
--- linuxc26/include/linux/mii.h (nonexistent) |
+++ linuxc26/include/linux/mii.h (revision 422) |
@@ -0,0 +1,199 @@ |
+/* |
+ * 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 __LINUX_MII_H__ |
+#define __LINUX_MII_H__ |
+ |
+#include <linux/types.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_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 0x007f /* Unused... */ |
+#define BMCR_CTST 0x0080 /* Collision test */ |
+#define BMCR_FULLDPLX 0x0100 /* Full duplex */ |
+#define BMCR_ANRESTART 0x0200 /* Auto negotiation restart */ |
+#define BMCR_ISOLATE 0x0400 /* Disconnect DP83840 from MII */ |
+#define BMCR_PDOWN 0x0800 /* Powerdown the DP83840 */ |
+#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 the DP83840 */ |
+ |
+/* 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 0x07c0 /* Unused... */ |
+#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_10FULL 0x0040 /* Try for 10mbps full-duplex */ |
+#define ADVERTISE_100HALF 0x0080 /* Try for 100mbps half-duplex */ |
+#define ADVERTISE_100FULL 0x0100 /* Try for 100mbps full-duplex */ |
+#define ADVERTISE_100BASE4 0x0200 /* Try for 100mbps 4k packets */ |
+#define ADVERTISE_RESV 0x1c00 /* 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_10FULL 0x0040 /* Can do 10mbps full-duplex */ |
+#define LPA_100HALF 0x0080 /* Can do 100mbps half-duplex */ |
+#define LPA_100FULL 0x0100 /* Can do 100mbps full-duplex */ |
+#define LPA_100BASE4 0x0200 /* Can do 100mbps 4k packets */ |
+#define LPA_RESV 0x1c00 /* 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... */ |
+ |
+/* N-way test register. */ |
+#define NWAYTEST_RESV1 0x00ff /* Unused... */ |
+#define NWAYTEST_LOOPBACK 0x0100 /* Enable loopback for N-way */ |
+#define NWAYTEST_RESV2 0xfe00 /* Unused... */ |
+ |
+ |
+struct mii_if_info { |
+ int phy_id; |
+ int advertising; |
+ int phy_id_mask; |
+ int reg_num_mask; |
+ |
+ unsigned int full_duplex : 1; /* is full duplex? */ |
+ unsigned int force_media : 1; /* is autoneg. disabled? */ |
+ |
+ struct net_device *dev; |
+ int (*mdio_read) (struct net_device *dev, int phy_id, int location); |
+ void (*mdio_write) (struct net_device *dev, int phy_id, int location, int val); |
+}; |
+ |
+struct ethtool_cmd; |
+struct mii_ioctl_data; |
+ |
+extern int mii_link_ok (struct mii_if_info *mii); |
+extern int mii_nway_restart (struct mii_if_info *mii); |
+extern int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd); |
+extern int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd); |
+extern void mii_check_link (struct mii_if_info *mii); |
+extern unsigned int mii_check_media (struct mii_if_info *mii, |
+ unsigned int ok_to_print, |
+ unsigned int init_media); |
+extern int generic_mii_ioctl(struct mii_if_info *mii_if, |
+ struct mii_ioctl_data *mii_data, int cmd, |
+ unsigned int *duplex_changed); |
+ |
+ |
+ |
+/* 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; |
+}; |
+ |
+ |
+/** |
+ * mii_nway_result |
+ * @negotiated: value of MII ANAR and'd with ANLPAR |
+ * |
+ * Given a set of MII abilities, check each bit and returns the |
+ * currently supported media, in the priority order defined by |
+ * IEEE 802.3u. We use LPA_xxx constants but note this is not the |
+ * value of LPA solely, as described above. |
+ * |
+ * The one exception to IEEE 802.3u is that 100baseT4 is placed |
+ * between 100T-full and 100T-half. If your phy does not support |
+ * 100T4 this is fine. If your phy places 100T4 elsewhere in the |
+ * priority order, you will need to roll your own function. |
+ */ |
+static inline unsigned int mii_nway_result (unsigned int negotiated) |
+{ |
+ unsigned int ret; |
+ |
+ if (negotiated & LPA_100FULL) |
+ ret = LPA_100FULL; |
+ else if (negotiated & LPA_100BASE4) |
+ ret = LPA_100BASE4; |
+ else if (negotiated & LPA_100HALF) |
+ ret = LPA_100HALF; |
+ else if (negotiated & LPA_10FULL) |
+ ret = LPA_10FULL; |
+ else |
+ ret = LPA_10HALF; |
+ |
+ return ret; |
+} |
+ |
+/** |
+ * mii_duplex |
+ * @duplex_lock: Non-zero if duplex is locked at full |
+ * @negotiated: value of MII ANAR and'd with ANLPAR |
+ * |
+ * A small helper function for a common case. Returns one |
+ * if the media is operating or locked at full duplex, and |
+ * returns zero otherwise. |
+ */ |
+static inline unsigned int mii_duplex (unsigned int duplex_lock, |
+ unsigned int negotiated) |
+{ |
+ if (duplex_lock) |
+ return 1; |
+ if (mii_nway_result(negotiated) & LPA_DUPLEX) |
+ return 1; |
+ return 0; |
+} |
+ |
+ |
+#endif /* __LINUX_MII_H__ */ |
Index: linuxc26/include/linux/ncp.h |
=================================================================== |
--- linuxc26/include/linux/ncp.h (nonexistent) |
+++ linuxc26/include/linux/ncp.h (revision 422) |
@@ -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 __attribute__((packed)); |
+ __u8 sequence __attribute__((packed)); |
+ __u8 conn_low __attribute__((packed)); |
+ __u8 task __attribute__((packed)); |
+ __u8 conn_high __attribute__((packed)); |
+ __u8 function __attribute__((packed)); |
+ __u8 data[0] __attribute__((packed)); |
+}; |
+ |
+#define NCP_REPLY (0x3333) |
+#define NCP_WATCHDOG (0x3E3E) |
+#define NCP_POSITIVE_ACK (0x9999) |
+ |
+struct ncp_reply_header { |
+ __u16 type __attribute__((packed)); |
+ __u8 sequence __attribute__((packed)); |
+ __u8 conn_low __attribute__((packed)); |
+ __u8 task __attribute__((packed)); |
+ __u8 conn_high __attribute__((packed)); |
+ __u8 completion_code __attribute__((packed)); |
+ __u8 connection_state __attribute__((packed)); |
+ __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 (ntohs(0x0100)) |
+#define AR_WRITE (ntohs(0x0200)) |
+#define AR_EXCLUSIVE (ntohs(0x2000)) |
+ |
+#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 (ntohl(0x01000000L)) |
+#define RIM_SPACE_ALLOCATED (ntohl(0x02000000L)) |
+#define RIM_ATTRIBUTES (ntohl(0x04000000L)) |
+#define RIM_DATA_SIZE (ntohl(0x08000000L)) |
+#define RIM_TOTAL_SIZE (ntohl(0x10000000L)) |
+#define RIM_EXT_ATTR_INFO (ntohl(0x20000000L)) |
+#define RIM_ARCHIVE (ntohl(0x40000000L)) |
+#define RIM_MODIFY (ntohl(0x80000000L)) |
+#define RIM_CREATION (ntohl(0x00010000L)) |
+#define RIM_OWNING_NAMESPACE (ntohl(0x00020000L)) |
+#define RIM_DIRECTORY (ntohl(0x00040000L)) |
+#define RIM_RIGHTS (ntohl(0x00080000L)) |
+#define RIM_ALL (ntohl(0xFF0F0000L)) |
+#define RIM_COMPRESSED_INFO (ntohl(0x00000080L)) |
+ |
+/* 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 __attribute__((packed)); |
+ __u32 attributes __attribute__((packed)); |
+ __u16 flags __attribute__((packed)); |
+ __u32 dataStreamSize __attribute__((packed)); |
+ __u32 totalStreamSize __attribute__((packed)); |
+ __u16 numberOfStreams __attribute__((packed)); |
+ __u16 creationTime __attribute__((packed)); |
+ __u16 creationDate __attribute__((packed)); |
+ __u32 creatorID __attribute__((packed)); |
+ __u16 modifyTime __attribute__((packed)); |
+ __u16 modifyDate __attribute__((packed)); |
+ __u32 modifierID __attribute__((packed)); |
+ __u16 lastAccessDate __attribute__((packed)); |
+ __u16 archiveTime __attribute__((packed)); |
+ __u16 archiveDate __attribute__((packed)); |
+ __u32 archiverID __attribute__((packed)); |
+ __u16 inheritedRightsMask __attribute__((packed)); |
+ __u32 dirEntNum __attribute__((packed)); |
+ __u32 DosDirNum __attribute__((packed)); |
+ __u32 volNumber __attribute__((packed)); |
+ __u32 EADataSize __attribute__((packed)); |
+ __u32 EAKeyCount __attribute__((packed)); |
+ __u32 EAKeySize __attribute__((packed)); |
+ __u32 NSCreator __attribute__((packed)); |
+ __u8 nameLen __attribute__((packed)); |
+ __u8 entryName[256] __attribute__((packed)); |
+ /* libncp may depend on there being nothing after entryName */ |
+#ifdef __KERNEL__ |
+ struct nw_nfs_info nfs; |
+#endif |
+}; |
+ |
+/* modify mask - use with MODIFY_DOS_INFO structure */ |
+#define DM_ATTRIBUTES (ntohl(0x02000000L)) |
+#define DM_CREATE_DATE (ntohl(0x04000000L)) |
+#define DM_CREATE_TIME (ntohl(0x08000000L)) |
+#define DM_CREATOR_ID (ntohl(0x10000000L)) |
+#define DM_ARCHIVE_DATE (ntohl(0x20000000L)) |
+#define DM_ARCHIVE_TIME (ntohl(0x40000000L)) |
+#define DM_ARCHIVER_ID (ntohl(0x80000000L)) |
+#define DM_MODIFY_DATE (ntohl(0x00010000L)) |
+#define DM_MODIFY_TIME (ntohl(0x00020000L)) |
+#define DM_MODIFIER_ID (ntohl(0x00040000L)) |
+#define DM_LAST_ACCESS_DATE (ntohl(0x00080000L)) |
+#define DM_INHERITED_RIGHTS_MASK (ntohl(0x00100000L)) |
+#define DM_MAXIMUM_SPACE (ntohl(0x00200000L)) |
+ |
+struct nw_modify_dos_info { |
+ __u32 attributes __attribute__((packed)); |
+ __u16 creationDate __attribute__((packed)); |
+ __u16 creationTime __attribute__((packed)); |
+ __u32 creatorID __attribute__((packed)); |
+ __u16 modifyDate __attribute__((packed)); |
+ __u16 modifyTime __attribute__((packed)); |
+ __u32 modifierID __attribute__((packed)); |
+ __u16 archiveDate __attribute__((packed)); |
+ __u16 archiveTime __attribute__((packed)); |
+ __u32 archiverID __attribute__((packed)); |
+ __u16 lastAccessDate __attribute__((packed)); |
+ __u16 inheritanceGrantMask __attribute__((packed)); |
+ __u16 inheritanceRevokeMask __attribute__((packed)); |
+ __u32 maximumSpace __attribute__((packed)); |
+}; |
+ |
+struct nw_search_sequence { |
+ __u8 volNumber __attribute__((packed)); |
+ __u32 dirBase __attribute__((packed)); |
+ __u32 sequence __attribute__((packed)); |
+}; |
+ |
+#endif /* _LINUX_NCP_H */ |
Index: linuxc26/include/linux/suspend.h |
=================================================================== |
--- linuxc26/include/linux/suspend.h (nonexistent) |
+++ linuxc26/include/linux/suspend.h (revision 422) |
@@ -0,0 +1,75 @@ |
+#ifndef _LINUX_SWSUSP_H |
+#define _LINUX_SWSUSP_H |
+ |
+#ifdef CONFIG_X86 |
+#include <asm/suspend.h> |
+#endif |
+#include <linux/swap.h> |
+#include <linux/notifier.h> |
+#include <linux/config.h> |
+#include <linux/init.h> |
+#include <linux/pm.h> |
+ |
+#ifdef CONFIG_PM |
+/* page backup entry */ |
+typedef struct pbe { |
+ unsigned long address; /* address of the copy */ |
+ unsigned long orig_address; /* original address of page */ |
+ swp_entry_t swap_address; |
+ swp_entry_t dummy; /* we need scratch space at |
+ * end of page (see link, diskpage) |
+ */ |
+} suspend_pagedir_t; |
+ |
+#define SWAP_FILENAME_MAXLENGTH 32 |
+ |
+struct suspend_header { |
+ __u32 version_code; |
+ unsigned long num_physpages; |
+ char machine[8]; |
+ char version[20]; |
+ int num_cpus; |
+ int page_size; |
+ suspend_pagedir_t *suspend_pagedir; |
+ unsigned int num_pbes; |
+ struct swap_location { |
+ char filename[SWAP_FILENAME_MAXLENGTH]; |
+ } swap_location[MAX_SWAPFILES]; |
+}; |
+ |
+#define SUSPEND_PD_PAGES(x) (((x)*sizeof(struct pbe))/PAGE_SIZE+1) |
+ |
+/* mm/vmscan.c */ |
+extern int shrink_mem(void); |
+ |
+/* mm/page_alloc.c */ |
+extern void drain_local_pages(void); |
+ |
+extern unsigned int nr_copy_pages __nosavedata; |
+extern suspend_pagedir_t *pagedir_nosave __nosavedata; |
+#endif /* CONFIG_PM */ |
+ |
+#ifdef CONFIG_SOFTWARE_SUSPEND |
+ |
+extern unsigned char software_suspend_enabled; |
+ |
+extern void software_suspend(void); |
+#else /* CONFIG_SOFTWARE_SUSPEND */ |
+static inline void software_suspend(void) |
+{ |
+ printk("Warning: fake suspend called\n"); |
+} |
+#endif /* CONFIG_SOFTWARE_SUSPEND */ |
+ |
+ |
+#ifdef CONFIG_PM |
+extern void refrigerator(unsigned long); |
+ |
+#else |
+static inline void refrigerator(unsigned long flag) |
+{ |
+ |
+} |
+#endif /* CONFIG_PM */ |
+ |
+#endif /* _LINUX_SWSUSP_H */ |
Index: linuxc26/include/linux/uinput.h |
=================================================================== |
--- linuxc26/include/linux/uinput.h (nonexistent) |
+++ linuxc26/include/linux/uinput.h (revision 422) |
@@ -0,0 +1,75 @@ |
+#ifndef __UINPUT_H_ |
+#define __UINPUT_H_ |
+/* |
+ * 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.1 20/06/2002 |
+ * - first public version |
+ */ |
+#ifdef __KERNEL__ |
+#define UINPUT_MINOR 223 |
+#define UINPUT_NAME "uinput" |
+#define UINPUT_BUFFER_SIZE 16 |
+ |
+/* state flags => bit index for {set|clear|test}_bit ops */ |
+#define UIST_CREATED 0 |
+ |
+struct uinput_device { |
+ struct input_dev *dev; |
+ unsigned long state; |
+ wait_queue_head_t waitq; |
+ unsigned char ready, |
+ head, |
+ tail; |
+ struct input_event buff[UINPUT_BUFFER_SIZE]; |
+}; |
+#endif /* __KERNEL__ */ |
+ |
+/* 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) |
+ |
+#ifndef NBITS |
+#define NBITS(x) ((((x)-1)/(sizeof(long)*8))+1) |
+#endif /* NBITS */ |
+ |
+#define UINPUT_MAX_NAME_SIZE 80 |
+struct uinput_user_dev { |
+ char name[UINPUT_MAX_NAME_SIZE]; |
+ struct input_id id; |
+ int ff_effects_max; |
+ int absmax[ABS_MAX + 1]; |
+ int absmin[ABS_MAX + 1]; |
+ int absfuzz[ABS_MAX + 1]; |
+ int absflat[ABS_MAX + 1]; |
+}; |
+#endif /* __UINPUT_H_ */ |
+ |
Index: linuxc26/include/linux/prctl.h |
=================================================================== |
--- linuxc26/include/linux/prctl.h (nonexistent) |
+++ linuxc26/include/linux/prctl.h (revision 422) |
@@ -0,0 +1,47 @@ |
+#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 */ |
+#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_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 */ |
+ |
+ |
+#endif /* _LINUX_PRCTL_H */ |
Index: linuxc26/include/linux/ftape-header-segment.h |
=================================================================== |
--- linuxc26/include/linux/ftape-header-segment.h (nonexistent) |
+++ linuxc26/include/linux/ftape-header-segment.h (revision 422) |
@@ -0,0 +1,122 @@ |
+#ifndef _FTAPE_HEADER_SEGMENT_H |
+#define _FTAPE_HEADER_SEGMENT_H |
+ |
+/* |
+ * Copyright (C) 1996-1997 Claus-Justus Heine. |
+ |
+ 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. |
+ |
+ You should have received a copy of the GNU General Public License |
+ along with this program; see the file COPYING. If not, write to |
+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. |
+ |
+ * |
+ * $Source: /home/fabio/w/shark/sharkcvs/CVSROOT/shark/drivers/linuxc26/include/linux/ftape-header-segment.h,v $ |
+ * $Revision: 1.1 $ |
+ * $Date: 2004-01-28 15:25:20 $ |
+ * |
+ * This file defines some offsets into the header segment of a |
+ * floppy tape cartridge. For use with the QIC-40/80/3010/3020 |
+ * floppy-tape driver "ftape" for Linux. |
+ */ |
+ |
+#define FT_SIGNATURE 0 /* must be 0xaa55aa55 */ |
+#define FT_FMT_CODE 4 |
+#define FT_REV_LEVEL 5 /* only for QIC-80 since. Rev. L (== 0x0c) */ |
+#define FT_HSEG_1 6 /* first header segment, except for format code 6 */ |
+#define FT_HSEG_2 8 /* second header segment, except for format code 6 */ |
+#define FT_FRST_SEG 10 /* first data segment, except for format code 6 */ |
+#define FT_LAST_SEG 12 /* last data segment, except for format code 6 */ |
+#define FT_FMT_DATE 14 /* date and time of most recent format, see below */ |
+#define FT_WR_DATE 18 /* date and time of most recent write or format */ |
+#define FT_SPT 24 /* segments per track */ |
+#define FT_TPC 26 /* tracks per cartridge */ |
+#define FT_FHM 27 /* floppy drive head (maximum of it) */ |
+#define FT_FTM 28 /* floppy track max. */ |
+#define FT_FSM 29 /* floppy sector max. (128) */ |
+#define FT_LABEL 30 /* floppy tape label */ |
+#define FT_LABEL_DATE 74 /* date and time the tape label was written */ |
+#define FT_LABEL_SZ (FT_LABEL_DATE - FT_LABEL) |
+#define FT_CMAP_START 78 /* starting segment of compression map */ |
+#define FT_FMT_ERROR 128 /* must be set to 0xff if remainder gets lost during |
+ * tape format |
+ */ |
+#define FT_SEG_CNT 130 /* number of seg. written, formatted or verified |
+ * through lifetime of tape (why not read?) |
+ */ |
+#define FT_INIT_DATE 138 /* date and time of initial tape format */ |
+#define FT_FMT_CNT 142 /* number of times tape has been formatted */ |
+#define FT_FSL_CNT 144 /* number of segments in failed sector log */ |
+#define FT_MK_CODE 146 /* id string of tape manufacturer */ |
+#define FT_LOT_CODE 190 /* tape manufacturer lot code */ |
+#define FT_6_HSEG_1 234 /* first header segment for format code 6 */ |
+#define FT_6_HSEG_2 238 /* second header segment for format code 6 */ |
+#define FT_6_FRST_SEG 242 /* first data segment for format code 6 */ |
+#define FT_6_LAST_SEG 246 /* last data segment for format code 6 */ |
+ |
+#define FT_FSL 256 |
+#define FT_HEADER_END 256 /* space beyond this point: |
+ * format codes 2, 3 and 5: |
+ * - failed sector log until byte 2047 |
+ * - bad sector map in the reamining part of segment |
+ * format codes 4 and 6: |
+ * - bad sector map starts hear |
+ */ |
+ |
+ |
+/* value to be stored at the FT_SIGNATURE offset |
+ */ |
+#define FT_HSEG_MAGIC 0xaa55aa55 |
+#define FT_D2G_MAGIC 0x82288228 /* Ditto 2GB */ |
+ |
+/* data and time encoding: */ |
+#define FT_YEAR_SHIFT 25 |
+#define FT_YEAR_MASK 0xfe000000 |
+#define FT_YEAR_0 1970 |
+#define FT_YEAR_MAX 127 |
+#define FT_YEAR(year) ((((year)-FT_YEAR_0)<<FT_YEAR_SHIFT)&FT_YEAR_MASK) |
+ |
+#define FT_TIME_SHIFT 0 |
+#define FT_TIME_MASK 0x01FFFFFF |
+#define FT_TIME_MAX 0x01ea6dff /* last second of a year */ |
+#define FT_TIME(mo,d,h,m,s) \ |
+ ((((s)+60*((m)+60*((h)+24*((d)+31*(mo))))) & FT_TIME_MASK)) |
+ |
+#define FT_TIME_STAMP(y,mo,d,h,m,s) (FT_YEAR(y) | FT_TIME(mo,d,h,m,s)) |
+ |
+/* values for the format code field */ |
+typedef enum { |
+ fmt_normal = 2, /* QIC-80 post Rev. B 205Ft or 307Ft tape */ |
+ fmt_1100ft = 3, /* QIC-80 post Rev. B 1100Ft tape */ |
+ fmt_var = 4, /* QIC-80 post Rev. B variabel length format */ |
+ fmt_425ft = 5, /* QIC-80 post Rev. B 425Ft tape */ |
+ fmt_big = 6 /* QIC-3010/3020 variable length tape with more |
+ * than 2^16 segments per tape |
+ */ |
+} ft_format_type; |
+ |
+/* definitions for the failed sector log */ |
+#define FT_FSL_SIZE (2 * FT_SECTOR_SIZE - FT_HEADER_END) |
+#define FT_FSL_MAX_ENTRIES (FT_FSL_SIZE/sizeof(__u32)) |
+ |
+typedef struct ft_fsl_entry { |
+ __u16 segment; |
+ __u16 date; |
+} __attribute__ ((packed)) ft_fsl_entry; |
+ |
+ |
+/* date encoding for the failed sector log |
+ * month: 1..12, day: 1..31, year: 1970..2097 |
+ */ |
+#define FT_FSL_TIME_STAMP(y,m,d) \ |
+ (((((y) - FT_YEAR_0)<<9)&0xfe00) | (((m)<<5)&0x01e0) | ((d)&0x001f)) |
+ |
+#endif /* _FTAPE_HEADER_SEGMENT_H */ |
Index: linuxc26/include/linux/genhd.h |
=================================================================== |
--- linuxc26/include/linux/genhd.h (nonexistent) |
+++ linuxc26/include/linux/genhd.h (revision 422) |
@@ -0,0 +1,382 @@ |
+#ifndef _LINUX_GENHD_H |
+#define _LINUX_GENHD_H |
+ |
+/* |
+ * genhd.h Copyright (C) 1992 Drew Eckhardt |
+ * Generic hard disk header file by |
+ * Drew Eckhardt |
+ * |
+ * <drew@colorado.edu> |
+ */ |
+ |
+#include <linux/config.h> |
+#include <linux/types.h> |
+#include <linux/major.h> |
+#include <linux/device.h> |
+#include <linux/smp.h> |
+#include <linux/string.h> |
+#include <linux/fs.h> |
+ |
+enum { |
+/* These three have identical behaviour; use the second one if DOS FDISK gets |
+ confused about extended/logical partitions starting past cylinder 1023. */ |
+ DOS_EXTENDED_PARTITION = 5, |
+ LINUX_EXTENDED_PARTITION = 0x85, |
+ WIN98_EXTENDED_PARTITION = 0x0f, |
+ |
+ LINUX_SWAP_PARTITION = 0x82, |
+ LINUX_RAID_PARTITION = 0xfd, /* autodetect RAID partition */ |
+ |
+ SOLARIS_X86_PARTITION = LINUX_SWAP_PARTITION, |
+ |
+ DM6_AUX1PARTITION = 0x51, /* no DDO: use xlated geom */ |
+ DM6_AUX3PARTITION = 0x53, /* no DDO: use xlated geom */ |
+ DM6_PARTITION = 0x54, /* has DDO: use xlated geom & offset */ |
+ EZD_PARTITION = 0x55, /* EZ-DRIVE */ |
+ |
+ FREEBSD_PARTITION = 0xa5, /* FreeBSD Partition ID */ |
+ OPENBSD_PARTITION = 0xa6, /* OpenBSD Partition ID */ |
+ NETBSD_PARTITION = 0xa9, /* NetBSD Partition ID */ |
+ BSDI_PARTITION = 0xb7, /* BSDI Partition ID */ |
+ MINIX_PARTITION = 0x81, /* Minix Partition ID */ |
+ UNIXWARE_PARTITION = 0x63, /* Same as GNU_HURD and SCO Unix */ |
+}; |
+ |
+struct partition { |
+ unsigned char boot_ind; /* 0x80 - active */ |
+ unsigned char head; /* starting head */ |
+ unsigned char sector; /* starting sector */ |
+ unsigned char cyl; /* starting cylinder */ |
+ unsigned char sys_ind; /* What partition type */ |
+ unsigned char end_head; /* end head */ |
+ unsigned char end_sector; /* end sector */ |
+ unsigned char end_cyl; /* end cylinder */ |
+ unsigned int start_sect; /* starting sector counting from 0 */ |
+ unsigned int nr_sects; /* nr of sectors in partition */ |
+} __attribute__((packed)); |
+ |
+#ifdef __KERNEL__ |
+struct hd_struct { |
+ sector_t start_sect; |
+ sector_t nr_sects; |
+ struct kobject kobj; |
+ unsigned reads, read_sectors, writes, write_sectors; |
+ int policy, partno; |
+}; |
+ |
+#define GENHD_FL_REMOVABLE 1 |
+#define GENHD_FL_DRIVERFS 2 |
+#define GENHD_FL_CD 8 |
+#define GENHD_FL_UP 16 |
+ |
+struct disk_stats { |
+ unsigned read_sectors, write_sectors; |
+ unsigned reads, writes; |
+ unsigned read_merges, write_merges; |
+ unsigned read_ticks, write_ticks; |
+ unsigned io_ticks; |
+ unsigned time_in_queue; |
+}; |
+ |
+struct gendisk { |
+ int major; /* major number of driver */ |
+ int first_minor; |
+ int minors; |
+ char disk_name[16]; /* name of major driver */ |
+ struct hd_struct **part; /* [indexed by minor] */ |
+ struct block_device_operations *fops; |
+ struct request_queue *queue; |
+ void *private_data; |
+ sector_t capacity; |
+ |
+ int flags; |
+ char devfs_name[64]; /* devfs crap */ |
+ int number; /* more of the same */ |
+ struct device *driverfs_dev; |
+ struct kobject kobj; |
+ |
+ struct timer_rand_state *random; |
+ int policy; |
+ |
+ unsigned sync_io; /* RAID */ |
+ unsigned long stamp, stamp_idle; |
+ int in_flight; |
+#ifdef CONFIG_SMP |
+ struct disk_stats *dkstats; |
+#else |
+ struct disk_stats dkstats; |
+#endif |
+}; |
+ |
+/* |
+ * Macros to operate on percpu disk statistics: |
+ * Since writes to disk_stats are serialised through the queue_lock, |
+ * smp_processor_id() should be enough to get to the per_cpu versions |
+ * of statistics counters |
+ */ |
+#ifdef CONFIG_SMP |
+#define disk_stat_add(gendiskp, field, addnd) \ |
+ (per_cpu_ptr(gendiskp->dkstats, smp_processor_id())->field += addnd) |
+#define disk_stat_read(gendiskp, field) \ |
+({ \ |
+ typeof(gendiskp->dkstats->field) res = 0; \ |
+ int i; \ |
+ for (i=0; i < NR_CPUS; i++) { \ |
+ if (!cpu_possible(i)) \ |
+ continue; \ |
+ res += per_cpu_ptr(gendiskp->dkstats, i)->field; \ |
+ } \ |
+ res; \ |
+}) |
+ |
+static inline void disk_stat_set_all(struct gendisk *gendiskp, int value) { |
+ int i; |
+ for (i=0; i < NR_CPUS; i++) { |
+ if (cpu_possible(i)) { |
+ memset(per_cpu_ptr(gendiskp->dkstats, i), value, |
+ sizeof (struct disk_stats)); |
+ } |
+ } |
+} |
+ |
+#else |
+#define disk_stat_add(gendiskp, field, addnd) (gendiskp->dkstats.field += addnd) |
+#define disk_stat_read(gendiskp, field) (gendiskp->dkstats.field) |
+ |
+static inline void disk_stat_set_all(struct gendisk *gendiskp, int value) { |
+ memset(&gendiskp->dkstats, value, sizeof (struct disk_stats)); |
+} |
+#endif |
+ |
+#define disk_stat_inc(gendiskp, field) disk_stat_add(gendiskp, field, 1) |
+#define disk_stat_dec(gendiskp, field) disk_stat_add(gendiskp, field, -1) |
+#define disk_stat_sub(gendiskp, field, subnd) \ |
+ disk_stat_add(gendiskp, field, -subnd) |
+ |
+ |
+/* Inlines to alloc and free disk stats in struct gendisk */ |
+#ifdef CONFIG_SMP |
+static inline int init_disk_stats(struct gendisk *disk) |
+{ |
+ disk->dkstats = alloc_percpu(struct disk_stats); |
+ if (!disk->dkstats) |
+ return 0; |
+ return 1; |
+} |
+ |
+static inline void free_disk_stats(struct gendisk *disk) |
+{ |
+ free_percpu(disk->dkstats); |
+} |
+#else /* CONFIG_SMP */ |
+static inline int init_disk_stats(struct gendisk *disk) |
+{ |
+ return 1; |
+} |
+ |
+static inline void free_disk_stats(struct gendisk *disk) |
+{ |
+} |
+#endif /* CONFIG_SMP */ |
+ |
+/* drivers/block/ll_rw_blk.c */ |
+extern void disk_round_stats(struct gendisk *disk); |
+ |
+/* drivers/block/genhd.c */ |
+extern void add_disk(struct gendisk *disk); |
+extern void del_gendisk(struct gendisk *gp); |
+extern void unlink_gendisk(struct gendisk *gp); |
+extern struct gendisk *get_gendisk(dev_t dev, int *part); |
+ |
+extern void set_device_ro(struct block_device *bdev, int flag); |
+extern void set_disk_ro(struct gendisk *disk, int flag); |
+ |
+/* drivers/char/random.c */ |
+extern void add_disk_randomness(struct gendisk *disk); |
+extern void rand_initialize_disk(struct gendisk *disk); |
+ |
+static inline sector_t get_start_sect(struct block_device *bdev) |
+{ |
+ return bdev->bd_contains == bdev ? 0 : bdev->bd_part->start_sect; |
+} |
+static inline sector_t get_capacity(struct gendisk *disk) |
+{ |
+ return disk->capacity; |
+} |
+static inline void set_capacity(struct gendisk *disk, sector_t size) |
+{ |
+ disk->capacity = size; |
+} |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#ifdef CONFIG_SOLARIS_X86_PARTITION |
+ |
+#define SOLARIS_X86_NUMSLICE 8 |
+#define SOLARIS_X86_VTOC_SANE (0x600DDEEEUL) |
+ |
+struct solaris_x86_slice { |
+ ushort s_tag; /* ID tag of partition */ |
+ ushort s_flag; /* permission flags */ |
+ unsigned int s_start; /* start sector no of partition */ |
+ unsigned int s_size; /* # of blocks in partition */ |
+}; |
+ |
+struct solaris_x86_vtoc { |
+ unsigned int v_bootinfo[3]; /* info needed by mboot (unsupported) */ |
+ unsigned int v_sanity; /* to verify vtoc sanity */ |
+ unsigned int v_version; /* layout version */ |
+ char v_volume[8]; /* volume name */ |
+ ushort v_sectorsz; /* sector size in bytes */ |
+ ushort v_nparts; /* number of partitions */ |
+ unsigned int v_reserved[10]; /* free space */ |
+ struct solaris_x86_slice |
+ v_slice[SOLARIS_X86_NUMSLICE]; /* slice headers */ |
+ unsigned int timestamp[SOLARIS_X86_NUMSLICE]; /* timestamp (unsupported) */ |
+ char v_asciilabel[128]; /* for compatibility */ |
+}; |
+ |
+#endif /* CONFIG_SOLARIS_X86_PARTITION */ |
+ |
+#ifdef CONFIG_BSD_DISKLABEL |
+/* |
+ * BSD disklabel support by Yossi Gottlieb <yogo@math.tau.ac.il> |
+ * updated by Marc Espie <Marc.Espie@openbsd.org> |
+ */ |
+ |
+/* check against BSD src/sys/sys/disklabel.h for consistency */ |
+ |
+#define BSD_DISKMAGIC (0x82564557UL) /* The disk magic number */ |
+#define BSD_MAXPARTITIONS 8 |
+#define OPENBSD_MAXPARTITIONS 16 |
+#define BSD_FS_UNUSED 0 /* disklabel unused partition entry ID */ |
+struct bsd_disklabel { |
+ __u32 d_magic; /* the magic number */ |
+ __s16 d_type; /* drive type */ |
+ __s16 d_subtype; /* controller/d_type specific */ |
+ char d_typename[16]; /* type name, e.g. "eagle" */ |
+ char d_packname[16]; /* pack identifier */ |
+ __u32 d_secsize; /* # of bytes per sector */ |
+ __u32 d_nsectors; /* # of data sectors per track */ |
+ __u32 d_ntracks; /* # of tracks per cylinder */ |
+ __u32 d_ncylinders; /* # of data cylinders per unit */ |
+ __u32 d_secpercyl; /* # of data sectors per cylinder */ |
+ __u32 d_secperunit; /* # of data sectors per unit */ |
+ __u16 d_sparespertrack; /* # of spare sectors per track */ |
+ __u16 d_sparespercyl; /* # of spare sectors per cylinder */ |
+ __u32 d_acylinders; /* # of alt. cylinders per unit */ |
+ __u16 d_rpm; /* rotational speed */ |
+ __u16 d_interleave; /* hardware sector interleave */ |
+ __u16 d_trackskew; /* sector 0 skew, per track */ |
+ __u16 d_cylskew; /* sector 0 skew, per cylinder */ |
+ __u32 d_headswitch; /* head switch time, usec */ |
+ __u32 d_trkseek; /* track-to-track seek, usec */ |
+ __u32 d_flags; /* generic flags */ |
+#define NDDATA 5 |
+ __u32 d_drivedata[NDDATA]; /* drive-type specific information */ |
+#define NSPARE 5 |
+ __u32 d_spare[NSPARE]; /* reserved for future use */ |
+ __u32 d_magic2; /* the magic number (again) */ |
+ __u16 d_checksum; /* xor of data incl. partitions */ |
+ |
+ /* filesystem and partition information: */ |
+ __u16 d_npartitions; /* number of partitions in following */ |
+ __u32 d_bbsize; /* size of boot area at sn0, bytes */ |
+ __u32 d_sbsize; /* max size of fs superblock, bytes */ |
+ struct bsd_partition { /* the partition table */ |
+ __u32 p_size; /* number of sectors in partition */ |
+ __u32 p_offset; /* starting sector */ |
+ __u32 p_fsize; /* filesystem basic fragment size */ |
+ __u8 p_fstype; /* filesystem type, see below */ |
+ __u8 p_frag; /* filesystem fragments per block */ |
+ __u16 p_cpg; /* filesystem cylinders per group */ |
+ } d_partitions[BSD_MAXPARTITIONS]; /* actually may be more */ |
+}; |
+ |
+#endif /* CONFIG_BSD_DISKLABEL */ |
+ |
+#ifdef CONFIG_UNIXWARE_DISKLABEL |
+/* |
+ * Unixware slices support by Andrzej Krzysztofowicz <ankry@mif.pg.gda.pl> |
+ * and Krzysztof G. Baranowski <kgb@knm.org.pl> |
+ */ |
+ |
+#define UNIXWARE_DISKMAGIC (0xCA5E600DUL) /* The disk magic number */ |
+#define UNIXWARE_DISKMAGIC2 (0x600DDEEEUL) /* The slice table magic nr */ |
+#define UNIXWARE_NUMSLICE 16 |
+#define UNIXWARE_FS_UNUSED 0 /* Unused slice entry ID */ |
+ |
+struct unixware_slice { |
+ __u16 s_label; /* label */ |
+ __u16 s_flags; /* permission flags */ |
+ __u32 start_sect; /* starting sector */ |
+ __u32 nr_sects; /* number of sectors in slice */ |
+}; |
+ |
+struct unixware_disklabel { |
+ __u32 d_type; /* drive type */ |
+ __u32 d_magic; /* the magic number */ |
+ __u32 d_version; /* version number */ |
+ char d_serial[12]; /* serial number of the device */ |
+ __u32 d_ncylinders; /* # of data cylinders per device */ |
+ __u32 d_ntracks; /* # of tracks per cylinder */ |
+ __u32 d_nsectors; /* # of data sectors per track */ |
+ __u32 d_secsize; /* # of bytes per sector */ |
+ __u32 d_part_start; /* # of first sector of this partition */ |
+ __u32 d_unknown1[12]; /* ? */ |
+ __u32 d_alt_tbl; /* byte offset of alternate table */ |
+ __u32 d_alt_len; /* byte length of alternate table */ |
+ __u32 d_phys_cyl; /* # of physical cylinders per device */ |
+ __u32 d_phys_trk; /* # of physical tracks per cylinder */ |
+ __u32 d_phys_sec; /* # of physical sectors per track */ |
+ __u32 d_phys_bytes; /* # of physical bytes per sector */ |
+ __u32 d_unknown2; /* ? */ |
+ __u32 d_unknown3; /* ? */ |
+ __u32 d_pad[8]; /* pad */ |
+ |
+ struct unixware_vtoc { |
+ __u32 v_magic; /* the magic number */ |
+ __u32 v_version; /* version number */ |
+ char v_name[8]; /* volume name */ |
+ __u16 v_nslices; /* # of slices */ |
+ __u16 v_unknown1; /* ? */ |
+ __u32 v_reserved[10]; /* reserved */ |
+ struct unixware_slice |
+ v_slice[UNIXWARE_NUMSLICE]; /* slice headers */ |
+ } vtoc; |
+ |
+}; /* 408 */ |
+ |
+#endif /* CONFIG_UNIXWARE_DISKLABEL */ |
+ |
+#ifdef CONFIG_MINIX_SUBPARTITION |
+# define MINIX_NR_SUBPARTITIONS 4 |
+#endif /* CONFIG_MINIX_SUBPARTITION */ |
+ |
+#ifdef __KERNEL__ |
+ |
+char *disk_name (struct gendisk *hd, int part, char *buf); |
+ |
+extern int rescan_partitions(struct gendisk *disk, struct block_device *bdev); |
+extern void add_partition(struct gendisk *, int, sector_t, sector_t); |
+extern void delete_partition(struct gendisk *, int); |
+ |
+extern struct gendisk *alloc_disk(int minors); |
+extern struct kobject *get_disk(struct gendisk *disk); |
+extern void put_disk(struct gendisk *disk); |
+ |
+extern void blk_register_region(dev_t dev, unsigned long range, |
+ struct module *module, |
+ struct kobject *(*probe)(dev_t, int *, void *), |
+ int (*lock)(dev_t, void *), |
+ void *data); |
+extern void blk_unregister_region(dev_t dev, unsigned long range); |
+ |
+static inline struct block_device *bdget_disk(struct gendisk *disk, int index) |
+{ |
+ return bdget(MKDEV(disk->major, disk->first_minor) + index); |
+} |
+ |
+#endif |
+ |
+#endif |
Index: linuxc26/include/linux/yam.h |
=================================================================== |
--- linuxc26/include/linux/yam.h (nonexistent) |
+++ linuxc26/include/linux/yam.h (revision 422) |
@@ -0,0 +1,82 @@ |
+/*****************************************************************************/ |
+ |
+/* |
+ * yam.h -- YAM radio modem driver. |
+ * |
+ * Copyright (C) 1998 Frederic Rible F1OAT (frible@teaser.fr) |
+ * Adapted from baycom.c driver written by 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. |
+ * |
+ * Please note that the GPL allows you to use the driver, NOT the radio. |
+ * In order to use the radio, you need a license from the communications |
+ * authority of your country. |
+ * |
+ * |
+ */ |
+ |
+/*****************************************************************************/ |
+ |
+#define SIOCYAMRESERVED (0) |
+#define SIOCYAMSCFG (1) /* Set configuration */ |
+#define SIOCYAMGCFG (2) /* Get configuration */ |
+#define SIOCYAMSMCS (3) /* Set mcs data */ |
+ |
+#define YAM_IOBASE (1 << 0) |
+#define YAM_IRQ (1 << 1) |
+#define YAM_BITRATE (1 << 2) /* Bit rate of radio port ->57600 */ |
+#define YAM_MODE (1 << 3) /* 0=simplex 1=duplex 2=duplex+tempo */ |
+#define YAM_HOLDDLY (1 << 4) /* duplex tempo (sec) */ |
+#define YAM_TXDELAY (1 << 5) /* Tx Delay (ms) */ |
+#define YAM_TXTAIL (1 << 6) /* Tx Tail (ms) */ |
+#define YAM_PERSIST (1 << 7) /* Persist (ms) */ |
+#define YAM_SLOTTIME (1 << 8) /* Slottime (ms) */ |
+#define YAM_BAUDRATE (1 << 9) /* Baud rate of rs232 port ->115200 */ |
+ |
+#define YAM_MAXBITRATE 57600 |
+#define YAM_MAXBAUDRATE 115200 |
+#define YAM_MAXMODE 2 |
+#define YAM_MAXHOLDDLY 99 |
+#define YAM_MAXTXDELAY 999 |
+#define YAM_MAXTXTAIL 999 |
+#define YAM_MAXPERSIST 255 |
+#define YAM_MAXSLOTTIME 999 |
+ |
+#define YAM_FPGA_SIZE 5302 |
+ |
+struct yamcfg { |
+ unsigned int mask; /* Mask of commands */ |
+ unsigned int iobase; /* IO Base of COM port */ |
+ unsigned int irq; /* IRQ of COM port */ |
+ unsigned int bitrate; /* Bit rate of radio port */ |
+ unsigned int baudrate; /* Baud rate of the RS232 port */ |
+ unsigned int txdelay; /* TxDelay */ |
+ unsigned int txtail; /* TxTail */ |
+ unsigned int persist; /* Persistence */ |
+ unsigned int slottime; /* Slottime */ |
+ unsigned int mode; /* mode 0 (simp), 1(Dupl), 2(Dupl+delay) */ |
+ unsigned int holddly; /* PTT delay in FullDuplex 2 mode */ |
+}; |
+ |
+struct yamdrv_ioctl_cfg { |
+ int cmd; |
+ struct yamcfg cfg; |
+}; |
+ |
+struct yamdrv_ioctl_mcs { |
+ int cmd; |
+ int bitrate; |
+ unsigned char bits[YAM_FPGA_SIZE]; |
+}; |
Index: linuxc26/include/linux/reboot.h |
=================================================================== |
--- linuxc26/include/linux/reboot.h (nonexistent) |
+++ linuxc26/include/linux/reboot.h (revision 422) |
@@ -0,0 +1,54 @@ |
+#ifndef _LINUX_REBOOT_H |
+#define _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. |
+ */ |
+ |
+#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 |
+ |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/notifier.h> |
+ |
+extern int register_reboot_notifier(struct notifier_block *); |
+extern int unregister_reboot_notifier(struct notifier_block *); |
+ |
+ |
+/* |
+ * Architecture-specific implementations of sys_reboot commands. |
+ */ |
+ |
+extern void machine_restart(char *cmd); |
+extern void machine_halt(void); |
+extern void machine_power_off(void); |
+ |
+#endif |
+ |
+#endif /* _LINUX_REBOOT_H */ |
Index: linuxc26/include/linux/dtlk.h |
=================================================================== |
--- linuxc26/include/linux/dtlk.h (nonexistent) |
+++ linuxc26/include/linux/dtlk.h (revision 422) |
@@ -0,0 +1,104 @@ |
+#if 0 |
+ |
+#define TRACE_TXT(text) \ |
+ { \ |
+ if(dtlk_trace) \ |
+ { \ |
+ console_print(text); \ |
+ console_print("\n"); \ |
+ } \ |
+ } |
+ |
+#define TRACE_CHR(chr) \ |
+ { \ |
+ if(dtlk_trace) \ |
+ console_print(chr); \ |
+ } \ |
+ |
+#endif |
+ |
+#define DTLK_MINOR 0 |
+#define DTLK_IO_EXTENT 0x02 |
+ |
+ /* ioctl's use magic number of 0xa3 */ |
+#define DTLK_INTERROGATE 0xa390 /* get settings from the DoubleTalk */ |
+#define DTLK_STATUS 0xa391 /* get status from the DoubleTalk */ |
+ |
+ |
+#define DTLK_CLEAR 0x18 /* stops speech */ |
+ |
+#define DTLK_MAX_RETRIES (loops_per_jiffy/(10000/HZ)) |
+ |
+ /* TTS Port Status Flags */ |
+#define TTS_READABLE 0x80 /* mask for bit which is nonzero if a |
+ byte can be read from the TTS port */ |
+#define TTS_SPEAKING 0x40 /* mask for SYNC bit, which is nonzero |
+ while DoubleTalk is producing |
+ output with TTS, PCM or CVSD |
+ synthesizers or tone generators |
+ (that is, all but LPC) */ |
+#define TTS_SPEAKING2 0x20 /* mask for SYNC2 bit, |
+ which falls to zero up to 0.4 sec |
+ before speech stops */ |
+#define TTS_WRITABLE 0x10 /* mask for RDY bit, which when set to |
+ 1, indicates the TTS port is ready |
+ to accept a byte of data. The RDY |
+ bit goes zero 2-3 usec after |
+ writing, and goes 1 again 180-190 |
+ usec later. */ |
+#define TTS_ALMOST_FULL 0x08 /* mask for AF bit: When set to 1, |
+ indicates that less than 300 free |
+ bytes are available in the TTS |
+ input buffer. AF is always 0 in the |
+ PCM, TGN and CVSD modes. */ |
+#define TTS_ALMOST_EMPTY 0x04 /* mask for AE bit: When set to 1, |
+ indicates that less than 300 bytes |
+ of data remain in DoubleTalk's |
+ input (TTS or PCM) buffer. AE is |
+ always 1 in the TGN and CVSD |
+ modes. */ |
+ |
+ /* LPC speak commands */ |
+#define LPC_5220_NORMAL 0x60 /* 5220 format decoding table, normal rate */ |
+#define LPC_5220_FAST 0x64 /* 5220 format decoding table, fast rate */ |
+#define LPC_D6_NORMAL 0x20 /* D6 format decoding table, normal rate */ |
+#define LPC_D6_FAST 0x24 /* D6 format decoding table, fast rate */ |
+ |
+ /* LPC Port Status Flags (valid only after one of the LPC |
+ speak commands) */ |
+#define LPC_SPEAKING 0x80 /* mask for TS bit: When set to 1, |
+ indicates the LPC synthesizer is |
+ producing speech.*/ |
+#define LPC_BUFFER_LOW 0x40 /* mask for BL bit: When set to 1, |
+ indicates that the hardware LPC |
+ data buffer has less than 30 bytes |
+ remaining. (Total internal buffer |
+ size = 4096 bytes.) */ |
+#define LPC_BUFFER_EMPTY 0x20 /* mask for BE bit: When set to 1, |
+ indicates that the LPC data buffer |
+ ran out of data (error condition if |
+ TS is also 1). */ |
+ |
+ /* data returned by Interrogate command */ |
+struct dtlk_settings |
+{ |
+ unsigned short serial_number; /* 0-7Fh:0-7Fh */ |
+ unsigned char rom_version[24]; /* null terminated string */ |
+ unsigned char mode; /* 0=Character; 1=Phoneme; 2=Text */ |
+ unsigned char punc_level; /* nB; 0-7 */ |
+ unsigned char formant_freq; /* nF; 0-9 */ |
+ unsigned char pitch; /* nP; 0-99 */ |
+ unsigned char speed; /* nS; 0-9 */ |
+ unsigned char volume; /* nV; 0-9 */ |
+ unsigned char tone; /* nX; 0-2 */ |
+ unsigned char expression; /* nE; 0-9 */ |
+ unsigned char ext_dict_loaded; /* 1=exception dictionary loaded */ |
+ unsigned char ext_dict_status; /* 1=exception dictionary enabled */ |
+ unsigned char free_ram; /* # pages (truncated) remaining for |
+ text buffer */ |
+ unsigned char articulation; /* nA; 0-9 */ |
+ unsigned char reverb; /* nR; 0-9 */ |
+ unsigned char eob; /* 7Fh value indicating end of |
+ parameter block */ |
+ unsigned char has_indexing; /* nonzero if indexing is implemented */ |
+}; |
Index: linuxc26/include/linux/if_arp.h |
=================================================================== |
--- linuxc26/include/linux/if_arp.h (nonexistent) |
+++ linuxc26/include/linux/if_arp.h (revision 422) |
@@ -0,0 +1,149 @@ |
+/* |
+ * 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, <bir7@leland.Stanford.Edu> |
+ * 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 _LINUX_IF_ARP_H |
+#define _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_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_VOID 0xFFFF /* Void type, nothing is known */ |
+ |
+/* 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 |
+{ |
+ unsigned short ar_hrd; /* format of hardware address */ |
+ unsigned short ar_pro; /* format of protocol address */ |
+ unsigned char ar_hln; /* length of hardware address */ |
+ unsigned char ar_pln; /* length of protocol address */ |
+ unsigned short 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 /* _LINUX_IF_ARP_H */ |
Index: linuxc26/include/linux/kbd_diacr.h |
=================================================================== |
--- linuxc26/include/linux/kbd_diacr.h (nonexistent) |
+++ linuxc26/include/linux/kbd_diacr.h (revision 422) |
@@ -0,0 +1,8 @@ |
+#ifndef _DIACR_H |
+#define _DIACR_H |
+#include <linux/kd.h> |
+ |
+extern struct kbdiacr accent_table[]; |
+extern unsigned int accent_table_size; |
+ |
+#endif /* _DIACR_H */ |
Index: linuxc26/include/linux/bootmem.h |
=================================================================== |
--- linuxc26/include/linux/bootmem.h (nonexistent) |
+++ linuxc26/include/linux/bootmem.h (revision 422) |
@@ -0,0 +1,70 @@ |
+/* |
+ * Discontiguous memory support, Kanoj Sarcar, SGI, Nov 1999 |
+ */ |
+#ifndef _LINUX_BOOTMEM_H |
+#define _LINUX_BOOTMEM_H |
+ |
+#include <asm/pgtable.h> |
+#include <asm/dma.h> |
+#include <linux/cache.h> |
+#include <linux/init.h> |
+#include <linux/mmzone.h> |
+ |
+/* |
+ * simple boot-time physical memory area allocator. |
+ */ |
+ |
+extern unsigned long max_low_pfn; |
+extern unsigned long min_low_pfn; |
+ |
+/* |
+ * highest page |
+ */ |
+extern unsigned long max_pfn; |
+ |
+/* |
+ * node_bootmem_map is a map pointer - the bits represent all physical |
+ * memory pages (including holes) on the node. |
+ */ |
+typedef struct bootmem_data { |
+ unsigned long node_boot_start; |
+ unsigned long node_low_pfn; |
+ void *node_bootmem_map; |
+ unsigned long last_offset; |
+ unsigned long last_pos; |
+ unsigned long last_success; /* Previous allocation point. To speed |
+ * up searching */ |
+} bootmem_data_t; |
+ |
+extern unsigned long __init bootmem_bootmap_pages (unsigned long); |
+extern unsigned long __init init_bootmem (unsigned long addr, unsigned long memend); |
+extern void __init free_bootmem (unsigned long addr, unsigned long size); |
+extern void * __init __alloc_bootmem (unsigned long size, unsigned long align, unsigned long goal); |
+#ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE |
+extern void __init reserve_bootmem (unsigned long addr, unsigned long size); |
+#define alloc_bootmem(x) \ |
+ __alloc_bootmem((x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) |
+#define alloc_bootmem_low(x) \ |
+ __alloc_bootmem((x), SMP_CACHE_BYTES, 0) |
+#define alloc_bootmem_pages(x) \ |
+ __alloc_bootmem((x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) |
+#define alloc_bootmem_low_pages(x) \ |
+ __alloc_bootmem((x), PAGE_SIZE, 0) |
+#endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */ |
+extern unsigned long __init free_all_bootmem (void); |
+ |
+extern unsigned long __init init_bootmem_node (pg_data_t *pgdat, unsigned long freepfn, unsigned long startpfn, unsigned long endpfn); |
+extern void __init reserve_bootmem_node (pg_data_t *pgdat, unsigned long physaddr, unsigned long size); |
+extern void __init free_bootmem_node (pg_data_t *pgdat, unsigned long addr, unsigned long size); |
+extern unsigned long __init free_all_bootmem_node (pg_data_t *pgdat); |
+extern void * __init __alloc_bootmem_node (pg_data_t *pgdat, unsigned long size, unsigned long align, unsigned long goal); |
+#ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE |
+#define alloc_bootmem_node(pgdat, x) \ |
+ __alloc_bootmem_node((pgdat), (x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) |
+#define alloc_bootmem_pages_node(pgdat, x) \ |
+ __alloc_bootmem_node((pgdat), (x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) |
+#define alloc_bootmem_low_pages_node(pgdat, x) \ |
+ __alloc_bootmem_node((pgdat), (x), PAGE_SIZE, 0) |
+#endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */ |
+ |
+#endif /* _LINUX_BOOTMEM_H */ |
Index: linuxc26/include/linux/ata.h |
=================================================================== |
--- linuxc26/include/linux/ata.h (nonexistent) |
+++ linuxc26/include/linux/ata.h (revision 422) |
@@ -0,0 +1,179 @@ |
+ |
+/* |
+ Copyright 2003 Red Hat, Inc. All rights reserved. |
+ Copyright 2003 Jeff Garzik |
+ |
+ The contents of this file are subject to the Open |
+ Software License version 1.1 that can be found at |
+ http://www.opensource.org/licenses/osl-1.1.txt and is included herein |
+ by reference. |
+ |
+ Alternatively, the contents of this file may be used under the terms |
+ of the GNU General Public License version 2 (the "GPL") as distributed |
+ in the kernel source COPYING file, in which case the provisions of |
+ the GPL are applicable instead of the above. If you wish to allow |
+ the use of your version of this file only under the terms of the |
+ GPL and not to allow others to use your version of this file under |
+ the OSL, indicate your decision by deleting the provisions above and |
+ replace them with the notice and other provisions required by the GPL. |
+ If you do not delete the provisions above, a recipient may use your |
+ version of this file under either the OSL or the GPL. |
+ |
+ */ |
+ |
+#ifndef __LINUX_ATA_H__ |
+#define __LINUX_ATA_H__ |
+ |
+/* defines only for the constants which don't work well as enums */ |
+#define ATA_DMA_BOUNDARY 0xffffUL |
+#define ATA_DMA_MASK 0xffffffffULL |
+ |
+enum { |
+ /* various global constants */ |
+ ATA_MAX_DEVICES = 2, /* per bus/port */ |
+ ATA_MAX_PRD = 256, /* we could make these 256/256 */ |
+ ATA_SECT_SIZE = 512, |
+ ATA_SECT_SIZE_MASK = (ATA_SECT_SIZE - 1), |
+ ATA_SECT_DWORDS = ATA_SECT_SIZE / sizeof(u32), |
+ |
+ ATA_ID_WORDS = 256, |
+ ATA_ID_PROD_OFS = 27, |
+ ATA_ID_SERNO_OFS = 10, |
+ ATA_ID_MAJOR_VER = 80, |
+ ATA_ID_PIO_MODES = 64, |
+ ATA_ID_UDMA_MODES = 88, |
+ ATA_ID_PIO4 = (1 << 1), |
+ |
+ ATA_PCI_CTL_OFS = 2, |
+ ATA_SERNO_LEN = 20, |
+ ATA_UDMA0 = (1 << 0), |
+ ATA_UDMA1 = ATA_UDMA0 | (1 << 1), |
+ ATA_UDMA2 = ATA_UDMA1 | (1 << 2), |
+ ATA_UDMA3 = ATA_UDMA2 | (1 << 3), |
+ ATA_UDMA4 = ATA_UDMA3 | (1 << 4), |
+ ATA_UDMA5 = ATA_UDMA4 | (1 << 5), |
+ ATA_UDMA6 = ATA_UDMA5 | (1 << 6), |
+ ATA_UDMA7 = ATA_UDMA6 | (1 << 7), |
+ /* ATA_UDMA7 is just for completeness... doesn't exist (yet?). */ |
+ |
+ ATA_UDMA_MASK_40C = ATA_UDMA2, /* udma0-2 */ |
+ |
+ /* DMA-related */ |
+ ATA_PRD_SZ = 8, |
+ ATA_PRD_TBL_SZ = (ATA_MAX_PRD * ATA_PRD_SZ), |
+ ATA_PRD_EOT = (1 << 31), /* end-of-table flag */ |
+ |
+ ATA_DMA_TABLE_OFS = 4, |
+ ATA_DMA_STATUS = 2, |
+ ATA_DMA_CMD = 0, |
+ ATA_DMA_WR = (1 << 3), |
+ ATA_DMA_START = (1 << 0), |
+ ATA_DMA_INTR = (1 << 2), |
+ ATA_DMA_ERR = (1 << 1), |
+ ATA_DMA_ACTIVE = (1 << 0), |
+ |
+ /* bits in ATA command block registers */ |
+ ATA_HOB = (1 << 7), /* LBA48 selector */ |
+ ATA_NIEN = (1 << 1), /* disable-irq flag */ |
+ ATA_LBA = (1 << 6), /* LBA28 selector */ |
+ ATA_DEV1 = (1 << 4), /* Select Device 1 (slave) */ |
+ ATA_BUSY = (1 << 7), /* BSY status bit */ |
+ ATA_DEVICE_OBS = (1 << 7) | (1 << 5), /* obs bits in dev reg */ |
+ ATA_DEVCTL_OBS = (1 << 3), /* obsolete bit in devctl reg */ |
+ ATA_DRQ = (1 << 3), /* data request i/o */ |
+ ATA_ERR = (1 << 0), /* have an error */ |
+ ATA_SRST = (1 << 2), /* software reset */ |
+ ATA_ABORTED = (1 << 2), /* command aborted */ |
+ |
+ /* ATA command block registers */ |
+ ATA_REG_DATA = 0x00, |
+ ATA_REG_ERR = 0x01, |
+ ATA_REG_NSECT = 0x02, |
+ ATA_REG_LBAL = 0x03, |
+ ATA_REG_LBAM = 0x04, |
+ ATA_REG_LBAH = 0x05, |
+ ATA_REG_DEVICE = 0x06, |
+ ATA_REG_STATUS = 0x07, |
+ |
+ ATA_REG_FEATURE = ATA_REG_ERR, /* and their aliases */ |
+ ATA_REG_CMD = ATA_REG_STATUS, |
+ ATA_REG_BYTEL = ATA_REG_LBAM, |
+ ATA_REG_BYTEH = ATA_REG_LBAH, |
+ ATA_REG_DEVSEL = ATA_REG_DEVICE, |
+ ATA_REG_IRQ = ATA_REG_NSECT, |
+ |
+ /* ATA taskfile protocols */ |
+ ATA_PROT_UNKNOWN = 0, |
+ ATA_PROT_NODATA = 1, |
+ ATA_PROT_PIO_READ = 2, |
+ ATA_PROT_PIO_WRITE = 3, |
+ ATA_PROT_DMA_READ = 4, |
+ ATA_PROT_DMA_WRITE = 5, |
+ ATA_PROT_ATAPI = 6, |
+ ATA_PROT_ATAPI_DMA = 7, |
+ |
+ /* ATA device commands */ |
+ ATA_CMD_EDD = 0x90, /* execute device diagnostic */ |
+ ATA_CMD_ID_ATA = 0xEC, |
+ ATA_CMD_ID_ATAPI = 0xA1, |
+ ATA_CMD_READ = 0xC8, |
+ ATA_CMD_READ_EXT = 0x25, |
+ ATA_CMD_WRITE = 0xCA, |
+ ATA_CMD_WRITE_EXT = 0x35, |
+ ATA_CMD_PIO_READ = 0x20, |
+ ATA_CMD_PIO_READ_EXT = 0x24, |
+ ATA_CMD_PIO_WRITE = 0x30, |
+ ATA_CMD_PIO_WRITE_EXT = 0x34, |
+ ATA_CMD_SET_FEATURES = 0xEF, |
+ ATA_CMD_PACKET = 0xA0, |
+ |
+ /* SETFEATURES stuff */ |
+ SETFEATURES_XFER = 0x03, |
+ XFER_UDMA_7 = 0x47, |
+ XFER_UDMA_6 = 0x46, |
+ XFER_UDMA_5 = 0x45, |
+ XFER_UDMA_4 = 0x44, |
+ XFER_UDMA_3 = 0x43, |
+ XFER_UDMA_2 = 0x42, |
+ XFER_UDMA_1 = 0x41, |
+ XFER_UDMA_0 = 0x40, |
+ XFER_PIO_4 = 0x0C, |
+ XFER_PIO_3 = 0x0B, |
+ |
+ /* ATAPI stuff */ |
+ ATAPI_PKT_DMA = (1 << 0), |
+ |
+ /* cable types */ |
+ ATA_CBL_NONE = 0, |
+ ATA_CBL_PATA40 = 1, |
+ ATA_CBL_PATA80 = 2, |
+ ATA_CBL_PATA_UNK = 3, |
+ ATA_CBL_SATA = 4, |
+ |
+ /* SATA Status and Control Registers */ |
+ SCR_STATUS = 0, |
+ SCR_ERROR = 1, |
+ SCR_CONTROL = 2, |
+ SCR_ACTIVE = 3, |
+ SCR_NOTIFICATION = 4, |
+}; |
+ |
+/* core structures */ |
+struct ata_prd { |
+ u32 addr; |
+ u32 flags_len; |
+} __attribute__((packed)); |
+ |
+#define ata_id_is_ata(dev) (((dev)->id[0] & (1 << 15)) == 0) |
+#define ata_id_has_lba48(dev) ((dev)->id[83] & (1 << 10)) |
+#define ata_id_has_lba(dev) ((dev)->id[49] & (1 << 8)) |
+#define ata_id_has_dma(dev) ((dev)->id[49] & (1 << 9)) |
+#define ata_id_u32(dev,n) \ |
+ (((u32) (dev)->id[(n) + 1] << 16) | ((u32) (dev)->id[(n)])) |
+#define ata_id_u64(dev,n) \ |
+ ( ((u64) dev->id[(n) + 3] << 48) | \ |
+ ((u64) dev->id[(n) + 2] << 32) | \ |
+ ((u64) dev->id[(n) + 1] << 16) | \ |
+ ((u64) dev->id[(n) + 0]) ) |
+ |
+#endif /* __LINUX_ATA_H__ */ |
Index: linuxc26/include/linux/blkdev.h |
=================================================================== |
--- linuxc26/include/linux/blkdev.h (nonexistent) |
+++ linuxc26/include/linux/blkdev.h (revision 422) |
@@ -0,0 +1,696 @@ |
+#ifndef _LINUX_BLKDEV_H |
+#define _LINUX_BLKDEV_H |
+ |
+#include <linux/config.h> |
+#include <linux/major.h> |
+#include <linux/genhd.h> |
+#include <linux/list.h> |
+#include <linux/timer.h> |
+#include <linux/workqueue.h> |
+#include <linux/pagemap.h> |
+#include <linux/backing-dev.h> |
+#include <linux/wait.h> |
+#include <linux/mempool.h> |
+#include <linux/bio.h> |
+#include <linux/module.h> |
+#include <linux/stringify.h> |
+ |
+#include <asm/scatterlist.h> |
+ |
+struct request_queue; |
+typedef struct request_queue request_queue_t; |
+struct elevator_s; |
+typedef struct elevator_s elevator_t; |
+struct request_pm_state; |
+ |
+#define BLKDEV_MIN_RQ 4 |
+#define BLKDEV_MAX_RQ 128 /* Default maximum */ |
+ |
+/* |
+ * This is the per-process anticipatory I/O scheduler state. |
+ */ |
+struct as_io_context { |
+ spinlock_t lock; |
+ |
+ void (*dtor)(struct as_io_context *aic); /* destructor */ |
+ void (*exit)(struct as_io_context *aic); /* called on task exit */ |
+ |
+ unsigned long state; |
+ atomic_t nr_queued; /* queued reads & sync writes */ |
+ atomic_t nr_dispatched; /* number of requests gone to the drivers */ |
+ |
+ /* IO History tracking */ |
+ /* Thinktime */ |
+ unsigned long last_end_request; |
+ unsigned long ttime_total; |
+ unsigned long ttime_samples; |
+ unsigned long ttime_mean; |
+ /* Layout pattern */ |
+ unsigned int seek_samples; |
+ sector_t last_request_pos; |
+ u64 seek_total; |
+ sector_t seek_mean; |
+}; |
+ |
+/* |
+ * This is the per-process I/O subsystem state. It is refcounted and |
+ * kmalloc'ed. Currently all fields are modified in process io context |
+ * (apart from the atomic refcount), so require no locking. |
+ */ |
+struct io_context { |
+ atomic_t refcount; |
+ pid_t pid; |
+ |
+ /* |
+ * For request batching |
+ */ |
+ unsigned long last_waited; /* Time last woken after wait for request */ |
+ int nr_batch_requests; /* Number of requests left in the batch */ |
+ |
+ struct as_io_context *aic; |
+}; |
+ |
+void put_io_context(struct io_context *ioc); |
+void exit_io_context(void); |
+struct io_context *get_io_context(int gfp_flags); |
+void copy_io_context(struct io_context **pdst, struct io_context **psrc); |
+void swap_io_context(struct io_context **ioc1, struct io_context **ioc2); |
+ |
+struct request_list { |
+ int count[2]; |
+ mempool_t *rq_pool; |
+ wait_queue_head_t wait[2]; |
+}; |
+ |
+#define BLK_MAX_CDB 16 |
+ |
+/* |
+ * try to put the fields that are referenced together in the same cacheline |
+ */ |
+struct request { |
+ struct list_head queuelist; /* looking for ->queue? you must _not_ |
+ * access it directly, use |
+ * blkdev_dequeue_request! */ |
+ unsigned long flags; /* see REQ_ bits below */ |
+ |
+ /* Maintain bio traversal state for part by part I/O submission. |
+ * hard_* are block layer internals, no driver should touch them! |
+ */ |
+ |
+ sector_t sector; /* next sector to submit */ |
+ unsigned long nr_sectors; /* no. of sectors left to submit */ |
+ /* no. of sectors left to submit in the current segment */ |
+ unsigned int current_nr_sectors; |
+ |
+ sector_t hard_sector; /* next sector to complete */ |
+ unsigned long hard_nr_sectors; /* no. of sectors left to complete */ |
+ /* no. of sectors left to complete in the current segment */ |
+ unsigned int hard_cur_sectors; |
+ |
+ /* no. of segments left to submit in the current bio */ |
+ unsigned short nr_cbio_segments; |
+ /* no. of sectors left to submit in the current bio */ |
+ unsigned long nr_cbio_sectors; |
+ |
+ struct bio *cbio; /* next bio to submit */ |
+ struct bio *bio; /* next unfinished bio to complete */ |
+ struct bio *biotail; |
+ |
+ void *elevator_private; |
+ |
+ int rq_status; /* should split this into a few status bits */ |
+ struct gendisk *rq_disk; |
+ int errors; |
+ unsigned long start_time; |
+ |
+ /* Number of scatter-gather DMA addr+len pairs after |
+ * physical address coalescing is performed. |
+ */ |
+ unsigned short nr_phys_segments; |
+ |
+ /* Number of scatter-gather addr+len pairs after |
+ * physical and DMA remapping hardware coalescing is performed. |
+ * This is the number of scatter-gather entries the driver |
+ * will actually have to deal with after DMA mapping is done. |
+ */ |
+ unsigned short nr_hw_segments; |
+ |
+ int tag; |
+ char *buffer; |
+ |
+ int ref_count; |
+ request_queue_t *q; |
+ struct request_list *rl; |
+ |
+ struct completion *waiting; |
+ void *special; |
+ |
+ /* |
+ * when request is used as a packet command carrier |
+ */ |
+ unsigned int cmd_len; |
+ unsigned char cmd[BLK_MAX_CDB]; |
+ |
+ unsigned int data_len; |
+ void *data; |
+ |
+ unsigned int sense_len; |
+ void *sense; |
+ |
+ unsigned int timeout; |
+ |
+ /* |
+ * For Power Management requests |
+ */ |
+ struct request_pm_state *pm; |
+}; |
+ |
+/* |
+ * first three bits match BIO_RW* bits, important |
+ */ |
+enum rq_flag_bits { |
+ __REQ_RW, /* not set, read. set, write */ |
+ __REQ_FAILFAST, /* no low level driver retries */ |
+ __REQ_SOFTBARRIER, /* may not be passed by ioscheduler */ |
+ __REQ_HARDBARRIER, /* may not be passed by drive either */ |
+ __REQ_CMD, /* is a regular fs rw request */ |
+ __REQ_NOMERGE, /* don't touch this for merging */ |
+ __REQ_STARTED, /* drive already may have started this one */ |
+ __REQ_DONTPREP, /* don't call prep for this one */ |
+ __REQ_QUEUED, /* uses queueing */ |
+ /* |
+ * for ATA/ATAPI devices |
+ */ |
+ __REQ_PC, /* packet command (special) */ |
+ __REQ_BLOCK_PC, /* queued down pc from block layer */ |
+ __REQ_SENSE, /* sense retrival */ |
+ |
+ __REQ_FAILED, /* set if the request failed */ |
+ __REQ_QUIET, /* don't worry about errors */ |
+ __REQ_SPECIAL, /* driver suplied command */ |
+ __REQ_DRIVE_CMD, |
+ __REQ_DRIVE_TASK, |
+ __REQ_DRIVE_TASKFILE, |
+ __REQ_PREEMPT, /* set for "ide_preempt" requests */ |
+ __REQ_PM_SUSPEND, /* suspend request */ |
+ __REQ_PM_RESUME, /* resume request */ |
+ __REQ_PM_SHUTDOWN, /* shutdown request */ |
+ __REQ_IDETAPE_PC1, /* packet command (first stage) */ |
+ __REQ_IDETAPE_PC2, /* packet command (second stage) */ |
+ __REQ_IDETAPE_READ, |
+ __REQ_IDETAPE_WRITE, |
+ __REQ_IDETAPE_READ_BUFFER, |
+ __REQ_NR_BITS, /* stops here */ |
+}; |
+ |
+#define REQ_RW (1 << __REQ_RW) |
+#define REQ_FAILFAST (1 << __REQ_FAILFAST) |
+#define REQ_SOFTBARRIER (1 << __REQ_SOFTBARRIER) |
+#define REQ_HARDBARRIER (1 << __REQ_HARDBARRIER) |
+#define REQ_CMD (1 << __REQ_CMD) |
+#define REQ_NOMERGE (1 << __REQ_NOMERGE) |
+#define REQ_STARTED (1 << __REQ_STARTED) |
+#define REQ_DONTPREP (1 << __REQ_DONTPREP) |
+#define REQ_QUEUED (1 << __REQ_QUEUED) |
+#define REQ_PC (1 << __REQ_PC) |
+#define REQ_BLOCK_PC (1 << __REQ_BLOCK_PC) |
+#define REQ_SENSE (1 << __REQ_SENSE) |
+#define REQ_FAILED (1 << __REQ_FAILED) |
+#define REQ_QUIET (1 << __REQ_QUIET) |
+#define REQ_SPECIAL (1 << __REQ_SPECIAL) |
+#define REQ_DRIVE_CMD (1 << __REQ_DRIVE_CMD) |
+#define REQ_DRIVE_TASK (1 << __REQ_DRIVE_TASK) |
+#define REQ_DRIVE_TASKFILE (1 << __REQ_DRIVE_TASKFILE) |
+#define REQ_PREEMPT (1 << __REQ_PREEMPT) |
+#define REQ_PM_SUSPEND (1 << __REQ_PM_SUSPEND) |
+#define REQ_PM_RESUME (1 << __REQ_PM_RESUME) |
+#define REQ_PM_SHUTDOWN (1 << __REQ_PM_SHUTDOWN) |
+#define REQ_IDETAPE_PC1 (1 << __REQ_IDETAPE_PC1) |
+#define REQ_IDETAPE_PC2 (1 << __REQ_IDETAPE_PC2) |
+#define REQ_IDETAPE_READ (1 << __REQ_IDETAPE_READ) |
+#define REQ_IDETAPE_WRITE (1 << __REQ_IDETAPE_WRITE) |
+#define REQ_IDETAPE_READ_BUFFER (1 << __REQ_IDETAPE_READ_BUFFER) |
+ |
+/* |
+ * State information carried for REQ_PM_SUSPEND and REQ_PM_RESUME |
+ * requests. Some step values could eventually be made generic. |
+ */ |
+struct request_pm_state |
+{ |
+ /* PM state machine step value, currently driver specific */ |
+ int pm_step; |
+ /* requested PM state value (S1, S2, S3, S4, ...) */ |
+ u32 pm_state; |
+ void* data; /* for driver use */ |
+}; |
+ |
+#include <linux/elevator.h> |
+ |
+typedef int (merge_request_fn) (request_queue_t *, struct request *, |
+ struct bio *); |
+typedef int (merge_requests_fn) (request_queue_t *, struct request *, |
+ struct request *); |
+typedef void (request_fn_proc) (request_queue_t *q); |
+typedef int (make_request_fn) (request_queue_t *q, struct bio *bio); |
+typedef int (prep_rq_fn) (request_queue_t *, struct request *); |
+typedef void (unplug_fn) (void *q); |
+ |
+struct bio_vec; |
+typedef int (merge_bvec_fn) (request_queue_t *, struct bio *, struct bio_vec *); |
+typedef void (activity_fn) (void *data, int rw); |
+ |
+enum blk_queue_state { |
+ Queue_down, |
+ Queue_up, |
+}; |
+ |
+#define BLK_TAGS_PER_LONG (sizeof(unsigned long) * 8) |
+#define BLK_TAGS_MASK (BLK_TAGS_PER_LONG - 1) |
+ |
+struct blk_queue_tag { |
+ struct request **tag_index; /* map of busy tags */ |
+ unsigned long *tag_map; /* bit map of free/busy tags */ |
+ struct list_head busy_list; /* fifo list of busy tags */ |
+ int busy; /* current depth */ |
+ int max_depth; /* what we will send to device */ |
+ int real_max_depth; /* what the array can hold */ |
+ atomic_t refcnt; /* map can be shared */ |
+}; |
+ |
+struct request_queue |
+{ |
+ /* |
+ * Together with queue_head for cacheline sharing |
+ */ |
+ struct list_head queue_head; |
+ struct request *last_merge; |
+ elevator_t elevator; |
+ |
+ /* |
+ * the queue request freelist, one for reads and one for writes |
+ */ |
+ struct request_list rq; |
+ |
+ request_fn_proc *request_fn; |
+ merge_request_fn *back_merge_fn; |
+ merge_request_fn *front_merge_fn; |
+ merge_requests_fn *merge_requests_fn; |
+ make_request_fn *make_request_fn; |
+ prep_rq_fn *prep_rq_fn; |
+ unplug_fn *unplug_fn; |
+ merge_bvec_fn *merge_bvec_fn; |
+ activity_fn *activity_fn; |
+ |
+ /* |
+ * Auto-unplugging state |
+ */ |
+ struct timer_list unplug_timer; |
+ int unplug_thresh; /* After this many requests */ |
+ unsigned long unplug_delay; /* After this many jiffies */ |
+ struct work_struct unplug_work; |
+ |
+ struct backing_dev_info backing_dev_info; |
+ |
+ /* |
+ * The queue owner gets to use this for whatever they like. |
+ * ll_rw_blk doesn't touch it. |
+ */ |
+ void *queuedata; |
+ |
+ void *activity_data; |
+ |
+ /* |
+ * queue needs bounce pages for pages above this limit |
+ */ |
+ unsigned long bounce_pfn; |
+ int bounce_gfp; |
+ |
+ struct list_head plug_list; |
+ |
+ /* |
+ * various queue flags, see QUEUE_* below |
+ */ |
+ unsigned long queue_flags; |
+ |
+ /* |
+ * protects queue structures from reentrancy |
+ */ |
+ spinlock_t *queue_lock; |
+ |
+ /* |
+ * queue kobject |
+ */ |
+ struct kobject kobj; |
+ |
+ /* |
+ * queue settings |
+ */ |
+ unsigned long nr_requests; /* Max # of requests */ |
+ |
+ unsigned short max_sectors; |
+ unsigned short max_phys_segments; |
+ unsigned short max_hw_segments; |
+ unsigned short hardsect_size; |
+ unsigned int max_segment_size; |
+ |
+ unsigned long seg_boundary_mask; |
+ unsigned int dma_alignment; |
+ |
+ struct blk_queue_tag *queue_tags; |
+ |
+ atomic_t refcnt; |
+ |
+ /* |
+ * sg stuff |
+ */ |
+ unsigned int sg_timeout; |
+ unsigned int sg_reserved_size; |
+}; |
+ |
+#define RQ_INACTIVE (-1) |
+#define RQ_ACTIVE 1 |
+#define RQ_SCSI_BUSY 0xffff |
+#define RQ_SCSI_DONE 0xfffe |
+#define RQ_SCSI_DISCONNECTING 0xffe0 |
+ |
+#define QUEUE_FLAG_CLUSTER 0 /* cluster several segments into 1 */ |
+#define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */ |
+#define QUEUE_FLAG_STOPPED 2 /* queue is stopped */ |
+#define QUEUE_FLAG_READFULL 3 /* write queue has been filled */ |
+#define QUEUE_FLAG_WRITEFULL 4 /* read queue has been filled */ |
+#define QUEUE_FLAG_DEAD 5 /* queue being torn down */ |
+ |
+#define blk_queue_plugged(q) !list_empty(&(q)->plug_list) |
+#define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) |
+#define blk_fs_request(rq) ((rq)->flags & REQ_CMD) |
+#define blk_pc_request(rq) ((rq)->flags & REQ_BLOCK_PC) |
+#define blk_noretry_request(rq) ((rq)->flags & REQ_FAILFAST) |
+ |
+#define blk_pm_suspend_request(rq) ((rq)->flags & REQ_PM_SUSPEND) |
+#define blk_pm_resume_request(rq) ((rq)->flags & REQ_PM_RESUME) |
+#define blk_pm_request(rq) \ |
+ ((rq)->flags & (REQ_PM_SUSPEND | REQ_PM_RESUME)) |
+ |
+#define list_entry_rq(ptr) list_entry((ptr), struct request, queuelist) |
+ |
+#define rq_data_dir(rq) ((rq)->flags & 1) |
+ |
+static inline int blk_queue_full(struct request_queue *q, int rw) |
+{ |
+ if (rw == READ) |
+ return test_bit(QUEUE_FLAG_READFULL, &q->queue_flags); |
+ return test_bit(QUEUE_FLAG_WRITEFULL, &q->queue_flags); |
+} |
+ |
+static inline void blk_set_queue_full(struct request_queue *q, int rw) |
+{ |
+ if (rw == READ) |
+ set_bit(QUEUE_FLAG_READFULL, &q->queue_flags); |
+ else |
+ set_bit(QUEUE_FLAG_WRITEFULL, &q->queue_flags); |
+} |
+ |
+static inline void blk_clear_queue_full(struct request_queue *q, int rw) |
+{ |
+ if (rw == READ) |
+ clear_bit(QUEUE_FLAG_READFULL, &q->queue_flags); |
+ else |
+ clear_bit(QUEUE_FLAG_WRITEFULL, &q->queue_flags); |
+} |
+ |
+ |
+/* |
+ * mergeable request must not have _NOMERGE or _BARRIER bit set, nor may |
+ * it already be started by driver. |
+ */ |
+#define RQ_NOMERGE_FLAGS \ |
+ (REQ_NOMERGE | REQ_STARTED | REQ_HARDBARRIER | REQ_SOFTBARRIER) |
+#define rq_mergeable(rq) \ |
+ (!((rq)->flags & RQ_NOMERGE_FLAGS) && blk_fs_request((rq))) |
+ |
+/* |
+ * noop, requests are automagically marked as active/inactive by I/O |
+ * scheduler -- see elv_next_request |
+ */ |
+#define blk_queue_headactive(q, head_active) |
+ |
+/* current index into bio being processed for submission */ |
+#define blk_rq_idx(rq) ((rq)->cbio->bi_vcnt - (rq)->nr_cbio_segments) |
+ |
+/* current bio vector being processed */ |
+#define blk_rq_vec(rq) (bio_iovec_idx((rq)->cbio, blk_rq_idx(rq))) |
+ |
+/* current offset with respect to start of the segment being submitted */ |
+#define blk_rq_offset(rq) \ |
+ (((rq)->hard_cur_sectors - (rq)->current_nr_sectors) << 9) |
+ |
+/* |
+ * temporarily mapping a (possible) highmem bio (typically for PIO transfer) |
+ */ |
+ |
+/* Assumes rq->cbio != NULL */ |
+static inline char * rq_map_buffer(struct request *rq, unsigned long *flags) |
+{ |
+ return (__bio_kmap_irq(rq->cbio, blk_rq_idx(rq), flags) |
+ + blk_rq_offset(rq)); |
+} |
+ |
+static inline void rq_unmap_buffer(char *buffer, unsigned long *flags) |
+{ |
+ __bio_kunmap_irq(buffer, flags); |
+} |
+ |
+/* |
+ * q->prep_rq_fn return values |
+ */ |
+#define BLKPREP_OK 0 /* serve it */ |
+#define BLKPREP_KILL 1 /* fatal error, kill */ |
+#define BLKPREP_DEFER 2 /* leave on queue */ |
+ |
+extern unsigned long blk_max_low_pfn, blk_max_pfn; |
+ |
+/* |
+ * standard bounce addresses: |
+ * |
+ * BLK_BOUNCE_HIGH : bounce all highmem pages |
+ * BLK_BOUNCE_ANY : don't bounce anything |
+ * BLK_BOUNCE_ISA : bounce pages above ISA DMA boundary |
+ */ |
+#define BLK_BOUNCE_HIGH ((u64)blk_max_low_pfn << PAGE_SHIFT) |
+#define BLK_BOUNCE_ANY ((u64)blk_max_pfn << PAGE_SHIFT) |
+#define BLK_BOUNCE_ISA (ISA_DMA_THRESHOLD) |
+ |
+#ifdef CONFIG_MMU |
+extern int init_emergency_isa_pool(void); |
+extern void blk_queue_bounce(request_queue_t *q, struct bio **bio); |
+#else |
+static inline int init_emergency_isa_pool(void) |
+{ |
+ return 0; |
+} |
+static inline void blk_queue_bounce(request_queue_t *q, struct bio **bio) |
+{ |
+} |
+#endif /* CONFIG_MMU */ |
+ |
+#define rq_for_each_bio(bio, rq) \ |
+ if ((rq->bio)) \ |
+ for (bio = (rq)->bio; bio; bio = bio->bi_next) |
+ |
+struct sec_size { |
+ unsigned block_size; |
+ unsigned block_size_bits; |
+}; |
+ |
+extern int blk_register_queue(struct gendisk *disk); |
+extern void blk_unregister_queue(struct gendisk *disk); |
+extern void register_disk(struct gendisk *dev); |
+extern void generic_make_request(struct bio *bio); |
+extern void blk_put_request(struct request *); |
+extern void blk_attempt_remerge(request_queue_t *, struct request *); |
+extern void __blk_attempt_remerge(request_queue_t *, struct request *); |
+extern struct request *blk_get_request(request_queue_t *, int, int); |
+extern void blk_put_request(struct request *); |
+extern void blk_insert_request(request_queue_t *, struct request *, int, void *, int); |
+extern void blk_requeue_request(request_queue_t *, struct request *); |
+extern void blk_plug_device(request_queue_t *); |
+extern int blk_remove_plug(request_queue_t *); |
+extern void blk_recount_segments(request_queue_t *, struct bio *); |
+extern inline int blk_phys_contig_segment(request_queue_t *q, struct bio *, struct bio *); |
+extern inline int blk_hw_contig_segment(request_queue_t *q, struct bio *, struct bio *); |
+extern int scsi_cmd_ioctl(struct block_device *, unsigned int, unsigned long); |
+extern void blk_start_queue(request_queue_t *q); |
+extern void blk_stop_queue(request_queue_t *q); |
+extern void __blk_stop_queue(request_queue_t *q); |
+extern void blk_run_queue(request_queue_t *q); |
+extern void blk_queue_activity_fn(request_queue_t *, activity_fn *, void *); |
+ |
+static inline request_queue_t *bdev_get_queue(struct block_device *bdev) |
+{ |
+ return bdev->bd_disk->queue; |
+} |
+ |
+/* |
+ * end_request() and friends. Must be called with the request queue spinlock |
+ * acquired. All functions called within end_request() _must_be_ atomic. |
+ * |
+ * Several drivers define their own end_request and call |
+ * end_that_request_first() and end_that_request_last() |
+ * for parts of the original function. This prevents |
+ * code duplication in drivers. |
+ */ |
+extern int end_that_request_first(struct request *, int, int); |
+extern int end_that_request_chunk(struct request *, int, int); |
+extern void end_that_request_last(struct request *); |
+extern int process_that_request_first(struct request *, unsigned int); |
+extern void end_request(struct request *req, int uptodate); |
+ |
+static inline void blkdev_dequeue_request(struct request *req) |
+{ |
+ BUG_ON(list_empty(&req->queuelist)); |
+ |
+ list_del_init(&req->queuelist); |
+ |
+ if (req->q) |
+ elv_remove_request(req->q, req); |
+} |
+ |
+/* |
+ * Access functions for manipulating queue properties |
+ */ |
+extern request_queue_t *blk_init_queue(request_fn_proc *, spinlock_t *); |
+extern void blk_cleanup_queue(request_queue_t *); |
+extern void blk_queue_make_request(request_queue_t *, make_request_fn *); |
+extern void blk_queue_bounce_limit(request_queue_t *, u64); |
+extern void blk_queue_max_sectors(request_queue_t *, unsigned short); |
+extern void blk_queue_max_phys_segments(request_queue_t *, unsigned short); |
+extern void blk_queue_max_hw_segments(request_queue_t *, unsigned short); |
+extern void blk_queue_max_segment_size(request_queue_t *, unsigned int); |
+extern void blk_queue_hardsect_size(request_queue_t *, unsigned short); |
+extern void blk_queue_stack_limits(request_queue_t *t, request_queue_t *b); |
+extern void blk_queue_segment_boundary(request_queue_t *, unsigned long); |
+extern void blk_queue_prep_rq(request_queue_t *, prep_rq_fn *pfn); |
+extern void blk_queue_merge_bvec(request_queue_t *, merge_bvec_fn *); |
+extern void blk_queue_dma_alignment(request_queue_t *, int); |
+extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev); |
+ |
+extern int blk_rq_map_sg(request_queue_t *, struct request *, struct scatterlist *); |
+extern void blk_dump_rq_flags(struct request *, char *); |
+extern void generic_unplug_device(void *); |
+extern long nr_blockdev_pages(void); |
+ |
+int blk_get_queue(request_queue_t *); |
+request_queue_t *blk_alloc_queue(int); |
+#define blk_put_queue(q) blk_cleanup_queue((q)) |
+ |
+/* |
+ * tag stuff |
+ */ |
+#define blk_queue_tag_depth(q) ((q)->queue_tags->busy) |
+#define blk_queue_tag_queue(q) ((q)->queue_tags->busy < (q)->queue_tags->max_depth) |
+#define blk_rq_tagged(rq) ((rq)->flags & REQ_QUEUED) |
+extern int blk_queue_start_tag(request_queue_t *, struct request *); |
+extern struct request *blk_queue_find_tag(request_queue_t *, int); |
+extern void blk_queue_end_tag(request_queue_t *, struct request *); |
+extern int blk_queue_init_tags(request_queue_t *, int, struct blk_queue_tag *); |
+extern void blk_queue_free_tags(request_queue_t *); |
+extern int blk_queue_resize_tags(request_queue_t *, int); |
+extern void blk_queue_invalidate_tags(request_queue_t *); |
+extern void blk_congestion_wait(int rw, long timeout); |
+ |
+extern void blk_rq_bio_prep(request_queue_t *, struct request *, struct bio *); |
+extern void blk_rq_prep_restart(struct request *); |
+ |
+#define MAX_PHYS_SEGMENTS 128 |
+#define MAX_HW_SEGMENTS 128 |
+#define MAX_SECTORS 255 |
+ |
+#define MAX_SEGMENT_SIZE 65536 |
+ |
+#define blkdev_entry_to_request(entry) list_entry((entry), struct request, queuelist) |
+ |
+extern void drive_stat_acct(struct request *, int, int); |
+ |
+static inline int queue_hardsect_size(request_queue_t *q) |
+{ |
+ int retval = 512; |
+ |
+ if (q && q->hardsect_size) |
+ retval = q->hardsect_size; |
+ |
+ return retval; |
+} |
+ |
+static inline int bdev_hardsect_size(struct block_device *bdev) |
+{ |
+ return queue_hardsect_size(bdev_get_queue(bdev)); |
+} |
+ |
+static inline int queue_dma_alignment(request_queue_t *q) |
+{ |
+ int retval = 511; |
+ |
+ if (q && q->dma_alignment) |
+ retval = q->dma_alignment; |
+ |
+ return retval; |
+} |
+ |
+static inline int bdev_dma_aligment(struct block_device *bdev) |
+{ |
+ return queue_dma_alignment(bdev_get_queue(bdev)); |
+} |
+ |
+#define blk_finished_io(nsects) do { } while (0) |
+#define blk_started_io(nsects) do { } while (0) |
+ |
+/* assumes size > 256 */ |
+static inline unsigned int blksize_bits(unsigned int size) |
+{ |
+ unsigned int bits = 8; |
+ do { |
+ bits++; |
+ size >>= 1; |
+ } while (size > 256); |
+ return bits; |
+} |
+ |
+extern inline unsigned int block_size(struct block_device *bdev) |
+{ |
+ return bdev->bd_block_size; |
+} |
+ |
+typedef struct {struct page *v;} Sector; |
+ |
+unsigned char *read_dev_sector(struct block_device *, sector_t, Sector *); |
+ |
+static inline void put_dev_sector(Sector p) |
+{ |
+ page_cache_release(p.v); |
+} |
+ |
+struct work_struct; |
+int kblockd_schedule_work(struct work_struct *work); |
+void kblockd_flush(void); |
+ |
+#ifdef CONFIG_LBD |
+# include <asm/div64.h> |
+# define sector_div(a, b) do_div(a, b) |
+#else |
+# define sector_div(n, b)( \ |
+{ \ |
+ int _res; \ |
+ _res = (n) % (b); \ |
+ (n) /= (b); \ |
+ _res; \ |
+} \ |
+) |
+#endif |
+ |
+#define MODULE_ALIAS_BLOCKDEV(major,minor) \ |
+ MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor)) |
+#define MODULE_ALIAS_BLOCKDEV_MAJOR(major) \ |
+ MODULE_ALIAS("block-major-" __stringify(major) "-*") |
+ |
+ |
+#endif |
Index: linuxc26/include/linux/phonedev.h |
=================================================================== |
--- linuxc26/include/linux/phonedev.h (nonexistent) |
+++ linuxc26/include/linux/phonedev.h (revision 422) |
@@ -0,0 +1,26 @@ |
+#ifndef __LINUX_PHONEDEV_H |
+#define __LINUX_PHONEDEV_H |
+ |
+#include <linux/types.h> |
+#include <linux/version.h> |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/poll.h> |
+ |
+struct phone_device { |
+ struct phone_device *next; |
+ struct file_operations *f_op; |
+ int (*open) (struct phone_device *, struct file *); |
+ int board; /* Device private index */ |
+ int minor; |
+}; |
+ |
+extern int phonedev_init(void); |
+#define PHONE_MAJOR 100 |
+extern int phone_register_device(struct phone_device *, int unit); |
+#define PHONE_UNIT_ANY -1 |
+extern void phone_unregister_device(struct phone_device *); |
+ |
+#endif |
+#endif |
Index: linuxc26/include/linux/blk.h |
=================================================================== |
--- linuxc26/include/linux/blk.h (nonexistent) |
+++ linuxc26/include/linux/blk.h (revision 422) |
@@ -0,0 +1,2 @@ |
+#warning this file is obsolete, please use <linux/blkdev.h> instead |
+#include <linux/blkdev.h> |
Index: linuxc26/include/linux/ncp_fs.h |
=================================================================== |
--- linuxc26/include/linux/ncp_fs.h (nonexistent) |
+++ linuxc26/include/linux/ncp_fs.h (revision 422) |
@@ -0,0 +1,300 @@ |
+/* |
+ * 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/ncp_fs_i.h> |
+#include <linux/ncp_fs_sb.h> |
+#include <linux/ipx.h> |
+#include <linux/ncp_no.h> |
+ |
+/* |
+ * ioctl commands |
+ */ |
+ |
+struct ncp_ioctl_request { |
+ unsigned int function; |
+ unsigned int size; |
+ char *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; |
+ __u32 directory_id; |
+}; |
+ |
+struct ncp_fs_info_v2 { |
+ int version; |
+ unsigned long mounted_uid; |
+ unsigned int connection; |
+ unsigned int buffer_size; |
+ |
+ unsigned int volume_number; |
+ __u32 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; |
+ __u32 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* object_name; /* an userspace data, in most cases user name */ |
+}; |
+ |
+struct ncp_privatedata_ioctl |
+{ |
+ size_t len; |
+ void* 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 |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/config.h> |
+ |
+/* undef because public define in umsdos_fs.h (ncp_fs.h isn't public) */ |
+#undef PRINTK |
+/* define because it is easy to change PRINTK to {*}PRINTK */ |
+#define PRINTK(format, args...) printk(KERN_DEBUG format , ## args) |
+ |
+#undef NCPFS_PARANOIA |
+#ifdef NCPFS_PARANOIA |
+#define PPRINTK(format, args...) PRINTK(format , ## args) |
+#else |
+#define PPRINTK(format, args...) |
+#endif |
+ |
+#ifndef DEBUG_NCP |
+#define DEBUG_NCP 0 |
+#endif |
+#if DEBUG_NCP > 0 |
+#define DPRINTK(format, args...) PRINTK(format , ## args) |
+#else |
+#define DPRINTK(format, args...) |
+#endif |
+#if DEBUG_NCP > 1 |
+#define DDPRINTK(format, args...) PRINTK(format , ## args) |
+#else |
+#define DDPRINTK(format, args...) |
+#endif |
+ |
+#define NCP_MAX_RPC_TIMEOUT (6*HZ) |
+ |
+ |
+struct ncp_entry_info { |
+ struct nw_info_struct i; |
+ ino_t ino; |
+ int opened; |
+ int access; |
+ unsigned int volume; |
+ __u8 file_handle[6]; |
+}; |
+ |
+/* Guess, what 0x564c is :-) */ |
+#define NCP_SUPER_MAGIC 0x564c |
+ |
+ |
+static inline struct ncp_server *NCP_SBP(struct super_block *sb) |
+{ |
+ return sb->s_fs_info; |
+} |
+ |
+#define NCP_SERVER(inode) NCP_SBP((inode)->i_sb) |
+static inline struct ncp_inode_info *NCP_FINFO(struct inode *inode) |
+{ |
+ return container_of(inode, struct ncp_inode_info, vfs_inode); |
+} |
+ |
+#ifdef DEBUG_NCP_MALLOC |
+ |
+#include <linux/slab.h> |
+ |
+extern int ncp_malloced; |
+extern int ncp_current_malloced; |
+ |
+static inline void * |
+ ncp_kmalloc(unsigned int size, int priority) |
+{ |
+ ncp_malloced += 1; |
+ ncp_current_malloced += 1; |
+ return kmalloc(size, priority); |
+} |
+ |
+static inline void ncp_kfree_s(void *obj, int size) |
+{ |
+ ncp_current_malloced -= 1; |
+ kfree(obj); |
+} |
+ |
+#else /* DEBUG_NCP_MALLOC */ |
+ |
+#define ncp_kmalloc(s,p) kmalloc(s,p) |
+#define ncp_kfree_s(o,s) kfree(o) |
+ |
+#endif /* DEBUG_NCP_MALLOC */ |
+ |
+/* linux/fs/ncpfs/inode.c */ |
+int ncp_notify_change(struct dentry *, struct iattr *); |
+struct inode *ncp_iget(struct super_block *, struct ncp_entry_info *); |
+void ncp_update_inode(struct inode *, struct ncp_entry_info *); |
+void ncp_update_inode2(struct inode *, struct ncp_entry_info *); |
+ |
+/* linux/fs/ncpfs/dir.c */ |
+extern struct inode_operations ncp_dir_inode_operations; |
+extern struct file_operations ncp_dir_operations; |
+int ncp_conn_logged_in(struct super_block *); |
+int ncp_date_dos2unix(__u16 time, __u16 date); |
+void ncp_date_unix2dos(int unix_date, __u16 * time, __u16 * date); |
+ |
+/* linux/fs/ncpfs/ioctl.c */ |
+int ncp_ioctl(struct inode *, struct file *, unsigned int, unsigned long); |
+ |
+/* linux/fs/ncpfs/sock.c */ |
+int ncp_request2(struct ncp_server *server, int function, |
+ void* reply, int max_reply_size); |
+static inline int ncp_request(struct ncp_server *server, int function) { |
+ return ncp_request2(server, function, server->packet, server->packet_size); |
+} |
+int ncp_connect(struct ncp_server *server); |
+int ncp_disconnect(struct ncp_server *server); |
+void ncp_lock_server(struct ncp_server *server); |
+void ncp_unlock_server(struct ncp_server *server); |
+ |
+/* linux/fs/ncpfs/file.c */ |
+extern struct inode_operations ncp_file_inode_operations; |
+extern struct file_operations ncp_file_operations; |
+int ncp_make_open(struct inode *, int); |
+ |
+/* linux/fs/ncpfs/mmap.c */ |
+int ncp_mmap(struct file *, struct vm_area_struct *); |
+ |
+/* linux/fs/ncpfs/ncplib_kernel.c */ |
+int ncp_make_closed(struct inode *); |
+ |
+#define ncp_namespace(i) (NCP_SERVER(i)->name_space[NCP_FINFO(i)->volNumber]) |
+ |
+static inline int ncp_preserve_entry_case(struct inode *i, __u32 nscreator) |
+{ |
+#ifdef CONFIG_NCPFS_SMALLDOS |
+ int ns = ncp_namespace(i); |
+ |
+ if ((ns == NW_NS_DOS) |
+#ifdef CONFIG_NCPFS_OS2_NS |
+ || ((ns == NW_NS_OS2) && (nscreator == NW_NS_DOS)) |
+#endif /* CONFIG_NCPFS_OS2_NS */ |
+ ) |
+ return 0; |
+#endif /* CONFIG_NCPFS_SMALLDOS */ |
+ return 1; |
+} |
+ |
+#define ncp_preserve_case(i) (ncp_namespace(i) != NW_NS_DOS) |
+ |
+static inline int ncp_case_sensitive(struct inode *i) |
+{ |
+#ifdef CONFIG_NCPFS_NFS_NS |
+ return ncp_namespace(i) == NW_NS_NFS; |
+#else |
+ return 0; |
+#endif /* CONFIG_NCPFS_NFS_NS */ |
+} |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* _LINUX_NCP_FS_H */ |
Index: linuxc26/include/linux/ext2_fs.h |
=================================================================== |
--- linuxc26/include/linux/ext2_fs.h (nonexistent) |
+++ linuxc26/include/linux/ext2_fs.h (revision 422) |
@@ -0,0 +1,553 @@ |
+/* |
+ * linux/include/linux/ext2_fs.h |
+ * |
+ * Copyright (C) 1992, 1993, 1994, 1995 |
+ * Remy Card (card@masi.ibp.fr) |
+ * Laboratoire MASI - Institut Blaise Pascal |
+ * Universite Pierre et Marie Curie (Paris VI) |
+ * |
+ * from |
+ * |
+ * linux/include/linux/minix_fs.h |
+ * |
+ * Copyright (C) 1991, 1992 Linus Torvalds |
+ */ |
+ |
+#ifndef _LINUX_EXT2_FS_H |
+#define _LINUX_EXT2_FS_H |
+ |
+#include <linux/types.h> |
+#include <linux/ext2_fs_sb.h> |
+ |
+/* |
+ * The second extended filesystem constants/structures |
+ */ |
+ |
+/* |
+ * Define EXT2FS_DEBUG to produce debug messages |
+ */ |
+#undef EXT2FS_DEBUG |
+ |
+/* |
+ * Define EXT2_PREALLOCATE to preallocate data blocks for expanding files |
+ */ |
+#define EXT2_PREALLOCATE |
+#define EXT2_DEFAULT_PREALLOC_BLOCKS 8 |
+ |
+/* |
+ * The second extended file system version |
+ */ |
+#define EXT2FS_DATE "95/08/09" |
+#define EXT2FS_VERSION "0.5b" |
+ |
+/* |
+ * Debug code |
+ */ |
+#ifdef EXT2FS_DEBUG |
+# define ext2_debug(f, a...) { \ |
+ printk ("EXT2-fs DEBUG (%s, %d): %s:", \ |
+ __FILE__, __LINE__, __FUNCTION__); \ |
+ printk (f, ## a); \ |
+ } |
+#else |
+# define ext2_debug(f, a...) /**/ |
+#endif |
+ |
+/* |
+ * Special inode numbers |
+ */ |
+#define EXT2_BAD_INO 1 /* Bad blocks inode */ |
+#define EXT2_ROOT_INO 2 /* Root inode */ |
+#define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */ |
+#define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */ |
+ |
+/* First non-reserved inode for old ext2 filesystems */ |
+#define EXT2_GOOD_OLD_FIRST_INO 11 |
+ |
+/* |
+ * The second extended file system magic number |
+ */ |
+#define EXT2_SUPER_MAGIC 0xEF53 |
+ |
+#ifdef __KERNEL__ |
+static inline struct ext2_sb_info *EXT2_SB(struct super_block *sb) |
+{ |
+ return sb->s_fs_info; |
+} |
+#else |
+/* Assume that user mode programs are passing in an ext2fs superblock, not |
+ * a kernel struct super_block. This will allow us to call the feature-test |
+ * macros from user land. */ |
+#define EXT2_SB(sb) (sb) |
+#endif |
+ |
+/* |
+ * Maximal count of links to a file |
+ */ |
+#define EXT2_LINK_MAX 32000 |
+ |
+/* |
+ * Macro-instructions used to manage several block sizes |
+ */ |
+#define EXT2_MIN_BLOCK_SIZE 1024 |
+#define EXT2_MAX_BLOCK_SIZE 4096 |
+#define EXT2_MIN_BLOCK_LOG_SIZE 10 |
+#ifdef __KERNEL__ |
+# define EXT2_BLOCK_SIZE(s) ((s)->s_blocksize) |
+#else |
+# define EXT2_BLOCK_SIZE(s) (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size) |
+#endif |
+#define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (__u32)) |
+#ifdef __KERNEL__ |
+# define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_blocksize_bits) |
+#else |
+# define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10) |
+#endif |
+#ifdef __KERNEL__ |
+#define EXT2_ADDR_PER_BLOCK_BITS(s) (EXT2_SB(s)->s_addr_per_block_bits) |
+#define EXT2_INODE_SIZE(s) (EXT2_SB(s)->s_inode_size) |
+#define EXT2_FIRST_INO(s) (EXT2_SB(s)->s_first_ino) |
+#else |
+#define EXT2_INODE_SIZE(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \ |
+ EXT2_GOOD_OLD_INODE_SIZE : \ |
+ (s)->s_inode_size) |
+#define EXT2_FIRST_INO(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \ |
+ EXT2_GOOD_OLD_FIRST_INO : \ |
+ (s)->s_first_ino) |
+#endif |
+ |
+/* |
+ * Macro-instructions used to manage fragments |
+ */ |
+#define EXT2_MIN_FRAG_SIZE 1024 |
+#define EXT2_MAX_FRAG_SIZE 4096 |
+#define EXT2_MIN_FRAG_LOG_SIZE 10 |
+#ifdef __KERNEL__ |
+# define EXT2_FRAG_SIZE(s) (EXT2_SB(s)->s_frag_size) |
+# define EXT2_FRAGS_PER_BLOCK(s) (EXT2_SB(s)->s_frags_per_block) |
+#else |
+# define EXT2_FRAG_SIZE(s) (EXT2_MIN_FRAG_SIZE << (s)->s_log_frag_size) |
+# define EXT2_FRAGS_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / EXT2_FRAG_SIZE(s)) |
+#endif |
+ |
+/* |
+ * Structure of a blocks group descriptor |
+ */ |
+struct ext2_group_desc |
+{ |
+ __u32 bg_block_bitmap; /* Blocks bitmap block */ |
+ __u32 bg_inode_bitmap; /* Inodes bitmap block */ |
+ __u32 bg_inode_table; /* Inodes table block */ |
+ __u16 bg_free_blocks_count; /* Free blocks count */ |
+ __u16 bg_free_inodes_count; /* Free inodes count */ |
+ __u16 bg_used_dirs_count; /* Directories count */ |
+ __u16 bg_pad; |
+ __u32 bg_reserved[3]; |
+}; |
+ |
+/* |
+ * Macro-instructions used to manage group descriptors |
+ */ |
+#ifdef __KERNEL__ |
+# define EXT2_BLOCKS_PER_GROUP(s) (EXT2_SB(s)->s_blocks_per_group) |
+# define EXT2_DESC_PER_BLOCK(s) (EXT2_SB(s)->s_desc_per_block) |
+# define EXT2_INODES_PER_GROUP(s) (EXT2_SB(s)->s_inodes_per_group) |
+# define EXT2_DESC_PER_BLOCK_BITS(s) (EXT2_SB(s)->s_desc_per_block_bits) |
+#else |
+# define EXT2_BLOCKS_PER_GROUP(s) ((s)->s_blocks_per_group) |
+# define EXT2_DESC_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc)) |
+# define EXT2_INODES_PER_GROUP(s) ((s)->s_inodes_per_group) |
+#endif |
+ |
+/* |
+ * Constants relative to the data blocks |
+ */ |
+#define EXT2_NDIR_BLOCKS 12 |
+#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS |
+#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1) |
+#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1) |
+#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1) |
+ |
+/* |
+ * Inode flags |
+ */ |
+#define EXT2_SECRM_FL 0x00000001 /* Secure deletion */ |
+#define EXT2_UNRM_FL 0x00000002 /* Undelete */ |
+#define EXT2_COMPR_FL 0x00000004 /* Compress file */ |
+#define EXT2_SYNC_FL 0x00000008 /* Synchronous updates */ |
+#define EXT2_IMMUTABLE_FL 0x00000010 /* Immutable file */ |
+#define EXT2_APPEND_FL 0x00000020 /* writes to file may only append */ |
+#define EXT2_NODUMP_FL 0x00000040 /* do not dump file */ |
+#define EXT2_NOATIME_FL 0x00000080 /* do not update atime */ |
+/* Reserved for compression usage... */ |
+#define EXT2_DIRTY_FL 0x00000100 |
+#define EXT2_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */ |
+#define EXT2_NOCOMP_FL 0x00000400 /* Don't compress */ |
+#define EXT2_ECOMPR_FL 0x00000800 /* Compression error */ |
+/* End compression flags --- maybe not all used */ |
+#define EXT2_BTREE_FL 0x00001000 /* btree format dir */ |
+#define EXT2_INDEX_FL 0x00001000 /* hash-indexed directory */ |
+#define EXT2_IMAGIC_FL 0x00002000 /* AFS directory */ |
+#define EXT2_JOURNAL_DATA_FL 0x00004000 /* Reserved for ext3 */ |
+#define EXT2_NOTAIL_FL 0x00008000 /* file tail should not be merged */ |
+#define EXT2_DIRSYNC_FL 0x00010000 /* dirsync behaviour (directories only) */ |
+#define EXT2_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/ |
+#define EXT2_RESERVED_FL 0x80000000 /* reserved for ext2 lib */ |
+ |
+#define EXT2_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */ |
+#define EXT2_FL_USER_MODIFIABLE 0x000380FF /* User modifiable flags */ |
+ |
+/* |
+ * ioctl commands |
+ */ |
+#define EXT2_IOC_GETFLAGS _IOR('f', 1, long) |
+#define EXT2_IOC_SETFLAGS _IOW('f', 2, long) |
+#define EXT2_IOC_GETVERSION _IOR('v', 1, long) |
+#define EXT2_IOC_SETVERSION _IOW('v', 2, long) |
+ |
+/* |
+ * Structure of an inode on the disk |
+ */ |
+struct ext2_inode { |
+ __u16 i_mode; /* File mode */ |
+ __u16 i_uid; /* Low 16 bits of Owner Uid */ |
+ __u32 i_size; /* Size in bytes */ |
+ __u32 i_atime; /* Access time */ |
+ __u32 i_ctime; /* Creation time */ |
+ __u32 i_mtime; /* Modification time */ |
+ __u32 i_dtime; /* Deletion Time */ |
+ __u16 i_gid; /* Low 16 bits of Group Id */ |
+ __u16 i_links_count; /* Links count */ |
+ __u32 i_blocks; /* Blocks count */ |
+ __u32 i_flags; /* File flags */ |
+ union { |
+ struct { |
+ __u32 l_i_reserved1; |
+ } linux1; |
+ struct { |
+ __u32 h_i_translator; |
+ } hurd1; |
+ struct { |
+ __u32 m_i_reserved1; |
+ } masix1; |
+ } osd1; /* OS dependent 1 */ |
+ __u32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */ |
+ __u32 i_generation; /* File version (for NFS) */ |
+ __u32 i_file_acl; /* File ACL */ |
+ __u32 i_dir_acl; /* Directory ACL */ |
+ __u32 i_faddr; /* Fragment address */ |
+ union { |
+ struct { |
+ __u8 l_i_frag; /* Fragment number */ |
+ __u8 l_i_fsize; /* Fragment size */ |
+ __u16 i_pad1; |
+ __u16 l_i_uid_high; /* these 2 fields */ |
+ __u16 l_i_gid_high; /* were reserved2[0] */ |
+ __u32 l_i_reserved2; |
+ } linux2; |
+ struct { |
+ __u8 h_i_frag; /* Fragment number */ |
+ __u8 h_i_fsize; /* Fragment size */ |
+ __u16 h_i_mode_high; |
+ __u16 h_i_uid_high; |
+ __u16 h_i_gid_high; |
+ __u32 h_i_author; |
+ } hurd2; |
+ struct { |
+ __u8 m_i_frag; /* Fragment number */ |
+ __u8 m_i_fsize; /* Fragment size */ |
+ __u16 m_pad1; |
+ __u32 m_i_reserved2[2]; |
+ } masix2; |
+ } osd2; /* OS dependent 2 */ |
+}; |
+ |
+#define i_size_high i_dir_acl |
+ |
+#if defined(__KERNEL__) || defined(__linux__) |
+#define i_reserved1 osd1.linux1.l_i_reserved1 |
+#define i_frag osd2.linux2.l_i_frag |
+#define i_fsize osd2.linux2.l_i_fsize |
+#define i_uid_low i_uid |
+#define i_gid_low i_gid |
+#define i_uid_high osd2.linux2.l_i_uid_high |
+#define i_gid_high osd2.linux2.l_i_gid_high |
+#define i_reserved2 osd2.linux2.l_i_reserved2 |
+#endif |
+ |
+#ifdef __hurd__ |
+#define i_translator osd1.hurd1.h_i_translator |
+#define i_frag osd2.hurd2.h_i_frag; |
+#define i_fsize osd2.hurd2.h_i_fsize; |
+#define i_uid_high osd2.hurd2.h_i_uid_high |
+#define i_gid_high osd2.hurd2.h_i_gid_high |
+#define i_author osd2.hurd2.h_i_author |
+#endif |
+ |
+#ifdef __masix__ |
+#define i_reserved1 osd1.masix1.m_i_reserved1 |
+#define i_frag osd2.masix2.m_i_frag |
+#define i_fsize osd2.masix2.m_i_fsize |
+#define i_reserved2 osd2.masix2.m_i_reserved2 |
+#endif |
+ |
+/* |
+ * File system states |
+ */ |
+#define EXT2_VALID_FS 0x0001 /* Unmounted cleanly */ |
+#define EXT2_ERROR_FS 0x0002 /* Errors detected */ |
+ |
+/* |
+ * Mount flags |
+ */ |
+#define EXT2_MOUNT_CHECK 0x0001 /* Do mount-time checks */ |
+#define EXT2_MOUNT_OLDALLOC 0x0002 /* Don't use the new Orlov allocator */ |
+#define EXT2_MOUNT_GRPID 0x0004 /* Create files with directory's group */ |
+#define EXT2_MOUNT_DEBUG 0x0008 /* Some debugging messages */ |
+#define EXT2_MOUNT_ERRORS_CONT 0x0010 /* Continue on errors */ |
+#define EXT2_MOUNT_ERRORS_RO 0x0020 /* Remount fs ro on errors */ |
+#define EXT2_MOUNT_ERRORS_PANIC 0x0040 /* Panic on errors */ |
+#define EXT2_MOUNT_MINIX_DF 0x0080 /* Mimics the Minix statfs */ |
+#define EXT2_MOUNT_NOBH 0x0100 /* No buffer_heads */ |
+#define EXT2_MOUNT_NO_UID32 0x0200 /* Disable 32-bit UIDs */ |
+#define EXT2_MOUNT_XATTR_USER 0x4000 /* Extended user attributes */ |
+#define EXT2_MOUNT_POSIX_ACL 0x8000 /* POSIX Access Control Lists */ |
+ |
+#define clear_opt(o, opt) o &= ~EXT2_MOUNT_##opt |
+#define set_opt(o, opt) o |= EXT2_MOUNT_##opt |
+#define test_opt(sb, opt) (EXT2_SB(sb)->s_mount_opt & \ |
+ EXT2_MOUNT_##opt) |
+/* |
+ * Maximal mount counts between two filesystem checks |
+ */ |
+#define EXT2_DFL_MAX_MNT_COUNT 20 /* Allow 20 mounts */ |
+#define EXT2_DFL_CHECKINTERVAL 0 /* Don't use interval check */ |
+ |
+/* |
+ * Behaviour when detecting errors |
+ */ |
+#define EXT2_ERRORS_CONTINUE 1 /* Continue execution */ |
+#define EXT2_ERRORS_RO 2 /* Remount fs read-only */ |
+#define EXT2_ERRORS_PANIC 3 /* Panic */ |
+#define EXT2_ERRORS_DEFAULT EXT2_ERRORS_CONTINUE |
+ |
+/* |
+ * Structure of the super block |
+ */ |
+struct ext2_super_block { |
+ __u32 s_inodes_count; /* Inodes count */ |
+ __u32 s_blocks_count; /* Blocks count */ |
+ __u32 s_r_blocks_count; /* Reserved blocks count */ |
+ __u32 s_free_blocks_count; /* Free blocks count */ |
+ __u32 s_free_inodes_count; /* Free inodes count */ |
+ __u32 s_first_data_block; /* First Data Block */ |
+ __u32 s_log_block_size; /* Block size */ |
+ __s32 s_log_frag_size; /* Fragment size */ |
+ __u32 s_blocks_per_group; /* # Blocks per group */ |
+ __u32 s_frags_per_group; /* # Fragments per group */ |
+ __u32 s_inodes_per_group; /* # Inodes per group */ |
+ __u32 s_mtime; /* Mount time */ |
+ __u32 s_wtime; /* Write time */ |
+ __u16 s_mnt_count; /* Mount count */ |
+ __s16 s_max_mnt_count; /* Maximal mount count */ |
+ __u16 s_magic; /* Magic signature */ |
+ __u16 s_state; /* File system state */ |
+ __u16 s_errors; /* Behaviour when detecting errors */ |
+ __u16 s_minor_rev_level; /* minor revision level */ |
+ __u32 s_lastcheck; /* time of last check */ |
+ __u32 s_checkinterval; /* max. time between checks */ |
+ __u32 s_creator_os; /* OS */ |
+ __u32 s_rev_level; /* Revision level */ |
+ __u16 s_def_resuid; /* Default uid for reserved blocks */ |
+ __u16 s_def_resgid; /* Default gid for reserved blocks */ |
+ /* |
+ * These fields are for EXT2_DYNAMIC_REV superblocks only. |
+ * |
+ * Note: the difference between the compatible feature set and |
+ * the incompatible feature set is that if there is a bit set |
+ * in the incompatible feature set that the kernel doesn't |
+ * know about, it should refuse to mount the filesystem. |
+ * |
+ * e2fsck's requirements are more strict; if it doesn't know |
+ * about a feature in either the compatible or incompatible |
+ * feature set, it must abort and not try to meddle with |
+ * things it doesn't understand... |
+ */ |
+ __u32 s_first_ino; /* First non-reserved inode */ |
+ __u16 s_inode_size; /* size of inode structure */ |
+ __u16 s_block_group_nr; /* block group # of this superblock */ |
+ __u32 s_feature_compat; /* compatible feature set */ |
+ __u32 s_feature_incompat; /* incompatible feature set */ |
+ __u32 s_feature_ro_compat; /* readonly-compatible feature set */ |
+ __u8 s_uuid[16]; /* 128-bit uuid for volume */ |
+ char s_volume_name[16]; /* volume name */ |
+ char s_last_mounted[64]; /* directory where last mounted */ |
+ __u32 s_algorithm_usage_bitmap; /* For compression */ |
+ /* |
+ * Performance hints. Directory preallocation should only |
+ * happen if the EXT2_COMPAT_PREALLOC flag is on. |
+ */ |
+ __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/ |
+ __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */ |
+ __u16 s_padding1; |
+ /* |
+ * Journaling support valid if EXT3_FEATURE_COMPAT_HAS_JOURNAL set. |
+ */ |
+ __u8 s_journal_uuid[16]; /* uuid of journal superblock */ |
+ __u32 s_journal_inum; /* inode number of journal file */ |
+ __u32 s_journal_dev; /* device number of journal file */ |
+ __u32 s_last_orphan; /* start of list of inodes to delete */ |
+ __u32 s_hash_seed[4]; /* HTREE hash seed */ |
+ __u8 s_def_hash_version; /* Default hash version to use */ |
+ __u8 s_reserved_char_pad; |
+ __u16 s_reserved_word_pad; |
+ __u32 s_default_mount_opts; |
+ __u32 s_first_meta_bg; /* First metablock block group */ |
+ __u32 s_reserved[190]; /* Padding to the end of the block */ |
+}; |
+ |
+/* |
+ * Codes for operating systems |
+ */ |
+#define EXT2_OS_LINUX 0 |
+#define EXT2_OS_HURD 1 |
+#define EXT2_OS_MASIX 2 |
+#define EXT2_OS_FREEBSD 3 |
+#define EXT2_OS_LITES 4 |
+ |
+/* |
+ * Revision levels |
+ */ |
+#define EXT2_GOOD_OLD_REV 0 /* The good old (original) format */ |
+#define EXT2_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */ |
+ |
+#define EXT2_CURRENT_REV EXT2_GOOD_OLD_REV |
+#define EXT2_MAX_SUPP_REV EXT2_DYNAMIC_REV |
+ |
+#define EXT2_GOOD_OLD_INODE_SIZE 128 |
+ |
+/* |
+ * Feature set definitions |
+ */ |
+ |
+#define EXT2_HAS_COMPAT_FEATURE(sb,mask) \ |
+ ( EXT2_SB(sb)->s_es->s_feature_compat & cpu_to_le32(mask) ) |
+#define EXT2_HAS_RO_COMPAT_FEATURE(sb,mask) \ |
+ ( EXT2_SB(sb)->s_es->s_feature_ro_compat & cpu_to_le32(mask) ) |
+#define EXT2_HAS_INCOMPAT_FEATURE(sb,mask) \ |
+ ( EXT2_SB(sb)->s_es->s_feature_incompat & cpu_to_le32(mask) ) |
+#define EXT2_SET_COMPAT_FEATURE(sb,mask) \ |
+ EXT2_SB(sb)->s_es->s_feature_compat |= cpu_to_le32(mask) |
+#define EXT2_SET_RO_COMPAT_FEATURE(sb,mask) \ |
+ EXT2_SB(sb)->s_es->s_feature_ro_compat |= cpu_to_le32(mask) |
+#define EXT2_SET_INCOMPAT_FEATURE(sb,mask) \ |
+ EXT2_SB(sb)->s_es->s_feature_incompat |= cpu_to_le32(mask) |
+#define EXT2_CLEAR_COMPAT_FEATURE(sb,mask) \ |
+ EXT2_SB(sb)->s_es->s_feature_compat &= ~cpu_to_le32(mask) |
+#define EXT2_CLEAR_RO_COMPAT_FEATURE(sb,mask) \ |
+ EXT2_SB(sb)->s_es->s_feature_ro_compat &= ~cpu_to_le32(mask) |
+#define EXT2_CLEAR_INCOMPAT_FEATURE(sb,mask) \ |
+ EXT2_SB(sb)->s_es->s_feature_incompat &= ~cpu_to_le32(mask) |
+ |
+#define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001 |
+#define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002 |
+#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 |
+#define EXT2_FEATURE_COMPAT_EXT_ATTR 0x0008 |
+#define EXT2_FEATURE_COMPAT_RESIZE_INO 0x0010 |
+#define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020 |
+#define EXT2_FEATURE_COMPAT_ANY 0xffffffff |
+ |
+#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 |
+#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 |
+#define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 |
+#define EXT2_FEATURE_RO_COMPAT_ANY 0xffffffff |
+ |
+#define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001 |
+#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002 |
+#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 |
+#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 |
+#define EXT2_FEATURE_INCOMPAT_META_BG 0x0010 |
+#define EXT2_FEATURE_INCOMPAT_ANY 0xffffffff |
+ |
+#define EXT2_FEATURE_COMPAT_SUPP EXT2_FEATURE_COMPAT_EXT_ATTR |
+#define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE| \ |
+ EXT2_FEATURE_INCOMPAT_META_BG) |
+#define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \ |
+ EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \ |
+ EXT2_FEATURE_RO_COMPAT_BTREE_DIR) |
+#define EXT2_FEATURE_RO_COMPAT_UNSUPPORTED ~EXT2_FEATURE_RO_COMPAT_SUPP |
+#define EXT2_FEATURE_INCOMPAT_UNSUPPORTED ~EXT2_FEATURE_INCOMPAT_SUPP |
+ |
+/* |
+ * Default values for user and/or group using reserved blocks |
+ */ |
+#define EXT2_DEF_RESUID 0 |
+#define EXT2_DEF_RESGID 0 |
+ |
+/* |
+ * Default mount options |
+ */ |
+#define EXT2_DEFM_DEBUG 0x0001 |
+#define EXT2_DEFM_BSDGROUPS 0x0002 |
+#define EXT2_DEFM_XATTR_USER 0x0004 |
+#define EXT2_DEFM_ACL 0x0008 |
+#define EXT2_DEFM_UID16 0x0010 |
+ /* Not used by ext2, but reserved for use by ext3 */ |
+#define EXT3_DEFM_JMODE 0x0060 |
+#define EXT3_DEFM_JMODE_DATA 0x0020 |
+#define EXT3_DEFM_JMODE_ORDERED 0x0040 |
+#define EXT3_DEFM_JMODE_WBACK 0x0060 |
+ |
+/* |
+ * Structure of a directory entry |
+ */ |
+#define EXT2_NAME_LEN 255 |
+ |
+struct ext2_dir_entry { |
+ __u32 inode; /* Inode number */ |
+ __u16 rec_len; /* Directory entry length */ |
+ __u16 name_len; /* Name length */ |
+ char name[EXT2_NAME_LEN]; /* File name */ |
+}; |
+ |
+/* |
+ * The new version of the directory entry. Since EXT2 structures are |
+ * stored in intel byte order, and the name_len field could never be |
+ * bigger than 255 chars, it's safe to reclaim the extra byte for the |
+ * file_type field. |
+ */ |
+struct ext2_dir_entry_2 { |
+ __u32 inode; /* Inode number */ |
+ __u16 rec_len; /* Directory entry length */ |
+ __u8 name_len; /* Name length */ |
+ __u8 file_type; |
+ char name[EXT2_NAME_LEN]; /* File name */ |
+}; |
+ |
+/* |
+ * Ext2 directory file types. Only the low 3 bits are used. The |
+ * other bits are reserved for now. |
+ */ |
+enum { |
+ EXT2_FT_UNKNOWN, |
+ EXT2_FT_REG_FILE, |
+ EXT2_FT_DIR, |
+ EXT2_FT_CHRDEV, |
+ EXT2_FT_BLKDEV, |
+ EXT2_FT_FIFO, |
+ EXT2_FT_SOCK, |
+ EXT2_FT_SYMLINK, |
+ EXT2_FT_MAX |
+}; |
+ |
+/* |
+ * EXT2_DIR_PAD defines the directory entries boundaries |
+ * |
+ * NOTE: It must be a multiple of 4 |
+ */ |
+#define EXT2_DIR_PAD 4 |
+#define EXT2_DIR_ROUND (EXT2_DIR_PAD - 1) |
+#define EXT2_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT2_DIR_ROUND) & \ |
+ ~EXT2_DIR_ROUND) |
+ |
+#endif /* _LINUX_EXT2_FS_H */ |
Index: linuxc26/include/linux/swap.h |
=================================================================== |
--- linuxc26/include/linux/swap.h (nonexistent) |
+++ linuxc26/include/linux/swap.h (revision 422) |
@@ -0,0 +1,283 @@ |
+#ifndef _LINUX_SWAP_H |
+#define _LINUX_SWAP_H |
+ |
+#include <linux/config.h> |
+#include <linux/spinlock.h> |
+#include <linux/linkage.h> |
+#include <linux/mmzone.h> |
+#include <linux/list.h> |
+#include <linux/sched.h> |
+#include <asm/atomic.h> |
+#include <asm/page.h> |
+ |
+#define SWAP_FLAG_PREFER 0x8000 /* set if swap priority specified */ |
+#define SWAP_FLAG_PRIO_MASK 0x7fff |
+#define SWAP_FLAG_PRIO_SHIFT 0 |
+ |
+static inline int current_is_kswapd(void) |
+{ |
+ return current->flags & PF_KSWAPD; |
+} |
+ |
+/* |
+ * MAX_SWAPFILES defines the maximum number of swaptypes: things which can |
+ * be swapped to. The swap type and the offset into that swap type are |
+ * encoded into pte's and into pgoff_t's in the swapcache. Using five bits |
+ * for the type means that the maximum number of swapcache pages is 27 bits |
+ * on 32-bit-pgoff_t architectures. And that assumes that the architecture packs |
+ * the type/offset into the pte as 5/27 as well. |
+ */ |
+#define MAX_SWAPFILES_SHIFT 5 |
+#define MAX_SWAPFILES (1 << MAX_SWAPFILES_SHIFT) |
+ |
+/* |
+ * Magic header for a swap area. The first part of the union is |
+ * what the swap magic looks like for the old (limited to 128MB) |
+ * swap area format, the second part of the union adds - in the |
+ * old reserved area - some extra information. Note that the first |
+ * kilobyte is reserved for boot loader or disk label stuff... |
+ * |
+ * Having the magic at the end of the PAGE_SIZE makes detecting swap |
+ * areas somewhat tricky on machines that support multiple page sizes. |
+ * For 2.5 we'll probably want to move the magic to just beyond the |
+ * bootbits... |
+ */ |
+union swap_header { |
+ struct { |
+ char reserved[PAGE_SIZE - 10]; |
+ char magic[10]; /* SWAP-SPACE or SWAPSPACE2 */ |
+ } magic; |
+ struct { |
+ char bootbits[1024]; /* Space for disklabel etc. */ |
+ unsigned int version; |
+ unsigned int last_page; |
+ unsigned int nr_badpages; |
+ unsigned int padding[125]; |
+ unsigned int badpages[1]; |
+ } info; |
+}; |
+ |
+ /* A swap entry has to fit into a "unsigned long", as |
+ * the entry is hidden in the "index" field of the |
+ * swapper address space. |
+ */ |
+typedef struct { |
+ unsigned long val; |
+} swp_entry_t; |
+ |
+/* |
+ * current->reclaim_state points to one of these when a task is running |
+ * memory reclaim |
+ */ |
+struct reclaim_state { |
+ unsigned long reclaimed_slab; |
+}; |
+ |
+#ifdef __KERNEL__ |
+ |
+struct address_space; |
+struct pte_chain; |
+struct sysinfo; |
+struct writeback_control; |
+struct zone; |
+ |
+/* |
+ * A swap extent maps a range of a swapfile's PAGE_SIZE pages onto a range of |
+ * disk blocks. A list of swap extents maps the entire swapfile. (Where the |
+ * term `swapfile' refers to either a blockdevice or an IS_REG file. Apart |
+ * from setup, they're handled identically. |
+ * |
+ * We always assume that blocks are of size PAGE_SIZE. |
+ */ |
+struct swap_extent { |
+ struct list_head list; |
+ pgoff_t start_page; |
+ pgoff_t nr_pages; |
+ sector_t start_block; |
+}; |
+ |
+/* |
+ * Max bad pages in the new format.. |
+ */ |
+#define __swapoffset(x) ((unsigned long)&((union swap_header *)0)->x) |
+#define MAX_SWAP_BADPAGES \ |
+ ((__swapoffset(magic.magic) - __swapoffset(info.badpages)) / sizeof(int)) |
+ |
+enum { |
+ SWP_USED = (1 << 0), /* is slot in swap_info[] used? */ |
+ SWP_WRITEOK = (1 << 1), /* ok to write to this swap? */ |
+ SWP_ACTIVE = (SWP_USED | SWP_WRITEOK), |
+}; |
+ |
+#define SWAP_CLUSTER_MAX 32 |
+ |
+#define SWAP_MAP_MAX 0x7fff |
+#define SWAP_MAP_BAD 0x8000 |
+ |
+/* |
+ * The in-memory structure used to track swap areas. |
+ * extent_list.prev points at the lowest-index extent. That list is |
+ * sorted. |
+ */ |
+struct swap_info_struct { |
+ unsigned int flags; |
+ spinlock_t sdev_lock; |
+ struct file *swap_file; |
+ struct block_device *bdev; |
+ struct list_head extent_list; |
+ int nr_extents; |
+ struct swap_extent *curr_swap_extent; |
+ unsigned old_block_size; |
+ unsigned short * swap_map; |
+ unsigned int lowest_bit; |
+ unsigned int highest_bit; |
+ unsigned int cluster_next; |
+ unsigned int cluster_nr; |
+ int prio; /* swap priority */ |
+ int pages; |
+ unsigned long max; |
+ unsigned long inuse_pages; |
+ int next; /* next entry on swap list */ |
+}; |
+ |
+struct swap_list_t { |
+ int head; /* head of priority-ordered swapfile list */ |
+ int next; /* swapfile to be used next */ |
+}; |
+ |
+/* Swap 50% full? Release swapcache more aggressively.. */ |
+#define vm_swap_full() (nr_swap_pages*2 < total_swap_pages) |
+ |
+/* linux/mm/oom_kill.c */ |
+extern void out_of_memory(void); |
+ |
+/* linux/mm/memory.c */ |
+extern void swapin_readahead(swp_entry_t); |
+ |
+/* linux/mm/page_alloc.c */ |
+extern unsigned long totalram_pages; |
+extern unsigned long totalhigh_pages; |
+extern int nr_swap_pages; /* XXX: shouldn't this be ulong? --hch */ |
+extern unsigned int nr_free_pages(void); |
+extern unsigned int nr_free_pages_pgdat(pg_data_t *pgdat); |
+extern unsigned int nr_free_buffer_pages(void); |
+extern unsigned int nr_free_pagecache_pages(void); |
+ |
+/* linux/mm/swap.c */ |
+extern void FASTCALL(lru_cache_add(struct page *)); |
+extern void FASTCALL(lru_cache_add_active(struct page *)); |
+extern void FASTCALL(activate_page(struct page *)); |
+extern void FASTCALL(mark_page_accessed(struct page *)); |
+extern void lru_add_drain(void); |
+extern int rotate_reclaimable_page(struct page *page); |
+extern void swap_setup(void); |
+ |
+/* linux/mm/vmscan.c */ |
+extern int try_to_free_pages(struct zone *, unsigned int, unsigned int); |
+extern int shrink_all_memory(int); |
+extern int vm_swappiness; |
+ |
+/* linux/mm/rmap.c */ |
+#ifdef CONFIG_MMU |
+int FASTCALL(page_referenced(struct page *)); |
+struct pte_chain *FASTCALL(page_add_rmap(struct page *, pte_t *, |
+ struct pte_chain *)); |
+void FASTCALL(page_remove_rmap(struct page *, pte_t *)); |
+int FASTCALL(try_to_unmap(struct page *)); |
+ |
+/* linux/mm/shmem.c */ |
+extern int shmem_unuse(swp_entry_t entry, struct page *page); |
+#else |
+#define page_referenced(page) TestClearPageReferenced(page) |
+#define try_to_unmap(page) SWAP_FAIL |
+#endif /* CONFIG_MMU */ |
+ |
+/* return values of try_to_unmap */ |
+#define SWAP_SUCCESS 0 |
+#define SWAP_AGAIN 1 |
+#define SWAP_FAIL 2 |
+ |
+#ifdef CONFIG_SWAP |
+/* linux/mm/page_io.c */ |
+extern int swap_readpage(struct file *, struct page *); |
+extern int swap_writepage(struct page *page, struct writeback_control *wbc); |
+extern int rw_swap_page_sync(int, swp_entry_t, struct page *); |
+ |
+/* linux/mm/swap_state.c */ |
+extern struct address_space swapper_space; |
+#define total_swapcache_pages swapper_space.nrpages |
+extern void show_swap_cache_info(void); |
+extern int add_to_swap(struct page *); |
+extern void __delete_from_swap_cache(struct page *); |
+extern void delete_from_swap_cache(struct page *); |
+extern int move_to_swap_cache(struct page *, swp_entry_t); |
+extern int move_from_swap_cache(struct page *, unsigned long, |
+ struct address_space *); |
+extern void free_page_and_swap_cache(struct page *); |
+extern void free_pages_and_swap_cache(struct page **, int); |
+extern struct page * lookup_swap_cache(swp_entry_t); |
+extern struct page * read_swap_cache_async(swp_entry_t); |
+ |
+/* linux/mm/swapfile.c */ |
+extern int total_swap_pages; |
+extern unsigned int nr_swapfiles; |
+extern struct swap_info_struct swap_info[]; |
+extern void si_swapinfo(struct sysinfo *); |
+extern swp_entry_t get_swap_page(void); |
+extern int swap_duplicate(swp_entry_t); |
+extern int valid_swaphandles(swp_entry_t, unsigned long *); |
+extern void swap_free(swp_entry_t); |
+extern void free_swap_and_cache(swp_entry_t); |
+extern sector_t map_swap_page(struct swap_info_struct *, pgoff_t); |
+extern struct swap_info_struct *get_swap_info_struct(unsigned); |
+extern int can_share_swap_page(struct page *); |
+extern int remove_exclusive_swap_page(struct page *); |
+ |
+extern struct swap_list_t swap_list; |
+extern spinlock_t swaplock; |
+ |
+#define swap_list_lock() spin_lock(&swaplock) |
+#define swap_list_unlock() spin_unlock(&swaplock) |
+#define swap_device_lock(p) spin_lock(&p->sdev_lock) |
+#define swap_device_unlock(p) spin_unlock(&p->sdev_lock) |
+ |
+#else /* CONFIG_SWAP */ |
+ |
+#define total_swap_pages 0 |
+#define total_swapcache_pages 0UL |
+ |
+#define si_swapinfo(val) \ |
+ do { (val)->freeswap = (val)->totalswap = 0; } while (0) |
+#define free_page_and_swap_cache(page) \ |
+ page_cache_release(page) |
+#define free_pages_and_swap_cache(pages, nr) \ |
+ release_pages((pages), (nr), 0); |
+ |
+#define show_swap_cache_info() /*NOTHING*/ |
+#define free_swap_and_cache(swp) /*NOTHING*/ |
+#define swap_duplicate(swp) /*NOTHING*/ |
+#define swap_free(swp) /*NOTHING*/ |
+#define read_swap_cache_async(swp) NULL |
+#define lookup_swap_cache(swp) NULL |
+#define valid_swaphandles(swp, off) 0 |
+#define can_share_swap_page(p) 0 |
+#define move_to_swap_cache(p, swp) 1 |
+#define move_from_swap_cache(p, i, m) 1 |
+#define __delete_from_swap_cache(p) /*NOTHING*/ |
+#define delete_from_swap_cache(p) /*NOTHING*/ |
+ |
+static inline int remove_exclusive_swap_page(struct page *p) |
+{ |
+ return 0; |
+} |
+ |
+static inline swp_entry_t get_swap_page(void) |
+{ |
+ swp_entry_t entry; |
+ entry.val = 0; |
+ return entry; |
+} |
+ |
+#endif /* CONFIG_SWAP */ |
+#endif /* __KERNEL__*/ |
+#endif /* _LINUX_SWAP_H */ |
Index: linuxc26/include/linux/miscdevice.h |
=================================================================== |
--- linuxc26/include/linux/miscdevice.h (nonexistent) |
+++ linuxc26/include/linux/miscdevice.h (revision 422) |
@@ -0,0 +1,54 @@ |
+#ifndef _LINUX_MISCDEVICE_H |
+#define _LINUX_MISCDEVICE_H |
+#include <linux/module.h> |
+#include <linux/major.h> |
+ |
+#define BUSMOUSE_MINOR 0 |
+#define PSMOUSE_MINOR 1 |
+#define MS_BUSMOUSE_MINOR 2 |
+#define ATIXL_BUSMOUSE_MINOR 3 |
+/*#define AMIGAMOUSE_MINOR 4 FIXME OBSOLETE */ |
+#define ATARIMOUSE_MINOR 5 |
+#define SUN_MOUSE_MINOR 6 |
+#define APOLLO_MOUSE_MINOR 7 |
+#define PC110PAD_MINOR 9 |
+/*#define ADB_MOUSE_MINOR 10 FIXME OBSOLETE */ |
+#define WATCHDOG_MINOR 130 /* Watchdog timer */ |
+#define TEMP_MINOR 131 /* Temperature Sensor */ |
+#define RTC_MINOR 135 |
+#define EFI_RTC_MINOR 136 /* EFI Time services */ |
+#define SUN_OPENPROM_MINOR 139 |
+#define DMAPI_MINOR 140 /* DMAPI */ |
+#define NVRAM_MINOR 144 |
+#define I2O_MINOR 166 |
+#define MICROCODE_MINOR 184 |
+#define MWAVE_MINOR 219 /* ACP/Mwave Modem */ |
+#define MPT_MINOR 220 |
+#define MISC_DYNAMIC_MINOR 255 |
+ |
+#define SGI_GRAPHICS_MINOR 146 |
+#define SGI_OPENGL_MINOR 147 |
+#define SGI_GFX_MINOR 148 |
+#define SGI_STREAMS_MOUSE 149 |
+#define SGI_STREAMS_KEYBOARD 150 |
+/* drivers/sgi/char/usema.c */ |
+#define SGI_USEMACLONE 151 |
+ |
+#define TUN_MINOR 200 |
+ |
+struct miscdevice |
+{ |
+ int minor; |
+ const char *name; |
+ struct file_operations *fops; |
+ struct list_head list; |
+ char devfs_name[64]; |
+}; |
+ |
+extern int misc_register(struct miscdevice * misc); |
+extern int misc_deregister(struct miscdevice * misc); |
+ |
+#define MODULE_ALIAS_MISCDEV(minor) \ |
+ MODULE_ALIAS("char-major-" __stringify(MISC_MAJOR) \ |
+ "-" __stringify(minor)) |
+#endif |
Index: linuxc26/include/linux/ppdev.h |
=================================================================== |
--- linuxc26/include/linux/ppdev.h (nonexistent) |
+++ linuxc26/include/linux/ppdev.h (revision 422) |
@@ -0,0 +1,101 @@ |
+/* |
+ * linux/drivers/char/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_MAJOR 99 |
+ |
+#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) |
+ |
+ |
Index: linuxc26/include/linux/posix_acl.h |
=================================================================== |
--- linuxc26/include/linux/posix_acl.h (nonexistent) |
+++ linuxc26/include/linux/posix_acl.h (revision 422) |
@@ -0,0 +1,87 @@ |
+/* |
+ File: linux/posix_acl.h |
+ |
+ (C) 2002 Andreas Gruenbacher, <a.gruenbacher@computer.org> |
+*/ |
+ |
+ |
+#ifndef __LINUX_POSIX_ACL_H |
+#define __LINUX_POSIX_ACL_H |
+ |
+#include <linux/slab.h> |
+ |
+#define ACL_UNDEFINED_ID (-1) |
+ |
+/* a_type field in acl_user_posix_entry_t */ |
+#define ACL_TYPE_ACCESS (0x8000) |
+#define ACL_TYPE_DEFAULT (0x4000) |
+ |
+/* e_tag entry in struct posix_acl_entry */ |
+#define ACL_USER_OBJ (0x01) |
+#define ACL_USER (0x02) |
+#define ACL_GROUP_OBJ (0x04) |
+#define ACL_GROUP (0x08) |
+#define ACL_MASK (0x10) |
+#define ACL_OTHER (0x20) |
+ |
+/* permissions in the e_perm field */ |
+#define ACL_READ (0x04) |
+#define ACL_WRITE (0x02) |
+#define ACL_EXECUTE (0x01) |
+//#define ACL_ADD (0x08) |
+//#define ACL_DELETE (0x10) |
+ |
+struct posix_acl_entry { |
+ short e_tag; |
+ unsigned short e_perm; |
+ unsigned int e_id; |
+}; |
+ |
+struct posix_acl { |
+ atomic_t a_refcount; |
+ unsigned int a_count; |
+ struct posix_acl_entry a_entries[0]; |
+}; |
+ |
+#define FOREACH_ACL_ENTRY(pa, acl, pe) \ |
+ for(pa=(acl)->a_entries, pe=pa+(acl)->a_count; pa<pe; pa++) |
+ |
+ |
+/* |
+ * Duplicate an ACL handle. |
+ */ |
+static inline struct posix_acl * |
+posix_acl_dup(struct posix_acl *acl) |
+{ |
+ if (acl) |
+ atomic_inc(&acl->a_refcount); |
+ return acl; |
+} |
+ |
+/* |
+ * Free an ACL handle. |
+ */ |
+static inline void |
+posix_acl_release(struct posix_acl *acl) |
+{ |
+ if (acl && atomic_dec_and_test(&acl->a_refcount)) |
+ kfree(acl); |
+} |
+ |
+ |
+/* posix_acl.c */ |
+ |
+extern struct posix_acl *posix_acl_alloc(int, int); |
+extern struct posix_acl *posix_acl_clone(const struct posix_acl *, int); |
+extern int posix_acl_valid(const struct posix_acl *); |
+extern int posix_acl_permission(struct inode *, const struct posix_acl *, int); |
+extern struct posix_acl *posix_acl_from_mode(mode_t, int); |
+extern int posix_acl_equiv_mode(const struct posix_acl *, mode_t *); |
+extern int posix_acl_create_masq(struct posix_acl *, mode_t *); |
+extern int posix_acl_chmod_masq(struct posix_acl *, mode_t); |
+extern int posix_acl_masq_nfs_mode(struct posix_acl *, mode_t *); |
+ |
+extern struct posix_acl *get_posix_acl(struct inode *, int); |
+extern int set_posix_acl(struct inode *, int, struct posix_acl *); |
+ |
+#endif /* __LINUX_POSIX_ACL_H */ |
Index: linuxc26/include/linux/ixjuser.h |
=================================================================== |
--- linuxc26/include/linux/ixjuser.h (nonexistent) |
+++ linuxc26/include/linux/ixjuser.h (revision 422) |
@@ -0,0 +1,722 @@ |
+#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. |
+ * |
+ *****************************************************************************/ |
+ |
+static char ixjuser_h_rcsid[] = "$Id: ixjuser.h,v 1.1 2004-01-28 15:25:47 giacomo Exp $"; |
+ |
+#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 futher 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 indexs 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 *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 |
Index: linuxc26/include/linux/nls.h |
=================================================================== |
--- linuxc26/include/linux/nls.h (nonexistent) |
+++ linuxc26/include/linux/nls.h (revision 422) |
@@ -0,0 +1,39 @@ |
+#ifndef _LINUX_NLS_H |
+#define _LINUX_NLS_H |
+ |
+#include <linux/init.h> |
+ |
+/* unicode character */ |
+typedef __u16 wchar_t; |
+ |
+struct nls_table { |
+ char *charset; |
+ char *alias; |
+ int (*uni2char) (wchar_t uni, unsigned char *out, int boundlen); |
+ int (*char2uni) (const unsigned char *rawstring, int boundlen, |
+ wchar_t *uni); |
+ unsigned char *charset2lower; |
+ unsigned char *charset2upper; |
+ struct module *owner; |
+ struct nls_table *next; |
+}; |
+ |
+/* this value hold the maximum octet of charset */ |
+#define NLS_MAX_CHARSET_SIZE 6 /* for UTF-8 */ |
+ |
+/* nls.c */ |
+extern int register_nls(struct nls_table *); |
+extern int unregister_nls(struct nls_table *); |
+extern struct nls_table *load_nls(char *); |
+extern void unload_nls(struct nls_table *); |
+extern struct nls_table *load_nls_default(void); |
+ |
+extern int utf8_mbtowc(wchar_t *, const __u8 *, int); |
+extern int utf8_mbstowcs(wchar_t *, const __u8 *, int); |
+extern int utf8_wctomb(__u8 *, wchar_t, int); |
+extern int utf8_wcstombs(__u8 *, const wchar_t *, int); |
+ |
+#define MODULE_ALIAS_NLS(name) MODULE_ALIAS("nls_" __stringify(name)) |
+ |
+#endif /* _LINUX_NLS_H */ |
+ |
Index: linuxc26/include/linux/interrupt.h |
=================================================================== |
--- linuxc26/include/linux/interrupt.h (nonexistent) |
+++ linuxc26/include/linux/interrupt.h (revision 422) |
@@ -0,0 +1,248 @@ |
+/* interrupt.h */ |
+#ifndef _LINUX_INTERRUPT_H |
+#define _LINUX_INTERRUPT_H |
+ |
+#include <linux/config.h> |
+#include <linux/kernel.h> |
+#include <linux/linkage.h> |
+#include <linux/bitops.h> |
+#include <linux/preempt.h> |
+#include <asm/atomic.h> |
+#include <asm/hardirq.h> |
+#include <asm/ptrace.h> |
+#include <asm/system.h> |
+ |
+/* |
+ * For 2.4.x compatibility, 2.4.x can use |
+ * |
+ * typedef void irqreturn_t; |
+ * #define IRQ_NONE |
+ * #define IRQ_HANDLED |
+ * #define IRQ_RETVAL(x) |
+ * |
+ * To mix old-style and new-style irq handler returns. |
+ * |
+ * IRQ_NONE means we didn't handle it. |
+ * IRQ_HANDLED means that we did have a valid interrupt and handled it. |
+ * IRQ_RETVAL(x) selects on the two depending on x being non-zero (for handled) |
+ */ |
+typedef int irqreturn_t; |
+ |
+#define IRQ_NONE (0) |
+#define IRQ_HANDLED (1) |
+#define IRQ_RETVAL(x) ((x) != 0) |
+ |
+struct irqaction { |
+ irqreturn_t (*handler)(int, void *, struct pt_regs *); |
+ unsigned long flags; |
+ unsigned long mask; |
+ const char *name; |
+ void *dev_id; |
+ struct irqaction *next; |
+}; |
+ |
+extern irqreturn_t no_action(int cpl, void *dev_id, struct pt_regs *regs); |
+extern int request_irq(unsigned int, |
+ irqreturn_t (*handler)(int, void *, struct pt_regs *), |
+ unsigned long, const char *, void *); |
+extern void free_irq(unsigned int, void *); |
+ |
+/* |
+ * Temporary defines for UP kernels, until all code gets fixed. |
+ */ |
+#ifndef CONFIG_SMP |
+# define cli() local_irq_disable() |
+# define sti() local_irq_enable() |
+# define save_flags(x) local_save_flags(x) |
+# define restore_flags(x) local_irq_restore(x) |
+# define save_and_cli(x) local_irq_save(x) |
+#endif |
+ |
+/* SoftIRQ primitives. */ |
+#define local_bh_disable() \ |
+ do { preempt_count() += SOFTIRQ_OFFSET; barrier(); } while (0) |
+#define __local_bh_enable() \ |
+ do { barrier(); preempt_count() -= SOFTIRQ_OFFSET; } while (0) |
+ |
+extern void local_bh_enable(void); |
+ |
+/* PLEASE, avoid to allocate new softirqs, if you need not _really_ high |
+ frequency threaded job scheduling. For almost all the purposes |
+ tasklets are more than enough. F.e. all serial device BHs et |
+ al. should be converted to tasklets, not to softirqs. |
+ */ |
+ |
+enum |
+{ |
+ HI_SOFTIRQ=0, |
+ TIMER_SOFTIRQ, |
+ NET_TX_SOFTIRQ, |
+ NET_RX_SOFTIRQ, |
+ SCSI_SOFTIRQ, |
+ TASKLET_SOFTIRQ |
+}; |
+ |
+/* softirq mask and active fields moved to irq_cpustat_t in |
+ * asm/hardirq.h to get better cache usage. KAO |
+ */ |
+ |
+struct softirq_action |
+{ |
+ void (*action)(struct softirq_action *); |
+ void *data; |
+}; |
+ |
+asmlinkage void do_softirq(void); |
+extern void open_softirq(int nr, void (*action)(struct softirq_action*), void *data); |
+extern void softirq_init(void); |
+#define __raise_softirq_irqoff(nr) do { local_softirq_pending() |= 1UL << (nr); } while (0) |
+extern void FASTCALL(raise_softirq_irqoff(unsigned int nr)); |
+extern void FASTCALL(raise_softirq(unsigned int nr)); |
+ |
+#ifndef invoke_softirq |
+#define invoke_softirq() do_softirq() |
+#endif |
+ |
+ |
+/* Tasklets --- multithreaded analogue of BHs. |
+ |
+ Main feature differing them of generic softirqs: tasklet |
+ is running only on one CPU simultaneously. |
+ |
+ Main feature differing them of BHs: different tasklets |
+ may be run simultaneously on different CPUs. |
+ |
+ Properties: |
+ * If tasklet_schedule() is called, then tasklet is guaranteed |
+ to be executed on some cpu at least once after this. |
+ * If the tasklet is already scheduled, but its excecution is still not |
+ started, it will be executed only once. |
+ * If this tasklet is already running on another CPU (or schedule is called |
+ from tasklet itself), it is rescheduled for later. |
+ * Tasklet is strictly serialized wrt itself, but not |
+ wrt another tasklets. If client needs some intertask synchronization, |
+ he makes it with spinlocks. |
+ */ |
+ |
+struct tasklet_struct |
+{ |
+ struct tasklet_struct *next; |
+ unsigned long state; |
+ atomic_t count; |
+ void (*func)(unsigned long); |
+ unsigned long data; |
+}; |
+ |
+#define DECLARE_TASKLET(name, func, data) \ |
+struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(0), func, data } |
+ |
+#define DECLARE_TASKLET_DISABLED(name, func, data) \ |
+struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(1), func, data } |
+ |
+ |
+enum |
+{ |
+ TASKLET_STATE_SCHED, /* Tasklet is scheduled for execution */ |
+ TASKLET_STATE_RUN /* Tasklet is running (SMP only) */ |
+}; |
+ |
+#ifdef CONFIG_SMP |
+static inline int tasklet_trylock(struct tasklet_struct *t) |
+{ |
+ return !test_and_set_bit(TASKLET_STATE_RUN, &(t)->state); |
+} |
+ |
+static inline void tasklet_unlock(struct tasklet_struct *t) |
+{ |
+ smp_mb__before_clear_bit(); |
+ clear_bit(TASKLET_STATE_RUN, &(t)->state); |
+} |
+ |
+static inline void tasklet_unlock_wait(struct tasklet_struct *t) |
+{ |
+ while (test_bit(TASKLET_STATE_RUN, &(t)->state)) { barrier(); } |
+} |
+#else |
+#define tasklet_trylock(t) 1 |
+#define tasklet_unlock_wait(t) do { } while (0) |
+#define tasklet_unlock(t) do { } while (0) |
+#endif |
+ |
+extern void FASTCALL(__tasklet_schedule(struct tasklet_struct *t)); |
+ |
+static inline void tasklet_schedule(struct tasklet_struct *t) |
+{ |
+ if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) |
+ __tasklet_schedule(t); |
+} |
+ |
+extern void FASTCALL(__tasklet_hi_schedule(struct tasklet_struct *t)); |
+ |
+static inline void tasklet_hi_schedule(struct tasklet_struct *t) |
+{ |
+ if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) |
+ __tasklet_hi_schedule(t); |
+} |
+ |
+ |
+static inline void tasklet_disable_nosync(struct tasklet_struct *t) |
+{ |
+ atomic_inc(&t->count); |
+ smp_mb__after_atomic_inc(); |
+} |
+ |
+static inline void tasklet_disable(struct tasklet_struct *t) |
+{ |
+ tasklet_disable_nosync(t); |
+ tasklet_unlock_wait(t); |
+ smp_mb(); |
+} |
+ |
+static inline void tasklet_enable(struct tasklet_struct *t) |
+{ |
+ smp_mb__before_atomic_dec(); |
+ atomic_dec(&t->count); |
+} |
+ |
+static inline void tasklet_hi_enable(struct tasklet_struct *t) |
+{ |
+ smp_mb__before_atomic_dec(); |
+ atomic_dec(&t->count); |
+} |
+ |
+extern void tasklet_kill(struct tasklet_struct *t); |
+extern void tasklet_init(struct tasklet_struct *t, |
+ void (*func)(unsigned long), unsigned long data); |
+ |
+/* |
+ * Autoprobing for irqs: |
+ * |
+ * probe_irq_on() and probe_irq_off() provide robust primitives |
+ * for accurate IRQ probing during kernel initialization. They are |
+ * reasonably simple to use, are not "fooled" by spurious interrupts, |
+ * and, unlike other attempts at IRQ probing, they do not get hung on |
+ * stuck interrupts (such as unused PS2 mouse interfaces on ASUS boards). |
+ * |
+ * For reasonably foolproof probing, use them as follows: |
+ * |
+ * 1. clear and/or mask the device's internal interrupt. |
+ * 2. sti(); |
+ * 3. irqs = probe_irq_on(); // "take over" all unassigned idle IRQs |
+ * 4. enable the device and cause it to trigger an interrupt. |
+ * 5. wait for the device to interrupt, using non-intrusive polling or a delay. |
+ * 6. irq = probe_irq_off(irqs); // get IRQ number, 0=none, negative=multiple |
+ * 7. service the device to clear its pending interrupt. |
+ * 8. loop again if paranoia is required. |
+ * |
+ * probe_irq_on() returns a mask of allocated irq's. |
+ * |
+ * probe_irq_off() takes the mask as a parameter, |
+ * and returns the irq number which occurred, |
+ * or zero if none occurred, or a negative irq number |
+ * if more than one irq occurred. |
+ */ |
+extern unsigned long probe_irq_on(void); /* returns 0 on failure */ |
+extern int probe_irq_off(unsigned long); /* returns 0 or negative on failure */ |
+extern unsigned int probe_irq_mask(unsigned long); /* returns mask of ISA interrupts */ |
+ |
+#endif |
Index: linuxc26/include/linux/netfilter_arp.h |
=================================================================== |
--- linuxc26/include/linux/netfilter_arp.h (nonexistent) |
+++ linuxc26/include/linux/netfilter_arp.h (revision 422) |
@@ -0,0 +1,20 @@ |
+#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/config.h> |
+#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 */ |
Index: linuxc26/include/linux/nfs_fs_sb.h |
=================================================================== |
--- linuxc26/include/linux/nfs_fs_sb.h (nonexistent) |
+++ linuxc26/include/linux/nfs_fs_sb.h (revision 422) |
@@ -0,0 +1,47 @@ |
+#ifndef _NFS_FS_SB |
+#define _NFS_FS_SB |
+ |
+#include <linux/list.h> |
+#include <linux/backing-dev.h> |
+ |
+/* |
+ * NFS client parameters stored in the superblock. |
+ */ |
+struct nfs_server { |
+ struct rpc_clnt * client; /* RPC client handle */ |
+ struct rpc_clnt * client_sys; /* 2nd handle for FSINFO */ |
+ struct nfs_rpc_ops * rpc_ops; /* NFS protocol vector */ |
+ struct backing_dev_info backing_dev_info; |
+ int flags; /* various flags */ |
+ unsigned int caps; /* server capabilities */ |
+ unsigned int rsize; /* read size */ |
+ unsigned int rpages; /* read size (in pages) */ |
+ unsigned int wsize; /* write size */ |
+ unsigned int wpages; /* write size (in pages) */ |
+ unsigned int dtsize; /* readdir size */ |
+ unsigned int bsize; /* server block size */ |
+ unsigned int acregmin; /* attr cache timeouts */ |
+ unsigned int acregmax; |
+ unsigned int acdirmin; |
+ unsigned int acdirmax; |
+ unsigned int namelen; |
+ char * hostname; /* remote hostname */ |
+ struct nfs_fh fh; |
+ struct sockaddr_in addr; |
+#ifdef CONFIG_NFS_V4 |
+ /* Our own IP address, as a null-terminated string. |
+ * This is used to generate the clientid, and the callback address. |
+ */ |
+ char ip_addr[16]; |
+ char * mnt_path; |
+ struct nfs4_client * nfs4_state; /* all NFSv4 state starts here */ |
+ unsigned long lease_time; /* in jiffies */ |
+ unsigned long last_renewal; /* in jiffies */ |
+ void *idmap; |
+#endif |
+}; |
+ |
+/* Server capabilities */ |
+#define NFS_CAP_READDIRPLUS (1) |
+ |
+#endif |
Index: linuxc26/include/linux/wavefront.h |
=================================================================== |
--- linuxc26/include/linux/wavefront.h (nonexistent) |
+++ linuxc26/include/linux/wavefront.h (revision 422) |
@@ -0,0 +1,675 @@ |
+#ifndef __wavefront_h__ |
+#define __wavefront_h__ |
+ |
+/* WaveFront header file. |
+ * |
+ * Copyright (C) by Paul Barton-Davis 1998 |
+ * |
+ * This program is distributed under the GNU GENERAL PUBLIC LICENSE (GPL) |
+ * Version 2 (June 1991). See the "COPYING" file distributed with this software |
+ * for more info. |
+ */ |
+ |
+#if (!defined(__GNUC__) && !defined(__GNUG__)) |
+ |
+ You will not be able to compile this file correctly without gcc, because |
+ it is necessary to pack the "wavefront_alias" structure to a size |
+ of 22 bytes, corresponding to 16-bit alignment (as would have been |
+ the case on the original platform, MS-DOS). If this is not done, |
+ then WavePatch-format files cannot be read/written correctly. |
+ The method used to do this here ("__attribute__((packed)") is |
+ completely compiler dependent. |
+ |
+ All other wavefront_* types end up aligned to 32 bit values and |
+ still have the same (correct) size. |
+ |
+#else |
+ |
+ /* However, note that as of G++ 2.7.3.2, g++ was unable to |
+ correctly parse *type* __attribute__ tags. It will do the |
+ right thing if we use the "packed" attribute on each struct |
+ member, which has the same semantics anyway. |
+ */ |
+ |
+#endif /* __GNUC__ */ |
+ |
+/***************************** WARNING ******************************** |
+ PLEASE DO NOT MODIFY THIS FILE IN ANY WAY THAT AFFECTS ITS ABILITY TO |
+ BE USED WITH EITHER C *OR* C++. |
+ **********************************************************************/ |
+ |
+#ifndef NUM_MIDIKEYS |
+#define NUM_MIDIKEYS 128 |
+#endif /* NUM_MIDIKEYS */ |
+ |
+#ifndef NUM_MIDICHANNELS |
+#define NUM_MIDICHANNELS 16 |
+#endif /* NUM_MIDICHANNELS */ |
+ |
+/* These are very useful/important. the original wavefront interface |
+ was developed on a 16 bit system, where sizeof(int) = 2 |
+ bytes. Defining things like this makes the code much more portable, and |
+ easier to understand without having to toggle back and forth |
+ between a 16-bit view of the world and a 32-bit one. |
+ */ |
+ |
+typedef short INT16; |
+typedef unsigned short UINT16; |
+typedef int INT32; |
+typedef unsigned int UINT32; |
+typedef char CHAR8; |
+typedef unsigned char UCHAR8; |
+ |
+/* Pseudo-commands not part of the WaveFront command set. |
+ These are used for various driver controls and direct |
+ hardware control. |
+ */ |
+ |
+#define WFC_DEBUG_DRIVER 0 |
+#define WFC_FX_IOCTL 1 |
+#define WFC_PATCH_STATUS 2 |
+#define WFC_PROGRAM_STATUS 3 |
+#define WFC_SAMPLE_STATUS 4 |
+#define WFC_DISABLE_INTERRUPTS 5 |
+#define WFC_ENABLE_INTERRUPTS 6 |
+#define WFC_INTERRUPT_STATUS 7 |
+#define WFC_ROMSAMPLES_RDONLY 8 |
+#define WFC_IDENTIFY_SLOT_TYPE 9 |
+ |
+/* Wavefront synth commands |
+ */ |
+ |
+#define WFC_DOWNLOAD_SAMPLE 0x80 |
+#define WFC_DOWNLOAD_BLOCK 0x81 |
+#define WFC_DOWNLOAD_MULTISAMPLE 0x82 |
+#define WFC_DOWNLOAD_SAMPLE_ALIAS 0x83 |
+#define WFC_DELETE_SAMPLE 0x84 |
+#define WFC_REPORT_FREE_MEMORY 0x85 |
+#define WFC_DOWNLOAD_PATCH 0x86 |
+#define WFC_DOWNLOAD_PROGRAM 0x87 |
+#define WFC_SET_SYNTHVOL 0x89 |
+#define WFC_SET_NVOICES 0x8B |
+#define WFC_DOWNLOAD_DRUM 0x90 |
+#define WFC_GET_SYNTHVOL 0x92 |
+#define WFC_GET_NVOICES 0x94 |
+#define WFC_DISABLE_CHANNEL 0x9A |
+#define WFC_ENABLE_CHANNEL 0x9B |
+#define WFC_MISYNTH_OFF 0x9D |
+#define WFC_MISYNTH_ON 0x9E |
+#define WFC_FIRMWARE_VERSION 0x9F |
+#define WFC_GET_NSAMPLES 0xA0 |
+#define WFC_DISABLE_DRUM_PROGRAM 0xA2 |
+#define WFC_UPLOAD_PATCH 0xA3 |
+#define WFC_UPLOAD_PROGRAM 0xA4 |
+#define WFC_SET_TUNING 0xA6 |
+#define WFC_GET_TUNING 0xA7 |
+#define WFC_VMIDI_ON 0xA8 |
+#define WFC_VMIDI_OFF 0xA9 |
+#define WFC_MIDI_STATUS 0xAA |
+#define WFC_GET_CHANNEL_STATUS 0xAB |
+#define WFC_DOWNLOAD_SAMPLE_HEADER 0xAC |
+#define WFC_UPLOAD_SAMPLE_HEADER 0xAD |
+#define WFC_UPLOAD_MULTISAMPLE 0xAE |
+#define WFC_UPLOAD_SAMPLE_ALIAS 0xAF |
+#define WFC_IDENTIFY_SAMPLE_TYPE 0xB0 |
+#define WFC_DOWNLOAD_EDRUM_PROGRAM 0xB1 |
+#define WFC_UPLOAD_EDRUM_PROGRAM 0xB2 |
+#define WFC_SET_EDRUM_CHANNEL 0xB3 |
+#define WFC_INSTOUT_LEVELS 0xB4 |
+#define WFC_PEAKOUT_LEVELS 0xB5 |
+#define WFC_REPORT_CHANNEL_PROGRAMS 0xB6 |
+#define WFC_HARDWARE_VERSION 0xCF |
+#define WFC_UPLOAD_SAMPLE_PARAMS 0xD7 |
+#define WFC_DOWNLOAD_OS 0xF1 |
+#define WFC_NOOP 0xFF |
+ |
+#define WF_MAX_SAMPLE 512 |
+#define WF_MAX_PATCH 256 |
+#define WF_MAX_PROGRAM 128 |
+ |
+#define WF_SECTION_MAX 44 /* longest OS section length */ |
+ |
+/* # of bytes we send to the board when sending it various kinds of |
+ substantive data, such as samples, patches and programs. |
+*/ |
+ |
+#define WF_PROGRAM_BYTES 32 |
+#define WF_PATCH_BYTES 132 |
+#define WF_SAMPLE_BYTES 27 |
+#define WF_SAMPLE_HDR_BYTES 25 |
+#define WF_ALIAS_BYTES 25 |
+#define WF_DRUM_BYTES 9 |
+#define WF_MSAMPLE_BYTES 259 /* (MIDI_KEYS * 2) + 3 */ |
+ |
+#define WF_ACK 0x80 |
+#define WF_DMA_ACK 0x81 |
+ |
+/* OR-values for MIDI status bits */ |
+ |
+#define WF_MIDI_VIRTUAL_ENABLED 0x1 |
+#define WF_MIDI_VIRTUAL_IS_EXTERNAL 0x2 |
+#define WF_MIDI_IN_TO_SYNTH_DISABLED 0x4 |
+ |
+/* slot indexes for struct address_info: makes code a little more mnemonic */ |
+ |
+#define WF_SYNTH_SLOT 0 |
+#define WF_INTERNAL_MIDI_SLOT 1 |
+#define WF_EXTERNAL_MIDI_SLOT 2 |
+ |
+/* Magic MIDI bytes used to switch I/O streams on the ICS2115 MPU401 |
+ emulation. Note these NEVER show up in output from the device and |
+ should NEVER be used in input unless Virtual MIDI mode has been |
+ disabled. If they do show up as input, the results are unpredictable. |
+*/ |
+ |
+#define WF_EXTERNAL_SWITCH 0xFD |
+#define WF_INTERNAL_SWITCH 0xF9 |
+ |
+/* Debugging flags */ |
+ |
+#define WF_DEBUG_CMD 0x1 |
+#define WF_DEBUG_DATA 0x2 |
+#define WF_DEBUG_LOAD_PATCH 0x4 |
+#define WF_DEBUG_IO 0x8 |
+ |
+/* WavePatch file format stuff */ |
+ |
+#define WF_WAVEPATCH_VERSION 120; /* Current version number (1.2) */ |
+#define WF_MAX_COMMENT 64 /* Comment length */ |
+#define WF_NUM_LAYERS 4 |
+#define WF_NAME_LENGTH 32 |
+#define WF_SOURCE_LENGTH 260 |
+ |
+#define BankFileID "Bank" |
+#define DrumkitFileID "DrumKit" |
+#define ProgramFileID "Program" |
+ |
+struct wf_envelope |
+{ |
+ UCHAR8 attack_time:7; |
+ UCHAR8 Unused1:1; |
+ |
+ UCHAR8 decay1_time:7; |
+ UCHAR8 Unused2:1; |
+ |
+ UCHAR8 decay2_time:7; |
+ UCHAR8 Unused3:1; |
+ |
+ UCHAR8 sustain_time:7; |
+ UCHAR8 Unused4:1; |
+ |
+ UCHAR8 release_time:7; |
+ UCHAR8 Unused5:1; |
+ |
+ UCHAR8 release2_time:7; |
+ UCHAR8 Unused6:1; |
+ |
+ CHAR8 attack_level; |
+ CHAR8 decay1_level; |
+ CHAR8 decay2_level; |
+ CHAR8 sustain_level; |
+ CHAR8 release_level; |
+ |
+ UCHAR8 attack_velocity:7; |
+ UCHAR8 Unused7:1; |
+ |
+ UCHAR8 volume_velocity:7; |
+ UCHAR8 Unused8:1; |
+ |
+ UCHAR8 keyboard_scaling:7; |
+ UCHAR8 Unused9:1; |
+}; |
+typedef struct wf_envelope wavefront_envelope; |
+ |
+struct wf_lfo |
+{ |
+ UCHAR8 sample_number; |
+ |
+ UCHAR8 frequency:7; |
+ UCHAR8 Unused1:1; |
+ |
+ UCHAR8 am_src:4; |
+ UCHAR8 fm_src:4; |
+ |
+ CHAR8 fm_amount; |
+ CHAR8 am_amount; |
+ CHAR8 start_level; |
+ CHAR8 end_level; |
+ |
+ UCHAR8 ramp_delay:7; |
+ UCHAR8 wave_restart:1; /* for LFO2 only */ |
+ |
+ UCHAR8 ramp_time:7; |
+ UCHAR8 Unused2:1; |
+}; |
+typedef struct wf_lfo wavefront_lfo; |
+ |
+struct wf_patch |
+{ |
+ INT16 frequency_bias; /* ** THIS IS IN MOTOROLA FORMAT!! ** */ |
+ |
+ UCHAR8 amplitude_bias:7; |
+ UCHAR8 Unused1:1; |
+ |
+ UCHAR8 portamento:7; |
+ UCHAR8 Unused2:1; |
+ |
+ UCHAR8 sample_number; |
+ |
+ UCHAR8 pitch_bend:4; |
+ UCHAR8 sample_msb:1; |
+ UCHAR8 Unused3:3; |
+ |
+ UCHAR8 mono:1; |
+ UCHAR8 retrigger:1; |
+ UCHAR8 nohold:1; |
+ UCHAR8 restart:1; |
+ UCHAR8 filterconfig:2; /* SDK says "not used" */ |
+ UCHAR8 reuse:1; |
+ UCHAR8 reset_lfo:1; |
+ |
+ UCHAR8 fm_src2:4; |
+ UCHAR8 fm_src1:4; |
+ |
+ CHAR8 fm_amount1; |
+ CHAR8 fm_amount2; |
+ |
+ UCHAR8 am_src:4; |
+ UCHAR8 Unused4:4; |
+ |
+ CHAR8 am_amount; |
+ |
+ UCHAR8 fc1_mode:4; |
+ UCHAR8 fc2_mode:4; |
+ |
+ CHAR8 fc1_mod_amount; |
+ CHAR8 fc1_keyboard_scaling; |
+ CHAR8 fc1_bias; |
+ CHAR8 fc2_mod_amount; |
+ CHAR8 fc2_keyboard_scaling; |
+ CHAR8 fc2_bias; |
+ |
+ UCHAR8 randomizer:7; |
+ UCHAR8 Unused5:1; |
+ |
+ struct wf_envelope envelope1; |
+ struct wf_envelope envelope2; |
+ struct wf_lfo lfo1; |
+ struct wf_lfo lfo2; |
+}; |
+typedef struct wf_patch wavefront_patch; |
+ |
+struct wf_layer |
+{ |
+ UCHAR8 patch_number; |
+ |
+ UCHAR8 mix_level:7; |
+ UCHAR8 mute:1; |
+ |
+ UCHAR8 split_point:7; |
+ UCHAR8 play_below:1; |
+ |
+ UCHAR8 pan_mod_src:2; |
+ UCHAR8 pan_or_mod:1; |
+ UCHAR8 pan:4; |
+ UCHAR8 split_type:1; |
+}; |
+typedef struct wf_layer wavefront_layer; |
+ |
+struct wf_program |
+{ |
+ struct wf_layer layer[WF_NUM_LAYERS]; |
+}; |
+typedef struct wf_program wavefront_program; |
+ |
+struct wf_sample_offset |
+{ |
+ INT32 Fraction:4; |
+ INT32 Integer:20; |
+ INT32 Unused:8; |
+}; |
+typedef struct wf_sample_offset wavefront_sample_offset; |
+ |
+/* Sample slot types */ |
+ |
+#define WF_ST_SAMPLE 0 |
+#define WF_ST_MULTISAMPLE 1 |
+#define WF_ST_ALIAS 2 |
+#define WF_ST_EMPTY 3 |
+ |
+/* pseudo's */ |
+ |
+#define WF_ST_DRUM 4 |
+#define WF_ST_PROGRAM 5 |
+#define WF_ST_PATCH 6 |
+#define WF_ST_SAMPLEHDR 7 |
+ |
+#define WF_ST_MASK 0xf |
+ |
+/* Flags for slot status. These occupy the upper bits of the same byte |
+ as a sample type. |
+*/ |
+ |
+#define WF_SLOT_USED 0x80 /* XXX don't rely on this being accurate */ |
+#define WF_SLOT_FILLED 0x40 |
+#define WF_SLOT_ROM 0x20 |
+ |
+#define WF_SLOT_MASK 0xf0 |
+ |
+/* channel constants */ |
+ |
+#define WF_CH_MONO 0 |
+#define WF_CH_LEFT 1 |
+#define WF_CH_RIGHT 2 |
+ |
+/* Sample formats */ |
+ |
+#define LINEAR_16BIT 0 |
+#define WHITE_NOISE 1 |
+#define LINEAR_8BIT 2 |
+#define MULAW_8BIT 3 |
+ |
+#define WF_SAMPLE_IS_8BIT(smpl) ((smpl)->SampleResolution&2) |
+ |
+ |
+/* |
+ |
+ Because most/all of the sample data we pass in via pointers has |
+ never been copied (just mmap-ed into user space straight from the |
+ disk), it would be nice to allow handling of multi-channel sample |
+ data without forcing user-level extraction of the relevant bytes. |
+ |
+ So, we need a way of specifying which channel to use (the WaveFront |
+ only handles mono samples in a given slot), and the only way to do |
+ this without using some struct other than wavefront_sample as the |
+ interface is the awful hack of using the unused bits in a |
+ wavefront_sample: |
+ |
+ Val Meaning |
+ --- ------- |
+ 0 no channel selection (use channel 1, sample is MONO) |
+ 1 use first channel, and skip one |
+ 2 use second channel, and skip one |
+ 3 use third channel, and skip two |
+ 4 use fourth channel, skip three |
+ 5 use fifth channel, skip four |
+ 6 use six channel, skip five |
+ |
+ |
+ This can handle up to 4 channels, and anyone downloading >4 channels |
+ of sample data just to select one of them needs to find some tools |
+ like sox ... |
+ |
+ NOTE: values 0, 1 and 2 correspond to WF_CH_* above. This is |
+ important. |
+ |
+*/ |
+ |
+#define WF_SET_CHANNEL(samp,chn) \ |
+ (samp)->Unused1 = chn & 0x1; \ |
+ (samp)->Unused2 = chn & 0x2; \ |
+ (samp)->Unused3 = chn & 0x4 |
+ |
+#define WF_GET_CHANNEL(samp) \ |
+ (((samp)->Unused3 << 2)|((samp)->Unused2<<1)|(samp)->Unused1) |
+ |
+typedef struct wf_sample { |
+ struct wf_sample_offset sampleStartOffset; |
+ struct wf_sample_offset loopStartOffset; |
+ struct wf_sample_offset loopEndOffset; |
+ struct wf_sample_offset sampleEndOffset; |
+ INT16 FrequencyBias; |
+ UCHAR8 SampleResolution:2; /* sample_format */ |
+ UCHAR8 Unused1:1; |
+ UCHAR8 Loop:1; |
+ UCHAR8 Bidirectional:1; |
+ UCHAR8 Unused2:1; |
+ UCHAR8 Reverse:1; |
+ UCHAR8 Unused3:1; |
+} wavefront_sample; |
+ |
+typedef struct wf_multisample { |
+ INT16 NumberOfSamples; /* log2 of the number of samples */ |
+ INT16 SampleNumber[NUM_MIDIKEYS]; |
+} wavefront_multisample; |
+ |
+typedef struct wf_alias { |
+ INT16 OriginalSample __attribute__ ((packed)); |
+ |
+ struct wf_sample_offset sampleStartOffset __attribute__ ((packed)); |
+ struct wf_sample_offset loopStartOffset __attribute__ ((packed)); |
+ struct wf_sample_offset sampleEndOffset __attribute__ ((packed)); |
+ struct wf_sample_offset loopEndOffset __attribute__ ((packed)); |
+ |
+ INT16 FrequencyBias __attribute__ ((packed)); |
+ |
+ UCHAR8 SampleResolution:2 __attribute__ ((packed)); |
+ UCHAR8 Unused1:1 __attribute__ ((packed)); |
+ UCHAR8 Loop:1 __attribute__ ((packed)); |
+ UCHAR8 Bidirectional:1 __attribute__ ((packed)); |
+ UCHAR8 Unused2:1 __attribute__ ((packed)); |
+ UCHAR8 Reverse:1 __attribute__ ((packed)); |
+ UCHAR8 Unused3:1 __attribute__ ((packed)); |
+ |
+ /* This structure is meant to be padded only to 16 bits on their |
+ original. Of course, whoever wrote their documentation didn't |
+ realize that sizeof(struct) can be >= |
+ sum(sizeof(struct-fields)) and so thought that giving a C level |
+ description of the structs used in WavePatch files was |
+ sufficient. I suppose it was, as long as you remember the |
+ standard 16->32 bit issues. |
+ */ |
+ |
+ UCHAR8 sixteen_bit_padding __attribute__ ((packed)); |
+} wavefront_alias; |
+ |
+typedef struct wf_drum { |
+ UCHAR8 PatchNumber; |
+ UCHAR8 MixLevel:7; |
+ UCHAR8 Unmute:1; |
+ UCHAR8 Group:4; |
+ UCHAR8 Unused1:4; |
+ UCHAR8 PanModSource:2; |
+ UCHAR8 PanModulated:1; |
+ UCHAR8 PanAmount:4; |
+ UCHAR8 Unused2:1; |
+} wavefront_drum; |
+ |
+typedef struct wf_drumkit { |
+ struct wf_drum drum[NUM_MIDIKEYS]; |
+} wavefront_drumkit; |
+ |
+typedef struct wf_channel_programs { |
+ UCHAR8 Program[NUM_MIDICHANNELS]; |
+} wavefront_channel_programs; |
+ |
+/* How to get MIDI channel status from the data returned by |
+ a WFC_GET_CHANNEL_STATUS command (a struct wf_channel_programs) |
+*/ |
+ |
+#define WF_CHANNEL_STATUS(ch,wcp) (wcp)[(ch/7)] & (1<<((ch)%7)) |
+ |
+typedef union wf_any { |
+ wavefront_sample s; |
+ wavefront_multisample ms; |
+ wavefront_alias a; |
+ wavefront_program pr; |
+ wavefront_patch p; |
+ wavefront_drum d; |
+} wavefront_any; |
+ |
+/* Hannu Solvainen hoped that his "patch_info" struct in soundcard.h |
+ might work for other wave-table based patch loading situations. |
+ Alas, his fears were correct. The WaveFront doesn't even come with |
+ just "patches", but several different kind of structures that |
+ control the sound generation process. |
+ */ |
+ |
+typedef struct wf_patch_info { |
+ |
+ /* the first two fields are used by the OSS "patch loading" interface |
+ only, and are unused by the current user-level library. |
+ */ |
+ |
+ INT16 key; /* Use WAVEFRONT_PATCH here */ |
+ UINT16 devno; /* fill in when sending */ |
+ UCHAR8 subkey; /* WF_ST_{SAMPLE,ALIAS,etc.} */ |
+ |
+#define WAVEFRONT_FIND_FREE_SAMPLE_SLOT 999 |
+ |
+ UINT16 number; /* patch/sample/prog number */ |
+ |
+ UINT32 size; /* size of any data included in |
+ one of the fields in `hdrptr', or |
+ as `dataptr'. |
+ |
+ NOTE: for actual samples, this is |
+ the size of the *SELECTED CHANNEL* |
+ even if more data is actually available. |
+ |
+ So, a stereo sample (2 channels) of |
+ 6000 bytes total has `size' = 3000. |
+ |
+ See the macros and comments for |
+ WF_{GET,SET}_CHANNEL above. |
+ |
+ */ |
+ wavefront_any *hdrptr; /* user-space ptr to hdr bytes */ |
+ UINT16 *dataptr; /* actual sample data */ |
+ |
+ wavefront_any hdr; /* kernel-space copy of hdr bytes */ |
+} wavefront_patch_info; |
+ |
+/* The maximum number of bytes we will ever move to or from user space |
+ in response to a WFC_* command. This obviously doesn't cover |
+ actual sample data. |
+*/ |
+ |
+#define WF_MAX_READ sizeof(wavefront_multisample) |
+#define WF_MAX_WRITE sizeof(wavefront_multisample) |
+ |
+/* |
+ This allows us to execute any WF command except the download/upload |
+ ones, which are handled differently due to copyin/copyout issues as |
+ well as data-nybbling to/from the card. |
+ */ |
+ |
+typedef struct wavefront_control { |
+ int cmd; /* WFC_* */ |
+ char status; /* return status to user-space */ |
+ unsigned char rbuf[WF_MAX_READ]; /* bytes read from card */ |
+ unsigned char wbuf[WF_MAX_WRITE]; /* bytes written to card */ |
+} wavefront_control; |
+ |
+#define WFCTL_WFCMD 0x1 |
+#define WFCTL_LOAD_SPP 0x2 |
+ |
+/* Modulator table */ |
+ |
+#define WF_MOD_LFO1 0 |
+#define WF_MOD_LFO2 1 |
+#define WF_MOD_ENV1 2 |
+#define WF_MOD_ENV2 3 |
+#define WF_MOD_KEYBOARD 4 |
+#define WF_MOD_LOGKEY 5 |
+#define WF_MOD_VELOCITY 6 |
+#define WF_MOD_LOGVEL 7 |
+#define WF_MOD_RANDOM 8 |
+#define WF_MOD_PRESSURE 9 |
+#define WF_MOD_MOD_WHEEL 10 |
+#define WF_MOD_1 WF_MOD_MOD_WHEEL |
+#define WF_MOD_BREATH 11 |
+#define WF_MOD_2 WF_MOD_BREATH |
+#define WF_MOD_FOOT 12 |
+#define WF_MOD_4 WF_MOD_FOOT |
+#define WF_MOD_VOLUME 13 |
+#define WF_MOD_7 WF_MOD_VOLUME |
+#define WF_MOD_PAN 14 |
+#define WF_MOD_10 WF_MOD_PAN |
+#define WF_MOD_EXPR 15 |
+#define WF_MOD_11 WF_MOD_EXPR |
+ |
+/* FX-related material */ |
+ |
+typedef struct wf_fx_info { |
+ int request; /* see list below */ |
+ int data[4]; /* we don't need much */ |
+} wavefront_fx_info; |
+ |
+/* support for each of these will be forthcoming once I or someone |
+ else has figured out which of the addresses on page 6 and page 7 of |
+ the YSS225 control each parameter. Incidentally, these come from |
+ the Windows driver interface, but again, Turtle Beach didn't |
+ document the API to use them. |
+*/ |
+ |
+#define WFFX_SETOUTGAIN 0 |
+#define WFFX_SETSTEREOOUTGAIN 1 |
+#define WFFX_SETREVERBIN1GAIN 2 |
+#define WFFX_SETREVERBIN2GAIN 3 |
+#define WFFX_SETREVERBIN3GAIN 4 |
+#define WFFX_SETCHORUSINPORT 5 |
+#define WFFX_SETREVERBIN1PORT 6 |
+#define WFFX_SETREVERBIN2PORT 7 |
+#define WFFX_SETREVERBIN3PORT 8 |
+#define WFFX_SETEFFECTPORT 9 |
+#define WFFX_SETAUXPORT 10 |
+#define WFFX_SETREVERBTYPE 11 |
+#define WFFX_SETREVERBDELAY 12 |
+#define WFFX_SETCHORUSLFO 13 |
+#define WFFX_SETCHORUSPMD 14 |
+#define WFFX_SETCHORUSAMD 15 |
+#define WFFX_SETEFFECT 16 |
+#define WFFX_SETBASEALL 17 |
+#define WFFX_SETREVERBALL 18 |
+#define WFFX_SETCHORUSALL 20 |
+#define WFFX_SETREVERBDEF 22 |
+#define WFFX_SETCHORUSDEF 23 |
+#define WFFX_DELAYSETINGAIN 24 |
+#define WFFX_DELAYSETFBGAIN 25 |
+#define WFFX_DELAYSETFBLPF 26 |
+#define WFFX_DELAYSETGAIN 27 |
+#define WFFX_DELAYSETTIME 28 |
+#define WFFX_DELAYSETFBTIME 29 |
+#define WFFX_DELAYSETALL 30 |
+#define WFFX_DELAYSETDEF 32 |
+#define WFFX_SDELAYSETINGAIN 33 |
+#define WFFX_SDELAYSETFBGAIN 34 |
+#define WFFX_SDELAYSETFBLPF 35 |
+#define WFFX_SDELAYSETGAIN 36 |
+#define WFFX_SDELAYSETTIME 37 |
+#define WFFX_SDELAYSETFBTIME 38 |
+#define WFFX_SDELAYSETALL 39 |
+#define WFFX_SDELAYSETDEF 41 |
+#define WFFX_DEQSETINGAIN 42 |
+#define WFFX_DEQSETFILTER 43 |
+#define WFFX_DEQSETALL 44 |
+#define WFFX_DEQSETDEF 46 |
+#define WFFX_MUTE 47 |
+#define WFFX_FLANGESETBALANCE 48 |
+#define WFFX_FLANGESETDELAY 49 |
+#define WFFX_FLANGESETDWFFX_TH 50 |
+#define WFFX_FLANGESETFBGAIN 51 |
+#define WFFX_FLANGESETINGAIN 52 |
+#define WFFX_FLANGESETLFO 53 |
+#define WFFX_FLANGESETALL 54 |
+#define WFFX_FLANGESETDEF 56 |
+#define WFFX_PITCHSETSHIFT 57 |
+#define WFFX_PITCHSETBALANCE 58 |
+#define WFFX_PITCHSETALL 59 |
+#define WFFX_PITCHSETDEF 61 |
+#define WFFX_SRSSETINGAIN 62 |
+#define WFFX_SRSSETSPACE 63 |
+#define WFFX_SRSSETCENTER 64 |
+#define WFFX_SRSSETGAIN 65 |
+#define WFFX_SRSSETMODE 66 |
+#define WFFX_SRSSETDEF 68 |
+ |
+/* Allow direct user-space control over FX memory/coefficient data. |
+ In theory this could be used to download the FX microprogram, |
+ but it would be a little slower, and involve some weird code. |
+ */ |
+ |
+#define WFFX_MEMSET 69 |
+ |
+#endif /* __wavefront_h__ */ |
Index: linuxc26/include/linux/pid.h |
=================================================================== |
--- linuxc26/include/linux/pid.h (nonexistent) |
+++ linuxc26/include/linux/pid.h (revision 422) |
@@ -0,0 +1,64 @@ |
+#ifndef _LINUX_PID_H |
+#define _LINUX_PID_H |
+ |
+enum pid_type |
+{ |
+ PIDTYPE_PID, |
+ PIDTYPE_TGID, |
+ PIDTYPE_PGID, |
+ PIDTYPE_SID, |
+ PIDTYPE_MAX |
+}; |
+ |
+struct pid |
+{ |
+ int nr; |
+ atomic_t count; |
+ struct task_struct *task; |
+ struct list_head task_list; |
+ struct list_head hash_chain; |
+}; |
+ |
+struct pid_link |
+{ |
+ struct list_head pid_chain; |
+ struct pid *pidptr; |
+ struct pid pid; |
+}; |
+ |
+#define pid_task(elem, type) \ |
+ list_entry(elem, struct task_struct, pids[type].pid_chain) |
+ |
+/* |
+ * attach_pid() and link_pid() must be called with the tasklist_lock |
+ * write-held. |
+ */ |
+extern int FASTCALL(attach_pid(struct task_struct *task, enum pid_type type, int nr)); |
+ |
+extern void FASTCALL(link_pid(struct task_struct *task, struct pid_link *link, struct pid *pid)); |
+ |
+/* |
+ * detach_pid() must be called with the tasklist_lock write-held. |
+ */ |
+extern void FASTCALL(detach_pid(struct task_struct *task, enum pid_type)); |
+ |
+/* |
+ * look up a PID in the hash table. Must be called with the tasklist_lock |
+ * held. |
+ */ |
+extern struct pid *FASTCALL(find_pid(enum pid_type, int)); |
+ |
+extern int alloc_pidmap(void); |
+extern void FASTCALL(free_pidmap(int)); |
+extern void switch_exec_pids(struct task_struct *leader, struct task_struct *thread); |
+ |
+#define for_each_task_pid(who, type, task, elem, pid) \ |
+ if ((pid = find_pid(type, who))) \ |
+ for (elem = pid->task_list.next, \ |
+ prefetch(elem->next), \ |
+ task = pid_task(elem, type); \ |
+ elem != &pid->task_list; \ |
+ elem = elem->next, prefetch(elem->next), \ |
+ task = pid_task(elem, type)) |
+ |
+#endif /* _LINUX_PID_H */ |
Index: linuxc26/include/linux/moduleloader.h |
=================================================================== |
--- linuxc26/include/linux/moduleloader.h (nonexistent) |
+++ linuxc26/include/linux/moduleloader.h (revision 422) |
@@ -0,0 +1,47 @@ |
+#ifndef _LINUX_MODULELOADER_H |
+#define _LINUX_MODULELOADER_H |
+/* The stuff needed for archs to support modules. */ |
+ |
+#include <linux/module.h> |
+#include <linux/elf.h> |
+ |
+/* These must be implemented by the specific architecture */ |
+ |
+/* Adjust arch-specific sections. Return 0 on success. */ |
+int module_frob_arch_sections(Elf_Ehdr *hdr, |
+ Elf_Shdr *sechdrs, |
+ char *secstrings, |
+ struct module *mod); |
+ |
+/* Allocator used for allocating struct module, core sections and init |
+ sections. Returns NULL on failure. */ |
+void *module_alloc(unsigned long size); |
+ |
+/* Free memory returned from module_alloc. */ |
+void module_free(struct module *mod, void *module_region); |
+ |
+/* Apply the given relocation to the (simplified) ELF. Return -error |
+ or 0. */ |
+int apply_relocate(Elf_Shdr *sechdrs, |
+ const char *strtab, |
+ unsigned int symindex, |
+ unsigned int relsec, |
+ struct module *mod); |
+ |
+/* Apply the given add relocation to the (simplified) ELF. Return |
+ -error or 0 */ |
+int apply_relocate_add(Elf_Shdr *sechdrs, |
+ const char *strtab, |
+ unsigned int symindex, |
+ unsigned int relsec, |
+ struct module *mod); |
+ |
+/* Any final processing of module before access. Return -error or 0. */ |
+int module_finalize(const Elf_Ehdr *hdr, |
+ const Elf_Shdr *sechdrs, |
+ struct module *mod); |
+ |
+/* Any cleanup needed when module leaves. */ |
+void module_arch_cleanup(struct module *mod); |
+ |
+#endif |
Index: linuxc26/include/linux/ptrace.h |
=================================================================== |
--- linuxc26/include/linux/ptrace.h (nonexistent) |
+++ linuxc26/include/linux/ptrace.h (revision 422) |
@@ -0,0 +1,115 @@ |
+#ifndef _LINUX_PTRACE_H |
+#define _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 0x10 |
+#define PTRACE_DETACH 0x11 |
+ |
+#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 |
+ |
+/* options set using PTRACE_SETOPTIONS */ |
+#define PTRACE_O_TRACESYSGOOD 0x00000001 |
+#define PTRACE_O_TRACEFORK 0x00000002 |
+#define PTRACE_O_TRACEVFORK 0x00000004 |
+#define PTRACE_O_TRACECLONE 0x00000008 |
+#define PTRACE_O_TRACEEXEC 0x00000010 |
+#define PTRACE_O_TRACEVFORKDONE 0x00000020 |
+#define PTRACE_O_TRACEEXIT 0x00000040 |
+ |
+#define PTRACE_O_MASK 0x0000007f |
+ |
+/* 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 |
+ |
+#include <asm/ptrace.h> |
+ |
+#ifdef __KERNEL__ |
+/* |
+ * Ptrace flags |
+ */ |
+ |
+#define PT_PTRACED 0x00000001 |
+#define PT_DTRACE 0x00000002 /* delayed trace (used on m68k, i386) */ |
+#define PT_TRACESYSGOOD 0x00000004 |
+#define PT_PTRACE_CAP 0x00000008 /* ptracer can follow suid-exec */ |
+#define PT_TRACE_FORK 0x00000010 |
+#define PT_TRACE_VFORK 0x00000020 |
+#define PT_TRACE_CLONE 0x00000040 |
+#define PT_TRACE_EXEC 0x00000080 |
+#define PT_TRACE_VFORK_DONE 0x00000100 |
+#define PT_TRACE_EXIT 0x00000200 |
+ |
+#define PT_TRACE_MASK 0x000003f4 |
+#define PT_SINGLESTEP 0x80000000 /* single stepping (used on ARM) */ |
+ |
+#include <linux/compiler.h> /* For unlikely. */ |
+#include <linux/sched.h> /* For struct task_struct. */ |
+ |
+extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len); |
+extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len); |
+extern int ptrace_attach(struct task_struct *tsk); |
+extern int ptrace_detach(struct task_struct *, unsigned int); |
+extern void ptrace_disable(struct task_struct *); |
+extern int ptrace_check_attach(struct task_struct *task, int kill); |
+extern int ptrace_request(struct task_struct *child, long request, long addr, long data); |
+extern void ptrace_notify(int exit_code); |
+extern void __ptrace_link(struct task_struct *child, |
+ struct task_struct *new_parent); |
+extern void __ptrace_unlink(struct task_struct *child); |
+ |
+static inline void ptrace_link(struct task_struct *child, |
+ struct task_struct *new_parent) |
+{ |
+ if (unlikely(child->ptrace)) |
+ __ptrace_link(child, new_parent); |
+} |
+static inline void ptrace_unlink(struct task_struct *child) |
+{ |
+ if (unlikely(child->ptrace)) |
+ __ptrace_unlink(child); |
+} |
+ |
+ |
+#ifndef force_successful_syscall_return |
+/* |
+ * System call handlers that, upon successful completion, need to return a |
+ * negative value should call force_successful_syscall_return() right before |
+ * returning. On architectures where the syscall convention provides for a |
+ * separate error flag (e.g., alpha, ia64, ppc{,64}, sparc{,64}, possibly |
+ * others), this macro can be used to ensure that the error flag will not get |
+ * set. On architectures which do not support a separate error flag, the macro |
+ * is a no-op and the spurious error condition needs to be filtered out by some |
+ * other means (e.g., in user-level, by passing an extra argument to the |
+ * syscall handler, or something along those lines). |
+ */ |
+#define force_successful_syscall_return() do { } while (0) |
+#endif |
+ |
+#endif |
+ |
+#endif |
Index: linuxc26/include/linux/nfs_fs.h |
=================================================================== |
--- linuxc26/include/linux/nfs_fs.h (nonexistent) |
+++ linuxc26/include/linux/nfs_fs.h (revision 422) |
@@ -0,0 +1,612 @@ |
+/* |
+ * linux/include/linux/nfs_fs.h |
+ * |
+ * Copyright (C) 1992 Rick Sladkey |
+ * |
+ * OS-specific nfs filesystem definitions and declarations |
+ */ |
+ |
+#ifndef _LINUX_NFS_FS_H |
+#define _LINUX_NFS_FS_H |
+ |
+#include <linux/config.h> |
+#include <linux/in.h> |
+#include <linux/mm.h> |
+#include <linux/pagemap.h> |
+#include <linux/rwsem.h> |
+#include <linux/wait.h> |
+#include <linux/uio.h> |
+ |
+#include <linux/nfs_fs_sb.h> |
+ |
+#include <linux/sunrpc/debug.h> |
+#include <linux/sunrpc/auth.h> |
+#include <linux/sunrpc/clnt.h> |
+ |
+#include <linux/nfs.h> |
+#include <linux/nfs2.h> |
+#include <linux/nfs3.h> |
+#include <linux/nfs4.h> |
+#include <linux/nfs_xdr.h> |
+ |
+/* |
+ * Enable debugging support for nfs client. |
+ * Requires RPC_DEBUG. |
+ */ |
+#ifdef RPC_DEBUG |
+# define NFS_DEBUG |
+#endif |
+ |
+#define NFS_MAX_FILE_IO_BUFFER_SIZE 32768 |
+#define NFS_DEF_FILE_IO_BUFFER_SIZE 4096 |
+ |
+/* |
+ * The upper limit on timeouts for the exponential backoff algorithm. |
+ */ |
+#define NFS_WRITEBACK_DELAY (5*HZ) |
+#define NFS_WRITEBACK_LOCKDELAY (60*HZ) |
+#define NFS_COMMIT_DELAY (5*HZ) |
+ |
+/* |
+ * superblock magic number for NFS |
+ */ |
+#define NFS_SUPER_MAGIC 0x6969 |
+ |
+/* |
+ * These are the default flags for swap requests |
+ */ |
+#define NFS_RPC_SWAPFLAGS (RPC_TASK_SWAPPER|RPC_TASK_ROOTCREDS) |
+ |
+#define NFS_RW_SYNC 0x0001 /* O_SYNC handling */ |
+#define NFS_RW_SWAP 0x0002 /* This is a swap request */ |
+ |
+/* |
+ * When flushing a cluster of dirty pages, there can be different |
+ * strategies: |
+ */ |
+#define FLUSH_AGING 0 /* only flush old buffers */ |
+#define FLUSH_SYNC 1 /* file being synced, or contention */ |
+#define FLUSH_WAIT 2 /* wait for completion */ |
+#define FLUSH_STABLE 4 /* commit to stable storage */ |
+ |
+#ifdef __KERNEL__ |
+ |
+/* |
+ * NFSv3 Access mode cache |
+ */ |
+struct nfs_access_cache { |
+ unsigned long jiffies; |
+ struct rpc_cred * cred; |
+ int mask; |
+ int err; |
+}; |
+ |
+/* |
+ * nfs fs inode data in memory |
+ */ |
+struct nfs_inode { |
+ /* |
+ * The 64bit 'inode number' |
+ */ |
+ __u64 fileid; |
+ |
+ /* |
+ * NFS file handle |
+ */ |
+ struct nfs_fh fh; |
+ |
+ /* |
+ * Various flags |
+ */ |
+ unsigned short flags; |
+ |
+ /* |
+ * read_cache_jiffies is when we started read-caching this inode, |
+ * and read_cache_mtime is the mtime of the inode at that time. |
+ * attrtimeo is for how long the cached information is assumed |
+ * to be valid. A successful attribute revalidation doubles |
+ * attrtimeo (up to acregmax/acdirmax), a failure resets it to |
+ * acregmin/acdirmin. |
+ * |
+ * We need to revalidate the cached attrs for this inode if |
+ * |
+ * jiffies - read_cache_jiffies > attrtimeo |
+ * |
+ * and invalidate any cached data/flush out any dirty pages if |
+ * we find that |
+ * |
+ * mtime != read_cache_mtime |
+ */ |
+ unsigned long read_cache_jiffies; |
+ struct timespec read_cache_ctime; |
+ struct timespec read_cache_mtime; |
+ __u64 read_cache_isize; |
+ unsigned long attrtimeo; |
+ unsigned long attrtimeo_timestamp; |
+ __u64 change_attr; /* v4 only */ |
+ |
+ /* |
+ * Timestamp that dates the change made to read_cache_mtime. |
+ * This is of use for dentry revalidation |
+ */ |
+ unsigned long cache_mtime_jiffies; |
+ |
+ struct nfs_access_cache cache_access; |
+ |
+ /* |
+ * This is the cookie verifier used for NFSv3 readdir |
+ * operations |
+ */ |
+ __u32 cookieverf[2]; |
+ |
+ /* |
+ * This is the list of dirty unwritten pages. |
+ */ |
+ struct list_head dirty; |
+ struct list_head commit; |
+ struct radix_tree_root nfs_page_tree; |
+ |
+ unsigned int ndirty, |
+ ncommit, |
+ npages; |
+ |
+ /* Credentials for shared mmap */ |
+ struct rpc_cred *mm_cred; |
+ |
+ wait_queue_head_t nfs_i_wait; |
+ |
+#ifdef CONFIG_NFS_V4 |
+ /* NFSv4 state */ |
+ struct list_head open_states; |
+#endif /* CONFIG_NFS_V4*/ |
+ |
+ struct inode vfs_inode; |
+}; |
+ |
+/* |
+ * Legal inode flag values |
+ */ |
+#define NFS_INO_STALE 0x0001 /* possible stale inode */ |
+#define NFS_INO_ADVISE_RDPLUS 0x0002 /* advise readdirplus */ |
+#define NFS_INO_REVALIDATING 0x0004 /* revalidating attrs */ |
+#define NFS_INO_FLUSH 0x0008 /* inode is due for flushing */ |
+#define NFS_INO_FAKE_ROOT 0x0080 /* root inode placeholder */ |
+ |
+static inline struct nfs_inode *NFS_I(struct inode *inode) |
+{ |
+ return container_of(inode, struct nfs_inode, vfs_inode); |
+} |
+#define NFS_SB(s) ((struct nfs_server *)(s->s_fs_info)) |
+ |
+#define NFS_FH(inode) (&NFS_I(inode)->fh) |
+#define NFS_SERVER(inode) (NFS_SB(inode->i_sb)) |
+#define NFS_CLIENT(inode) (NFS_SERVER(inode)->client) |
+#define NFS_PROTO(inode) (NFS_SERVER(inode)->rpc_ops) |
+#define NFS_ADDR(inode) (RPC_PEERADDR(NFS_CLIENT(inode))) |
+#define NFS_COOKIEVERF(inode) (NFS_I(inode)->cookieverf) |
+#define NFS_READTIME(inode) (NFS_I(inode)->read_cache_jiffies) |
+#define NFS_MTIME_UPDATE(inode) (NFS_I(inode)->cache_mtime_jiffies) |
+#define NFS_CACHE_CTIME(inode) (NFS_I(inode)->read_cache_ctime) |
+#define NFS_CACHE_MTIME(inode) (NFS_I(inode)->read_cache_mtime) |
+#define NFS_CACHE_ISIZE(inode) (NFS_I(inode)->read_cache_isize) |
+#define NFS_CHANGE_ATTR(inode) (NFS_I(inode)->change_attr) |
+#define NFS_CACHEINV(inode) \ |
+do { \ |
+ NFS_READTIME(inode) = jiffies - NFS_MAXATTRTIMEO(inode) - 1; \ |
+} while (0) |
+#define NFS_ATTRTIMEO(inode) (NFS_I(inode)->attrtimeo) |
+#define NFS_MINATTRTIMEO(inode) \ |
+ (S_ISDIR(inode->i_mode)? NFS_SERVER(inode)->acdirmin \ |
+ : NFS_SERVER(inode)->acregmin) |
+#define NFS_MAXATTRTIMEO(inode) \ |
+ (S_ISDIR(inode->i_mode)? NFS_SERVER(inode)->acdirmax \ |
+ : NFS_SERVER(inode)->acregmax) |
+#define NFS_ATTRTIMEO_UPDATE(inode) (NFS_I(inode)->attrtimeo_timestamp) |
+ |
+#define NFS_FLAGS(inode) (NFS_I(inode)->flags) |
+#define NFS_REVALIDATING(inode) (NFS_FLAGS(inode) & NFS_INO_REVALIDATING) |
+#define NFS_STALE(inode) (NFS_FLAGS(inode) & NFS_INO_STALE) |
+#define NFS_FAKE_ROOT(inode) (NFS_FLAGS(inode) & NFS_INO_FAKE_ROOT) |
+ |
+#define NFS_FILEID(inode) (NFS_I(inode)->fileid) |
+ |
+static inline int nfs_server_capable(struct inode *inode, int cap) |
+{ |
+ return NFS_SERVER(inode)->caps & cap; |
+} |
+ |
+static inline int NFS_USE_READDIRPLUS(struct inode *inode) |
+{ |
+ return NFS_FLAGS(inode) & NFS_INO_ADVISE_RDPLUS; |
+} |
+ |
+static inline |
+loff_t page_offset(struct page *page) |
+{ |
+ return ((loff_t)page->index) << PAGE_CACHE_SHIFT; |
+} |
+ |
+/* |
+ * linux/fs/nfs/inode.c |
+ */ |
+extern void nfs_zap_caches(struct inode *); |
+extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *, |
+ struct nfs_fattr *); |
+extern int __nfs_refresh_inode(struct inode *, struct nfs_fattr *); |
+extern int nfs_getattr(struct vfsmount *, struct dentry *, struct kstat *); |
+extern int nfs_permission(struct inode *, int, struct nameidata *); |
+extern void nfs_set_mmcred(struct inode *, struct rpc_cred *); |
+extern int nfs_open(struct inode *, struct file *); |
+extern int nfs_release(struct inode *, struct file *); |
+extern int __nfs_revalidate_inode(struct nfs_server *, struct inode *); |
+extern int nfs_setattr(struct dentry *, struct iattr *); |
+ |
+/* |
+ * linux/fs/nfs/file.c |
+ */ |
+extern struct inode_operations nfs_file_inode_operations; |
+extern struct file_operations nfs_file_operations; |
+extern struct address_space_operations nfs_file_aops; |
+ |
+static __inline__ struct rpc_cred * |
+nfs_file_cred(struct file *file) |
+{ |
+ struct rpc_cred *cred = NULL; |
+ if (file) |
+ cred = (struct rpc_cred *)file->private_data; |
+#ifdef RPC_DEBUG |
+ if (cred && cred->cr_magic != RPCAUTH_CRED_MAGIC) |
+ BUG(); |
+#endif |
+ return cred; |
+} |
+ |
+/* |
+ * linux/fs/nfs/direct.c |
+ */ |
+extern int nfs_direct_IO(int, struct kiocb *, const struct iovec *, loff_t, |
+ unsigned long); |
+ |
+/* |
+ * linux/fs/nfs/dir.c |
+ */ |
+extern struct inode_operations nfs_dir_inode_operations; |
+extern struct file_operations nfs_dir_operations; |
+extern struct dentry_operations nfs_dentry_operations; |
+ |
+/* |
+ * linux/fs/nfs/symlink.c |
+ */ |
+extern struct inode_operations nfs_symlink_inode_operations; |
+ |
+/* |
+ * linux/fs/nfs/locks.c |
+ */ |
+extern int nfs_lock(struct file *, int, struct file_lock *); |
+ |
+/* |
+ * linux/fs/nfs/unlink.c |
+ */ |
+extern int nfs_async_unlink(struct dentry *); |
+extern void nfs_complete_unlink(struct dentry *); |
+ |
+/* |
+ * linux/fs/nfs/write.c |
+ */ |
+extern int nfs_writepage(struct page *page, struct writeback_control *wbc); |
+extern int nfs_writepages(struct address_space *, struct writeback_control *); |
+extern int nfs_flush_incompatible(struct file *file, struct page *page); |
+extern int nfs_updatepage(struct file *, struct page *, unsigned int, unsigned int); |
+extern void nfs_writeback_done(struct rpc_task *task); |
+extern void nfs_writedata_release(struct rpc_task *task); |
+ |
+#if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) |
+extern void nfs_commit_release(struct rpc_task *task); |
+extern void nfs_commit_done(struct rpc_task *); |
+#endif |
+ |
+/* |
+ * Try to write back everything synchronously (but check the |
+ * return value!) |
+ */ |
+extern int nfs_sync_file(struct inode *, struct file *, unsigned long, unsigned int, int); |
+extern int nfs_flush_file(struct inode *, struct file *, unsigned long, unsigned int, int); |
+extern int nfs_flush_list(struct list_head *, int, int); |
+#if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) |
+extern int nfs_commit_file(struct inode *, struct file *, unsigned long, unsigned int, int); |
+extern int nfs_commit_list(struct list_head *, int); |
+#else |
+static inline int |
+nfs_commit_file(struct inode *inode, struct file *file, unsigned long offset, |
+ unsigned int len, int flags) |
+{ |
+ return 0; |
+} |
+#endif |
+ |
+static inline int |
+nfs_have_writebacks(struct inode *inode) |
+{ |
+ return NFS_I(inode)->npages != 0; |
+} |
+ |
+static inline int |
+nfs_wb_all(struct inode *inode) |
+{ |
+ int error = nfs_sync_file(inode, 0, 0, 0, FLUSH_WAIT); |
+ return (error < 0) ? error : 0; |
+} |
+ |
+/* |
+ * Write back all requests on one page - we do this before reading it. |
+ */ |
+static inline int |
+nfs_wb_page(struct inode *inode, struct page* page) |
+{ |
+ int error = nfs_sync_file(inode, 0, page->index, 1, |
+ FLUSH_WAIT | FLUSH_STABLE); |
+ return (error < 0) ? error : 0; |
+} |
+ |
+/* |
+ * Write back all pending writes for one user.. |
+ */ |
+static inline int |
+nfs_wb_file(struct inode *inode, struct file *file) |
+{ |
+ int error = nfs_sync_file(inode, file, 0, 0, FLUSH_WAIT); |
+ return (error < 0) ? error : 0; |
+} |
+ |
+/* Hack for future NFS swap support */ |
+#ifndef IS_SWAPFILE |
+# define IS_SWAPFILE(inode) (0) |
+#endif |
+ |
+/* |
+ * linux/fs/nfs/read.c |
+ */ |
+extern int nfs_readpage(struct file *, struct page *); |
+extern int nfs_readpages(struct file *, struct address_space *, |
+ struct list_head *, unsigned); |
+extern int nfs_pagein_list(struct list_head *, int); |
+extern void nfs_readpage_result(struct rpc_task *); |
+extern void nfs_readdata_release(struct rpc_task *); |
+ |
+/* |
+ * linux/fs/mount_clnt.c |
+ * (Used only by nfsroot module) |
+ */ |
+extern int nfsroot_mount(struct sockaddr_in *, char *, struct nfs_fh *, |
+ int, int); |
+ |
+/* |
+ * inline functions |
+ */ |
+static inline int |
+nfs_revalidate_inode(struct nfs_server *server, struct inode *inode) |
+{ |
+ if (time_before(jiffies, NFS_READTIME(inode)+NFS_ATTRTIMEO(inode))) |
+ return NFS_STALE(inode) ? -ESTALE : 0; |
+ return __nfs_revalidate_inode(server, inode); |
+} |
+ |
+static inline int |
+nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr) |
+{ |
+ if ((fattr->valid & NFS_ATTR_FATTR) == 0) |
+ return 0; |
+ return __nfs_refresh_inode(inode,fattr); |
+} |
+ |
+static inline loff_t |
+nfs_size_to_loff_t(__u64 size) |
+{ |
+ loff_t maxsz = (((loff_t) ULONG_MAX) << PAGE_CACHE_SHIFT) + PAGE_CACHE_SIZE - 1; |
+ if (size > maxsz) |
+ return maxsz; |
+ return (loff_t) size; |
+} |
+ |
+static inline ino_t |
+nfs_fileid_to_ino_t(u64 fileid) |
+{ |
+ ino_t ino = (ino_t) fileid; |
+ if (sizeof(ino_t) < sizeof(u64)) |
+ ino ^= fileid >> (sizeof(u64)-sizeof(ino_t)) * 8; |
+ return ino; |
+} |
+ |
+/* NFS root */ |
+ |
+extern void * nfs_root_data(void); |
+ |
+#define nfs_wait_event(clnt, wq, condition) \ |
+({ \ |
+ int __retval = 0; \ |
+ if (clnt->cl_intr) { \ |
+ sigset_t oldmask; \ |
+ rpc_clnt_sigmask(clnt, &oldmask); \ |
+ __retval = wait_event_interruptible(wq, condition); \ |
+ rpc_clnt_sigunmask(clnt, &oldmask); \ |
+ } else \ |
+ wait_event(wq, condition); \ |
+ __retval; \ |
+}) |
+ |
+#define NFS_JUKEBOX_RETRY_TIME (5 * HZ) |
+ |
+#ifdef CONFIG_NFS_V4 |
+ |
+/* |
+ * In a seqid-mutating op, this macro controls which error return |
+ * values trigger incrementation of the seqid. |
+ * |
+ * from rfc 3010: |
+ * The client MUST monotonically increment the sequence number for the |
+ * CLOSE, LOCK, LOCKU, OPEN, OPEN_CONFIRM, and OPEN_DOWNGRADE |
+ * operations. This is true even in the event that the previous |
+ * operation that used the sequence number received an error. The only |
+ * exception to this rule is if the previous operation received one of |
+ * the following errors: NFSERR_STALE_CLIENTID, NFSERR_STALE_STATEID, |
+ * NFSERR_BAD_STATEID, NFSERR_BAD_SEQID, NFSERR_BADXDR, |
+ * NFSERR_RESOURCE, NFSERR_NOFILEHANDLE. |
+ * |
+ */ |
+#define seqid_mutating_err(err) \ |
+(((err) != NFSERR_STALE_CLIENTID) && \ |
+ ((err) != NFSERR_STALE_STATEID) && \ |
+ ((err) != NFSERR_BAD_STATEID) && \ |
+ ((err) != NFSERR_BAD_SEQID) && \ |
+ ((err) != NFSERR_BAD_XDR) && \ |
+ ((err) != NFSERR_RESOURCE) && \ |
+ ((err) != NFSERR_NOFILEHANDLE)) |
+ |
+enum nfs4_client_state { |
+ NFS4CLNT_OK = 0, |
+ NFS4CLNT_NEW, |
+}; |
+ |
+/* |
+ * The nfs4_client identifies our client state to the server. |
+ */ |
+struct nfs4_client { |
+ struct list_head cl_servers; /* Global list of servers */ |
+ struct in_addr cl_addr; /* Server identifier */ |
+ u64 cl_clientid; /* constant */ |
+ nfs4_verifier cl_confirm; |
+ enum nfs4_client_state cl_state; |
+ |
+ u32 cl_lockowner_id; |
+ |
+ /* |
+ * The following rwsem ensures exclusive access to the server |
+ * while we recover the state following a lease expiration. |
+ */ |
+ struct rw_semaphore cl_sem; |
+ |
+ struct list_head cl_state_owners; |
+ struct list_head cl_unused; |
+ int cl_nunused; |
+ spinlock_t cl_lock; |
+ atomic_t cl_count; |
+}; |
+ |
+/* |
+ * NFS4 state_owners and lock_owners are simply labels for ordered |
+ * sequences of RPC calls. Their sole purpose is to provide once-only |
+ * semantics by allowing the server to identify replayed requests. |
+ * |
+ * The ->so_sema is held during all state_owner seqid-mutating operations: |
+ * OPEN, OPEN_DOWNGRADE, and CLOSE. Its purpose is to properly serialize |
+ * so_seqid. |
+ */ |
+struct nfs4_state_owner { |
+ struct list_head so_list; /* per-clientid list of state_owners */ |
+ struct nfs4_client *so_client; |
+ u32 so_id; /* 32-bit identifier, unique */ |
+ struct semaphore so_sema; |
+ u32 so_seqid; /* protected by so_sema */ |
+ unsigned int so_flags; /* protected by so_sema */ |
+ atomic_t so_count; |
+ |
+ struct rpc_cred *so_cred; /* Associated cred */ |
+ struct list_head so_states; |
+}; |
+ |
+/* |
+ * struct nfs4_state maintains the client-side state for a given |
+ * (state_owner,inode) tuple. |
+ * |
+ * In order to know when to OPEN_DOWNGRADE or CLOSE the state on the server, |
+ * we need to know how many files are open for reading or writing on a |
+ * given inode. This information too is stored here. |
+ */ |
+struct nfs4_state { |
+ struct list_head open_states; /* List of states for the same state_owner */ |
+ struct list_head inode_states; /* List of states for the same inode */ |
+ |
+ struct nfs4_state_owner *owner; /* Pointer to the open owner */ |
+ struct inode *inode; /* Pointer to the inode */ |
+ pid_t pid; /* Thread that called OPEN */ |
+ |
+ nfs4_stateid stateid; |
+ |
+ int state; /* State on the server (R,W, or RW) */ |
+ atomic_t count; |
+}; |
+ |
+ |
+/* nfs4proc.c */ |
+extern int nfs4_proc_renew(struct nfs_server *server); |
+extern int nfs4_do_close(struct inode *, struct nfs4_state *); |
+ |
+/* nfs4renewd.c */ |
+extern int nfs4_init_renewd(struct nfs_server *server); |
+ |
+/* nfs4state.c */ |
+extern struct nfs4_client *nfs4_get_client(struct in_addr *); |
+extern void nfs4_put_client(struct nfs4_client *clp); |
+extern struct nfs4_state_owner * nfs4_get_state_owner(struct nfs_server *, struct rpc_cred *); |
+extern void nfs4_put_state_owner(struct nfs4_state_owner *); |
+extern struct nfs4_state * nfs4_get_open_state(struct inode *, struct nfs4_state_owner *); |
+extern void nfs4_put_open_state(struct nfs4_state *); |
+extern void nfs4_increment_seqid(u32 status, struct nfs4_state_owner *sp); |
+ |
+ |
+ |
+ |
+ |
+ |
+struct nfs4_mount_data; |
+static inline int |
+create_nfsv4_state(struct nfs_server *server, struct nfs4_mount_data *data) |
+{ |
+ server->nfs4_state = NULL; |
+ return 0; |
+} |
+ |
+static inline void |
+destroy_nfsv4_state(struct nfs_server *server) |
+{ |
+ if (server->mnt_path) { |
+ kfree(server->mnt_path); |
+ server->mnt_path = NULL; |
+ } |
+ if (server->nfs4_state) { |
+ nfs4_put_client(server->nfs4_state); |
+ server->nfs4_state = NULL; |
+ } |
+} |
+#else |
+#define create_nfsv4_state(server, data) 0 |
+#define destroy_nfsv4_state(server) do { } while (0) |
+#define nfs4_put_state_owner(inode, owner) do { } while (0) |
+#define nfs4_put_open_state(state) do { } while (0) |
+#endif |
+ |
+#endif /* __KERNEL__ */ |
+ |
+/* |
+ * 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_ALL 0xFFFF |
+ |
+#ifdef __KERNEL__ |
+# undef ifdebug |
+# ifdef NFS_DEBUG |
+# define ifdebug(fac) if (nfs_debug & NFSDBG_##fac) |
+# else |
+# define ifdebug(fac) if (0) |
+# endif |
+#endif /* __KERNEL */ |
+ |
+#endif |
Index: linuxc26/include/linux/crypto.h |
=================================================================== |
--- linuxc26/include/linux/crypto.h (nonexistent) |
+++ linuxc26/include/linux/crypto.h (revision 422) |
@@ -0,0 +1,374 @@ |
+/* |
+ * Scatterlist Cryptographic API. |
+ * |
+ * Copyright (c) 2002 James Morris <jmorris@intercode.com.au> |
+ * Copyright (c) 2002 David S. Miller (davem@redhat.com) |
+ * |
+ * Portions derived from Cryptoapi, by Alexander Kjeldaas <astor@fast.no> |
+ * and Nettle, by Niels Möller. |
+ * |
+ * 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_CRYPTO_H |
+#define _LINUX_CRYPTO_H |
+ |
+#include <linux/module.h> |
+#include <linux/kernel.h> |
+#include <linux/types.h> |
+#include <linux/list.h> |
+#include <linux/string.h> |
+#include <asm/page.h> |
+ |
+/* |
+ * Algorithm masks and types. |
+ */ |
+#define CRYPTO_ALG_TYPE_MASK 0x000000ff |
+#define CRYPTO_ALG_TYPE_CIPHER 0x00000001 |
+#define CRYPTO_ALG_TYPE_DIGEST 0x00000002 |
+#define CRYPTO_ALG_TYPE_COMPRESS 0x00000004 |
+ |
+/* |
+ * Transform masks and values (for crt_flags). |
+ */ |
+#define CRYPTO_TFM_MODE_MASK 0x000000ff |
+#define CRYPTO_TFM_REQ_MASK 0x000fff00 |
+#define CRYPTO_TFM_RES_MASK 0xfff00000 |
+ |
+#define CRYPTO_TFM_MODE_ECB 0x00000001 |
+#define CRYPTO_TFM_MODE_CBC 0x00000002 |
+#define CRYPTO_TFM_MODE_CFB 0x00000004 |
+#define CRYPTO_TFM_MODE_CTR 0x00000008 |
+ |
+#define CRYPTO_TFM_REQ_WEAK_KEY 0x00000100 |
+#define CRYPTO_TFM_RES_WEAK_KEY 0x00100000 |
+#define CRYPTO_TFM_RES_BAD_KEY_LEN 0x00200000 |
+#define CRYPTO_TFM_RES_BAD_KEY_SCHED 0x00400000 |
+#define CRYPTO_TFM_RES_BAD_BLOCK_LEN 0x00800000 |
+#define CRYPTO_TFM_RES_BAD_FLAGS 0x01000000 |
+ |
+/* |
+ * Miscellaneous stuff. |
+ */ |
+#define CRYPTO_UNSPEC 0 |
+#define CRYPTO_MAX_ALG_NAME 64 |
+ |
+struct scatterlist; |
+ |
+/* |
+ * Algorithms: modular crypto algorithm implementations, managed |
+ * via crypto_register_alg() and crypto_unregister_alg(). |
+ */ |
+struct cipher_alg { |
+ unsigned int cia_min_keysize; |
+ unsigned int cia_max_keysize; |
+ int (*cia_setkey)(void *ctx, const u8 *key, |
+ unsigned int keylen, u32 *flags); |
+ void (*cia_encrypt)(void *ctx, u8 *dst, const u8 *src); |
+ void (*cia_decrypt)(void *ctx, u8 *dst, const u8 *src); |
+}; |
+ |
+struct digest_alg { |
+ unsigned int dia_digestsize; |
+ void (*dia_init)(void *ctx); |
+ void (*dia_update)(void *ctx, const u8 *data, unsigned int len); |
+ void (*dia_final)(void *ctx, u8 *out); |
+}; |
+ |
+struct compress_alg { |
+ int (*coa_init)(void *ctx); |
+ void (*coa_exit)(void *ctx); |
+ int (*coa_compress)(void *ctx, const u8 *src, unsigned int slen, |
+ u8 *dst, unsigned int *dlen); |
+ int (*coa_decompress)(void *ctx, const u8 *src, unsigned int slen, |
+ u8 *dst, unsigned int *dlen); |
+}; |
+ |
+#define cra_cipher cra_u.cipher |
+#define cra_digest cra_u.digest |
+#define cra_compress cra_u.compress |
+ |
+struct crypto_alg { |
+ struct list_head cra_list; |
+ u32 cra_flags; |
+ unsigned int cra_blocksize; |
+ unsigned int cra_ctxsize; |
+ const char cra_name[CRYPTO_MAX_ALG_NAME]; |
+ |
+ union { |
+ struct cipher_alg cipher; |
+ struct digest_alg digest; |
+ struct compress_alg compress; |
+ } cra_u; |
+ |
+ struct module *cra_module; |
+}; |
+ |
+/* |
+ * Algorithm registration interface. |
+ */ |
+int crypto_register_alg(struct crypto_alg *alg); |
+int crypto_unregister_alg(struct crypto_alg *alg); |
+ |
+/* |
+ * Algorithm query interface. |
+ */ |
+int crypto_alg_available(const char *name, u32 flags); |
+ |
+/* |
+ * Transforms: user-instantiated objects which encapsulate algorithms |
+ * and core processing logic. Managed via crypto_alloc_tfm() and |
+ * crypto_free_tfm(), as well as the various helpers below. |
+ */ |
+struct crypto_tfm; |
+ |
+struct cipher_tfm { |
+ void *cit_iv; |
+ unsigned int cit_ivsize; |
+ u32 cit_mode; |
+ int (*cit_setkey)(struct crypto_tfm *tfm, |
+ const u8 *key, unsigned int keylen); |
+ int (*cit_encrypt)(struct crypto_tfm *tfm, |
+ struct scatterlist *dst, |
+ struct scatterlist *src, |
+ unsigned int nbytes); |
+ int (*cit_encrypt_iv)(struct crypto_tfm *tfm, |
+ struct scatterlist *dst, |
+ struct scatterlist *src, |
+ unsigned int nbytes, u8 *iv); |
+ int (*cit_decrypt)(struct crypto_tfm *tfm, |
+ struct scatterlist *dst, |
+ struct scatterlist *src, |
+ unsigned int nbytes); |
+ int (*cit_decrypt_iv)(struct crypto_tfm *tfm, |
+ struct scatterlist *dst, |
+ struct scatterlist *src, |
+ unsigned int nbytes, u8 *iv); |
+ void (*cit_xor_block)(u8 *dst, const u8 *src); |
+}; |
+ |
+struct digest_tfm { |
+ void (*dit_init)(struct crypto_tfm *tfm); |
+ void (*dit_update)(struct crypto_tfm *tfm, |
+ struct scatterlist *sg, unsigned int nsg); |
+ void (*dit_final)(struct crypto_tfm *tfm, u8 *out); |
+ void (*dit_digest)(struct crypto_tfm *tfm, struct scatterlist *sg, |
+ unsigned int nsg, u8 *out); |
+#ifdef CONFIG_CRYPTO_HMAC |
+ void *dit_hmac_block; |
+#endif |
+}; |
+ |
+struct compress_tfm { |
+ int (*cot_compress)(struct crypto_tfm *tfm, |
+ const u8 *src, unsigned int slen, |
+ u8 *dst, unsigned int *dlen); |
+ int (*cot_decompress)(struct crypto_tfm *tfm, |
+ const u8 *src, unsigned int slen, |
+ u8 *dst, unsigned int *dlen); |
+}; |
+ |
+#define crt_cipher crt_u.cipher |
+#define crt_digest crt_u.digest |
+#define crt_compress crt_u.compress |
+ |
+struct crypto_tfm { |
+ |
+ u32 crt_flags; |
+ |
+ union { |
+ struct cipher_tfm cipher; |
+ struct digest_tfm digest; |
+ struct compress_tfm compress; |
+ } crt_u; |
+ |
+ struct crypto_alg *__crt_alg; |
+}; |
+ |
+/* |
+ * Transform user interface. |
+ */ |
+ |
+/* |
+ * crypto_alloc_tfm() will first attempt to locate an already loaded algorithm. |
+ * If that fails and the kernel supports dynamically loadable modules, it |
+ * will then attempt to load a module of the same name or alias. A refcount |
+ * is grabbed on the algorithm which is then associated with the new transform. |
+ * |
+ * crypto_free_tfm() frees up the transform and any associated resources, |
+ * then drops the refcount on the associated algorithm. |
+ */ |
+struct crypto_tfm *crypto_alloc_tfm(const char *alg_name, u32 tfm_flags); |
+void crypto_free_tfm(struct crypto_tfm *tfm); |
+ |
+/* |
+ * Transform helpers which query the underlying algorithm. |
+ */ |
+static inline const char *crypto_tfm_alg_name(struct crypto_tfm *tfm) |
+{ |
+ return tfm->__crt_alg->cra_name; |
+} |
+ |
+static inline const char *crypto_tfm_alg_modname(struct crypto_tfm *tfm) |
+{ |
+ return module_name(tfm->__crt_alg->cra_module); |
+} |
+ |
+static inline u32 crypto_tfm_alg_type(struct crypto_tfm *tfm) |
+{ |
+ return tfm->__crt_alg->cra_flags & CRYPTO_ALG_TYPE_MASK; |
+} |
+ |
+static inline unsigned int crypto_tfm_alg_min_keysize(struct crypto_tfm *tfm) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); |
+ return tfm->__crt_alg->cra_cipher.cia_min_keysize; |
+} |
+ |
+static inline unsigned int crypto_tfm_alg_max_keysize(struct crypto_tfm *tfm) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); |
+ return tfm->__crt_alg->cra_cipher.cia_max_keysize; |
+} |
+ |
+static inline unsigned int crypto_tfm_alg_ivsize(struct crypto_tfm *tfm) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); |
+ return tfm->crt_cipher.cit_ivsize; |
+} |
+ |
+static inline unsigned int crypto_tfm_alg_blocksize(struct crypto_tfm *tfm) |
+{ |
+ return tfm->__crt_alg->cra_blocksize; |
+} |
+ |
+static inline unsigned int crypto_tfm_alg_digestsize(struct crypto_tfm *tfm) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST); |
+ return tfm->__crt_alg->cra_digest.dia_digestsize; |
+} |
+ |
+/* |
+ * API wrappers. |
+ */ |
+static inline void crypto_digest_init(struct crypto_tfm *tfm) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST); |
+ tfm->crt_digest.dit_init(tfm); |
+} |
+ |
+static inline void crypto_digest_update(struct crypto_tfm *tfm, |
+ struct scatterlist *sg, |
+ unsigned int nsg) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST); |
+ tfm->crt_digest.dit_update(tfm, sg, nsg); |
+} |
+ |
+static inline void crypto_digest_final(struct crypto_tfm *tfm, u8 *out) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST); |
+ tfm->crt_digest.dit_final(tfm, out); |
+} |
+ |
+static inline void crypto_digest_digest(struct crypto_tfm *tfm, |
+ struct scatterlist *sg, |
+ unsigned int nsg, u8 *out) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_DIGEST); |
+ tfm->crt_digest.dit_digest(tfm, sg, nsg, out); |
+} |
+ |
+static inline int crypto_cipher_setkey(struct crypto_tfm *tfm, |
+ const u8 *key, unsigned int keylen) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); |
+ return tfm->crt_cipher.cit_setkey(tfm, key, keylen); |
+} |
+ |
+static inline int crypto_cipher_encrypt(struct crypto_tfm *tfm, |
+ struct scatterlist *dst, |
+ struct scatterlist *src, |
+ unsigned int nbytes) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); |
+ return tfm->crt_cipher.cit_encrypt(tfm, dst, src, nbytes); |
+} |
+ |
+static inline int crypto_cipher_encrypt_iv(struct crypto_tfm *tfm, |
+ struct scatterlist *dst, |
+ struct scatterlist *src, |
+ unsigned int nbytes, u8 *iv) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); |
+ BUG_ON(tfm->crt_cipher.cit_mode == CRYPTO_TFM_MODE_ECB); |
+ return tfm->crt_cipher.cit_encrypt_iv(tfm, dst, src, nbytes, iv); |
+} |
+ |
+static inline int crypto_cipher_decrypt(struct crypto_tfm *tfm, |
+ struct scatterlist *dst, |
+ struct scatterlist *src, |
+ unsigned int nbytes) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); |
+ return tfm->crt_cipher.cit_decrypt(tfm, dst, src, nbytes); |
+} |
+ |
+static inline int crypto_cipher_decrypt_iv(struct crypto_tfm *tfm, |
+ struct scatterlist *dst, |
+ struct scatterlist *src, |
+ unsigned int nbytes, u8 *iv) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); |
+ BUG_ON(tfm->crt_cipher.cit_mode == CRYPTO_TFM_MODE_ECB); |
+ return tfm->crt_cipher.cit_decrypt_iv(tfm, dst, src, nbytes, iv); |
+} |
+ |
+static inline void crypto_cipher_set_iv(struct crypto_tfm *tfm, |
+ const u8 *src, unsigned int len) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); |
+ memcpy(tfm->crt_cipher.cit_iv, src, len); |
+} |
+ |
+static inline void crypto_cipher_get_iv(struct crypto_tfm *tfm, |
+ u8 *dst, unsigned int len) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); |
+ memcpy(dst, tfm->crt_cipher.cit_iv, len); |
+} |
+ |
+static inline int crypto_comp_compress(struct crypto_tfm *tfm, |
+ const u8 *src, unsigned int slen, |
+ u8 *dst, unsigned int *dlen) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_COMPRESS); |
+ return tfm->crt_compress.cot_compress(tfm, src, slen, dst, dlen); |
+} |
+ |
+static inline int crypto_comp_decompress(struct crypto_tfm *tfm, |
+ const u8 *src, unsigned int slen, |
+ u8 *dst, unsigned int *dlen) |
+{ |
+ BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_COMPRESS); |
+ return tfm->crt_compress.cot_decompress(tfm, src, slen, dst, dlen); |
+} |
+ |
+/* |
+ * HMAC support. |
+ */ |
+#ifdef CONFIG_CRYPTO_HMAC |
+void crypto_hmac_init(struct crypto_tfm *tfm, u8 *key, unsigned int *keylen); |
+void crypto_hmac_update(struct crypto_tfm *tfm, |
+ struct scatterlist *sg, unsigned int nsg); |
+void crypto_hmac_final(struct crypto_tfm *tfm, u8 *key, |
+ unsigned int *keylen, u8 *out); |
+void crypto_hmac(struct crypto_tfm *tfm, u8 *key, unsigned int *keylen, |
+ struct scatterlist *sg, unsigned int nsg, u8 *out); |
+#endif /* CONFIG_CRYPTO_HMAC */ |
+ |
+#endif /* _LINUX_CRYPTO_H */ |
+ |
Index: linuxc26/include/linux/if_packet.h |
=================================================================== |
--- linuxc26/include/linux/if_packet.h (nonexistent) |
+++ linuxc26/include/linux/if_packet.h (revision 422) |
@@ -0,0 +1,102 @@ |
+#ifndef __LINUX_IF_PACKET_H |
+#define __LINUX_IF_PACKET_H |
+ |
+struct sockaddr_pkt |
+{ |
+ unsigned short spkt_family; |
+ unsigned char spkt_device[14]; |
+ unsigned short spkt_protocol; |
+}; |
+ |
+struct sockaddr_ll |
+{ |
+ unsigned short sll_family; |
+ unsigned short 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 |
+ |
+struct tpacket_stats |
+{ |
+ unsigned int tp_packets; |
+ unsigned int tp_drops; |
+}; |
+ |
+struct tpacket_hdr |
+{ |
+ unsigned long tp_status; |
+#define TP_STATUS_KERNEL 0 |
+#define TP_STATUS_USER 1 |
+#define TP_STATUS_COPY 2 |
+#define TP_STATUS_LOSING 4 |
+#define TP_STATUS_CSUMNOTREADY 8 |
+ 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)) |
+ |
+/* |
+ 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 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 |
+ |
+#endif |
Index: linuxc26/include/linux/if_slip.h |
=================================================================== |
--- linuxc26/include/linux/if_slip.h (nonexistent) |
+++ linuxc26/include/linux/if_slip.h (revision 422) |
@@ -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 |
Index: linuxc26/include/linux/fdreg.h |
=================================================================== |
--- linuxc26/include/linux/fdreg.h (nonexistent) |
+++ linuxc26/include/linux/fdreg.h (revision 422) |
@@ -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-techdoc.intel.com/docs/periph/fd_contr/datasheets/ */ |
+ |
+#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 |
Index: linuxc26/include/linux/atm_tcp.h |
=================================================================== |
--- linuxc26/include/linux/atm_tcp.h (nonexistent) |
+++ linuxc26/include/linux/atm_tcp.h (revision 422) |
@@ -0,0 +1,75 @@ |
+/* 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 LINUX_ATM_TCP_H |
+#define LINUX_ATM_TCP_H |
+ |
+#include <linux/atmapi.h> |
+ |
+#ifdef __KERNEL__ |
+#include <linux/types.h> |
+#endif |
+#include <linux/atmioc.h> |
+ |
+ |
+/* |
+ * All values in struct atmtcp_hdr are in network byte order |
+ */ |
+ |
+struct atmtcp_hdr { |
+ uint16_t vpi; |
+ uint16_t vci; |
+ uint32_t 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 */ |
+ |
+ |
+#ifdef __KERNEL__ |
+ |
+struct atm_tcp_ops { |
+ int (*attach)(struct atm_vcc *vcc,int itf); |
+ int (*create_persistent)(int itf); |
+ int (*remove_persistent)(int itf); |
+ struct module *owner; |
+}; |
+ |
+extern struct atm_tcp_ops atm_tcp_ops; |
+ |
+#endif |
+ |
+#endif |
Index: linuxc26/include/linux/icmp.h |
=================================================================== |
--- linuxc26/include/linux/icmp.h (nonexistent) |
+++ linuxc26/include/linux/icmp.h (revision 422) |
@@ -0,0 +1,94 @@ |
+/* |
+ * 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 _LINUX_ICMP_H |
+#define _LINUX_ICMP_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; |
+ __u16 checksum; |
+ union { |
+ struct { |
+ __u16 id; |
+ __u16 sequence; |
+ } echo; |
+ __u32 gateway; |
+ struct { |
+ __u16 __unused; |
+ __u16 mtu; |
+ } frag; |
+ } un; |
+}; |
+ |
+/* |
+ * constants for (set|get)sockopt |
+ */ |
+ |
+#define ICMP_FILTER 1 |
+ |
+struct icmp_filter { |
+ __u32 data; |
+}; |
+ |
+ |
+#endif /* _LINUX_ICMP_H */ |
Index: linuxc26/include/asm/hw_irq.h |
=================================================================== |
--- linuxc26/include/asm/hw_irq.h (nonexistent) |
+++ linuxc26/include/asm/hw_irq.h (revision 422) |
@@ -0,0 +1,119 @@ |
+#ifndef _ASM_HW_IRQ_H |
+#define _ASM_HW_IRQ_H |
+ |
+/* |
+ * linux/include/asm/hw_irq.h |
+ * |
+ * (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar |
+ * |
+ * moved some of the old arch/i386/kernel/irq.h to here. VY |
+ * |
+ * IRQ/IPI changes taken from work by Thomas Radke |
+ * <tomsoft@informatik.tu-chemnitz.de> |
+ */ |
+ |
+#include <linux/config.h> |
+#include <linux/profile.h> |
+#include <asm/atomic.h> |
+#include <asm/irq.h> |
+#include <asm/sections.h> |
+ |
+/* |
+ * Various low-level irq details needed by irq.c, process.c, |
+ * time.c, io_apic.c and smp.c |
+ * |
+ * Interrupt entry/exit code at both C and assembly level |
+ */ |
+ |
+extern u8 irq_vector[NR_IRQ_VECTORS]; |
+#define IO_APIC_VECTOR(irq) ((int)irq_vector[irq]) |
+ |
+extern void (*interrupt[NR_IRQS])(void); |
+ |
+#ifdef CONFIG_SMP |
+asmlinkage void reschedule_interrupt(void); |
+asmlinkage void invalidate_interrupt(void); |
+asmlinkage void call_function_interrupt(void); |
+#endif |
+ |
+#ifdef CONFIG_X86_LOCAL_APIC |
+asmlinkage void apic_timer_interrupt(void); |
+asmlinkage void error_interrupt(void); |
+asmlinkage void spurious_interrupt(void); |
+asmlinkage void thermal_interrupt(struct pt_regs); |
+#endif |
+ |
+void mask_irq(unsigned int irq); |
+void unmask_irq(unsigned int irq); |
+void disable_8259A_irq(unsigned int irq); |
+void enable_8259A_irq(unsigned int irq); |
+int i8259A_irq_pending(unsigned int irq); |
+void make_8259A_irq(unsigned int irq); |
+void init_8259A(int aeoi); |
+void FASTCALL(send_IPI_self(int vector)); |
+void init_VISWS_APIC_irqs(void); |
+void setup_IO_APIC(void); |
+void disable_IO_APIC(void); |
+void print_IO_APIC(void); |
+int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn); |
+void send_IPI(int dest, int vector); |
+void setup_ioapic_dest(cpumask_t mask); |
+ |
+extern unsigned long io_apic_irqs; |
+ |
+extern atomic_t irq_err_count; |
+extern atomic_t irq_mis_count; |
+ |
+#define IO_APIC_IRQ(x) (((x) >= 16) || ((1<<(x)) & io_apic_irqs)) |
+ |
+/* |
+ * The profiling function is SMP safe. (nothing can mess |
+ * around with "current", and the profiling counters are |
+ * updated with atomic operations). This is especially |
+ * useful with a profiling multiplier != 1 |
+ */ |
+static inline void x86_do_profile(struct pt_regs * regs) |
+{ |
+ unsigned long eip; |
+ extern unsigned long prof_cpu_mask; |
+ |
+ profile_hook(regs); |
+ |
+ if (user_mode(regs)) |
+ return; |
+ |
+ if (!prof_buffer) |
+ return; |
+ |
+ eip = regs->eip; |
+ |
+ /* |
+ * Only measure the CPUs specified by /proc/irq/prof_cpu_mask. |
+ * (default is all CPUs.) |
+ */ |
+ if (!((1<<smp_processor_id()) & prof_cpu_mask)) |
+ return; |
+ |
+ eip -= (unsigned long)_stext; |
+ eip >>= prof_shift; |
+ /* |
+ * Don't ignore out-of-bounds EIP values silently, |
+ * put them into the last histogram slot, so if |
+ * present, they will show up as a sharp peak. |
+ */ |
+ if (eip > prof_len-1) |
+ eip = prof_len-1; |
+ atomic_inc((atomic_t *)&prof_buffer[eip]); |
+} |
+ |
+#if defined(CONFIG_X86_IO_APIC) |
+static inline void hw_resend_irq(struct hw_interrupt_type *h, unsigned int i) |
+{ |
+ if (IO_APIC_IRQ(i)) |
+ send_IPI_self(IO_APIC_VECTOR(i)); |
+} |
+#else |
+static inline void hw_resend_irq(struct hw_interrupt_type *h, unsigned int i) {} |
+#endif |
+ |
+#endif /* _ASM_HW_IRQ_H */ |
Index: linuxc26/include/asm/rwsem.h |
=================================================================== |
--- linuxc26/include/asm/rwsem.h (nonexistent) |
+++ linuxc26/include/asm/rwsem.h (revision 422) |
@@ -0,0 +1,288 @@ |
+/* rwsem.h: R/W semaphores implemented using XADD/CMPXCHG for i486+ |
+ * |
+ * Written by David Howells (dhowells@redhat.com). |
+ * |
+ * Derived from asm-i386/semaphore.h |
+ * |
+ * |
+ * The MSW of the count is the negated number of active writers and waiting |
+ * lockers, and the LSW is the total number of active locks |
+ * |
+ * The lock count is initialized to 0 (no active and no waiting lockers). |
+ * |
+ * When a writer subtracts WRITE_BIAS, it'll get 0xffff0001 for the case of an |
+ * uncontended lock. This can be determined because XADD returns the old value. |
+ * Readers increment by 1 and see a positive value when uncontended, negative |
+ * if there are writers (and maybe) readers waiting (in which case it goes to |
+ * sleep). |
+ * |
+ * The value of WAITING_BIAS supports up to 32766 waiting processes. This can |
+ * be extended to 65534 by manually checking the whole MSW rather than relying |
+ * on the S flag. |
+ * |
+ * The value of ACTIVE_BIAS supports up to 65535 active processes. |
+ * |
+ * This should be totally fair - if anything is waiting, a process that wants a |
+ * lock will go to the back of the queue. When the currently active lock is |
+ * released, if there's a writer at the front of the queue, then that and only |
+ * that will be woken up; if there's a bunch of consequtive readers at the |
+ * front, then they'll all be woken up, but no other readers will be. |
+ */ |
+ |
+#ifndef _I386_RWSEM_H |
+#define _I386_RWSEM_H |
+ |
+#ifndef _LINUX_RWSEM_H |
+#error "please don't include asm/rwsem.h directly, use linux/rwsem.h instead" |
+#endif |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/list.h> |
+#include <linux/spinlock.h> |
+ |
+struct rwsem_waiter; |
+ |
+extern struct rw_semaphore *FASTCALL(rwsem_down_read_failed(struct rw_semaphore *sem)); |
+extern struct rw_semaphore *FASTCALL(rwsem_down_write_failed(struct rw_semaphore *sem)); |
+extern struct rw_semaphore *FASTCALL(rwsem_wake(struct rw_semaphore *)); |
+extern struct rw_semaphore *FASTCALL(rwsem_downgrade_wake(struct rw_semaphore *sem)); |
+ |
+/* |
+ * the semaphore definition |
+ */ |
+struct rw_semaphore { |
+ signed long count; |
+#define RWSEM_UNLOCKED_VALUE 0x00000000 |
+#define RWSEM_ACTIVE_BIAS 0x00000001 |
+#define RWSEM_ACTIVE_MASK 0x0000ffff |
+#define RWSEM_WAITING_BIAS (-0x00010000) |
+#define RWSEM_ACTIVE_READ_BIAS RWSEM_ACTIVE_BIAS |
+#define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS) |
+ spinlock_t wait_lock; |
+ struct list_head wait_list; |
+#if RWSEM_DEBUG |
+ int debug; |
+#endif |
+}; |
+ |
+/* |
+ * initialisation |
+ */ |
+#if RWSEM_DEBUG |
+#define __RWSEM_DEBUG_INIT , 0 |
+#else |
+#define __RWSEM_DEBUG_INIT /* */ |
+#endif |
+ |
+#define __RWSEM_INITIALIZER(name) \ |
+{ RWSEM_UNLOCKED_VALUE, SPIN_LOCK_UNLOCKED, LIST_HEAD_INIT((name).wait_list) \ |
+ __RWSEM_DEBUG_INIT } |
+ |
+#define DECLARE_RWSEM(name) \ |
+ struct rw_semaphore name = __RWSEM_INITIALIZER(name) |
+ |
+static inline void init_rwsem(struct rw_semaphore *sem) |
+{ |
+ sem->count = RWSEM_UNLOCKED_VALUE; |
+ spin_lock_init(&sem->wait_lock); |
+ INIT_LIST_HEAD(&sem->wait_list); |
+#if RWSEM_DEBUG |
+ sem->debug = 0; |
+#endif |
+} |
+ |
+/* |
+ * lock for reading |
+ */ |
+static inline void __down_read(struct rw_semaphore *sem) |
+{ |
+ __asm__ __volatile__( |
+ "# beginning down_read\n\t" |
+LOCK_PREFIX " incl (%%eax)\n\t" /* adds 0x00000001, returns the old value */ |
+ " js 2f\n\t" /* jump if we weren't granted the lock */ |
+ "1:\n\t" |
+ LOCK_SECTION_START("") |
+ "2:\n\t" |
+ " pushl %%ecx\n\t" |
+ " pushl %%edx\n\t" |
+ " call rwsem_down_read_failed\n\t" |
+ " popl %%edx\n\t" |
+ " popl %%ecx\n\t" |
+ " jmp 1b\n" |
+ LOCK_SECTION_END |
+ "# ending down_read\n\t" |
+ : "=m"(sem->count) |
+ : "a"(sem), "m"(sem->count) |
+ : "memory", "cc"); |
+} |
+ |
+/* |
+ * trylock for reading -- returns 1 if successful, 0 if contention |
+ */ |
+static inline int __down_read_trylock(struct rw_semaphore *sem) |
+{ |
+ __s32 result, tmp; |
+ __asm__ __volatile__( |
+ "# beginning __down_read_trylock\n\t" |
+ " movl %0,%1\n\t" |
+ "1:\n\t" |
+ " movl %1,%2\n\t" |
+ " addl %3,%2\n\t" |
+ " jle 2f\n\t" |
+LOCK_PREFIX " cmpxchgl %2,%0\n\t" |
+ " jnz 1b\n\t" |
+ "2:\n\t" |
+ "# ending __down_read_trylock\n\t" |
+ : "+m"(sem->count), "=&a"(result), "=&r"(tmp) |
+ : "i"(RWSEM_ACTIVE_READ_BIAS) |
+ : "memory", "cc"); |
+ return result>=0 ? 1 : 0; |
+} |
+ |
+/* |
+ * lock for writing |
+ */ |
+static inline void __down_write(struct rw_semaphore *sem) |
+{ |
+ int tmp; |
+ |
+ tmp = RWSEM_ACTIVE_WRITE_BIAS; |
+ __asm__ __volatile__( |
+ "# beginning down_write\n\t" |
+LOCK_PREFIX " xadd %%edx,(%%eax)\n\t" /* subtract 0x0000ffff, returns the old value */ |
+ " testl %%edx,%%edx\n\t" /* was the count 0 before? */ |
+ " jnz 2f\n\t" /* jump if we weren't granted the lock */ |
+ "1:\n\t" |
+ LOCK_SECTION_START("") |
+ "2:\n\t" |
+ " pushl %%ecx\n\t" |
+ " call rwsem_down_write_failed\n\t" |
+ " popl %%ecx\n\t" |
+ " jmp 1b\n" |
+ LOCK_SECTION_END |
+ "# ending down_write" |
+ : "=m"(sem->count), "=d"(tmp) |
+ : "a"(sem), "1"(tmp), "m"(sem->count) |
+ : "memory", "cc"); |
+} |
+ |
+/* |
+ * trylock for writing -- returns 1 if successful, 0 if contention |
+ */ |
+static inline int __down_write_trylock(struct rw_semaphore *sem) |
+{ |
+ signed long ret = cmpxchg(&sem->count, |
+ RWSEM_UNLOCKED_VALUE, |
+ RWSEM_ACTIVE_WRITE_BIAS); |
+ if (ret == RWSEM_UNLOCKED_VALUE) |
+ return 1; |
+ return 0; |
+} |
+ |
+/* |
+ * unlock after reading |
+ */ |
+static inline void __up_read(struct rw_semaphore *sem) |
+{ |
+ __s32 tmp = -RWSEM_ACTIVE_READ_BIAS; |
+ __asm__ __volatile__( |
+ "# beginning __up_read\n\t" |
+LOCK_PREFIX " xadd %%edx,(%%eax)\n\t" /* subtracts 1, returns the old value */ |
+ " js 2f\n\t" /* jump if the lock is being waited upon */ |
+ "1:\n\t" |
+ LOCK_SECTION_START("") |
+ "2:\n\t" |
+ " decw %%dx\n\t" /* do nothing if still outstanding active readers */ |
+ " jnz 1b\n\t" |
+ " pushl %%ecx\n\t" |
+ " call rwsem_wake\n\t" |
+ " popl %%ecx\n\t" |
+ " jmp 1b\n" |
+ LOCK_SECTION_END |
+ "# ending __up_read\n" |
+ : "=m"(sem->count), "=d"(tmp) |
+ : "a"(sem), "1"(tmp), "m"(sem->count) |
+ : "memory", "cc"); |
+} |
+ |
+/* |
+ * unlock after writing |
+ */ |
+static inline void __up_write(struct rw_semaphore *sem) |
+{ |
+ __asm__ __volatile__( |
+ "# beginning __up_write\n\t" |
+ " movl %2,%%edx\n\t" |
+LOCK_PREFIX " xaddl %%edx,(%%eax)\n\t" /* tries to transition 0xffff0001 -> 0x00000000 */ |
+ " jnz 2f\n\t" /* jump if the lock is being waited upon */ |
+ "1:\n\t" |
+ LOCK_SECTION_START("") |
+ "2:\n\t" |
+ " decw %%dx\n\t" /* did the active count reduce to 0? */ |
+ " jnz 1b\n\t" /* jump back if not */ |
+ " pushl %%ecx\n\t" |
+ " call rwsem_wake\n\t" |
+ " popl %%ecx\n\t" |
+ " jmp 1b\n" |
+ LOCK_SECTION_END |
+ "# ending __up_write\n" |
+ : "=m"(sem->count) |
+ : "a"(sem), "i"(-RWSEM_ACTIVE_WRITE_BIAS), "m"(sem->count) |
+ : "memory", "cc", "edx"); |
+} |
+ |
+/* |
+ * downgrade write lock to read lock |
+ */ |
+static inline void __downgrade_write(struct rw_semaphore *sem) |
+{ |
+ __asm__ __volatile__( |
+ "# beginning __downgrade_write\n\t" |
+LOCK_PREFIX " addl %2,(%%eax)\n\t" /* transitions 0xZZZZ0001 -> 0xYYYY0001 */ |
+ " js 2f\n\t" /* jump if the lock is being waited upon */ |
+ "1:\n\t" |
+ LOCK_SECTION_START("") |
+ "2:\n\t" |
+ " pushl %%ecx\n\t" |
+ " pushl %%edx\n\t" |
+ " call rwsem_downgrade_wake\n\t" |
+ " popl %%edx\n\t" |
+ " popl %%ecx\n\t" |
+ " jmp 1b\n" |
+ LOCK_SECTION_END |
+ "# ending __downgrade_write\n" |
+ : "=m"(sem->count) |
+ : "a"(sem), "i"(-RWSEM_WAITING_BIAS), "m"(sem->count) |
+ : "memory", "cc"); |
+} |
+ |
+/* |
+ * implement atomic add functionality |
+ */ |
+static inline void rwsem_atomic_add(int delta, struct rw_semaphore *sem) |
+{ |
+ __asm__ __volatile__( |
+LOCK_PREFIX "addl %1,%0" |
+ : "=m"(sem->count) |
+ : "ir"(delta), "m"(sem->count)); |
+} |
+ |
+/* |
+ * implement exchange and add functionality |
+ */ |
+static inline int rwsem_atomic_update(int delta, struct rw_semaphore *sem) |
+{ |
+ int tmp = delta; |
+ |
+ __asm__ __volatile__( |
+LOCK_PREFIX "xadd %0,(%2)" |
+ : "+r"(tmp), "=m"(sem->count) |
+ : "r"(sem), "m"(sem->count) |
+ : "memory"); |
+ |
+ return tmp+delta; |
+} |
+ |
+#endif /* __KERNEL__ */ |
+#endif /* _I386_RWSEM_H */ |
Index: linuxc26/include/asm/siginfo.h |
=================================================================== |
--- linuxc26/include/asm/siginfo.h (nonexistent) |
+++ linuxc26/include/asm/siginfo.h (revision 422) |
@@ -0,0 +1,6 @@ |
+#ifndef _I386_SIGINFO_H |
+#define _I386_SIGINFO_H |
+ |
+#include <asm-generic/siginfo.h> |
+ |
+#endif |
Index: linuxc26/include/asm/byteorder.h |
=================================================================== |
--- linuxc26/include/asm/byteorder.h (nonexistent) |
+++ linuxc26/include/asm/byteorder.h (revision 422) |
@@ -0,0 +1,67 @@ |
+#ifndef _I386_BYTEORDER_H |
+#define _I386_BYTEORDER_H |
+ |
+#include <asm/types.h> |
+ |
+#ifdef __GNUC__ |
+ |
+/* For avoiding bswap on i386 */ |
+#ifdef __KERNEL__ |
+#include <linux/config.h> |
+#endif |
+ |
+static __inline__ __const__ __u32 ___arch__swab32(__u32 x) |
+{ |
+#ifdef CONFIG_X86_BSWAP |
+ __asm__("bswap %0" : "=r" (x) : "0" (x)); |
+#else |
+ __asm__("xchgb %b0,%h0\n\t" /* swap lower bytes */ |
+ "rorl $16,%0\n\t" /* swap words */ |
+ "xchgb %b0,%h0" /* swap higher bytes */ |
+ :"=q" (x) |
+ : "0" (x)); |
+#endif |
+ return x; |
+} |
+ |
+/* gcc should generate this for open coded C now too. May be worth switching to |
+ it because inline assembly cannot be scheduled. -AK */ |
+static __inline__ __const__ __u16 ___arch__swab16(__u16 x) |
+{ |
+ __asm__("xchgb %b0,%h0" /* swap bytes */ |
+ : "=q" (x) |
+ : "0" (x)); |
+ return x; |
+} |
+ |
+ |
+static inline __u64 ___arch__swab64(__u64 val) |
+{ |
+ union { |
+ struct { __u32 a,b; } s; |
+ __u64 u; |
+ } v; |
+ v.u = val; |
+#ifdef CONFIG_X86_BSWAP |
+ asm("bswapl %0 ; bswapl %1 ; xchgl %0,%1" |
+ : "=r" (v.s.a), "=r" (v.s.b) |
+ : "0" (v.s.a), "1" (v.s.b)); |
+#else |
+ v.s.a = ___arch__swab32(v.s.a); |
+ v.s.b = ___arch__swab32(v.s.b); |
+ asm("xchgl %0,%1" : "=r" (v.s.a), "=r" (v.s.b) : "0" (v.s.a), "1" (v.s.b)); |
+#endif |
+ return v.u; |
+} |
+ |
+#define __arch__swab64(x) ___arch__swab64(x) |
+#define __arch__swab32(x) ___arch__swab32(x) |
+#define __arch__swab16(x) ___arch__swab16(x) |
+ |
+#define __BYTEORDER_HAS_U64__ |
+ |
+#endif /* __GNUC__ */ |
+ |
+#include <linux/byteorder/little_endian.h> |
+ |
+#endif /* _I386_BYTEORDER_H */ |
Index: linuxc26/include/asm/smp.h |
=================================================================== |
--- linuxc26/include/asm/smp.h (nonexistent) |
+++ linuxc26/include/asm/smp.h (revision 422) |
@@ -0,0 +1,93 @@ |
+#ifndef __ASM_SMP_H |
+#define __ASM_SMP_H |
+ |
+/* |
+ * We need the APIC definitions automatically as part of 'smp.h' |
+ */ |
+#ifndef __ASSEMBLY__ |
+#include <linux/config.h> |
+#include <linux/kernel.h> |
+#include <linux/threads.h> |
+#include <linux/cpumask.h> |
+#endif |
+ |
+#ifdef CONFIG_X86_LOCAL_APIC |
+#ifndef __ASSEMBLY__ |
+#include <asm/fixmap.h> |
+#include <asm/bitops.h> |
+#include <asm/mpspec.h> |
+#ifdef CONFIG_X86_IO_APIC |
+#include <asm/io_apic.h> |
+#endif |
+#include <asm/apic.h> |
+#endif |
+#endif |
+ |
+#define BAD_APICID 0xFFu |
+#ifdef CONFIG_SMP |
+#ifndef __ASSEMBLY__ |
+ |
+/* |
+ * Private routines/data |
+ */ |
+ |
+extern void smp_alloc_memory(void); |
+extern int pic_mode; |
+extern int smp_num_siblings; |
+extern int cpu_sibling_map[]; |
+ |
+extern void smp_flush_tlb(void); |
+extern void smp_message_irq(int cpl, void *dev_id, struct pt_regs *regs); |
+extern void smp_send_reschedule(int cpu); |
+extern void smp_invalidate_rcv(void); /* Process an NMI */ |
+extern void (*mtrr_hook) (void); |
+extern void zap_low_mappings (void); |
+ |
+#define MAX_APICID 256 |
+ |
+/* |
+ * This function is needed by all SMP systems. It must _always_ be valid |
+ * from the initial startup. We map APIC_BASE very early in page_setup(), |
+ * so this is correct in the x86 case. |
+ */ |
+#define smp_processor_id() (current_thread_info()->cpu) |
+ |
+extern cpumask_t cpu_callout_map; |
+ |
+#define cpu_possible(cpu) cpu_isset(cpu, cpu_callout_map) |
+ |
+/* We don't mark CPUs online until __cpu_up(), so we need another measure */ |
+static inline int num_booting_cpus(void) |
+{ |
+ return cpus_weight(cpu_callout_map); |
+} |
+ |
+extern void map_cpu_to_logical_apicid(void); |
+extern void unmap_cpu_to_logical_apicid(int cpu); |
+ |
+#ifdef CONFIG_X86_LOCAL_APIC |
+ |
+#ifdef APIC_DEFINITION |
+extern int hard_smp_processor_id(void); |
+#else |
+#include <mach_apicdef.h> |
+static inline int hard_smp_processor_id(void) |
+{ |
+ /* we don't want to mark this access volatile - bad code generation */ |
+ return GET_APIC_ID(*(unsigned long *)(APIC_BASE+APIC_ID)); |
+} |
+#endif |
+ |
+static __inline int logical_smp_processor_id(void) |
+{ |
+ /* we don't want to mark this access volatile - bad code generation */ |
+ return GET_APIC_LOGICAL_ID(*(unsigned long *)(APIC_BASE+APIC_LDR)); |
+} |
+ |
+#endif |
+#endif /* !__ASSEMBLY__ */ |
+ |
+#define NO_PROC_ID 0xFF /* No processor magic marker */ |
+ |
+#endif |
+#endif |
Index: linuxc26/include/asm/mmx.h |
=================================================================== |
--- linuxc26/include/asm/mmx.h (nonexistent) |
+++ linuxc26/include/asm/mmx.h (revision 422) |
@@ -0,0 +1,14 @@ |
+#ifndef _ASM_MMX_H |
+#define _ASM_MMX_H |
+ |
+/* |
+ * MMX 3Dnow! helper operations |
+ */ |
+ |
+#include <linux/types.h> |
+ |
+extern void *_mmx_memcpy(void *to, const void *from, size_t size); |
+extern void mmx_clear_page(void *page); |
+extern void mmx_copy_page(void *to, void *from); |
+ |
+#endif |
Index: linuxc26/include/asm/init.h |
=================================================================== |
--- linuxc26/include/asm/init.h (nonexistent) |
+++ linuxc26/include/asm/init.h (revision 422) |
@@ -0,0 +1 @@ |
+#error "<asm/init.h> should never be used - use <linux/init.h> instead" |
Index: linuxc26/include/asm/mc146818rtc.h |
=================================================================== |
--- linuxc26/include/asm/mc146818rtc.h (nonexistent) |
+++ linuxc26/include/asm/mc146818rtc.h (revision 422) |
@@ -0,0 +1,29 @@ |
+/* |
+ * Machine dependent access functions for RTC registers. |
+ */ |
+#ifndef _ASM_MC146818RTC_H |
+#define _ASM_MC146818RTC_H |
+ |
+#include <asm/io.h> |
+ |
+#ifndef RTC_PORT |
+#define RTC_PORT(x) (0x70 + (x)) |
+#define RTC_ALWAYS_BCD 1 /* RTC operates in binary mode */ |
+#endif |
+ |
+/* |
+ * The yet supported machines all access the RTC index register via |
+ * an ISA port access but the way to access the date register differs ... |
+ */ |
+#define CMOS_READ(addr) ({ \ |
+outb_p((addr),RTC_PORT(0)); \ |
+inb_p(RTC_PORT(1)); \ |
+}) |
+#define CMOS_WRITE(val, addr) ({ \ |
+outb_p((addr),RTC_PORT(0)); \ |
+outb_p((val),RTC_PORT(1)); \ |
+}) |
+ |
+#define RTC_IRQ 8 |
+ |
+#endif /* _ASM_MC146818RTC_H */ |
Index: linuxc26/include/asm/pgtable-2level.h |
=================================================================== |
--- linuxc26/include/asm/pgtable-2level.h (nonexistent) |
+++ linuxc26/include/asm/pgtable-2level.h (revision 422) |
@@ -0,0 +1,78 @@ |
+#ifndef _I386_PGTABLE_2LEVEL_H |
+#define _I386_PGTABLE_2LEVEL_H |
+ |
+/* |
+ * traditional i386 two-level paging structure: |
+ */ |
+ |
+#define PGDIR_SHIFT 22 |
+#define PTRS_PER_PGD 1024 |
+ |
+/* |
+ * the i386 is two-level, so we don't really have any |
+ * PMD directory physically. |
+ */ |
+#define PMD_SHIFT 22 |
+#define PTRS_PER_PMD 1 |
+ |
+#define PTRS_PER_PTE 1024 |
+ |
+#define pte_ERROR(e) \ |
+ printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, (e).pte_low) |
+#define pmd_ERROR(e) \ |
+ printk("%s:%d: bad pmd %08lx.\n", __FILE__, __LINE__, pmd_val(e)) |
+#define pgd_ERROR(e) \ |
+ printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) |
+ |
+/* |
+ * The "pgd_xxx()" functions here are trivial for a folded two-level |
+ * setup: the pgd is never bad, and a pmd always exists (as it's folded |
+ * into the pgd entry) |
+ */ |
+static inline int pgd_none(pgd_t pgd) { return 0; } |
+static inline int pgd_bad(pgd_t pgd) { return 0; } |
+static inline int pgd_present(pgd_t pgd) { return 1; } |
+#define pgd_clear(xp) do { } while (0) |
+ |
+/* |
+ * Certain architectures need to do special things when PTEs |
+ * within a page table are directly modified. Thus, the following |
+ * hook is made available. |
+ */ |
+#define set_pte(pteptr, pteval) (*(pteptr) = pteval) |
+#define set_pte_atomic(pteptr, pteval) set_pte(pteptr,pteval) |
+/* |
+ * (pmds are folded into pgds so this doesn't get actually called, |
+ * but the define is needed for a generic inline function.) |
+ */ |
+#define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval) |
+#define set_pgd(pgdptr, pgdval) (*(pgdptr) = pgdval) |
+ |
+#define pgd_page(pgd) \ |
+((unsigned long) __va(pgd_val(pgd) & PAGE_MASK)) |
+ |
+static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address) |
+{ |
+ return (pmd_t *) dir; |
+} |
+#define ptep_get_and_clear(xp) __pte(xchg(&(xp)->pte_low, 0)) |
+#define pte_same(a, b) ((a).pte_low == (b).pte_low) |
+#define pte_page(x) pfn_to_page(pte_pfn(x)) |
+#define pte_none(x) (!(x).pte_low) |
+#define pte_pfn(x) ((unsigned long)(((x).pte_low >> PAGE_SHIFT))) |
+#define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) |
+#define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) |
+ |
+/* |
+ * Bits 0, 6 and 7 are taken, split up the 29 bits of offset |
+ * into this range: |
+ */ |
+#define PTE_FILE_MAX_BITS 29 |
+ |
+#define pte_to_pgoff(pte) \ |
+ ((((pte).pte_low >> 1) & 0x1f ) + (((pte).pte_low >> 8) << 5 )) |
+ |
+#define pgoff_to_pte(off) \ |
+ ((pte_t) { (((off) & 0x1f) << 1) + (((off) >> 5) << 8) + _PAGE_FILE }) |
+ |
+#endif /* _I386_PGTABLE_2LEVEL_H */ |
Index: linuxc26/include/asm/mpspec_def.h |
=================================================================== |
--- linuxc26/include/asm/mpspec_def.h (nonexistent) |
+++ linuxc26/include/asm/mpspec_def.h (revision 422) |
@@ -0,0 +1,187 @@ |
+#ifndef __ASM_MPSPEC_DEF_H |
+#define __ASM_MPSPEC_DEF_H |
+ |
+/* |
+ * Structure definitions for SMP machines following the |
+ * Intel Multiprocessing Specification 1.1 and 1.4. |
+ */ |
+ |
+/* |
+ * This tag identifies where the SMP configuration |
+ * information is. |
+ */ |
+ |
+#define SMP_MAGIC_IDENT (('_'<<24)|('P'<<16)|('M'<<8)|'_') |
+ |
+#define MAX_MPC_ENTRY 1024 |
+ |
+struct intel_mp_floating |
+{ |
+ char mpf_signature[4]; /* "_MP_" */ |
+ unsigned long mpf_physptr; /* Configuration table address */ |
+ unsigned char mpf_length; /* Our length (paragraphs) */ |
+ unsigned char mpf_specification;/* Specification version */ |
+ unsigned char mpf_checksum; /* Checksum (makes sum 0) */ |
+ unsigned char mpf_feature1; /* Standard or configuration ? */ |
+ unsigned char mpf_feature2; /* Bit7 set for IMCR|PIC */ |
+ unsigned char mpf_feature3; /* Unused (0) */ |
+ unsigned char mpf_feature4; /* Unused (0) */ |
+ unsigned char mpf_feature5; /* Unused (0) */ |
+}; |
+ |
+struct mp_config_table |
+{ |
+ char mpc_signature[4]; |
+#define MPC_SIGNATURE "PCMP" |
+ unsigned short mpc_length; /* Size of table */ |
+ char mpc_spec; /* 0x01 */ |
+ char mpc_checksum; |
+ char mpc_oem[8]; |
+ char mpc_productid[12]; |
+ unsigned long mpc_oemptr; /* 0 if not present */ |
+ unsigned short mpc_oemsize; /* 0 if not present */ |
+ unsigned short mpc_oemcount; |
+ unsigned long mpc_lapic; /* APIC address */ |
+ unsigned long reserved; |
+}; |
+ |
+/* Followed by entries */ |
+ |
+#define MP_PROCESSOR 0 |
+#define MP_BUS 1 |
+#define MP_IOAPIC 2 |
+#define MP_INTSRC 3 |
+#define MP_LINTSRC 4 |
+#define MP_TRANSLATION 192 /* Used by IBM NUMA-Q to describe node locality */ |
+ |
+struct mpc_config_processor |
+{ |
+ unsigned char mpc_type; |
+ unsigned char mpc_apicid; /* Local APIC number */ |
+ unsigned char mpc_apicver; /* Its versions */ |
+ unsigned char mpc_cpuflag; |
+#define CPU_ENABLED 1 /* Processor is available */ |
+#define CPU_BOOTPROCESSOR 2 /* Processor is the BP */ |
+ unsigned long mpc_cpufeature; |
+#define CPU_STEPPING_MASK 0x0F |
+#define CPU_MODEL_MASK 0xF0 |
+#define CPU_FAMILY_MASK 0xF00 |
+ unsigned long mpc_featureflag; /* CPUID feature value */ |
+ unsigned long mpc_reserved[2]; |
+}; |
+ |
+struct mpc_config_bus |
+{ |
+ unsigned char mpc_type; |
+ unsigned char mpc_busid; |
+ unsigned char mpc_bustype[6] __attribute((packed)); |
+}; |
+ |
+/* List of Bus Type string values, Intel MP Spec. */ |
+#define BUSTYPE_EISA "EISA" |
+#define BUSTYPE_ISA "ISA" |
+#define BUSTYPE_INTERN "INTERN" /* Internal BUS */ |
+#define BUSTYPE_MCA "MCA" |
+#define BUSTYPE_VL "VL" /* Local bus */ |
+#define BUSTYPE_PCI "PCI" |
+#define BUSTYPE_PCMCIA "PCMCIA" |
+#define BUSTYPE_CBUS "CBUS" |
+#define BUSTYPE_CBUSII "CBUSII" |
+#define BUSTYPE_FUTURE "FUTURE" |
+#define BUSTYPE_MBI "MBI" |
+#define BUSTYPE_MBII "MBII" |
+#define BUSTYPE_MPI "MPI" |
+#define BUSTYPE_MPSA "MPSA" |
+#define BUSTYPE_NUBUS "NUBUS" |
+#define BUSTYPE_TC "TC" |
+#define BUSTYPE_VME "VME" |
+#define BUSTYPE_XPRESS "XPRESS" |
+#define BUSTYPE_NEC98 "NEC98" |
+ |
+struct mpc_config_ioapic |
+{ |
+ unsigned char mpc_type; |
+ unsigned char mpc_apicid; |
+ unsigned char mpc_apicver; |
+ unsigned char mpc_flags; |
+#define MPC_APIC_USABLE 0x01 |
+ unsigned long mpc_apicaddr; |
+}; |
+ |
+struct mpc_config_intsrc |
+{ |
+ unsigned char mpc_type; |
+ unsigned char mpc_irqtype; |
+ unsigned short mpc_irqflag; |
+ unsigned char mpc_srcbus; |
+ unsigned char mpc_srcbusirq; |
+ unsigned char mpc_dstapic; |
+ unsigned char mpc_dstirq; |
+}; |
+ |
+enum mp_irq_source_types { |
+ mp_INT = 0, |
+ mp_NMI = 1, |
+ mp_SMI = 2, |
+ mp_ExtINT = 3 |
+}; |
+ |
+#define MP_IRQDIR_DEFAULT 0 |
+#define MP_IRQDIR_HIGH 1 |
+#define MP_IRQDIR_LOW 3 |
+ |
+ |
+struct mpc_config_lintsrc |
+{ |
+ unsigned char mpc_type; |
+ unsigned char mpc_irqtype; |
+ unsigned short mpc_irqflag; |
+ unsigned char mpc_srcbusid; |
+ unsigned char mpc_srcbusirq; |
+ unsigned char mpc_destapic; |
+#define MP_APIC_ALL 0xFF |
+ unsigned char mpc_destapiclint; |
+}; |
+ |
+struct mp_config_oemtable |
+{ |
+ char oem_signature[4]; |
+#define MPC_OEM_SIGNATURE "_OEM" |
+ unsigned short oem_length; /* Size of table */ |
+ char oem_rev; /* 0x01 */ |
+ char oem_checksum; |
+ char mpc_oem[8]; |
+}; |
+ |
+struct mpc_config_translation |
+{ |
+ unsigned char mpc_type; |
+ unsigned char trans_len; |
+ unsigned char trans_type; |
+ unsigned char trans_quad; |
+ unsigned char trans_global; |
+ unsigned char trans_local; |
+ unsigned short trans_reserved; |
+}; |
+ |
+/* |
+ * Default configurations |
+ * |
+ * 1 2 CPU ISA 82489DX |
+ * 2 2 CPU EISA 82489DX neither IRQ 0 timer nor IRQ 13 DMA chaining |
+ * 3 2 CPU EISA 82489DX |
+ * 4 2 CPU MCA 82489DX |
+ * 5 2 CPU ISA+PCI |
+ * 6 2 CPU EISA+PCI |
+ * 7 2 CPU MCA+PCI |
+ */ |
+ |
+enum mp_bustype { |
+ MP_BUS_ISA = 1, |
+ MP_BUS_EISA, |
+ MP_BUS_PCI, |
+ MP_BUS_MCA, |
+ MP_BUS_NEC98 |
+}; |
+#endif |
+ |
Index: linuxc26/include/asm/elf.h |
=================================================================== |
--- linuxc26/include/asm/elf.h (nonexistent) |
+++ linuxc26/include/asm/elf.h (revision 422) |
@@ -0,0 +1,187 @@ |
+#ifndef __ASMi386_ELF_H |
+#define __ASMi386_ELF_H |
+ |
+/* |
+ * ELF register definitions.. |
+ */ |
+ |
+#include <asm/ptrace.h> |
+#include <asm/user.h> |
+#include <asm/processor.h> |
+#include <asm/system.h> /* for savesegment */ |
+ |
+#include <linux/utsname.h> |
+ |
+#define R_386_NONE 0 |
+#define R_386_32 1 |
+#define R_386_PC32 2 |
+#define R_386_GOT32 3 |
+#define R_386_PLT32 4 |
+#define R_386_COPY 5 |
+#define R_386_GLOB_DAT 6 |
+#define R_386_JMP_SLOT 7 |
+#define R_386_RELATIVE 8 |
+#define R_386_GOTOFF 9 |
+#define R_386_GOTPC 10 |
+#define R_386_NUM 11 |
+ |
+typedef unsigned long elf_greg_t; |
+ |
+#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t)) |
+typedef elf_greg_t elf_gregset_t[ELF_NGREG]; |
+ |
+typedef struct user_i387_struct elf_fpregset_t; |
+typedef struct user_fxsr_struct elf_fpxregset_t; |
+ |
+/* |
+ * This is used to ensure we don't load something for the wrong architecture. |
+ */ |
+#define elf_check_arch(x) \ |
+ (((x)->e_machine == EM_386) || ((x)->e_machine == EM_486)) |
+ |
+/* |
+ * These are used to set parameters in the core dumps. |
+ */ |
+#define ELF_CLASS ELFCLASS32 |
+#define ELF_DATA ELFDATA2LSB |
+#define ELF_ARCH EM_386 |
+ |
+/* SVR4/i386 ABI (pages 3-31, 3-32) says that when the program starts %edx |
+ contains a pointer to a function which might be registered using `atexit'. |
+ This provides a mean for the dynamic linker to call DT_FINI functions for |
+ shared libraries that have been loaded before the code runs. |
+ |
+ A value of 0 tells we have no such handler. |
+ |
+ We might as well make sure everything else is cleared too (except for %esp), |
+ just to make things more deterministic. |
+ */ |
+#define ELF_PLAT_INIT(_r, load_addr) do { \ |
+ _r->ebx = 0; _r->ecx = 0; _r->edx = 0; \ |
+ _r->esi = 0; _r->edi = 0; _r->ebp = 0; \ |
+ _r->eax = 0; \ |
+} while (0) |
+ |
+#define USE_ELF_CORE_DUMP |
+#define ELF_EXEC_PAGESIZE 4096 |
+ |
+/* This is the location that an ET_DYN program is loaded if exec'ed. Typical |
+ use of this is to invoke "./ld.so someprog" to test out a new version of |
+ the loader. We need to make sure that it is out of the way of the program |
+ that it will "exec", and that there is sufficient room for the brk. */ |
+ |
+#define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2) |
+ |
+/* regs is struct pt_regs, pr_reg is elf_gregset_t (which is |
+ now struct_user_regs, they are different) */ |
+ |
+#define ELF_CORE_COPY_REGS(pr_reg, regs) \ |
+ pr_reg[0] = regs->ebx; \ |
+ pr_reg[1] = regs->ecx; \ |
+ pr_reg[2] = regs->edx; \ |
+ pr_reg[3] = regs->esi; \ |
+ pr_reg[4] = regs->edi; \ |
+ pr_reg[5] = regs->ebp; \ |
+ pr_reg[6] = regs->eax; \ |
+ pr_reg[7] = regs->xds; \ |
+ pr_reg[8] = regs->xes; \ |
+ savesegment(fs,pr_reg[9]); \ |
+ savesegment(gs,pr_reg[10]); \ |
+ pr_reg[11] = regs->orig_eax; \ |
+ pr_reg[12] = regs->eip; \ |
+ pr_reg[13] = regs->xcs; \ |
+ pr_reg[14] = regs->eflags; \ |
+ pr_reg[15] = regs->esp; \ |
+ pr_reg[16] = regs->xss; |
+ |
+/* This yields a mask that user programs can use to figure out what |
+ instruction set this CPU supports. This could be done in user space, |
+ but it's not easy, and we've already done it here. */ |
+ |
+#define ELF_HWCAP (boot_cpu_data.x86_capability[0]) |
+ |
+/* This yields a string that ld.so will use to load implementation |
+ specific libraries for optimization. This is more specific in |
+ intent than poking at uname or /proc/cpuinfo. |
+ |
+ For the moment, we have only optimizations for the Intel generations, |
+ but that could change... */ |
+ |
+#define ELF_PLATFORM (system_utsname.machine) |
+ |
+/* |
+ * Architecture-neutral AT_ values in 0-17, leave some room |
+ * for more of them, start the x86-specific ones at 32. |
+ */ |
+#define AT_SYSINFO 32 |
+#define AT_SYSINFO_EHDR 33 |
+ |
+#ifdef __KERNEL__ |
+#define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX) |
+ |
+extern int dump_task_regs (struct task_struct *, elf_gregset_t *); |
+extern int dump_task_fpu (struct task_struct *, elf_fpregset_t *); |
+extern int dump_task_extended_fpu (struct task_struct *, struct user_fxsr_struct *); |
+ |
+#define ELF_CORE_COPY_TASK_REGS(tsk, elf_regs) dump_task_regs(tsk, elf_regs) |
+#define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) dump_task_fpu(tsk, elf_fpregs) |
+#define ELF_CORE_COPY_XFPREGS(tsk, elf_xfpregs) dump_task_extended_fpu(tsk, elf_xfpregs) |
+ |
+#define VSYSCALL_BASE (__fix_to_virt(FIX_VSYSCALL)) |
+#define VSYSCALL_EHDR ((const struct elfhdr *) VSYSCALL_BASE) |
+#define VSYSCALL_ENTRY ((unsigned long) &__kernel_vsyscall) |
+extern void __kernel_vsyscall; |
+ |
+#define ARCH_DLINFO \ |
+do { \ |
+ NEW_AUX_ENT(AT_SYSINFO, VSYSCALL_ENTRY); \ |
+ NEW_AUX_ENT(AT_SYSINFO_EHDR, VSYSCALL_BASE); \ |
+} while (0) |
+ |
+/* |
+ * These macros parameterize elf_core_dump in fs/binfmt_elf.c to write out |
+ * extra segments containing the vsyscall DSO contents. Dumping its |
+ * contents makes post-mortem fully interpretable later without matching up |
+ * the same kernel and hardware config to see what PC values meant. |
+ * Dumping its extra ELF program headers includes all the other information |
+ * a debugger needs to easily find how the vsyscall DSO was being used. |
+ */ |
+#define ELF_CORE_EXTRA_PHDRS (VSYSCALL_EHDR->e_phnum) |
+#define ELF_CORE_WRITE_EXTRA_PHDRS \ |
+do { \ |
+ const struct elf_phdr *const vsyscall_phdrs = \ |
+ (const struct elf_phdr *) (VSYSCALL_BASE \ |
+ + VSYSCALL_EHDR->e_phoff); \ |
+ int i; \ |
+ Elf32_Off ofs = 0; \ |
+ for (i = 0; i < VSYSCALL_EHDR->e_phnum; ++i) { \ |
+ struct elf_phdr phdr = vsyscall_phdrs[i]; \ |
+ if (phdr.p_type == PT_LOAD) { \ |
+ BUG_ON(ofs != 0); \ |
+ ofs = phdr.p_offset = offset; \ |
+ phdr.p_memsz = PAGE_ALIGN(phdr.p_memsz); \ |
+ phdr.p_filesz = phdr.p_memsz; \ |
+ offset += phdr.p_filesz; \ |
+ } \ |
+ else \ |
+ phdr.p_offset += ofs; \ |
+ phdr.p_paddr = 0; /* match other core phdrs */ \ |
+ DUMP_WRITE(&phdr, sizeof(phdr)); \ |
+ } \ |
+} while (0) |
+#define ELF_CORE_WRITE_EXTRA_DATA \ |
+do { \ |
+ const struct elf_phdr *const vsyscall_phdrs = \ |
+ (const struct elf_phdr *) (VSYSCALL_BASE \ |
+ + VSYSCALL_EHDR->e_phoff); \ |
+ int i; \ |
+ for (i = 0; i < VSYSCALL_EHDR->e_phnum; ++i) { \ |
+ if (vsyscall_phdrs[i].p_type == PT_LOAD) \ |
+ DUMP_WRITE((void *) vsyscall_phdrs[i].p_vaddr, \ |
+ PAGE_ALIGN(vsyscall_phdrs[i].p_memsz)); \ |
+ } \ |
+} while (0) |
+ |
+#endif |
+ |
+#endif |
Index: linuxc26/include/asm/poll.h |
=================================================================== |
--- linuxc26/include/asm/poll.h (nonexistent) |
+++ linuxc26/include/asm/poll.h (revision 422) |
@@ -0,0 +1,26 @@ |
+#ifndef __i386_POLL_H |
+#define __i386_POLL_H |
+ |
+/* These are specified by iBCS2 */ |
+#define POLLIN 0x0001 |
+#define POLLPRI 0x0002 |
+#define POLLOUT 0x0004 |
+#define POLLERR 0x0008 |
+#define POLLHUP 0x0010 |
+#define POLLNVAL 0x0020 |
+ |
+/* The rest seem to be more-or-less nonstandard. Check them! */ |
+#define POLLRDNORM 0x0040 |
+#define POLLRDBAND 0x0080 |
+#define POLLWRNORM 0x0100 |
+#define POLLWRBAND 0x0200 |
+#define POLLMSG 0x0400 |
+#define POLLREMOVE 0x1000 |
+ |
+struct pollfd { |
+ int fd; |
+ short events; |
+ short revents; |
+}; |
+ |
+#endif |
Index: linuxc26/include/asm/ucontext.h |
=================================================================== |
--- linuxc26/include/asm/ucontext.h (nonexistent) |
+++ linuxc26/include/asm/ucontext.h (revision 422) |
@@ -0,0 +1,12 @@ |
+#ifndef _ASMi386_UCONTEXT_H |
+#define _ASMi386_UCONTEXT_H |
+ |
+struct ucontext { |
+ unsigned long uc_flags; |
+ struct ucontext *uc_link; |
+ stack_t uc_stack; |
+ struct sigcontext uc_mcontext; |
+ sigset_t uc_sigmask; /* mask last for extensibility */ |
+}; |
+ |
+#endif /* !_ASMi386_UCONTEXT_H */ |
Index: linuxc26/include/asm/user.h |
=================================================================== |
--- linuxc26/include/asm/user.h (nonexistent) |
+++ linuxc26/include/asm/user.h (revision 422) |
@@ -0,0 +1,121 @@ |
+#ifndef _I386_USER_H |
+#define _I386_USER_H |
+ |
+#include <asm/page.h> |
+/* Core file format: The core file is written in such a way that gdb |
+ can understand it and provide useful information to the user (under |
+ linux we use the 'trad-core' bfd). There are quite a number of |
+ obstacles to being able to view the contents of the floating point |
+ registers, and until these are solved you will not be able to view the |
+ contents of them. Actually, you can read in the core file and look at |
+ the contents of the user struct to find out what the floating point |
+ registers contain. |
+ The actual file contents are as follows: |
+ UPAGE: 1 page consisting of a user struct that tells gdb what is present |
+ in the file. Directly after this is a copy of the task_struct, which |
+ is currently not used by gdb, but it may come in useful at some point. |
+ All of the registers are stored as part of the upage. The upage should |
+ always be only one page. |
+ DATA: The data area is stored. We use current->end_text to |
+ current->brk to pick up all of the user variables, plus any memory |
+ that may have been malloced. No attempt is made to determine if a page |
+ is demand-zero or if a page is totally unused, we just cover the entire |
+ range. All of the addresses are rounded in such a way that an integral |
+ number of pages is written. |
+ STACK: We need the stack information in order to get a meaningful |
+ backtrace. We need to write the data from (esp) to |
+ current->start_stack, so we round each of these off in order to be able |
+ to write an integer number of pages. |
+ The minimum core file size is 3 pages, or 12288 bytes. |
+*/ |
+ |
+/* |
+ * Pentium III FXSR, SSE support |
+ * Gareth Hughes <gareth@valinux.com>, May 2000 |
+ * |
+ * Provide support for the GDB 5.0+ PTRACE_{GET|SET}FPXREGS requests for |
+ * interacting with the FXSR-format floating point environment. Floating |
+ * point data can be accessed in the regular format in the usual manner, |
+ * and both the standard and SIMD floating point data can be accessed via |
+ * the new ptrace requests. In either case, changes to the FPU environment |
+ * will be reflected in the task's state as expected. |
+ */ |
+ |
+struct user_i387_struct { |
+ long cwd; |
+ long swd; |
+ long twd; |
+ long fip; |
+ long fcs; |
+ long foo; |
+ long fos; |
+ long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */ |
+}; |
+ |
+struct user_fxsr_struct { |
+ unsigned short cwd; |
+ unsigned short swd; |
+ unsigned short twd; |
+ unsigned short fop; |
+ long fip; |
+ long fcs; |
+ long foo; |
+ long fos; |
+ long mxcsr; |
+ long reserved; |
+ long st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ |
+ long xmm_space[32]; /* 8*16 bytes for each XMM-reg = 128 bytes */ |
+ long padding[56]; |
+}; |
+ |
+/* |
+ * This is the old layout of "struct pt_regs", and |
+ * is still the layout used by user mode (the new |
+ * pt_regs doesn't have all registers as the kernel |
+ * doesn't use the extra segment registers) |
+ */ |
+struct user_regs_struct { |
+ long ebx, ecx, edx, esi, edi, ebp, eax; |
+ unsigned short ds, __ds, es, __es; |
+ unsigned short fs, __fs, gs, __gs; |
+ long orig_eax, eip; |
+ unsigned short cs, __cs; |
+ long eflags, esp; |
+ unsigned short ss, __ss; |
+}; |
+ |
+/* When the kernel dumps core, it starts by dumping the user struct - |
+ this will be used by gdb to figure out where the data and stack segments |
+ are within the file, and what virtual addresses to use. */ |
+struct user{ |
+/* We start with the registers, to mimic the way that "memory" is returned |
+ from the ptrace(3,...) function. */ |
+ struct user_regs_struct regs; /* Where the registers are actually stored */ |
+/* ptrace does not yet supply these. Someday.... */ |
+ int u_fpvalid; /* True if math co-processor being used. */ |
+ /* for this mess. Not yet used. */ |
+ struct user_i387_struct i387; /* Math Co-processor registers. */ |
+/* The rest of this junk is to help gdb figure out what goes where */ |
+ unsigned long int u_tsize; /* Text segment size (pages). */ |
+ unsigned long int u_dsize; /* Data segment size (pages). */ |
+ unsigned long int u_ssize; /* Stack segment size (pages). */ |
+ unsigned long start_code; /* Starting virtual address of text. */ |
+ unsigned long start_stack; /* Starting virtual address of stack area. |
+ This is actually the bottom of the stack, |
+ the top of the stack is always found in the |
+ esp register. */ |
+ long int signal; /* Signal that caused the core dump. */ |
+ int reserved; /* No longer used */ |
+ struct user_pt_regs * u_ar0; /* Used by gdb to help find the values for */ |
+ /* the registers. */ |
+ struct user_i387_struct* u_fpstate; /* Math Co-processor pointer. */ |
+ unsigned long magic; /* To uniquely identify a core file */ |
+ char u_comm[32]; /* User command that was responsible */ |
+ int u_debugreg[8]; |
+}; |
+#define NBPG PAGE_SIZE |
+#define UPAGES 1 |
+#define HOST_TEXT_START_ADDR (u.start_code) |
+#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) |
+ |
+#endif /* _I386_USER_H */ |
Index: linuxc26/include/asm/ldt.h |
=================================================================== |
--- linuxc26/include/asm/ldt.h (nonexistent) |
+++ linuxc26/include/asm/ldt.h (revision 422) |
@@ -0,0 +1,32 @@ |
+/* |
+ * ldt.h |
+ * |
+ * Definitions of structures used with the modify_ldt system call. |
+ */ |
+#ifndef _LINUX_LDT_H |
+#define _LINUX_LDT_H |
+ |
+/* Maximum number of LDT entries supported. */ |
+#define LDT_ENTRIES 8192 |
+/* The size of each LDT entry. */ |
+#define LDT_ENTRY_SIZE 8 |
+ |
+#ifndef __ASSEMBLY__ |
+struct user_desc { |
+ unsigned int entry_number; |
+ unsigned long base_addr; |
+ unsigned int limit; |
+ unsigned int seg_32bit:1; |
+ unsigned int contents:2; |
+ unsigned int read_exec_only:1; |
+ unsigned int limit_in_pages:1; |
+ unsigned int seg_not_present:1; |
+ unsigned int useable:1; |
+}; |
+ |
+#define MODIFY_LDT_CONTENTS_DATA 0 |
+#define MODIFY_LDT_CONTENTS_STACK 1 |
+#define MODIFY_LDT_CONTENTS_CODE 2 |
+ |
+#endif /* !__ASSEMBLY__ */ |
+#endif |
Index: linuxc26/include/asm/a.out.h |
=================================================================== |
--- linuxc26/include/asm/a.out.h (nonexistent) |
+++ linuxc26/include/asm/a.out.h (revision 422) |
@@ -0,0 +1,26 @@ |
+#ifndef __I386_A_OUT_H__ |
+#define __I386_A_OUT_H__ |
+ |
+struct exec |
+{ |
+ unsigned long a_info; /* Use macros N_MAGIC, etc for access */ |
+ unsigned a_text; /* length of text, in bytes */ |
+ unsigned a_data; /* length of data, in bytes */ |
+ unsigned a_bss; /* length of uninitialized data area for file, in bytes */ |
+ unsigned a_syms; /* length of symbol table data in file, in bytes */ |
+ unsigned a_entry; /* start address */ |
+ unsigned a_trsize; /* length of relocation info for text, in bytes */ |
+ unsigned a_drsize; /* length of relocation info for data, in bytes */ |
+}; |
+ |
+#define N_TRSIZE(a) ((a).a_trsize) |
+#define N_DRSIZE(a) ((a).a_drsize) |
+#define N_SYMSIZE(a) ((a).a_syms) |
+ |
+#ifdef __KERNEL__ |
+ |
+#define STACK_TOP TASK_SIZE |
+ |
+#endif |
+ |
+#endif /* __A_OUT_GNU_H__ */ |
Index: linuxc26/include/asm/namei.h |
=================================================================== |
--- linuxc26/include/asm/namei.h (nonexistent) |
+++ linuxc26/include/asm/namei.h (revision 422) |
@@ -0,0 +1,17 @@ |
+/* $Id: namei.h,v 1.1 2004-01-28 15:24:24 giacomo Exp $ |
+ * linux/include/asm-i386/namei.h |
+ * |
+ * Included from linux/fs/namei.c |
+ */ |
+ |
+#ifndef __I386_NAMEI_H |
+#define __I386_NAMEI_H |
+ |
+/* This dummy routine maybe changed to something useful |
+ * for /usr/gnemul/ emulation stuff. |
+ * Look at asm-sparc/namei.h for details. |
+ */ |
+ |
+#define __emul_prefix() NULL |
+ |
+#endif /* __I386_NAMEI_H */ |
Index: linuxc26/include/asm/apicdef.h |
=================================================================== |
--- linuxc26/include/asm/apicdef.h (nonexistent) |
+++ linuxc26/include/asm/apicdef.h (revision 422) |
@@ -0,0 +1,377 @@ |
+#ifndef __ASM_APICDEF_H |
+#define __ASM_APICDEF_H |
+ |
+/* |
+ * Constants for various Intel APICs. (local APIC, IOAPIC, etc.) |
+ * |
+ * Alan Cox <Alan.Cox@linux.org>, 1995. |
+ * Ingo Molnar <mingo@redhat.com>, 1999, 2000 |
+ */ |
+ |
+#define APIC_DEFAULT_PHYS_BASE 0xfee00000 |
+ |
+#define APIC_ID 0x20 |
+#define APIC_LVR 0x30 |
+#define APIC_LVR_MASK 0xFF00FF |
+#define GET_APIC_VERSION(x) ((x)&0xFF) |
+#define GET_APIC_MAXLVT(x) (((x)>>16)&0xFF) |
+#define APIC_INTEGRATED(x) ((x)&0xF0) |
+#define APIC_TASKPRI 0x80 |
+#define APIC_TPRI_MASK 0xFF |
+#define APIC_ARBPRI 0x90 |
+#define APIC_ARBPRI_MASK 0xFF |
+#define APIC_PROCPRI 0xA0 |
+#define APIC_EOI 0xB0 |
+#define APIC_EIO_ACK 0x0 /* Write this to the EOI register */ |
+#define APIC_RRR 0xC0 |
+#define APIC_LDR 0xD0 |
+#define APIC_LDR_MASK (0xFF<<24) |
+#define GET_APIC_LOGICAL_ID(x) (((x)>>24)&0xFF) |
+#define SET_APIC_LOGICAL_ID(x) (((x)<<24)) |
+#define APIC_ALL_CPUS 0xFF |
+#define APIC_DFR 0xE0 |
+#define APIC_DFR_CLUSTER 0x0FFFFFFFul |
+#define APIC_DFR_FLAT 0xFFFFFFFFul |
+#define APIC_SPIV 0xF0 |
+#define APIC_SPIV_FOCUS_DISABLED (1<<9) |
+#define APIC_SPIV_APIC_ENABLED (1<<8) |
+#define APIC_ISR 0x100 |
+#define APIC_TMR 0x180 |
+#define APIC_IRR 0x200 |
+#define APIC_ESR 0x280 |
+#define APIC_ESR_SEND_CS 0x00001 |
+#define APIC_ESR_RECV_CS 0x00002 |
+#define APIC_ESR_SEND_ACC 0x00004 |
+#define APIC_ESR_RECV_ACC 0x00008 |
+#define APIC_ESR_SENDILL 0x00020 |
+#define APIC_ESR_RECVILL 0x00040 |
+#define APIC_ESR_ILLREGA 0x00080 |
+#define APIC_ICR 0x300 |
+#define APIC_DEST_SELF 0x40000 |
+#define APIC_DEST_ALLINC 0x80000 |
+#define APIC_DEST_ALLBUT 0xC0000 |
+#define APIC_ICR_RR_MASK 0x30000 |
+#define APIC_ICR_RR_INVALID 0x00000 |
+#define APIC_ICR_RR_INPROG 0x10000 |
+#define APIC_ICR_RR_VALID 0x20000 |
+#define APIC_INT_LEVELTRIG 0x08000 |
+#define APIC_INT_ASSERT 0x04000 |
+#define APIC_ICR_BUSY 0x01000 |
+#define APIC_DEST_LOGICAL 0x00800 |
+#define APIC_DM_FIXED 0x00000 |
+#define APIC_DM_LOWEST 0x00100 |
+#define APIC_DM_SMI 0x00200 |
+#define APIC_DM_REMRD 0x00300 |
+#define APIC_DM_NMI 0x00400 |
+#define APIC_DM_INIT 0x00500 |
+#define APIC_DM_STARTUP 0x00600 |
+#define APIC_DM_EXTINT 0x00700 |
+#define APIC_VECTOR_MASK 0x000FF |
+#define APIC_ICR2 0x310 |
+#define GET_APIC_DEST_FIELD(x) (((x)>>24)&0xFF) |
+#define SET_APIC_DEST_FIELD(x) ((x)<<24) |
+#define APIC_LVTT 0x320 |
+#define APIC_LVTTHMR 0x330 |
+#define APIC_LVTPC 0x340 |
+#define APIC_LVT0 0x350 |
+#define APIC_LVT_TIMER_BASE_MASK (0x3<<18) |
+#define GET_APIC_TIMER_BASE(x) (((x)>>18)&0x3) |
+#define SET_APIC_TIMER_BASE(x) (((x)<<18)) |
+#define APIC_TIMER_BASE_CLKIN 0x0 |
+#define APIC_TIMER_BASE_TMBASE 0x1 |
+#define APIC_TIMER_BASE_DIV 0x2 |
+#define APIC_LVT_TIMER_PERIODIC (1<<17) |
+#define APIC_LVT_MASKED (1<<16) |
+#define APIC_LVT_LEVEL_TRIGGER (1<<15) |
+#define APIC_LVT_REMOTE_IRR (1<<14) |
+#define APIC_INPUT_POLARITY (1<<13) |
+#define APIC_SEND_PENDING (1<<12) |
+#define GET_APIC_DELIVERY_MODE(x) (((x)>>8)&0x7) |
+#define SET_APIC_DELIVERY_MODE(x,y) (((x)&~0x700)|((y)<<8)) |
+#define APIC_MODE_FIXED 0x0 |
+#define APIC_MODE_NMI 0x4 |
+#define APIC_MODE_EXINT 0x7 |
+#define APIC_LVT1 0x360 |
+#define APIC_LVTERR 0x370 |
+#define APIC_TMICT 0x380 |
+#define APIC_TMCCT 0x390 |
+#define APIC_TDCR 0x3E0 |
+#define APIC_TDR_DIV_TMBASE (1<<2) |
+#define APIC_TDR_DIV_1 0xB |
+#define APIC_TDR_DIV_2 0x0 |
+#define APIC_TDR_DIV_4 0x1 |
+#define APIC_TDR_DIV_8 0x2 |
+#define APIC_TDR_DIV_16 0x3 |
+#define APIC_TDR_DIV_32 0x8 |
+#define APIC_TDR_DIV_64 0x9 |
+#define APIC_TDR_DIV_128 0xA |
+ |
+#define APIC_BASE (fix_to_virt(FIX_APIC_BASE)) |
+ |
+#ifdef CONFIG_NUMA |
+ #define MAX_IO_APICS 32 |
+#else |
+ #define MAX_IO_APICS 8 |
+#endif |
+ |
+/* |
+ * the local APIC register structure, memory mapped. Not terribly well |
+ * tested, but we might eventually use this one in the future - the |
+ * problem why we cannot use it right now is the P5 APIC, it has an |
+ * errata which cannot take 8-bit reads and writes, only 32-bit ones ... |
+ */ |
+#define u32 unsigned int |
+ |
+#define lapic ((volatile struct local_apic *)APIC_BASE) |
+ |
+struct local_apic { |
+ |
+/*000*/ struct { u32 __reserved[4]; } __reserved_01; |
+ |
+/*010*/ struct { u32 __reserved[4]; } __reserved_02; |
+ |
+/*020*/ struct { /* APIC ID Register */ |
+ u32 __reserved_1 : 24, |
+ phys_apic_id : 4, |
+ __reserved_2 : 4; |
+ u32 __reserved[3]; |
+ } id; |
+ |
+/*030*/ const |
+ struct { /* APIC Version Register */ |
+ u32 version : 8, |
+ __reserved_1 : 8, |
+ max_lvt : 8, |
+ __reserved_2 : 8; |
+ u32 __reserved[3]; |
+ } version; |
+ |
+/*040*/ struct { u32 __reserved[4]; } __reserved_03; |
+ |
+/*050*/ struct { u32 __reserved[4]; } __reserved_04; |
+ |
+/*060*/ struct { u32 __reserved[4]; } __reserved_05; |
+ |
+/*070*/ struct { u32 __reserved[4]; } __reserved_06; |
+ |
+/*080*/ struct { /* Task Priority Register */ |
+ u32 priority : 8, |
+ __reserved_1 : 24; |
+ u32 __reserved_2[3]; |
+ } tpr; |
+ |
+/*090*/ const |
+ struct { /* Arbitration Priority Register */ |
+ u32 priority : 8, |
+ __reserved_1 : 24; |
+ u32 __reserved_2[3]; |
+ } apr; |
+ |
+/*0A0*/ const |
+ struct { /* Processor Priority Register */ |
+ u32 priority : 8, |
+ __reserved_1 : 24; |
+ u32 __reserved_2[3]; |
+ } ppr; |
+ |
+/*0B0*/ struct { /* End Of Interrupt Register */ |
+ u32 eoi; |
+ u32 __reserved[3]; |
+ } eoi; |
+ |
+/*0C0*/ struct { u32 __reserved[4]; } __reserved_07; |
+ |
+/*0D0*/ struct { /* Logical Destination Register */ |
+ u32 __reserved_1 : 24, |
+ logical_dest : 8; |
+ u32 __reserved_2[3]; |
+ } ldr; |
+ |
+/*0E0*/ struct { /* Destination Format Register */ |
+ u32 __reserved_1 : 28, |
+ model : 4; |
+ u32 __reserved_2[3]; |
+ } dfr; |
+ |
+/*0F0*/ struct { /* Spurious Interrupt Vector Register */ |
+ u32 spurious_vector : 8, |
+ apic_enabled : 1, |
+ focus_cpu : 1, |
+ __reserved_2 : 22; |
+ u32 __reserved_3[3]; |
+ } svr; |
+ |
+/*100*/ struct { /* In Service Register */ |
+/*170*/ u32 bitfield; |
+ u32 __reserved[3]; |
+ } isr [8]; |
+ |
+/*180*/ struct { /* Trigger Mode Register */ |
+/*1F0*/ u32 bitfield; |
+ u32 __reserved[3]; |
+ } tmr [8]; |
+ |
+/*200*/ struct { /* Interrupt Request Register */ |
+/*270*/ u32 bitfield; |
+ u32 __reserved[3]; |
+ } irr [8]; |
+ |
+/*280*/ union { /* Error Status Register */ |
+ struct { |
+ u32 send_cs_error : 1, |
+ receive_cs_error : 1, |
+ send_accept_error : 1, |
+ receive_accept_error : 1, |
+ __reserved_1 : 1, |
+ send_illegal_vector : 1, |
+ receive_illegal_vector : 1, |
+ illegal_register_address : 1, |
+ __reserved_2 : 24; |
+ u32 __reserved_3[3]; |
+ } error_bits; |
+ struct { |
+ u32 errors; |
+ u32 __reserved_3[3]; |
+ } all_errors; |
+ } esr; |
+ |
+/*290*/ struct { u32 __reserved[4]; } __reserved_08; |
+ |
+/*2A0*/ struct { u32 __reserved[4]; } __reserved_09; |
+ |
+/*2B0*/ struct { u32 __reserved[4]; } __reserved_10; |
+ |
+/*2C0*/ struct { u32 __reserved[4]; } __reserved_11; |
+ |
+/*2D0*/ struct { u32 __reserved[4]; } __reserved_12; |
+ |
+/*2E0*/ struct { u32 __reserved[4]; } __reserved_13; |
+ |
+/*2F0*/ struct { u32 __reserved[4]; } __reserved_14; |
+ |
+/*300*/ struct { /* Interrupt Command Register 1 */ |
+ u32 vector : 8, |
+ delivery_mode : 3, |
+ destination_mode : 1, |
+ delivery_status : 1, |
+ __reserved_1 : 1, |
+ level : 1, |
+ trigger : 1, |
+ __reserved_2 : 2, |
+ shorthand : 2, |
+ __reserved_3 : 12; |
+ u32 __reserved_4[3]; |
+ } icr1; |
+ |
+/*310*/ struct { /* Interrupt Command Register 2 */ |
+ union { |
+ u32 __reserved_1 : 24, |
+ phys_dest : 4, |
+ __reserved_2 : 4; |
+ u32 __reserved_3 : 24, |
+ logical_dest : 8; |
+ } dest; |
+ u32 __reserved_4[3]; |
+ } icr2; |
+ |
+/*320*/ struct { /* LVT - Timer */ |
+ u32 vector : 8, |
+ __reserved_1 : 4, |
+ delivery_status : 1, |
+ __reserved_2 : 3, |
+ mask : 1, |
+ timer_mode : 1, |
+ __reserved_3 : 14; |
+ u32 __reserved_4[3]; |
+ } lvt_timer; |
+ |
+/*330*/ struct { /* LVT - Thermal Sensor */ |
+ u32 vector : 8, |
+ delivery_mode : 3, |
+ __reserved_1 : 1, |
+ delivery_status : 1, |
+ __reserved_2 : 3, |
+ mask : 1, |
+ __reserved_3 : 15; |
+ u32 __reserved_4[3]; |
+ } lvt_thermal; |
+ |
+/*340*/ struct { /* LVT - Performance Counter */ |
+ u32 vector : 8, |
+ delivery_mode : 3, |
+ __reserved_1 : 1, |
+ delivery_status : 1, |
+ __reserved_2 : 3, |
+ mask : 1, |
+ __reserved_3 : 15; |
+ u32 __reserved_4[3]; |
+ } lvt_pc; |
+ |
+/*350*/ struct { /* LVT - LINT0 */ |
+ u32 vector : 8, |
+ delivery_mode : 3, |
+ __reserved_1 : 1, |
+ delivery_status : 1, |
+ polarity : 1, |
+ remote_irr : 1, |
+ trigger : 1, |
+ mask : 1, |
+ __reserved_2 : 15; |
+ u32 __reserved_3[3]; |
+ } lvt_lint0; |
+ |
+/*360*/ struct { /* LVT - LINT1 */ |
+ u32 vector : 8, |
+ delivery_mode : 3, |
+ __reserved_1 : 1, |
+ delivery_status : 1, |
+ polarity : 1, |
+ remote_irr : 1, |
+ trigger : 1, |
+ mask : 1, |
+ __reserved_2 : 15; |
+ u32 __reserved_3[3]; |
+ } lvt_lint1; |
+ |
+/*370*/ struct { /* LVT - Error */ |
+ u32 vector : 8, |
+ __reserved_1 : 4, |
+ delivery_status : 1, |
+ __reserved_2 : 3, |
+ mask : 1, |
+ __reserved_3 : 15; |
+ u32 __reserved_4[3]; |
+ } lvt_error; |
+ |
+/*380*/ struct { /* Timer Initial Count Register */ |
+ u32 initial_count; |
+ u32 __reserved_2[3]; |
+ } timer_icr; |
+ |
+/*390*/ const |
+ struct { /* Timer Current Count Register */ |
+ u32 curr_count; |
+ u32 __reserved_2[3]; |
+ } timer_ccr; |
+ |
+/*3A0*/ struct { u32 __reserved[4]; } __reserved_16; |
+ |
+/*3B0*/ struct { u32 __reserved[4]; } __reserved_17; |
+ |
+/*3C0*/ struct { u32 __reserved[4]; } __reserved_18; |
+ |
+/*3D0*/ struct { u32 __reserved[4]; } __reserved_19; |
+ |
+/*3E0*/ struct { /* Timer Divide Configuration Register */ |
+ u32 divisor : 4, |
+ __reserved_1 : 28; |
+ u32 __reserved_2[3]; |
+ } timer_dcr; |
+ |
+/*3F0*/ struct { u32 __reserved[4]; } __reserved_20; |
+ |
+} __attribute__ ((packed)); |
+ |
+#undef u32 |
+ |
+#endif |
Index: linuxc26/include/asm/irq.h |
=================================================================== |
--- linuxc26/include/asm/irq.h (nonexistent) |
+++ linuxc26/include/asm/irq.h (revision 422) |
@@ -0,0 +1,31 @@ |
+#ifndef _ASM_IRQ_H |
+#define _ASM_IRQ_H |
+ |
+/* |
+ * linux/include/asm/irq.h |
+ * |
+ * (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar |
+ * |
+ * IRQ/IPI changes taken from work by Thomas Radke |
+ * <tomsoft@informatik.tu-chemnitz.de> |
+ */ |
+ |
+#include <linux/config.h> |
+#include <linux/sched.h> |
+/* include comes from machine specific directory */ |
+ |
+static __inline__ int irq_canonicalize(int irq) |
+{ |
+ return ((irq == 2) ? 9 : irq); |
+} |
+ |
+extern void disable_irq(unsigned int); |
+extern void disable_irq_nosync(unsigned int); |
+extern void enable_irq(unsigned int); |
+extern void release_x86_irqs(struct task_struct *); |
+ |
+#ifdef CONFIG_X86_LOCAL_APIC |
+#define ARCH_HAS_NMI_WATCHDOG /* See include/linux/nmi.h */ |
+#endif |
+ |
+#endif /* _ASM_IRQ_H */ |
Index: linuxc26/include/asm/ioctls.h |
=================================================================== |
--- linuxc26/include/asm/ioctls.h (nonexistent) |
+++ linuxc26/include/asm/ioctls.h (revision 422) |
@@ -0,0 +1,83 @@ |
+#ifndef __ARCH_I386_IOCTLS_H__ |
+#define __ARCH_I386_IOCTLS_H__ |
+ |
+#include <asm/ioctl.h> |
+ |
+/* 0x54 is just a magic number to make these relatively unique ('T') */ |
+ |
+#define TCGETS 0x5401 |
+#define TCSETS 0x5402 /* Clashes with SNDCTL_TMR_START sound ioctl */ |
+#define TCSETSW 0x5403 |
+#define TCSETSF 0x5404 |
+#define TCGETA 0x5405 |
+#define TCSETA 0x5406 |
+#define TCSETAW 0x5407 |
+#define TCSETAF 0x5408 |
+#define TCSBRK 0x5409 |
+#define TCXONC 0x540A |
+#define TCFLSH 0x540B |
+#define TIOCEXCL 0x540C |
+#define TIOCNXCL 0x540D |
+#define TIOCSCTTY 0x540E |
+#define TIOCGPGRP 0x540F |
+#define TIOCSPGRP 0x5410 |
+#define TIOCOUTQ 0x5411 |
+#define TIOCSTI 0x5412 |
+#define TIOCGWINSZ 0x5413 |
+#define TIOCSWINSZ 0x5414 |
+#define TIOCMGET 0x5415 |
+#define TIOCMBIS 0x5416 |
+#define TIOCMBIC 0x5417 |
+#define TIOCMSET 0x5418 |
+#define TIOCGSOFTCAR 0x5419 |
+#define TIOCSSOFTCAR 0x541A |
+#define FIONREAD 0x541B |
+#define TIOCINQ FIONREAD |
+#define TIOCLINUX 0x541C |
+#define TIOCCONS 0x541D |
+#define TIOCGSERIAL 0x541E |
+#define TIOCSSERIAL 0x541F |
+#define TIOCPKT 0x5420 |
+#define FIONBIO 0x5421 |
+#define TIOCNOTTY 0x5422 |
+#define TIOCSETD 0x5423 |
+#define TIOCGETD 0x5424 |
+#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */ |
+/* #define TIOCTTYGSTRUCT 0x5426 - Former debugging-only ioctl */ |
+#define TIOCSBRK 0x5427 /* BSD compatibility */ |
+#define TIOCCBRK 0x5428 /* BSD compatibility */ |
+#define TIOCGSID 0x5429 /* Return the session ID of FD */ |
+#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ |
+#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ |
+ |
+#define FIONCLEX 0x5450 |
+#define FIOCLEX 0x5451 |
+#define FIOASYNC 0x5452 |
+#define TIOCSERCONFIG 0x5453 |
+#define TIOCSERGWILD 0x5454 |
+#define TIOCSERSWILD 0x5455 |
+#define TIOCGLCKTRMIOS 0x5456 |
+#define TIOCSLCKTRMIOS 0x5457 |
+#define TIOCSERGSTRUCT 0x5458 /* For debugging only */ |
+#define TIOCSERGETLSR 0x5459 /* Get line status register */ |
+#define TIOCSERGETMULTI 0x545A /* Get multiport config */ |
+#define TIOCSERSETMULTI 0x545B /* Set multiport config */ |
+ |
+#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ |
+#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ |
+#define TIOCGHAYESESP 0x545E /* Get Hayes ESP configuration */ |
+#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */ |
+#define FIOQSIZE 0x5460 |
+ |
+/* Used for packet mode */ |
+#define TIOCPKT_DATA 0 |
+#define TIOCPKT_FLUSHREAD 1 |
+#define TIOCPKT_FLUSHWRITE 2 |
+#define TIOCPKT_STOP 4 |
+#define TIOCPKT_START 8 |
+#define TIOCPKT_NOSTOP 16 |
+#define TIOCPKT_DOSTOP 32 |
+ |
+#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ |
+ |
+#endif |
Index: linuxc26/include/asm/delay.h |
=================================================================== |
--- linuxc26/include/asm/delay.h (nonexistent) |
+++ linuxc26/include/asm/delay.h (revision 422) |
@@ -0,0 +1,26 @@ |
+#ifndef _I386_DELAY_H |
+#define _I386_DELAY_H |
+ |
+/* |
+ * Copyright (C) 1993 Linus Torvalds |
+ * |
+ * Delay routines calling functions in arch/i386/lib/delay.c |
+ */ |
+ |
+extern void __bad_udelay(void); |
+extern void __bad_ndelay(void); |
+ |
+extern void __udelay(unsigned long usecs); |
+extern void __ndelay(unsigned long nsecs); |
+extern void __const_udelay(unsigned long usecs); |
+extern void __delay(unsigned long loops); |
+ |
+#define udelay(n) (__builtin_constant_p(n) ? \ |
+ ((n) > 20000 ? __bad_udelay() : __const_udelay((n) * 0x10c6ul)) : \ |
+ __udelay(n)) |
+ |
+#define ndelay(n) (__builtin_constant_p(n) ? \ |
+ ((n) > 20000 ? __bad_ndelay() : __const_udelay((n) * 5ul)) : \ |
+ __ndelay(n)) |
+ |
+#endif /* defined(_I386_DELAY_H) */ |
Index: linuxc26/include/asm/rmap.h |
=================================================================== |
--- linuxc26/include/asm/rmap.h (nonexistent) |
+++ linuxc26/include/asm/rmap.h (revision 422) |
@@ -0,0 +1,21 @@ |
+#ifndef _I386_RMAP_H |
+#define _I386_RMAP_H |
+ |
+/* nothing to see, move along */ |
+#include <asm-generic/rmap.h> |
+ |
+#ifdef CONFIG_HIGHPTE |
+static inline pte_t *rmap_ptep_map(pte_addr_t pte_paddr) |
+{ |
+ unsigned long pfn = (unsigned long)(pte_paddr >> PAGE_SHIFT); |
+ unsigned long off = ((unsigned long)pte_paddr) & ~PAGE_MASK; |
+ return (pte_t *)((char *)kmap_atomic(pfn_to_page(pfn), KM_PTE2) + off); |
+} |
+ |
+static inline void rmap_ptep_unmap(pte_t *pte) |
+{ |
+ kunmap_atomic(pte, KM_PTE2); |
+} |
+#endif |
+ |
+#endif |
Index: linuxc26/include/asm/bugs.h |
=================================================================== |
--- linuxc26/include/asm/bugs.h (nonexistent) |
+++ linuxc26/include/asm/bugs.h (revision 422) |
@@ -0,0 +1,213 @@ |
+/* |
+ * include/asm-i386/bugs.h |
+ * |
+ * Copyright (C) 1994 Linus Torvalds |
+ * |
+ * Cyrix stuff, June 1998 by: |
+ * - Rafael R. Reilova (moved everything from head.S), |
+ * <rreilova@ececs.uc.edu> |
+ * - Channing Corn (tests & fixes), |
+ * - Andrew D. Balsa (code cleanup). |
+ * |
+ * Pentium III FXSR, SSE support |
+ * Gareth Hughes <gareth@valinux.com>, May 2000 |
+ */ |
+ |
+/* |
+ * This is included by init/main.c to check for architecture-dependent bugs. |
+ * |
+ * Needs: |
+ * void check_bugs(void); |
+ */ |
+ |
+#include <linux/config.h> |
+#include <linux/init.h> |
+#include <asm/processor.h> |
+#include <asm/i387.h> |
+#include <asm/msr.h> |
+ |
+static int __init no_halt(char *s) |
+{ |
+ boot_cpu_data.hlt_works_ok = 0; |
+ return 1; |
+} |
+ |
+__setup("no-hlt", no_halt); |
+ |
+static int __init mca_pentium(char *s) |
+{ |
+ mca_pentium_flag = 1; |
+ return 1; |
+} |
+ |
+__setup("mca-pentium", mca_pentium); |
+ |
+static int __init no_387(char *s) |
+{ |
+ boot_cpu_data.hard_math = 0; |
+ write_cr0(0xE | read_cr0()); |
+ return 1; |
+} |
+ |
+__setup("no387", no_387); |
+ |
+static double __initdata x = 4195835.0; |
+static double __initdata y = 3145727.0; |
+ |
+/* |
+ * This used to check for exceptions.. |
+ * However, it turns out that to support that, |
+ * the XMM trap handlers basically had to |
+ * be buggy. So let's have a correct XMM trap |
+ * handler, and forget about printing out |
+ * some status at boot. |
+ * |
+ * We should really only care about bugs here |
+ * anyway. Not features. |
+ */ |
+static void __init check_fpu(void) |
+{ |
+ if (!boot_cpu_data.hard_math) { |
+#ifndef CONFIG_MATH_EMULATION |
+ printk(KERN_EMERG "No coprocessor found and no math emulation present.\n"); |
+ printk(KERN_EMERG "Giving up.\n"); |
+ for (;;) ; |
+#endif |
+ return; |
+ } |
+ |
+/* Enable FXSR and company _before_ testing for FP problems. */ |
+ /* |
+ * Verify that the FXSAVE/FXRSTOR data will be 16-byte aligned. |
+ */ |
+ if (offsetof(struct task_struct, thread.i387.fxsave) & 15) { |
+ extern void __buggy_fxsr_alignment(void); |
+ __buggy_fxsr_alignment(); |
+ } |
+ if (cpu_has_fxsr) { |
+ printk(KERN_INFO "Enabling fast FPU save and restore... "); |
+ set_in_cr4(X86_CR4_OSFXSR); |
+ printk("done.\n"); |
+ } |
+ if (cpu_has_xmm) { |
+ printk(KERN_INFO "Enabling unmasked SIMD FPU exception support... "); |
+ set_in_cr4(X86_CR4_OSXMMEXCPT); |
+ printk("done.\n"); |
+ } |
+ |
+ /* Test for the divl bug.. */ |
+ __asm__("fninit\n\t" |
+ "fldl %1\n\t" |
+ "fdivl %2\n\t" |
+ "fmull %2\n\t" |
+ "fldl %1\n\t" |
+ "fsubp %%st,%%st(1)\n\t" |
+ "fistpl %0\n\t" |
+ "fwait\n\t" |
+ "fninit" |
+ : "=m" (*&boot_cpu_data.fdiv_bug) |
+ : "m" (*&x), "m" (*&y)); |
+ if (boot_cpu_data.fdiv_bug) |
+ printk("Hmm, FPU with FDIV bug.\n"); |
+} |
+ |
+static void __init check_hlt(void) |
+{ |
+ printk(KERN_INFO "Checking 'hlt' instruction... "); |
+ if (!boot_cpu_data.hlt_works_ok) { |
+ printk("disabled\n"); |
+ return; |
+ } |
+ __asm__ __volatile__("hlt ; hlt ; hlt ; hlt"); |
+ printk("OK.\n"); |
+} |
+ |
+/* |
+ * Most 386 processors have a bug where a POPAD can lock the |
+ * machine even from user space. |
+ */ |
+ |
+static void __init check_popad(void) |
+{ |
+#ifndef CONFIG_X86_POPAD_OK |
+ int res, inp = (int) &res; |
+ |
+ printk(KERN_INFO "Checking for popad bug... "); |
+ __asm__ __volatile__( |
+ "movl $12345678,%%eax; movl $0,%%edi; pusha; popa; movl (%%edx,%%edi),%%ecx " |
+ : "=&a" (res) |
+ : "d" (inp) |
+ : "ecx", "edi" ); |
+ /* If this fails, it means that any user program may lock the CPU hard. Too bad. */ |
+ if (res != 12345678) printk( "Buggy.\n" ); |
+ else printk( "OK.\n" ); |
+#endif |
+} |
+ |
+/* |
+ * Check whether we are able to run this kernel safely on SMP. |
+ * |
+ * - In order to run on a i386, we need to be compiled for i386 |
+ * (for due to lack of "invlpg" and working WP on a i386) |
+ * - In order to run on anything without a TSC, we need to be |
+ * compiled for a i486. |
+ * - In order to support the local APIC on a buggy Pentium machine, |
+ * we need to be compiled with CONFIG_X86_GOOD_APIC disabled, |
+ * which happens implicitly if compiled for a Pentium or lower |
+ * (unless an advanced selection of CPU features is used) as an |
+ * otherwise config implies a properly working local APIC without |
+ * the need to do extra reads from the APIC. |
+*/ |
+ |
+static void __init check_config(void) |
+{ |
+/* |
+ * We'd better not be a i386 if we're configured to use some |
+ * i486+ only features! (WP works in supervisor mode and the |
+ * new "invlpg" and "bswap" instructions) |
+ */ |
+#if defined(CONFIG_X86_WP_WORKS_OK) || defined(CONFIG_X86_INVLPG) || defined(CONFIG_X86_BSWAP) |
+ if (boot_cpu_data.x86 == 3) |
+ panic("Kernel requires i486+ for 'invlpg' and other features"); |
+#endif |
+ |
+/* |
+ * If we configured ourselves for a TSC, we'd better have one! |
+ */ |
+#ifdef CONFIG_X86_TSC |
+ if (!cpu_has_tsc) |
+ panic("Kernel compiled for Pentium+, requires TSC feature!"); |
+#endif |
+ |
+/* |
+ * If we were told we had a good local APIC, check for buggy Pentia, |
+ * i.e. all B steppings and the C2 stepping of P54C when using their |
+ * integrated APIC (see 11AP erratum in "Pentium Processor |
+ * Specification Update"). |
+ */ |
+#if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86_GOOD_APIC) |
+ if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL |
+ && cpu_has_apic |
+ && boot_cpu_data.x86 == 5 |
+ && boot_cpu_data.x86_model == 2 |
+ && (boot_cpu_data.x86_mask < 6 || boot_cpu_data.x86_mask == 11)) |
+ panic("Kernel compiled for PMMX+, assumes a local APIC without the read-before-write bug!"); |
+#endif |
+} |
+ |
+extern void alternative_instructions(void); |
+ |
+static void __init check_bugs(void) |
+{ |
+ identify_cpu(&boot_cpu_data); |
+#ifndef CONFIG_SMP |
+ printk("CPU: "); |
+ print_cpu_info(&boot_cpu_data); |
+#endif |
+ check_config(); |
+ check_fpu(); |
+ check_hlt(); |
+ check_popad(); |
+ system_utsname.machine[1] = '0' + (boot_cpu_data.x86 > 6 ? 6 : boot_cpu_data.x86); |
+ alternative_instructions(); |
+} |
Index: linuxc26/include/asm/bitops.h |
=================================================================== |
--- linuxc26/include/asm/bitops.h (nonexistent) |
+++ linuxc26/include/asm/bitops.h (revision 422) |
@@ -0,0 +1,504 @@ |
+#ifndef _I386_BITOPS_H |
+#define _I386_BITOPS_H |
+ |
+/* |
+ * Copyright 1992, Linus Torvalds. |
+ */ |
+ |
+#include <linux/config.h> |
+#include <linux/compiler.h> |
+ |
+/* |
+ * These have to be done with inline assembly: that way the bit-setting |
+ * is guaranteed to be atomic. All bit operations return 0 if the bit |
+ * was cleared before the operation and != 0 if it was not. |
+ * |
+ * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1). |
+ */ |
+ |
+#ifdef CONFIG_SMP |
+#define LOCK_PREFIX "lock ; " |
+#else |
+#define LOCK_PREFIX "" |
+#endif |
+ |
+#define ADDR (*(volatile long *) addr) |
+ |
+/** |
+ * set_bit - Atomically set a bit in memory |
+ * @nr: the bit to set |
+ * @addr: the address to start counting from |
+ * |
+ * This function is atomic and may not be reordered. See __set_bit() |
+ * if you do not require the atomic guarantees. |
+ * Note that @nr may be almost arbitrarily large; this function is not |
+ * restricted to acting on a single-word quantity. |
+ */ |
+static __inline__ void set_bit(int nr, volatile unsigned long * addr) |
+{ |
+ __asm__ __volatile__( LOCK_PREFIX |
+ "btsl %1,%0" |
+ :"=m" (ADDR) |
+ :"Ir" (nr)); |
+} |
+ |
+/** |
+ * __set_bit - Set a bit in memory |
+ * @nr: the bit to set |
+ * @addr: the address to start counting from |
+ * |
+ * Unlike set_bit(), this function is non-atomic and may be reordered. |
+ * If it's called on the same region of memory simultaneously, the effect |
+ * may be that only one operation succeeds. |
+ */ |
+static __inline__ void __set_bit(int nr, volatile unsigned long * addr) |
+{ |
+ __asm__( |
+ "btsl %1,%0" |
+ :"=m" (ADDR) |
+ :"Ir" (nr)); |
+} |
+ |
+/** |
+ * clear_bit - Clears a bit in memory |
+ * @nr: Bit to clear |
+ * @addr: Address to start counting from |
+ * |
+ * clear_bit() is atomic and may not be reordered. However, it does |
+ * not contain a memory barrier, so if it is used for locking purposes, |
+ * you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit() |
+ * in order to ensure changes are visible on other processors. |
+ */ |
+static __inline__ void clear_bit(int nr, volatile unsigned long * addr) |
+{ |
+ __asm__ __volatile__( LOCK_PREFIX |
+ "btrl %1,%0" |
+ :"=m" (ADDR) |
+ :"Ir" (nr)); |
+} |
+ |
+static __inline__ void __clear_bit(int nr, volatile unsigned long * addr) |
+{ |
+ __asm__ __volatile__( |
+ "btrl %1,%0" |
+ :"=m" (ADDR) |
+ :"Ir" (nr)); |
+} |
+#define smp_mb__before_clear_bit() barrier() |
+#define smp_mb__after_clear_bit() barrier() |
+ |
+/** |
+ * __change_bit - Toggle a bit in memory |
+ * @nr: the bit to change |
+ * @addr: the address to start counting from |
+ * |
+ * Unlike change_bit(), this function is non-atomic and may be reordered. |
+ * If it's called on the same region of memory simultaneously, the effect |
+ * may be that only one operation succeeds. |
+ */ |
+static __inline__ void __change_bit(int nr, volatile unsigned long * addr) |
+{ |
+ __asm__ __volatile__( |
+ "btcl %1,%0" |
+ :"=m" (ADDR) |
+ :"Ir" (nr)); |
+} |
+ |
+/** |
+ * change_bit - Toggle a bit in memory |
+ * @nr: Bit to change |
+ * @addr: Address to start counting from |
+ * |
+ * change_bit() is atomic and may not be reordered. |
+ * Note that @nr may be almost arbitrarily large; this function is not |
+ * restricted to acting on a single-word quantity. |
+ */ |
+static __inline__ void change_bit(int nr, volatile unsigned long * addr) |
+{ |
+ __asm__ __volatile__( LOCK_PREFIX |
+ "btcl %1,%0" |
+ :"=m" (ADDR) |
+ :"Ir" (nr)); |
+} |
+ |
+/** |
+ * test_and_set_bit - Set a bit and return its old value |
+ * @nr: Bit to set |
+ * @addr: Address to count from |
+ * |
+ * This operation is atomic and cannot be reordered. |
+ * It also implies a memory barrier. |
+ */ |
+static __inline__ int test_and_set_bit(int nr, volatile unsigned long * addr) |
+{ |
+ int oldbit; |
+ |
+ __asm__ __volatile__( LOCK_PREFIX |
+ "btsl %2,%1\n\tsbbl %0,%0" |
+ :"=r" (oldbit),"=m" (ADDR) |
+ :"Ir" (nr) : "memory"); |
+ return oldbit; |
+} |
+ |
+/** |
+ * __test_and_set_bit - Set a bit and return its old value |
+ * @nr: Bit to set |
+ * @addr: Address to count from |
+ * |
+ * This operation is non-atomic and can be reordered. |
+ * If two examples of this operation race, one can appear to succeed |
+ * but actually fail. You must protect multiple accesses with a lock. |
+ */ |
+static __inline__ int __test_and_set_bit(int nr, volatile unsigned long * addr) |
+{ |
+ int oldbit; |
+ |
+ __asm__( |
+ "btsl %2,%1\n\tsbbl %0,%0" |
+ :"=r" (oldbit),"=m" (ADDR) |
+ :"Ir" (nr)); |
+ return oldbit; |
+} |
+ |
+/** |
+ * test_and_clear_bit - Clear a bit and return its old value |
+ * @nr: Bit to clear |
+ * @addr: Address to count from |
+ * |
+ * This operation is atomic and cannot be reordered. |
+ * It also implies a memory barrier. |
+ */ |
+static __inline__ int test_and_clear_bit(int nr, volatile unsigned long * addr) |
+{ |
+ int oldbit; |
+ |
+ __asm__ __volatile__( LOCK_PREFIX |
+ "btrl %2,%1\n\tsbbl %0,%0" |
+ :"=r" (oldbit),"=m" (ADDR) |
+ :"Ir" (nr) : "memory"); |
+ return oldbit; |
+} |
+ |
+/** |
+ * __test_and_clear_bit - Clear a bit and return its old value |
+ * @nr: Bit to clear |
+ * @addr: Address to count from |
+ * |
+ * This operation is non-atomic and can be reordered. |
+ * If two examples of this operation race, one can appear to succeed |
+ * but actually fail. You must protect multiple accesses with a lock. |
+ */ |
+static __inline__ int __test_and_clear_bit(int nr, volatile unsigned long *addr) |
+{ |
+ int oldbit; |
+ |
+ __asm__( |
+ "btrl %2,%1\n\tsbbl %0,%0" |
+ :"=r" (oldbit),"=m" (ADDR) |
+ :"Ir" (nr)); |
+ return oldbit; |
+} |
+ |
+/* WARNING: non atomic and it can be reordered! */ |
+static __inline__ int __test_and_change_bit(int nr, volatile unsigned long *addr) |
+{ |
+ int oldbit; |
+ |
+ __asm__ __volatile__( |
+ "btcl %2,%1\n\tsbbl %0,%0" |
+ :"=r" (oldbit),"=m" (ADDR) |
+ :"Ir" (nr) : "memory"); |
+ return oldbit; |
+} |
+ |
+/** |
+ * test_and_change_bit - Change a bit and return its new value |
+ * @nr: Bit to change |
+ * @addr: Address to count from |
+ * |
+ * This operation is atomic and cannot be reordered. |
+ * It also implies a memory barrier. |
+ */ |
+static __inline__ int test_and_change_bit(int nr, volatile unsigned long* addr) |
+{ |
+ int oldbit; |
+ |
+ __asm__ __volatile__( LOCK_PREFIX |
+ "btcl %2,%1\n\tsbbl %0,%0" |
+ :"=r" (oldbit),"=m" (ADDR) |
+ :"Ir" (nr) : "memory"); |
+ return oldbit; |
+} |
+ |
+#if 0 /* Fool kernel-doc since it doesn't do macros yet */ |
+/** |
+ * test_bit - Determine whether a bit is set |
+ * @nr: bit number to test |
+ * @addr: Address to start counting from |
+ */ |
+static int test_bit(int nr, const volatile void * addr); |
+#endif |
+ |
+static inline int constant_test_bit(int nr, const volatile unsigned long *addr) |
+{ |
+ return ((1UL << (nr & 31)) & (addr[nr >> 5])) != 0; |
+} |
+ |
+static __inline__ int variable_test_bit(int nr, const volatile unsigned long * addr) |
+{ |
+ int oldbit; |
+ |
+ __asm__ __volatile__( |
+ "btl %2,%1\n\tsbbl %0,%0" |
+ :"=r" (oldbit) |
+ :"m" (ADDR),"Ir" (nr)); |
+ return oldbit; |
+} |
+ |
+#define test_bit(nr,addr) \ |
+(__builtin_constant_p(nr) ? \ |
+ constant_test_bit((nr),(addr)) : \ |
+ variable_test_bit((nr),(addr))) |
+ |
+#undef ADDR |
+ |
+/** |
+ * find_first_zero_bit - find the first zero bit in a memory region |
+ * @addr: The address to start the search at |
+ * @size: The maximum size to search |
+ * |
+ * Returns the bit-number of the first zero bit, not the number of the byte |
+ * containing a bit. |
+ */ |
+static __inline__ int find_first_zero_bit(const unsigned long *addr, unsigned size) |
+{ |
+ int d0, d1, d2; |
+ int res; |
+ |
+ if (!size) |
+ return 0; |
+ /* This looks at memory. Mark it volatile to tell gcc not to move it around */ |
+ __asm__ __volatile__( |
+ "movl $-1,%%eax\n\t" |
+ "xorl %%edx,%%edx\n\t" |
+ "repe; scasl\n\t" |
+ "je 1f\n\t" |
+ "xorl -4(%%edi),%%eax\n\t" |
+ "subl $4,%%edi\n\t" |
+ "bsfl %%eax,%%edx\n" |
+ "1:\tsubl %%ebx,%%edi\n\t" |
+ "shll $3,%%edi\n\t" |
+ "addl %%edi,%%edx" |
+ :"=d" (res), "=&c" (d0), "=&D" (d1), "=&a" (d2) |
+ :"1" ((size + 31) >> 5), "2" (addr), "b" (addr)); |
+ return res; |
+} |
+ |
+/** |
+ * find_first_bit - find the first set bit in a memory region |
+ * @addr: The address to start the search at |
+ * @size: The maximum size to search |
+ * |
+ * Returns the bit-number of the first set bit, not the number of the byte |
+ * containing a bit. |
+ */ |
+static __inline__ int find_first_bit(const unsigned long *addr, unsigned size) |
+{ |
+ int d0, d1; |
+ int res; |
+ |
+ /* This looks at memory. Mark it volatile to tell gcc not to move it around */ |
+ __asm__ __volatile__( |
+ "xorl %%eax,%%eax\n\t" |
+ "repe; scasl\n\t" |
+ "jz 1f\n\t" |
+ "leal -4(%%edi),%%edi\n\t" |
+ "bsfl (%%edi),%%eax\n" |
+ "1:\tsubl %%ebx,%%edi\n\t" |
+ "shll $3,%%edi\n\t" |
+ "addl %%edi,%%eax" |
+ :"=a" (res), "=&c" (d0), "=&D" (d1) |
+ :"1" ((size + 31) >> 5), "2" (addr), "b" (addr)); |
+ return res; |
+} |
+ |
+/** |
+ * find_next_zero_bit - find the first zero bit in a memory region |
+ * @addr: The address to base the search on |
+ * @offset: The bitnumber to start searching at |
+ * @size: The maximum size to search |
+ */ |
+static __inline__ int find_next_zero_bit(const unsigned long *addr, int size, int offset) |
+{ |
+ unsigned long * p = ((unsigned long *) addr) + (offset >> 5); |
+ int set = 0, bit = offset & 31, res; |
+ |
+ if (bit) { |
+ /* |
+ * Look for zero in the first 32 bits. |
+ */ |
+ __asm__("bsfl %1,%0\n\t" |
+ "jne 1f\n\t" |
+ "movl $32, %0\n" |
+ "1:" |
+ : "=r" (set) |
+ : "r" (~(*p >> bit))); |
+ if (set < (32 - bit)) |
+ return set + offset; |
+ set = 32 - bit; |
+ p++; |
+ } |
+ /* |
+ * No zero yet, search remaining full bytes for a zero |
+ */ |
+ res = find_first_zero_bit (p, size - 32 * (p - (unsigned long *) addr)); |
+ return (offset + set + res); |
+} |
+ |
+/** |
+ * find_next_bit - find the first set bit in a memory region |
+ * @addr: The address to base the search on |
+ * @offset: The bitnumber to start searching at |
+ * @size: The maximum size to search |
+ */ |
+static __inline__ int find_next_bit(const unsigned long *addr, int size, int offset) |
+{ |
+ const unsigned long *p = addr + (offset >> 5); |
+ int set = 0, bit = offset & 31, res; |
+ |
+ if (bit) { |
+ /* |
+ * Look for nonzero in the first 32 bits: |
+ */ |
+ __asm__("bsfl %1,%0\n\t" |
+ "jne 1f\n\t" |
+ "movl $32, %0\n" |
+ "1:" |
+ : "=r" (set) |
+ : "r" (*p >> bit)); |
+ if (set < (32 - bit)) |
+ return set + offset; |
+ set = 32 - bit; |
+ p++; |
+ } |
+ /* |
+ * No set bit yet, search remaining full words for a bit |
+ */ |
+ res = find_first_bit (p, size - 32 * (p - addr)); |
+ return (offset + set + res); |
+} |
+ |
+/** |
+ * ffz - find first zero in word. |
+ * @word: The word to search |
+ * |
+ * Undefined if no zero exists, so code should check against ~0UL first. |
+ */ |
+static __inline__ unsigned long ffz(unsigned long word) |
+{ |
+ __asm__("bsfl %1,%0" |
+ :"=r" (word) |
+ :"r" (~word)); |
+ return word; |
+} |
+ |
+/** |
+ * __ffs - find first bit in word. |
+ * @word: The word to search |
+ * |
+ * Undefined if no bit exists, so code should check against 0 first. |
+ */ |
+static __inline__ unsigned long __ffs(unsigned long word) |
+{ |
+ __asm__("bsfl %1,%0" |
+ :"=r" (word) |
+ :"rm" (word)); |
+ return word; |
+} |
+ |
+/* |
+ * fls: find last bit set. |
+ */ |
+ |
+#define fls(x) generic_fls(x) |
+ |
+#ifdef __KERNEL__ |
+ |
+/* |
+ * Every architecture must define this function. It's the fastest |
+ * way of searching a 140-bit bitmap where the first 100 bits are |
+ * unlikely to be set. It's guaranteed that at least one of the 140 |
+ * bits is cleared. |
+ */ |
+static inline int sched_find_first_bit(const unsigned long *b) |
+{ |
+ if (unlikely(b[0])) |
+ return __ffs(b[0]); |
+ if (unlikely(b[1])) |
+ return __ffs(b[1]) + 32; |
+ if (unlikely(b[2])) |
+ return __ffs(b[2]) + 64; |
+ if (b[3]) |
+ return __ffs(b[3]) + 96; |
+ return __ffs(b[4]) + 128; |
+} |
+ |
+/** |
+ * ffs - find first bit set |
+ * @x: the word to search |
+ * |
+ * This is defined the same way as |
+ * the libc and compiler builtin ffs routines, therefore |
+ * differs in spirit from the above ffz (man ffs). |
+ */ |
+static __inline__ int ffs(int x) |
+{ |
+ int r; |
+ |
+ __asm__("bsfl %1,%0\n\t" |
+ "jnz 1f\n\t" |
+ "movl $-1,%0\n" |
+ "1:" : "=r" (r) : "rm" (x)); |
+ return r+1; |
+} |
+ |
+/** |
+ * hweightN - returns the hamming weight of a N-bit word |
+ * @x: the word to weigh |
+ * |
+ * The Hamming Weight of a number is the total number of bits set in it. |
+ */ |
+ |
+#define hweight32(x) generic_hweight32(x) |
+#define hweight16(x) generic_hweight16(x) |
+#define hweight8(x) generic_hweight8(x) |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#ifdef __KERNEL__ |
+ |
+#define ext2_set_bit(nr,addr) \ |
+ __test_and_set_bit((nr),(unsigned long*)addr) |
+#define ext2_set_bit_atomic(lock,nr,addr) \ |
+ test_and_set_bit((nr),(unsigned long*)addr) |
+#define ext2_clear_bit(nr, addr) \ |
+ __test_and_clear_bit((nr),(unsigned long*)addr) |
+#define ext2_clear_bit_atomic(lock,nr, addr) \ |
+ test_and_clear_bit((nr),(unsigned long*)addr) |
+#define ext2_test_bit(nr, addr) test_bit((nr),(unsigned long*)addr) |
+#define ext2_find_first_zero_bit(addr, size) \ |
+ find_first_zero_bit((unsigned long*)addr, size) |
+#define ext2_find_next_zero_bit(addr, size, off) \ |
+ find_next_zero_bit((unsigned long*)addr, size, off) |
+ |
+/* Bitmap functions for the minix filesystem. */ |
+#define minix_test_and_set_bit(nr,addr) __test_and_set_bit(nr,(void*)addr) |
+#define minix_set_bit(nr,addr) __set_bit(nr,(void*)addr) |
+#define minix_test_and_clear_bit(nr,addr) __test_and_clear_bit(nr,(void*)addr) |
+#define minix_test_bit(nr,addr) test_bit(nr,(void*)addr) |
+#define minix_find_first_zero_bit(addr,size) \ |
+ find_first_zero_bit((void*)addr,size) |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* _I386_BITOPS_H */ |
Index: linuxc26/include/asm/checksum.h |
=================================================================== |
--- linuxc26/include/asm/checksum.h (nonexistent) |
+++ linuxc26/include/asm/checksum.h (revision 422) |
@@ -0,0 +1,187 @@ |
+#ifndef _I386_CHECKSUM_H |
+#define _I386_CHECKSUM_H |
+ |
+#include <linux/in6.h> |
+ |
+/* |
+ * computes the checksum of a memory block at buff, length len, |
+ * and adds in "sum" (32-bit) |
+ * |
+ * returns a 32-bit number suitable for feeding into itself |
+ * or csum_tcpudp_magic |
+ * |
+ * this function must be called with even lengths, except |
+ * for the last fragment, which may be odd |
+ * |
+ * it's best to have buff aligned on a 32-bit boundary |
+ */ |
+asmlinkage unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum); |
+ |
+/* |
+ * the same as csum_partial, but copies from src while it |
+ * checksums, and handles user-space pointer exceptions correctly, when needed. |
+ * |
+ * here even more important to align src and dst on a 32-bit (or even |
+ * better 64-bit) boundary |
+ */ |
+ |
+asmlinkage unsigned int csum_partial_copy_generic( const char *src, char *dst, int len, int sum, |
+ int *src_err_ptr, int *dst_err_ptr); |
+ |
+/* |
+ * Note: when you get a NULL pointer exception here this means someone |
+ * passed in an incorrect kernel address to one of these functions. |
+ * |
+ * If you use these functions directly please don't forget the |
+ * verify_area(). |
+ */ |
+static __inline__ |
+unsigned int csum_partial_copy_nocheck ( const char *src, char *dst, |
+ int len, int sum) |
+{ |
+ return csum_partial_copy_generic ( src, dst, len, sum, NULL, NULL); |
+} |
+ |
+static __inline__ |
+unsigned int csum_partial_copy_from_user ( const char *src, char *dst, |
+ int len, int sum, int *err_ptr) |
+{ |
+ return csum_partial_copy_generic ( src, dst, len, sum, err_ptr, NULL); |
+} |
+ |
+/* |
+ * This is a version of ip_compute_csum() optimized for IP headers, |
+ * which always checksum on 4 octet boundaries. |
+ * |
+ * By Jorge Cwik <jorge@laser.satlink.net>, adapted for linux by |
+ * Arnt Gulbrandsen. |
+ */ |
+static inline unsigned short ip_fast_csum(unsigned char * iph, |
+ unsigned int ihl) |
+{ |
+ unsigned int sum; |
+ |
+ __asm__ __volatile__( |
+ "movl (%1), %0 ;\n" |
+ "subl $4, %2 ;\n" |
+ "jbe 2f ;\n" |
+ "addl 4(%1), %0 ;\n" |
+ "adcl 8(%1), %0 ;\n" |
+ "adcl 12(%1), %0 ;\n" |
+"1: adcl 16(%1), %0 ;\n" |
+ "lea 4(%1), %1 ;\n" |
+ "decl %2 ;\n" |
+ "jne 1b ;\n" |
+ "adcl $0, %0 ;\n" |
+ "movl %0, %2 ;\n" |
+ "shrl $16, %0 ;\n" |
+ "addw %w2, %w0 ;\n" |
+ "adcl $0, %0 ;\n" |
+ "notl %0 ;\n" |
+"2: ;\n" |
+ /* Since the input registers which are loaded with iph and ipl |
+ are modified, we must also specify them as outputs, or gcc |
+ will assume they contain their original values. */ |
+ : "=r" (sum), "=r" (iph), "=r" (ihl) |
+ : "1" (iph), "2" (ihl) |
+ : "memory"); |
+ return(sum); |
+} |
+ |
+/* |
+ * Fold a partial checksum |
+ */ |
+ |
+static inline unsigned int csum_fold(unsigned int sum) |
+{ |
+ __asm__( |
+ "addl %1, %0 ;\n" |
+ "adcl $0xffff, %0 ;\n" |
+ : "=r" (sum) |
+ : "r" (sum << 16), "0" (sum & 0xffff0000) |
+ ); |
+ return (~sum) >> 16; |
+} |
+ |
+static inline unsigned long csum_tcpudp_nofold(unsigned long saddr, |
+ unsigned long daddr, |
+ unsigned short len, |
+ unsigned short proto, |
+ unsigned int sum) |
+{ |
+ __asm__( |
+ "addl %1, %0 ;\n" |
+ "adcl %2, %0 ;\n" |
+ "adcl %3, %0 ;\n" |
+ "adcl $0, %0 ;\n" |
+ : "=r" (sum) |
+ : "g" (daddr), "g"(saddr), "g"((ntohs(len)<<16)+proto*256), "0"(sum)); |
+ return sum; |
+} |
+ |
+/* |
+ * computes the checksum of the TCP/UDP pseudo-header |
+ * returns a 16-bit checksum, already complemented |
+ */ |
+static inline unsigned short int csum_tcpudp_magic(unsigned long saddr, |
+ unsigned long daddr, |
+ unsigned short len, |
+ unsigned short proto, |
+ unsigned int sum) |
+{ |
+ return csum_fold(csum_tcpudp_nofold(saddr,daddr,len,proto,sum)); |
+} |
+ |
+/* |
+ * this routine is used for miscellaneous IP-like checksums, mainly |
+ * in icmp.c |
+ */ |
+ |
+static inline unsigned short ip_compute_csum(unsigned char * buff, int len) |
+{ |
+ return csum_fold (csum_partial(buff, len, 0)); |
+} |
+ |
+#define _HAVE_ARCH_IPV6_CSUM |
+static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr, |
+ struct in6_addr *daddr, |
+ __u32 len, |
+ unsigned short proto, |
+ unsigned int sum) |
+{ |
+ __asm__( |
+ "addl 0(%1), %0 ;\n" |
+ "adcl 4(%1), %0 ;\n" |
+ "adcl 8(%1), %0 ;\n" |
+ "adcl 12(%1), %0 ;\n" |
+ "adcl 0(%2), %0 ;\n" |
+ "adcl 4(%2), %0 ;\n" |
+ "adcl 8(%2), %0 ;\n" |
+ "adcl 12(%2), %0 ;\n" |
+ "adcl %3, %0 ;\n" |
+ "adcl %4, %0 ;\n" |
+ "adcl $0, %0 ;\n" |
+ : "=&r" (sum) |
+ : "r" (saddr), "r" (daddr), |
+ "r"(htonl(len)), "r"(htonl(proto)), "0"(sum)); |
+ |
+ return csum_fold(sum); |
+} |
+ |
+/* |
+ * Copy and checksum to user |
+ */ |
+#define HAVE_CSUM_COPY_USER |
+static __inline__ unsigned int csum_and_copy_to_user(const char *src, char *dst, |
+ int len, int sum, int *err_ptr) |
+{ |
+ if (access_ok(VERIFY_WRITE, dst, len)) |
+ return csum_partial_copy_generic(src, dst, len, sum, NULL, err_ptr); |
+ |
+ if (len) |
+ *err_ptr = -EFAULT; |
+ |
+ return -1; /* invalid checksum */ |
+} |
+ |
+#endif |
Index: linuxc26/include/asm/mmu_context.h |
=================================================================== |
--- linuxc26/include/asm/mmu_context.h (nonexistent) |
+++ linuxc26/include/asm/mmu_context.h (revision 422) |
@@ -0,0 +1,72 @@ |
+#ifndef __I386_SCHED_H |
+#define __I386_SCHED_H |
+ |
+#include <linux/config.h> |
+#include <asm/desc.h> |
+#include <asm/atomic.h> |
+#include <asm/pgalloc.h> |
+#include <asm/tlbflush.h> |
+ |
+/* |
+ * Used for LDT copy/destruction. |
+ */ |
+int init_new_context(struct task_struct *tsk, struct mm_struct *mm); |
+void destroy_context(struct mm_struct *mm); |
+ |
+ |
+static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) |
+{ |
+#ifdef CONFIG_SMP |
+ unsigned cpu = smp_processor_id(); |
+ if (cpu_tlbstate[cpu].state == TLBSTATE_OK) |
+ cpu_tlbstate[cpu].state = TLBSTATE_LAZY; |
+#endif |
+} |
+ |
+static inline void switch_mm(struct mm_struct *prev, |
+ struct mm_struct *next, |
+ struct task_struct *tsk) |
+{ |
+ int cpu = smp_processor_id(); |
+ |
+ if (likely(prev != next)) { |
+ /* stop flush ipis for the previous mm */ |
+ cpu_clear(cpu, prev->cpu_vm_mask); |
+#ifdef CONFIG_SMP |
+ cpu_tlbstate[cpu].state = TLBSTATE_OK; |
+ cpu_tlbstate[cpu].active_mm = next; |
+#endif |
+ cpu_set(cpu, next->cpu_vm_mask); |
+ |
+ /* Re-load page tables */ |
+ load_cr3(next->pgd); |
+ |
+ /* |
+ * load the LDT, if the LDT is different: |
+ */ |
+ if (unlikely(prev->context.ldt != next->context.ldt)) |
+ load_LDT_nolock(&next->context, cpu); |
+ } |
+#ifdef CONFIG_SMP |
+ else { |
+ cpu_tlbstate[cpu].state = TLBSTATE_OK; |
+ BUG_ON(cpu_tlbstate[cpu].active_mm != next); |
+ |
+ if (!cpu_test_and_set(cpu, next->cpu_vm_mask)) { |
+ /* We were in lazy tlb mode and leave_mm disabled |
+ * tlb flush IPI delivery. We must reload %cr3. |
+ */ |
+ load_cr3(next->pgd); |
+ load_LDT_nolock(&next->context, cpu); |
+ } |
+ } |
+#endif |
+} |
+ |
+#define deactivate_mm(tsk, mm) \ |
+ asm("movl %0,%%fs ; movl %0,%%gs": :"r" (0)) |
+ |
+#define activate_mm(prev, next) \ |
+ switch_mm((prev),(next),NULL) |
+ |
+#endif |
Index: linuxc26/include/asm/statfs.h |
=================================================================== |
--- linuxc26/include/asm/statfs.h (nonexistent) |
+++ linuxc26/include/asm/statfs.h (revision 422) |
@@ -0,0 +1,6 @@ |
+#ifndef _I386_STATFS_H |
+#define _I386_STATFS_H |
+ |
+#include <asm-generic/statfs.h> |
+ |
+#endif |
Index: linuxc26/include/asm/cacheflush.h |
=================================================================== |
--- linuxc26/include/asm/cacheflush.h (nonexistent) |
+++ linuxc26/include/asm/cacheflush.h (revision 422) |
@@ -0,0 +1,32 @@ |
+#ifndef _I386_CACHEFLUSH_H |
+#define _I386_CACHEFLUSH_H |
+ |
+/* Keep includes the same across arches. */ |
+#include <linux/mm.h> |
+ |
+/* Caches aren't brain-dead on the intel. */ |
+#define flush_cache_all() do { } while (0) |
+#define flush_cache_mm(mm) do { } while (0) |
+#define flush_cache_range(vma, start, end) do { } while (0) |
+#define flush_cache_page(vma, vmaddr) do { } while (0) |
+#define flush_dcache_page(page) do { } while (0) |
+#define flush_icache_range(start, end) do { } while (0) |
+#define flush_icache_page(vma,pg) do { } while (0) |
+#define flush_icache_user_range(vma,pg,adr,len) do { } while (0) |
+#define flush_cache_vmap(start, end) do { } while (0) |
+#define flush_cache_vunmap(start, end) do { } while (0) |
+ |
+#define copy_to_user_page(vma, page, vaddr, dst, src, len) \ |
+ memcpy(dst, src, len) |
+#define copy_from_user_page(vma, page, vaddr, dst, src, len) \ |
+ memcpy(dst, src, len) |
+ |
+void global_flush_tlb(void); |
+int change_page_attr(struct page *page, int numpages, pgprot_t prot); |
+ |
+#ifdef CONFIG_DEBUG_PAGEALLOC |
+/* internal debugging function */ |
+void kernel_map_pages(struct page *page, int numpages, int enable); |
+#endif |
+ |
+#endif /* _I386_CACHEFLUSH_H */ |
Index: linuxc26/include/asm/bug.h |
=================================================================== |
--- linuxc26/include/asm/bug.h (nonexistent) |
+++ linuxc26/include/asm/bug.h (revision 422) |
@@ -0,0 +1,35 @@ |
+#ifndef _I386_BUG_H |
+#define _I386_BUG_H |
+ |
+#include <linux/config.h> |
+ |
+/* |
+ * Tell the user there is some problem. |
+ * The offending file and line are encoded after the "officially |
+ * undefined" opcode for parsing in the trap handler. |
+ */ |
+ |
+#if 1 /* Set to zero for a slightly smaller kernel */ |
+#define BUG() \ |
+ __asm__ __volatile__( "ud2\n" \ |
+ "\t.word %c0\n" \ |
+ "\t.long %c1\n" \ |
+ : : "i" (__LINE__), "i" (__FILE__)) |
+#else |
+#define BUG() __asm__ __volatile__("ud2\n") |
+#endif |
+ |
+#define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0) |
+ |
+#define PAGE_BUG(page) do { \ |
+ BUG(); \ |
+} while (0) |
+ |
+#define WARN_ON(condition) do { \ |
+ if (unlikely((condition)!=0)) { \ |
+ printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \ |
+ dump_stack(); \ |
+ } \ |
+} while (0) |
+ |
+#endif |
Index: linuxc26/include/asm/e820.h |
=================================================================== |
--- linuxc26/include/asm/e820.h (nonexistent) |
+++ linuxc26/include/asm/e820.h (revision 422) |
@@ -0,0 +1,40 @@ |
+/* |
+ * structures and definitions for the int 15, ax=e820 memory map |
+ * scheme. |
+ * |
+ * In a nutshell, arch/i386/boot/setup.S populates a scratch table |
+ * in the empty_zero_block that contains a list of usable address/size |
+ * duples. In arch/i386/kernel/setup.c, this information is |
+ * transferred into the e820map, and in arch/i386/mm/init.c, that |
+ * new information is used to mark pages reserved or not. |
+ * |
+ */ |
+#ifndef __E820_HEADER |
+#define __E820_HEADER |
+ |
+#define E820MAP 0x2d0 /* our map */ |
+#define E820MAX 32 /* number of entries in E820MAP */ |
+#define E820NR 0x1e8 /* # entries in E820MAP */ |
+ |
+#define E820_RAM 1 |
+#define E820_RESERVED 2 |
+#define E820_ACPI 3 /* usable as RAM once ACPI tables have been read */ |
+#define E820_NVS 4 |
+ |
+#define HIGH_MEMORY (1024*1024) |
+ |
+#ifndef __ASSEMBLY__ |
+ |
+struct e820map { |
+ int nr_map; |
+ struct e820entry { |
+ unsigned long long addr; /* start of memory segment */ |
+ unsigned long long size; /* size of memory segment */ |
+ unsigned long type; /* type of memory segment */ |
+ } map[E820MAX]; |
+}; |
+ |
+extern struct e820map e820; |
+#endif/*!__ASSEMBLY__*/ |
+ |
+#endif/*__E820_HEADER*/ |
Index: linuxc26/include/asm/numaq.h |
=================================================================== |
--- linuxc26/include/asm/numaq.h (nonexistent) |
+++ linuxc26/include/asm/numaq.h (revision 422) |
@@ -0,0 +1,164 @@ |
+/* |
+ * Written by: Patricia Gaughen, IBM Corporation |
+ * |
+ * Copyright (C) 2002, IBM Corp. |
+ * |
+ * 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, GOOD TITLE or |
+ * NON INFRINGEMENT. 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. |
+ * |
+ * Send feedback to <gone@us.ibm.com> |
+ */ |
+ |
+#ifndef NUMAQ_H |
+#define NUMAQ_H |
+ |
+#ifdef CONFIG_X86_NUMAQ |
+ |
+extern int get_memcfg_numaq(void); |
+ |
+/* |
+ * SYS_CFG_DATA_PRIV_ADDR, struct eachquadmem, and struct sys_cfg_data are the |
+ */ |
+#define SYS_CFG_DATA_PRIV_ADDR 0x0009d000 /* place for scd in private quad space */ |
+ |
+/* |
+ * Communication area for each processor on lynxer-processor tests. |
+ * |
+ * NOTE: If you change the size of this eachproc structure you need |
+ * to change the definition for EACH_QUAD_SIZE. |
+ */ |
+struct eachquadmem { |
+ unsigned int priv_mem_start; /* Starting address of this */ |
+ /* quad's private memory. */ |
+ /* This is always 0. */ |
+ /* In MB. */ |
+ unsigned int priv_mem_size; /* Size of this quad's */ |
+ /* private memory. */ |
+ /* In MB. */ |
+ unsigned int low_shrd_mem_strp_start;/* Starting address of this */ |
+ /* quad's low shared block */ |
+ /* (untranslated). */ |
+ /* In MB. */ |
+ unsigned int low_shrd_mem_start; /* Starting address of this */ |
+ /* quad's low shared memory */ |
+ /* (untranslated). */ |
+ /* In MB. */ |
+ unsigned int low_shrd_mem_size; /* Size of this quad's low */ |
+ /* shared memory. */ |
+ /* In MB. */ |
+ unsigned int lmmio_copb_start; /* Starting address of this */ |
+ /* quad's local memory */ |
+ /* mapped I/O in the */ |
+ /* compatibility OPB. */ |
+ /* In MB. */ |
+ unsigned int lmmio_copb_size; /* Size of this quad's local */ |
+ /* memory mapped I/O in the */ |
+ /* compatibility OPB. */ |
+ /* In MB. */ |
+ unsigned int lmmio_nopb_start; /* Starting address of this */ |
+ /* quad's local memory */ |
+ /* mapped I/O in the */ |
+ /* non-compatibility OPB. */ |
+ /* In MB. */ |
+ unsigned int lmmio_nopb_size; /* Size of this quad's local */ |
+ /* memory mapped I/O in the */ |
+ /* non-compatibility OPB. */ |
+ /* In MB. */ |
+ unsigned int io_apic_0_start; /* Starting address of I/O */ |
+ /* APIC 0. */ |
+ unsigned int io_apic_0_sz; /* Size I/O APIC 0. */ |
+ unsigned int io_apic_1_start; /* Starting address of I/O */ |
+ /* APIC 1. */ |
+ unsigned int io_apic_1_sz; /* Size I/O APIC 1. */ |
+ unsigned int hi_shrd_mem_start; /* Starting address of this */ |
+ /* quad's high shared memory.*/ |
+ /* In MB. */ |
+ unsigned int hi_shrd_mem_size; /* Size of this quad's high */ |
+ /* shared memory. */ |
+ /* In MB. */ |
+ unsigned int mps_table_addr; /* Address of this quad's */ |
+ /* MPS tables from BIOS, */ |
+ /* in system space.*/ |
+ unsigned int lcl_MDC_pio_addr; /* Port-I/O address for */ |
+ /* local access of MDC. */ |
+ unsigned int rmt_MDC_mmpio_addr; /* MM-Port-I/O address for */ |
+ /* remote access of MDC. */ |
+ unsigned int mm_port_io_start; /* Starting address of this */ |
+ /* quad's memory mapped Port */ |
+ /* I/O space. */ |
+ unsigned int mm_port_io_size; /* Size of this quad's memory*/ |
+ /* mapped Port I/O space. */ |
+ unsigned int mm_rmt_io_apic_start; /* Starting address of this */ |
+ /* quad's memory mapped */ |
+ /* remote I/O APIC space. */ |
+ unsigned int mm_rmt_io_apic_size; /* Size of this quad's memory*/ |
+ /* mapped remote I/O APIC */ |
+ /* space. */ |
+ unsigned int mm_isa_start; /* Starting address of this */ |
+ /* quad's memory mapped ISA */ |
+ /* space (contains MDC */ |
+ /* memory space). */ |
+ unsigned int mm_isa_size; /* Size of this quad's memory*/ |
+ /* mapped ISA space (contains*/ |
+ /* MDC memory space). */ |
+ unsigned int rmt_qmi_addr; /* Remote addr to access QMI.*/ |
+ unsigned int lcl_qmi_addr; /* Local addr to access QMI. */ |
+}; |
+ |
+/* |
+ * Note: This structure must be NOT be changed unless the multiproc and |
+ * OS are changed to reflect the new structure. |
+ */ |
+struct sys_cfg_data { |
+ unsigned int quad_id; |
+ unsigned int bsp_proc_id; /* Boot Strap Processor in this quad. */ |
+ unsigned int scd_version; /* Version number of this table. */ |
+ unsigned int first_quad_id; |
+ unsigned int quads_present31_0; /* 1 bit for each quad */ |
+ unsigned int quads_present63_32; /* 1 bit for each quad */ |
+ unsigned int config_flags; |
+ unsigned int boot_flags; |
+ unsigned int csr_start_addr; /* Absolute value (not in MB) */ |
+ unsigned int csr_size; /* Absolute value (not in MB) */ |
+ unsigned int lcl_apic_start_addr; /* Absolute value (not in MB) */ |
+ unsigned int lcl_apic_size; /* Absolute value (not in MB) */ |
+ unsigned int low_shrd_mem_base; /* 0 or 512MB or 1GB */ |
+ unsigned int low_shrd_mem_quad_offset; /* 0,128M,256M,512M,1G */ |
+ /* may not be totally populated */ |
+ unsigned int split_mem_enbl; /* 0 for no low shared memory */ |
+ unsigned int mmio_sz; /* Size of total system memory mapped I/O */ |
+ /* (in MB). */ |
+ unsigned int quad_spin_lock; /* Spare location used for quad */ |
+ /* bringup. */ |
+ unsigned int nonzero55; /* For checksumming. */ |
+ unsigned int nonzeroaa; /* For checksumming. */ |
+ unsigned int scd_magic_number; |
+ unsigned int system_type; |
+ unsigned int checksum; |
+ /* |
+ * memory configuration area for each quad |
+ */ |
+ struct eachquadmem eq[MAX_NUMNODES]; /* indexed by quad id */ |
+}; |
+ |
+static inline unsigned long *get_zholes_size(int nid) |
+{ |
+ return NULL; |
+} |
+#endif /* CONFIG_X86_NUMAQ */ |
+#endif /* NUMAQ_H */ |
+ |
Index: linuxc26/include/asm/current.h |
=================================================================== |
--- linuxc26/include/asm/current.h (nonexistent) |
+++ linuxc26/include/asm/current.h (revision 422) |
@@ -0,0 +1,15 @@ |
+#ifndef _I386_CURRENT_H |
+#define _I386_CURRENT_H |
+ |
+#include <linux/thread_info.h> |
+ |
+struct task_struct; |
+ |
+static inline struct task_struct * get_current(void) |
+{ |
+ return current_thread_info()->task; |
+} |
+ |
+#define current get_current() |
+ |
+#endif /* !(_I386_CURRENT_H) */ |
Index: linuxc26/include/asm/termios.h |
=================================================================== |
--- linuxc26/include/asm/termios.h (nonexistent) |
+++ linuxc26/include/asm/termios.h (revision 422) |
@@ -0,0 +1,107 @@ |
+#ifndef _I386_TERMIOS_H |
+#define _I386_TERMIOS_H |
+ |
+#include <asm/termbits.h> |
+#include <asm/ioctls.h> |
+ |
+struct winsize { |
+ unsigned short ws_row; |
+ unsigned short ws_col; |
+ unsigned short ws_xpixel; |
+ unsigned short ws_ypixel; |
+}; |
+ |
+#define NCC 8 |
+struct termio { |
+ unsigned short c_iflag; /* input mode flags */ |
+ unsigned short c_oflag; /* output mode flags */ |
+ unsigned short c_cflag; /* control mode flags */ |
+ unsigned short c_lflag; /* local mode flags */ |
+ unsigned char c_line; /* line discipline */ |
+ unsigned char c_cc[NCC]; /* control characters */ |
+}; |
+ |
+/* modem lines */ |
+#define TIOCM_LE 0x001 |
+#define TIOCM_DTR 0x002 |
+#define TIOCM_RTS 0x004 |
+#define TIOCM_ST 0x008 |
+#define TIOCM_SR 0x010 |
+#define TIOCM_CTS 0x020 |
+#define TIOCM_CAR 0x040 |
+#define TIOCM_RNG 0x080 |
+#define TIOCM_DSR 0x100 |
+#define TIOCM_CD TIOCM_CAR |
+#define TIOCM_RI TIOCM_RNG |
+#define TIOCM_OUT1 0x2000 |
+#define TIOCM_OUT2 0x4000 |
+#define TIOCM_LOOP 0x8000 |
+ |
+/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ |
+ |
+/* 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 <Dave@mvhi.com> */ |
+#define N_IRDA 11 /* Linux IR - 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 */ |
+ |
+#ifdef __KERNEL__ |
+#include <linux/module.h> |
+ |
+/* intr=^C quit=^\ erase=del kill=^U |
+ eof=^D vtime=\0 vmin=\1 sxtc=\0 |
+ start=^Q stop=^S susp=^Z eol=\0 |
+ reprint=^R discard=^U werase=^W lnext=^V |
+ eol2=\0 |
+*/ |
+#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" |
+ |
+/* |
+ * Translate a "termio" structure into a "termios". Ugh. |
+ */ |
+#define SET_LOW_TERMIOS_BITS(termios, termio, x) { \ |
+ unsigned short __tmp; \ |
+ get_user(__tmp,&(termio)->x); \ |
+ *(unsigned short *) &(termios)->x = __tmp; \ |
+} |
+ |
+#define user_termio_to_kernel_termios(termios, termio) \ |
+({ \ |
+ SET_LOW_TERMIOS_BITS(termios, termio, c_iflag); \ |
+ SET_LOW_TERMIOS_BITS(termios, termio, c_oflag); \ |
+ SET_LOW_TERMIOS_BITS(termios, termio, c_cflag); \ |
+ SET_LOW_TERMIOS_BITS(termios, termio, c_lflag); \ |
+ copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \ |
+}) |
+ |
+/* |
+ * Translate a "termios" structure into a "termio". Ugh. |
+ */ |
+#define kernel_termios_to_user_termio(termio, termios) \ |
+({ \ |
+ put_user((termios)->c_iflag, &(termio)->c_iflag); \ |
+ put_user((termios)->c_oflag, &(termio)->c_oflag); \ |
+ put_user((termios)->c_cflag, &(termio)->c_cflag); \ |
+ put_user((termios)->c_lflag, &(termio)->c_lflag); \ |
+ put_user((termios)->c_line, &(termio)->c_line); \ |
+ copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \ |
+}) |
+ |
+#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios)) |
+#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios)) |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* _I386_TERMIOS_H */ |
Index: linuxc26/include/asm/msgbuf.h |
=================================================================== |
--- linuxc26/include/asm/msgbuf.h (nonexistent) |
+++ linuxc26/include/asm/msgbuf.h (revision 422) |
@@ -0,0 +1,31 @@ |
+#ifndef _I386_MSGBUF_H |
+#define _I386_MSGBUF_H |
+ |
+/* |
+ * The msqid64_ds structure for i386 architecture. |
+ * Note extra padding because this structure is passed back and forth |
+ * between kernel and user space. |
+ * |
+ * Pad space is left for: |
+ * - 64-bit time_t to solve y2038 problem |
+ * - 2 miscellaneous 32-bit values |
+ */ |
+ |
+struct msqid64_ds { |
+ struct ipc64_perm msg_perm; |
+ __kernel_time_t msg_stime; /* last msgsnd time */ |
+ unsigned long __unused1; |
+ __kernel_time_t msg_rtime; /* last msgrcv time */ |
+ unsigned long __unused2; |
+ __kernel_time_t msg_ctime; /* last change time */ |
+ unsigned long __unused3; |
+ unsigned long msg_cbytes; /* current number of bytes on queue */ |
+ unsigned long msg_qnum; /* number of messages in queue */ |
+ unsigned long msg_qbytes; /* max number of bytes on queue */ |
+ __kernel_pid_t msg_lspid; /* pid of last msgsnd */ |
+ __kernel_pid_t msg_lrpid; /* last receive pid */ |
+ unsigned long __unused4; |
+ unsigned long __unused5; |
+}; |
+ |
+#endif /* _I386_MSGBUF_H */ |
Index: linuxc26/include/asm/module.h |
=================================================================== |
--- linuxc26/include/asm/module.h (nonexistent) |
+++ linuxc26/include/asm/module.h (revision 422) |
@@ -0,0 +1,59 @@ |
+#ifndef _ASM_I386_MODULE_H |
+#define _ASM_I386_MODULE_H |
+ |
+#include <linuxcomp.h> |
+ |
+/* x86 is simple */ |
+struct mod_arch_specific |
+{ |
+}; |
+ |
+#define Elf_Shdr Elf32_Shdr |
+#define Elf_Sym Elf32_Sym |
+#define Elf_Ehdr Elf32_Ehdr |
+ |
+#ifdef CONFIG_M386 |
+#define MODULE_PROC_FAMILY "386 " |
+#elif defined CONFIG_M486 |
+#define MODULE_PROC_FAMILY "486 " |
+#elif defined CONFIG_M586 |
+#define MODULE_PROC_FAMILY "586 " |
+#elif defined CONFIG_M586TSC |
+#define MODULE_PROC_FAMILY "586TSC " |
+#elif defined CONFIG_M586MMX |
+#define MODULE_PROC_FAMILY "586MMX " |
+#elif defined CONFIG_M686 |
+#define MODULE_PROC_FAMILY "686 " |
+#elif defined CONFIG_MPENTIUMII |
+#define MODULE_PROC_FAMILY "PENTIUMII " |
+#elif defined CONFIG_MPENTIUMIII |
+#define MODULE_PROC_FAMILY "PENTIUMIII " |
+#elif defined CONFIG_MPENTIUM4 |
+#define MODULE_PROC_FAMILY "PENTIUM4 " |
+#elif defined CONFIG_MK6 |
+#define MODULE_PROC_FAMILY "K6 " |
+#elif defined CONFIG_MK7 |
+#define MODULE_PROC_FAMILY "K7 " |
+#elif defined CONFIG_MK8 |
+#define MODULE_PROC_FAMILY "K8 " |
+#elif defined CONFIG_MELAN |
+#define MODULE_PROC_FAMILY "ELAN " |
+#elif defined CONFIG_MCRUSOE |
+#define MODULE_PROC_FAMILY "CRUSOE " |
+#elif defined CONFIG_MWINCHIPC6 |
+#define MODULE_PROC_FAMILY "WINCHIPC6 " |
+#elif defined CONFIG_MWINCHIP2 |
+#define MODULE_PROC_FAMILY "WINCHIP2 " |
+#elif defined CONFIG_MWINCHIP3D |
+#define MODULE_PROC_FAMILY "WINCHIP3D " |
+#elif defined CONFIG_MCYRIXIII |
+#define MODULE_PROC_FAMILY "CYRIXIII " |
+#elif CONFIG_MVIAC3_2 |
+#define MODULE_PROC_FAMILY "VIAC3-2 " |
+#else |
+#error unknown processor family |
+#endif |
+ |
+#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY |
+ |
+#endif /* _ASM_I386_MODULE_H */ |
Index: linuxc26/include/asm/i387.h |
=================================================================== |
--- linuxc26/include/asm/i387.h (nonexistent) |
+++ linuxc26/include/asm/i387.h (revision 422) |
@@ -0,0 +1,126 @@ |
+/* |
+ * include/asm-i386/i387.h |
+ * |
+ * Copyright (C) 1994 Linus Torvalds |
+ * |
+ * Pentium III FXSR, SSE support |
+ * General FPU state handling cleanups |
+ * Gareth Hughes <gareth@valinux.com>, May 2000 |
+ */ |
+ |
+#ifndef __ASM_I386_I387_H |
+#define __ASM_I386_I387_H |
+ |
+#include <linux/sched.h> |
+#include <asm/processor.h> |
+#include <asm/sigcontext.h> |
+#include <asm/user.h> |
+ |
+extern void init_fpu(struct task_struct *); |
+/* |
+ * FPU lazy state save handling... |
+ */ |
+extern void restore_fpu( struct task_struct *tsk ); |
+ |
+extern void kernel_fpu_begin(void); |
+#define kernel_fpu_end() do { stts(); preempt_enable(); } while(0) |
+ |
+/* |
+ * These must be called with preempt disabled |
+ */ |
+static inline void __save_init_fpu( struct task_struct *tsk ) |
+{ |
+ if ( cpu_has_fxsr ) { |
+ asm volatile( "fxsave %0 ; fnclex" |
+ : "=m" (tsk->thread.i387.fxsave) ); |
+ } else { |
+ asm volatile( "fnsave %0 ; fwait" |
+ : "=m" (tsk->thread.i387.fsave) ); |
+ } |
+ tsk->thread_info->status &= ~TS_USEDFPU; |
+} |
+ |
+#define __unlazy_fpu( tsk ) do { \ |
+ if ((tsk)->thread_info->status & TS_USEDFPU) \ |
+ save_init_fpu( tsk ); \ |
+} while (0) |
+ |
+#define __clear_fpu( tsk ) \ |
+do { \ |
+ if ((tsk)->thread_info->status & TS_USEDFPU) { \ |
+ asm volatile("fwait"); \ |
+ (tsk)->thread_info->status &= ~TS_USEDFPU; \ |
+ stts(); \ |
+ } \ |
+} while (0) |
+ |
+ |
+/* |
+ * These disable preemption on their own and are safe |
+ */ |
+static inline void save_init_fpu( struct task_struct *tsk ) |
+{ |
+ preempt_disable(); |
+ __save_init_fpu(tsk); |
+ stts(); |
+ preempt_enable(); |
+} |
+ |
+#define unlazy_fpu( tsk ) do { \ |
+ preempt_disable(); \ |
+ __unlazy_fpu(tsk); \ |
+ preempt_enable(); \ |
+} while (0) |
+ |
+#define clear_fpu( tsk ) do { \ |
+ preempt_disable(); \ |
+ __clear_fpu( tsk ); \ |
+ preempt_enable(); \ |
+} while (0) |
+ \ |
+/* |
+ * FPU state interaction... |
+ */ |
+extern unsigned short get_fpu_cwd( struct task_struct *tsk ); |
+extern unsigned short get_fpu_swd( struct task_struct *tsk ); |
+extern unsigned short get_fpu_twd( struct task_struct *tsk ); |
+extern unsigned short get_fpu_mxcsr( struct task_struct *tsk ); |
+ |
+extern void set_fpu_cwd( struct task_struct *tsk, unsigned short cwd ); |
+extern void set_fpu_swd( struct task_struct *tsk, unsigned short swd ); |
+extern void set_fpu_twd( struct task_struct *tsk, unsigned short twd ); |
+extern void set_fpu_mxcsr( struct task_struct *tsk, unsigned short mxcsr ); |
+ |
+#define load_mxcsr( val ) do { \ |
+ unsigned long __mxcsr = ((unsigned long)(val) & 0xffbf); \ |
+ asm volatile( "ldmxcsr %0" : : "m" (__mxcsr) ); \ |
+} while (0) |
+ |
+/* |
+ * Signal frame handlers... |
+ */ |
+extern int save_i387( struct _fpstate __user *buf ); |
+extern int restore_i387( struct _fpstate __user *buf ); |
+ |
+/* |
+ * ptrace request handers... |
+ */ |
+extern int get_fpregs( struct user_i387_struct __user *buf, |
+ struct task_struct *tsk ); |
+extern int set_fpregs( struct task_struct *tsk, |
+ struct user_i387_struct __user *buf ); |
+ |
+extern int get_fpxregs( struct user_fxsr_struct __user *buf, |
+ struct task_struct *tsk ); |
+extern int set_fpxregs( struct task_struct *tsk, |
+ struct user_fxsr_struct __user *buf ); |
+ |
+/* |
+ * FPU state for core dumps... |
+ */ |
+extern int dump_fpu( struct pt_regs *regs, |
+ struct user_i387_struct *fpu ); |
+extern int dump_extended_fpu( struct pt_regs *regs, |
+ struct user_fxsr_struct *fpu ); |
+ |
+#endif /* __ASM_I386_I387_H */ |
Index: linuxc26/include/asm/mmu.h |
=================================================================== |
--- linuxc26/include/asm/mmu.h (nonexistent) |
+++ linuxc26/include/asm/mmu.h (revision 422) |
@@ -0,0 +1,17 @@ |
+#ifndef __i386_MMU_H |
+#define __i386_MMU_H |
+ |
+#include <asm/semaphore.h> |
+/* |
+ * The i386 doesn't have a mmu context, but |
+ * we put the segment information here. |
+ * |
+ * cpu_vm_mask is used to optimize ldt flushing. |
+ */ |
+typedef struct { |
+ int size; |
+ struct semaphore sem; |
+ void *ldt; |
+} mm_context_t; |
+ |
+#endif |
Index: linuxc26/include/asm/ist.h |
=================================================================== |
--- linuxc26/include/asm/ist.h (nonexistent) |
+++ linuxc26/include/asm/ist.h (revision 422) |
@@ -0,0 +1,32 @@ |
+#ifndef _ASM_IST_H |
+#define _ASM_IST_H |
+ |
+/* |
+ * Include file for the interface to IST BIOS |
+ * Copyright 2002 Andy Grover <andrew.grover@intel.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, 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. |
+ */ |
+ |
+ |
+#ifdef __KERNEL__ |
+ |
+struct ist_info { |
+ unsigned long signature; |
+ unsigned long command; |
+ unsigned long event; |
+ unsigned long perf_level; |
+}; |
+ |
+extern struct ist_info ist_info; |
+ |
+#endif /* __KERNEL__ */ |
+#endif /* _ASM_IST_H */ |
Index: linuxc26/include/asm/io_apic.h |
=================================================================== |
--- linuxc26/include/asm/io_apic.h (nonexistent) |
+++ linuxc26/include/asm/io_apic.h (revision 422) |
@@ -0,0 +1,180 @@ |
+#ifndef __ASM_IO_APIC_H |
+#define __ASM_IO_APIC_H |
+ |
+#include <linux/config.h> |
+#include <asm/types.h> |
+#include <asm/mpspec.h> |
+ |
+/* |
+ * Intel IO-APIC support for SMP and UP systems. |
+ * |
+ * Copyright (C) 1997, 1998, 1999, 2000 Ingo Molnar |
+ */ |
+ |
+#ifdef CONFIG_X86_IO_APIC |
+ |
+#define APIC_MISMATCH_DEBUG |
+ |
+#define IO_APIC_BASE(idx) \ |
+ ((volatile int *)(__fix_to_virt(FIX_IO_APIC_BASE_0 + idx) \ |
+ + (mp_ioapics[idx].mpc_apicaddr & ~PAGE_MASK))) |
+ |
+/* |
+ * The structure of the IO-APIC: |
+ */ |
+union IO_APIC_reg_00 { |
+ u32 raw; |
+ struct { |
+ u32 __reserved_2 : 14, |
+ LTS : 1, |
+ delivery_type : 1, |
+ __reserved_1 : 8, |
+ ID : 8; |
+ } __attribute__ ((packed)) bits; |
+}; |
+ |
+union IO_APIC_reg_01 { |
+ u32 raw; |
+ struct { |
+ u32 version : 8, |
+ __reserved_2 : 7, |
+ PRQ : 1, |
+ entries : 8, |
+ __reserved_1 : 8; |
+ } __attribute__ ((packed)) bits; |
+}; |
+ |
+union IO_APIC_reg_02 { |
+ u32 raw; |
+ struct { |
+ u32 __reserved_2 : 24, |
+ arbitration : 4, |
+ __reserved_1 : 4; |
+ } __attribute__ ((packed)) bits; |
+}; |
+ |
+union IO_APIC_reg_03 { |
+ u32 raw; |
+ struct { |
+ u32 boot_DT : 1, |
+ __reserved_1 : 31; |
+ } __attribute__ ((packed)) bits; |
+}; |
+ |
+/* |
+ * # of IO-APICs and # of IRQ routing registers |
+ */ |
+extern int nr_ioapics; |
+extern int nr_ioapic_registers[MAX_IO_APICS]; |
+ |
+enum ioapic_irq_destination_types { |
+ dest_Fixed = 0, |
+ dest_LowestPrio = 1, |
+ dest_SMI = 2, |
+ dest__reserved_1 = 3, |
+ dest_NMI = 4, |
+ dest_INIT = 5, |
+ dest__reserved_2 = 6, |
+ dest_ExtINT = 7 |
+}; |
+ |
+struct IO_APIC_route_entry { |
+ __u32 vector : 8, |
+ delivery_mode : 3, /* 000: FIXED |
+ * 001: lowest prio |
+ * 111: ExtINT |
+ */ |
+ dest_mode : 1, /* 0: physical, 1: logical */ |
+ delivery_status : 1, |
+ polarity : 1, |
+ irr : 1, |
+ trigger : 1, /* 0: edge, 1: level */ |
+ mask : 1, /* 0: enabled, 1: disabled */ |
+ __reserved_2 : 15; |
+ |
+ union { struct { __u32 |
+ __reserved_1 : 24, |
+ physical_dest : 4, |
+ __reserved_2 : 4; |
+ } physical; |
+ |
+ struct { __u32 |
+ __reserved_1 : 24, |
+ logical_dest : 8; |
+ } logical; |
+ } dest; |
+ |
+} __attribute__ ((packed)); |
+ |
+/* |
+ * MP-BIOS irq configuration table structures: |
+ */ |
+ |
+/* I/O APIC entries */ |
+extern struct mpc_config_ioapic mp_ioapics[MAX_IO_APICS]; |
+ |
+/* # of MP IRQ source entries */ |
+extern int mp_irq_entries; |
+ |
+/* MP IRQ source entries */ |
+extern struct mpc_config_intsrc mp_irqs[MAX_IRQ_SOURCES]; |
+ |
+/* non-0 if default (table-less) MP configuration */ |
+extern int mpc_default_type; |
+ |
+static inline unsigned int io_apic_read(unsigned int apic, unsigned int reg) |
+{ |
+ *IO_APIC_BASE(apic) = reg; |
+ return *(IO_APIC_BASE(apic)+4); |
+} |
+ |
+static inline void io_apic_write(unsigned int apic, unsigned int reg, unsigned int value) |
+{ |
+ *IO_APIC_BASE(apic) = reg; |
+ *(IO_APIC_BASE(apic)+4) = value; |
+} |
+ |
+/* |
+ * Re-write a value: to be used for read-modify-write |
+ * cycles where the read already set up the index register. |
+ * |
+ * Older SiS APIC requires we rewrite the index regiser |
+ */ |
+extern int sis_apic_bug; |
+static inline void io_apic_modify(unsigned int apic, unsigned int reg, unsigned int value) |
+{ |
+ if (sis_apic_bug) |
+ *IO_APIC_BASE(apic) = reg; |
+ *(IO_APIC_BASE(apic)+4) = value; |
+} |
+ |
+/* |
+ * Synchronize the IO-APIC and the CPU by doing |
+ * a dummy read from the IO-APIC |
+ */ |
+static inline void io_apic_sync(unsigned int apic) |
+{ |
+ (void) *(IO_APIC_BASE(apic)+4); |
+} |
+ |
+/* 1 if "noapic" boot option passed */ |
+extern int skip_ioapic_setup; |
+ |
+/* |
+ * If we use the IO-APIC for IRQ routing, disable automatic |
+ * assignment of PCI IRQ's. |
+ */ |
+#define io_apic_assign_pci_irqs (mp_irq_entries && !skip_ioapic_setup) |
+ |
+#ifdef CONFIG_ACPI_BOOT |
+extern int io_apic_get_unique_id (int ioapic, int apic_id); |
+extern int io_apic_get_version (int ioapic); |
+extern int io_apic_get_redir_entries (int ioapic); |
+extern int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int active_high_low); |
+#endif /*CONFIG_ACPI_BOOT*/ |
+ |
+#else /* !CONFIG_X86_IO_APIC */ |
+#define io_apic_assign_pci_irqs 0 |
+#endif |
+ |
+#endif |
Index: linuxc26/include/asm/mmzone.h |
=================================================================== |
--- linuxc26/include/asm/mmzone.h (nonexistent) |
+++ linuxc26/include/asm/mmzone.h (revision 422) |
@@ -0,0 +1,150 @@ |
+/* |
+ * Written by Pat Gaughen (gone@us.ibm.com) Mar 2002 |
+ * |
+ */ |
+ |
+#ifndef _ASM_MMZONE_H_ |
+#define _ASM_MMZONE_H_ |
+ |
+#include <asm/smp.h> |
+ |
+#ifdef CONFIG_DISCONTIGMEM |
+ |
+extern struct pglist_data *node_data[]; |
+ |
+/* |
+ * Following are macros that are specific to this numa platform. |
+ */ |
+#define reserve_bootmem(addr, size) \ |
+ reserve_bootmem_node(NODE_DATA(0), (addr), (size)) |
+#define alloc_bootmem(x) \ |
+ __alloc_bootmem_node(NODE_DATA(0), (x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) |
+#define alloc_bootmem_low(x) \ |
+ __alloc_bootmem_node(NODE_DATA(0), (x), SMP_CACHE_BYTES, 0) |
+#define alloc_bootmem_pages(x) \ |
+ __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) |
+#define alloc_bootmem_low_pages(x) \ |
+ __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, 0) |
+#define alloc_bootmem_node(ignore, x) \ |
+ __alloc_bootmem_node(NODE_DATA(0), (x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) |
+#define alloc_bootmem_pages_node(ignore, x) \ |
+ __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) |
+#define alloc_bootmem_low_pages_node(ignore, x) \ |
+ __alloc_bootmem_node(NODE_DATA(0), (x), PAGE_SIZE, 0) |
+ |
+#define node_localnr(pfn, nid) ((pfn) - node_data[nid]->node_start_pfn) |
+ |
+/* |
+ * Following are macros that each numa implmentation must define. |
+ */ |
+ |
+/* |
+ * Given a kernel address, find the home node of the underlying memory. |
+ */ |
+#define kvaddr_to_nid(kaddr) pfn_to_nid(__pa(kaddr) >> PAGE_SHIFT) |
+ |
+/* |
+ * Return a pointer to the node data for node n. |
+ */ |
+#define NODE_DATA(nid) (node_data[nid]) |
+ |
+#define node_mem_map(nid) (NODE_DATA(nid)->node_mem_map) |
+#define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) |
+#define node_end_pfn(nid) \ |
+({ \ |
+ pg_data_t *__pgdat = NODE_DATA(nid); \ |
+ __pgdat->node_start_pfn + __pgdat->node_spanned_pages; \ |
+}) |
+ |
+#define local_mapnr(kvaddr) \ |
+({ \ |
+ unsigned long __pfn = __pa(kvaddr) >> PAGE_SHIFT; \ |
+ (__pfn - node_start_pfn(pfn_to_nid(__pfn))); \ |
+}) |
+ |
+#define kern_addr_valid(kaddr) \ |
+({ \ |
+ unsigned long __kaddr = (unsigned long)(kaddr); \ |
+ pg_data_t *__pgdat = NODE_DATA(kvaddr_to_nid(__kaddr)); \ |
+ test_bit(local_mapnr(__kaddr), __pgdat->valid_addr_bitmap); \ |
+}) |
+ |
+#define pfn_to_page(pfn) \ |
+({ \ |
+ unsigned long __pfn = pfn; \ |
+ int __node = pfn_to_nid(__pfn); \ |
+ &node_mem_map(__node)[node_localnr(__pfn,__node)]; \ |
+}) |
+ |
+#define page_to_pfn(pg) \ |
+({ \ |
+ struct page *__page = pg; \ |
+ struct zone *__zone = page_zone(__page); \ |
+ (unsigned long)(__page - __zone->zone_mem_map) \ |
+ + __zone->zone_start_pfn; \ |
+}) |
+#define pmd_page(pmd) (pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT)) |
+/* |
+ * pfn_valid should be made as fast as possible, and the current definition |
+ * is valid for machines that are NUMA, but still contiguous, which is what |
+ * is currently supported. A more generalised, but slower definition would |
+ * be something like this - mbligh: |
+ * ( pfn_to_pgdat(pfn) && ((pfn) < node_end_pfn(pfn_to_nid(pfn))) ) |
+ */ |
+#define pfn_valid(pfn) ((pfn) < num_physpages) |
+ |
+/* |
+ * generic node memory support, the following assumptions apply: |
+ * |
+ * 1) memory comes in 256Mb contigious chunks which are either present or not |
+ * 2) we will not have more than 64Gb in total |
+ * |
+ * for now assume that 64Gb is max amount of RAM for whole system |
+ * 64Gb / 4096bytes/page = 16777216 pages |
+ */ |
+#define MAX_NR_PAGES 16777216 |
+#define MAX_ELEMENTS 256 |
+#define PAGES_PER_ELEMENT (MAX_NR_PAGES/MAX_ELEMENTS) |
+ |
+extern u8 physnode_map[]; |
+ |
+static inline int pfn_to_nid(unsigned long pfn) |
+{ |
+ return(physnode_map[(pfn) / PAGES_PER_ELEMENT]); |
+} |
+static inline struct pglist_data *pfn_to_pgdat(unsigned long pfn) |
+{ |
+ return(NODE_DATA(pfn_to_nid(pfn))); |
+} |
+ |
+#ifdef CONFIG_X86_NUMAQ |
+#include <asm/numaq.h> |
+#elif CONFIG_ACPI_SRAT |
+#include <asm/srat.h> |
+#elif CONFIG_X86_PC |
+#define get_zholes_size(n) (0) |
+#else |
+#define pfn_to_nid(pfn) (0) |
+#endif /* CONFIG_X86_NUMAQ */ |
+ |
+extern int get_memcfg_numa_flat(void ); |
+/* |
+ * This allows any one NUMA architecture to be compiled |
+ * for, and still fall back to the flat function if it |
+ * fails. |
+ */ |
+static inline void get_memcfg_numa(void) |
+{ |
+#ifdef CONFIG_X86_NUMAQ |
+ if (get_memcfg_numaq()) |
+ return; |
+#elif CONFIG_ACPI_SRAT |
+ if (get_memcfg_from_srat()) |
+ return; |
+#endif |
+ |
+ get_memcfg_numa_flat(); |
+} |
+ |
+#endif /* CONFIG_DISCONTIGMEM */ |
+#endif /* _ASM_MMZONE_H_ */ |
Index: linuxc26/include/asm/string.h |
=================================================================== |
--- linuxc26/include/asm/string.h (nonexistent) |
+++ linuxc26/include/asm/string.h (revision 422) |
@@ -0,0 +1,484 @@ |
+#ifndef _I386_STRING_H_ |
+#define _I386_STRING_H_ |
+ |
+#ifdef __KERNEL__ |
+#include <linux/config.h> |
+/* |
+ * On a 486 or Pentium, we are better off not using the |
+ * byte string operations. But on a 386 or a PPro the |
+ * byte string ops are faster than doing it by hand |
+ * (MUCH faster on a Pentium). |
+ */ |
+ |
+/* |
+ * This string-include defines all string functions as inline |
+ * functions. Use gcc. It also assumes ds=es=data space, this should be |
+ * normal. Most of the string-functions are rather heavily hand-optimized, |
+ * see especially strsep,strstr,str[c]spn. They should work, but are not |
+ * very easy to understand. Everything is done entirely within the register |
+ * set, making the functions fast and clean. String instructions have been |
+ * used through-out, making for "slightly" unclear code :-) |
+ * |
+ * NO Copyright (C) 1991, 1992 Linus Torvalds, |
+ * consider these trivial functions to be PD. |
+ */ |
+ |
+#define __HAVE_ARCH_STRCPY |
+static inline char * strcpy(char * dest,const char *src) |
+{ |
+int d0, d1, d2; |
+__asm__ __volatile__( |
+ "1:\tlodsb\n\t" |
+ "stosb\n\t" |
+ "testb %%al,%%al\n\t" |
+ "jne 1b" |
+ : "=&S" (d0), "=&D" (d1), "=&a" (d2) |
+ :"0" (src),"1" (dest) : "memory"); |
+return dest; |
+} |
+ |
+#define __HAVE_ARCH_STRNCPY |
+static inline char * strncpy(char * dest,const char *src,size_t count) |
+{ |
+int d0, d1, d2, d3; |
+__asm__ __volatile__( |
+ "1:\tdecl %2\n\t" |
+ "js 2f\n\t" |
+ "lodsb\n\t" |
+ "stosb\n\t" |
+ "testb %%al,%%al\n\t" |
+ "jne 1b\n\t" |
+ "rep\n\t" |
+ "stosb\n" |
+ "2:" |
+ : "=&S" (d0), "=&D" (d1), "=&c" (d2), "=&a" (d3) |
+ :"0" (src),"1" (dest),"2" (count) : "memory"); |
+return dest; |
+} |
+ |
+#define __HAVE_ARCH_STRCAT |
+static inline char * strcat(char * dest,const char * src) |
+{ |
+int d0, d1, d2, d3; |
+__asm__ __volatile__( |
+ "repne\n\t" |
+ "scasb\n\t" |
+ "decl %1\n" |
+ "1:\tlodsb\n\t" |
+ "stosb\n\t" |
+ "testb %%al,%%al\n\t" |
+ "jne 1b" |
+ : "=&S" (d0), "=&D" (d1), "=&a" (d2), "=&c" (d3) |
+ : "0" (src), "1" (dest), "2" (0), "3" (0xffffffffu):"memory"); |
+return dest; |
+} |
+ |
+#define __HAVE_ARCH_STRNCAT |
+static inline char * strncat(char * dest,const char * src,size_t count) |
+{ |
+int d0, d1, d2, d3; |
+__asm__ __volatile__( |
+ "repne\n\t" |
+ "scasb\n\t" |
+ "decl %1\n\t" |
+ "movl %8,%3\n" |
+ "1:\tdecl %3\n\t" |
+ "js 2f\n\t" |
+ "lodsb\n\t" |
+ "stosb\n\t" |
+ "testb %%al,%%al\n\t" |
+ "jne 1b\n" |
+ "2:\txorl %2,%2\n\t" |
+ "stosb" |
+ : "=&S" (d0), "=&D" (d1), "=&a" (d2), "=&c" (d3) |
+ : "0" (src),"1" (dest),"2" (0),"3" (0xffffffffu), "g" (count) |
+ : "memory"); |
+return dest; |
+} |
+ |
+#define __HAVE_ARCH_STRCMP |
+static inline int strcmp(const char * cs,const char * ct) |
+{ |
+int d0, d1; |
+register int __res; |
+__asm__ __volatile__( |
+ "1:\tlodsb\n\t" |
+ "scasb\n\t" |
+ "jne 2f\n\t" |
+ "testb %%al,%%al\n\t" |
+ "jne 1b\n\t" |
+ "xorl %%eax,%%eax\n\t" |
+ "jmp 3f\n" |
+ "2:\tsbbl %%eax,%%eax\n\t" |
+ "orb $1,%%al\n" |
+ "3:" |
+ :"=a" (__res), "=&S" (d0), "=&D" (d1) |
+ :"1" (cs),"2" (ct)); |
+return __res; |
+} |
+ |
+#define __HAVE_ARCH_STRNCMP |
+static inline int strncmp(const char * cs,const char * ct,size_t count) |
+{ |
+register int __res; |
+int d0, d1, d2; |
+__asm__ __volatile__( |
+ "1:\tdecl %3\n\t" |
+ "js 2f\n\t" |
+ "lodsb\n\t" |
+ "scasb\n\t" |
+ "jne 3f\n\t" |
+ "testb %%al,%%al\n\t" |
+ "jne 1b\n" |
+ "2:\txorl %%eax,%%eax\n\t" |
+ "jmp 4f\n" |
+ "3:\tsbbl %%eax,%%eax\n\t" |
+ "orb $1,%%al\n" |
+ "4:" |
+ :"=a" (__res), "=&S" (d0), "=&D" (d1), "=&c" (d2) |
+ :"1" (cs),"2" (ct),"3" (count)); |
+return __res; |
+} |
+ |
+#define __HAVE_ARCH_STRCHR |
+static inline char * strchr(const char * s, int c) |
+{ |
+int d0; |
+register char * __res; |
+__asm__ __volatile__( |
+ "movb %%al,%%ah\n" |
+ "1:\tlodsb\n\t" |
+ "cmpb %%ah,%%al\n\t" |
+ "je 2f\n\t" |
+ "testb %%al,%%al\n\t" |
+ "jne 1b\n\t" |
+ "movl $1,%1\n" |
+ "2:\tmovl %1,%0\n\t" |
+ "decl %0" |
+ :"=a" (__res), "=&S" (d0) : "1" (s),"0" (c)); |
+return __res; |
+} |
+ |
+#define __HAVE_ARCH_STRRCHR |
+static inline char * strrchr(const char * s, int c) |
+{ |
+int d0, d1; |
+register char * __res; |
+__asm__ __volatile__( |
+ "movb %%al,%%ah\n" |
+ "1:\tlodsb\n\t" |
+ "cmpb %%ah,%%al\n\t" |
+ "jne 2f\n\t" |
+ "leal -1(%%esi),%0\n" |
+ "2:\ttestb %%al,%%al\n\t" |
+ "jne 1b" |
+ :"=g" (__res), "=&S" (d0), "=&a" (d1) :"0" (0),"1" (s),"2" (c)); |
+return __res; |
+} |
+ |
+#define __HAVE_ARCH_STRLEN |
+static inline size_t strlen(const char * s) |
+{ |
+int d0; |
+register int __res; |
+__asm__ __volatile__( |
+ "repne\n\t" |
+ "scasb\n\t" |
+ "notl %0\n\t" |
+ "decl %0" |
+ :"=c" (__res), "=&D" (d0) :"1" (s),"a" (0), "0" (0xffffffffu)); |
+return __res; |
+} |
+ |
+static inline void * __memcpy(void * to, const void * from, size_t n) |
+{ |
+int d0, d1, d2; |
+__asm__ __volatile__( |
+ "rep ; movsl\n\t" |
+ "testb $2,%b4\n\t" |
+ "je 1f\n\t" |
+ "movsw\n" |
+ "1:\ttestb $1,%b4\n\t" |
+ "je 2f\n\t" |
+ "movsb\n" |
+ "2:" |
+ : "=&c" (d0), "=&D" (d1), "=&S" (d2) |
+ :"0" (n/4), "q" (n),"1" ((long) to),"2" ((long) from) |
+ : "memory"); |
+return (to); |
+} |
+ |
+/* |
+ * This looks horribly ugly, but the compiler can optimize it totally, |
+ * as the count is constant. |
+ */ |
+static inline void * __constant_memcpy(void * to, const void * from, size_t n) |
+{ |
+ if (n <= 128) |
+ return __builtin_memcpy(to, from, n); |
+ |
+#define COMMON(x) \ |
+__asm__ __volatile__( \ |
+ "rep ; movsl" \ |
+ x \ |
+ : "=&c" (d0), "=&D" (d1), "=&S" (d2) \ |
+ : "0" (n/4),"1" ((long) to),"2" ((long) from) \ |
+ : "memory"); |
+{ |
+ int d0, d1, d2; |
+ switch (n % 4) { |
+ case 0: COMMON(""); return to; |
+ case 1: COMMON("\n\tmovsb"); return to; |
+ case 2: COMMON("\n\tmovsw"); return to; |
+ default: COMMON("\n\tmovsw\n\tmovsb"); return to; |
+ } |
+} |
+ |
+#undef COMMON |
+} |
+ |
+#define __HAVE_ARCH_MEMCPY |
+ |
+#ifdef CONFIG_X86_USE_3DNOW |
+ |
+#include <asm/mmx.h> |
+ |
+/* |
+ * This CPU favours 3DNow strongly (eg AMD Athlon) |
+ */ |
+ |
+static inline void * __constant_memcpy3d(void * to, const void * from, size_t len) |
+{ |
+ if (len < 512) |
+ return __constant_memcpy(to, from, len); |
+ return _mmx_memcpy(to, from, len); |
+} |
+ |
+static __inline__ void *__memcpy3d(void *to, const void *from, size_t len) |
+{ |
+ if (len < 512) |
+ return __memcpy(to, from, len); |
+ return _mmx_memcpy(to, from, len); |
+} |
+ |
+#define memcpy(t, f, n) \ |
+(__builtin_constant_p(n) ? \ |
+ __constant_memcpy3d((t),(f),(n)) : \ |
+ __memcpy3d((t),(f),(n))) |
+ |
+#else |
+ |
+/* |
+ * No 3D Now! |
+ */ |
+ |
+#define memcpy(t, f, n) \ |
+(__builtin_constant_p(n) ? \ |
+ __constant_memcpy((t),(f),(n)) : \ |
+ __memcpy((t),(f),(n))) |
+ |
+#endif |
+ |
+/* |
+ * struct_cpy(x,y), copy structure *x into (matching structure) *y. |
+ * |
+ * We get link-time errors if the structure sizes do not match. |
+ * There is no runtime overhead, it's all optimized away at |
+ * compile time. |
+ */ |
+extern void __struct_cpy_bug (void); |
+ |
+#define struct_cpy(x,y) \ |
+({ \ |
+ if (sizeof(*(x)) != sizeof(*(y))) \ |
+ __struct_cpy_bug; \ |
+ memcpy(x, y, sizeof(*(x))); \ |
+}) |
+ |
+#define __HAVE_ARCH_MEMMOVE |
+static inline void * memmove(void * dest,const void * src, size_t n) |
+{ |
+int d0, d1, d2; |
+if (dest<src) |
+__asm__ __volatile__( |
+ "rep\n\t" |
+ "movsb" |
+ : "=&c" (d0), "=&S" (d1), "=&D" (d2) |
+ :"0" (n),"1" (src),"2" (dest) |
+ : "memory"); |
+else |
+__asm__ __volatile__( |
+ "std\n\t" |
+ "rep\n\t" |
+ "movsb\n\t" |
+ "cld" |
+ : "=&c" (d0), "=&S" (d1), "=&D" (d2) |
+ :"0" (n), |
+ "1" (n-1+(const char *)src), |
+ "2" (n-1+(char *)dest) |
+ :"memory"); |
+return dest; |
+} |
+ |
+#define memcmp __builtin_memcmp |
+ |
+#define __HAVE_ARCH_MEMCHR |
+static inline void * memchr(const void * cs,int c,size_t count) |
+{ |
+int d0; |
+register void * __res; |
+if (!count) |
+ return NULL; |
+__asm__ __volatile__( |
+ "repne\n\t" |
+ "scasb\n\t" |
+ "je 1f\n\t" |
+ "movl $1,%0\n" |
+ "1:\tdecl %0" |
+ :"=D" (__res), "=&c" (d0) : "a" (c),"0" (cs),"1" (count)); |
+return __res; |
+} |
+ |
+static inline void * __memset_generic(void * s, char c,size_t count) |
+{ |
+int d0, d1; |
+__asm__ __volatile__( |
+ "rep\n\t" |
+ "stosb" |
+ : "=&c" (d0), "=&D" (d1) |
+ :"a" (c),"1" (s),"0" (count) |
+ :"memory"); |
+return s; |
+} |
+ |
+/* we might want to write optimized versions of these later */ |
+#define __constant_count_memset(s,c,count) __memset_generic((s),(c),(count)) |
+ |
+/* |
+ * memset(x,0,y) is a reasonably common thing to do, so we want to fill |
+ * things 32 bits at a time even when we don't know the size of the |
+ * area at compile-time.. |
+ */ |
+static inline void * __constant_c_memset(void * s, unsigned long c, size_t count) |
+{ |
+int d0, d1; |
+__asm__ __volatile__( |
+ "rep ; stosl\n\t" |
+ "testb $2,%b3\n\t" |
+ "je 1f\n\t" |
+ "stosw\n" |
+ "1:\ttestb $1,%b3\n\t" |
+ "je 2f\n\t" |
+ "stosb\n" |
+ "2:" |
+ : "=&c" (d0), "=&D" (d1) |
+ :"a" (c), "q" (count), "0" (count/4), "1" ((long) s) |
+ :"memory"); |
+return (s); |
+} |
+ |
+/* Added by Gertjan van Wingerde to make minix and sysv module work */ |
+#define __HAVE_ARCH_STRNLEN |
+static inline size_t strnlen(const char * s, size_t count) |
+{ |
+int d0; |
+register int __res; |
+__asm__ __volatile__( |
+ "movl %2,%0\n\t" |
+ "jmp 2f\n" |
+ "1:\tcmpb $0,(%0)\n\t" |
+ "je 3f\n\t" |
+ "incl %0\n" |
+ "2:\tdecl %1\n\t" |
+ "cmpl $-1,%1\n\t" |
+ "jne 1b\n" |
+ "3:\tsubl %2,%0" |
+ :"=a" (__res), "=&d" (d0) |
+ :"c" (s),"1" (count)); |
+return __res; |
+} |
+/* end of additional stuff */ |
+ |
+#define __HAVE_ARCH_STRSTR |
+ |
+extern char *strstr(const char *cs, const char *ct); |
+ |
+/* |
+ * This looks horribly ugly, but the compiler can optimize it totally, |
+ * as we by now know that both pattern and count is constant.. |
+ */ |
+static inline void * __constant_c_and_count_memset(void * s, unsigned long pattern, size_t count) |
+{ |
+ switch (count) { |
+ case 0: |
+ return s; |
+ case 1: |
+ *(unsigned char *)s = pattern; |
+ return s; |
+ case 2: |
+ *(unsigned short *)s = pattern; |
+ return s; |
+ case 3: |
+ *(unsigned short *)s = pattern; |
+ *(2+(unsigned char *)s) = pattern; |
+ return s; |
+ case 4: |
+ *(unsigned long *)s = pattern; |
+ return s; |
+ } |
+#define COMMON(x) \ |
+__asm__ __volatile__( \ |
+ "rep ; stosl" \ |
+ x \ |
+ : "=&c" (d0), "=&D" (d1) \ |
+ : "a" (pattern),"0" (count/4),"1" ((long) s) \ |
+ : "memory") |
+{ |
+ int d0, d1; |
+ switch (count % 4) { |
+ case 0: COMMON(""); return s; |
+ case 1: COMMON("\n\tstosb"); return s; |
+ case 2: COMMON("\n\tstosw"); return s; |
+ default: COMMON("\n\tstosw\n\tstosb"); return s; |
+ } |
+} |
+ |
+#undef COMMON |
+} |
+ |
+#define __constant_c_x_memset(s, c, count) \ |
+(__builtin_constant_p(count) ? \ |
+ __constant_c_and_count_memset((s),(c),(count)) : \ |
+ __constant_c_memset((s),(c),(count))) |
+ |
+#define __memset(s, c, count) \ |
+(__builtin_constant_p(count) ? \ |
+ __constant_count_memset((s),(c),(count)) : \ |
+ __memset_generic((s),(c),(count))) |
+ |
+#define __HAVE_ARCH_MEMSET |
+#define memset(s, c, count) \ |
+(__builtin_constant_p(c) ? \ |
+ __constant_c_x_memset((s),(0x01010101UL*(unsigned char)(c)),(count)) : \ |
+ __memset((s),(c),(count))) |
+ |
+/* |
+ * find the first occurrence of byte 'c', or 1 past the area if none |
+ */ |
+#define __HAVE_ARCH_MEMSCAN |
+static inline void * memscan(void * addr, int c, size_t size) |
+{ |
+ if (!size) |
+ return addr; |
+ __asm__("repnz; scasb\n\t" |
+ "jnz 1f\n\t" |
+ "dec %%edi\n" |
+ "1:" |
+ : "=D" (addr), "=c" (size) |
+ : "0" (addr), "1" (size), "a" (c)); |
+ return addr; |
+} |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif |
Index: linuxc26/include/asm/fcntl.h |
=================================================================== |
--- linuxc26/include/asm/fcntl.h (nonexistent) |
+++ linuxc26/include/asm/fcntl.h (revision 422) |
@@ -0,0 +1,87 @@ |
+#ifndef _I386_FCNTL_H |
+#define _I386_FCNTL_H |
+ |
+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files |
+ located on an ext2 file system */ |
+#define O_ACCMODE 0003 |
+#define O_RDONLY 00 |
+#define O_WRONLY 01 |
+#define O_RDWR 02 |
+#define O_CREAT 0100 /* not fcntl */ |
+#define O_EXCL 0200 /* not fcntl */ |
+#define O_NOCTTY 0400 /* not fcntl */ |
+#define O_TRUNC 01000 /* not fcntl */ |
+#define O_APPEND 02000 |
+#define O_NONBLOCK 04000 |
+#define O_NDELAY O_NONBLOCK |
+#define O_SYNC 010000 |
+#define FASYNC 020000 /* fcntl, for BSD compatibility */ |
+#define O_DIRECT 040000 /* direct disk access hint */ |
+#define O_LARGEFILE 0100000 |
+#define O_DIRECTORY 0200000 /* must be a directory */ |
+#define O_NOFOLLOW 0400000 /* don't follow links */ |
+ |
+#define F_DUPFD 0 /* dup */ |
+#define F_GETFD 1 /* get close_on_exec */ |
+#define F_SETFD 2 /* set/clear close_on_exec */ |
+#define F_GETFL 3 /* get file->f_flags */ |
+#define F_SETFL 4 /* set file->f_flags */ |
+#define F_GETLK 5 |
+#define F_SETLK 6 |
+#define F_SETLKW 7 |
+ |
+#define F_SETOWN 8 /* for sockets. */ |
+#define F_GETOWN 9 /* for sockets. */ |
+#define F_SETSIG 10 /* for sockets. */ |
+#define F_GETSIG 11 /* for sockets. */ |
+ |
+#define F_GETLK64 12 /* using 'struct flock64' */ |
+#define F_SETLK64 13 |
+#define F_SETLKW64 14 |
+ |
+/* for F_[GET|SET]FL */ |
+#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ |
+ |
+/* for posix fcntl() and lockf() */ |
+#define F_RDLCK 0 |
+#define F_WRLCK 1 |
+#define F_UNLCK 2 |
+ |
+/* for old implementation of bsd flock () */ |
+#define F_EXLCK 4 /* or 3 */ |
+#define F_SHLCK 8 /* or 4 */ |
+ |
+/* for leases */ |
+#define F_INPROGRESS 16 |
+ |
+/* operations for bsd flock(), also used by the kernel implementation */ |
+#define LOCK_SH 1 /* shared lock */ |
+#define LOCK_EX 2 /* exclusive lock */ |
+#define LOCK_NB 4 /* or'd with one of the above to prevent |
+ blocking */ |
+#define LOCK_UN 8 /* remove lock */ |
+ |
+#define LOCK_MAND 32 /* This is a mandatory flock */ |
+#define LOCK_READ 64 /* ... Which allows concurrent read operations */ |
+#define LOCK_WRITE 128 /* ... Which allows concurrent write operations */ |
+#define LOCK_RW 192 /* ... Which allows concurrent read & write ops */ |
+ |
+struct flock { |
+ short l_type; |
+ short l_whence; |
+ off_t l_start; |
+ off_t l_len; |
+ pid_t l_pid; |
+}; |
+ |
+struct flock64 { |
+ short l_type; |
+ short l_whence; |
+ loff_t l_start; |
+ loff_t l_len; |
+ pid_t l_pid; |
+}; |
+ |
+#define F_LINUX_SPECIFIC_BASE 1024 |
+ |
+#endif |
Index: linuxc26/include/asm/io.h |
=================================================================== |
--- linuxc26/include/asm/io.h (nonexistent) |
+++ linuxc26/include/asm/io.h (revision 422) |
@@ -0,0 +1,375 @@ |
+#ifndef _ASM_IO_H |
+#define _ASM_IO_H |
+ |
+#include <linux/config.h> |
+ |
+/* |
+ * This file contains the definitions for the x86 IO instructions |
+ * inb/inw/inl/outb/outw/outl and the "string versions" of the same |
+ * (insb/insw/insl/outsb/outsw/outsl). You can also use "pausing" |
+ * versions of the single-IO instructions (inb_p/inw_p/..). |
+ * |
+ * This file is not meant to be obfuscating: it's just complicated |
+ * to (a) handle it all in a way that makes gcc able to optimize it |
+ * as well as possible and (b) trying to avoid writing the same thing |
+ * over and over again with slight variations and possibly making a |
+ * mistake somewhere. |
+ */ |
+ |
+/* |
+ * Thanks to James van Artsdalen for a better timing-fix than |
+ * the two short jumps: using outb's to a nonexistent port seems |
+ * to guarantee better timings even on fast machines. |
+ * |
+ * On the other hand, I'd like to be sure of a non-existent port: |
+ * I feel a bit unsafe about using 0x80 (should be safe, though) |
+ * |
+ * Linus |
+ */ |
+ |
+ /* |
+ * Bit simplified and optimized by Jan Hubicka |
+ * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999. |
+ * |
+ * isa_memset_io, isa_memcpy_fromio, isa_memcpy_toio added, |
+ * isa_read[wl] and isa_write[wl] fixed |
+ * - Arnaldo Carvalho de Melo <acme@conectiva.com.br> |
+ */ |
+ |
+#define IO_SPACE_LIMIT 0xffff |
+ |
+#define XQUAD_PORTIO_BASE 0xfe400000 |
+#define XQUAD_PORTIO_QUAD 0x40000 /* 256k per quad. */ |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/vmalloc.h> |
+ |
+/* |
+ * Temporary debugging check to catch old code using |
+ * unmapped ISA addresses. Will be removed in 2.4. |
+ */ |
+#ifdef CONFIG_DEBUG_IOVIRT |
+ extern void *__io_virt_debug(unsigned long x, const char *file, int line); |
+ #define __io_virt(x) __io_virt_debug((unsigned long)(x), __FILE__, __LINE__) |
+#else |
+ #define __io_virt(x) ((void *)(x)) |
+#endif |
+ |
+/** |
+ * virt_to_phys - map virtual addresses to physical |
+ * @address: address to remap |
+ * |
+ * The returned physical address is the physical (CPU) mapping for |
+ * the memory address given. It is only valid to use this function on |
+ * addresses directly mapped or allocated via kmalloc. |
+ * |
+ * This function does not give bus mappings for DMA transfers. In |
+ * almost all conceivable cases a device driver should not be using |
+ * this function |
+ */ |
+ |
+static inline unsigned long virt_to_phys(volatile void * address) |
+{ |
+ return __pa(address); |
+} |
+ |
+/** |
+ * phys_to_virt - map physical address to virtual |
+ * @address: address to remap |
+ * |
+ * The returned virtual address is a current CPU mapping for |
+ * the memory address given. It is only valid to use this function on |
+ * addresses that have a kernel mapping |
+ * |
+ * This function does not handle bus mappings for DMA transfers. In |
+ * almost all conceivable cases a device driver should not be using |
+ * this function |
+ */ |
+ |
+static inline void * phys_to_virt(unsigned long address) |
+{ |
+ return __va(address); |
+} |
+ |
+/* |
+ * Change "struct page" to physical address. |
+ */ |
+#define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) |
+ |
+extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags); |
+ |
+/** |
+ * ioremap - map bus memory into CPU space |
+ * @offset: bus address of the memory |
+ * @size: size of the resource to map |
+ * |
+ * ioremap performs a platform specific sequence of operations to |
+ * make bus memory CPU accessible via the readb/readw/readl/writeb/ |
+ * writew/writel functions and the other mmio helpers. The returned |
+ * address is not guaranteed to be usable directly as a virtual |
+ * address. |
+ */ |
+ |
+static inline void * ioremap (unsigned long offset, unsigned long size) |
+{ |
+ return __ioremap(offset, size, 0); |
+} |
+ |
+extern void * ioremap_nocache (unsigned long offset, unsigned long size); |
+extern void iounmap(void *addr); |
+ |
+/* |
+ * bt_ioremap() and bt_iounmap() are for temporary early boot-time |
+ * mappings, before the real ioremap() is functional. |
+ * A boot-time mapping is currently limited to at most 16 pages. |
+ */ |
+extern void *bt_ioremap(unsigned long offset, unsigned long size); |
+extern void bt_iounmap(void *addr, unsigned long size); |
+ |
+/* |
+ * ISA I/O bus memory addresses are 1:1 with the physical address. |
+ */ |
+#define isa_virt_to_bus virt_to_phys |
+#define isa_page_to_bus page_to_phys |
+#define isa_bus_to_virt phys_to_virt |
+ |
+/* |
+ * However PCI ones are not necessarily 1:1 and therefore these interfaces |
+ * are forbidden in portable PCI drivers. |
+ * |
+ * Allow them on x86 for legacy drivers, though. |
+ */ |
+#define virt_to_bus virt_to_phys |
+#define bus_to_virt phys_to_virt |
+ |
+/* |
+ * readX/writeX() are used to access memory mapped devices. On some |
+ * architectures the memory mapped IO stuff needs to be accessed |
+ * differently. On the x86 architecture, we just read/write the |
+ * memory location directly. |
+ */ |
+ |
+#define readb(addr) (*(volatile unsigned char *) __io_virt(addr)) |
+#define readw(addr) (*(volatile unsigned short *) __io_virt(addr)) |
+#define readl(addr) (*(volatile unsigned int *) __io_virt(addr)) |
+#define __raw_readb readb |
+#define __raw_readw readw |
+#define __raw_readl readl |
+ |
+#define writeb(b,addr) (*(volatile unsigned char *) __io_virt(addr) = (b)) |
+#define writew(b,addr) (*(volatile unsigned short *) __io_virt(addr) = (b)) |
+#define writel(b,addr) (*(volatile unsigned int *) __io_virt(addr) = (b)) |
+#define __raw_writeb writeb |
+#define __raw_writew writew |
+#define __raw_writel writel |
+ |
+#define memset_io(a,b,c) memset(__io_virt(a),(b),(c)) |
+#define memcpy_fromio(a,b,c) __memcpy((a),__io_virt(b),(c)) |
+#define memcpy_toio(a,b,c) __memcpy(__io_virt(a),(b),(c)) |
+ |
+/* |
+ * ISA space is 'always mapped' on a typical x86 system, no need to |
+ * explicitly ioremap() it. The fact that the ISA IO space is mapped |
+ * to PAGE_OFFSET is pure coincidence - it does not mean ISA values |
+ * are physical addresses. The following constant pointer can be |
+ * used as the IO-area pointer (it can be iounmapped as well, so the |
+ * analogy with PCI is quite large): |
+ */ |
+#define __ISA_IO_base ((char *)(PAGE_OFFSET)) |
+ |
+#define isa_readb(a) readb(__ISA_IO_base + (a)) |
+#define isa_readw(a) readw(__ISA_IO_base + (a)) |
+#define isa_readl(a) readl(__ISA_IO_base + (a)) |
+#define isa_writeb(b,a) writeb(b,__ISA_IO_base + (a)) |
+#define isa_writew(w,a) writew(w,__ISA_IO_base + (a)) |
+#define isa_writel(l,a) writel(l,__ISA_IO_base + (a)) |
+#define isa_memset_io(a,b,c) memset_io(__ISA_IO_base + (a),(b),(c)) |
+#define isa_memcpy_fromio(a,b,c) memcpy_fromio((a),__ISA_IO_base + (b),(c)) |
+#define isa_memcpy_toio(a,b,c) memcpy_toio(__ISA_IO_base + (a),(b),(c)) |
+ |
+ |
+/* |
+ * Again, i386 does not require mem IO specific function. |
+ */ |
+ |
+#define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),__io_virt(b),(c),(d)) |
+#define isa_eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),__io_virt(__ISA_IO_base + (b)),(c),(d)) |
+ |
+/** |
+ * check_signature - find BIOS signatures |
+ * @io_addr: mmio address to check |
+ * @signature: signature block |
+ * @length: length of signature |
+ * |
+ * Perform a signature comparison with the mmio address io_addr. This |
+ * address should have been obtained by ioremap. |
+ * Returns 1 on a match. |
+ */ |
+ |
+static inline int check_signature(unsigned long io_addr, |
+ const unsigned char *signature, int length) |
+{ |
+ int retval = 0; |
+ do { |
+ if (readb(io_addr) != *signature) |
+ goto out; |
+ io_addr++; |
+ signature++; |
+ length--; |
+ } while (length); |
+ retval = 1; |
+out: |
+ return retval; |
+} |
+ |
+/** |
+ * isa_check_signature - find BIOS signatures |
+ * @io_addr: mmio address to check |
+ * @signature: signature block |
+ * @length: length of signature |
+ * |
+ * Perform a signature comparison with the ISA mmio address io_addr. |
+ * Returns 1 on a match. |
+ * |
+ * This function is deprecated. New drivers should use ioremap and |
+ * check_signature. |
+ */ |
+ |
+ |
+static inline int isa_check_signature(unsigned long io_addr, |
+ const unsigned char *signature, int length) |
+{ |
+ int retval = 0; |
+ do { |
+ if (isa_readb(io_addr) != *signature) |
+ goto out; |
+ io_addr++; |
+ signature++; |
+ length--; |
+ } while (length); |
+ retval = 1; |
+out: |
+ return retval; |
+} |
+ |
+/* |
+ * Cache management |
+ * |
+ * This needed for two cases |
+ * 1. Out of order aware processors |
+ * 2. Accidentally out of order processors (PPro errata #51) |
+ */ |
+ |
+#if defined(CONFIG_X86_OOSTORE) || defined(CONFIG_X86_PPRO_FENCE) |
+ |
+static inline void flush_write_buffers(void) |
+{ |
+ __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory"); |
+} |
+ |
+#define dma_cache_inv(_start,_size) flush_write_buffers() |
+#define dma_cache_wback(_start,_size) flush_write_buffers() |
+#define dma_cache_wback_inv(_start,_size) flush_write_buffers() |
+ |
+#else |
+ |
+/* Nothing to do */ |
+ |
+#define dma_cache_inv(_start,_size) do { } while (0) |
+#define dma_cache_wback(_start,_size) do { } while (0) |
+#define dma_cache_wback_inv(_start,_size) do { } while (0) |
+#define flush_write_buffers() |
+ |
+#endif |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#ifdef SLOW_IO_BY_JUMPING |
+#define __SLOW_DOWN_IO "jmp 1f; 1: jmp 1f; 1:" |
+#else |
+#define __SLOW_DOWN_IO "outb %%al,$0x80;" |
+#endif |
+ |
+static inline void slow_down_io(void) { |
+ __asm__ __volatile__( |
+ __SLOW_DOWN_IO |
+#ifdef REALLY_SLOW_IO |
+ __SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO |
+#endif |
+ : : ); |
+} |
+ |
+#ifdef CONFIG_X86_NUMAQ |
+extern void *xquad_portio; /* Where the IO area was mapped */ |
+#define XQUAD_PORT_ADDR(port, quad) (xquad_portio + (XQUAD_PORTIO_QUAD*quad) + port) |
+#define __BUILDIO(bwl,bw,type) \ |
+static inline void out##bwl##_quad(unsigned type value, int port, int quad) { \ |
+ if (xquad_portio) \ |
+ write##bwl(value, XQUAD_PORT_ADDR(port, quad)); \ |
+ else \ |
+ out##bwl##_local(value, port); \ |
+} \ |
+static inline void out##bwl(unsigned type value, int port) { \ |
+ out##bwl##_quad(value, port, 0); \ |
+} \ |
+static inline unsigned type in##bwl##_quad(int port, int quad) { \ |
+ if (xquad_portio) \ |
+ return read##bwl(XQUAD_PORT_ADDR(port, quad)); \ |
+ else \ |
+ return in##bwl##_local(port); \ |
+} \ |
+static inline unsigned type in##bwl(int port) { \ |
+ return in##bwl##_quad(port, 0); \ |
+} |
+#else |
+#define __BUILDIO(bwl,bw,type) \ |
+static inline void out##bwl(unsigned type value, int port) { \ |
+ out##bwl##_local(value, port); \ |
+} \ |
+static inline unsigned type in##bwl(int port) { \ |
+ return in##bwl##_local(port); \ |
+} |
+#endif |
+ |
+ |
+#define BUILDIO(bwl,bw,type) \ |
+static inline void out##bwl##_local(unsigned type value, int port) { \ |
+ __asm__ __volatile__("out" #bwl " %" #bw "0, %w1" : : "a"(value), "Nd"(port)); \ |
+} \ |
+static inline unsigned type in##bwl##_local(int port) { \ |
+ unsigned type value; \ |
+ __asm__ __volatile__("in" #bwl " %w1, %" #bw "0" : "=a"(value) : "Nd"(port)); \ |
+ return value; \ |
+} \ |
+static inline void out##bwl##_local_p(unsigned type value, int port) { \ |
+ out##bwl##_local(value, port); \ |
+ slow_down_io(); \ |
+} \ |
+static inline unsigned type in##bwl##_local_p(int port) { \ |
+ unsigned type value = in##bwl##_local(port); \ |
+ slow_down_io(); \ |
+ return value; \ |
+} \ |
+__BUILDIO(bwl,bw,type) \ |
+static inline void out##bwl##_p(unsigned type value, int port) { \ |
+ out##bwl(value, port); \ |
+ slow_down_io(); \ |
+} \ |
+static inline unsigned type in##bwl##_p(int port) { \ |
+ unsigned type value = in##bwl(port); \ |
+ slow_down_io(); \ |
+ return value; \ |
+} \ |
+static inline void outs##bwl(int port, const void *addr, unsigned long count) { \ |
+ __asm__ __volatile__("rep; outs" #bwl : "+S"(addr), "+c"(count) : "d"(port)); \ |
+} \ |
+static inline void ins##bwl(int port, void *addr, unsigned long count) { \ |
+ __asm__ __volatile__("rep; ins" #bwl : "+D"(addr), "+c"(count) : "d"(port)); \ |
+} |
+ |
+BUILDIO(b,b,char) |
+BUILDIO(w,w,short) |
+BUILDIO(l,,int) |
+ |
+#endif |
Index: linuxc26/include/asm/memblk.h |
=================================================================== |
--- linuxc26/include/asm/memblk.h (nonexistent) |
+++ linuxc26/include/asm/memblk.h (revision 422) |
@@ -0,0 +1,23 @@ |
+#ifndef _ASM_I386_MEMBLK_H_ |
+#define _ASM_I386_MEMBLK_H_ |
+ |
+#include <linux/device.h> |
+#include <linux/mmzone.h> |
+#include <linux/memblk.h> |
+#include <linux/topology.h> |
+ |
+#include <asm/node.h> |
+ |
+struct i386_memblk { |
+ struct memblk memblk; |
+}; |
+extern struct i386_memblk memblk_devices[MAX_NR_MEMBLKS]; |
+ |
+static inline int arch_register_memblk(int num){ |
+ int p_node = memblk_to_node(num); |
+ |
+ return register_memblk(&memblk_devices[num].memblk, num, |
+ &node_devices[p_node].node); |
+} |
+ |
+#endif /* _ASM_I386_MEMBLK_H_ */ |
Index: linuxc26/include/asm/srat.h |
=================================================================== |
--- linuxc26/include/asm/srat.h (nonexistent) |
+++ linuxc26/include/asm/srat.h (revision 422) |
@@ -0,0 +1,37 @@ |
+/* |
+ * Some of the code in this file has been gleaned from the 64 bit |
+ * discontigmem support code base. |
+ * |
+ * Copyright (C) 2002, IBM Corp. |
+ * |
+ * 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, GOOD TITLE or |
+ * NON INFRINGEMENT. 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. |
+ * |
+ * Send feedback to Pat Gaughen <gone@us.ibm.com> |
+ */ |
+ |
+#ifndef _ASM_SRAT_H_ |
+#define _ASM_SRAT_H_ |
+ |
+#ifndef CONFIG_ACPI_SRAT |
+#error CONFIG_ACPI_SRAT not defined, and srat.h header has been included |
+#endif |
+ |
+extern int get_memcfg_from_srat(void); |
+extern unsigned long *get_zholes_size(int); |
+ |
+#endif /* _ASM_SRAT_H_ */ |
Index: linuxc26/include/asm/stat.h |
=================================================================== |
--- linuxc26/include/asm/stat.h (nonexistent) |
+++ linuxc26/include/asm/stat.h (revision 422) |
@@ -0,0 +1,78 @@ |
+#ifndef _I386_STAT_H |
+#define _I386_STAT_H |
+ |
+struct __old_kernel_stat { |
+ unsigned short st_dev; |
+ unsigned short st_ino; |
+ unsigned short st_mode; |
+ unsigned short st_nlink; |
+ unsigned short st_uid; |
+ unsigned short st_gid; |
+ unsigned short st_rdev; |
+ unsigned long st_size; |
+ unsigned long st_atime; |
+ unsigned long st_mtime; |
+ unsigned long st_ctime; |
+}; |
+ |
+struct stat { |
+ unsigned long st_dev; |
+ unsigned long st_ino; |
+ unsigned short st_mode; |
+ unsigned short st_nlink; |
+ unsigned short st_uid; |
+ unsigned short st_gid; |
+ unsigned long st_rdev; |
+ unsigned long st_size; |
+ unsigned long st_blksize; |
+ unsigned long st_blocks; |
+ unsigned long st_atime; |
+ unsigned long st_atime_nsec; |
+ unsigned long st_mtime; |
+ unsigned long st_mtime_nsec; |
+ unsigned long st_ctime; |
+ unsigned long st_ctime_nsec; |
+ unsigned long __unused4; |
+ unsigned long __unused5; |
+}; |
+ |
+/* This matches struct stat64 in glibc2.1, hence the absolutely |
+ * insane amounts of padding around dev_t's. |
+ */ |
+struct stat64 { |
+ unsigned long long st_dev; |
+ unsigned char __pad0[4]; |
+ |
+#define STAT64_HAS_BROKEN_ST_INO 1 |
+ unsigned long __st_ino; |
+ |
+ unsigned int st_mode; |
+ unsigned int st_nlink; |
+ |
+ unsigned long st_uid; |
+ unsigned long st_gid; |
+ |
+ unsigned long long st_rdev; |
+ unsigned char __pad3[4]; |
+ |
+ long long st_size; |
+ unsigned long st_blksize; |
+ |
+ unsigned long st_blocks; /* Number 512-byte blocks allocated. */ |
+ unsigned long __pad4; /* future possible st_blocks high bits */ |
+ |
+ unsigned long st_atime; |
+ unsigned long st_atime_nsec; |
+ |
+ unsigned long st_mtime; |
+ unsigned int st_mtime_nsec; |
+ |
+ unsigned long st_ctime; |
+ unsigned long st_ctime_nsec; |
+ |
+ unsigned long long st_ino; |
+}; |
+ |
+#define STAT_HAVE_NSEC 1 |
+ |
+#endif |
Index: linuxc26/include/asm/page.h |
=================================================================== |
--- linuxc26/include/asm/page.h (nonexistent) |
+++ linuxc26/include/asm/page.h (revision 422) |
@@ -0,0 +1,144 @@ |
+#ifndef _I386_PAGE_H |
+#define _I386_PAGE_H |
+ |
+/* PAGE_SHIFT determines the page size */ |
+#define PAGE_SHIFT 12 |
+#define PAGE_SIZE (1UL << PAGE_SHIFT) |
+#define PAGE_MASK (~(PAGE_SIZE-1)) |
+ |
+#define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1)) |
+#define LARGE_PAGE_SIZE (1UL << PMD_SHIFT) |
+ |
+#ifdef __KERNEL__ |
+#ifndef __ASSEMBLY__ |
+ |
+#include <linux/config.h> |
+ |
+#ifdef CONFIG_X86_USE_3DNOW |
+ |
+#include <asm/mmx.h> |
+ |
+#define clear_page(page) mmx_clear_page((void *)(page)) |
+#define copy_page(to,from) mmx_copy_page(to,from) |
+ |
+#else |
+ |
+/* |
+ * On older X86 processors it's not a win to use MMX here it seems. |
+ * Maybe the K6-III ? |
+ */ |
+ |
+#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) |
+#define copy_page(to,from) memcpy((void *)(to), (void *)(from), PAGE_SIZE) |
+ |
+#endif |
+ |
+#define clear_user_page(page, vaddr, pg) clear_page(page) |
+#define copy_user_page(to, from, vaddr, pg) copy_page(to, from) |
+ |
+/* |
+ * These are used to make use of C type-checking.. |
+ */ |
+#ifdef CONFIG_X86_PAE |
+typedef struct { unsigned long pte_low, pte_high; } pte_t; |
+typedef struct { unsigned long long pmd; } pmd_t; |
+typedef struct { unsigned long long pgd; } pgd_t; |
+#define pte_val(x) ((x).pte_low | ((unsigned long long)(x).pte_high << 32)) |
+#define HPAGE_SHIFT 21 |
+#else |
+typedef struct { unsigned long pte_low; } pte_t; |
+typedef struct { unsigned long pmd; } pmd_t; |
+typedef struct { unsigned long pgd; } pgd_t; |
+#define boot_pte_t pte_t /* or would you rather have a typedef */ |
+#define pte_val(x) ((x).pte_low) |
+#define HPAGE_SHIFT 22 |
+#endif |
+#define PTE_MASK PAGE_MASK |
+ |
+#ifdef CONFIG_HUGETLB_PAGE |
+#define HPAGE_SIZE ((1UL) << HPAGE_SHIFT) |
+#define HPAGE_MASK (~(HPAGE_SIZE - 1)) |
+#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) |
+#endif |
+ |
+typedef struct { unsigned long pgprot; } pgprot_t; |
+ |
+#define pmd_val(x) ((x).pmd) |
+#define pgd_val(x) ((x).pgd) |
+#define pgprot_val(x) ((x).pgprot) |
+ |
+#define __pte(x) ((pte_t) { (x) } ) |
+#define __pmd(x) ((pmd_t) { (x) } ) |
+#define __pgd(x) ((pgd_t) { (x) } ) |
+#define __pgprot(x) ((pgprot_t) { (x) } ) |
+ |
+#endif /* !__ASSEMBLY__ */ |
+ |
+/* to align the pointer to the (next) page boundary */ |
+#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) |
+ |
+/* |
+ * This handles the memory map.. We could make this a config |
+ * option, but too many people screw it up, and too few need |
+ * it. |
+ * |
+ * A __PAGE_OFFSET of 0xC0000000 means that the kernel has |
+ * a virtual address space of one gigabyte, which limits the |
+ * amount of physical memory you can use to about 950MB. |
+ * |
+ * If you want more physical memory than this then see the CONFIG_HIGHMEM4G |
+ * and CONFIG_HIGHMEM64G options in the kernel configuration. |
+ */ |
+ |
+/* |
+ * This much address space is reserved for vmalloc() and iomap() |
+ * as well as fixmap mappings. |
+ */ |
+#define __VMALLOC_RESERVE (128 << 20) |
+ |
+#ifndef __ASSEMBLY__ |
+ |
+/* Pure 2^n version of get_order */ |
+static __inline__ int get_order(unsigned long size) |
+{ |
+ int order; |
+ |
+ size = (size-1) >> (PAGE_SHIFT-1); |
+ order = -1; |
+ do { |
+ size >>= 1; |
+ order++; |
+ } while (size); |
+ return order; |
+} |
+ |
+#endif /* __ASSEMBLY__ */ |
+ |
+#ifdef __ASSEMBLY__ |
+#define __PAGE_OFFSET (0xC0000000) |
+#else |
+#define __PAGE_OFFSET (0xC0000000UL) |
+#endif |
+ |
+ |
+#define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET) |
+#define VMALLOC_RESERVE ((unsigned long)__VMALLOC_RESERVE) |
+#define MAXMEM (-__PAGE_OFFSET-__VMALLOC_RESERVE) |
+#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET) |
+#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) |
+#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) |
+#ifndef CONFIG_DISCONTIGMEM |
+#define pfn_to_page(pfn) (mem_map + (pfn)) |
+#define page_to_pfn(page) ((unsigned long)((page) - mem_map)) |
+#define pfn_valid(pfn) ((pfn) < max_mapnr) |
+#endif /* !CONFIG_DISCONTIGMEM */ |
+#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) |
+ |
+#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) |
+ |
+#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ |
+ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* _I386_PAGE_H */ |
Index: linuxc26/include/asm/acpi.h |
=================================================================== |
--- linuxc26/include/asm/acpi.h (nonexistent) |
+++ linuxc26/include/asm/acpi.h (revision 422) |
@@ -0,0 +1,158 @@ |
+/* |
+ * asm-i386/acpi.h |
+ * |
+ * Copyright (C) 2001 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> |
+ * Copyright (C) 2001 Patrick Mochel <mochel@osdl.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 _ASM_ACPI_H |
+#define _ASM_ACPI_H |
+ |
+#ifdef __KERNEL__ |
+ |
+#define COMPILER_DEPENDENT_INT64 long long |
+#define COMPILER_DEPENDENT_UINT64 unsigned long long |
+ |
+/* |
+ * Calling conventions: |
+ * |
+ * ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads) |
+ * ACPI_EXTERNAL_XFACE - External ACPI interfaces |
+ * ACPI_INTERNAL_XFACE - Internal ACPI interfaces |
+ * ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces |
+ */ |
+#define ACPI_SYSTEM_XFACE |
+#define ACPI_EXTERNAL_XFACE |
+#define ACPI_INTERNAL_XFACE |
+#define ACPI_INTERNAL_VAR_XFACE |
+ |
+/* Asm macros */ |
+ |
+#define ACPI_ASM_MACROS |
+#define BREAKPOINT3 |
+#define ACPI_DISABLE_IRQS() local_irq_disable() |
+#define ACPI_ENABLE_IRQS() local_irq_enable() |
+#define ACPI_FLUSH_CPU_CACHE() wbinvd() |
+ |
+/* |
+ * A brief explanation as GNU inline assembly is a bit hairy |
+ * %0 is the output parameter in EAX ("=a") |
+ * %1 and %2 are the input parameters in ECX ("c") |
+ * and an immediate value ("i") respectively |
+ * All actual register references are preceded with "%%" as in "%%edx" |
+ * Immediate values in the assembly are preceded by "$" as in "$0x1" |
+ * The final asm parameter are the operation altered non-output registers. |
+ */ |
+#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \ |
+ do { \ |
+ int dummy; \ |
+ asm("1: movl (%1),%%eax;" \ |
+ "movl %%eax,%%edx;" \ |
+ "andl %2,%%edx;" \ |
+ "btsl $0x1,%%edx;" \ |
+ "adcl $0x0,%%edx;" \ |
+ "lock; cmpxchgl %%edx,(%1);" \ |
+ "jnz 1b;" \ |
+ "cmpb $0x3,%%dl;" \ |
+ "sbbl %%eax,%%eax" \ |
+ :"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~1L):"dx"); \ |
+ } while(0) |
+ |
+#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \ |
+ do { \ |
+ int dummy; \ |
+ asm("1: movl (%1),%%eax;" \ |
+ "movl %%eax,%%edx;" \ |
+ "andl %2,%%edx;" \ |
+ "lock; cmpxchgl %%edx,(%1);" \ |
+ "jnz 1b;" \ |
+ "andl $0x1,%%eax" \ |
+ :"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~3L):"dx"); \ |
+ } while(0) |
+ |
+ |
+/* |
+ * Math helper asm macros |
+ */ |
+#define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \ |
+ asm("divl %2;" \ |
+ :"=a"(q32), "=d"(r32) \ |
+ :"r"(d32), \ |
+ "0"(n_lo), "1"(n_hi)) |
+ |
+ |
+#define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \ |
+ asm("shrl $1,%2;" \ |
+ "rcrl $1,%3;" \ |
+ :"=r"(n_hi), "=r"(n_lo) \ |
+ :"0"(n_hi), "1"(n_lo)) |
+ |
+ |
+#ifdef CONFIG_ACPI_BOOT |
+extern int acpi_lapic; |
+extern int acpi_ioapic; |
+ |
+ |
+/* Fixmap pages to reserve for ACPI boot-time tables (see fixmap.h) */ |
+#define FIX_ACPI_PAGES 4 |
+ |
+#ifdef CONFIG_X86_IO_APIC |
+extern int skip_ioapic_setup; |
+ |
+static inline void disable_ioapic_setup(void) |
+{ |
+ skip_ioapic_setup = 1; |
+} |
+ |
+static inline int ioapic_setup_disabled(void) |
+{ |
+ return skip_ioapic_setup; |
+} |
+ |
+#else |
+static inline void disable_ioapic_setup(void) |
+{ } |
+ |
+#endif |
+ |
+#else /* CONFIG_ACPI_BOOT */ |
+# define acpi_lapic 0 |
+# define acpi_ioapic 0 |
+ |
+#endif |
+ |
+#ifdef CONFIG_ACPI_SLEEP |
+ |
+/* routines for saving/restoring kernel state */ |
+extern int acpi_save_state_mem(void); |
+extern int acpi_save_state_disk(void); |
+extern void acpi_restore_state_mem(void); |
+ |
+extern unsigned long acpi_wakeup_address; |
+ |
+/* early initialization routine */ |
+extern void acpi_reserve_bootmem(void); |
+ |
+#endif /*CONFIG_ACPI_SLEEP*/ |
+ |
+#endif /*__KERNEL__*/ |
+ |
+#endif /*_ASM_ACPI_H*/ |
Index: linuxc26/include/asm/serial.h |
=================================================================== |
--- linuxc26/include/asm/serial.h (nonexistent) |
+++ linuxc26/include/asm/serial.h (revision 422) |
@@ -0,0 +1,137 @@ |
+/* |
+ * include/asm-i386/serial.h |
+ */ |
+ |
+#include <linux/config.h> |
+ |
+/* |
+ * This assumes you have a 1.8432 MHz clock for your UART. |
+ * |
+ * It'd be nice if someone built a serial card with a 24.576 MHz |
+ * clock, since the 16550A is capable of handling a top speed of 1.5 |
+ * megabits/second; but this requires the faster clock. |
+ */ |
+#define BASE_BAUD ( 1843200 / 16 ) |
+ |
+/* Standard COM flags (except for COM4, because of the 8514 problem) */ |
+#ifdef CONFIG_SERIAL_DETECT_IRQ |
+#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ) |
+#define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ) |
+#else |
+#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST) |
+#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF |
+#endif |
+ |
+#ifdef CONFIG_SERIAL_MANY_PORTS |
+#define FOURPORT_FLAGS ASYNC_FOURPORT |
+#define ACCENT_FLAGS 0 |
+#define BOCA_FLAGS 0 |
+#define HUB6_FLAGS 0 |
+#endif |
+ |
+#define MCA_COM_FLAGS (STD_COM_FLAGS|ASYNC_BOOT_ONLYMCA) |
+ |
+/* |
+ * The following define the access methods for the HUB6 card. All |
+ * access is through two ports for all 24 possible chips. The card is |
+ * selected through the high 2 bits, the port on that card with the |
+ * "middle" 3 bits, and the register on that port with the bottom |
+ * 3 bits. |
+ * |
+ * While the access port and interrupt is configurable, the default |
+ * port locations are 0x302 for the port control register, and 0x303 |
+ * for the data read/write register. Normally, the interrupt is at irq3 |
+ * but can be anything from 3 to 7 inclusive. Note that using 3 will |
+ * require disabling com2. |
+ */ |
+ |
+#define C_P(card,port) (((card)<<6|(port)<<3) + 1) |
+ |
+#ifndef CONFIG_X86_PC9800 |
+#define STD_SERIAL_PORT_DEFNS \ |
+ /* UART CLK PORT IRQ FLAGS */ \ |
+ { 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \ |
+ { 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \ |
+ { 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \ |
+ { 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */ |
+#else |
+#define STD_SERIAL_PORT_DEFNS \ |
+ /* UART CLK PORT IRQ FLAGS */ \ |
+ { 0, BASE_BAUD, 0x30, 4, STD_COM_FLAGS }, /* ttyS0 */ \ |
+ { 0, BASE_BAUD, 0x238, 5, STD_COM_FLAGS }, /* ttyS1 */ |
+#endif /* CONFIG_X86_PC9800 */ |
+ |
+ |
+#ifdef CONFIG_SERIAL_MANY_PORTS |
+#define EXTRA_SERIAL_PORT_DEFNS \ |
+ { 0, BASE_BAUD, 0x1A0, 9, FOURPORT_FLAGS }, /* ttyS4 */ \ |
+ { 0, BASE_BAUD, 0x1A8, 9, FOURPORT_FLAGS }, /* ttyS5 */ \ |
+ { 0, BASE_BAUD, 0x1B0, 9, FOURPORT_FLAGS }, /* ttyS6 */ \ |
+ { 0, BASE_BAUD, 0x1B8, 9, FOURPORT_FLAGS }, /* ttyS7 */ \ |
+ { 0, BASE_BAUD, 0x2A0, 5, FOURPORT_FLAGS }, /* ttyS8 */ \ |
+ { 0, BASE_BAUD, 0x2A8, 5, FOURPORT_FLAGS }, /* ttyS9 */ \ |
+ { 0, BASE_BAUD, 0x2B0, 5, FOURPORT_FLAGS }, /* ttyS10 */ \ |
+ { 0, BASE_BAUD, 0x2B8, 5, FOURPORT_FLAGS }, /* ttyS11 */ \ |
+ { 0, BASE_BAUD, 0x330, 4, ACCENT_FLAGS }, /* ttyS12 */ \ |
+ { 0, BASE_BAUD, 0x338, 4, ACCENT_FLAGS }, /* ttyS13 */ \ |
+ { 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS14 (spare) */ \ |
+ { 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS15 (spare) */ \ |
+ { 0, BASE_BAUD, 0x100, 12, BOCA_FLAGS }, /* ttyS16 */ \ |
+ { 0, BASE_BAUD, 0x108, 12, BOCA_FLAGS }, /* ttyS17 */ \ |
+ { 0, BASE_BAUD, 0x110, 12, BOCA_FLAGS }, /* ttyS18 */ \ |
+ { 0, BASE_BAUD, 0x118, 12, BOCA_FLAGS }, /* ttyS19 */ \ |
+ { 0, BASE_BAUD, 0x120, 12, BOCA_FLAGS }, /* ttyS20 */ \ |
+ { 0, BASE_BAUD, 0x128, 12, BOCA_FLAGS }, /* ttyS21 */ \ |
+ { 0, BASE_BAUD, 0x130, 12, BOCA_FLAGS }, /* ttyS22 */ \ |
+ { 0, BASE_BAUD, 0x138, 12, BOCA_FLAGS }, /* ttyS23 */ \ |
+ { 0, BASE_BAUD, 0x140, 12, BOCA_FLAGS }, /* ttyS24 */ \ |
+ { 0, BASE_BAUD, 0x148, 12, BOCA_FLAGS }, /* ttyS25 */ \ |
+ { 0, BASE_BAUD, 0x150, 12, BOCA_FLAGS }, /* ttyS26 */ \ |
+ { 0, BASE_BAUD, 0x158, 12, BOCA_FLAGS }, /* ttyS27 */ \ |
+ { 0, BASE_BAUD, 0x160, 12, BOCA_FLAGS }, /* ttyS28 */ \ |
+ { 0, BASE_BAUD, 0x168, 12, BOCA_FLAGS }, /* ttyS29 */ \ |
+ { 0, BASE_BAUD, 0x170, 12, BOCA_FLAGS }, /* ttyS30 */ \ |
+ { 0, BASE_BAUD, 0x178, 12, BOCA_FLAGS }, /* ttyS31 */ |
+#else |
+#define EXTRA_SERIAL_PORT_DEFNS |
+#endif |
+ |
+/* You can have up to four HUB6's in the system, but I've only |
+ * included two cards here for a total of twelve ports. |
+ */ |
+#if (defined(CONFIG_HUB6) && defined(CONFIG_SERIAL_MANY_PORTS)) |
+#define HUB6_SERIAL_PORT_DFNS \ |
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,0) }, /* ttyS32 */ \ |
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,1) }, /* ttyS33 */ \ |
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,2) }, /* ttyS34 */ \ |
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,3) }, /* ttyS35 */ \ |
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,4) }, /* ttyS36 */ \ |
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,5) }, /* ttyS37 */ \ |
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,0) }, /* ttyS38 */ \ |
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,1) }, /* ttyS39 */ \ |
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,2) }, /* ttyS40 */ \ |
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,3) }, /* ttyS41 */ \ |
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,4) }, /* ttyS42 */ \ |
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,5) }, /* ttyS43 */ |
+#else |
+#define HUB6_SERIAL_PORT_DFNS |
+#endif |
+ |
+#ifdef CONFIG_MCA |
+#define MCA_SERIAL_PORT_DFNS \ |
+ { 0, BASE_BAUD, 0x3220, 3, MCA_COM_FLAGS }, \ |
+ { 0, BASE_BAUD, 0x3228, 3, MCA_COM_FLAGS }, \ |
+ { 0, BASE_BAUD, 0x4220, 3, MCA_COM_FLAGS }, \ |
+ { 0, BASE_BAUD, 0x4228, 3, MCA_COM_FLAGS }, \ |
+ { 0, BASE_BAUD, 0x5220, 3, MCA_COM_FLAGS }, \ |
+ { 0, BASE_BAUD, 0x5228, 3, MCA_COM_FLAGS }, |
+#else |
+#define MCA_SERIAL_PORT_DFNS |
+#endif |
+ |
+#define SERIAL_PORT_DFNS \ |
+ STD_SERIAL_PORT_DEFNS \ |
+ EXTRA_SERIAL_PORT_DEFNS \ |
+ HUB6_SERIAL_PORT_DFNS \ |
+ MCA_SERIAL_PORT_DFNS |
+ |
Index: linuxc26/include/asm/upd4990a.h |
=================================================================== |
--- linuxc26/include/asm/upd4990a.h (nonexistent) |
+++ linuxc26/include/asm/upd4990a.h (revision 422) |
@@ -0,0 +1,52 @@ |
+/* |
+ * Architecture dependent definitions |
+ * for NEC uPD4990A serial I/O real-time clock. |
+ * |
+ * Copyright 2001 TAKAI Kousuke <tak@kmc.kyoto-u.ac.jp> |
+ * Kyoto University Microcomputer Club (KMC). |
+ * |
+ * References: |
+ * uPD4990A serial I/O real-time clock users' manual (Japanese) |
+ * No. S12828JJ4V0UM00 (4th revision), NEC Corporation, 1999. |
+ */ |
+ |
+#ifndef _ASM_I386_uPD4990A_H |
+#define _ASM_I386_uPD4990A_H |
+ |
+#include <asm/io.h> |
+ |
+#define UPD4990A_IO (0x0020) |
+#define UPD4990A_IO_DATAOUT (0x0033) |
+ |
+#define UPD4990A_OUTPUT_DATA_CLK(data, clk) \ |
+ outb((((data) & 1) << 5) | (((clk) & 1) << 4) \ |
+ | UPD4990A_PAR_SERIAL_MODE, UPD4990A_IO) |
+ |
+#define UPD4990A_OUTPUT_CLK(clk) UPD4990A_OUTPUT_DATA_CLK(0, (clk)) |
+ |
+#define UPD4990A_OUTPUT_STROBE(stb) \ |
+ outb(((stb) << 3) | UPD4990A_PAR_SERIAL_MODE, UPD4990A_IO) |
+ |
+/* |
+ * Note: udelay() is *not* usable for UPD4990A_DELAY because |
+ * the Linux kernel reads uPD4990A to set up system clock |
+ * before calibrating delay... |
+ */ |
+#define UPD4990A_DELAY(usec) \ |
+ do { \ |
+ if (__builtin_constant_p((usec)) && (usec) < 5) \ |
+ __asm__ (".rept %c1\n\toutb %%al,%0\n\t.endr" \ |
+ : : "N" (0x5F), \ |
+ "i" (((usec) * 10 + 5) / 6)); \ |
+ else { \ |
+ int _count = ((usec) * 10 + 5) / 6; \ |
+ __asm__ volatile ("1: outb %%al,%1\n\tloop 1b" \ |
+ : "=c" (_count) \ |
+ : "N" (0x5F), "0" (_count)); \ |
+ } \ |
+ } while (0) |
+ |
+/* Caller should ignore all bits except bit0 */ |
+#define UPD4990A_READ_DATA() inb(UPD4990A_IO_DATAOUT) |
+ |
+#endif |
Index: linuxc26/include/asm/processor.h |
=================================================================== |
--- linuxc26/include/asm/processor.h (nonexistent) |
+++ linuxc26/include/asm/processor.h (revision 422) |
@@ -0,0 +1,639 @@ |
+/* |
+ * include/asm-i386/processor.h |
+ * |
+ * Copyright (C) 1994 Linus Torvalds |
+ */ |
+ |
+#ifndef __ASM_I386_PROCESSOR_H |
+#define __ASM_I386_PROCESSOR_H |
+ |
+#include <asm/vm86.h> |
+#include <asm/math_emu.h> |
+#include <asm/segment.h> |
+#include <asm/page.h> |
+#include <asm/types.h> |
+#include <asm/sigcontext.h> |
+#include <asm/cpufeature.h> |
+#include <asm/msr.h> |
+#include <asm/system.h> |
+#include <linux/cache.h> |
+#include <linux/config.h> |
+#include <linux/threads.h> |
+ |
+/* flag for disabling the tsc */ |
+extern int tsc_disable; |
+ |
+struct desc_struct { |
+ unsigned long a,b; |
+}; |
+ |
+#define desc_empty(desc) \ |
+ (!((desc)->a + (desc)->b)) |
+ |
+#define desc_equal(desc1, desc2) \ |
+ (((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b)) |
+/* |
+ * Default implementation of macro that returns current |
+ * instruction pointer ("program counter"). |
+ */ |
+#define current_text_addr() ({ void *pc; __asm__("movl $1f,%0\n1:":"=g" (pc)); pc; }) |
+ |
+/* |
+ * CPU type and hardware bug flags. Kept separately for each CPU. |
+ * Members of this structure are referenced in head.S, so think twice |
+ * before touching them. [mj] |
+ */ |
+ |
+struct cpuinfo_x86 { |
+ __u8 x86; /* CPU family */ |
+ __u8 x86_vendor; /* CPU vendor */ |
+ __u8 x86_model; |
+ __u8 x86_mask; |
+ char wp_works_ok; /* It doesn't on 386's */ |
+ char hlt_works_ok; /* Problems on some 486Dx4's and old 386's */ |
+ char hard_math; |
+ char rfu; |
+ int cpuid_level; /* Maximum supported CPUID level, -1=no CPUID */ |
+ unsigned long x86_capability[NCAPINTS]; |
+ char x86_vendor_id[16]; |
+ char x86_model_id[64]; |
+ int x86_cache_size; /* in KB - valid for CPUS which support this |
+ call */ |
+ int fdiv_bug; |
+ int f00f_bug; |
+ int coma_bug; |
+ unsigned long loops_per_jiffy; |
+} __attribute__((__aligned__(SMP_CACHE_BYTES))); |
+ |
+#define X86_VENDOR_INTEL 0 |
+#define X86_VENDOR_CYRIX 1 |
+#define X86_VENDOR_AMD 2 |
+#define X86_VENDOR_UMC 3 |
+#define X86_VENDOR_NEXGEN 4 |
+#define X86_VENDOR_CENTAUR 5 |
+#define X86_VENDOR_RISE 6 |
+#define X86_VENDOR_TRANSMETA 7 |
+#define X86_VENDOR_NSC 8 |
+#define X86_VENDOR_NUM 9 |
+#define X86_VENDOR_UNKNOWN 0xff |
+ |
+/* |
+ * capabilities of CPUs |
+ */ |
+ |
+extern struct cpuinfo_x86 boot_cpu_data; |
+extern struct cpuinfo_x86 new_cpu_data; |
+extern struct tss_struct init_tss[NR_CPUS]; |
+extern struct tss_struct doublefault_tss; |
+ |
+#ifdef CONFIG_SMP |
+extern struct cpuinfo_x86 cpu_data[]; |
+#define current_cpu_data cpu_data[smp_processor_id()] |
+#else |
+#define cpu_data (&boot_cpu_data) |
+#define current_cpu_data boot_cpu_data |
+#endif |
+ |
+extern char ignore_fpu_irq; |
+ |
+extern void identify_cpu(struct cpuinfo_x86 *); |
+extern void print_cpu_info(struct cpuinfo_x86 *); |
+extern void dodgy_tsc(void); |
+ |
+/* |
+ * EFLAGS bits |
+ */ |
+#define X86_EFLAGS_CF 0x00000001 /* Carry Flag */ |
+#define X86_EFLAGS_PF 0x00000004 /* Parity Flag */ |
+#define X86_EFLAGS_AF 0x00000010 /* Auxillary carry Flag */ |
+#define X86_EFLAGS_ZF 0x00000040 /* Zero Flag */ |
+#define X86_EFLAGS_SF 0x00000080 /* Sign Flag */ |
+#define X86_EFLAGS_TF 0x00000100 /* Trap Flag */ |
+#define X86_EFLAGS_IF 0x00000200 /* Interrupt Flag */ |
+#define X86_EFLAGS_DF 0x00000400 /* Direction Flag */ |
+#define X86_EFLAGS_OF 0x00000800 /* Overflow Flag */ |
+#define X86_EFLAGS_IOPL 0x00003000 /* IOPL mask */ |
+#define X86_EFLAGS_NT 0x00004000 /* Nested Task */ |
+#define X86_EFLAGS_RF 0x00010000 /* Resume Flag */ |
+#define X86_EFLAGS_VM 0x00020000 /* Virtual Mode */ |
+#define X86_EFLAGS_AC 0x00040000 /* Alignment Check */ |
+#define X86_EFLAGS_VIF 0x00080000 /* Virtual Interrupt Flag */ |
+#define X86_EFLAGS_VIP 0x00100000 /* Virtual Interrupt Pending */ |
+#define X86_EFLAGS_ID 0x00200000 /* CPUID detection flag */ |
+ |
+/* |
+ * Generic CPUID function |
+ */ |
+static inline void cpuid(int op, int *eax, int *ebx, int *ecx, int *edx) |
+{ |
+ __asm__("cpuid" |
+ : "=a" (*eax), |
+ "=b" (*ebx), |
+ "=c" (*ecx), |
+ "=d" (*edx) |
+ : "0" (op)); |
+} |
+ |
+/* |
+ * CPUID functions returning a single datum |
+ */ |
+static inline unsigned int cpuid_eax(unsigned int op) |
+{ |
+ unsigned int eax; |
+ |
+ __asm__("cpuid" |
+ : "=a" (eax) |
+ : "0" (op) |
+ : "bx", "cx", "dx"); |
+ return eax; |
+} |
+static inline unsigned int cpuid_ebx(unsigned int op) |
+{ |
+ unsigned int eax, ebx; |
+ |
+ __asm__("cpuid" |
+ : "=a" (eax), "=b" (ebx) |
+ : "0" (op) |
+ : "cx", "dx" ); |
+ return ebx; |
+} |
+static inline unsigned int cpuid_ecx(unsigned int op) |
+{ |
+ unsigned int eax, ecx; |
+ |
+ __asm__("cpuid" |
+ : "=a" (eax), "=c" (ecx) |
+ : "0" (op) |
+ : "bx", "dx" ); |
+ return ecx; |
+} |
+static inline unsigned int cpuid_edx(unsigned int op) |
+{ |
+ unsigned int eax, edx; |
+ |
+ __asm__("cpuid" |
+ : "=a" (eax), "=d" (edx) |
+ : "0" (op) |
+ : "bx", "cx"); |
+ return edx; |
+} |
+ |
+#define load_cr3(pgdir) \ |
+ asm volatile("movl %0,%%cr3": :"r" (__pa(pgdir))) |
+ |
+ |
+/* |
+ * Intel CPU features in CR4 |
+ */ |
+#define X86_CR4_VME 0x0001 /* enable vm86 extensions */ |
+#define X86_CR4_PVI 0x0002 /* virtual interrupts flag enable */ |
+#define X86_CR4_TSD 0x0004 /* disable time stamp at ipl 3 */ |
+#define X86_CR4_DE 0x0008 /* enable debugging extensions */ |
+#define X86_CR4_PSE 0x0010 /* enable page size extensions */ |
+#define X86_CR4_PAE 0x0020 /* enable physical address extensions */ |
+#define X86_CR4_MCE 0x0040 /* Machine check enable */ |
+#define X86_CR4_PGE 0x0080 /* enable global pages */ |
+#define X86_CR4_PCE 0x0100 /* enable performance counters at ipl 3 */ |
+#define X86_CR4_OSFXSR 0x0200 /* enable fast FPU save and restore */ |
+#define X86_CR4_OSXMMEXCPT 0x0400 /* enable unmasked SSE exceptions */ |
+ |
+/* |
+ * Save the cr4 feature set we're using (ie |
+ * Pentium 4MB enable and PPro Global page |
+ * enable), so that any CPU's that boot up |
+ * after us can get the correct flags. |
+ */ |
+extern unsigned long mmu_cr4_features; |
+ |
+static inline void set_in_cr4 (unsigned long mask) |
+{ |
+ mmu_cr4_features |= mask; |
+ __asm__("movl %%cr4,%%eax\n\t" |
+ "orl %0,%%eax\n\t" |
+ "movl %%eax,%%cr4\n" |
+ : : "irg" (mask) |
+ :"ax"); |
+} |
+ |
+static inline void clear_in_cr4 (unsigned long mask) |
+{ |
+ mmu_cr4_features &= ~mask; |
+ __asm__("movl %%cr4,%%eax\n\t" |
+ "andl %0,%%eax\n\t" |
+ "movl %%eax,%%cr4\n" |
+ : : "irg" (~mask) |
+ :"ax"); |
+} |
+ |
+/* |
+ * NSC/Cyrix CPU configuration register indexes |
+ */ |
+ |
+#define CX86_PCR0 0x20 |
+#define CX86_GCR 0xb8 |
+#define CX86_CCR0 0xc0 |
+#define CX86_CCR1 0xc1 |
+#define CX86_CCR2 0xc2 |
+#define CX86_CCR3 0xc3 |
+#define CX86_CCR4 0xe8 |
+#define CX86_CCR5 0xe9 |
+#define CX86_CCR6 0xea |
+#define CX86_CCR7 0xeb |
+#define CX86_PCR1 0xf0 |
+#define CX86_DIR0 0xfe |
+#define CX86_DIR1 0xff |
+#define CX86_ARR_BASE 0xc4 |
+#define CX86_RCR_BASE 0xdc |
+ |
+/* |
+ * NSC/Cyrix CPU indexed register access macros |
+ */ |
+ |
+#define getCx86(reg) ({ outb((reg), 0x22); inb(0x23); }) |
+ |
+#define setCx86(reg, data) do { \ |
+ outb((reg), 0x22); \ |
+ outb((data), 0x23); \ |
+} while (0) |
+ |
+/* |
+ * Bus types (default is ISA, but people can check others with these..) |
+ * pc98 indicates PC98 systems (CBUS) |
+ */ |
+extern int MCA_bus; |
+#ifdef CONFIG_X86_PC9800 |
+#define pc98 1 |
+#else |
+#define pc98 0 |
+#endif |
+ |
+static inline void __monitor(const void *eax, unsigned long ecx, |
+ unsigned long edx) |
+{ |
+ /* "monitor %eax,%ecx,%edx;" */ |
+ asm volatile( |
+ ".byte 0x0f,0x01,0xc8;" |
+ : :"a" (eax), "c" (ecx), "d"(edx)); |
+} |
+ |
+static inline void __mwait(unsigned long eax, unsigned long ecx) |
+{ |
+ /* "mwait %eax,%ecx;" */ |
+ asm volatile( |
+ ".byte 0x0f,0x01,0xc9;" |
+ : :"a" (eax), "c" (ecx)); |
+} |
+ |
+/* from system description table in BIOS. Mostly for MCA use, but |
+others may find it useful. */ |
+extern unsigned int machine_id; |
+extern unsigned int machine_submodel_id; |
+extern unsigned int BIOS_revision; |
+extern unsigned int mca_pentium_flag; |
+ |
+/* |
+ * User space process size: 3GB (default). |
+ */ |
+#define TASK_SIZE (PAGE_OFFSET) |
+ |
+/* This decides where the kernel will search for a free chunk of vm |
+ * space during mmap's. |
+ */ |
+#define TASK_UNMAPPED_BASE (PAGE_ALIGN(TASK_SIZE / 3)) |
+ |
+/* |
+ * Size of io_bitmap, covering ports 0 to 0x3ff. |
+ */ |
+#define IO_BITMAP_BITS 1024 |
+#define IO_BITMAP_BYTES (IO_BITMAP_BITS/8) |
+#define IO_BITMAP_LONGS (IO_BITMAP_BYTES/sizeof(long)) |
+#define IO_BITMAP_OFFSET offsetof(struct tss_struct,io_bitmap) |
+#define INVALID_IO_BITMAP_OFFSET 0x8000 |
+ |
+struct i387_fsave_struct { |
+ long cwd; |
+ long swd; |
+ long twd; |
+ long fip; |
+ long fcs; |
+ long foo; |
+ long fos; |
+ long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */ |
+ long status; /* software status information */ |
+}; |
+ |
+struct i387_fxsave_struct { |
+ unsigned short cwd; |
+ unsigned short swd; |
+ unsigned short twd; |
+ unsigned short fop; |
+ long fip; |
+ long fcs; |
+ long foo; |
+ long fos; |
+ long mxcsr; |
+ long reserved; |
+ long st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ |
+ long xmm_space[32]; /* 8*16 bytes for each XMM-reg = 128 bytes */ |
+ long padding[56]; |
+} __attribute__ ((aligned (16))); |
+ |
+struct i387_soft_struct { |
+ long cwd; |
+ long swd; |
+ long twd; |
+ long fip; |
+ long fcs; |
+ long foo; |
+ long fos; |
+ long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */ |
+ unsigned char ftop, changed, lookahead, no_update, rm, alimit; |
+ struct info *info; |
+ unsigned long entry_eip; |
+}; |
+ |
+union i387_union { |
+ struct i387_fsave_struct fsave; |
+ struct i387_fxsave_struct fxsave; |
+ struct i387_soft_struct soft; |
+}; |
+ |
+typedef struct { |
+ unsigned long seg; |
+} mm_segment_t; |
+ |
+struct tss_struct { |
+ unsigned short back_link,__blh; |
+ unsigned long esp0; |
+ unsigned short ss0,__ss0h; |
+ unsigned long esp1; |
+ unsigned short ss1,__ss1h; /* ss1 is used to cache MSR_IA32_SYSENTER_CS */ |
+ unsigned long esp2; |
+ unsigned short ss2,__ss2h; |
+ unsigned long __cr3; |
+ unsigned long eip; |
+ unsigned long eflags; |
+ unsigned long eax,ecx,edx,ebx; |
+ unsigned long esp; |
+ unsigned long ebp; |
+ unsigned long esi; |
+ unsigned long edi; |
+ unsigned short es, __esh; |
+ unsigned short cs, __csh; |
+ unsigned short ss, __ssh; |
+ unsigned short ds, __dsh; |
+ unsigned short fs, __fsh; |
+ unsigned short gs, __gsh; |
+ unsigned short ldt, __ldth; |
+ unsigned short trace, io_bitmap_base; |
+ /* |
+ * The extra 1 is there because the CPU will access an |
+ * additional byte beyond the end of the IO permission |
+ * bitmap. The extra byte must be all 1 bits, and must |
+ * be within the limit. |
+ */ |
+ unsigned long io_bitmap[IO_BITMAP_LONGS + 1]; |
+ /* |
+ * pads the TSS to be cacheline-aligned (size is 0x100) |
+ */ |
+ unsigned long __cacheline_filler[5]; |
+ /* |
+ * .. and then another 0x100 bytes for emergency kernel stack |
+ */ |
+ unsigned long stack[64]; |
+} __attribute__((packed)); |
+ |
+struct thread_struct { |
+/* cached TLS descriptors. */ |
+ struct desc_struct tls_array[GDT_ENTRY_TLS_ENTRIES]; |
+ unsigned long esp0; |
+ unsigned long eip; |
+ unsigned long esp; |
+ unsigned long fs; |
+ unsigned long gs; |
+/* Hardware debugging registers */ |
+ unsigned long debugreg[8]; /* %%db0-7 debug registers */ |
+/* fault info */ |
+ unsigned long cr2, trap_no, error_code; |
+/* floating point info */ |
+ union i387_union i387; |
+/* virtual 86 mode info */ |
+ struct vm86_struct __user * vm86_info; |
+ unsigned long screen_bitmap; |
+ unsigned long v86flags, v86mask, saved_esp0; |
+ unsigned int saved_fs, saved_gs; |
+/* IO permissions */ |
+ unsigned long *io_bitmap_ptr; |
+}; |
+ |
+#define INIT_THREAD { \ |
+ .vm86_info = NULL, \ |
+ .io_bitmap_ptr = NULL, \ |
+} |
+ |
+/* |
+ * Note that the .io_bitmap member must be extra-big. This is because |
+ * the CPU will access an additional byte beyond the end of the IO |
+ * permission bitmap. The extra byte must be all 1 bits, and must |
+ * be within the limit. |
+ */ |
+#define INIT_TSS { \ |
+ .esp0 = sizeof(init_stack) + (long)&init_stack, \ |
+ .ss0 = __KERNEL_DS, \ |
+ .esp1 = sizeof(init_tss[0]) + (long)&init_tss[0], \ |
+ .ss1 = __KERNEL_CS, \ |
+ .ldt = GDT_ENTRY_LDT, \ |
+ .io_bitmap_base = INVALID_IO_BITMAP_OFFSET, \ |
+ .io_bitmap = { [ 0 ... IO_BITMAP_LONGS] = ~0 }, \ |
+} |
+ |
+static inline void load_esp0(struct tss_struct *tss, unsigned long esp0) |
+{ |
+ tss->esp0 = esp0; |
+ /* This can only happen when SEP is enabled, no need to test "SEP"arately */ |
+ if ((unlikely(tss->ss1 != __KERNEL_CS))) { |
+ tss->ss1 = __KERNEL_CS; |
+ wrmsr(MSR_IA32_SYSENTER_CS, __KERNEL_CS, 0); |
+ } |
+} |
+ |
+static inline void disable_sysenter(struct tss_struct *tss) |
+{ |
+ if (cpu_has_sep) { |
+ tss->ss1 = 0; |
+ wrmsr(MSR_IA32_SYSENTER_CS, 0, 0); |
+ } |
+} |
+ |
+#define start_thread(regs, new_eip, new_esp) do { \ |
+ __asm__("movl %0,%%fs ; movl %0,%%gs": :"r" (0)); \ |
+ set_fs(USER_DS); \ |
+ regs->xds = __USER_DS; \ |
+ regs->xes = __USER_DS; \ |
+ regs->xss = __USER_DS; \ |
+ regs->xcs = __USER_CS; \ |
+ regs->eip = new_eip; \ |
+ regs->esp = new_esp; \ |
+} while (0) |
+ |
+/* Forward declaration, a strange C thing */ |
+struct task_struct; |
+struct mm_struct; |
+ |
+/* Free all resources held by a thread. */ |
+extern void release_thread(struct task_struct *); |
+ |
+/* Prepare to copy thread state - unlazy all lazy status */ |
+extern void prepare_to_copy(struct task_struct *tsk); |
+ |
+/* |
+ * create a kernel thread without removing it from tasklists |
+ */ |
+extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); |
+ |
+extern unsigned long thread_saved_pc(struct task_struct *tsk); |
+void show_trace(struct task_struct *task, unsigned long *stack); |
+ |
+unsigned long get_wchan(struct task_struct *p); |
+#define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)->thread_info))[1019]) |
+#define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)->thread_info))[1022]) |
+ |
+struct microcode_header { |
+ unsigned int hdrver; |
+ unsigned int rev; |
+ unsigned int date; |
+ unsigned int sig; |
+ unsigned int cksum; |
+ unsigned int ldrver; |
+ unsigned int pf; |
+ unsigned int datasize; |
+ unsigned int totalsize; |
+ unsigned int reserved[3]; |
+}; |
+ |
+struct microcode { |
+ struct microcode_header hdr; |
+ unsigned int bits[0]; |
+}; |
+ |
+typedef struct microcode microcode_t; |
+typedef struct microcode_header microcode_header_t; |
+ |
+/* microcode format is extended from prescott processors */ |
+struct extended_signature { |
+ unsigned int sig; |
+ unsigned int pf; |
+ unsigned int cksum; |
+}; |
+ |
+struct extended_sigtable { |
+ unsigned int count; |
+ unsigned int cksum; |
+ unsigned int reserved[3]; |
+ struct extended_signature sigs[0]; |
+}; |
+/* '6' because it used to be for P6 only (but now covers Pentium 4 as well) */ |
+#define MICROCODE_IOCFREE _IO('6',0) |
+ |
+/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */ |
+static inline void rep_nop(void) |
+{ |
+ __asm__ __volatile__("rep;nop": : :"memory"); |
+} |
+ |
+#define cpu_relax() rep_nop() |
+ |
+/* generic versions from gas */ |
+#define GENERIC_NOP1 ".byte 0x90\n" |
+#define GENERIC_NOP2 ".byte 0x89,0xf6\n" |
+#define GENERIC_NOP3 ".byte 0x8d,0x76,0x00\n" |
+#define GENERIC_NOP4 ".byte 0x8d,0x74,0x26,0x00\n" |
+#define GENERIC_NOP5 GENERIC_NOP1 GENERIC_NOP4 |
+#define GENERIC_NOP6 ".byte 0x8d,0xb6,0x00,0x00,0x00,0x00\n" |
+#define GENERIC_NOP7 ".byte 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00\n" |
+#define GENERIC_NOP8 GENERIC_NOP1 GENERIC_NOP7 |
+ |
+/* Opteron nops */ |
+#define K8_NOP1 GENERIC_NOP1 |
+#define K8_NOP2 ".byte 0x66,0x90\n" |
+#define K8_NOP3 ".byte 0x66,0x66,0x90\n" |
+#define K8_NOP4 ".byte 0x66,0x66,0x66,0x90\n" |
+#define K8_NOP5 K8_NOP3 K8_NOP2 |
+#define K8_NOP6 K8_NOP3 K8_NOP3 |
+#define K8_NOP7 K8_NOP4 K8_NOP3 |
+#define K8_NOP8 K8_NOP4 K8_NOP4 |
+ |
+/* K7 nops */ |
+/* uses eax dependencies (arbitary choice) */ |
+#define K7_NOP1 GENERIC_NOP1 |
+#define K7_NOP2 ".byte 0x8b,0xc0\n" |
+#define K7_NOP3 ".byte 0x8d,0x04,0x20\n" |
+#define K7_NOP4 ".byte 0x8d,0x44,0x20,0x00\n" |
+#define K7_NOP5 K7_NOP4 ASM_NOP1 |
+#define K7_NOP6 ".byte 0x8d,0x80,0,0,0,0\n" |
+#define K7_NOP7 ".byte 0x8D,0x04,0x05,0,0,0,0\n" |
+#define K7_NOP8 K7_NOP7 ASM_NOP1 |
+ |
+#ifdef CONFIG_MK8 |
+#define ASM_NOP1 K8_NOP1 |
+#define ASM_NOP2 K8_NOP2 |
+#define ASM_NOP3 K8_NOP3 |
+#define ASM_NOP4 K8_NOP4 |
+#define ASM_NOP5 K8_NOP5 |
+#define ASM_NOP6 K8_NOP6 |
+#define ASM_NOP7 K8_NOP7 |
+#define ASM_NOP8 K8_NOP8 |
+#elif defined(CONFIG_MK7) |
+#define ASM_NOP1 K7_NOP1 |
+#define ASM_NOP2 K7_NOP2 |
+#define ASM_NOP3 K7_NOP3 |
+#define ASM_NOP4 K7_NOP4 |
+#define ASM_NOP5 K7_NOP5 |
+#define ASM_NOP6 K7_NOP6 |
+#define ASM_NOP7 K7_NOP7 |
+#define ASM_NOP8 K7_NOP8 |
+#else |
+#define ASM_NOP1 GENERIC_NOP1 |
+#define ASM_NOP2 GENERIC_NOP2 |
+#define ASM_NOP3 GENERIC_NOP3 |
+#define ASM_NOP4 GENERIC_NOP4 |
+#define ASM_NOP5 GENERIC_NOP5 |
+#define ASM_NOP6 GENERIC_NOP6 |
+#define ASM_NOP7 GENERIC_NOP7 |
+#define ASM_NOP8 GENERIC_NOP8 |
+#endif |
+ |
+#define ASM_NOP_MAX 8 |
+ |
+/* Prefetch instructions for Pentium III and AMD Athlon */ |
+/* It's not worth to care about 3dnow! prefetches for the K6 |
+ because they are microcoded there and very slow. |
+ However we don't do prefetches for pre XP Athlons currently |
+ That should be fixed. */ |
+#define ARCH_HAS_PREFETCH |
+extern inline void prefetch(const void *x) |
+{ |
+ alternative_input(ASM_NOP4, |
+ "prefetchnta (%1)", |
+ X86_FEATURE_XMM, |
+ "r" (x)); |
+} |
+ |
+#define ARCH_HAS_PREFETCH |
+#define ARCH_HAS_PREFETCHW |
+#define ARCH_HAS_SPINLOCK_PREFETCH |
+ |
+/* 3dnow! prefetch to get an exclusive cache line. Useful for |
+ spinlocks to avoid one state transition in the cache coherency protocol. */ |
+extern inline void prefetchw(const void *x) |
+{ |
+ alternative_input(ASM_NOP4, |
+ "prefetchw (%1)", |
+ X86_FEATURE_3DNOW, |
+ "r" (x)); |
+} |
+#define spin_lock_prefetch(x) prefetchw(x) |
+ |
+extern void select_idle_routine(const struct cpuinfo_x86 *c); |
+ |
+#endif /* __ASM_I386_PROCESSOR_H */ |
Index: linuxc26/include/asm/spinlock.h |
=================================================================== |
--- linuxc26/include/asm/spinlock.h (nonexistent) |
+++ linuxc26/include/asm/spinlock.h (revision 422) |
@@ -0,0 +1,199 @@ |
+#ifndef __ASM_SPINLOCK_H |
+#define __ASM_SPINLOCK_H |
+ |
+#include <asm/atomic.h> |
+#include <asm/rwlock.h> |
+#include <asm/page.h> |
+#include <linux/config.h> |
+#include <linux/compiler.h> |
+ |
+extern int printk(const char * fmt, ...) |
+ __attribute__ ((format (printf, 1, 2))); |
+ |
+/* |
+ * Your basic SMP spinlocks, allowing only a single CPU anywhere |
+ */ |
+ |
+typedef struct { |
+ volatile unsigned int lock; |
+#ifdef CONFIG_DEBUG_SPINLOCK |
+ unsigned magic; |
+#endif |
+} spinlock_t; |
+ |
+#define SPINLOCK_MAGIC 0xdead4ead |
+ |
+#ifdef CONFIG_DEBUG_SPINLOCK |
+#define SPINLOCK_MAGIC_INIT , SPINLOCK_MAGIC |
+#else |
+#define SPINLOCK_MAGIC_INIT /* */ |
+#endif |
+ |
+#define SPIN_LOCK_UNLOCKED (spinlock_t) { 1 SPINLOCK_MAGIC_INIT } |
+ |
+#define spin_lock_init(x) do { *(x) = SPIN_LOCK_UNLOCKED; } while(0) |
+ |
+/* |
+ * Simple spin lock operations. There are two variants, one clears IRQ's |
+ * on the local processor, one does not. |
+ * |
+ * We make no fairness assumptions. They have a cost. |
+ */ |
+ |
+#define spin_is_locked(x) (*(volatile signed char *)(&(x)->lock) <= 0) |
+#define spin_unlock_wait(x) do { barrier(); } while(spin_is_locked(x)) |
+ |
+#define spin_lock_string \ |
+ "\n1:\t" \ |
+ "lock ; decb %0\n\t" \ |
+ "js 2f\n" \ |
+ LOCK_SECTION_START("") \ |
+ "2:\t" \ |
+ "rep;nop\n\t" \ |
+ "cmpb $0,%0\n\t" \ |
+ "jle 2b\n\t" \ |
+ "jmp 1b\n" \ |
+ LOCK_SECTION_END |
+ |
+/* |
+ * This works. Despite all the confusion. |
+ * (except on PPro SMP or if we are using OOSTORE) |
+ * (PPro errata 66, 92) |
+ */ |
+ |
+#if !defined(CONFIG_X86_OOSTORE) && !defined(CONFIG_X86_PPRO_FENCE) |
+ |
+#define spin_unlock_string \ |
+ "movb $1,%0" \ |
+ :"=m" (lock->lock) : : "memory" |
+ |
+ |
+static inline void _raw_spin_unlock(spinlock_t *lock) |
+{ |
+#ifdef CONFIG_DEBUG_SPINLOCK |
+ BUG_ON(lock->magic != SPINLOCK_MAGIC); |
+ BUG_ON(!spin_is_locked(lock)); |
+#endif |
+ __asm__ __volatile__( |
+ spin_unlock_string |
+ ); |
+} |
+ |
+#else |
+ |
+#define spin_unlock_string \ |
+ "xchgb %b0, %1" \ |
+ :"=q" (oldval), "=m" (lock->lock) \ |
+ :"0" (oldval) : "memory" |
+ |
+static inline void _raw_spin_unlock(spinlock_t *lock) |
+{ |
+ char oldval = 1; |
+#ifdef CONFIG_DEBUG_SPINLOCK |
+ BUG_ON(lock->magic != SPINLOCK_MAGIC); |
+ BUG_ON(!spin_is_locked(lock)); |
+#endif |
+ __asm__ __volatile__( |
+ spin_unlock_string |
+ ); |
+} |
+ |
+#endif |
+ |
+static inline int _raw_spin_trylock(spinlock_t *lock) |
+{ |
+ char oldval; |
+ __asm__ __volatile__( |
+ "xchgb %b0,%1" |
+ :"=q" (oldval), "=m" (lock->lock) |
+ :"0" (0) : "memory"); |
+ return oldval > 0; |
+} |
+ |
+static inline void _raw_spin_lock(spinlock_t *lock) |
+{ |
+#ifdef CONFIG_DEBUG_SPINLOCK |
+ __label__ here; |
+here: |
+ if (unlikely(lock->magic != SPINLOCK_MAGIC)) { |
+ printk("eip: %p\n", &&here); |
+ BUG(); |
+ } |
+#endif |
+ __asm__ __volatile__( |
+ spin_lock_string |
+ :"=m" (lock->lock) : : "memory"); |
+} |
+ |
+ |
+/* |
+ * Read-write spinlocks, allowing multiple readers |
+ * but only one writer. |
+ * |
+ * NOTE! it is quite common to have readers in interrupts |
+ * but no interrupt writers. For those circumstances we |
+ * can "mix" irq-safe locks - any writer needs to get a |
+ * irq-safe write-lock, but readers can get non-irqsafe |
+ * read-locks. |
+ */ |
+typedef struct { |
+ volatile unsigned int lock; |
+#ifdef CONFIG_DEBUG_SPINLOCK |
+ unsigned magic; |
+#endif |
+} rwlock_t; |
+ |
+#define RWLOCK_MAGIC 0xdeaf1eed |
+ |
+#ifdef CONFIG_DEBUG_SPINLOCK |
+#define RWLOCK_MAGIC_INIT , RWLOCK_MAGIC |
+#else |
+#define RWLOCK_MAGIC_INIT /* */ |
+#endif |
+ |
+#define RW_LOCK_UNLOCKED (rwlock_t) { RW_LOCK_BIAS RWLOCK_MAGIC_INIT } |
+ |
+#define rwlock_init(x) do { *(x) = RW_LOCK_UNLOCKED; } while(0) |
+ |
+#define rwlock_is_locked(x) ((x)->lock != RW_LOCK_BIAS) |
+ |
+/* |
+ * On x86, we implement read-write locks as a 32-bit counter |
+ * with the high bit (sign) being the "contended" bit. |
+ * |
+ * The inline assembly is non-obvious. Think about it. |
+ * |
+ * Changed to use the same technique as rw semaphores. See |
+ * semaphore.h for details. -ben |
+ */ |
+/* the spinlock helpers are in arch/i386/kernel/semaphore.c */ |
+ |
+static inline void _raw_read_lock(rwlock_t *rw) |
+{ |
+#ifdef CONFIG_DEBUG_SPINLOCK |
+ BUG_ON(rw->magic != RWLOCK_MAGIC); |
+#endif |
+ __build_read_lock(rw, "__read_lock_failed"); |
+} |
+ |
+static inline void _raw_write_lock(rwlock_t *rw) |
+{ |
+#ifdef CONFIG_DEBUG_SPINLOCK |
+ BUG_ON(rw->magic != RWLOCK_MAGIC); |
+#endif |
+ __build_write_lock(rw, "__write_lock_failed"); |
+} |
+ |
+#define _raw_read_unlock(rw) asm volatile("lock ; incl %0" :"=m" ((rw)->lock) : : "memory") |
+#define _raw_write_unlock(rw) asm volatile("lock ; addl $" RW_LOCK_BIAS_STR ",%0":"=m" ((rw)->lock) : : "memory") |
+ |
+static inline int _raw_write_trylock(rwlock_t *lock) |
+{ |
+ atomic_t *count = (atomic_t *)lock; |
+ if (atomic_sub_and_test(RW_LOCK_BIAS, count)) |
+ return 1; |
+ atomic_add(RW_LOCK_BIAS, count); |
+ return 0; |
+} |
+ |
+#endif /* __ASM_SPINLOCK_H */ |
Index: linuxc26/include/asm/thread_info.h |
=================================================================== |
--- linuxc26/include/asm/thread_info.h (nonexistent) |
+++ linuxc26/include/asm/thread_info.h (revision 422) |
@@ -0,0 +1,140 @@ |
+/* thread_info.h: i386 low-level thread information |
+ * |
+ * Copyright (C) 2002 David Howells (dhowells@redhat.com) |
+ * - Incorporating suggestions made by Linus Torvalds and Dave Miller |
+ */ |
+ |
+#ifndef _ASM_THREAD_INFO_H |
+#define _ASM_THREAD_INFO_H |
+ |
+#ifdef __KERNEL__ |
+ |
+#ifndef __ASSEMBLY__ |
+#include <asm/processor.h> |
+#endif |
+ |
+/* |
+ * low level task data that entry.S needs immediate access to |
+ * - this struct should fit entirely inside of one cache line |
+ * - this struct shares the supervisor stack pages |
+ * - if the contents of this structure are changed, the assembly constants must also be changed |
+ */ |
+#ifndef __ASSEMBLY__ |
+ |
+struct thread_info { |
+ struct task_struct *task; /* main task structure */ |
+ struct exec_domain *exec_domain; /* execution domain */ |
+ unsigned long flags; /* low level flags */ |
+ unsigned long status; /* thread-synchronous flags */ |
+ __u32 cpu; /* current CPU */ |
+ __s32 preempt_count; /* 0 => preemptable, <0 => BUG */ |
+ |
+ mm_segment_t addr_limit; /* thread address space: |
+ 0-0xBFFFFFFF for user-thead |
+ 0-0xFFFFFFFF for kernel-thread |
+ */ |
+ struct restart_block restart_block; |
+ |
+ __u8 supervisor_stack[0]; |
+}; |
+ |
+#else /* !__ASSEMBLY__ */ |
+ |
+/* offsets into the thread_info struct for assembly code access */ |
+#define TI_TASK 0x00000000 |
+#define TI_EXEC_DOMAIN 0x00000004 |
+#define TI_FLAGS 0x00000008 |
+#define TI_STATUS 0x0000000C |
+#define TI_CPU 0x00000010 |
+#define TI_PRE_COUNT 0x00000014 |
+#define TI_ADDR_LIMIT 0x00000018 |
+#define TI_RESTART_BLOCK 0x000001C |
+ |
+#endif |
+ |
+#define PREEMPT_ACTIVE 0x4000000 |
+ |
+/* |
+ * macros/functions for gaining access to the thread information structure |
+ * |
+ * preempt_count needs to be 1 initially, until the scheduler is functional. |
+ */ |
+#ifndef __ASSEMBLY__ |
+ |
+#define INIT_THREAD_INFO(tsk) \ |
+{ \ |
+ .task = &tsk, \ |
+ .exec_domain = &default_exec_domain, \ |
+ .flags = 0, \ |
+ .cpu = 0, \ |
+ .preempt_count = 1, \ |
+ .addr_limit = KERNEL_DS, \ |
+ .restart_block = { \ |
+ .fn = do_no_restart_syscall, \ |
+ }, \ |
+} |
+ |
+#define init_thread_info (init_thread_union.thread_info) |
+#define init_stack (init_thread_union.stack) |
+ |
+/* how to get the thread information struct from C */ |
+static inline struct thread_info *current_thread_info(void) |
+{ |
+ struct thread_info *ti; |
+ __asm__("andl %%esp,%0; ":"=r" (ti) : "0" (~8191UL)); |
+ return ti; |
+} |
+ |
+/* thread information allocation */ |
+#define THREAD_SIZE (2*PAGE_SIZE) |
+#define alloc_thread_info(task) ((struct thread_info *)kmalloc(THREAD_SIZE, GFP_KERNEL)) |
+#define free_thread_info(info) kfree(info) |
+#define get_thread_info(ti) get_task_struct((ti)->task) |
+#define put_thread_info(ti) put_task_struct((ti)->task) |
+ |
+#else /* !__ASSEMBLY__ */ |
+ |
+/* how to get the thread information struct from ASM */ |
+#define GET_THREAD_INFO(reg) \ |
+ movl $-8192, reg; \ |
+ andl %esp, reg |
+ |
+#endif |
+ |
+/* |
+ * thread information flags |
+ * - these are process state flags that various assembly files may need to access |
+ * - pending work-to-be-done flags are in LSW |
+ * - other flags in MSW |
+ */ |
+#define TIF_SYSCALL_TRACE 0 /* syscall trace active */ |
+#define TIF_NOTIFY_RESUME 1 /* resumption notification requested */ |
+#define TIF_SIGPENDING 2 /* signal pending */ |
+#define TIF_NEED_RESCHED 3 /* rescheduling necessary */ |
+#define TIF_SINGLESTEP 4 /* restore singlestep on return to user mode */ |
+#define TIF_IRET 5 /* return with iret */ |
+#define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */ |
+ |
+#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) |
+#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) |
+#define _TIF_SIGPENDING (1<<TIF_SIGPENDING) |
+#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) |
+#define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP) |
+#define _TIF_IRET (1<<TIF_IRET) |
+#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) |
+ |
+#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */ |
+#define _TIF_ALLWORK_MASK 0x0000FFFF /* work to do on any return to u-space */ |
+ |
+/* |
+ * Thread-synchronous status. |
+ * |
+ * This is different from the flags in that nobody else |
+ * ever touches our thread-synchronous status, so we don't |
+ * have to worry about atomic accesses. |
+ */ |
+#define TS_USEDFPU 0x0001 /* FPU was used by this task this quantum (SMP) */ |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* _ASM_THREAD_INFO_H */ |
Index: linuxc26/include/asm/system.h |
=================================================================== |
--- linuxc26/include/asm/system.h (nonexistent) |
+++ linuxc26/include/asm/system.h (revision 422) |
@@ -0,0 +1,479 @@ |
+#ifndef __ASM_SYSTEM_H |
+#define __ASM_SYSTEM_H |
+ |
+#include <linux/config.h> |
+#include <linux/kernel.h> |
+#include <asm/segment.h> |
+#include <asm/cpufeature.h> |
+#include <linux/bitops.h> /* for LOCK_PREFIX */ |
+ |
+#ifdef __KERNEL__ |
+ |
+struct task_struct; /* one of the stranger aspects of C forward declarations.. */ |
+extern struct task_struct * FASTCALL(__switch_to(struct task_struct *prev, struct task_struct *next)); |
+ |
+#define switch_to(prev,next,last) do { \ |
+ unsigned long esi,edi; \ |
+ asm volatile("pushfl\n\t" \ |
+ "pushl %%ebp\n\t" \ |
+ "movl %%esp,%0\n\t" /* save ESP */ \ |
+ "movl %5,%%esp\n\t" /* restore ESP */ \ |
+ "movl $1f,%1\n\t" /* save EIP */ \ |
+ "pushl %6\n\t" /* restore EIP */ \ |
+ "jmp __switch_to\n" \ |
+ "1:\t" \ |
+ "popl %%ebp\n\t" \ |
+ "popfl" \ |
+ :"=m" (prev->thread.esp),"=m" (prev->thread.eip), \ |
+ "=a" (last),"=S" (esi),"=D" (edi) \ |
+ :"m" (next->thread.esp),"m" (next->thread.eip), \ |
+ "2" (prev), "d" (next)); \ |
+} while (0) |
+ |
+#define _set_base(addr,base) do { unsigned long __pr; \ |
+__asm__ __volatile__ ("movw %%dx,%1\n\t" \ |
+ "rorl $16,%%edx\n\t" \ |
+ "movb %%dl,%2\n\t" \ |
+ "movb %%dh,%3" \ |
+ :"=&d" (__pr) \ |
+ :"m" (*((addr)+2)), \ |
+ "m" (*((addr)+4)), \ |
+ "m" (*((addr)+7)), \ |
+ "0" (base) \ |
+ ); } while(0) |
+ |
+#define _set_limit(addr,limit) do { unsigned long __lr; \ |
+__asm__ __volatile__ ("movw %%dx,%1\n\t" \ |
+ "rorl $16,%%edx\n\t" \ |
+ "movb %2,%%dh\n\t" \ |
+ "andb $0xf0,%%dh\n\t" \ |
+ "orb %%dh,%%dl\n\t" \ |
+ "movb %%dl,%2" \ |
+ :"=&d" (__lr) \ |
+ :"m" (*(addr)), \ |
+ "m" (*((addr)+6)), \ |
+ "0" (limit) \ |
+ ); } while(0) |
+ |
+#define set_base(ldt,base) _set_base( ((char *)&(ldt)) , (base) ) |
+#define set_limit(ldt,limit) _set_limit( ((char *)&(ldt)) , ((limit)-1)>>12 ) |
+ |
+static inline unsigned long _get_base(char * addr) |
+{ |
+ unsigned long __base; |
+ __asm__("movb %3,%%dh\n\t" |
+ "movb %2,%%dl\n\t" |
+ "shll $16,%%edx\n\t" |
+ "movw %1,%%dx" |
+ :"=&d" (__base) |
+ :"m" (*((addr)+2)), |
+ "m" (*((addr)+4)), |
+ "m" (*((addr)+7))); |
+ return __base; |
+} |
+ |
+#define get_base(ldt) _get_base( ((char *)&(ldt)) ) |
+ |
+/* |
+ * Load a segment. Fall back on loading the zero |
+ * segment if something goes wrong.. |
+ */ |
+#define loadsegment(seg,value) \ |
+ asm volatile("\n" \ |
+ "1:\t" \ |
+ "movl %0,%%" #seg "\n" \ |
+ "2:\n" \ |
+ ".section .fixup,\"ax\"\n" \ |
+ "3:\t" \ |
+ "pushl $0\n\t" \ |
+ "popl %%" #seg "\n\t" \ |
+ "jmp 2b\n" \ |
+ ".previous\n" \ |
+ ".section __ex_table,\"a\"\n\t" \ |
+ ".align 4\n\t" \ |
+ ".long 1b,3b\n" \ |
+ ".previous" \ |
+ : :"m" (*(unsigned int *)&(value))) |
+ |
+/* |
+ * Save a segment register away |
+ */ |
+#define savesegment(seg, value) \ |
+ asm volatile("movl %%" #seg ",%0":"=m" (*(int *)&(value))) |
+ |
+/* |
+ * Clear and set 'TS' bit respectively |
+ */ |
+#define clts() __asm__ __volatile__ ("clts") |
+#define read_cr0() ({ \ |
+ unsigned int __dummy; \ |
+ __asm__( \ |
+ "movl %%cr0,%0\n\t" \ |
+ :"=r" (__dummy)); \ |
+ __dummy; \ |
+}) |
+#define write_cr0(x) \ |
+ __asm__("movl %0,%%cr0": :"r" (x)); |
+ |
+#define read_cr4() ({ \ |
+ unsigned int __dummy; \ |
+ __asm__( \ |
+ "movl %%cr4,%0\n\t" \ |
+ :"=r" (__dummy)); \ |
+ __dummy; \ |
+}) |
+#define write_cr4(x) \ |
+ __asm__("movl %0,%%cr4": :"r" (x)); |
+#define stts() write_cr0(8 | read_cr0()) |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#define wbinvd() \ |
+ __asm__ __volatile__ ("wbinvd": : :"memory"); |
+ |
+static inline unsigned long get_limit(unsigned long segment) |
+{ |
+ unsigned long __limit; |
+ __asm__("lsll %1,%0" |
+ :"=r" (__limit):"r" (segment)); |
+ return __limit+1; |
+} |
+ |
+#define nop() __asm__ __volatile__ ("nop") |
+ |
+#define xchg(ptr,v) ((__typeof__(*(ptr)))__xchg((unsigned long)(v),(ptr),sizeof(*(ptr)))) |
+ |
+#define tas(ptr) (xchg((ptr),1)) |
+ |
+struct __xchg_dummy { unsigned long a[100]; }; |
+#define __xg(x) ((struct __xchg_dummy *)(x)) |
+ |
+ |
+/* |
+ * The semantics of XCHGCMP8B are a bit strange, this is why |
+ * there is a loop and the loading of %%eax and %%edx has to |
+ * be inside. This inlines well in most cases, the cached |
+ * cost is around ~38 cycles. (in the future we might want |
+ * to do an SIMD/3DNOW!/MMX/FPU 64-bit store here, but that |
+ * might have an implicit FPU-save as a cost, so it's not |
+ * clear which path to go.) |
+ * |
+ * cmpxchg8b must be used with the lock prefix here to allow |
+ * the instruction to be executed atomically, see page 3-102 |
+ * of the instruction set reference 24319102.pdf. We need |
+ * the reader side to see the coherent 64bit value. |
+ */ |
+static inline void __set_64bit (unsigned long long * ptr, |
+ unsigned int low, unsigned int high) |
+{ |
+ __asm__ __volatile__ ( |
+ "\n1:\t" |
+ "movl (%0), %%eax\n\t" |
+ "movl 4(%0), %%edx\n\t" |
+ "lock cmpxchg8b (%0)\n\t" |
+ "jnz 1b" |
+ : /* no outputs */ |
+ : "D"(ptr), |
+ "b"(low), |
+ "c"(high) |
+ : "ax","dx","memory"); |
+} |
+ |
+static inline void __set_64bit_constant (unsigned long long *ptr, |
+ unsigned long long value) |
+{ |
+ __set_64bit(ptr,(unsigned int)(value), (unsigned int)((value)>>32ULL)); |
+} |
+#define ll_low(x) *(((unsigned int*)&(x))+0) |
+#define ll_high(x) *(((unsigned int*)&(x))+1) |
+ |
+static inline void __set_64bit_var (unsigned long long *ptr, |
+ unsigned long long value) |
+{ |
+ __set_64bit(ptr,ll_low(value), ll_high(value)); |
+} |
+ |
+#define set_64bit(ptr,value) \ |
+(__builtin_constant_p(value) ? \ |
+ __set_64bit_constant(ptr, value) : \ |
+ __set_64bit_var(ptr, value) ) |
+ |
+#define _set_64bit(ptr,value) \ |
+(__builtin_constant_p(value) ? \ |
+ __set_64bit(ptr, (unsigned int)(value), (unsigned int)((value)>>32ULL) ) : \ |
+ __set_64bit(ptr, ll_low(value), ll_high(value)) ) |
+ |
+/* |
+ * Note: no "lock" prefix even on SMP: xchg always implies lock anyway |
+ * Note 2: xchg has side effect, so that attribute volatile is necessary, |
+ * but generally the primitive is invalid, *ptr is output argument. --ANK |
+ */ |
+static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size) |
+{ |
+ switch (size) { |
+ case 1: |
+ __asm__ __volatile__("xchgb %b0,%1" |
+ :"=q" (x) |
+ :"m" (*__xg(ptr)), "0" (x) |
+ :"memory"); |
+ break; |
+ case 2: |
+ __asm__ __volatile__("xchgw %w0,%1" |
+ :"=r" (x) |
+ :"m" (*__xg(ptr)), "0" (x) |
+ :"memory"); |
+ break; |
+ case 4: |
+ __asm__ __volatile__("xchgl %0,%1" |
+ :"=r" (x) |
+ :"m" (*__xg(ptr)), "0" (x) |
+ :"memory"); |
+ break; |
+ } |
+ return x; |
+} |
+ |
+/* |
+ * Atomic compare and exchange. Compare OLD with MEM, if identical, |
+ * store NEW in MEM. Return the initial value in MEM. Success is |
+ * indicated by comparing RETURN with OLD. |
+ */ |
+ |
+#ifdef CONFIG_X86_CMPXCHG |
+#define __HAVE_ARCH_CMPXCHG 1 |
+ |
+static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, |
+ unsigned long new, int size) |
+{ |
+ unsigned long prev; |
+ switch (size) { |
+ case 1: |
+ __asm__ __volatile__(LOCK_PREFIX "cmpxchgb %b1,%2" |
+ : "=a"(prev) |
+ : "q"(new), "m"(*__xg(ptr)), "0"(old) |
+ : "memory"); |
+ return prev; |
+ case 2: |
+ __asm__ __volatile__(LOCK_PREFIX "cmpxchgw %w1,%2" |
+ : "=a"(prev) |
+ : "q"(new), "m"(*__xg(ptr)), "0"(old) |
+ : "memory"); |
+ return prev; |
+ case 4: |
+ __asm__ __volatile__(LOCK_PREFIX "cmpxchgl %1,%2" |
+ : "=a"(prev) |
+ : "q"(new), "m"(*__xg(ptr)), "0"(old) |
+ : "memory"); |
+ return prev; |
+ } |
+ return old; |
+} |
+ |
+#define cmpxchg(ptr,o,n)\ |
+ ((__typeof__(*(ptr)))__cmpxchg((ptr),(unsigned long)(o),\ |
+ (unsigned long)(n),sizeof(*(ptr)))) |
+ |
+#else |
+/* Compiling for a 386 proper. Is it worth implementing via cli/sti? */ |
+#endif |
+ |
+#ifdef __KERNEL__ |
+struct alt_instr { |
+ __u8 *instr; /* original instruction */ |
+ __u8 *replacement; |
+ __u8 cpuid; /* cpuid bit set for replacement */ |
+ __u8 instrlen; /* length of original instruction */ |
+ __u8 replacementlen; /* length of new instruction, <= instrlen */ |
+ __u8 pad; |
+}; |
+#endif |
+ |
+/* |
+ * Alternative instructions for different CPU types or capabilities. |
+ * |
+ * This allows to use optimized instructions even on generic binary |
+ * kernels. |
+ * |
+ * length of oldinstr must be longer or equal the length of newinstr |
+ * It can be padded with nops as needed. |
+ * |
+ * For non barrier like inlines please define new variants |
+ * without volatile and memory clobber. |
+ */ |
+#define alternative(oldinstr, newinstr, feature) \ |
+ asm volatile ("661:\n\t" oldinstr "\n662:\n" \ |
+ ".section .altinstructions,\"a\"\n" \ |
+ " .align 4\n" \ |
+ " .long 661b\n" /* label */ \ |
+ " .long 663f\n" /* new instruction */ \ |
+ " .byte %c0\n" /* feature bit */ \ |
+ " .byte 662b-661b\n" /* sourcelen */ \ |
+ " .byte 664f-663f\n" /* replacementlen */ \ |
+ ".previous\n" \ |
+ ".section .altinstr_replacement,\"ax\"\n" \ |
+ "663:\n\t" newinstr "\n664:\n" /* replacement */ \ |
+ ".previous" :: "i" (feature) : "memory") |
+ |
+/* |
+ * Alternative inline assembly with input. |
+ * |
+ * Pecularities: |
+ * No memory clobber here. |
+ * Argument numbers start with 1. |
+ * Best is to use constraints that are fixed size (like (%1) ... "r") |
+ * If you use variable sized constraints like "m" or "g" in the |
+ * replacement maake sure to pad to the worst case length. |
+ */ |
+#define alternative_input(oldinstr, newinstr, feature, input) \ |
+ asm volatile ("661:\n\t" oldinstr "\n662:\n" \ |
+ ".section .altinstructions,\"a\"\n" \ |
+ " .align 4\n" \ |
+ " .long 661b\n" /* label */ \ |
+ " .long 663f\n" /* new instruction */ \ |
+ " .byte %c0\n" /* feature bit */ \ |
+ " .byte 662b-661b\n" /* sourcelen */ \ |
+ " .byte 664f-663f\n" /* replacementlen */ \ |
+ ".previous\n" \ |
+ ".section .altinstr_replacement,\"ax\"\n" \ |
+ "663:\n\t" newinstr "\n664:\n" /* replacement */ \ |
+ ".previous" :: "i" (feature), input) |
+ |
+/* |
+ * Force strict CPU ordering. |
+ * And yes, this is required on UP too when we're talking |
+ * to devices. |
+ * |
+ * For now, "wmb()" doesn't actually do anything, as all |
+ * Intel CPU's follow what Intel calls a *Processor Order*, |
+ * in which all writes are seen in the program order even |
+ * outside the CPU. |
+ * |
+ * I expect future Intel CPU's to have a weaker ordering, |
+ * but I'd also expect them to finally get their act together |
+ * and add some real memory barriers if so. |
+ * |
+ * Some non intel clones support out of order store. wmb() ceases to be a |
+ * nop for these. |
+ */ |
+ |
+ |
+/* |
+ * Actually only lfence would be needed for mb() because all stores done |
+ * by the kernel should be already ordered. But keep a full barrier for now. |
+ */ |
+ |
+#define mb() alternative("lock; addl $0,0(%%esp)", "mfence", X86_FEATURE_XMM2) |
+#define rmb() alternative("lock; addl $0,0(%%esp)", "lfence", X86_FEATURE_XMM2) |
+ |
+/** |
+ * read_barrier_depends - Flush all pending reads that subsequents reads |
+ * depend on. |
+ * |
+ * No data-dependent reads from memory-like regions are ever reordered |
+ * over this barrier. All reads preceding this primitive are guaranteed |
+ * to access memory (but not necessarily other CPUs' caches) before any |
+ * reads following this primitive that depend on the data return by |
+ * any of the preceding reads. This primitive is much lighter weight than |
+ * rmb() on most CPUs, and is never heavier weight than is |
+ * rmb(). |
+ * |
+ * These ordering constraints are respected by both the local CPU |
+ * and the compiler. |
+ * |
+ * Ordering is not guaranteed by anything other than these primitives, |
+ * not even by data dependencies. See the documentation for |
+ * memory_barrier() for examples and URLs to more information. |
+ * |
+ * For example, the following code would force ordering (the initial |
+ * value of "a" is zero, "b" is one, and "p" is "&a"): |
+ * |
+ * <programlisting> |
+ * CPU 0 CPU 1 |
+ * |
+ * b = 2; |
+ * memory_barrier(); |
+ * p = &b; q = p; |
+ * read_barrier_depends(); |
+ * d = *q; |
+ * </programlisting> |
+ * |
+ * because the read of "*q" depends on the read of "p" and these |
+ * two reads are separated by a read_barrier_depends(). However, |
+ * the following code, with the same initial values for "a" and "b": |
+ * |
+ * <programlisting> |
+ * CPU 0 CPU 1 |
+ * |
+ * a = 2; |
+ * memory_barrier(); |
+ * b = 3; y = b; |
+ * read_barrier_depends(); |
+ * x = a; |
+ * </programlisting> |
+ * |
+ * does not enforce ordering, since there is no data dependency between |
+ * the read of "a" and the read of "b". Therefore, on some CPUs, such |
+ * as Alpha, "y" could be set to 3 and "x" to 0. Use rmb() |
+ * in cases like thiswhere there are no data dependencies. |
+ **/ |
+ |
+#define read_barrier_depends() do { } while(0) |
+ |
+#ifdef CONFIG_X86_OOSTORE |
+/* Actually there are no OOO store capable CPUs for now that do SSE, |
+ but make it already an possibility. */ |
+#define wmb() alternative("lock; addl $0,0(%%esp)", "sfence", X86_FEATURE_XMM) |
+#else |
+#define wmb() __asm__ __volatile__ ("": : :"memory") |
+#endif |
+ |
+#ifdef CONFIG_SMP |
+#define smp_mb() mb() |
+#define smp_rmb() rmb() |
+#define smp_wmb() wmb() |
+#define smp_read_barrier_depends() read_barrier_depends() |
+#define set_mb(var, value) do { xchg(&var, value); } while (0) |
+#else |
+#define smp_mb() barrier() |
+#define smp_rmb() barrier() |
+#define smp_wmb() barrier() |
+#define smp_read_barrier_depends() do { } while(0) |
+#define set_mb(var, value) do { var = value; barrier(); } while (0) |
+#endif |
+ |
+#define set_wmb(var, value) do { var = value; wmb(); } while (0) |
+ |
+/* interrupt control.. */ |
+#define local_save_flags(x) do { typecheck(unsigned long,x); __asm__ __volatile__("pushfl ; popl %0":"=g" (x): /* no input */); } while (0) |
+#define local_irq_restore(x) do { typecheck(unsigned long,x); __asm__ __volatile__("pushl %0 ; popfl": /* no output */ :"g" (x):"memory", "cc"); } while (0) |
+#define local_irq_disable() __asm__ __volatile__("cli": : :"memory") |
+#define local_irq_enable() __asm__ __volatile__("sti": : :"memory") |
+/* used in the idle loop; sti takes one instruction cycle to complete */ |
+#define safe_halt() __asm__ __volatile__("sti; hlt": : :"memory") |
+ |
+#define irqs_disabled() \ |
+({ \ |
+ unsigned long flags; \ |
+ local_save_flags(flags); \ |
+ !(flags & (1<<9)); \ |
+}) |
+ |
+/* For spinlocks etc */ |
+#define local_irq_save(x) __asm__ __volatile__("pushfl ; popl %0 ; cli":"=g" (x): /* no input */ :"memory") |
+ |
+/* |
+ * disable hlt during certain critical i/o operations |
+ */ |
+#define HAVE_DISABLE_HLT |
+void disable_hlt(void); |
+void enable_hlt(void); |
+ |
+extern unsigned long dmi_broken; |
+extern int is_sony_vaio_laptop; |
+ |
+#define BROKEN_ACPI_Sx 0x0001 |
+#define BROKEN_INIT_AFTER_S1 0x0002 |
+#define BROKEN_PNP_BIOS 0x0004 |
+#define BROKEN_CPUFREQ 0x0008 |
+ |
+#endif |
Index: linuxc26/include/asm/cpu.h |
=================================================================== |
--- linuxc26/include/asm/cpu.h (nonexistent) |
+++ linuxc26/include/asm/cpu.h (revision 422) |
@@ -0,0 +1,26 @@ |
+#ifndef _ASM_I386_CPU_H_ |
+#define _ASM_I386_CPU_H_ |
+ |
+#include <linux/device.h> |
+#include <linux/cpu.h> |
+#include <linux/topology.h> |
+ |
+#include <asm/node.h> |
+ |
+struct i386_cpu { |
+ struct cpu cpu; |
+}; |
+extern struct i386_cpu cpu_devices[NR_CPUS]; |
+ |
+ |
+static inline int arch_register_cpu(int num){ |
+ struct node *parent = NULL; |
+ |
+#ifdef CONFIG_NUMA |
+ parent = &node_devices[cpu_to_node(num)].node; |
+#endif /* CONFIG_NUMA */ |
+ |
+ return register_cpu(&cpu_devices[num].cpu, num, parent); |
+} |
+ |
+#endif /* _ASM_I386_CPU_H_ */ |
Index: linuxc26/include/asm/resource.h |
=================================================================== |
--- linuxc26/include/asm/resource.h (nonexistent) |
+++ linuxc26/include/asm/resource.h (revision 422) |
@@ -0,0 +1,47 @@ |
+#ifndef _I386_RESOURCE_H |
+#define _I386_RESOURCE_H |
+ |
+/* |
+ * Resource limits |
+ */ |
+ |
+#define RLIMIT_CPU 0 /* CPU time in ms */ |
+#define RLIMIT_FSIZE 1 /* Maximum filesize */ |
+#define RLIMIT_DATA 2 /* max data size */ |
+#define RLIMIT_STACK 3 /* max stack size */ |
+#define RLIMIT_CORE 4 /* max core file size */ |
+#define RLIMIT_RSS 5 /* max resident set size */ |
+#define RLIMIT_NPROC 6 /* max number of processes */ |
+#define RLIMIT_NOFILE 7 /* max number of open files */ |
+#define RLIMIT_MEMLOCK 8 /* max locked-in-memory address space */ |
+#define RLIMIT_AS 9 /* address space limit */ |
+#define RLIMIT_LOCKS 10 /* maximum file locks held */ |
+ |
+#define RLIM_NLIMITS 11 |
+ |
+/* |
+ * SuS says limits have to be unsigned. |
+ * Which makes a ton more sense anyway. |
+ */ |
+#define RLIM_INFINITY (~0UL) |
+ |
+#ifdef __KERNEL__ |
+ |
+#define INIT_RLIMITS \ |
+{ \ |
+ { RLIM_INFINITY, RLIM_INFINITY }, \ |
+ { RLIM_INFINITY, RLIM_INFINITY }, \ |
+ { RLIM_INFINITY, RLIM_INFINITY }, \ |
+ { _STK_LIM, RLIM_INFINITY }, \ |
+ { 0, RLIM_INFINITY }, \ |
+ { RLIM_INFINITY, RLIM_INFINITY }, \ |
+ { 0, 0 }, \ |
+ { INR_OPEN, INR_OPEN }, \ |
+ { RLIM_INFINITY, RLIM_INFINITY }, \ |
+ { RLIM_INFINITY, RLIM_INFINITY }, \ |
+ { RLIM_INFINITY, RLIM_INFINITY }, \ |
+} |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif |
Index: linuxc26/include/asm/numnodes.h |
=================================================================== |
--- linuxc26/include/asm/numnodes.h (nonexistent) |
+++ linuxc26/include/asm/numnodes.h (revision 422) |
@@ -0,0 +1,18 @@ |
+#ifndef _ASM_MAX_NUMNODES_H |
+#define _ASM_MAX_NUMNODES_H |
+ |
+#include <linux/config.h> |
+ |
+#ifdef CONFIG_X86_NUMAQ |
+ |
+/* Max 16 Nodes */ |
+#define NODES_SHIFT 4 |
+ |
+#elif defined(CONFIG_ACPI_SRAT) |
+ |
+/* Max 8 Nodes */ |
+#define NODES_SHIFT 3 |
+ |
+#endif /* CONFIG_X86_NUMAQ */ |
+ |
+#endif /* _ASM_MAX_NUMNODES_H */ |
Index: linuxc26/include/asm/mca.h |
=================================================================== |
--- linuxc26/include/asm/mca.h (nonexistent) |
+++ linuxc26/include/asm/mca.h (revision 422) |
@@ -0,0 +1,46 @@ |
+/* -*- mode: c; c-basic-offset: 8 -*- */ |
+ |
+/* Platform specific MCA defines */ |
+#ifndef _ASM_MCA_H |
+#define _ASM_MCA_H |
+ |
+/* Maximal number of MCA slots - actually, some machines have less, but |
+ * they all have sufficient number of POS registers to cover 8. |
+ */ |
+#define MCA_MAX_SLOT_NR 8 |
+ |
+/* Most machines have only one MCA bus. The only multiple bus machines |
+ * I know have at most two */ |
+#define MAX_MCA_BUSSES 2 |
+ |
+#define MCA_PRIMARY_BUS 0 |
+#define MCA_SECONDARY_BUS 1 |
+ |
+/* Dummy slot numbers on primary MCA for integrated functions */ |
+#define MCA_INTEGSCSI (MCA_MAX_SLOT_NR) |
+#define MCA_INTEGVIDEO (MCA_MAX_SLOT_NR+1) |
+#define MCA_MOTHERBOARD (MCA_MAX_SLOT_NR+2) |
+ |
+/* Dummy POS values for integrated functions */ |
+#define MCA_DUMMY_POS_START 0x10000 |
+#define MCA_INTEGSCSI_POS (MCA_DUMMY_POS_START+1) |
+#define MCA_INTEGVIDEO_POS (MCA_DUMMY_POS_START+2) |
+#define MCA_MOTHERBOARD_POS (MCA_DUMMY_POS_START+3) |
+ |
+/* MCA registers */ |
+ |
+#define MCA_MOTHERBOARD_SETUP_REG 0x94 |
+#define MCA_ADAPTER_SETUP_REG 0x96 |
+#define MCA_POS_REG(n) (0x100+(n)) |
+ |
+#define MCA_ENABLED 0x01 /* POS 2, set if adapter enabled */ |
+ |
+/* Max number of adapters, including both slots and various integrated |
+ * things. |
+ */ |
+#define MCA_NUMADAPTERS (MCA_MAX_SLOT_NR+3) |
+ |
+/* lock to protect access to the MCA registers */ |
+extern spinlock_t mca_lock; |
+ |
+#endif |
Index: linuxc26/include/asm/vm86.h |
=================================================================== |
--- linuxc26/include/asm/vm86.h (nonexistent) |
+++ linuxc26/include/asm/vm86.h (revision 422) |
@@ -0,0 +1,208 @@ |
+#ifndef _LINUX_VM86_H |
+#define _LINUX_VM86_H |
+ |
+/* |
+ * I'm guessing at the VIF/VIP flag usage, but hope that this is how |
+ * the Pentium uses them. Linux will return from vm86 mode when both |
+ * VIF and VIP is set. |
+ * |
+ * On a Pentium, we could probably optimize the virtual flags directly |
+ * in the eflags register instead of doing it "by hand" in vflags... |
+ * |
+ * Linus |
+ */ |
+ |
+#define TF_MASK 0x00000100 |
+#define IF_MASK 0x00000200 |
+#define IOPL_MASK 0x00003000 |
+#define NT_MASK 0x00004000 |
+#define VM_MASK 0x00020000 |
+#define AC_MASK 0x00040000 |
+#define VIF_MASK 0x00080000 /* virtual interrupt flag */ |
+#define VIP_MASK 0x00100000 /* virtual interrupt pending */ |
+#define ID_MASK 0x00200000 |
+ |
+#define BIOSSEG 0x0f000 |
+ |
+#define CPU_086 0 |
+#define CPU_186 1 |
+#define CPU_286 2 |
+#define CPU_386 3 |
+#define CPU_486 4 |
+#define CPU_586 5 |
+ |
+/* |
+ * Return values for the 'vm86()' system call |
+ */ |
+#define VM86_TYPE(retval) ((retval) & 0xff) |
+#define VM86_ARG(retval) ((retval) >> 8) |
+ |
+#define VM86_SIGNAL 0 /* return due to signal */ |
+#define VM86_UNKNOWN 1 /* unhandled GP fault - IO-instruction or similar */ |
+#define VM86_INTx 2 /* int3/int x instruction (ARG = x) */ |
+#define VM86_STI 3 /* sti/popf/iret instruction enabled virtual interrupts */ |
+ |
+/* |
+ * Additional return values when invoking new vm86() |
+ */ |
+#define VM86_PICRETURN 4 /* return due to pending PIC request */ |
+#define VM86_TRAP 6 /* return due to DOS-debugger request */ |
+ |
+/* |
+ * function codes when invoking new vm86() |
+ */ |
+#define VM86_PLUS_INSTALL_CHECK 0 |
+#define VM86_ENTER 1 |
+#define VM86_ENTER_NO_BYPASS 2 |
+#define VM86_REQUEST_IRQ 3 |
+#define VM86_FREE_IRQ 4 |
+#define VM86_GET_IRQ_BITS 5 |
+#define VM86_GET_AND_RESET_IRQ 6 |
+ |
+/* |
+ * This is the stack-layout seen by the user space program when we have |
+ * done a translation of "SAVE_ALL" from vm86 mode. The real kernel layout |
+ * is 'kernel_vm86_regs' (see below). |
+ */ |
+ |
+struct vm86_regs { |
+/* |
+ * normal regs, with special meaning for the segment descriptors.. |
+ */ |
+ long ebx; |
+ long ecx; |
+ long edx; |
+ long esi; |
+ long edi; |
+ long ebp; |
+ long eax; |
+ long __null_ds; |
+ long __null_es; |
+ long __null_fs; |
+ long __null_gs; |
+ long orig_eax; |
+ long eip; |
+ unsigned short cs, __csh; |
+ long eflags; |
+ long esp; |
+ unsigned short ss, __ssh; |
+/* |
+ * these are specific to v86 mode: |
+ */ |
+ unsigned short es, __esh; |
+ unsigned short ds, __dsh; |
+ unsigned short fs, __fsh; |
+ unsigned short gs, __gsh; |
+}; |
+ |
+struct revectored_struct { |
+ unsigned long __map[8]; /* 256 bits */ |
+}; |
+ |
+struct vm86_struct { |
+ struct vm86_regs regs; |
+ unsigned long flags; |
+ unsigned long screen_bitmap; |
+ unsigned long cpu_type; |
+ struct revectored_struct int_revectored; |
+ struct revectored_struct int21_revectored; |
+}; |
+ |
+/* |
+ * flags masks |
+ */ |
+#define VM86_SCREEN_BITMAP 0x0001 |
+ |
+struct vm86plus_info_struct { |
+ unsigned long force_return_for_pic:1; |
+ unsigned long vm86dbg_active:1; /* for debugger */ |
+ unsigned long vm86dbg_TFpendig:1; /* for debugger */ |
+ unsigned long unused:28; |
+ unsigned long is_vm86pus:1; /* for vm86 internal use */ |
+ unsigned char vm86dbg_intxxtab[32]; /* for debugger */ |
+}; |
+ |
+struct vm86plus_struct { |
+ struct vm86_regs regs; |
+ unsigned long flags; |
+ unsigned long screen_bitmap; |
+ unsigned long cpu_type; |
+ struct revectored_struct int_revectored; |
+ struct revectored_struct int21_revectored; |
+ struct vm86plus_info_struct vm86plus; |
+}; |
+ |
+#ifdef __KERNEL__ |
+/* |
+ * This is the (kernel) stack-layout when we have done a "SAVE_ALL" from vm86 |
+ * mode - the main change is that the old segment descriptors aren't |
+ * useful any more and are forced to be zero by the kernel (and the |
+ * hardware when a trap occurs), and the real segment descriptors are |
+ * at the end of the structure. Look at ptrace.h to see the "normal" |
+ * setup. For user space layout see 'struct vm86_regs' above. |
+ */ |
+ |
+struct kernel_vm86_regs { |
+/* |
+ * normal regs, with special meaning for the segment descriptors.. |
+ */ |
+ long ebx; |
+ long ecx; |
+ long edx; |
+ long esi; |
+ long edi; |
+ long ebp; |
+ long eax; |
+ long __null_ds; |
+ long __null_es; |
+ long orig_eax; |
+ long eip; |
+ unsigned short cs, __csh; |
+ long eflags; |
+ long esp; |
+ unsigned short ss, __ssh; |
+/* |
+ * these are specific to v86 mode: |
+ */ |
+ unsigned short es, __esh; |
+ unsigned short ds, __dsh; |
+ unsigned short fs, __fsh; |
+ unsigned short gs, __gsh; |
+}; |
+ |
+struct kernel_vm86_struct { |
+ struct kernel_vm86_regs regs; |
+/* |
+ * the below part remains on the kernel stack while we are in VM86 mode. |
+ * 'tss.esp0' then contains the address of VM86_TSS_ESP0 below, and when we |
+ * get forced back from VM86, the CPU and "SAVE_ALL" will restore the above |
+ * 'struct kernel_vm86_regs' with the then actual values. |
+ * Therefore, pt_regs in fact points to a complete 'kernel_vm86_struct' |
+ * in kernelspace, hence we need not reget the data from userspace. |
+ */ |
+#define VM86_TSS_ESP0 flags |
+ unsigned long flags; |
+ unsigned long screen_bitmap; |
+ unsigned long cpu_type; |
+ struct revectored_struct int_revectored; |
+ struct revectored_struct int21_revectored; |
+ struct vm86plus_info_struct vm86plus; |
+ struct pt_regs *regs32; /* here we save the pointer to the old regs */ |
+/* |
+ * The below is not part of the structure, but the stack layout continues |
+ * this way. In front of 'return-eip' may be some data, depending on |
+ * compilation, so we don't rely on this and save the pointer to 'oldregs' |
+ * in 'regs32' above. |
+ * However, with GCC-2.7.2 and the current CFLAGS you see exactly this: |
+ |
+ long return-eip; from call to vm86() |
+ struct pt_regs oldregs; user space registers as saved by syscall |
+ */ |
+}; |
+ |
+void handle_vm86_fault(struct kernel_vm86_regs *, long); |
+int handle_vm86_trap(struct kernel_vm86_regs *, long, int); |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif |
Index: linuxc26/include/asm/scatterlist.h |
=================================================================== |
--- linuxc26/include/asm/scatterlist.h (nonexistent) |
+++ linuxc26/include/asm/scatterlist.h (revision 422) |
@@ -0,0 +1,21 @@ |
+#ifndef _I386_SCATTERLIST_H |
+#define _I386_SCATTERLIST_H |
+ |
+struct scatterlist { |
+ struct page *page; |
+ unsigned int offset; |
+ dma_addr_t dma_address; |
+ unsigned int length; |
+}; |
+ |
+/* These macros should be used after a pci_map_sg call has been done |
+ * to get bus addresses of each of the SG entries and their lengths. |
+ * You should only work with the number of sg entries pci_map_sg |
+ * returns. |
+ */ |
+#define sg_dma_address(sg) ((sg)->dma_address) |
+#define sg_dma_len(sg) ((sg)->length) |
+ |
+#define ISA_DMA_THRESHOLD (0x00ffffff) |
+ |
+#endif /* !(_I386_SCATTERLIST_H) */ |
Index: linuxc26/include/asm/boot.h |
=================================================================== |
--- linuxc26/include/asm/boot.h (nonexistent) |
+++ linuxc26/include/asm/boot.h (revision 422) |
@@ -0,0 +1,15 @@ |
+#ifndef _LINUX_BOOT_H |
+#define _LINUX_BOOT_H |
+ |
+/* Don't touch these, unless you really know what you're doing. */ |
+#define DEF_INITSEG 0x9000 |
+#define DEF_SYSSEG 0x1000 |
+#define DEF_SETUPSEG 0x9020 |
+#define DEF_SYSSIZE 0x7F00 |
+ |
+/* Internal svga startup constants */ |
+#define NORMAL_VGA 0xffff /* 80x25 mode */ |
+#define EXTENDED_VGA 0xfffe /* 80x50 mode */ |
+#define ASK_VGA 0xfffd /* ask for it at bootup */ |
+ |
+#endif |
Index: linuxc26/include/asm/cpufeature.h |
=================================================================== |
--- linuxc26/include/asm/cpufeature.h (nonexistent) |
+++ linuxc26/include/asm/cpufeature.h (revision 422) |
@@ -0,0 +1,112 @@ |
+/* |
+ * cpufeature.h |
+ * |
+ * Defines x86 CPU feature bits |
+ */ |
+ |
+#ifndef __ASM_I386_CPUFEATURE_H |
+#define __ASM_I386_CPUFEATURE_H |
+ |
+#include <linux/bitops.h> |
+ |
+#define NCAPINTS 6 /* Currently we have 6 32-bit words worth of info */ |
+ |
+/* Intel-defined CPU features, CPUID level 0x00000001 (edx), word 0 */ |
+#define X86_FEATURE_FPU (0*32+ 0) /* Onboard FPU */ |
+#define X86_FEATURE_VME (0*32+ 1) /* Virtual Mode Extensions */ |
+#define X86_FEATURE_DE (0*32+ 2) /* Debugging Extensions */ |
+#define X86_FEATURE_PSE (0*32+ 3) /* Page Size Extensions */ |
+#define X86_FEATURE_TSC (0*32+ 4) /* Time Stamp Counter */ |
+#define X86_FEATURE_MSR (0*32+ 5) /* Model-Specific Registers, RDMSR, WRMSR */ |
+#define X86_FEATURE_PAE (0*32+ 6) /* Physical Address Extensions */ |
+#define X86_FEATURE_MCE (0*32+ 7) /* Machine Check Architecture */ |
+#define X86_FEATURE_CX8 (0*32+ 8) /* CMPXCHG8 instruction */ |
+#define X86_FEATURE_APIC (0*32+ 9) /* Onboard APIC */ |
+#define X86_FEATURE_SEP (0*32+11) /* SYSENTER/SYSEXIT */ |
+#define X86_FEATURE_MTRR (0*32+12) /* Memory Type Range Registers */ |
+#define X86_FEATURE_PGE (0*32+13) /* Page Global Enable */ |
+#define X86_FEATURE_MCA (0*32+14) /* Machine Check Architecture */ |
+#define X86_FEATURE_CMOV (0*32+15) /* CMOV instruction (FCMOVCC and FCOMI too if FPU present) */ |
+#define X86_FEATURE_PAT (0*32+16) /* Page Attribute Table */ |
+#define X86_FEATURE_PSE36 (0*32+17) /* 36-bit PSEs */ |
+#define X86_FEATURE_PN (0*32+18) /* Processor serial number */ |
+#define X86_FEATURE_CLFLSH (0*32+19) /* Supports the CLFLUSH instruction */ |
+#define X86_FEATURE_DTES (0*32+21) /* Debug Trace Store */ |
+#define X86_FEATURE_ACPI (0*32+22) /* ACPI via MSR */ |
+#define X86_FEATURE_MMX (0*32+23) /* Multimedia Extensions */ |
+#define X86_FEATURE_FXSR (0*32+24) /* FXSAVE and FXRSTOR instructions (fast save and restore */ |
+ /* of FPU context), and CR4.OSFXSR available */ |
+#define X86_FEATURE_XMM (0*32+25) /* Streaming SIMD Extensions */ |
+#define X86_FEATURE_XMM2 (0*32+26) /* Streaming SIMD Extensions-2 */ |
+#define X86_FEATURE_SELFSNOOP (0*32+27) /* CPU self snoop */ |
+#define X86_FEATURE_HT (0*32+28) /* Hyper-Threading */ |
+#define X86_FEATURE_ACC (0*32+29) /* Automatic clock control */ |
+#define X86_FEATURE_IA64 (0*32+30) /* IA-64 processor */ |
+ |
+/* AMD-defined CPU features, CPUID level 0x80000001, word 1 */ |
+/* Don't duplicate feature flags which are redundant with Intel! */ |
+#define X86_FEATURE_SYSCALL (1*32+11) /* SYSCALL/SYSRET */ |
+#define X86_FEATURE_MP (1*32+19) /* MP Capable. */ |
+#define X86_FEATURE_MMXEXT (1*32+22) /* AMD MMX extensions */ |
+#define X86_FEATURE_LM (1*32+29) /* Long Mode (x86-64) */ |
+#define X86_FEATURE_3DNOWEXT (1*32+30) /* AMD 3DNow! extensions */ |
+#define X86_FEATURE_3DNOW (1*32+31) /* 3DNow! */ |
+ |
+/* Transmeta-defined CPU features, CPUID level 0x80860001, word 2 */ |
+#define X86_FEATURE_RECOVERY (2*32+ 0) /* CPU in recovery mode */ |
+#define X86_FEATURE_LONGRUN (2*32+ 1) /* Longrun power control */ |
+#define X86_FEATURE_LRTI (2*32+ 3) /* LongRun table interface */ |
+ |
+/* Other features, Linux-defined mapping, word 3 */ |
+/* This range is used for feature bits which conflict or are synthesized */ |
+#define X86_FEATURE_CXMMX (3*32+ 0) /* Cyrix MMX extensions */ |
+#define X86_FEATURE_K6_MTRR (3*32+ 1) /* AMD K6 nonstandard MTRRs */ |
+#define X86_FEATURE_CYRIX_ARR (3*32+ 2) /* Cyrix ARRs (= MTRRs) */ |
+#define X86_FEATURE_CENTAUR_MCR (3*32+ 3) /* Centaur MCRs (= MTRRs) */ |
+/* cpu types for specific tunings: */ |
+#define X86_FEATURE_K8 (3*32+ 4) /* Opteron, Athlon64 */ |
+#define X86_FEATURE_K7 (3*32+ 5) /* Athlon */ |
+#define X86_FEATURE_P3 (3*32+ 6) /* P3 */ |
+#define X86_FEATURE_P4 (3*32+ 7) /* P4 */ |
+ |
+/* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ |
+#define X86_FEATURE_EST (4*32+ 7) /* Enhanced SpeedStep */ |
+#define X86_FEATURE_MWAIT (4*32+ 3) /* Monitor/Mwait support */ |
+ |
+ |
+/* VIA/Cyrix/Centaur-defined CPU features, CPUID level 0xC0000001, word 5 */ |
+#define X86_FEATURE_XSTORE (5*32+ 2) /* on-CPU RNG present (xstore insn) */ |
+ |
+ |
+#define cpu_has(c, bit) test_bit(bit, (c)->x86_capability) |
+#define boot_cpu_has(bit) test_bit(bit, boot_cpu_data.x86_capability) |
+ |
+#define cpu_has_fpu boot_cpu_has(X86_FEATURE_FPU) |
+#define cpu_has_vme boot_cpu_has(X86_FEATURE_VME) |
+#define cpu_has_de boot_cpu_has(X86_FEATURE_DE) |
+#define cpu_has_pse boot_cpu_has(X86_FEATURE_PSE) |
+#define cpu_has_tsc boot_cpu_has(X86_FEATURE_TSC) |
+#define cpu_has_pae boot_cpu_has(X86_FEATURE_PAE) |
+#define cpu_has_pge boot_cpu_has(X86_FEATURE_PGE) |
+#define cpu_has_sse2 boot_cpu_has(X86_FEATURE_XMM2) |
+#define cpu_has_apic boot_cpu_has(X86_FEATURE_APIC) |
+#define cpu_has_sep boot_cpu_has(X86_FEATURE_SEP) |
+#define cpu_has_mtrr boot_cpu_has(X86_FEATURE_MTRR) |
+#define cpu_has_mmx boot_cpu_has(X86_FEATURE_MMX) |
+#define cpu_has_fxsr boot_cpu_has(X86_FEATURE_FXSR) |
+#define cpu_has_xmm boot_cpu_has(X86_FEATURE_XMM) |
+#define cpu_has_ht boot_cpu_has(X86_FEATURE_HT) |
+#define cpu_has_mp boot_cpu_has(X86_FEATURE_MP) |
+#define cpu_has_k6_mtrr boot_cpu_has(X86_FEATURE_K6_MTRR) |
+#define cpu_has_cyrix_arr boot_cpu_has(X86_FEATURE_CYRIX_ARR) |
+#define cpu_has_centaur_mcr boot_cpu_has(X86_FEATURE_CENTAUR_MCR) |
+#define cpu_has_xstore boot_cpu_has(X86_FEATURE_XSTORE) |
+ |
+#endif /* __ASM_I386_CPUFEATURE_H */ |
+ |
+/* |
+ * Local Variables: |
+ * mode:c |
+ * comment-column:42 |
+ * End: |
+ */ |
Index: linuxc26/include/asm/unistd.h |
=================================================================== |
--- linuxc26/include/asm/unistd.h (nonexistent) |
+++ linuxc26/include/asm/unistd.h (revision 422) |
@@ -0,0 +1,412 @@ |
+#ifndef _ASM_I386_UNISTD_H_ |
+#define _ASM_I386_UNISTD_H_ |
+ |
+/* |
+ * This file contains the system call numbers. |
+ */ |
+ |
+#define __NR_restart_syscall 0 |
+#define __NR_exit 1 |
+#define __NR_fork 2 |
+#define __NR_read 3 |
+#define __NR_write 4 |
+#define __NR_open 5 |
+#define __NR_close 6 |
+#define __NR_waitpid 7 |
+#define __NR_creat 8 |
+#define __NR_link 9 |
+#define __NR_unlink 10 |
+#define __NR_execve 11 |
+#define __NR_chdir 12 |
+#define __NR_time 13 |
+#define __NR_mknod 14 |
+#define __NR_chmod 15 |
+#define __NR_lchown 16 |
+#define __NR_break 17 |
+#define __NR_oldstat 18 |
+#define __NR_lseek 19 |
+#define __NR_getpid 20 |
+#define __NR_mount 21 |
+#define __NR_umount 22 |
+#define __NR_setuid 23 |
+#define __NR_getuid 24 |
+#define __NR_stime 25 |
+#define __NR_ptrace 26 |
+#define __NR_alarm 27 |
+#define __NR_oldfstat 28 |
+#define __NR_pause 29 |
+#define __NR_utime 30 |
+#define __NR_stty 31 |
+#define __NR_gtty 32 |
+#define __NR_access 33 |
+#define __NR_nice 34 |
+#define __NR_ftime 35 |
+#define __NR_sync 36 |
+#define __NR_kill 37 |
+#define __NR_rename 38 |
+#define __NR_mkdir 39 |
+#define __NR_rmdir 40 |
+#define __NR_dup 41 |
+#define __NR_pipe 42 |
+#define __NR_times 43 |
+#define __NR_prof 44 |
+#define __NR_brk 45 |
+#define __NR_setgid 46 |
+#define __NR_getgid 47 |
+#define __NR_signal 48 |
+#define __NR_geteuid 49 |
+#define __NR_getegid 50 |
+#define __NR_acct 51 |
+#define __NR_umount2 52 |
+#define __NR_lock 53 |
+#define __NR_ioctl 54 |
+#define __NR_fcntl 55 |
+#define __NR_mpx 56 |
+#define __NR_setpgid 57 |
+#define __NR_ulimit 58 |
+#define __NR_oldolduname 59 |
+#define __NR_umask 60 |
+#define __NR_chroot 61 |
+#define __NR_ustat 62 |
+#define __NR_dup2 63 |
+#define __NR_getppid 64 |
+#define __NR_getpgrp 65 |
+#define __NR_setsid 66 |
+#define __NR_sigaction 67 |
+#define __NR_sgetmask 68 |
+#define __NR_ssetmask 69 |
+#define __NR_setreuid 70 |
+#define __NR_setregid 71 |
+#define __NR_sigsuspend 72 |
+#define __NR_sigpending 73 |
+#define __NR_sethostname 74 |
+#define __NR_setrlimit 75 |
+#define __NR_getrlimit 76 /* Back compatible 2Gig limited rlimit */ |
+#define __NR_getrusage 77 |
+#define __NR_gettimeofday 78 |
+#define __NR_settimeofday 79 |
+#define __NR_getgroups 80 |
+#define __NR_setgroups 81 |
+#define __NR_select 82 |
+#define __NR_symlink 83 |
+#define __NR_oldlstat 84 |
+#define __NR_readlink 85 |
+#define __NR_uselib 86 |
+#define __NR_swapon 87 |
+#define __NR_reboot 88 |
+#define __NR_readdir 89 |
+#define __NR_mmap 90 |
+#define __NR_munmap 91 |
+#define __NR_truncate 92 |
+#define __NR_ftruncate 93 |
+#define __NR_fchmod 94 |
+#define __NR_fchown 95 |
+#define __NR_getpriority 96 |
+#define __NR_setpriority 97 |
+#define __NR_profil 98 |
+#define __NR_statfs 99 |
+#define __NR_fstatfs 100 |
+#define __NR_ioperm 101 |
+#define __NR_socketcall 102 |
+#define __NR_syslog 103 |
+#define __NR_setitimer 104 |
+#define __NR_getitimer 105 |
+#define __NR_stat 106 |
+#define __NR_lstat 107 |
+#define __NR_fstat 108 |
+#define __NR_olduname 109 |
+#define __NR_iopl 110 |
+#define __NR_vhangup 111 |
+#define __NR_idle 112 |
+#define __NR_vm86old 113 |
+#define __NR_wait4 114 |
+#define __NR_swapoff 115 |
+#define __NR_sysinfo 116 |
+#define __NR_ipc 117 |
+#define __NR_fsync 118 |
+#define __NR_sigreturn 119 |
+#define __NR_clone 120 |
+#define __NR_setdomainname 121 |
+#define __NR_uname 122 |
+#define __NR_modify_ldt 123 |
+#define __NR_adjtimex 124 |
+#define __NR_mprotect 125 |
+#define __NR_sigprocmask 126 |
+#define __NR_create_module 127 |
+#define __NR_init_module 128 |
+#define __NR_delete_module 129 |
+#define __NR_get_kernel_syms 130 |
+#define __NR_quotactl 131 |
+#define __NR_getpgid 132 |
+#define __NR_fchdir 133 |
+#define __NR_bdflush 134 |
+#define __NR_sysfs 135 |
+#define __NR_personality 136 |
+#define __NR_afs_syscall 137 /* Syscall for Andrew File System */ |
+#define __NR_setfsuid 138 |
+#define __NR_setfsgid 139 |
+#define __NR__llseek 140 |
+#define __NR_getdents 141 |
+#define __NR__newselect 142 |
+#define __NR_flock 143 |
+#define __NR_msync 144 |
+#define __NR_readv 145 |
+#define __NR_writev 146 |
+#define __NR_getsid 147 |
+#define __NR_fdatasync 148 |
+#define __NR__sysctl 149 |
+#define __NR_mlock 150 |
+#define __NR_munlock 151 |
+#define __NR_mlockall 152 |
+#define __NR_munlockall 153 |
+#define __NR_sched_setparam 154 |
+#define __NR_sched_getparam 155 |
+#define __NR_sched_setscheduler 156 |
+#define __NR_sched_getscheduler 157 |
+#define __NR_sched_yield 158 |
+#define __NR_sched_get_priority_max 159 |
+#define __NR_sched_get_priority_min 160 |
+#define __NR_sched_rr_get_interval 161 |
+#define __NR_nanosleep 162 |
+#define __NR_mremap 163 |
+#define __NR_setresuid 164 |
+#define __NR_getresuid 165 |
+#define __NR_vm86 166 |
+#define __NR_query_module 167 |
+#define __NR_poll 168 |
+#define __NR_nfsservctl 169 |
+#define __NR_setresgid 170 |
+#define __NR_getresgid 171 |
+#define __NR_prctl 172 |
+#define __NR_rt_sigreturn 173 |
+#define __NR_rt_sigaction 174 |
+#define __NR_rt_sigprocmask 175 |
+#define __NR_rt_sigpending 176 |
+#define __NR_rt_sigtimedwait 177 |
+#define __NR_rt_sigqueueinfo 178 |
+#define __NR_rt_sigsuspend 179 |
+#define __NR_pread64 180 |
+#define __NR_pwrite64 181 |
+#define __NR_chown 182 |
+#define __NR_getcwd 183 |
+#define __NR_capget 184 |
+#define __NR_capset 185 |
+#define __NR_sigaltstack 186 |
+#define __NR_sendfile 187 |
+#define __NR_getpmsg 188 /* some people actually want streams */ |
+#define __NR_putpmsg 189 /* some people actually want streams */ |
+#define __NR_vfork 190 |
+#define __NR_ugetrlimit 191 /* SuS compliant getrlimit */ |
+#define __NR_mmap2 192 |
+#define __NR_truncate64 193 |
+#define __NR_ftruncate64 194 |
+#define __NR_stat64 195 |
+#define __NR_lstat64 196 |
+#define __NR_fstat64 197 |
+#define __NR_lchown32 198 |
+#define __NR_getuid32 199 |
+#define __NR_getgid32 200 |
+#define __NR_geteuid32 201 |
+#define __NR_getegid32 202 |
+#define __NR_setreuid32 203 |
+#define __NR_setregid32 204 |
+#define __NR_getgroups32 205 |
+#define __NR_setgroups32 206 |
+#define __NR_fchown32 207 |
+#define __NR_setresuid32 208 |
+#define __NR_getresuid32 209 |
+#define __NR_setresgid32 210 |
+#define __NR_getresgid32 211 |
+#define __NR_chown32 212 |
+#define __NR_setuid32 213 |
+#define __NR_setgid32 214 |
+#define __NR_setfsuid32 215 |
+#define __NR_setfsgid32 216 |
+#define __NR_pivot_root 217 |
+#define __NR_mincore 218 |
+#define __NR_madvise 219 |
+#define __NR_madvise1 219 /* delete when C lib stub is removed */ |
+#define __NR_getdents64 220 |
+#define __NR_fcntl64 221 |
+/* 223 is unused */ |
+#define __NR_gettid 224 |
+#define __NR_readahead 225 |
+#define __NR_setxattr 226 |
+#define __NR_lsetxattr 227 |
+#define __NR_fsetxattr 228 |
+#define __NR_getxattr 229 |
+#define __NR_lgetxattr 230 |
+#define __NR_fgetxattr 231 |
+#define __NR_listxattr 232 |
+#define __NR_llistxattr 233 |
+#define __NR_flistxattr 234 |
+#define __NR_removexattr 235 |
+#define __NR_lremovexattr 236 |
+#define __NR_fremovexattr 237 |
+#define __NR_tkill 238 |
+#define __NR_sendfile64 239 |
+#define __NR_futex 240 |
+#define __NR_sched_setaffinity 241 |
+#define __NR_sched_getaffinity 242 |
+#define __NR_set_thread_area 243 |
+#define __NR_get_thread_area 244 |
+#define __NR_io_setup 245 |
+#define __NR_io_destroy 246 |
+#define __NR_io_getevents 247 |
+#define __NR_io_submit 248 |
+#define __NR_io_cancel 249 |
+#define __NR_fadvise64 250 |
+ |
+#define __NR_exit_group 252 |
+#define __NR_lookup_dcookie 253 |
+#define __NR_epoll_create 254 |
+#define __NR_epoll_ctl 255 |
+#define __NR_epoll_wait 256 |
+#define __NR_remap_file_pages 257 |
+#define __NR_set_tid_address 258 |
+#define __NR_timer_create 259 |
+#define __NR_timer_settime (__NR_timer_create+1) |
+#define __NR_timer_gettime (__NR_timer_create+2) |
+#define __NR_timer_getoverrun (__NR_timer_create+3) |
+#define __NR_timer_delete (__NR_timer_create+4) |
+#define __NR_clock_settime (__NR_timer_create+5) |
+#define __NR_clock_gettime (__NR_timer_create+6) |
+#define __NR_clock_getres (__NR_timer_create+7) |
+#define __NR_clock_nanosleep (__NR_timer_create+8) |
+#define __NR_statfs64 268 |
+#define __NR_fstatfs64 269 |
+#define __NR_tgkill 270 |
+#define __NR_utimes 271 |
+#define __NR_fadvise64_64 272 |
+#define __NR_vserver 273 |
+ |
+#define NR_syscalls 274 |
+ |
+/* user-visible error numbers are in the range -1 - -124: see <asm-i386/errno.h> */ |
+ |
+#define __syscall_return(type, res) \ |
+do { \ |
+ if ((unsigned long)(res) >= (unsigned long)(-125)) { \ |
+ errno = -(res); \ |
+ res = -1; \ |
+ } \ |
+ return (type) (res); \ |
+} while (0) |
+ |
+/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */ |
+#define _syscall0(type,name) \ |
+type name(void) \ |
+{ \ |
+long __res; \ |
+__asm__ volatile ("int $0x80" \ |
+ : "=a" (__res) \ |
+ : "0" (__NR_##name)); \ |
+__syscall_return(type,__res); \ |
+} |
+ |
+#define _syscall1(type,name,type1,arg1) \ |
+type name(type1 arg1) \ |
+{ \ |
+long __res; \ |
+__asm__ volatile ("int $0x80" \ |
+ : "=a" (__res) \ |
+ : "0" (__NR_##name),"b" ((long)(arg1))); \ |
+__syscall_return(type,__res); \ |
+} |
+ |
+#define _syscall2(type,name,type1,arg1,type2,arg2) \ |
+type name(type1 arg1,type2 arg2) \ |
+{ \ |
+long __res; \ |
+__asm__ volatile ("int $0x80" \ |
+ : "=a" (__res) \ |
+ : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2))); \ |
+__syscall_return(type,__res); \ |
+} |
+ |
+#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ |
+type name(type1 arg1,type2 arg2,type3 arg3) \ |
+{ \ |
+long __res; \ |
+__asm__ volatile ("int $0x80" \ |
+ : "=a" (__res) \ |
+ : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ |
+ "d" ((long)(arg3))); \ |
+__syscall_return(type,__res); \ |
+} |
+ |
+#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ |
+type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ |
+{ \ |
+long __res; \ |
+__asm__ volatile ("int $0x80" \ |
+ : "=a" (__res) \ |
+ : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ |
+ "d" ((long)(arg3)),"S" ((long)(arg4))); \ |
+__syscall_return(type,__res); \ |
+} |
+ |
+#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ |
+ type5,arg5) \ |
+type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ |
+{ \ |
+long __res; \ |
+__asm__ volatile ("int $0x80" \ |
+ : "=a" (__res) \ |
+ : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ |
+ "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \ |
+__syscall_return(type,__res); \ |
+} |
+ |
+#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ |
+ type5,arg5,type6,arg6) \ |
+type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \ |
+{ \ |
+long __res; \ |
+__asm__ volatile ("push %%ebp ; movl %%eax,%%ebp ; movl %1,%%eax ; int $0x80 ; pop %%ebp" \ |
+ : "=a" (__res) \ |
+ : "i" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ |
+ "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5)), \ |
+ "0" ((long)(arg6))); \ |
+__syscall_return(type,__res); \ |
+} |
+ |
+#ifdef __KERNEL_SYSCALLS__ |
+ |
+/* |
+ * we need this inline - forking from kernel space will result |
+ * in NO COPY ON WRITE (!!!), until an execve is executed. This |
+ * is no problem, but for the stack. This is handled by not letting |
+ * main() use the stack at all after fork(). Thus, no function |
+ * calls - which means inline code for fork too, as otherwise we |
+ * would use the stack upon exit from 'fork()'. |
+ * |
+ * Actually only pause and fork are needed inline, so that there |
+ * won't be any messing with the stack from main(), but we define |
+ * some others too. |
+ */ |
+#define __NR__exit __NR_exit |
+static inline _syscall0(pid_t,setsid) |
+static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count) |
+static inline _syscall3(int,read,int,fd,char *,buf,off_t,count) |
+static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count) |
+static inline _syscall1(int,dup,int,fd) |
+static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp) |
+static inline _syscall3(int,open,const char *,file,int,flag,int,mode) |
+static inline _syscall1(int,close,int,fd) |
+static inline _syscall1(int,_exit,int,exitcode) |
+static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options) |
+ |
+#endif |
+ |
+/* |
+ * "Conditional" syscalls |
+ * |
+ * What we want is __attribute__((weak,alias("sys_ni_syscall"))), |
+ * but it doesn't work on all toolchains, so we just do it by hand |
+ */ |
+#ifndef cond_syscall |
+#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall"); |
+#endif |
+ |
+#endif /* _ASM_I386_UNISTD_H_ */ |
Index: linuxc26/include/asm/sockios.h |
=================================================================== |
--- linuxc26/include/asm/sockios.h (nonexistent) |
+++ linuxc26/include/asm/sockios.h (revision 422) |
@@ -0,0 +1,12 @@ |
+#ifndef __ARCH_I386_SOCKIOS__ |
+#define __ARCH_I386_SOCKIOS__ |
+ |
+/* Socket-level I/O control calls. */ |
+#define FIOSETOWN 0x8901 |
+#define SIOCSPGRP 0x8902 |
+#define FIOGETOWN 0x8903 |
+#define SIOCGPGRP 0x8904 |
+#define SIOCATMARK 0x8905 |
+#define SIOCGSTAMP 0x8906 /* Get stamp */ |
+ |
+#endif |
Index: linuxc26/include/asm/topology.h |
=================================================================== |
--- linuxc26/include/asm/topology.h (nonexistent) |
+++ linuxc26/include/asm/topology.h (revision 422) |
@@ -0,0 +1,88 @@ |
+/* |
+ * linux/include/asm-i386/topology.h |
+ * |
+ * Written by: Matthew Dobson, IBM Corporation |
+ * |
+ * Copyright (C) 2002, IBM Corp. |
+ * |
+ * 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, GOOD TITLE or |
+ * NON INFRINGEMENT. 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. |
+ * |
+ * Send feedback to <colpatch@us.ibm.com> |
+ */ |
+#ifndef _ASM_I386_TOPOLOGY_H |
+#define _ASM_I386_TOPOLOGY_H |
+ |
+#ifdef CONFIG_NUMA |
+ |
+#include <asm/mpspec.h> |
+ |
+#include <linux/cpumask.h> |
+ |
+/* Mappings between logical cpu number and node number */ |
+extern cpumask_t node_2_cpu_mask[]; |
+extern int cpu_2_node[]; |
+ |
+/* Returns the number of the node containing CPU 'cpu' */ |
+static inline int cpu_to_node(int cpu) |
+{ |
+ return cpu_2_node[cpu]; |
+} |
+ |
+/* Returns the number of the node containing MemBlk 'memblk' */ |
+#define memblk_to_node(memblk) (memblk) |
+ |
+/* Returns the number of the node containing Node 'node'. This architecture is flat, |
+ so it is a pretty simple function! */ |
+#define parent_node(node) (node) |
+ |
+/* Returns a bitmask of CPUs on Node 'node'. */ |
+static inline cpumask_t node_to_cpumask(int node) |
+{ |
+ return node_2_cpu_mask[node]; |
+} |
+ |
+/* Returns the number of the first CPU on Node 'node'. */ |
+static inline int node_to_first_cpu(int node) |
+{ |
+ cpumask_t mask = node_to_cpumask(node); |
+ return first_cpu(mask); |
+} |
+ |
+/* Returns the number of the first MemBlk on Node 'node' */ |
+#define node_to_memblk(node) (node) |
+ |
+/* Returns the number of the node containing PCI bus 'bus' */ |
+static inline cpumask_t pcibus_to_cpumask(int bus) |
+{ |
+ return node_to_cpumask(mp_bus_id_to_node[bus]); |
+} |
+ |
+/* Cross-node load balancing interval. */ |
+#define NODE_BALANCE_RATE 100 |
+ |
+#else /* !CONFIG_NUMA */ |
+/* |
+ * Other i386 platforms should define their own version of the |
+ * above macros here. |
+ */ |
+ |
+#include <asm-generic/topology.h> |
+ |
+#endif /* CONFIG_NUMA */ |
+ |
+#endif /* _ASM_I386_TOPOLOGY_H */ |
Index: linuxc26/include/asm/kmap_types.h |
=================================================================== |
--- linuxc26/include/asm/kmap_types.h (nonexistent) |
+++ linuxc26/include/asm/kmap_types.h (revision 422) |
@@ -0,0 +1,32 @@ |
+#ifndef _ASM_KMAP_TYPES_H |
+#define _ASM_KMAP_TYPES_H |
+ |
+#include <linux/config.h> |
+ |
+#ifdef CONFIG_DEBUG_HIGHMEM |
+# define D(n) __KM_FENCE_##n , |
+#else |
+# define D(n) |
+#endif |
+ |
+enum km_type { |
+D(0) KM_BOUNCE_READ, |
+D(1) KM_SKB_SUNRPC_DATA, |
+D(2) KM_SKB_DATA_SOFTIRQ, |
+D(3) KM_USER0, |
+D(4) KM_USER1, |
+D(5) KM_BIO_SRC_IRQ, |
+D(6) KM_BIO_DST_IRQ, |
+D(7) KM_PTE0, |
+D(8) KM_PTE1, |
+D(9) KM_PTE2, |
+D(10) KM_IRQ0, |
+D(11) KM_IRQ1, |
+D(12) KM_SOFTIRQ0, |
+D(13) KM_SOFTIRQ1, |
+D(14) KM_TYPE_NR |
+}; |
+ |
+#undef D |
+ |
+#endif |
Index: linuxc26/include/asm/vga.h |
=================================================================== |
--- linuxc26/include/asm/vga.h (nonexistent) |
+++ linuxc26/include/asm/vga.h (revision 422) |
@@ -0,0 +1,20 @@ |
+/* |
+ * Access to VGA videoram |
+ * |
+ * (c) 1998 Martin Mares <mj@ucw.cz> |
+ */ |
+ |
+#ifndef _LINUX_ASM_VGA_H_ |
+#define _LINUX_ASM_VGA_H_ |
+ |
+/* |
+ * On the PC, we can just recalculate addresses and then |
+ * access the videoram directly without any black magic. |
+ */ |
+ |
+#define VGA_MAP_MEM(x) (unsigned long)phys_to_virt(x) |
+ |
+#define vga_readb(x) (*(x)) |
+#define vga_writeb(x,y) (*(y) = (x)) |
+ |
+#endif |
Index: linuxc26/include/asm/i8259.h |
=================================================================== |
--- linuxc26/include/asm/i8259.h (nonexistent) |
+++ linuxc26/include/asm/i8259.h (revision 422) |
@@ -0,0 +1,17 @@ |
+#ifndef __ASM_I8259_H__ |
+#define __ASM_I8259_H__ |
+ |
+extern unsigned int cached_irq_mask; |
+ |
+#define __byte(x,y) (((unsigned char *) &(y))[x]) |
+#define cached_master_mask (__byte(0, cached_irq_mask)) |
+#define cached_slave_mask (__byte(1, cached_irq_mask)) |
+ |
+extern spinlock_t i8259A_lock; |
+ |
+extern void init_8259A(int auto_eoi); |
+extern void enable_8259A_irq(unsigned int irq); |
+extern void disable_8259A_irq(unsigned int irq); |
+extern unsigned int startup_8259A_irq(unsigned int irq); |
+ |
+#endif /* __ASM_I8259_H__ */ |
Index: linuxc26/include/asm/mtrr.h |
=================================================================== |
--- linuxc26/include/asm/mtrr.h (nonexistent) |
+++ linuxc26/include/asm/mtrr.h (revision 422) |
@@ -0,0 +1,109 @@ |
+/* Generic MTRR (Memory Type Range Register) ioctls. |
+ |
+ Copyright (C) 1997-1999 Richard Gooch |
+ |
+ This library is free software; you can redistribute it and/or |
+ modify it under the terms of the GNU Library General Public |
+ License as published by the Free Software Foundation; either |
+ version 2 of the License, or (at your option) any later version. |
+ |
+ This library 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 |
+ Library General Public License for more details. |
+ |
+ You should have received a copy of the GNU Library General Public |
+ License along with this library; if not, write to the Free |
+ Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
+ |
+ Richard Gooch may be reached by email at rgooch@atnf.csiro.au |
+ The postal address is: |
+ Richard Gooch, c/o ATNF, P. O. Box 76, Epping, N.S.W., 2121, Australia. |
+*/ |
+#ifndef _LINUX_MTRR_H |
+#define _LINUX_MTRR_H |
+ |
+#include <linux/config.h> |
+#include <linux/ioctl.h> |
+ |
+#define MTRR_IOCTL_BASE 'M' |
+ |
+struct mtrr_sentry |
+{ |
+ unsigned long base; /* Base address */ |
+ unsigned int size; /* Size of region */ |
+ unsigned int type; /* Type of region */ |
+}; |
+ |
+struct mtrr_gentry |
+{ |
+ unsigned int regnum; /* Register number */ |
+ unsigned long base; /* Base address */ |
+ unsigned int size; /* Size of region */ |
+ unsigned int type; /* Type of region */ |
+}; |
+ |
+/* These are the various ioctls */ |
+#define MTRRIOC_ADD_ENTRY _IOW(MTRR_IOCTL_BASE, 0, struct mtrr_sentry) |
+#define MTRRIOC_SET_ENTRY _IOW(MTRR_IOCTL_BASE, 1, struct mtrr_sentry) |
+#define MTRRIOC_DEL_ENTRY _IOW(MTRR_IOCTL_BASE, 2, struct mtrr_sentry) |
+#define MTRRIOC_GET_ENTRY _IOWR(MTRR_IOCTL_BASE, 3, struct mtrr_gentry) |
+#define MTRRIOC_KILL_ENTRY _IOW(MTRR_IOCTL_BASE, 4, struct mtrr_sentry) |
+#define MTRRIOC_ADD_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 5, struct mtrr_sentry) |
+#define MTRRIOC_SET_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 6, struct mtrr_sentry) |
+#define MTRRIOC_DEL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 7, struct mtrr_sentry) |
+#define MTRRIOC_GET_PAGE_ENTRY _IOWR(MTRR_IOCTL_BASE, 8, struct mtrr_gentry) |
+#define MTRRIOC_KILL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 9, struct mtrr_sentry) |
+ |
+/* These are the region types */ |
+#define MTRR_TYPE_UNCACHABLE 0 |
+#define MTRR_TYPE_WRCOMB 1 |
+/*#define MTRR_TYPE_ 2*/ |
+/*#define MTRR_TYPE_ 3*/ |
+#define MTRR_TYPE_WRTHROUGH 4 |
+#define MTRR_TYPE_WRPROT 5 |
+#define MTRR_TYPE_WRBACK 6 |
+#define MTRR_NUM_TYPES 7 |
+ |
+#ifdef __KERNEL__ |
+ |
+extern char *mtrr_strings[]; |
+ |
+/* The following functions are for use by other drivers */ |
+# ifdef CONFIG_MTRR |
+extern int mtrr_add (unsigned long base, unsigned long size, |
+ unsigned int type, char increment); |
+extern int mtrr_add_page (unsigned long base, unsigned long size, |
+ unsigned int type, char increment); |
+extern int mtrr_del (int reg, unsigned long base, unsigned long size); |
+extern int mtrr_del_page (int reg, unsigned long base, unsigned long size); |
+extern void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi); |
+# else |
+static __inline__ int mtrr_add (unsigned long base, unsigned long size, |
+ unsigned int type, char increment) |
+{ |
+ return -ENODEV; |
+} |
+static __inline__ int mtrr_add_page (unsigned long base, unsigned long size, |
+ unsigned int type, char increment) |
+{ |
+ return -ENODEV; |
+} |
+static __inline__ int mtrr_del (int reg, unsigned long base, |
+ unsigned long size) |
+{ |
+ return -ENODEV; |
+} |
+static __inline__ int mtrr_del_page (int reg, unsigned long base, |
+ unsigned long size) |
+{ |
+ return -ENODEV; |
+} |
+ |
+static __inline__ void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi) {;} |
+ |
+# endif |
+ |
+#endif |
+ |
+#endif /* _LINUX_MTRR_H */ |
Index: linuxc26/include/asm/errno.h |
=================================================================== |
--- linuxc26/include/asm/errno.h (nonexistent) |
+++ linuxc26/include/asm/errno.h (revision 422) |
@@ -0,0 +1,6 @@ |
+#ifndef _I386_ERRNO_H |
+#define _I386_ERRNO_H |
+ |
+#include <asm-generic/errno.h> |
+ |
+#endif |
Index: linuxc26/include/asm/timex.h |
=================================================================== |
--- linuxc26/include/asm/timex.h (nonexistent) |
+++ linuxc26/include/asm/timex.h (revision 422) |
@@ -0,0 +1,59 @@ |
+/* |
+ * linux/include/asm-i386/timex.h |
+ * |
+ * i386 architecture timex specifications |
+ */ |
+#ifndef _ASMi386_TIMEX_H |
+#define _ASMi386_TIMEX_H |
+ |
+#include <linux/config.h> |
+#include <asm/msr.h> |
+ |
+#ifdef CONFIG_X86_PC9800 |
+ extern int CLOCK_TICK_RATE; |
+#else |
+#ifdef CONFIG_MELAN |
+# define CLOCK_TICK_RATE 1189200 /* AMD Elan has different frequency! */ |
+#else |
+# define CLOCK_TICK_RATE 1193182 /* Underlying HZ */ |
+#endif |
+#endif |
+ |
+#define CLOCK_TICK_FACTOR 20 /* Factor of both 1000000 and CLOCK_TICK_RATE */ |
+#define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \ |
+ (1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \ |
+ << (SHIFT_SCALE-SHIFT_HZ)) / HZ) |
+ |
+/* |
+ * Standard way to access the cycle counter on i586+ CPUs. |
+ * Currently only used on SMP. |
+ * |
+ * If you really have a SMP machine with i486 chips or older, |
+ * compile for that, and this will just always return zero. |
+ * That's ok, it just means that the nicer scheduling heuristics |
+ * won't work for you. |
+ * |
+ * We only use the low 32 bits, and we'd simply better make sure |
+ * that we reschedule before that wraps. Scheduling at least every |
+ * four billion cycles just basically sounds like a good idea, |
+ * regardless of how fast the machine is. |
+ */ |
+typedef unsigned long long cycles_t; |
+ |
+extern cycles_t cacheflush_time; |
+ |
+static inline cycles_t get_cycles (void) |
+{ |
+#ifndef CONFIG_X86_TSC |
+ return 0; |
+#else |
+ unsigned long long ret; |
+ |
+ rdtscll(ret); |
+ return ret; |
+#endif |
+} |
+ |
+extern unsigned long cpu_khz; |
+ |
+#endif |
Index: linuxc26/include/asm/sigcontext.h |
=================================================================== |
--- linuxc26/include/asm/sigcontext.h (nonexistent) |
+++ linuxc26/include/asm/sigcontext.h (revision 422) |
@@ -0,0 +1,85 @@ |
+#ifndef _ASMi386_SIGCONTEXT_H |
+#define _ASMi386_SIGCONTEXT_H |
+ |
+#include <linux/compiler.h> |
+ |
+/* |
+ * As documented in the iBCS2 standard.. |
+ * |
+ * The first part of "struct _fpstate" is just the normal i387 |
+ * hardware setup, the extra "status" word is used to save the |
+ * coprocessor status word before entering the handler. |
+ * |
+ * Pentium III FXSR, SSE support |
+ * Gareth Hughes <gareth@valinux.com>, May 2000 |
+ * |
+ * The FPU state data structure has had to grow to accommodate the |
+ * extended FPU state required by the Streaming SIMD Extensions. |
+ * There is no documented standard to accomplish this at the moment. |
+ */ |
+struct _fpreg { |
+ unsigned short significand[4]; |
+ unsigned short exponent; |
+}; |
+ |
+struct _fpxreg { |
+ unsigned short significand[4]; |
+ unsigned short exponent; |
+ unsigned short padding[3]; |
+}; |
+ |
+struct _xmmreg { |
+ unsigned long element[4]; |
+}; |
+ |
+struct _fpstate { |
+ /* Regular FPU environment */ |
+ unsigned long cw; |
+ unsigned long sw; |
+ unsigned long tag; |
+ unsigned long ipoff; |
+ unsigned long cssel; |
+ unsigned long dataoff; |
+ unsigned long datasel; |
+ struct _fpreg _st[8]; |
+ unsigned short status; |
+ unsigned short magic; /* 0xffff = regular FPU data only */ |
+ |
+ /* FXSR FPU environment */ |
+ unsigned long _fxsr_env[6]; /* FXSR FPU env is ignored */ |
+ unsigned long mxcsr; |
+ unsigned long reserved; |
+ struct _fpxreg _fxsr_st[8]; /* FXSR FPU reg data is ignored */ |
+ struct _xmmreg _xmm[8]; |
+ unsigned long padding[56]; |
+}; |
+ |
+#define X86_FXSR_MAGIC 0x0000 |
+ |
+struct sigcontext { |
+ unsigned short gs, __gsh; |
+ unsigned short fs, __fsh; |
+ unsigned short es, __esh; |
+ unsigned short ds, __dsh; |
+ unsigned long edi; |
+ unsigned long esi; |
+ unsigned long ebp; |
+ unsigned long esp; |
+ unsigned long ebx; |
+ unsigned long edx; |
+ unsigned long ecx; |
+ unsigned long eax; |
+ unsigned long trapno; |
+ unsigned long err; |
+ unsigned long eip; |
+ unsigned short cs, __csh; |
+ unsigned long eflags; |
+ unsigned long esp_at_signal; |
+ unsigned short ss, __ssh; |
+ struct _fpstate __user * fpstate; |
+ unsigned long oldmask; |
+ unsigned long cr2; |
+}; |
+ |
+ |
+#endif |
Index: linuxc26/include/asm/mman.h |
=================================================================== |
--- linuxc26/include/asm/mman.h (nonexistent) |
+++ linuxc26/include/asm/mman.h (revision 422) |
@@ -0,0 +1,43 @@ |
+#ifndef __I386_MMAN_H__ |
+#define __I386_MMAN_H__ |
+ |
+#define PROT_READ 0x1 /* page can be read */ |
+#define PROT_WRITE 0x2 /* page can be written */ |
+#define PROT_EXEC 0x4 /* page can be executed */ |
+#define PROT_SEM 0x8 /* page may be used for atomic ops */ |
+#define PROT_NONE 0x0 /* page can not be accessed */ |
+#define PROT_GROWSDOWN 0x01000000 /* mprotect flag: extend change to start of growsdown vma */ |
+#define PROT_GROWSUP 0x02000000 /* mprotect flag: extend change to end of growsup vma */ |
+ |
+#define MAP_SHARED 0x01 /* Share changes */ |
+#define MAP_PRIVATE 0x02 /* Changes are private */ |
+#define MAP_TYPE 0x0f /* Mask for type of mapping */ |
+#define MAP_FIXED 0x10 /* Interpret addr exactly */ |
+#define MAP_ANONYMOUS 0x20 /* don't use a file */ |
+ |
+#define MAP_GROWSDOWN 0x0100 /* stack-like segment */ |
+#define MAP_DENYWRITE 0x0800 /* ETXTBSY */ |
+#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */ |
+#define MAP_LOCKED 0x2000 /* pages are locked */ |
+#define MAP_NORESERVE 0x4000 /* don't check for reservations */ |
+#define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ |
+#define MAP_NONBLOCK 0x10000 /* do not block on IO */ |
+ |
+#define MS_ASYNC 1 /* sync memory asynchronously */ |
+#define MS_INVALIDATE 2 /* invalidate the caches */ |
+#define MS_SYNC 4 /* synchronous memory sync */ |
+ |
+#define MCL_CURRENT 1 /* lock all current mappings */ |
+#define MCL_FUTURE 2 /* lock all future mappings */ |
+ |
+#define MADV_NORMAL 0x0 /* default page-in behavior */ |
+#define MADV_RANDOM 0x1 /* page-in minimum required */ |
+#define MADV_SEQUENTIAL 0x2 /* read-ahead aggressively */ |
+#define MADV_WILLNEED 0x3 /* pre-fault pages */ |
+#define MADV_DONTNEED 0x4 /* discard these pages */ |
+ |
+/* compatibility flags */ |
+#define MAP_ANON MAP_ANONYMOUS |
+#define MAP_FILE 0 |
+ |
+#endif /* __I386_MMAN_H__ */ |
Index: linuxc26/include/asm/hdreg.h |
=================================================================== |
--- linuxc26/include/asm/hdreg.h (nonexistent) |
+++ linuxc26/include/asm/hdreg.h (revision 422) |
@@ -0,0 +1,11 @@ |
+/* |
+ * linux/include/asm-i386/hdreg.h |
+ * |
+ * Copyright (C) 1994-1996 Linus Torvalds & authors |
+ */ |
+ |
+#ifndef __ASMi386_HDREG_H |
+#define __ASMi386_HDREG_H |
+ |
+ |
+#endif /* __ASMi386_HDREG_H */ |
Index: linuxc26/include/asm/edd.h |
=================================================================== |
--- linuxc26/include/asm/edd.h (nonexistent) |
+++ linuxc26/include/asm/edd.h (revision 422) |
@@ -0,0 +1,172 @@ |
+/* |
+ * linux/include/asm-i386/edd.h |
+ * Copyright (C) 2002 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/boot/setup.S populates a scratch table |
+ * in the empty_zero_block that contains a list of BIOS-enumerated |
+ * boot devices. |
+ * In arch/i386/kernel/setup.c, this information is |
+ * transferred into the edd structure, and in arch/i386/kernel/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 _ASM_I386_EDD_H |
+#define _ASM_I386_EDD_H |
+ |
+#define EDDNR 0x1e9 /* addr of number of edd_info structs at EDDBUF |
+ in empty_zero_block - treat this as 1 byte */ |
+#define EDDBUF 0x600 /* addr of edd_info structs in empty_zero_block */ |
+#define EDDMAXNR 6 /* number of edd_info structs starting at EDDBUF */ |
+#define EDDEXTSIZE 4 /* change these if you muck with the structures */ |
+#define EDDPARMSIZE 74 |
+#define CHECKEXTENSIONSPRESENT 0x41 |
+#define GETDEVICEPARAMETERS 0x48 |
+#define EDDMAGIC1 0x55AA |
+#define EDDMAGIC2 0xAA55 |
+ |
+#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; |
+ struct edd_device_params params; |
+} __attribute__ ((packed)); |
+ |
+extern struct edd_info edd[EDDMAXNR]; |
+extern unsigned char eddnr; |
+#endif /*!__ASSEMBLY__ */ |
+ |
+#endif /* _ASM_I386_EDD_H */ |
Index: linuxc26/include/asm/unaligned.h |
=================================================================== |
--- linuxc26/include/asm/unaligned.h (nonexistent) |
+++ linuxc26/include/asm/unaligned.h (revision 422) |
@@ -0,0 +1,37 @@ |
+#ifndef __I386_UNALIGNED_H |
+#define __I386_UNALIGNED_H |
+ |
+/* |
+ * The i386 can do unaligned accesses itself. |
+ * |
+ * The strange macros are there to make sure these can't |
+ * be misused in a way that makes them not work on other |
+ * architectures where unaligned accesses aren't as simple. |
+ */ |
+ |
+/** |
+ * get_unaligned - get value from possibly mis-aligned location |
+ * @ptr: pointer to value |
+ * |
+ * This macro should be used for accessing values larger in size than |
+ * single bytes at locations that are expected to be improperly aligned, |
+ * e.g. retrieving a u16 value from a location not u16-aligned. |
+ * |
+ * Note that unaligned accesses can be very expensive on some architectures. |
+ */ |
+#define get_unaligned(ptr) (*(ptr)) |
+ |
+/** |
+ * put_unaligned - put value to a possibly mis-aligned location |
+ * @val: value to place |
+ * @ptr: pointer to location |
+ * |
+ * This macro should be used for placing values larger in size than |
+ * single bytes at locations that are expected to be improperly aligned, |
+ * e.g. writing a u16 value to a location not u16-aligned. |
+ * |
+ * Note that unaligned accesses can be very expensive on some architectures. |
+ */ |
+#define put_unaligned(val, ptr) ((void)( *(ptr) = (val) )) |
+ |
+#endif |
Index: linuxc26/include/asm/ioctl.h |
=================================================================== |
--- linuxc26/include/asm/ioctl.h (nonexistent) |
+++ linuxc26/include/asm/ioctl.h (revision 422) |
@@ -0,0 +1,85 @@ |
+/* $Id: ioctl.h,v 1.1 2004-01-28 15:24:19 giacomo Exp $ |
+ * |
+ * linux/ioctl.h for Linux by H.H. Bergman. |
+ */ |
+ |
+#ifndef _ASMI386_IOCTL_H |
+#define _ASMI386_IOCTL_H |
+ |
+/* ioctl command encoding: 32 bits total, command in lower 16 bits, |
+ * size of the parameter structure in the lower 14 bits of the |
+ * upper 16 bits. |
+ * Encoding the size of the parameter structure in the ioctl request |
+ * is useful for catching programs compiled with old versions |
+ * and to avoid overwriting user space outside the user buffer area. |
+ * The highest 2 bits are reserved for indicating the ``access mode''. |
+ * NOTE: This limits the max parameter size to 16kB -1 ! |
+ */ |
+ |
+/* |
+ * The following is for compatibility across the various Linux |
+ * platforms. The i386 ioctl numbering scheme doesn't really enforce |
+ * a type field. De facto, however, the top 8 bits of the lower 16 |
+ * bits are indeed used as a type field, so we might just as well make |
+ * this explicit here. Please be sure to use the decoding macros |
+ * below from now on. |
+ */ |
+#define _IOC_NRBITS 8 |
+#define _IOC_TYPEBITS 8 |
+#define _IOC_SIZEBITS 14 |
+#define _IOC_DIRBITS 2 |
+ |
+#define _IOC_NRMASK ((1 << _IOC_NRBITS)-1) |
+#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1) |
+#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1) |
+#define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1) |
+ |
+#define _IOC_NRSHIFT 0 |
+#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS) |
+#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS) |
+#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS) |
+ |
+/* |
+ * Direction bits. |
+ */ |
+#define _IOC_NONE 0U |
+#define _IOC_WRITE 1U |
+#define _IOC_READ 2U |
+ |
+#define _IOC(dir,type,nr,size) \ |
+ (((dir) << _IOC_DIRSHIFT) | \ |
+ ((type) << _IOC_TYPESHIFT) | \ |
+ ((nr) << _IOC_NRSHIFT) | \ |
+ ((size) << _IOC_SIZESHIFT)) |
+ |
+/* provoke compile error for invalid uses of size argument */ |
+extern int __invalid_size_argument_for_IOC; |
+#define _IOC_TYPECHECK(t) \ |
+ ((sizeof(t) == sizeof(t[1]) && \ |
+ sizeof(t) < (1 << _IOC_SIZEBITS)) ? \ |
+ sizeof(t) : __invalid_size_argument_for_IOC) |
+ |
+/* used to create numbers */ |
+#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0) |
+#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size))) |
+#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) |
+#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) |
+#define _IOR_BAD(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size)) |
+#define _IOW_BAD(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size)) |
+#define _IOWR_BAD(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size)) |
+ |
+/* used to decode ioctl numbers.. */ |
+#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) |
+#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK) |
+#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK) |
+#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK) |
+ |
+/* ...and for the drivers/sound files... */ |
+ |
+#define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT) |
+#define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT) |
+#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT) |
+#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT) |
+#define IOCSIZE_SHIFT (_IOC_SIZESHIFT) |
+ |
+#endif /* _ASMI386_IOCTL_H */ |
Index: linuxc26/include/asm/arch_hooks.h |
=================================================================== |
--- linuxc26/include/asm/arch_hooks.h (nonexistent) |
+++ linuxc26/include/asm/arch_hooks.h (revision 422) |
@@ -0,0 +1,27 @@ |
+#ifndef _ASM_ARCH_HOOKS_H |
+#define _ASM_ARCH_HOOKS_H |
+ |
+#include <linux/interrupt.h> |
+ |
+/* |
+ * linux/include/asm/arch_hooks.h |
+ * |
+ * define the architecture specific hooks |
+ */ |
+ |
+/* these aren't arch hooks, they are generic routines |
+ * that can be used by the hooks */ |
+extern void init_ISA_irqs(void); |
+extern void apic_intr_init(void); |
+extern void smp_intr_init(void); |
+extern irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs); |
+ |
+/* these are the defined hooks */ |
+extern void intr_init_hook(void); |
+extern void pre_intr_init_hook(void); |
+extern void pre_setup_arch_hook(void); |
+extern void trap_init_hook(void); |
+extern void time_init_hook(void); |
+extern void mca_nmi_hook(void); |
+ |
+#endif |
Index: linuxc26/include/asm/tlb.h |
=================================================================== |
--- linuxc26/include/asm/tlb.h (nonexistent) |
+++ linuxc26/include/asm/tlb.h (revision 422) |
@@ -0,0 +1,20 @@ |
+#ifndef _I386_TLB_H |
+#define _I386_TLB_H |
+ |
+/* |
+ * x86 doesn't need any special per-pte or |
+ * per-vma handling.. |
+ */ |
+#define tlb_start_vma(tlb, vma) do { } while (0) |
+#define tlb_end_vma(tlb, vma) do { } while (0) |
+#define __tlb_remove_tlb_entry(tlb, ptep, address) do { } while (0) |
+ |
+/* |
+ * .. because we flush the whole mm when it |
+ * fills up. |
+ */ |
+#define tlb_flush(tlb) flush_tlb_mm((tlb)->mm) |
+ |
+#include <asm-generic/tlb.h> |
+ |
+#endif |
Index: linuxc26/include/asm/tlbflush.h |
=================================================================== |
--- linuxc26/include/asm/tlbflush.h (nonexistent) |
+++ linuxc26/include/asm/tlbflush.h (revision 422) |
@@ -0,0 +1,147 @@ |
+#ifndef _I386_TLBFLUSH_H |
+#define _I386_TLBFLUSH_H |
+ |
+#include <linux/config.h> |
+#include <linux/mm.h> |
+#include <asm/processor.h> |
+ |
+#define __flush_tlb() \ |
+ do { \ |
+ unsigned int tmpreg; \ |
+ \ |
+ __asm__ __volatile__( \ |
+ "movl %%cr3, %0; \n" \ |
+ "movl %0, %%cr3; # flush TLB \n" \ |
+ : "=r" (tmpreg) \ |
+ :: "memory"); \ |
+ } while (0) |
+ |
+/* |
+ * Global pages have to be flushed a bit differently. Not a real |
+ * performance problem because this does not happen often. |
+ */ |
+#define __flush_tlb_global() \ |
+ do { \ |
+ unsigned int tmpreg; \ |
+ \ |
+ __asm__ __volatile__( \ |
+ "movl %1, %%cr4; # turn off PGE \n" \ |
+ "movl %%cr3, %0; \n" \ |
+ "movl %0, %%cr3; # flush TLB \n" \ |
+ "movl %2, %%cr4; # turn PGE back on \n" \ |
+ : "=&r" (tmpreg) \ |
+ : "r" (mmu_cr4_features & ~X86_CR4_PGE), \ |
+ "r" (mmu_cr4_features) \ |
+ : "memory"); \ |
+ } while (0) |
+ |
+extern unsigned long pgkern_mask; |
+ |
+# define __flush_tlb_all() \ |
+ do { \ |
+ if (cpu_has_pge) \ |
+ __flush_tlb_global(); \ |
+ else \ |
+ __flush_tlb(); \ |
+ } while (0) |
+ |
+#define cpu_has_invlpg (boot_cpu_data.x86 > 3) |
+ |
+#define __flush_tlb_single(addr) \ |
+ __asm__ __volatile__("invlpg %0": :"m" (*(char *) addr)) |
+ |
+#ifdef CONFIG_X86_INVLPG |
+# define __flush_tlb_one(addr) __flush_tlb_single(addr) |
+#else |
+# define __flush_tlb_one(addr) \ |
+ do { \ |
+ if (cpu_has_invlpg) \ |
+ __flush_tlb_single(addr); \ |
+ else \ |
+ __flush_tlb(); \ |
+ } while (0) |
+#endif |
+ |
+/* |
+ * TLB flushing: |
+ * |
+ * - flush_tlb() flushes the current mm struct TLBs |
+ * - flush_tlb_all() flushes all processes TLBs |
+ * - flush_tlb_mm(mm) flushes the specified mm context TLB's |
+ * - flush_tlb_page(vma, vmaddr) flushes one page |
+ * - flush_tlb_range(vma, start, end) flushes a range of pages |
+ * - flush_tlb_kernel_range(start, end) flushes a range of kernel pages |
+ * - flush_tlb_pgtables(mm, start, end) flushes a range of page tables |
+ * |
+ * ..but the i386 has somewhat limited tlb flushing capabilities, |
+ * and page-granular flushes are available only on i486 and up. |
+ */ |
+ |
+#ifndef CONFIG_SMP |
+ |
+#define flush_tlb() __flush_tlb() |
+#define flush_tlb_all() __flush_tlb_all() |
+#define local_flush_tlb() __flush_tlb() |
+ |
+static inline void flush_tlb_mm(struct mm_struct *mm) |
+{ |
+ if (mm == current->active_mm) |
+ __flush_tlb(); |
+} |
+ |
+static inline void flush_tlb_page(struct vm_area_struct *vma, |
+ unsigned long addr) |
+{ |
+ if (vma->vm_mm == current->active_mm) |
+ __flush_tlb_one(addr); |
+} |
+ |
+static inline void flush_tlb_range(struct vm_area_struct *vma, |
+ unsigned long start, unsigned long end) |
+{ |
+ if (vma->vm_mm == current->active_mm) |
+ __flush_tlb(); |
+} |
+ |
+#else |
+ |
+#include <asm/smp.h> |
+ |
+#define local_flush_tlb() \ |
+ __flush_tlb() |
+ |
+extern void flush_tlb_all(void); |
+extern void flush_tlb_current_task(void); |
+extern void flush_tlb_mm(struct mm_struct *); |
+extern void flush_tlb_page(struct vm_area_struct *, unsigned long); |
+ |
+#define flush_tlb() flush_tlb_current_task() |
+ |
+static inline void flush_tlb_range(struct vm_area_struct * vma, unsigned long start, unsigned long end) |
+{ |
+ flush_tlb_mm(vma->vm_mm); |
+} |
+ |
+#define TLBSTATE_OK 1 |
+#define TLBSTATE_LAZY 2 |
+ |
+struct tlb_state |
+{ |
+ struct mm_struct *active_mm; |
+ int state; |
+ char __cacheline_padding[L1_CACHE_BYTES-8]; |
+}; |
+extern struct tlb_state cpu_tlbstate[NR_CPUS]; |
+ |
+ |
+#endif |
+ |
+#define flush_tlb_kernel_range(start, end) flush_tlb_all() |
+ |
+static inline void flush_tlb_pgtables(struct mm_struct *mm, |
+ unsigned long start, unsigned long end) |
+{ |
+ /* i386 does not keep any page table caches in TLB */ |
+} |
+ |
+#endif /* _I386_TLBFLUSH_H */ |
Index: linuxc26/include/asm/debugreg.h |
=================================================================== |
--- linuxc26/include/asm/debugreg.h (nonexistent) |
+++ linuxc26/include/asm/debugreg.h (revision 422) |
@@ -0,0 +1,64 @@ |
+#ifndef _I386_DEBUGREG_H |
+#define _I386_DEBUGREG_H |
+ |
+ |
+/* Indicate the register numbers for a number of the specific |
+ debug registers. Registers 0-3 contain the addresses we wish to trap on */ |
+#define DR_FIRSTADDR 0 /* u_debugreg[DR_FIRSTADDR] */ |
+#define DR_LASTADDR 3 /* u_debugreg[DR_LASTADDR] */ |
+ |
+#define DR_STATUS 6 /* u_debugreg[DR_STATUS] */ |
+#define DR_CONTROL 7 /* u_debugreg[DR_CONTROL] */ |
+ |
+/* Define a few things for the status register. We can use this to determine |
+ which debugging register was responsible for the trap. The other bits |
+ are either reserved or not of interest to us. */ |
+ |
+#define DR_TRAP0 (0x1) /* db0 */ |
+#define DR_TRAP1 (0x2) /* db1 */ |
+#define DR_TRAP2 (0x4) /* db2 */ |
+#define DR_TRAP3 (0x8) /* db3 */ |
+ |
+#define DR_STEP (0x4000) /* single-step */ |
+#define DR_SWITCH (0x8000) /* task switch */ |
+ |
+/* Now define a bunch of things for manipulating the control register. |
+ The top two bytes of the control register consist of 4 fields of 4 |
+ bits - each field corresponds to one of the four debug registers, |
+ and indicates what types of access we trap on, and how large the data |
+ field is that we are looking at */ |
+ |
+#define DR_CONTROL_SHIFT 16 /* Skip this many bits in ctl register */ |
+#define DR_CONTROL_SIZE 4 /* 4 control bits per register */ |
+ |
+#define DR_RW_EXECUTE (0x0) /* Settings for the access types to trap on */ |
+#define DR_RW_WRITE (0x1) |
+#define DR_RW_READ (0x3) |
+ |
+#define DR_LEN_1 (0x0) /* Settings for data length to trap on */ |
+#define DR_LEN_2 (0x4) |
+#define DR_LEN_4 (0xC) |
+ |
+/* The low byte to the control register determine which registers are |
+ enabled. There are 4 fields of two bits. One bit is "local", meaning |
+ that the processor will reset the bit after a task switch and the other |
+ is global meaning that we have to explicitly reset the bit. With linux, |
+ you can use either one, since we explicitly zero the register when we enter |
+ kernel mode. */ |
+ |
+#define DR_LOCAL_ENABLE_SHIFT 0 /* Extra shift to the local enable bit */ |
+#define DR_GLOBAL_ENABLE_SHIFT 1 /* Extra shift to the global enable bit */ |
+#define DR_ENABLE_SIZE 2 /* 2 enable bits per register */ |
+ |
+#define DR_LOCAL_ENABLE_MASK (0x55) /* Set local bits for all 4 regs */ |
+#define DR_GLOBAL_ENABLE_MASK (0xAA) /* Set global bits for all 4 regs */ |
+ |
+/* The second byte to the control register has a few special things. |
+ We can slow the instruction pipeline for instructions coming via the |
+ gdt or the ldt if we want to. I am not sure why this is an advantage */ |
+ |
+#define DR_CONTROL_RESERVED (0xFC00) /* Reserved by Intel */ |
+#define DR_LOCAL_SLOWDOWN (0x100) /* Local slow the pipeline */ |
+#define DR_GLOBAL_SLOWDOWN (0x200) /* Global slow the pipeline */ |
+ |
+#endif |
Index: linuxc26/include/asm/uaccess.h |
=================================================================== |
--- linuxc26/include/asm/uaccess.h (nonexistent) |
+++ linuxc26/include/asm/uaccess.h (revision 422) |
@@ -0,0 +1,529 @@ |
+#ifndef __i386_UACCESS_H |
+#define __i386_UACCESS_H |
+ |
+/* |
+ * User space memory access functions |
+ */ |
+#include <linux/config.h> |
+#include <linux/errno.h> |
+#include <linux/thread_info.h> |
+#include <linux/prefetch.h> |
+#include <linux/string.h> |
+#include <asm/page.h> |
+ |
+#define VERIFY_READ 0 |
+#define VERIFY_WRITE 1 |
+ |
+/* |
+ * The fs value determines whether argument validity checking should be |
+ * performed or not. If get_fs() == USER_DS, checking is performed, with |
+ * get_fs() == KERNEL_DS, checking is bypassed. |
+ * |
+ * For historical reasons, these macros are grossly misnamed. |
+ */ |
+ |
+#define MAKE_MM_SEG(s) ((mm_segment_t) { (s) }) |
+ |
+ |
+#define KERNEL_DS MAKE_MM_SEG(0xFFFFFFFFUL) |
+#define USER_DS MAKE_MM_SEG(PAGE_OFFSET) |
+ |
+#define get_ds() (KERNEL_DS) |
+#define get_fs() (current_thread_info()->addr_limit) |
+#define set_fs(x) (current_thread_info()->addr_limit = (x)) |
+ |
+#define segment_eq(a,b) ((a).seg == (b).seg) |
+ |
+/* |
+ * movsl can be slow when source and dest are not both 8-byte aligned |
+ */ |
+#ifdef CONFIG_X86_INTEL_USERCOPY |
+extern struct movsl_mask { |
+ int mask; |
+} ____cacheline_aligned_in_smp movsl_mask; |
+#endif |
+ |
+#define __addr_ok(addr) ((unsigned long)(addr) < (current_thread_info()->addr_limit.seg)) |
+ |
+/* |
+ * Test whether a block of memory is a valid user space address. |
+ * Returns 0 if the range is valid, nonzero otherwise. |
+ * |
+ * This is equivalent to the following test: |
+ * (u33)addr + (u33)size >= (u33)current->addr_limit.seg |
+ * |
+ * This needs 33-bit arithmetic. We have a carry... |
+ */ |
+#define __range_ok(addr,size) ({ \ |
+ unsigned long flag,sum; \ |
+ asm("addl %3,%1 ; sbbl %0,%0; cmpl %1,%4; sbbl $0,%0" \ |
+ :"=&r" (flag), "=r" (sum) \ |
+ :"1" (addr),"g" ((int)(size)),"g" (current_thread_info()->addr_limit.seg)); \ |
+ flag; }) |
+ |
+/** |
+ * access_ok: - Checks if a user space pointer is valid |
+ * @type: Type of access: %VERIFY_READ or %VERIFY_WRITE. Note that |
+ * %VERIFY_WRITE is a superset of %VERIFY_READ - if it is safe |
+ * to write to a block, it is always safe to read from it. |
+ * @addr: User space pointer to start of block to check |
+ * @size: Size of block to check |
+ * |
+ * Context: User context only. This function may sleep. |
+ * |
+ * Checks if a pointer to a block of memory in user space is valid. |
+ * |
+ * Returns true (nonzero) if the memory block may be valid, false (zero) |
+ * if it is definitely invalid. |
+ * |
+ * Note that, depending on architecture, this function probably just |
+ * checks that the pointer is in the user space range - after calling |
+ * this function, memory access functions may still return -EFAULT. |
+ */ |
+#define access_ok(type,addr,size) (likely(__range_ok(addr,size) == 0)) |
+ |
+/** |
+ * verify_area: - Obsolete, use access_ok() |
+ * @type: Type of access: %VERIFY_READ or %VERIFY_WRITE |
+ * @addr: User space pointer to start of block to check |
+ * @size: Size of block to check |
+ * |
+ * Context: User context only. This function may sleep. |
+ * |
+ * This function has been replaced by access_ok(). |
+ * |
+ * Checks if a pointer to a block of memory in user space is valid. |
+ * |
+ * Returns zero if the memory block may be valid, -EFAULT |
+ * if it is definitely invalid. |
+ * |
+ * See access_ok() for more details. |
+ */ |
+static inline int verify_area(int type, const void __user * addr, unsigned long size) |
+{ |
+ return access_ok(type,addr,size) ? 0 : -EFAULT; |
+} |
+ |
+ |
+/* |
+ * The exception table consists of pairs of addresses: the first is the |
+ * address of an instruction that is allowed to fault, and the second is |
+ * the address at which the program should continue. No registers are |
+ * modified, so it is entirely up to the continuation code to figure out |
+ * what to do. |
+ * |
+ * All the routines below use bits of fixup code that are out of line |
+ * with the main instruction path. This means when everything is well, |
+ * we don't even have to jump over them. Further, they do not intrude |
+ * on our cache or tlb entries. |
+ */ |
+ |
+struct exception_table_entry |
+{ |
+ unsigned long insn, fixup; |
+}; |
+ |
+extern int fixup_exception(struct pt_regs *regs); |
+ |
+/* |
+ * These are the main single-value transfer routines. They automatically |
+ * use the right size if we just have the right pointer type. |
+ * |
+ * This gets kind of ugly. We want to return _two_ values in "get_user()" |
+ * and yet we don't want to do any pointers, because that is too much |
+ * of a performance impact. Thus we have a few rather ugly macros here, |
+ * and hide all the ugliness from the user. |
+ * |
+ * The "__xxx" versions of the user access functions are versions that |
+ * do not verify the address space, that must have been done previously |
+ * with a separate "access_ok()" call (this is used when we do multiple |
+ * accesses to the same area of user memory). |
+ */ |
+ |
+extern void __get_user_1(void); |
+extern void __get_user_2(void); |
+extern void __get_user_4(void); |
+ |
+#define __get_user_x(size,ret,x,ptr) \ |
+ __asm__ __volatile__("call __get_user_" #size \ |
+ :"=a" (ret),"=d" (x) \ |
+ :"0" (ptr)) |
+ |
+ |
+/* Careful: we have to cast the result to the type of the pointer for sign reasons */ |
+/** |
+ * get_user: - Get a simple variable from user space. |
+ * @x: Variable to store result. |
+ * @ptr: Source address, in user space. |
+ * |
+ * Context: User context only. This function may sleep. |
+ * |
+ * This macro copies a single simple variable from user space to kernel |
+ * space. It supports simple types like char and int, but not larger |
+ * data types like structures or arrays. |
+ * |
+ * @ptr must have pointer-to-simple-variable type, and the result of |
+ * dereferencing @ptr must be assignable to @x without a cast. |
+ * |
+ * Returns zero on success, or -EFAULT on error. |
+ * On error, the variable @x is set to zero. |
+ */ |
+#define get_user(x,ptr) \ |
+({ int __ret_gu,__val_gu; \ |
+ switch(sizeof (*(ptr))) { \ |
+ case 1: __get_user_x(1,__ret_gu,__val_gu,ptr); break; \ |
+ case 2: __get_user_x(2,__ret_gu,__val_gu,ptr); break; \ |
+ case 4: __get_user_x(4,__ret_gu,__val_gu,ptr); break; \ |
+ default: __get_user_x(X,__ret_gu,__val_gu,ptr); break; \ |
+ } \ |
+ (x) = (__typeof__(*(ptr)))__val_gu; \ |
+ __ret_gu; \ |
+}) |
+ |
+extern void __put_user_bad(void); |
+ |
+/** |
+ * put_user: - Write a simple value into user space. |
+ * @x: Value to copy to user space. |
+ * @ptr: Destination address, in user space. |
+ * |
+ * Context: User context only. This function may sleep. |
+ * |
+ * This macro copies a single simple value from kernel space to user |
+ * space. It supports simple types like char and int, but not larger |
+ * data types like structures or arrays. |
+ * |
+ * @ptr must have pointer-to-simple-variable type, and @x must be assignable |
+ * to the result of dereferencing @ptr. |
+ * |
+ * Returns zero on success, or -EFAULT on error. |
+ */ |
+#define put_user(x,ptr) \ |
+ __put_user_check((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr))) |
+ |
+ |
+/** |
+ * __get_user: - Get a simple variable from user space, with less checking. |
+ * @x: Variable to store result. |
+ * @ptr: Source address, in user space. |
+ * |
+ * Context: User context only. This function may sleep. |
+ * |
+ * This macro copies a single simple variable from user space to kernel |
+ * space. It supports simple types like char and int, but not larger |
+ * data types like structures or arrays. |
+ * |
+ * @ptr must have pointer-to-simple-variable type, and the result of |
+ * dereferencing @ptr must be assignable to @x without a cast. |
+ * |
+ * Caller must check the pointer with access_ok() before calling this |
+ * function. |
+ * |
+ * Returns zero on success, or -EFAULT on error. |
+ * On error, the variable @x is set to zero. |
+ */ |
+#define __get_user(x,ptr) \ |
+ __get_user_nocheck((x),(ptr),sizeof(*(ptr))) |
+ |
+ |
+/** |
+ * __put_user: - Write a simple value into user space, with less checking. |
+ * @x: Value to copy to user space. |
+ * @ptr: Destination address, in user space. |
+ * |
+ * Context: User context only. This function may sleep. |
+ * |
+ * This macro copies a single simple value from kernel space to user |
+ * space. It supports simple types like char and int, but not larger |
+ * data types like structures or arrays. |
+ * |
+ * @ptr must have pointer-to-simple-variable type, and @x must be assignable |
+ * to the result of dereferencing @ptr. |
+ * |
+ * Caller must check the pointer with access_ok() before calling this |
+ * function. |
+ * |
+ * Returns zero on success, or -EFAULT on error. |
+ */ |
+#define __put_user(x,ptr) \ |
+ __put_user_nocheck((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr))) |
+ |
+#define __put_user_nocheck(x,ptr,size) \ |
+({ \ |
+ long __pu_err; \ |
+ __put_user_size((x),(ptr),(size),__pu_err,-EFAULT); \ |
+ __pu_err; \ |
+}) |
+ |
+ |
+#define __put_user_check(x,ptr,size) \ |
+({ \ |
+ long __pu_err = -EFAULT; \ |
+ __typeof__(*(ptr)) *__pu_addr = (ptr); \ |
+ might_sleep(); \ |
+ if (access_ok(VERIFY_WRITE,__pu_addr,size)) \ |
+ __put_user_size((x),__pu_addr,(size),__pu_err,-EFAULT); \ |
+ __pu_err; \ |
+}) |
+ |
+#define __put_user_u64(x, addr, err) \ |
+ __asm__ __volatile__( \ |
+ "1: movl %%eax,0(%2)\n" \ |
+ "2: movl %%edx,4(%2)\n" \ |
+ "3:\n" \ |
+ ".section .fixup,\"ax\"\n" \ |
+ "4: movl %3,%0\n" \ |
+ " jmp 3b\n" \ |
+ ".previous\n" \ |
+ ".section __ex_table,\"a\"\n" \ |
+ " .align 4\n" \ |
+ " .long 1b,4b\n" \ |
+ " .long 2b,4b\n" \ |
+ ".previous" \ |
+ : "=r"(err) \ |
+ : "A" (x), "r" (addr), "i"(-EFAULT), "0"(err)) |
+ |
+#ifdef CONFIG_X86_WP_WORKS_OK |
+ |
+#define __put_user_size(x,ptr,size,retval,errret) \ |
+do { \ |
+ retval = 0; \ |
+ switch (size) { \ |
+ case 1: __put_user_asm(x,ptr,retval,"b","b","iq",errret);break; \ |
+ case 2: __put_user_asm(x,ptr,retval,"w","w","ir",errret);break; \ |
+ case 4: __put_user_asm(x,ptr,retval,"l","","ir",errret); break; \ |
+ case 8: __put_user_u64((__typeof__(*ptr))(x),ptr,retval); break;\ |
+ default: __put_user_bad(); \ |
+ } \ |
+} while (0) |
+ |
+#else |
+ |
+#define __put_user_size(x,ptr,size,retval,errret) \ |
+do { \ |
+ __typeof__(*(ptr)) __pus_tmp = x; \ |
+ retval = 0; \ |
+ \ |
+ if(unlikely(__copy_to_user_ll(ptr, &__pus_tmp, size) != 0)) \ |
+ retval = errret; \ |
+} while (0) |
+ |
+#endif |
+struct __large_struct { unsigned long buf[100]; }; |
+#define __m(x) (*(struct __large_struct *)(x)) |
+ |
+/* |
+ * Tell gcc we read from memory instead of writing: this is because |
+ * we do not write to any memory gcc knows about, so there are no |
+ * aliasing issues. |
+ */ |
+#define __put_user_asm(x, addr, err, itype, rtype, ltype, errret) \ |
+ __asm__ __volatile__( \ |
+ "1: mov"itype" %"rtype"1,%2\n" \ |
+ "2:\n" \ |
+ ".section .fixup,\"ax\"\n" \ |
+ "3: movl %3,%0\n" \ |
+ " jmp 2b\n" \ |
+ ".previous\n" \ |
+ ".section __ex_table,\"a\"\n" \ |
+ " .align 4\n" \ |
+ " .long 1b,3b\n" \ |
+ ".previous" \ |
+ : "=r"(err) \ |
+ : ltype (x), "m"(__m(addr)), "i"(errret), "0"(err)) |
+ |
+ |
+#define __get_user_nocheck(x,ptr,size) \ |
+({ \ |
+ long __gu_err, __gu_val; \ |
+ __get_user_size(__gu_val,(ptr),(size),__gu_err,-EFAULT);\ |
+ (x) = (__typeof__(*(ptr)))__gu_val; \ |
+ __gu_err; \ |
+}) |
+ |
+extern long __get_user_bad(void); |
+ |
+#define __get_user_size(x,ptr,size,retval,errret) \ |
+do { \ |
+ retval = 0; \ |
+ switch (size) { \ |
+ case 1: __get_user_asm(x,ptr,retval,"b","b","=q",errret);break; \ |
+ case 2: __get_user_asm(x,ptr,retval,"w","w","=r",errret);break; \ |
+ case 4: __get_user_asm(x,ptr,retval,"l","","=r",errret);break; \ |
+ default: (x) = __get_user_bad(); \ |
+ } \ |
+} while (0) |
+ |
+#define __get_user_asm(x, addr, err, itype, rtype, ltype, errret) \ |
+ __asm__ __volatile__( \ |
+ "1: mov"itype" %2,%"rtype"1\n" \ |
+ "2:\n" \ |
+ ".section .fixup,\"ax\"\n" \ |
+ "3: movl %3,%0\n" \ |
+ " xor"itype" %"rtype"1,%"rtype"1\n" \ |
+ " jmp 2b\n" \ |
+ ".previous\n" \ |
+ ".section __ex_table,\"a\"\n" \ |
+ " .align 4\n" \ |
+ " .long 1b,3b\n" \ |
+ ".previous" \ |
+ : "=r"(err), ltype (x) \ |
+ : "m"(__m(addr)), "i"(errret), "0"(err)) |
+ |
+ |
+unsigned long __copy_to_user_ll(void __user *to, const void *from, unsigned long n); |
+unsigned long __copy_from_user_ll(void *to, const void __user *from, unsigned long n); |
+ |
+/* |
+ * Here we special-case 1, 2 and 4-byte copy_*_user invocations. On a fault |
+ * we return the initial request size (1, 2 or 4), as copy_*_user should do. |
+ * If a store crosses a page boundary and gets a fault, the x86 will not write |
+ * anything, so this is accurate. |
+ */ |
+ |
+/** |
+ * __copy_to_user: - Copy a block of data into user space, with less checking. |
+ * @to: Destination address, in user space. |
+ * @from: Source address, in kernel space. |
+ * @n: Number of bytes to copy. |
+ * |
+ * Context: User context only. This function may sleep. |
+ * |
+ * Copy data from kernel space to user space. Caller must check |
+ * the specified block with access_ok() before calling this function. |
+ * |
+ * Returns number of bytes that could not be copied. |
+ * On success, this will be zero. |
+ */ |
+static inline unsigned long |
+__copy_to_user(void __user *to, const void *from, unsigned long n) |
+{ |
+ if (__builtin_constant_p(n)) { |
+ unsigned long ret; |
+ |
+ switch (n) { |
+ case 1: |
+ __put_user_size(*(u8 *)from, (u8 *)to, 1, ret, 1); |
+ return ret; |
+ case 2: |
+ __put_user_size(*(u16 *)from, (u16 *)to, 2, ret, 2); |
+ return ret; |
+ case 4: |
+ __put_user_size(*(u32 *)from, (u32 *)to, 4, ret, 4); |
+ return ret; |
+ } |
+ } |
+ return __copy_to_user_ll(to, from, n); |
+} |
+ |
+/** |
+ * __copy_from_user: - Copy a block of data from user space, with less checking. |
+ * @to: Destination address, in kernel space. |
+ * @from: Source address, in user space. |
+ * @n: Number of bytes to copy. |
+ * |
+ * Context: User context only. This function may sleep. |
+ * |
+ * Copy data from user space to kernel space. Caller must check |
+ * the specified block with access_ok() before calling this function. |
+ * |
+ * Returns number of bytes that could not be copied. |
+ * On success, this will be zero. |
+ * |
+ * If some data could not be copied, this function will pad the copied |
+ * data to the requested size using zero bytes. |
+ */ |
+static inline unsigned long |
+__copy_from_user(void *to, const void __user *from, unsigned long n) |
+{ |
+ if (__builtin_constant_p(n)) { |
+ unsigned long ret; |
+ |
+ switch (n) { |
+ case 1: |
+ __get_user_size(*(u8 *)to, from, 1, ret, 1); |
+ return ret; |
+ case 2: |
+ __get_user_size(*(u16 *)to, from, 2, ret, 2); |
+ return ret; |
+ case 4: |
+ __get_user_size(*(u32 *)to, from, 4, ret, 4); |
+ return ret; |
+ } |
+ } |
+ return __copy_from_user_ll(to, from, n); |
+} |
+ |
+/** |
+ * copy_to_user: - Copy a block of data into user space. |
+ * @to: Destination address, in user space. |
+ * @from: Source address, in kernel space. |
+ * @n: Number of bytes to copy. |
+ * |
+ * Context: User context only. This function may sleep. |
+ * |
+ * Copy data from kernel space to user space. |
+ * |
+ * Returns number of bytes that could not be copied. |
+ * On success, this will be zero. |
+ */ |
+static inline unsigned long |
+copy_to_user(void __user *to, const void *from, unsigned long n) |
+{ |
+ might_sleep(); |
+ if (access_ok(VERIFY_WRITE, to, n)) |
+ n = __copy_to_user(to, from, n); |
+ return n; |
+} |
+ |
+/** |
+ * copy_from_user: - Copy a block of data from user space. |
+ * @to: Destination address, in kernel space. |
+ * @from: Source address, in user space. |
+ * @n: Number of bytes to copy. |
+ * |
+ * Context: User context only. This function may sleep. |
+ * |
+ * Copy data from user space to kernel space. |
+ * |
+ * Returns number of bytes that could not be copied. |
+ * On success, this will be zero. |
+ * |
+ * If some data could not be copied, this function will pad the copied |
+ * data to the requested size using zero bytes. |
+ */ |
+static inline unsigned long |
+copy_from_user(void *to, const void __user *from, unsigned long n) |
+{ |
+ might_sleep(); |
+ if (access_ok(VERIFY_READ, from, n)) |
+ n = __copy_from_user(to, from, n); |
+ else |
+ memset(to, 0, n); |
+ return n; |
+} |
+ |
+long strncpy_from_user(char *dst, const char __user *src, long count); |
+long __strncpy_from_user(char *dst, const char __user *src, long count); |
+ |
+/** |
+ * strlen_user: - Get the size of a string in user space. |
+ * @str: The string to measure. |
+ * |
+ * Context: User context only. This function may sleep. |
+ * |
+ * Get the size of a NUL-terminated string in user space. |
+ * |
+ * Returns the size of the string INCLUDING the terminating NUL. |
+ * On exception, returns 0. |
+ * |
+ * If there is a limit on the length of a valid string, you may wish to |
+ * consider using strnlen_user() instead. |
+ */ |
+#define strlen_user(str) strnlen_user(str, ~0UL >> 1) |
+ |
+long strnlen_user(const char __user *str, long n); |
+unsigned long clear_user(void __user *mem, unsigned long len); |
+unsigned long __clear_user(void __user *mem, unsigned long len); |
+ |
+#endif /* __i386_UACCESS_H */ |
Index: linuxc26/include/asm/hardirq.h |
=================================================================== |
--- linuxc26/include/asm/hardirq.h (nonexistent) |
+++ linuxc26/include/asm/hardirq.h (revision 422) |
@@ -0,0 +1,101 @@ |
+#ifndef __ASM_HARDIRQ_H |
+#define __ASM_HARDIRQ_H |
+ |
+#include <linux/config.h> |
+#include <linux/threads.h> |
+#include <linux/irq.h> |
+ |
+typedef struct { |
+ unsigned int __softirq_pending; |
+ unsigned long idle_timestamp; |
+ unsigned int __nmi_count; /* arch dependent */ |
+ unsigned int apic_timer_irqs; /* arch dependent */ |
+} ____cacheline_aligned irq_cpustat_t; |
+ |
+#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ |
+ |
+/* |
+ * We put the hardirq and softirq counter into the preemption |
+ * counter. The bitmask has the following meaning: |
+ * |
+ * - bits 0-7 are the preemption count (max preemption depth: 256) |
+ * - bits 8-15 are the softirq count (max # of softirqs: 256) |
+ * - bits 16-23 are the hardirq count (max # of hardirqs: 256) |
+ * |
+ * - ( bit 26 is the PREEMPT_ACTIVE flag. ) |
+ * |
+ * PREEMPT_MASK: 0x000000ff |
+ * SOFTIRQ_MASK: 0x0000ff00 |
+ * HARDIRQ_MASK: 0x00ff0000 |
+ */ |
+ |
+#define PREEMPT_BITS 8 |
+#define SOFTIRQ_BITS 8 |
+#define HARDIRQ_BITS 8 |
+ |
+#define PREEMPT_SHIFT 0 |
+#define SOFTIRQ_SHIFT (PREEMPT_SHIFT + PREEMPT_BITS) |
+#define HARDIRQ_SHIFT (SOFTIRQ_SHIFT + SOFTIRQ_BITS) |
+ |
+#define __MASK(x) ((1UL << (x))-1) |
+ |
+#define PREEMPT_MASK (__MASK(PREEMPT_BITS) << PREEMPT_SHIFT) |
+#define HARDIRQ_MASK (__MASK(HARDIRQ_BITS) << HARDIRQ_SHIFT) |
+#define SOFTIRQ_MASK (__MASK(SOFTIRQ_BITS) << SOFTIRQ_SHIFT) |
+ |
+#define hardirq_count() (preempt_count() & HARDIRQ_MASK) |
+#define softirq_count() (preempt_count() & SOFTIRQ_MASK) |
+#define irq_count() (preempt_count() & (HARDIRQ_MASK | SOFTIRQ_MASK)) |
+ |
+#define PREEMPT_OFFSET (1UL << PREEMPT_SHIFT) |
+#define SOFTIRQ_OFFSET (1UL << SOFTIRQ_SHIFT) |
+#define HARDIRQ_OFFSET (1UL << HARDIRQ_SHIFT) |
+ |
+/* |
+ * The hardirq mask has to be large enough to have |
+ * space for potentially all IRQ sources in the system |
+ * nesting on a single CPU: |
+ */ |
+#if (1 << HARDIRQ_BITS) < NR_IRQS |
+# error HARDIRQ_BITS is too low! |
+#endif |
+ |
+/* |
+ * Are we doing bottom half or hardware interrupt processing? |
+ * Are we in a softirq context? Interrupt context? |
+ */ |
+#define in_irq() (hardirq_count()) |
+#define in_softirq() (softirq_count()) |
+#define in_interrupt() (irq_count()) |
+ |
+ |
+#define hardirq_trylock() (!in_interrupt()) |
+#define hardirq_endlock() do { } while (0) |
+ |
+#define irq_enter() (preempt_count() += HARDIRQ_OFFSET) |
+#define nmi_enter() (irq_enter()) |
+#define nmi_exit() (preempt_count() -= HARDIRQ_OFFSET) |
+ |
+#ifdef CONFIG_PREEMPT |
+# include <linux/smp_lock.h> |
+# define in_atomic() ((preempt_count() & ~PREEMPT_ACTIVE) != kernel_locked()) |
+# define IRQ_EXIT_OFFSET (HARDIRQ_OFFSET-1) |
+#else |
+# define in_atomic() (preempt_count() != 0) |
+# define IRQ_EXIT_OFFSET HARDIRQ_OFFSET |
+#endif |
+#define irq_exit() \ |
+do { \ |
+ preempt_count() -= IRQ_EXIT_OFFSET; \ |
+ if (!in_interrupt() && softirq_pending(smp_processor_id())) \ |
+ do_softirq(); \ |
+ preempt_enable_no_resched(); \ |
+} while (0) |
+ |
+#ifndef CONFIG_SMP |
+# define synchronize_irq(irq) barrier() |
+#else |
+ extern void synchronize_irq(unsigned int irq); |
+#endif /* CONFIG_SMP */ |
+ |
+#endif /* __ASM_HARDIRQ_H */ |
Index: linuxc26/include/asm/local.h |
=================================================================== |
--- linuxc26/include/asm/local.h (nonexistent) |
+++ linuxc26/include/asm/local.h (revision 422) |
@@ -0,0 +1,70 @@ |
+#ifndef _ARCH_I386_LOCAL_H |
+#define _ARCH_I386_LOCAL_H |
+ |
+#include <linux/percpu.h> |
+ |
+typedef struct |
+{ |
+ volatile unsigned long counter; |
+} local_t; |
+ |
+#define LOCAL_INIT(i) { (i) } |
+ |
+#define local_read(v) ((v)->counter) |
+#define local_set(v,i) (((v)->counter) = (i)) |
+ |
+static __inline__ void local_inc(local_t *v) |
+{ |
+ __asm__ __volatile__( |
+ "incl %0" |
+ :"=m" (v->counter) |
+ :"m" (v->counter)); |
+} |
+ |
+static __inline__ void local_dec(local_t *v) |
+{ |
+ __asm__ __volatile__( |
+ "decl %0" |
+ :"=m" (v->counter) |
+ :"m" (v->counter)); |
+} |
+ |
+static __inline__ void local_add(unsigned long i, local_t *v) |
+{ |
+ __asm__ __volatile__( |
+ "addl %1,%0" |
+ :"=m" (v->counter) |
+ :"ir" (i), "m" (v->counter)); |
+} |
+ |
+static __inline__ void local_sub(unsigned long i, local_t *v) |
+{ |
+ __asm__ __volatile__( |
+ "subl %1,%0" |
+ :"=m" (v->counter) |
+ :"ir" (i), "m" (v->counter)); |
+} |
+ |
+/* On x86, these are no better than the atomic variants. */ |
+#define __local_inc(l) local_inc(l) |
+#define __local_dec(l) local_dec(l) |
+#define __local_add(i,l) local_add((i),(l)) |
+#define __local_sub(i,l) local_sub((i),(l)) |
+ |
+/* Use these for per-cpu local_t variables: on some archs they are |
+ * much more efficient than these naive implementations. Note they take |
+ * a variable, not an address. |
+ */ |
+#define cpu_local_read(v) local_read(&__get_cpu_var(v)) |
+#define cpu_local_set(v, i) local_set(&__get_cpu_var(v), (i)) |
+#define cpu_local_inc(v) local_inc(&__get_cpu_var(v)) |
+#define cpu_local_dec(v) local_dec(&__get_cpu_var(v)) |
+#define cpu_local_add(i, v) local_add((i), &__get_cpu_var(v)) |
+#define cpu_local_sub(i, v) local_sub((i), &__get_cpu_var(v)) |
+ |
+#define __cpu_local_inc(v) cpu_local_inc(v) |
+#define __cpu_local_dec(v) cpu_local_dec(v) |
+#define __cpu_local_add(i, v) cpu_local_add((i), (v)) |
+#define __cpu_local_sub(i, v) cpu_local_sub((i), (v)) |
+ |
+#endif /* _ARCH_I386_LOCAL_H */ |
Index: linuxc26/include/asm/percpu.h |
=================================================================== |
--- linuxc26/include/asm/percpu.h (nonexistent) |
+++ linuxc26/include/asm/percpu.h (revision 422) |
@@ -0,0 +1,6 @@ |
+#ifndef __ARCH_I386_PERCPU__ |
+#define __ARCH_I386_PERCPU__ |
+ |
+#include <asm-generic/percpu.h> |
+ |
+#endif /* __ARCH_I386_PERCPU__ */ |
Index: linuxc26/include/asm/param.h |
=================================================================== |
--- linuxc26/include/asm/param.h (nonexistent) |
+++ linuxc26/include/asm/param.h (revision 422) |
@@ -0,0 +1,26 @@ |
+#ifndef _ASMi386_PARAM_H |
+#define _ASMi386_PARAM_H |
+ |
+#ifdef __KERNEL__ |
+# define HZ 1000 /* Internal kernel timer frequency */ |
+# define USER_HZ 100 /* .. some user interfaces are in "ticks" */ |
+# define CLOCKS_PER_SEC (USER_HZ) /* like times() */ |
+#endif |
+ |
+#ifndef HZ |
+#define HZ 100 |
+#endif |
+ |
+#define EXEC_PAGESIZE 4096 |
+ |
+#ifndef NGROUPS |
+#define NGROUPS 32 |
+#endif |
+ |
+#ifndef NOGROUP |
+#define NOGROUP (-1) |
+#endif |
+ |
+#define MAXHOSTNAMELEN 64 /* max length of hostname */ |
+ |
+#endif |
Index: linuxc26/include/asm/dma.h |
=================================================================== |
--- linuxc26/include/asm/dma.h (nonexistent) |
+++ linuxc26/include/asm/dma.h (revision 422) |
@@ -0,0 +1,298 @@ |
+/* $Id: dma.h,v 1.1 2004-01-28 15:24:15 giacomo Exp $ |
+ * linux/include/asm/dma.h: Defines for using and allocating dma channels. |
+ * Written by Hennus Bergman, 1992. |
+ * High DMA channel support & info by Hannu Savolainen |
+ * and John Boyd, Nov. 1992. |
+ */ |
+ |
+#ifndef _ASM_DMA_H |
+#define _ASM_DMA_H |
+ |
+#include <linux/config.h> |
+#include <linux/spinlock.h> /* And spinlocks */ |
+#include <asm/io.h> /* need byte IO */ |
+#include <linux/delay.h> |
+ |
+ |
+#ifdef HAVE_REALLY_SLOW_DMA_CONTROLLER |
+#define dma_outb outb_p |
+#else |
+#define dma_outb outb |
+#endif |
+ |
+#define dma_inb inb |
+ |
+/* |
+ * NOTES about DMA transfers: |
+ * |
+ * controller 1: channels 0-3, byte operations, ports 00-1F |
+ * controller 2: channels 4-7, word operations, ports C0-DF |
+ * |
+ * - ALL registers are 8 bits only, regardless of transfer size |
+ * - channel 4 is not used - cascades 1 into 2. |
+ * - channels 0-3 are byte - addresses/counts are for physical bytes |
+ * - channels 5-7 are word - addresses/counts are for physical words |
+ * - transfers must not cross physical 64K (0-3) or 128K (5-7) boundaries |
+ * - transfer count loaded to registers is 1 less than actual count |
+ * - controller 2 offsets are all even (2x offsets for controller 1) |
+ * - page registers for 5-7 don't use data bit 0, represent 128K pages |
+ * - page registers for 0-3 use bit 0, represent 64K pages |
+ * |
+ * DMA transfers are limited to the lower 16MB of _physical_ memory. |
+ * Note that addresses loaded into registers must be _physical_ addresses, |
+ * not logical addresses (which may differ if paging is active). |
+ * |
+ * Address mapping for channels 0-3: |
+ * |
+ * A23 ... A16 A15 ... A8 A7 ... A0 (Physical addresses) |
+ * | ... | | ... | | ... | |
+ * | ... | | ... | | ... | |
+ * | ... | | ... | | ... | |
+ * P7 ... P0 A7 ... A0 A7 ... A0 |
+ * | Page | Addr MSB | Addr LSB | (DMA registers) |
+ * |
+ * Address mapping for channels 5-7: |
+ * |
+ * A23 ... A17 A16 A15 ... A9 A8 A7 ... A1 A0 (Physical addresses) |
+ * | ... | \ \ ... \ \ \ ... \ \ |
+ * | ... | \ \ ... \ \ \ ... \ (not used) |
+ * | ... | \ \ ... \ \ \ ... \ |
+ * P7 ... P1 (0) A7 A6 ... A0 A7 A6 ... A0 |
+ * | Page | Addr MSB | Addr LSB | (DMA registers) |
+ * |
+ * Again, channels 5-7 transfer _physical_ words (16 bits), so addresses |
+ * and counts _must_ be word-aligned (the lowest address bit is _ignored_ at |
+ * the hardware level, so odd-byte transfers aren't possible). |
+ * |
+ * Transfer count (_not # bytes_) is limited to 64K, represented as actual |
+ * count - 1 : 64K => 0xFFFF, 1 => 0x0000. Thus, count is always 1 or more, |
+ * and up to 128K bytes may be transferred on channels 5-7 in one operation. |
+ * |
+ */ |
+ |
+#define MAX_DMA_CHANNELS 8 |
+ |
+/* The maximum address that we can perform a DMA transfer to on this platform */ |
+#define MAX_DMA_ADDRESS (PAGE_OFFSET+0x1000000) |
+ |
+/* 8237 DMA controllers */ |
+#define IO_DMA1_BASE 0x00 /* 8 bit slave DMA, channels 0..3 */ |
+#define IO_DMA2_BASE 0xC0 /* 16 bit master DMA, ch 4(=slave input)..7 */ |
+ |
+/* DMA controller registers */ |
+#define DMA1_CMD_REG 0x08 /* command register (w) */ |
+#define DMA1_STAT_REG 0x08 /* status register (r) */ |
+#define DMA1_REQ_REG 0x09 /* request register (w) */ |
+#define DMA1_MASK_REG 0x0A /* single-channel mask (w) */ |
+#define DMA1_MODE_REG 0x0B /* mode register (w) */ |
+#define DMA1_CLEAR_FF_REG 0x0C /* clear pointer flip-flop (w) */ |
+#define DMA1_TEMP_REG 0x0D /* Temporary Register (r) */ |
+#define DMA1_RESET_REG 0x0D /* Master Clear (w) */ |
+#define DMA1_CLR_MASK_REG 0x0E /* Clear Mask */ |
+#define DMA1_MASK_ALL_REG 0x0F /* all-channels mask (w) */ |
+ |
+#define DMA2_CMD_REG 0xD0 /* command register (w) */ |
+#define DMA2_STAT_REG 0xD0 /* status register (r) */ |
+#define DMA2_REQ_REG 0xD2 /* request register (w) */ |
+#define DMA2_MASK_REG 0xD4 /* single-channel mask (w) */ |
+#define DMA2_MODE_REG 0xD6 /* mode register (w) */ |
+#define DMA2_CLEAR_FF_REG 0xD8 /* clear pointer flip-flop (w) */ |
+#define DMA2_TEMP_REG 0xDA /* Temporary Register (r) */ |
+#define DMA2_RESET_REG 0xDA /* Master Clear (w) */ |
+#define DMA2_CLR_MASK_REG 0xDC /* Clear Mask */ |
+#define DMA2_MASK_ALL_REG 0xDE /* all-channels mask (w) */ |
+ |
+#define DMA_ADDR_0 0x00 /* DMA address registers */ |
+#define DMA_ADDR_1 0x02 |
+#define DMA_ADDR_2 0x04 |
+#define DMA_ADDR_3 0x06 |
+#define DMA_ADDR_4 0xC0 |
+#define DMA_ADDR_5 0xC4 |
+#define DMA_ADDR_6 0xC8 |
+#define DMA_ADDR_7 0xCC |
+ |
+#define DMA_CNT_0 0x01 /* DMA count registers */ |
+#define DMA_CNT_1 0x03 |
+#define DMA_CNT_2 0x05 |
+#define DMA_CNT_3 0x07 |
+#define DMA_CNT_4 0xC2 |
+#define DMA_CNT_5 0xC6 |
+#define DMA_CNT_6 0xCA |
+#define DMA_CNT_7 0xCE |
+ |
+#define DMA_PAGE_0 0x87 /* DMA page registers */ |
+#define DMA_PAGE_1 0x83 |
+#define DMA_PAGE_2 0x81 |
+#define DMA_PAGE_3 0x82 |
+#define DMA_PAGE_5 0x8B |
+#define DMA_PAGE_6 0x89 |
+#define DMA_PAGE_7 0x8A |
+ |
+#define DMA_MODE_READ 0x44 /* I/O to memory, no autoinit, increment, single mode */ |
+#define DMA_MODE_WRITE 0x48 /* memory to I/O, no autoinit, increment, single mode */ |
+#define DMA_MODE_CASCADE 0xC0 /* pass thru DREQ->HRQ, DACK<-HLDA only */ |
+ |
+#define DMA_AUTOINIT 0x10 |
+ |
+ |
+extern spinlock_t dma_spin_lock; |
+ |
+static __inline__ unsigned long claim_dma_lock(void) |
+{ |
+ unsigned long flags; |
+ spin_lock_irqsave(&dma_spin_lock, flags); |
+ return flags; |
+} |
+ |
+static __inline__ void release_dma_lock(unsigned long flags) |
+{ |
+ spin_unlock_irqrestore(&dma_spin_lock, flags); |
+} |
+ |
+/* enable/disable a specific DMA channel */ |
+static __inline__ void enable_dma(unsigned int dmanr) |
+{ |
+ if (dmanr<=3) |
+ dma_outb(dmanr, DMA1_MASK_REG); |
+ else |
+ dma_outb(dmanr & 3, DMA2_MASK_REG); |
+} |
+ |
+static __inline__ void disable_dma(unsigned int dmanr) |
+{ |
+ if (dmanr<=3) |
+ dma_outb(dmanr | 4, DMA1_MASK_REG); |
+ else |
+ dma_outb((dmanr & 3) | 4, DMA2_MASK_REG); |
+} |
+ |
+/* Clear the 'DMA Pointer Flip Flop'. |
+ * Write 0 for LSB/MSB, 1 for MSB/LSB access. |
+ * Use this once to initialize the FF to a known state. |
+ * After that, keep track of it. :-) |
+ * --- In order to do that, the DMA routines below should --- |
+ * --- only be used while holding the DMA lock ! --- |
+ */ |
+static __inline__ void clear_dma_ff(unsigned int dmanr) |
+{ |
+ if (dmanr<=3) |
+ dma_outb(0, DMA1_CLEAR_FF_REG); |
+ else |
+ dma_outb(0, DMA2_CLEAR_FF_REG); |
+} |
+ |
+/* set mode (above) for a specific DMA channel */ |
+static __inline__ void set_dma_mode(unsigned int dmanr, char mode) |
+{ |
+ if (dmanr<=3) |
+ dma_outb(mode | dmanr, DMA1_MODE_REG); |
+ else |
+ dma_outb(mode | (dmanr&3), DMA2_MODE_REG); |
+} |
+ |
+/* Set only the page register bits of the transfer address. |
+ * This is used for successive transfers when we know the contents of |
+ * the lower 16 bits of the DMA current address register, but a 64k boundary |
+ * may have been crossed. |
+ */ |
+static __inline__ void set_dma_page(unsigned int dmanr, char pagenr) |
+{ |
+ switch(dmanr) { |
+ case 0: |
+ dma_outb(pagenr, DMA_PAGE_0); |
+ break; |
+ case 1: |
+ dma_outb(pagenr, DMA_PAGE_1); |
+ break; |
+ case 2: |
+ dma_outb(pagenr, DMA_PAGE_2); |
+ break; |
+ case 3: |
+ dma_outb(pagenr, DMA_PAGE_3); |
+ break; |
+ case 5: |
+ dma_outb(pagenr & 0xfe, DMA_PAGE_5); |
+ break; |
+ case 6: |
+ dma_outb(pagenr & 0xfe, DMA_PAGE_6); |
+ break; |
+ case 7: |
+ dma_outb(pagenr & 0xfe, DMA_PAGE_7); |
+ break; |
+ } |
+} |
+ |
+ |
+/* Set transfer address & page bits for specific DMA channel. |
+ * Assumes dma flipflop is clear. |
+ */ |
+static __inline__ void set_dma_addr(unsigned int dmanr, unsigned int a) |
+{ |
+ set_dma_page(dmanr, a>>16); |
+ if (dmanr <= 3) { |
+ dma_outb( a & 0xff, ((dmanr&3)<<1) + IO_DMA1_BASE ); |
+ dma_outb( (a>>8) & 0xff, ((dmanr&3)<<1) + IO_DMA1_BASE ); |
+ } else { |
+ dma_outb( (a>>1) & 0xff, ((dmanr&3)<<2) + IO_DMA2_BASE ); |
+ dma_outb( (a>>9) & 0xff, ((dmanr&3)<<2) + IO_DMA2_BASE ); |
+ } |
+} |
+ |
+ |
+/* Set transfer size (max 64k for DMA0..3, 128k for DMA5..7) for |
+ * a specific DMA channel. |
+ * You must ensure the parameters are valid. |
+ * NOTE: from a manual: "the number of transfers is one more |
+ * than the initial word count"! This is taken into account. |
+ * Assumes dma flip-flop is clear. |
+ * NOTE 2: "count" represents _bytes_ and must be even for channels 5-7. |
+ */ |
+static __inline__ void set_dma_count(unsigned int dmanr, unsigned int count) |
+{ |
+ count--; |
+ if (dmanr <= 3) { |
+ dma_outb( count & 0xff, ((dmanr&3)<<1) + 1 + IO_DMA1_BASE ); |
+ dma_outb( (count>>8) & 0xff, ((dmanr&3)<<1) + 1 + IO_DMA1_BASE ); |
+ } else { |
+ dma_outb( (count>>1) & 0xff, ((dmanr&3)<<2) + 2 + IO_DMA2_BASE ); |
+ dma_outb( (count>>9) & 0xff, ((dmanr&3)<<2) + 2 + IO_DMA2_BASE ); |
+ } |
+} |
+ |
+ |
+/* Get DMA residue count. After a DMA transfer, this |
+ * should return zero. Reading this while a DMA transfer is |
+ * still in progress will return unpredictable results. |
+ * If called before the channel has been used, it may return 1. |
+ * Otherwise, it returns the number of _bytes_ left to transfer. |
+ * |
+ * Assumes DMA flip-flop is clear. |
+ */ |
+static __inline__ int get_dma_residue(unsigned int dmanr) |
+{ |
+ unsigned int io_port = (dmanr<=3)? ((dmanr&3)<<1) + 1 + IO_DMA1_BASE |
+ : ((dmanr&3)<<2) + 2 + IO_DMA2_BASE; |
+ |
+ /* using short to get 16-bit wrap around */ |
+ unsigned short count; |
+ |
+ count = 1 + dma_inb(io_port); |
+ count += dma_inb(io_port) << 8; |
+ |
+ return (dmanr<=3)? count : (count<<1); |
+} |
+ |
+ |
+/* These are in kernel/dma.c: */ |
+extern int request_dma(unsigned int dmanr, const char * device_id); /* reserve a DMA channel */ |
+extern void free_dma(unsigned int dmanr); /* release it again */ |
+ |
+/* From PCI */ |
+ |
+#ifdef CONFIG_PCI |
+extern int isa_dma_bridge_buggy; |
+#else |
+#define isa_dma_bridge_buggy (0) |
+#endif |
+ |
+#endif /* _ASM_DMA_H */ |
Index: linuxc26/include/asm/agp.h |
=================================================================== |
--- linuxc26/include/asm/agp.h (nonexistent) |
+++ linuxc26/include/asm/agp.h (revision 422) |
@@ -0,0 +1,24 @@ |
+#ifndef AGP_H |
+#define AGP_H 1 |
+ |
+#include <asm/pgtable.h> |
+#include <asm/cacheflush.h> |
+ |
+/* |
+ * Functions to keep the agpgart mappings coherent with the MMU. |
+ * The GART gives the CPU a physical alias of pages in memory. The alias region is |
+ * mapped uncacheable. Make sure there are no conflicting mappings |
+ * with different cachability attributes for the same page. This avoids |
+ * data corruption on some CPUs. |
+ */ |
+ |
+#define map_page_into_agp(page) change_page_attr(page, 1, PAGE_KERNEL_NOCACHE) |
+#define unmap_page_from_agp(page) change_page_attr(page, 1, PAGE_KERNEL) |
+#define flush_agp_mappings() global_flush_tlb() |
+ |
+/* Could use CLFLUSH here if the cpu supports it. But then it would |
+ need to be called for each cacheline of the whole page so it may not be |
+ worth it. Would need a page for it. */ |
+#define flush_agp_cache() asm volatile("wbinvd":::"memory") |
+ |
+#endif |
Index: linuxc26/include/asm/shmparam.h |
=================================================================== |
--- linuxc26/include/asm/shmparam.h (nonexistent) |
+++ linuxc26/include/asm/shmparam.h (revision 422) |
@@ -0,0 +1,6 @@ |
+#ifndef _ASMI386_SHMPARAM_H |
+#define _ASMI386_SHMPARAM_H |
+ |
+#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ |
+ |
+#endif /* _ASMI386_SHMPARAM_H */ |
Index: linuxc26/include/asm/pc9800_sca.h |
=================================================================== |
--- linuxc26/include/asm/pc9800_sca.h (nonexistent) |
+++ linuxc26/include/asm/pc9800_sca.h (revision 422) |
@@ -0,0 +1,25 @@ |
+/* |
+ * System-common area definitions for NEC PC-9800 series |
+ * |
+ * Copyright (C) 1999 TAKAI Kousuke <tak@kmc.kyoto-u.ac.jp>, |
+ * Kyoto University Microcomputer Club. |
+ */ |
+ |
+#ifndef _ASM_I386_PC9800SCA_H_ |
+#define _ASM_I386_PC9800SCA_H_ |
+ |
+#define PC9800SCA_EXPMMSZ (0x0401) /* B */ |
+#define PC9800SCA_SCSI_PARAMS (0x0460) /* 8 * 4B */ |
+#define PC9800SCA_DISK_EQUIPS (0x0482) /* B */ |
+#define PC9800SCA_XROM_ID (0x04C0) /* 52B */ |
+#define PC9800SCA_BIOS_FLAG (0x0501) /* B */ |
+#define PC9800SCA_MMSZ16M (0x0594) /* W */ |
+ |
+/* PC-9821 have additional system common area in their BIOS-ROM segment. */ |
+ |
+#define PC9821SCA__BASE (0xF8E8 << 4) |
+#define PC9821SCA_ROM_ID (PC9821SCA__BASE + 0x00) |
+#define PC9821SCA_ROM_FLAG4 (PC9821SCA__BASE + 0x05) |
+#define PC9821SCA_RSFLAGS (PC9821SCA__BASE + 0x11) /* B */ |
+ |
+#endif /* !_ASM_I386_PC9800SCA_H_ */ |
Index: linuxc26/include/asm/voyager.h |
=================================================================== |
--- linuxc26/include/asm/voyager.h (nonexistent) |
+++ linuxc26/include/asm/voyager.h (revision 422) |
@@ -0,0 +1,521 @@ |
+/* Copyright (C) 1999,2001 |
+ * |
+ * Author: J.E.J.Bottomley@HansenPartnership.com |
+ * |
+ * Standard include definitions for the NCR Voyager system */ |
+ |
+#undef VOYAGER_DEBUG |
+#undef VOYAGER_CAT_DEBUG |
+ |
+#ifdef VOYAGER_DEBUG |
+#define VDEBUG(x) printk x |
+#else |
+#define VDEBUG(x) |
+#endif |
+ |
+/* There are three levels of voyager machine: 3,4 and 5. The rule is |
+ * if it's less than 3435 it's a Level 3 except for a 3360 which is |
+ * a level 4. A 3435 or above is a Level 5 */ |
+#define VOYAGER_LEVEL5_AND_ABOVE 0x3435 |
+#define VOYAGER_LEVEL4 0x3360 |
+ |
+/* The L4 DINO ASIC */ |
+#define VOYAGER_DINO 0x43 |
+ |
+/* voyager ports in standard I/O space */ |
+#define VOYAGER_MC_SETUP 0x96 |
+ |
+ |
+#define VOYAGER_CAT_CONFIG_PORT 0x97 |
+# define VOYAGER_CAT_DESELECT 0xff |
+#define VOYAGER_SSPB_RELOCATION_PORT 0x98 |
+ |
+/* Valid CAT controller commands */ |
+/* start instruction register cycle */ |
+#define VOYAGER_CAT_IRCYC 0x01 |
+/* start data register cycle */ |
+#define VOYAGER_CAT_DRCYC 0x02 |
+/* move to execute state */ |
+#define VOYAGER_CAT_RUN 0x0F |
+/* end operation */ |
+#define VOYAGER_CAT_END 0x80 |
+/* hold in idle state */ |
+#define VOYAGER_CAT_HOLD 0x90 |
+/* single step an "intest" vector */ |
+#define VOYAGER_CAT_STEP 0xE0 |
+/* return cat controller to CLEMSON mode */ |
+#define VOYAGER_CAT_CLEMSON 0xFF |
+ |
+/* the default cat command header */ |
+#define VOYAGER_CAT_HEADER 0x7F |
+ |
+/* the range of possible CAT module ids in the system */ |
+#define VOYAGER_MIN_MODULE 0x10 |
+#define VOYAGER_MAX_MODULE 0x1f |
+ |
+/* The voyager registers per asic */ |
+#define VOYAGER_ASIC_ID_REG 0x00 |
+#define VOYAGER_ASIC_TYPE_REG 0x01 |
+/* the sub address registers can be made auto incrementing on reads */ |
+#define VOYAGER_AUTO_INC_REG 0x02 |
+# define VOYAGER_AUTO_INC 0x04 |
+# define VOYAGER_NO_AUTO_INC 0xfb |
+#define VOYAGER_SUBADDRDATA 0x03 |
+#define VOYAGER_SCANPATH 0x05 |
+# define VOYAGER_CONNECT_ASIC 0x01 |
+# define VOYAGER_DISCONNECT_ASIC 0xfe |
+#define VOYAGER_SUBADDRLO 0x06 |
+#define VOYAGER_SUBADDRHI 0x07 |
+#define VOYAGER_SUBMODSELECT 0x08 |
+#define VOYAGER_SUBMODPRESENT 0x09 |
+ |
+#define VOYAGER_SUBADDR_LO 0xff |
+#define VOYAGER_SUBADDR_HI 0xffff |
+ |
+/* the maximum size of a scan path -- used to form instructions */ |
+#define VOYAGER_MAX_SCAN_PATH 0x100 |
+/* the biggest possible register size (in bytes) */ |
+#define VOYAGER_MAX_REG_SIZE 4 |
+ |
+/* Total number of possible modules (including submodules) */ |
+#define VOYAGER_MAX_MODULES 16 |
+/* Largest number of asics per module */ |
+#define VOYAGER_MAX_ASICS_PER_MODULE 7 |
+ |
+/* the CAT asic of each module is always the first one */ |
+#define VOYAGER_CAT_ID 0 |
+#define VOYAGER_PSI 0x1a |
+ |
+/* voyager instruction operations and registers */ |
+#define VOYAGER_READ_CONFIG 0x1 |
+#define VOYAGER_WRITE_CONFIG 0x2 |
+#define VOYAGER_BYPASS 0xff |
+ |
+typedef struct voyager_asic |
+{ |
+ __u8 asic_addr; /* ASIC address; Level 4 */ |
+ __u8 asic_type; /* ASIC type */ |
+ __u8 asic_id; /* ASIC id */ |
+ __u8 jtag_id[4]; /* JTAG id */ |
+ __u8 asic_location; /* Location within scan path; start w/ 0 */ |
+ __u8 bit_location; /* Location within bit stream; start w/ 0 */ |
+ __u8 ireg_length; /* Instruction register length */ |
+ __u16 subaddr; /* Amount of sub address space */ |
+ struct voyager_asic *next; /* Next asic in linked list */ |
+} voyager_asic_t; |
+ |
+typedef struct voyager_module { |
+ __u8 module_addr; /* Module address */ |
+ __u8 scan_path_connected; /* Scan path connected */ |
+ __u16 ee_size; /* Size of the EEPROM */ |
+ __u16 num_asics; /* Number of Asics */ |
+ __u16 inst_bits; /* Instruction bits in the scan path */ |
+ __u16 largest_reg; /* Largest register in the scan path */ |
+ __u16 smallest_reg; /* Smallest register in the scan path */ |
+ voyager_asic_t *asic; /* First ASIC in scan path (CAT_I) */ |
+ struct voyager_module *submodule; /* Submodule pointer */ |
+ struct voyager_module *next; /* Next module in linked list */ |
+} voyager_module_t; |
+ |
+typedef struct voyager_eeprom_hdr { |
+ __u8 module_id[4] __attribute__((packed)); |
+ __u8 version_id __attribute__((packed)); |
+ __u8 config_id __attribute__((packed)); |
+ __u16 boundry_id __attribute__((packed)); /* boundary scan id */ |
+ __u16 ee_size __attribute__((packed)); /* size of EEPROM */ |
+ __u8 assembly[11] __attribute__((packed)); /* assembly # */ |
+ __u8 assembly_rev __attribute__((packed)); /* assembly rev */ |
+ __u8 tracer[4] __attribute__((packed)); /* tracer number */ |
+ __u16 assembly_cksum __attribute__((packed)); /* asm checksum */ |
+ __u16 power_consump __attribute__((packed)); /* pwr requirements */ |
+ __u16 num_asics __attribute__((packed)); /* number of asics */ |
+ __u16 bist_time __attribute__((packed)); /* min. bist time */ |
+ __u16 err_log_offset __attribute__((packed)); /* error log offset */ |
+ __u16 scan_path_offset __attribute__((packed));/* scan path offset */ |
+ __u16 cct_offset __attribute__((packed)); |
+ __u16 log_length __attribute__((packed)); /* length of err log */ |
+ __u16 xsum_end __attribute__((packed)); /* offset to end of |
+ checksum */ |
+ __u8 reserved[4] __attribute__((packed)); |
+ __u8 sflag __attribute__((packed)); /* starting sentinal */ |
+ __u8 part_number[13] __attribute__((packed)); /* prom part number */ |
+ __u8 version[10] __attribute__((packed)); /* version number */ |
+ __u8 signature[8] __attribute__((packed)); |
+ __u16 eeprom_chksum __attribute__((packed)); |
+ __u32 data_stamp_offset __attribute__((packed)); |
+ __u8 eflag __attribute__((packed)); /* ending sentinal */ |
+} voyager_eprom_hdr_t; |
+ |
+ |
+ |
+#define VOYAGER_EPROM_SIZE_OFFSET ((__u16)(&(((voyager_eprom_hdr_t *)0)->ee_size))) |
+#define VOYAGER_XSUM_END_OFFSET 0x2a |
+ |
+/* the following three definitions are for internal table layouts |
+ * in the module EPROMs. We really only care about the IDs and |
+ * offsets */ |
+typedef struct voyager_sp_table { |
+ __u8 asic_id __attribute__((packed)); |
+ __u8 bypass_flag __attribute__((packed)); |
+ __u16 asic_data_offset __attribute__((packed)); |
+ __u16 config_data_offset __attribute__((packed)); |
+} voyager_sp_table_t; |
+ |
+typedef struct voyager_jtag_table { |
+ __u8 icode[4] __attribute__((packed)); |
+ __u8 runbist[4] __attribute__((packed)); |
+ __u8 intest[4] __attribute__((packed)); |
+ __u8 samp_preld[4] __attribute__((packed)); |
+ __u8 ireg_len __attribute__((packed)); |
+} voyager_jtt_t; |
+ |
+typedef struct voyager_asic_data_table { |
+ __u8 jtag_id[4] __attribute__((packed)); |
+ __u16 length_bsr __attribute__((packed)); |
+ __u16 length_bist_reg __attribute__((packed)); |
+ __u32 bist_clk __attribute__((packed)); |
+ __u16 subaddr_bits __attribute__((packed)); |
+ __u16 seed_bits __attribute__((packed)); |
+ __u16 sig_bits __attribute__((packed)); |
+ __u16 jtag_offset __attribute__((packed)); |
+} voyager_at_t; |
+ |
+/* Voyager Interrupt Controller (VIC) registers */ |
+ |
+/* Base to add to Cross Processor Interrupts (CPIs) when triggering |
+ * the CPU IRQ line */ |
+/* register defines for the WCBICs (one per processor) */ |
+#define VOYAGER_WCBIC0 0x41 /* bus A node P1 processor 0 */ |
+#define VOYAGER_WCBIC1 0x49 /* bus A node P1 processor 1 */ |
+#define VOYAGER_WCBIC2 0x51 /* bus A node P2 processor 0 */ |
+#define VOYAGER_WCBIC3 0x59 /* bus A node P2 processor 1 */ |
+#define VOYAGER_WCBIC4 0x61 /* bus B node P1 processor 0 */ |
+#define VOYAGER_WCBIC5 0x69 /* bus B node P1 processor 1 */ |
+#define VOYAGER_WCBIC6 0x71 /* bus B node P2 processor 0 */ |
+#define VOYAGER_WCBIC7 0x79 /* bus B node P2 processor 1 */ |
+ |
+ |
+/* top of memory registers */ |
+#define VOYAGER_WCBIC_TOM_L 0x4 |
+#define VOYAGER_WCBIC_TOM_H 0x5 |
+ |
+/* register defines for Voyager Memory Contol (VMC) |
+ * these are present on L4 machines only */ |
+#define VOYAGER_VMC1 0x81 |
+#define VOYAGER_VMC2 0x91 |
+#define VOYAGER_VMC3 0xa1 |
+#define VOYAGER_VMC4 0xb1 |
+ |
+/* VMC Ports */ |
+#define VOYAGER_VMC_MEMORY_SETUP 0x9 |
+# define VMC_Interleaving 0x01 |
+# define VMC_4Way 0x02 |
+# define VMC_EvenCacheLines 0x04 |
+# define VMC_HighLine 0x08 |
+# define VMC_Start0_Enable 0x20 |
+# define VMC_Start1_Enable 0x40 |
+# define VMC_Vremap 0x80 |
+#define VOYAGER_VMC_BANK_DENSITY 0xa |
+# define VMC_BANK_EMPTY 0 |
+# define VMC_BANK_4MB 1 |
+# define VMC_BANK_16MB 2 |
+# define VMC_BANK_64MB 3 |
+# define VMC_BANK0_MASK 0x03 |
+# define VMC_BANK1_MASK 0x0C |
+# define VMC_BANK2_MASK 0x30 |
+# define VMC_BANK3_MASK 0xC0 |
+ |
+/* Magellan Memory Controller (MMC) defines - present on L5 */ |
+#define VOYAGER_MMC_ASIC_ID 1 |
+/* the two memory modules corresponding to memory cards in the system */ |
+#define VOYAGER_MMC_MEMORY0_MODULE 0x14 |
+#define VOYAGER_MMC_MEMORY1_MODULE 0x15 |
+/* the Magellan Memory Address (MMA) defines */ |
+#define VOYAGER_MMA_ASIC_ID 2 |
+ |
+/* Submodule number for the Quad Baseboard */ |
+#define VOYAGER_QUAD_BASEBOARD 1 |
+ |
+/* ASIC defines for the Quad Baseboard */ |
+#define VOYAGER_QUAD_QDATA0 1 |
+#define VOYAGER_QUAD_QDATA1 2 |
+#define VOYAGER_QUAD_QABC 3 |
+ |
+/* Useful areas in extended CMOS */ |
+#define VOYAGER_PROCESSOR_PRESENT_MASK 0x88a |
+#define VOYAGER_MEMORY_CLICKMAP 0xa23 |
+#define VOYAGER_DUMP_LOCATION 0xb1a |
+ |
+/* SUS In Control bit - used to tell SUS that we don't need to be |
+ * babysat anymore */ |
+#define VOYAGER_SUS_IN_CONTROL_PORT 0x3ff |
+# define VOYAGER_IN_CONTROL_FLAG 0x80 |
+ |
+/* Voyager PSI defines */ |
+#define VOYAGER_PSI_STATUS_REG 0x08 |
+# define PSI_DC_FAIL 0x01 |
+# define PSI_MON 0x02 |
+# define PSI_FAULT 0x04 |
+# define PSI_ALARM 0x08 |
+# define PSI_CURRENT 0x10 |
+# define PSI_DVM 0x20 |
+# define PSI_PSCFAULT 0x40 |
+# define PSI_STAT_CHG 0x80 |
+ |
+#define VOYAGER_PSI_SUPPLY_REG 0x8000 |
+ /* read */ |
+# define PSI_FAIL_DC 0x01 |
+# define PSI_FAIL_AC 0x02 |
+# define PSI_MON_INT 0x04 |
+# define PSI_SWITCH_OFF 0x08 |
+# define PSI_HX_OFF 0x10 |
+# define PSI_SECURITY 0x20 |
+# define PSI_CMOS_BATT_LOW 0x40 |
+# define PSI_CMOS_BATT_FAIL 0x80 |
+ /* write */ |
+# define PSI_CLR_SWITCH_OFF 0x13 |
+# define PSI_CLR_HX_OFF 0x14 |
+# define PSI_CLR_CMOS_BATT_FAIL 0x17 |
+ |
+#define VOYAGER_PSI_MASK 0x8001 |
+# define PSI_MASK_MASK 0x10 |
+ |
+#define VOYAGER_PSI_AC_FAIL_REG 0x8004 |
+#define AC_FAIL_STAT_CHANGE 0x80 |
+ |
+#define VOYAGER_PSI_GENERAL_REG 0x8007 |
+ /* read */ |
+# define PSI_SWITCH_ON 0x01 |
+# define PSI_SWITCH_ENABLED 0x02 |
+# define PSI_ALARM_ENABLED 0x08 |
+# define PSI_SECURE_ENABLED 0x10 |
+# define PSI_COLD_RESET 0x20 |
+# define PSI_COLD_START 0x80 |
+ /* write */ |
+# define PSI_POWER_DOWN 0x10 |
+# define PSI_SWITCH_DISABLE 0x01 |
+# define PSI_SWITCH_ENABLE 0x11 |
+# define PSI_CLEAR 0x12 |
+# define PSI_ALARM_DISABLE 0x03 |
+# define PSI_ALARM_ENABLE 0x13 |
+# define PSI_CLEAR_COLD_RESET 0x05 |
+# define PSI_SET_COLD_RESET 0x15 |
+# define PSI_CLEAR_COLD_START 0x07 |
+# define PSI_SET_COLD_START 0x17 |
+ |
+ |
+ |
+struct voyager_bios_info { |
+ __u8 len; |
+ __u8 major; |
+ __u8 minor; |
+ __u8 debug; |
+ __u8 num_classes; |
+ __u8 class_1; |
+ __u8 class_2; |
+}; |
+ |
+/* The following structures and definitions are for the Kernel/SUS |
+ * interface these are needed to find out how SUS initialised any Quad |
+ * boards in the system */ |
+ |
+#define NUMBER_OF_MC_BUSSES 2 |
+#define SLOTS_PER_MC_BUS 8 |
+#define MAX_CPUS 16 /* 16 way CPU system */ |
+#define MAX_PROCESSOR_BOARDS 4 /* 4 processor slot system */ |
+#define MAX_CACHE_LEVELS 4 /* # of cache levels supported */ |
+#define MAX_SHARED_CPUS 4 /* # of CPUs that can share a LARC */ |
+#define NUMBER_OF_POS_REGS 8 |
+ |
+typedef struct { |
+ __u8 MC_Slot __attribute__((packed)); |
+ __u8 POS_Values[NUMBER_OF_POS_REGS] __attribute__((packed)); |
+} MC_SlotInformation_t; |
+ |
+struct QuadDescription { |
+ __u8 Type __attribute__((packed)); /* for type 0 (DYADIC or MONADIC) all fields |
+ * will be zero except for slot */ |
+ __u8 StructureVersion __attribute__((packed)); |
+ __u32 CPI_BaseAddress __attribute__((packed)); |
+ __u32 LARC_BankSize __attribute__((packed)); |
+ __u32 LocalMemoryStateBits __attribute__((packed)); |
+ __u8 Slot __attribute__((packed)); /* Processor slots 1 - 4 */ |
+}; |
+ |
+struct ProcBoardInfo { |
+ __u8 Type __attribute__((packed)); |
+ __u8 StructureVersion __attribute__((packed)); |
+ __u8 NumberOfBoards __attribute__((packed)); |
+ struct QuadDescription QuadData[MAX_PROCESSOR_BOARDS] __attribute__((packed)); |
+}; |
+ |
+struct CacheDescription { |
+ __u8 Level __attribute__((packed)); |
+ __u32 TotalSize __attribute__((packed)); |
+ __u16 LineSize __attribute__((packed)); |
+ __u8 Associativity __attribute__((packed)); |
+ __u8 CacheType __attribute__((packed)); |
+ __u8 WriteType __attribute__((packed)); |
+ __u8 Number_CPUs_SharedBy __attribute__((packed)); |
+ __u8 Shared_CPUs_Hardware_IDs[MAX_SHARED_CPUS] __attribute__((packed)); |
+ |
+}; |
+ |
+struct CPU_Description { |
+ __u8 CPU_HardwareId __attribute__((packed)); |
+ char *FRU_String __attribute__((packed)); |
+ __u8 NumberOfCacheLevels __attribute__((packed)); |
+ struct CacheDescription CacheLevelData[MAX_CACHE_LEVELS] __attribute__((packed)); |
+}; |
+ |
+struct CPU_Info { |
+ __u8 Type __attribute__((packed)); |
+ __u8 StructureVersion __attribute__((packed)); |
+ __u8 NumberOf_CPUs __attribute__((packed)); |
+ struct CPU_Description CPU_Data[MAX_CPUS] __attribute__((packed)); |
+}; |
+ |
+ |
+/* |
+ * This structure will be used by SUS and the OS. |
+ * The assumption about this structure is that no blank space is |
+ * packed in it by our friend the compiler. |
+ */ |
+typedef struct { |
+ __u8 Mailbox_SUS; /* Written to by SUS to give commands/response to the OS */ |
+ __u8 Mailbox_OS; /* Written to by the OS to give commands/response to SUS */ |
+ __u8 SUS_MailboxVersion; /* Tells the OS which iteration of the interface SUS supports */ |
+ __u8 OS_MailboxVersion; /* Tells SUS which iteration of the interface the OS supports */ |
+ __u32 OS_Flags; /* Flags set by the OS as info for SUS */ |
+ __u32 SUS_Flags; /* Flags set by SUS as info for the OS */ |
+ __u32 WatchDogPeriod; /* Watchdog period (in seconds) which the DP uses to see if the OS is dead */ |
+ __u32 WatchDogCount; /* Updated by the OS on every tic. */ |
+ __u32 MemoryFor_SUS_ErrorLog; /* Flat 32 bit address which tells SUS where to stuff the SUS error log on a dump */ |
+ MC_SlotInformation_t MC_SlotInfo[NUMBER_OF_MC_BUSSES*SLOTS_PER_MC_BUS]; /* Storage for MCA POS data */ |
+ /* All new SECOND_PASS_INTERFACE fields added from this point */ |
+ struct ProcBoardInfo *BoardData; |
+ struct CPU_Info *CPU_Data; |
+ /* All new fields must be added from this point */ |
+} Voyager_KernelSUS_Mbox_t; |
+ |
+/* structure for finding the right memory address to send a QIC CPI to */ |
+struct voyager_qic_cpi { |
+ /* Each cache line (32 bytes) can trigger a cpi. The cpi |
+ * read/write may occur anywhere in the cache line---pick the |
+ * middle to be safe */ |
+ struct { |
+ __u32 pad1[3]; |
+ __u32 cpi; |
+ __u32 pad2[4]; |
+ } qic_cpi[8]; |
+}; |
+ |
+struct voyager_status { |
+ __u32 power_fail:1; |
+ __u32 switch_off:1; |
+ __u32 request_from_kernel:1; |
+}; |
+ |
+struct voyager_psi_regs { |
+ __u8 cat_id; |
+ __u8 cat_dev; |
+ __u8 cat_control; |
+ __u8 subaddr; |
+ __u8 dummy4; |
+ __u8 checkbit; |
+ __u8 subaddr_low; |
+ __u8 subaddr_high; |
+ __u8 intstatus; |
+ __u8 stat1; |
+ __u8 stat3; |
+ __u8 fault; |
+ __u8 tms; |
+ __u8 gen; |
+ __u8 sysconf; |
+ __u8 dummy15; |
+}; |
+ |
+struct voyager_psi_subregs { |
+ __u8 supply; |
+ __u8 mask; |
+ __u8 present; |
+ __u8 DCfail; |
+ __u8 ACfail; |
+ __u8 fail; |
+ __u8 UPSfail; |
+ __u8 genstatus; |
+}; |
+ |
+struct voyager_psi { |
+ struct voyager_psi_regs regs; |
+ struct voyager_psi_subregs subregs; |
+}; |
+ |
+struct voyager_SUS { |
+#define VOYAGER_DUMP_BUTTON_NMI 0x1 |
+#define VOYAGER_SUS_VALID 0x2 |
+#define VOYAGER_SYSINT_COMPLETE 0x3 |
+ __u8 SUS_mbox; |
+#define VOYAGER_NO_COMMAND 0x0 |
+#define VOYAGER_IGNORE_DUMP 0x1 |
+#define VOYAGER_DO_DUMP 0x2 |
+#define VOYAGER_SYSINT_HANDSHAKE 0x3 |
+#define VOYAGER_DO_MEM_DUMP 0x4 |
+#define VOYAGER_SYSINT_WAS_RECOVERED 0x5 |
+ __u8 kernel_mbox; |
+#define VOYAGER_MAILBOX_VERSION 0x10 |
+ __u8 SUS_version; |
+ __u8 kernel_version; |
+#define VOYAGER_OS_HAS_SYSINT 0x1 |
+#define VOYAGER_OS_IN_PROGRESS 0x2 |
+#define VOYAGER_UPDATING_WDPERIOD 0x4 |
+ __u32 kernel_flags; |
+#define VOYAGER_SUS_BOOTING 0x1 |
+#define VOYAGER_SUS_IN_PROGRESS 0x2 |
+ __u32 SUS_flags; |
+ __u32 watchdog_period; |
+ __u32 watchdog_count; |
+ __u32 SUS_errorlog; |
+ /* lots of system configuration stuff under here */ |
+}; |
+ |
+/* Variables exported by voyager_smp */ |
+extern __u32 voyager_extended_vic_processors; |
+extern __u32 voyager_allowed_boot_processors; |
+extern __u32 voyager_quad_processors; |
+extern struct voyager_qic_cpi *voyager_quad_cpi_addr[NR_CPUS]; |
+extern struct voyager_SUS *voyager_SUS; |
+ |
+/* variables exported always */ |
+extern int voyager_level; |
+extern int kvoyagerd_running; |
+extern struct semaphore kvoyagerd_sem; |
+extern struct voyager_status voyager_status; |
+ |
+ |
+ |
+/* functions exported by the voyager and voyager_smp modules */ |
+ |
+extern int voyager_cat_readb(__u8 module, __u8 asic, int reg); |
+extern void voyager_cat_init(void); |
+extern void voyager_detect(struct voyager_bios_info *); |
+extern void voyager_trap_init(void); |
+extern void voyager_setup_irqs(void); |
+extern int voyager_memory_detect(int region, __u32 *addr, __u32 *length); |
+extern void voyager_smp_intr_init(void); |
+extern __u8 voyager_extended_cmos_read(__u16 cmos_address); |
+extern void voyager_smp_dump(void); |
+extern void voyager_timer_interrupt(struct pt_regs *regs); |
+extern void smp_local_timer_interrupt(struct pt_regs * regs); |
+extern void voyager_power_off(void); |
+extern void smp_voyager_power_off(void *dummy); |
+extern void voyager_restart(void); |
+extern void voyager_cat_power_off(void); |
+extern void voyager_cat_do_common_interrupt(void); |
+extern void voyager_handle_nmi(void); |
+/* Commands for the following are */ |
+#define VOYAGER_PSI_READ 0 |
+#define VOYAGER_PSI_WRITE 1 |
+#define VOYAGER_PSI_SUBREAD 2 |
+#define VOYAGER_PSI_SUBWRITE 3 |
+extern void voyager_cat_psi(__u8, __u16, __u8 *); |
Index: linuxc26/include/asm/apic.h |
=================================================================== |
--- linuxc26/include/asm/apic.h (nonexistent) |
+++ linuxc26/include/asm/apic.h (revision 422) |
@@ -0,0 +1,104 @@ |
+#ifndef __ASM_APIC_H |
+#define __ASM_APIC_H |
+ |
+#include <linux/config.h> |
+#include <linux/pm.h> |
+#include <asm/fixmap.h> |
+#include <asm/apicdef.h> |
+#include <asm/system.h> |
+ |
+#define APIC_DEBUG 0 |
+ |
+#if APIC_DEBUG |
+#define Dprintk(x...) printk(x) |
+#else |
+#define Dprintk(x...) |
+#endif |
+ |
+#ifdef CONFIG_X86_LOCAL_APIC |
+ |
+/* |
+ * Basic functions accessing APICs. |
+ */ |
+ |
+static __inline void apic_write(unsigned long reg, unsigned long v) |
+{ |
+ *((volatile unsigned long *)(APIC_BASE+reg)) = v; |
+} |
+ |
+static __inline void apic_write_atomic(unsigned long reg, unsigned long v) |
+{ |
+ xchg((volatile unsigned long *)(APIC_BASE+reg), v); |
+} |
+ |
+static __inline unsigned long apic_read(unsigned long reg) |
+{ |
+ return *((volatile unsigned long *)(APIC_BASE+reg)); |
+} |
+ |
+static __inline__ void apic_wait_icr_idle(void) |
+{ |
+ do { } while ( apic_read( APIC_ICR ) & APIC_ICR_BUSY ); |
+} |
+ |
+#ifdef CONFIG_X86_GOOD_APIC |
+# define FORCE_READ_AROUND_WRITE 0 |
+# define apic_read_around(x) |
+# define apic_write_around(x,y) apic_write((x),(y)) |
+#else |
+# define FORCE_READ_AROUND_WRITE 1 |
+# define apic_read_around(x) apic_read(x) |
+# define apic_write_around(x,y) apic_write_atomic((x),(y)) |
+#endif |
+ |
+static inline void ack_APIC_irq(void) |
+{ |
+ /* |
+ * ack_APIC_irq() actually gets compiled as a single instruction: |
+ * - a single rmw on Pentium/82489DX |
+ * - a single write on P6+ cores (CONFIG_X86_GOOD_APIC) |
+ * ... yummie. |
+ */ |
+ |
+ /* Docs say use 0 for future compatibility */ |
+ apic_write_around(APIC_EOI, 0); |
+} |
+ |
+extern void (*wait_timer_tick)(void); |
+ |
+extern int get_maxlvt(void); |
+extern void clear_local_APIC(void); |
+extern void connect_bsp_APIC (void); |
+extern void disconnect_bsp_APIC (void); |
+extern void disable_local_APIC (void); |
+extern int verify_local_APIC (void); |
+extern void cache_APIC_registers (void); |
+extern void sync_Arb_IDs (void); |
+extern void init_bsp_APIC (void); |
+extern void setup_local_APIC (void); |
+extern void init_apic_mappings (void); |
+extern void smp_local_timer_interrupt (struct pt_regs * regs); |
+extern void setup_boot_APIC_clock (void); |
+extern void setup_secondary_APIC_clock (void); |
+extern void setup_apic_nmi_watchdog (void); |
+extern void disable_lapic_nmi_watchdog(void); |
+extern void enable_lapic_nmi_watchdog(void); |
+extern void disable_timer_nmi_watchdog(void); |
+extern void enable_timer_nmi_watchdog(void); |
+extern inline void nmi_watchdog_tick (struct pt_regs * regs); |
+extern int APIC_init_uniprocessor (void); |
+extern void disable_APIC_timer(void); |
+extern void enable_APIC_timer(void); |
+ |
+extern int check_nmi_watchdog (void); |
+extern void enable_NMI_through_LVT0 (void * dummy); |
+ |
+extern unsigned int nmi_watchdog; |
+#define NMI_NONE 0 |
+#define NMI_IO_APIC 1 |
+#define NMI_LOCAL_APIC 2 |
+#define NMI_INVALID 3 |
+ |
+#endif /* CONFIG_X86_LOCAL_APIC */ |
+ |
+#endif /* __ASM_APIC_H */ |
Index: linuxc26/include/asm/atomic.h |
=================================================================== |
--- linuxc26/include/asm/atomic.h (nonexistent) |
+++ linuxc26/include/asm/atomic.h (revision 422) |
@@ -0,0 +1,204 @@ |
+#ifndef __ARCH_I386_ATOMIC__ |
+#define __ARCH_I386_ATOMIC__ |
+ |
+#include <linux/config.h> |
+ |
+/* |
+ * Atomic operations that C can't guarantee us. Useful for |
+ * resource counting etc.. |
+ */ |
+ |
+#ifdef CONFIG_SMP |
+#define LOCK "lock ; " |
+#else |
+#define LOCK "" |
+#endif |
+ |
+/* |
+ * Make sure gcc doesn't try to be clever and move things around |
+ * on us. We need to use _exactly_ the address the user gave us, |
+ * not some alias that contains the same information. |
+ */ |
+typedef struct { volatile int counter; } atomic_t; |
+ |
+#define ATOMIC_INIT(i) { (i) } |
+ |
+/** |
+ * atomic_read - read atomic variable |
+ * @v: pointer of type atomic_t |
+ * |
+ * Atomically reads the value of @v. Note that the guaranteed |
+ * useful range of an atomic_t is only 24 bits. |
+ */ |
+#define atomic_read(v) ((v)->counter) |
+ |
+/** |
+ * atomic_set - set atomic variable |
+ * @v: pointer of type atomic_t |
+ * @i: required value |
+ * |
+ * Atomically sets the value of @v to @i. Note that the guaranteed |
+ * useful range of an atomic_t is only 24 bits. |
+ */ |
+#define atomic_set(v,i) (((v)->counter) = (i)) |
+ |
+/** |
+ * atomic_add - add integer to atomic variable |
+ * @i: integer value to add |
+ * @v: pointer of type atomic_t |
+ * |
+ * Atomically adds @i to @v. Note that the guaranteed useful range |
+ * of an atomic_t is only 24 bits. |
+ */ |
+static __inline__ void atomic_add(int i, atomic_t *v) |
+{ |
+ __asm__ __volatile__( |
+ LOCK "addl %1,%0" |
+ :"=m" (v->counter) |
+ :"ir" (i), "m" (v->counter)); |
+} |
+ |
+/** |
+ * atomic_sub - subtract the atomic variable |
+ * @i: integer value to subtract |
+ * @v: pointer of type atomic_t |
+ * |
+ * Atomically subtracts @i from @v. Note that the guaranteed |
+ * useful range of an atomic_t is only 24 bits. |
+ */ |
+static __inline__ void atomic_sub(int i, atomic_t *v) |
+{ |
+ __asm__ __volatile__( |
+ LOCK "subl %1,%0" |
+ :"=m" (v->counter) |
+ :"ir" (i), "m" (v->counter)); |
+} |
+ |
+/** |
+ * atomic_sub_and_test - subtract value from variable and test result |
+ * @i: integer value to subtract |
+ * @v: pointer of type atomic_t |
+ * |
+ * Atomically subtracts @i from @v and returns |
+ * true if the result is zero, or false for all |
+ * other cases. Note that the guaranteed |
+ * useful range of an atomic_t is only 24 bits. |
+ */ |
+static __inline__ int atomic_sub_and_test(int i, atomic_t *v) |
+{ |
+ unsigned char c; |
+ |
+ __asm__ __volatile__( |
+ LOCK "subl %2,%0; sete %1" |
+ :"=m" (v->counter), "=qm" (c) |
+ :"ir" (i), "m" (v->counter) : "memory"); |
+ return c; |
+} |
+ |
+/** |
+ * atomic_inc - increment atomic variable |
+ * @v: pointer of type atomic_t |
+ * |
+ * Atomically increments @v by 1. Note that the guaranteed |
+ * useful range of an atomic_t is only 24 bits. |
+ */ |
+static __inline__ void atomic_inc(atomic_t *v) |
+{ |
+ __asm__ __volatile__( |
+ LOCK "incl %0" |
+ :"=m" (v->counter) |
+ :"m" (v->counter)); |
+} |
+ |
+/** |
+ * atomic_dec - decrement atomic variable |
+ * @v: pointer of type atomic_t |
+ * |
+ * Atomically decrements @v by 1. Note that the guaranteed |
+ * useful range of an atomic_t is only 24 bits. |
+ */ |
+static __inline__ void atomic_dec(atomic_t *v) |
+{ |
+ __asm__ __volatile__( |
+ LOCK "decl %0" |
+ :"=m" (v->counter) |
+ :"m" (v->counter)); |
+} |
+ |
+/** |
+ * atomic_dec_and_test - decrement and test |
+ * @v: pointer of type atomic_t |
+ * |
+ * Atomically decrements @v by 1 and |
+ * returns true if the result is 0, or false for all other |
+ * cases. Note that the guaranteed |
+ * useful range of an atomic_t is only 24 bits. |
+ */ |
+static __inline__ int atomic_dec_and_test(atomic_t *v) |
+{ |
+ unsigned char c; |
+ |
+ __asm__ __volatile__( |
+ LOCK "decl %0; sete %1" |
+ :"=m" (v->counter), "=qm" (c) |
+ :"m" (v->counter) : "memory"); |
+ return c != 0; |
+} |
+ |
+/** |
+ * atomic_inc_and_test - increment and test |
+ * @v: pointer of type atomic_t |
+ * |
+ * Atomically increments @v by 1 |
+ * and returns true if the result is zero, or false for all |
+ * other cases. Note that the guaranteed |
+ * useful range of an atomic_t is only 24 bits. |
+ */ |
+static __inline__ int atomic_inc_and_test(atomic_t *v) |
+{ |
+ unsigned char c; |
+ |
+ __asm__ __volatile__( |
+ LOCK "incl %0; sete %1" |
+ :"=m" (v->counter), "=qm" (c) |
+ :"m" (v->counter) : "memory"); |
+ return c != 0; |
+} |
+ |
+/** |
+ * atomic_add_negative - add and test if negative |
+ * @v: pointer of type atomic_t |
+ * @i: integer value to add |
+ * |
+ * Atomically adds @i to @v and returns true |
+ * if the result is negative, or false when |
+ * result is greater than or equal to zero. Note that the guaranteed |
+ * useful range of an atomic_t is only 24 bits. |
+ */ |
+static __inline__ int atomic_add_negative(int i, atomic_t *v) |
+{ |
+ unsigned char c; |
+ |
+ __asm__ __volatile__( |
+ LOCK "addl %2,%0; sets %1" |
+ :"=m" (v->counter), "=qm" (c) |
+ :"ir" (i), "m" (v->counter) : "memory"); |
+ return c; |
+} |
+ |
+/* These are x86-specific, used by some header files */ |
+#define atomic_clear_mask(mask, addr) \ |
+__asm__ __volatile__(LOCK "andl %0,%1" \ |
+: : "r" (~(mask)),"m" (*addr) : "memory") |
+ |
+#define atomic_set_mask(mask, addr) \ |
+__asm__ __volatile__(LOCK "orl %0,%1" \ |
+: : "r" (mask),"m" (*(addr)) : "memory") |
+ |
+/* Atomic operations are already serializing on x86 */ |
+#define smp_mb__before_atomic_dec() barrier() |
+#define smp_mb__after_atomic_dec() barrier() |
+#define smp_mb__before_atomic_inc() barrier() |
+#define smp_mb__after_atomic_inc() barrier() |
+ |
+#endif |
Index: linuxc26/include/asm/pgtable.h |
=================================================================== |
--- linuxc26/include/asm/pgtable.h (nonexistent) |
+++ linuxc26/include/asm/pgtable.h (revision 422) |
@@ -0,0 +1,344 @@ |
+#ifndef _I386_PGTABLE_H |
+#define _I386_PGTABLE_H |
+ |
+#include <linux/config.h> |
+ |
+/* |
+ * The Linux memory management assumes a three-level page table setup. On |
+ * the i386, we use that, but "fold" the mid level into the top-level page |
+ * table, so that we physically have the same two-level page table as the |
+ * i386 mmu expects. |
+ * |
+ * This file contains the functions and defines necessary to modify and use |
+ * the i386 page table tree. |
+ */ |
+#ifndef __ASSEMBLY__ |
+#include <asm/processor.h> |
+#include <asm/fixmap.h> |
+#include <linux/threads.h> |
+ |
+#ifndef _I386_BITOPS_H |
+#include <asm/bitops.h> |
+#endif |
+ |
+#include <linux/slab.h> |
+#include <linux/list.h> |
+#include <linux/spinlock.h> |
+ |
+/* |
+ * ZERO_PAGE is a global shared page that is always zero: used |
+ * for zero-mapped memory areas etc.. |
+ */ |
+#define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page)) |
+extern unsigned long empty_zero_page[1024]; |
+extern pgd_t swapper_pg_dir[1024]; |
+extern kmem_cache_t *pgd_cache; |
+extern kmem_cache_t *pmd_cache; |
+extern spinlock_t pgd_lock; |
+extern struct list_head pgd_list; |
+ |
+void pmd_ctor(void *, kmem_cache_t *, unsigned long); |
+void pgd_ctor(void *, kmem_cache_t *, unsigned long); |
+void pgd_dtor(void *, kmem_cache_t *, unsigned long); |
+void pgtable_cache_init(void); |
+void paging_init(void); |
+ |
+#endif /* !__ASSEMBLY__ */ |
+ |
+/* |
+ * The Linux x86 paging architecture is 'compile-time dual-mode', it |
+ * implements both the traditional 2-level x86 page tables and the |
+ * newer 3-level PAE-mode page tables. |
+ */ |
+#ifndef __ASSEMBLY__ |
+#ifdef CONFIG_X86_PAE |
+# include <asm/pgtable-3level.h> |
+#else |
+# include <asm/pgtable-2level.h> |
+#endif |
+#endif |
+ |
+#define PMD_SIZE (1UL << PMD_SHIFT) |
+#define PMD_MASK (~(PMD_SIZE-1)) |
+#define PGDIR_SIZE (1UL << PGDIR_SHIFT) |
+#define PGDIR_MASK (~(PGDIR_SIZE-1)) |
+ |
+#define USER_PTRS_PER_PGD (TASK_SIZE/PGDIR_SIZE) |
+#define FIRST_USER_PGD_NR 0 |
+ |
+#define USER_PGD_PTRS (PAGE_OFFSET >> PGDIR_SHIFT) |
+#define KERNEL_PGD_PTRS (PTRS_PER_PGD-USER_PGD_PTRS) |
+ |
+#define TWOLEVEL_PGDIR_SHIFT 22 |
+#define BOOT_USER_PGD_PTRS (__PAGE_OFFSET >> TWOLEVEL_PGDIR_SHIFT) |
+#define BOOT_KERNEL_PGD_PTRS (1024-BOOT_USER_PGD_PTRS) |
+ |
+ |
+#ifndef __ASSEMBLY__ |
+/* Just any arbitrary offset to the start of the vmalloc VM area: the |
+ * current 8MB value just means that there will be a 8MB "hole" after the |
+ * physical memory until the kernel virtual memory starts. That means that |
+ * any out-of-bounds memory accesses will hopefully be caught. |
+ * The vmalloc() routines leaves a hole of 4kB between each vmalloced |
+ * area for the same reason. ;) |
+ */ |
+#define VMALLOC_OFFSET (8*1024*1024) |
+#define VMALLOC_START (((unsigned long) high_memory + 2*VMALLOC_OFFSET-1) & \ |
+ ~(VMALLOC_OFFSET-1)) |
+#ifdef CONFIG_HIGHMEM |
+# define VMALLOC_END (PKMAP_BASE-2*PAGE_SIZE) |
+#else |
+# define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE) |
+#endif |
+ |
+/* |
+ * The 4MB page is guessing.. Detailed in the infamous "Chapter H" |
+ * of the Pentium details, but assuming intel did the straightforward |
+ * thing, this bit set in the page directory entry just means that |
+ * the page directory entry points directly to a 4MB-aligned block of |
+ * memory. |
+ */ |
+#define _PAGE_BIT_PRESENT 0 |
+#define _PAGE_BIT_RW 1 |
+#define _PAGE_BIT_USER 2 |
+#define _PAGE_BIT_PWT 3 |
+#define _PAGE_BIT_PCD 4 |
+#define _PAGE_BIT_ACCESSED 5 |
+#define _PAGE_BIT_DIRTY 6 |
+#define _PAGE_BIT_PSE 7 /* 4 MB (or 2MB) page, Pentium+, if present.. */ |
+#define _PAGE_BIT_GLOBAL 8 /* Global TLB entry PPro+ */ |
+ |
+#define _PAGE_PRESENT 0x001 |
+#define _PAGE_RW 0x002 |
+#define _PAGE_USER 0x004 |
+#define _PAGE_PWT 0x008 |
+#define _PAGE_PCD 0x010 |
+#define _PAGE_ACCESSED 0x020 |
+#define _PAGE_DIRTY 0x040 |
+#define _PAGE_PSE 0x080 /* 4 MB (or 2MB) page, Pentium+, if present.. */ |
+#define _PAGE_GLOBAL 0x100 /* Global TLB entry PPro+ */ |
+ |
+#define _PAGE_FILE 0x040 /* set:pagecache unset:swap */ |
+#define _PAGE_PROTNONE 0x080 /* If not present */ |
+ |
+#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY) |
+#define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY) |
+#define _PAGE_CHG_MASK (PTE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY) |
+ |
+#define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED) |
+#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED) |
+#define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED) |
+#define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED) |
+ |
+#define _PAGE_KERNEL \ |
+ (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED) |
+ |
+extern unsigned long __PAGE_KERNEL; |
+#define __PAGE_KERNEL_RO (__PAGE_KERNEL & ~_PAGE_RW) |
+#define __PAGE_KERNEL_NOCACHE (__PAGE_KERNEL | _PAGE_PCD) |
+#define __PAGE_KERNEL_LARGE (__PAGE_KERNEL | _PAGE_PSE) |
+ |
+#define PAGE_KERNEL __pgprot(__PAGE_KERNEL) |
+#define PAGE_KERNEL_RO __pgprot(__PAGE_KERNEL_RO) |
+#define PAGE_KERNEL_NOCACHE __pgprot(__PAGE_KERNEL_NOCACHE) |
+#define PAGE_KERNEL_LARGE __pgprot(__PAGE_KERNEL_LARGE) |
+ |
+/* |
+ * The i386 can't do page protection for execute, and considers that |
+ * the same are read. Also, write permissions imply read permissions. |
+ * This is the closest we can get.. |
+ */ |
+#define __P000 PAGE_NONE |
+#define __P001 PAGE_READONLY |
+#define __P010 PAGE_COPY |
+#define __P011 PAGE_COPY |
+#define __P100 PAGE_READONLY |
+#define __P101 PAGE_READONLY |
+#define __P110 PAGE_COPY |
+#define __P111 PAGE_COPY |
+ |
+#define __S000 PAGE_NONE |
+#define __S001 PAGE_READONLY |
+#define __S010 PAGE_SHARED |
+#define __S011 PAGE_SHARED |
+#define __S100 PAGE_READONLY |
+#define __S101 PAGE_READONLY |
+#define __S110 PAGE_SHARED |
+#define __S111 PAGE_SHARED |
+ |
+/* |
+ * Define this if things work differently on an i386 and an i486: |
+ * it will (on an i486) warn about kernel memory accesses that are |
+ * done without a 'verify_area(VERIFY_WRITE,..)' |
+ */ |
+#undef TEST_VERIFY_AREA |
+ |
+/* page table for 0-4MB for everybody */ |
+extern unsigned long pg0[1024]; |
+ |
+#define pte_present(x) ((x).pte_low & (_PAGE_PRESENT | _PAGE_PROTNONE)) |
+#define pte_clear(xp) do { set_pte(xp, __pte(0)); } while (0) |
+ |
+#define pmd_none(x) (!pmd_val(x)) |
+#define pmd_present(x) (pmd_val(x) & _PAGE_PRESENT) |
+#define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0) |
+#define pmd_bad(x) ((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE) |
+ |
+ |
+#define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT)) |
+ |
+/* |
+ * The following only work if pte_present() is true. |
+ * Undefined behaviour if not.. |
+ */ |
+static inline int pte_user(pte_t pte) { return (pte).pte_low & _PAGE_USER; } |
+static inline int pte_read(pte_t pte) { return (pte).pte_low & _PAGE_USER; } |
+static inline int pte_exec(pte_t pte) { return (pte).pte_low & _PAGE_USER; } |
+static inline int pte_dirty(pte_t pte) { return (pte).pte_low & _PAGE_DIRTY; } |
+static inline int pte_young(pte_t pte) { return (pte).pte_low & _PAGE_ACCESSED; } |
+static inline int pte_write(pte_t pte) { return (pte).pte_low & _PAGE_RW; } |
+ |
+/* |
+ * The following only works if pte_present() is not true. |
+ */ |
+static inline int pte_file(pte_t pte) { return (pte).pte_low & _PAGE_FILE; } |
+ |
+static inline pte_t pte_rdprotect(pte_t pte) { (pte).pte_low &= ~_PAGE_USER; return pte; } |
+static inline pte_t pte_exprotect(pte_t pte) { (pte).pte_low &= ~_PAGE_USER; return pte; } |
+static inline pte_t pte_mkclean(pte_t pte) { (pte).pte_low &= ~_PAGE_DIRTY; return pte; } |
+static inline pte_t pte_mkold(pte_t pte) { (pte).pte_low &= ~_PAGE_ACCESSED; return pte; } |
+static inline pte_t pte_wrprotect(pte_t pte) { (pte).pte_low &= ~_PAGE_RW; return pte; } |
+static inline pte_t pte_mkread(pte_t pte) { (pte).pte_low |= _PAGE_USER; return pte; } |
+static inline pte_t pte_mkexec(pte_t pte) { (pte).pte_low |= _PAGE_USER; return pte; } |
+static inline pte_t pte_mkdirty(pte_t pte) { (pte).pte_low |= _PAGE_DIRTY; return pte; } |
+static inline pte_t pte_mkyoung(pte_t pte) { (pte).pte_low |= _PAGE_ACCESSED; return pte; } |
+static inline pte_t pte_mkwrite(pte_t pte) { (pte).pte_low |= _PAGE_RW; return pte; } |
+ |
+static inline int ptep_test_and_clear_dirty(pte_t *ptep) { return test_and_clear_bit(_PAGE_BIT_DIRTY, &ptep->pte_low); } |
+static inline int ptep_test_and_clear_young(pte_t *ptep) { return test_and_clear_bit(_PAGE_BIT_ACCESSED, &ptep->pte_low); } |
+static inline void ptep_set_wrprotect(pte_t *ptep) { clear_bit(_PAGE_BIT_RW, &ptep->pte_low); } |
+static inline void ptep_mkdirty(pte_t *ptep) { set_bit(_PAGE_BIT_DIRTY, &ptep->pte_low); } |
+ |
+/* |
+ * Macro to mark a page protection value as "uncacheable". On processors which do not support |
+ * it, this is a no-op. |
+ */ |
+#define pgprot_noncached(prot) ((boot_cpu_data.x86 > 3) \ |
+ ? (__pgprot(pgprot_val(prot) | _PAGE_PCD | _PAGE_PWT)) : (prot)) |
+ |
+/* |
+ * Conversion functions: convert a page and protection to a page entry, |
+ * and a page entry and page directory to the page they refer to. |
+ */ |
+ |
+#define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot)) |
+#define mk_pte_huge(entry) ((entry).pte_low |= _PAGE_PRESENT | _PAGE_PSE) |
+ |
+static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
+{ |
+ pte.pte_low &= _PAGE_CHG_MASK; |
+ pte.pte_low |= pgprot_val(newprot); |
+ return pte; |
+} |
+ |
+#define page_pte(page) page_pte_prot(page, __pgprot(0)) |
+ |
+#define pmd_page_kernel(pmd) \ |
+((unsigned long) __va(pmd_val(pmd) & PAGE_MASK)) |
+ |
+#ifndef CONFIG_DISCONTIGMEM |
+#define pmd_page(pmd) (pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT)) |
+#endif /* !CONFIG_DISCONTIGMEM */ |
+ |
+#define pmd_large(pmd) \ |
+ ((pmd_val(pmd) & (_PAGE_PSE|_PAGE_PRESENT)) == (_PAGE_PSE|_PAGE_PRESENT)) |
+ |
+/* |
+ * the pgd page can be thought of an array like this: pgd_t[PTRS_PER_PGD] |
+ * |
+ * this macro returns the index of the entry in the pgd page which would |
+ * control the given virtual address |
+ */ |
+#define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) |
+ |
+/* |
+ * pgd_offset() returns a (pgd_t *) |
+ * pgd_index() is used get the offset into the pgd page's array of pgd_t's; |
+ */ |
+#define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address)) |
+ |
+/* |
+ * a shortcut which implies the use of the kernel's pgd, instead |
+ * of a process's |
+ */ |
+#define pgd_offset_k(address) pgd_offset(&init_mm, address) |
+ |
+/* |
+ * the pmd page can be thought of an array like this: pmd_t[PTRS_PER_PMD] |
+ * |
+ * this macro returns the index of the entry in the pmd page which would |
+ * control the given virtual address |
+ */ |
+#define pmd_index(address) \ |
+ (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1)) |
+ |
+/* |
+ * the pte page can be thought of an array like this: pte_t[PTRS_PER_PTE] |
+ * |
+ * this macro returns the index of the entry in the pte page which would |
+ * control the given virtual address |
+ */ |
+#define pte_index(address) \ |
+ (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) |
+#define pte_offset_kernel(dir, address) \ |
+ ((pte_t *) pmd_page_kernel(*(dir)) + pte_index(address)) |
+ |
+#if defined(CONFIG_HIGHPTE) |
+#define pte_offset_map(dir, address) \ |
+ ((pte_t *)kmap_atomic(pmd_page(*(dir)),KM_PTE0) + pte_index(address)) |
+#define pte_offset_map_nested(dir, address) \ |
+ ((pte_t *)kmap_atomic(pmd_page(*(dir)),KM_PTE1) + pte_index(address)) |
+#define pte_unmap(pte) kunmap_atomic(pte, KM_PTE0) |
+#define pte_unmap_nested(pte) kunmap_atomic(pte, KM_PTE1) |
+#else |
+#define pte_offset_map(dir, address) \ |
+ ((pte_t *)page_address(pmd_page(*(dir))) + pte_index(address)) |
+#define pte_offset_map_nested(dir, address) pte_offset_map(dir, address) |
+#define pte_unmap(pte) do { } while (0) |
+#define pte_unmap_nested(pte) do { } while (0) |
+#endif |
+ |
+#if defined(CONFIG_HIGHPTE) && defined(CONFIG_HIGHMEM4G) |
+typedef u32 pte_addr_t; |
+#endif |
+ |
+#if defined(CONFIG_HIGHPTE) && defined(CONFIG_HIGHMEM64G) |
+typedef u64 pte_addr_t; |
+#endif |
+ |
+#if !defined(CONFIG_HIGHPTE) |
+typedef pte_t *pte_addr_t; |
+#endif |
+ |
+/* |
+ * The i386 doesn't have any external MMU info: the kernel page |
+ * tables contain all the necessary information. |
+ */ |
+#define update_mmu_cache(vma,address,pte) do { } while (0) |
+ |
+/* Encode and de-code a swap entry */ |
+#define __swp_type(x) (((x).val >> 1) & 0x1f) |
+#define __swp_offset(x) ((x).val >> 8) |
+#define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 8) }) |
+#define __pte_to_swp_entry(pte) ((swp_entry_t) { (pte).pte_low }) |
+#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) |
+ |
+#endif /* !__ASSEMBLY__ */ |
+ |
+#ifndef CONFIG_DISCONTIGMEM |
+#define kern_addr_valid(addr) (1) |
+#endif /* !CONFIG_DISCONTIGMEM */ |
+ |
+#define io_remap_page_range remap_page_range |
+ |
+#endif /* _I386_PGTABLE_H */ |
Index: linuxc26/include/asm/suspend.h |
=================================================================== |
--- linuxc26/include/asm/suspend.h (nonexistent) |
+++ linuxc26/include/asm/suspend.h (revision 422) |
@@ -0,0 +1,65 @@ |
+/* |
+ * Copyright 2001-2002 Pavel Machek <pavel@suse.cz> |
+ * Based on code |
+ * Copyright 2001 Patrick Mochel <mochel@osdl.org> |
+ */ |
+#include <asm/desc.h> |
+#include <asm/i387.h> |
+ |
+static inline int |
+arch_prepare_suspend(void) |
+{ |
+ if (!cpu_has_pse) |
+ return -EPERM; |
+ return 0; |
+} |
+ |
+/* image of the saved processor state */ |
+struct saved_context { |
+ u16 es, fs, gs, ss; |
+ unsigned long cr0, cr2, cr3, cr4; |
+ u16 gdt_pad; |
+ u16 gdt_limit; |
+ unsigned long gdt_base; |
+ u16 idt_pad; |
+ u16 idt_limit; |
+ unsigned long idt_base; |
+ u16 ldt; |
+ u16 tss; |
+ unsigned long tr; |
+ unsigned long safety; |
+ unsigned long return_address; |
+} __attribute__((packed)); |
+ |
+#define loaddebug(thread,register) \ |
+ __asm__("movl %0,%%db" #register \ |
+ : /* no output */ \ |
+ :"r" ((thread)->debugreg[register])) |
+ |
+extern void save_processor_state(void); |
+extern void restore_processor_state(void); |
+ |
+#ifdef CONFIG_ACPI_SLEEP |
+extern unsigned long saved_eip; |
+extern unsigned long saved_esp; |
+extern unsigned long saved_ebp; |
+extern unsigned long saved_ebx; |
+extern unsigned long saved_esi; |
+extern unsigned long saved_edi; |
+ |
+static inline void acpi_save_register_state(unsigned long return_point) |
+{ |
+ saved_eip = return_point; |
+ asm volatile ("movl %%esp,%0" : "=m" (saved_esp)); |
+ asm volatile ("movl %%ebp,%0" : "=m" (saved_ebp)); |
+ asm volatile ("movl %%ebx,%0" : "=m" (saved_ebx)); |
+ asm volatile ("movl %%edi,%0" : "=m" (saved_edi)); |
+ asm volatile ("movl %%esi,%0" : "=m" (saved_esi)); |
+} |
+ |
+#define acpi_restore_register_state() do {} while (0) |
+ |
+/* routines for saving/restoring kernel state */ |
+extern int acpi_save_state_mem(void); |
+extern int acpi_save_state_disk(void); |
+#endif |
Index: linuxc26/include/asm/sembuf.h |
=================================================================== |
--- linuxc26/include/asm/sembuf.h (nonexistent) |
+++ linuxc26/include/asm/sembuf.h (revision 422) |
@@ -0,0 +1,25 @@ |
+#ifndef _I386_SEMBUF_H |
+#define _I386_SEMBUF_H |
+ |
+/* |
+ * The semid64_ds structure for i386 architecture. |
+ * Note extra padding because this structure is passed back and forth |
+ * between kernel and user space. |
+ * |
+ * Pad space is left for: |
+ * - 64-bit time_t to solve y2038 problem |
+ * - 2 miscellaneous 32-bit values |
+ */ |
+ |
+struct semid64_ds { |
+ struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ |
+ __kernel_time_t sem_otime; /* last semop time */ |
+ unsigned long __unused1; |
+ __kernel_time_t sem_ctime; /* last change time */ |
+ unsigned long __unused2; |
+ unsigned long sem_nsems; /* no. of semaphores in array */ |
+ unsigned long __unused3; |
+ unsigned long __unused4; |
+}; |
+ |
+#endif /* _I386_SEMBUF_H */ |
Index: linuxc26/include/asm/vic.h |
=================================================================== |
--- linuxc26/include/asm/vic.h (nonexistent) |
+++ linuxc26/include/asm/vic.h (revision 422) |
@@ -0,0 +1,61 @@ |
+/* Copyright (C) 1999,2001 |
+ * |
+ * Author: J.E.J.Bottomley@HansenPartnership.com |
+ * |
+ * Standard include definitions for the NCR Voyager Interrupt Controller */ |
+ |
+/* The eight CPI vectors. To activate a CPI, you write a bit mask |
+ * corresponding to the processor set to be interrupted into the |
+ * relevant register. That set of CPUs will then be interrupted with |
+ * the CPI */ |
+static const int VIC_CPI_Registers[] = |
+ {0xFC00, 0xFC01, 0xFC08, 0xFC09, |
+ 0xFC10, 0xFC11, 0xFC18, 0xFC19 }; |
+ |
+#define VIC_PROC_WHO_AM_I 0xfc29 |
+# define QUAD_IDENTIFIER 0xC0 |
+# define EIGHT_SLOT_IDENTIFIER 0xE0 |
+#define QIC_EXTENDED_PROCESSOR_SELECT 0xFC72 |
+#define VIC_CPI_BASE_REGISTER 0xFC41 |
+#define VIC_PROCESSOR_ID 0xFC21 |
+# define VIC_CPU_MASQUERADE_ENABLE 0x8 |
+ |
+#define VIC_CLAIM_REGISTER_0 0xFC38 |
+#define VIC_CLAIM_REGISTER_1 0xFC39 |
+#define VIC_REDIRECT_REGISTER_0 0xFC60 |
+#define VIC_REDIRECT_REGISTER_1 0xFC61 |
+#define VIC_PRIORITY_REGISTER 0xFC20 |
+ |
+#define VIC_PRIMARY_MC_BASE 0xFC48 |
+#define VIC_SECONDARY_MC_BASE 0xFC49 |
+ |
+#define QIC_PROCESSOR_ID 0xFC71 |
+# define QIC_CPUID_ENABLE 0x08 |
+ |
+#define QIC_VIC_CPI_BASE_REGISTER 0xFC79 |
+#define QIC_CPI_BASE_REGISTER 0xFC7A |
+ |
+#define QIC_MASK_REGISTER0 0xFC80 |
+/* NOTE: these are masked high, enabled low */ |
+# define QIC_PERF_TIMER 0x01 |
+# define QIC_LPE 0x02 |
+# define QIC_SYS_INT 0x04 |
+# define QIC_CMN_INT 0x08 |
+/* at the moment, just enable CMN_INT, disable SYS_INT */ |
+# define QIC_DEFAULT_MASK0 (~(QIC_CMN_INT /* | VIC_SYS_INT */)) |
+#define QIC_MASK_REGISTER1 0xFC81 |
+# define QIC_BOOT_CPI_MASK 0xFE |
+/* Enable CPI's 1-6 inclusive */ |
+# define QIC_CPI_ENABLE 0x81 |
+ |
+#define QIC_INTERRUPT_CLEAR0 0xFC8A |
+#define QIC_INTERRUPT_CLEAR1 0xFC8B |
+ |
+/* this is where we place the CPI vectors */ |
+#define VIC_DEFAULT_CPI_BASE 0xC0 |
+/* this is where we place the QIC CPI vectors */ |
+#define QIC_DEFAULT_CPI_BASE 0xD0 |
+ |
+#define VIC_BOOT_INTERRUPT_MASK 0xfe |
+ |
+extern void smp_vic_timer_interrupt(struct pt_regs *regs); |
Index: linuxc26/include/asm/nmi.h |
=================================================================== |
--- linuxc26/include/asm/nmi.h (nonexistent) |
+++ linuxc26/include/asm/nmi.h (revision 422) |
@@ -0,0 +1,28 @@ |
+/* |
+ * linux/include/asm-i386/nmi.h |
+ */ |
+#ifndef ASM_NMI_H |
+#define ASM_NMI_H |
+ |
+#include <linux/pm.h> |
+ |
+struct pt_regs; |
+ |
+typedef int (*nmi_callback_t)(struct pt_regs * regs, int cpu); |
+ |
+/** |
+ * set_nmi_callback |
+ * |
+ * Set a handler for an NMI. Only one handler may be |
+ * set. Return 1 if the NMI was handled. |
+ */ |
+void set_nmi_callback(nmi_callback_t callback); |
+ |
+/** |
+ * unset_nmi_callback |
+ * |
+ * Remove the handler previously set. |
+ */ |
+void unset_nmi_callback(void); |
+ |
+#endif /* ASM_NMI_H */ |
Index: linuxc26/include/asm/fixmap.h |
=================================================================== |
--- linuxc26/include/asm/fixmap.h (nonexistent) |
+++ linuxc26/include/asm/fixmap.h (revision 422) |
@@ -0,0 +1,148 @@ |
+/* |
+ * fixmap.h: compile-time virtual memory allocation |
+ * |
+ * 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) 1998 Ingo Molnar |
+ * |
+ * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999 |
+ */ |
+ |
+#ifndef _ASM_FIXMAP_H |
+#define _ASM_FIXMAP_H |
+ |
+#include <linux/config.h> |
+#include <linux/kernel.h> |
+#include <asm/acpi.h> |
+#include <asm/apicdef.h> |
+#include <asm/page.h> |
+#ifdef CONFIG_HIGHMEM |
+#include <linux/threads.h> |
+#include <asm/kmap_types.h> |
+#endif |
+ |
+/* |
+ * Here we define all the compile-time 'special' virtual |
+ * addresses. The point is to have a constant address at |
+ * compile time, but to set the physical address only |
+ * in the boot process. We allocate these special addresses |
+ * from the end of virtual memory (0xfffff000) backwards. |
+ * Also this lets us do fail-safe vmalloc(), we |
+ * can guarantee that these special addresses and |
+ * vmalloc()-ed addresses never overlap. |
+ * |
+ * these 'compile-time allocated' memory buffers are |
+ * fixed-size 4k pages. (or larger if used with an increment |
+ * highger than 1) use fixmap_set(idx,phys) to associate |
+ * physical memory with fixmap indices. |
+ * |
+ * TLB entries of such buffers will not be flushed across |
+ * task switches. |
+ */ |
+enum fixed_addresses { |
+ FIX_HOLE, |
+ FIX_VSYSCALL, |
+#ifdef CONFIG_X86_LOCAL_APIC |
+ FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */ |
+#endif |
+#ifdef CONFIG_X86_IO_APIC |
+ FIX_IO_APIC_BASE_0, |
+ FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS-1, |
+#endif |
+#ifdef CONFIG_X86_VISWS_APIC |
+ FIX_CO_CPU, /* Cobalt timer */ |
+ FIX_CO_APIC, /* Cobalt APIC Redirection Table */ |
+ FIX_LI_PCIA, /* Lithium PCI Bridge A */ |
+ FIX_LI_PCIB, /* Lithium PCI Bridge B */ |
+#endif |
+#ifdef CONFIG_X86_F00F_BUG |
+ FIX_F00F_IDT, /* Virtual mapping for IDT */ |
+#endif |
+#ifdef CONFIG_X86_CYCLONE_TIMER |
+ FIX_CYCLONE_TIMER, /*cyclone timer register*/ |
+#endif |
+#ifdef CONFIG_HIGHMEM |
+ FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ |
+ FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1, |
+#endif |
+#ifdef CONFIG_ACPI_BOOT |
+ FIX_ACPI_BEGIN, |
+ FIX_ACPI_END = FIX_ACPI_BEGIN + FIX_ACPI_PAGES - 1, |
+#endif |
+ __end_of_permanent_fixed_addresses, |
+ /* temporary boot-time mappings, used before ioremap() is functional */ |
+#define NR_FIX_BTMAPS 16 |
+ FIX_BTMAP_END = __end_of_permanent_fixed_addresses, |
+ FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS - 1, |
+ FIX_WP_TEST, |
+ __end_of_fixed_addresses |
+}; |
+ |
+extern void __set_fixmap (enum fixed_addresses idx, |
+ unsigned long phys, pgprot_t flags); |
+ |
+#define set_fixmap(idx, phys) \ |
+ __set_fixmap(idx, phys, PAGE_KERNEL) |
+/* |
+ * Some hardware wants to get fixmapped without caching. |
+ */ |
+#define set_fixmap_nocache(idx, phys) \ |
+ __set_fixmap(idx, phys, PAGE_KERNEL_NOCACHE) |
+ |
+#define clear_fixmap(idx) \ |
+ __set_fixmap(idx, 0, __pgprot(0)) |
+ |
+/* |
+ * used by vmalloc.c. |
+ * |
+ * Leave one empty page between vmalloc'ed areas and |
+ * the start of the fixmap. |
+ */ |
+#define FIXADDR_TOP (0xfffff000UL) |
+#define __FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT) |
+#define FIXADDR_START (FIXADDR_TOP - __FIXADDR_SIZE) |
+ |
+#define __fix_to_virt(x) (FIXADDR_TOP - ((x) << PAGE_SHIFT)) |
+#define __virt_to_fix(x) ((FIXADDR_TOP - ((x)&PAGE_MASK)) >> PAGE_SHIFT) |
+ |
+/* |
+ * This is the range that is readable by user mode, and things |
+ * acting like user mode such as get_user_pages. |
+ */ |
+#define FIXADDR_USER_START (__fix_to_virt(FIX_VSYSCALL)) |
+#define FIXADDR_USER_END (FIXADDR_USER_START + PAGE_SIZE) |
+ |
+ |
+extern void __this_fixmap_does_not_exist(void); |
+ |
+/* |
+ * 'index to address' translation. If anyone tries to use the idx |
+ * directly without tranlation, we catch the bug with a NULL-deference |
+ * kernel oops. Illegal ranges of incoming indices are caught too. |
+ */ |
+static inline unsigned long fix_to_virt(const unsigned int idx) |
+{ |
+ /* |
+ * this branch gets completely eliminated after inlining, |
+ * except when someone tries to use fixaddr indices in an |
+ * illegal way. (such as mixing up address types or using |
+ * out-of-range indices). |
+ * |
+ * If it doesn't get removed, the linker will complain |
+ * loudly with a reasonably clear error message.. |
+ */ |
+ if (idx >= __end_of_fixed_addresses) |
+ __this_fixmap_does_not_exist(); |
+ |
+ return __fix_to_virt(idx); |
+} |
+ |
+static inline unsigned long virt_to_fix(const unsigned long vaddr) |
+{ |
+ BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); |
+ return __virt_to_fix(vaddr); |
+} |
+ |
+#endif |
Index: linuxc26/include/asm/mpspec.h |
=================================================================== |
--- linuxc26/include/asm/mpspec.h (nonexistent) |
+++ linuxc26/include/asm/mpspec.h (revision 422) |
@@ -0,0 +1,95 @@ |
+#ifndef __ASM_MPSPEC_H |
+#define __ASM_MPSPEC_H |
+ |
+#include <linux/cpumask.h> |
+#include <asm/mpspec_def.h> |
+#include <mach_mpspec.h> |
+ |
+extern int mp_bus_id_to_type [MAX_MP_BUSSES]; |
+extern int mp_bus_id_to_node [MAX_MP_BUSSES]; |
+extern int mp_bus_id_to_local [MAX_MP_BUSSES]; |
+extern int quad_local_to_mp_bus_id [NR_CPUS/4][4]; |
+extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES]; |
+ |
+extern unsigned int boot_cpu_physical_apicid; |
+extern int smp_found_config; |
+extern void find_smp_config (void); |
+extern void get_smp_config (void); |
+extern int nr_ioapics; |
+extern int apic_version [MAX_APICS]; |
+extern int mp_bus_id_to_type [MAX_MP_BUSSES]; |
+extern int mp_irq_entries; |
+extern struct mpc_config_intsrc mp_irqs [MAX_IRQ_SOURCES]; |
+extern int mpc_default_type; |
+extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES]; |
+extern int mp_current_pci_id; |
+extern unsigned long mp_lapic_addr; |
+extern int pic_mode; |
+extern int using_apic_timer; |
+ |
+#ifdef CONFIG_X86_SUMMIT |
+extern void setup_summit (void); |
+#endif |
+ |
+#ifdef CONFIG_ACPI_BOOT |
+extern void mp_register_lapic (u8 id, u8 enabled); |
+extern void mp_register_lapic_address (u64 address); |
+extern void mp_register_ioapic (u8 id, u32 address, u32 irq_base); |
+extern void mp_override_legacy_irq (u8 bus_irq, u8 polarity, u8 trigger, u32 global_irq); |
+extern void mp_config_acpi_legacy_irqs (void); |
+extern void mp_parse_prt (void); |
+ |
+#ifdef CONFIG_X86_IO_APIC |
+extern void mp_config_ioapic_for_sci(int irq); |
+#else |
+static inline void mp_config_ioapic_for_sci(int irq) |
+{ } |
+#endif |
+#endif /*CONFIG_ACPI_BOOT*/ |
+ |
+#define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS) |
+ |
+struct physid_mask |
+{ |
+ unsigned long mask[PHYSID_ARRAY_SIZE]; |
+}; |
+ |
+typedef struct physid_mask physid_mask_t; |
+ |
+#define physid_set(physid, map) set_bit(physid, (map).mask) |
+#define physid_clear(physid, map) clear_bit(physid, (map).mask) |
+#define physid_isset(physid, map) test_bit(physid, (map).mask) |
+#define physid_test_and_set(physid, map) test_and_set_bit(physid, (map).mask) |
+ |
+#define physids_and(dst, src1, src2) bitmap_and((dst).mask, (src1).mask, (src2).mask, MAX_APICS) |
+#define physids_or(dst, src1, src2) bitmap_or((dst).mask, (src1).mask, (src2).mask, MAX_APICS) |
+#define physids_clear(map) bitmap_clear((map).mask, MAX_APICS) |
+#define physids_complement(map) bitmap_complement((map).mask, MAX_APICS) |
+#define physids_empty(map) bitmap_empty((map).mask, MAX_APICS) |
+#define physids_equal(map1, map2) bitmap_equal((map1).mask, (map2).mask, MAX_APICS) |
+#define physids_weight(map) bitmap_weight((map).mask, MAX_APICS) |
+#define physids_shift_right(d, s, n) bitmap_shift_right((d).mask, (s).mask, n, MAX_APICS) |
+#define physids_shift_left(d, s, n) bitmap_shift_left((d).mask, (s).mask, n, MAX_APICS) |
+#define physids_coerce(map) ((map).mask[0]) |
+ |
+#define physids_promote(physids) \ |
+ ({ \ |
+ physid_mask_t __physid_mask = PHYSID_MASK_NONE; \ |
+ __physid_mask.mask[0] = physids; \ |
+ __physid_mask; \ |
+ }) |
+ |
+#define physid_mask_of_physid(physid) \ |
+ ({ \ |
+ physid_mask_t __physid_mask = PHYSID_MASK_NONE; \ |
+ physid_set(physid, __physid_mask); \ |
+ __physid_mask; \ |
+ }) |
+ |
+#define PHYSID_MASK_ALL { {[0 ... PHYSID_ARRAY_SIZE-1] = ~0UL} } |
+#define PHYSID_MASK_NONE { {[0 ... PHYSID_ARRAY_SIZE-1] = 0UL} } |
+ |
+extern physid_mask_t phys_cpu_present_map; |
+ |
+#endif |
+ |
Index: linuxc26/include/asm/termbits.h |
=================================================================== |
--- linuxc26/include/asm/termbits.h (nonexistent) |
+++ linuxc26/include/asm/termbits.h (revision 422) |
@@ -0,0 +1,172 @@ |
+#ifndef __ARCH_I386_TERMBITS_H__ |
+#define __ARCH_I386_TERMBITS_H__ |
+ |
+#include <linux/posix_types.h> |
+ |
+typedef unsigned char cc_t; |
+typedef unsigned int speed_t; |
+typedef unsigned int tcflag_t; |
+ |
+#define NCCS 19 |
+struct termios { |
+ tcflag_t c_iflag; /* input mode flags */ |
+ tcflag_t c_oflag; /* output mode flags */ |
+ tcflag_t c_cflag; /* control mode flags */ |
+ tcflag_t c_lflag; /* local mode flags */ |
+ cc_t c_line; /* line discipline */ |
+ cc_t c_cc[NCCS]; /* control characters */ |
+}; |
+ |
+/* c_cc characters */ |
+#define VINTR 0 |
+#define VQUIT 1 |
+#define VERASE 2 |
+#define VKILL 3 |
+#define VEOF 4 |
+#define VTIME 5 |
+#define VMIN 6 |
+#define VSWTC 7 |
+#define VSTART 8 |
+#define VSTOP 9 |
+#define VSUSP 10 |
+#define VEOL 11 |
+#define VREPRINT 12 |
+#define VDISCARD 13 |
+#define VWERASE 14 |
+#define VLNEXT 15 |
+#define VEOL2 16 |
+ |
+/* c_iflag bits */ |
+#define IGNBRK 0000001 |
+#define BRKINT 0000002 |
+#define IGNPAR 0000004 |
+#define PARMRK 0000010 |
+#define INPCK 0000020 |
+#define ISTRIP 0000040 |
+#define INLCR 0000100 |
+#define IGNCR 0000200 |
+#define ICRNL 0000400 |
+#define IUCLC 0001000 |
+#define IXON 0002000 |
+#define IXANY 0004000 |
+#define IXOFF 0010000 |
+#define IMAXBEL 0020000 |
+ |
+/* c_oflag bits */ |
+#define OPOST 0000001 |
+#define OLCUC 0000002 |
+#define ONLCR 0000004 |
+#define OCRNL 0000010 |
+#define ONOCR 0000020 |
+#define ONLRET 0000040 |
+#define OFILL 0000100 |
+#define OFDEL 0000200 |
+#define NLDLY 0000400 |
+#define NL0 0000000 |
+#define NL1 0000400 |
+#define CRDLY 0003000 |
+#define CR0 0000000 |
+#define CR1 0001000 |
+#define CR2 0002000 |
+#define CR3 0003000 |
+#define TABDLY 0014000 |
+#define TAB0 0000000 |
+#define TAB1 0004000 |
+#define TAB2 0010000 |
+#define TAB3 0014000 |
+#define XTABS 0014000 |
+#define BSDLY 0020000 |
+#define BS0 0000000 |
+#define BS1 0020000 |
+#define VTDLY 0040000 |
+#define VT0 0000000 |
+#define VT1 0040000 |
+#define FFDLY 0100000 |
+#define FF0 0000000 |
+#define FF1 0100000 |
+ |
+/* c_cflag bit meaning */ |
+#define CBAUD 0010017 |
+#define B0 0000000 /* hang up */ |
+#define B50 0000001 |
+#define B75 0000002 |
+#define B110 0000003 |
+#define B134 0000004 |
+#define B150 0000005 |
+#define B200 0000006 |
+#define B300 0000007 |
+#define B600 0000010 |
+#define B1200 0000011 |
+#define B1800 0000012 |
+#define B2400 0000013 |
+#define B4800 0000014 |
+#define B9600 0000015 |
+#define B19200 0000016 |
+#define B38400 0000017 |
+#define EXTA B19200 |
+#define EXTB B38400 |
+#define CSIZE 0000060 |
+#define CS5 0000000 |
+#define CS6 0000020 |
+#define CS7 0000040 |
+#define CS8 0000060 |
+#define CSTOPB 0000100 |
+#define CREAD 0000200 |
+#define PARENB 0000400 |
+#define PARODD 0001000 |
+#define HUPCL 0002000 |
+#define CLOCAL 0004000 |
+#define CBAUDEX 0010000 |
+#define B57600 0010001 |
+#define B115200 0010002 |
+#define B230400 0010003 |
+#define B460800 0010004 |
+#define B500000 0010005 |
+#define B576000 0010006 |
+#define B921600 0010007 |
+#define B1000000 0010010 |
+#define B1152000 0010011 |
+#define B1500000 0010012 |
+#define B2000000 0010013 |
+#define B2500000 0010014 |
+#define B3000000 0010015 |
+#define B3500000 0010016 |
+#define B4000000 0010017 |
+#define CIBAUD 002003600000 /* input baud rate (not used) */ |
+#define CMSPAR 010000000000 /* mark or space (stick) parity */ |
+#define CRTSCTS 020000000000 /* flow control */ |
+ |
+/* c_lflag bits */ |
+#define ISIG 0000001 |
+#define ICANON 0000002 |
+#define XCASE 0000004 |
+#define ECHO 0000010 |
+#define ECHOE 0000020 |
+#define ECHOK 0000040 |
+#define ECHONL 0000100 |
+#define NOFLSH 0000200 |
+#define TOSTOP 0000400 |
+#define ECHOCTL 0001000 |
+#define ECHOPRT 0002000 |
+#define ECHOKE 0004000 |
+#define FLUSHO 0010000 |
+#define PENDIN 0040000 |
+#define IEXTEN 0100000 |
+ |
+/* tcflow() and TCXONC use these */ |
+#define TCOOFF 0 |
+#define TCOON 1 |
+#define TCIOFF 2 |
+#define TCION 3 |
+ |
+/* tcflush() and TCFLSH use these */ |
+#define TCIFLUSH 0 |
+#define TCOFLUSH 1 |
+#define TCIOFLUSH 2 |
+ |
+/* tcsetattr uses these */ |
+#define TCSANOW 0 |
+#define TCSADRAIN 1 |
+#define TCSAFLUSH 2 |
+ |
+#endif |
Index: linuxc26/include/asm/dma-mapping.h |
=================================================================== |
--- linuxc26/include/asm/dma-mapping.h (nonexistent) |
+++ linuxc26/include/asm/dma-mapping.h (revision 422) |
@@ -0,0 +1,137 @@ |
+#ifndef _ASM_I386_DMA_MAPPING_H |
+#define _ASM_I386_DMA_MAPPING_H |
+ |
+#include <asm/cache.h> |
+ |
+#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
+#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
+ |
+void *dma_alloc_coherent(struct device *dev, size_t size, |
+ dma_addr_t *dma_handle, int flag); |
+ |
+void dma_free_coherent(struct device *dev, size_t size, |
+ void *vaddr, dma_addr_t dma_handle); |
+ |
+static inline dma_addr_t |
+dma_map_single(struct device *dev, void *ptr, size_t size, |
+ enum dma_data_direction direction) |
+{ |
+ BUG_ON(direction == DMA_NONE); |
+ flush_write_buffers(); |
+ return virt_to_phys(ptr); |
+} |
+ |
+static inline void |
+dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, |
+ enum dma_data_direction direction) |
+{ |
+ BUG_ON(direction == DMA_NONE); |
+} |
+ |
+static inline int |
+dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, |
+ enum dma_data_direction direction) |
+{ |
+ int i; |
+ |
+ BUG_ON(direction == DMA_NONE); |
+ |
+ for (i = 0; i < nents; i++ ) { |
+ BUG_ON(!sg[i].page); |
+ |
+ sg[i].dma_address = page_to_phys(sg[i].page) + sg[i].offset; |
+ } |
+ |
+ flush_write_buffers(); |
+ return nents; |
+} |
+ |
+static inline dma_addr_t |
+dma_map_page(struct device *dev, struct page *page, unsigned long offset, |
+ size_t size, enum dma_data_direction direction) |
+{ |
+ BUG_ON(direction == DMA_NONE); |
+ return (dma_addr_t)(page_to_pfn(page)) * PAGE_SIZE + offset; |
+} |
+ |
+static inline void |
+dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, |
+ enum dma_data_direction direction) |
+{ |
+ BUG_ON(direction == DMA_NONE); |
+} |
+ |
+ |
+static inline void |
+dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, |
+ enum dma_data_direction direction) |
+{ |
+ BUG_ON(direction == DMA_NONE); |
+} |
+ |
+static inline void |
+dma_sync_single(struct device *dev, dma_addr_t dma_handle, size_t size, |
+ enum dma_data_direction direction) |
+{ |
+ flush_write_buffers(); |
+} |
+ |
+static inline void |
+dma_sync_single_range(struct device *dev, dma_addr_t dma_handle, |
+ unsigned long offset, size_t size, |
+ enum dma_data_direction direction) |
+{ |
+ flush_write_buffers(); |
+} |
+ |
+ |
+static inline void |
+dma_sync_sg(struct device *dev, struct scatterlist *sg, int nelems, |
+ enum dma_data_direction direction) |
+{ |
+ flush_write_buffers(); |
+} |
+ |
+static inline int |
+dma_supported(struct device *dev, u64 mask) |
+{ |
+ /* |
+ * we fall back to GFP_DMA when the mask isn't all 1s, |
+ * so we can't guarantee allocations that must be |
+ * within a tighter range than GFP_DMA.. |
+ */ |
+ if(mask < 0x00ffffff) |
+ return 0; |
+ |
+ return 1; |
+} |
+ |
+static inline int |
+dma_set_mask(struct device *dev, u64 mask) |
+{ |
+ if(!dev->dma_mask || !dma_supported(dev, mask)) |
+ return -EIO; |
+ |
+ *dev->dma_mask = mask; |
+ |
+ return 0; |
+} |
+ |
+static inline int |
+dma_get_cache_alignment(void) |
+{ |
+ /* no easy way to get cache size on all x86, so return the |
+ * maximum possible, to be safe */ |
+ return (1 << L1_CACHE_SHIFT_MAX); |
+} |
+ |
+#define dma_is_consistent(d) (1) |
+ |
+static inline void |
+dma_cache_sync(void *vaddr, size_t size, |
+ enum dma_data_direction direction) |
+{ |
+ flush_write_buffers(); |
+} |
+ |
+#endif |
Index: linuxc26/include/asm/math_emu.h |
=================================================================== |
--- linuxc26/include/asm/math_emu.h (nonexistent) |
+++ linuxc26/include/asm/math_emu.h (revision 422) |
@@ -0,0 +1,35 @@ |
+#ifndef _I386_MATH_EMU_H |
+#define _I386_MATH_EMU_H |
+ |
+#include <asm/sigcontext.h> |
+ |
+int restore_i387_soft(void *s387, struct _fpstate __user *buf); |
+int save_i387_soft(void *s387, struct _fpstate __user *buf); |
+ |
+/* This structure matches the layout of the data saved to the stack |
+ following a device-not-present interrupt, part of it saved |
+ automatically by the 80386/80486. |
+ */ |
+struct info { |
+ long ___orig_eip; |
+ long ___ebx; |
+ long ___ecx; |
+ long ___edx; |
+ long ___esi; |
+ long ___edi; |
+ long ___ebp; |
+ long ___eax; |
+ long ___ds; |
+ long ___es; |
+ long ___orig_eax; |
+ long ___eip; |
+ long ___cs; |
+ long ___eflags; |
+ long ___esp; |
+ long ___ss; |
+ long ___vm86_es; /* This and the following only in vm86 mode */ |
+ long ___vm86_ds; |
+ long ___vm86_fs; |
+ long ___vm86_gs; |
+}; |
+#endif |
Index: linuxc26/include/asm/setup.h |
=================================================================== |
--- linuxc26/include/asm/setup.h (nonexistent) |
+++ linuxc26/include/asm/setup.h (revision 422) |
@@ -0,0 +1,47 @@ |
+/* |
+ * Just a place holder. We don't want to have to test x86 before |
+ * we include stuff |
+ */ |
+ |
+#ifndef _i386_SETUP_H |
+#define _i386_SETUP_H |
+ |
+#define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT) |
+#define PFN_DOWN(x) ((x) >> PAGE_SHIFT) |
+#define PFN_PHYS(x) ((x) << PAGE_SHIFT) |
+ |
+/* |
+ * Reserved space for vmalloc and iomap - defined in asm/page.h |
+ */ |
+#define MAXMEM_PFN PFN_DOWN(MAXMEM) |
+#define MAX_NONPAE_PFN (1 << 20) |
+ |
+/* |
+ * This is set up by the setup-routine at boot-time |
+ */ |
+#define PARAM ((unsigned char *)empty_zero_page) |
+#define SCREEN_INFO (*(struct screen_info *) (PARAM+0)) |
+#define EXT_MEM_K (*(unsigned short *) (PARAM+2)) |
+#define ALT_MEM_K (*(unsigned long *) (PARAM+0x1e0)) |
+#define E820_MAP_NR (*(char*) (PARAM+E820NR)) |
+#define E820_MAP ((struct e820entry *) (PARAM+E820MAP)) |
+#define APM_BIOS_INFO (*(struct apm_bios_info *) (PARAM+0x40)) |
+#define IST_INFO (*(struct ist_info *) (PARAM+0x60)) |
+#define DRIVE_INFO (*(struct drive_info_struct *) (PARAM+0x80)) |
+#define SYS_DESC_TABLE (*(struct sys_desc_table_struct*)(PARAM+0xa0)) |
+#define MOUNT_ROOT_RDONLY (*(unsigned short *) (PARAM+0x1F2)) |
+#define RAMDISK_FLAGS (*(unsigned short *) (PARAM+0x1F8)) |
+#define VIDEO_MODE (*(unsigned short *) (PARAM+0x1FA)) |
+#define ORIG_ROOT_DEV (*(unsigned short *) (PARAM+0x1FC)) |
+#define AUX_DEVICE_INFO (*(unsigned char *) (PARAM+0x1FF)) |
+#define LOADER_TYPE (*(unsigned char *) (PARAM+0x210)) |
+#define KERNEL_START (*(unsigned long *) (PARAM+0x214)) |
+#define INITRD_START (*(unsigned long *) (PARAM+0x218)) |
+#define INITRD_SIZE (*(unsigned long *) (PARAM+0x21c)) |
+#define EDID_INFO (*(struct edid_info *) (PARAM+0x440)) |
+#define EDD_NR (*(unsigned char *) (PARAM+EDDNR)) |
+#define EDD_BUF ((struct edd_info *) (PARAM+EDDBUF)) |
+#define COMMAND_LINE ((char *) (PARAM+2048)) |
+#define COMMAND_LINE_SIZE 256 |
+ |
+#endif /* _i386_SETUP_H */ |
Index: linuxc26/include/asm/ide.h |
=================================================================== |
--- linuxc26/include/asm/ide.h (nonexistent) |
+++ linuxc26/include/asm/ide.h (revision 422) |
@@ -0,0 +1,112 @@ |
+/* |
+ * linux/include/asm-i386/ide.h |
+ * |
+ * Copyright (C) 1994-1996 Linus Torvalds & authors |
+ */ |
+ |
+/* |
+ * This file contains the i386 architecture specific IDE code. |
+ */ |
+ |
+#ifndef __ASMi386_IDE_H |
+#define __ASMi386_IDE_H |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/config.h> |
+ |
+#ifndef MAX_HWIFS |
+# ifdef CONFIG_BLK_DEV_IDEPCI |
+#define MAX_HWIFS 10 |
+# else |
+#define MAX_HWIFS 6 |
+# endif |
+#endif |
+ |
+static __inline__ int ide_default_irq(unsigned long base) |
+{ |
+ switch (base) { |
+#ifdef CONFIG_X86_PC9800 |
+ case 0x640: return 9; |
+#endif |
+ case 0x1f0: return 14; |
+ case 0x170: return 15; |
+ case 0x1e8: return 11; |
+ case 0x168: return 10; |
+ case 0x1e0: return 8; |
+ case 0x160: return 12; |
+ default: |
+ return 0; |
+ } |
+} |
+ |
+static __inline__ unsigned long ide_default_io_base(int index) |
+{ |
+ switch (index) { |
+#ifdef CONFIG_X86_PC9800 |
+ case 0: |
+ case 1: return 0x640; |
+#else |
+ case 0: return 0x1f0; |
+ case 1: return 0x170; |
+ case 2: return 0x1e8; |
+ case 3: return 0x168; |
+ case 4: return 0x1e0; |
+ case 5: return 0x160; |
+#endif |
+ default: |
+ return 0; |
+ } |
+} |
+ |
+static __inline__ void ide_init_hwif_ports(hw_regs_t *hw, unsigned long data_port, |
+ unsigned long ctrl_port, int *irq) |
+{ |
+ unsigned long reg = data_port; |
+ int i; |
+#ifdef CONFIG_X86_PC9800 |
+ unsigned long increment = data_port == 0x640 ? 2 : 1; |
+#endif |
+ |
+ for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) { |
+ hw->io_ports[i] = reg; |
+#ifdef CONFIG_X86_PC9800 |
+ reg += increment; |
+#else |
+ reg += 1; |
+#endif |
+ } |
+ if (ctrl_port) { |
+ hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port; |
+#ifdef CONFIG_X86_PC9800 |
+ } else if (data_port == 0x640) { |
+ hw->io_ports[IDE_CONTROL_OFFSET] = 0x74c; |
+#endif |
+ } else { |
+ hw->io_ports[IDE_CONTROL_OFFSET] = hw->io_ports[IDE_DATA_OFFSET] + 0x206; |
+ } |
+ if (irq != NULL) |
+ *irq = 0; |
+ hw->io_ports[IDE_IRQ_OFFSET] = 0; |
+} |
+ |
+static __inline__ void ide_init_default_hwifs(void) |
+{ |
+#ifndef CONFIG_BLK_DEV_IDEPCI |
+ hw_regs_t hw; |
+ int index; |
+ |
+ for(index = 0; index < MAX_HWIFS; index++) { |
+ memset(&hw, 0, sizeof hw); |
+ ide_init_hwif_ports(&hw, ide_default_io_base(index), 0, NULL); |
+ hw.irq = ide_default_irq(ide_default_io_base(index)); |
+ ide_register_hw(&hw, NULL); |
+ } |
+#endif /* CONFIG_BLK_DEV_IDEPCI */ |
+} |
+ |
+#include <asm-generic/ide_iops.h> |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* __ASMi386_IDE_H */ |
Index: linuxc26/include/asm/rwlock.h |
=================================================================== |
--- linuxc26/include/asm/rwlock.h (nonexistent) |
+++ linuxc26/include/asm/rwlock.h (revision 422) |
@@ -0,0 +1,83 @@ |
+/* include/asm-i386/rwlock.h |
+ * |
+ * Helpers used by both rw spinlocks and rw semaphores. |
+ * |
+ * Based in part on code from semaphore.h and |
+ * spinlock.h Copyright 1996 Linus Torvalds. |
+ * |
+ * Copyright 1999 Red Hat, Inc. |
+ * |
+ * Written by Benjamin LaHaise. |
+ * |
+ * 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 _ASM_I386_RWLOCK_H |
+#define _ASM_I386_RWLOCK_H |
+ |
+#define RW_LOCK_BIAS 0x01000000 |
+#define RW_LOCK_BIAS_STR "0x01000000" |
+ |
+#define __build_read_lock_ptr(rw, helper) \ |
+ asm volatile(LOCK "subl $1,(%0)\n\t" \ |
+ "js 2f\n" \ |
+ "1:\n" \ |
+ LOCK_SECTION_START("") \ |
+ "2:\tcall " helper "\n\t" \ |
+ "jmp 1b\n" \ |
+ LOCK_SECTION_END \ |
+ ::"a" (rw) : "memory") |
+ |
+#define __build_read_lock_const(rw, helper) \ |
+ asm volatile(LOCK "subl $1,%0\n\t" \ |
+ "js 2f\n" \ |
+ "1:\n" \ |
+ LOCK_SECTION_START("") \ |
+ "2:\tpushl %%eax\n\t" \ |
+ "leal %0,%%eax\n\t" \ |
+ "call " helper "\n\t" \ |
+ "popl %%eax\n\t" \ |
+ "jmp 1b\n" \ |
+ LOCK_SECTION_END \ |
+ :"=m" (*(volatile int *)rw) : : "memory") |
+ |
+#define __build_read_lock(rw, helper) do { \ |
+ if (__builtin_constant_p(rw)) \ |
+ __build_read_lock_const(rw, helper); \ |
+ else \ |
+ __build_read_lock_ptr(rw, helper); \ |
+ } while (0) |
+ |
+#define __build_write_lock_ptr(rw, helper) \ |
+ asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \ |
+ "jnz 2f\n" \ |
+ "1:\n" \ |
+ LOCK_SECTION_START("") \ |
+ "2:\tcall " helper "\n\t" \ |
+ "jmp 1b\n" \ |
+ LOCK_SECTION_END \ |
+ ::"a" (rw) : "memory") |
+ |
+#define __build_write_lock_const(rw, helper) \ |
+ asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",%0\n\t" \ |
+ "jnz 2f\n" \ |
+ "1:\n" \ |
+ LOCK_SECTION_START("") \ |
+ "2:\tpushl %%eax\n\t" \ |
+ "leal %0,%%eax\n\t" \ |
+ "call " helper "\n\t" \ |
+ "popl %%eax\n\t" \ |
+ "jmp 1b\n" \ |
+ LOCK_SECTION_END \ |
+ :"=m" (*(volatile int *)rw) : : "memory") |
+ |
+#define __build_write_lock(rw, helper) do { \ |
+ if (__builtin_constant_p(rw)) \ |
+ __build_write_lock_const(rw, helper); \ |
+ else \ |
+ __build_write_lock_ptr(rw, helper); \ |
+ } while (0) |
+ |
+#endif |
Index: linuxc26/include/asm/msr.h |
=================================================================== |
--- linuxc26/include/asm/msr.h (nonexistent) |
+++ linuxc26/include/asm/msr.h (revision 422) |
@@ -0,0 +1,248 @@ |
+#ifndef __ASM_MSR_H |
+#define __ASM_MSR_H |
+ |
+/* |
+ * Access to machine-specific registers (available on 586 and better only) |
+ * Note: the rd* operations modify the parameters directly (without using |
+ * pointer indirection), this allows gcc to optimize better |
+ */ |
+ |
+#define rdmsr(msr,val1,val2) \ |
+ __asm__ __volatile__("rdmsr" \ |
+ : "=a" (val1), "=d" (val2) \ |
+ : "c" (msr)) |
+ |
+#define wrmsr(msr,val1,val2) \ |
+ __asm__ __volatile__("wrmsr" \ |
+ : /* no outputs */ \ |
+ : "c" (msr), "a" (val1), "d" (val2)) |
+ |
+#define rdmsrl(msr,val) do { \ |
+ unsigned long l__,h__; \ |
+ rdmsr (msr, l__, h__); \ |
+ val = l__; \ |
+ val |= ((u64)h__<<32); \ |
+} while(0) |
+ |
+static inline void wrmsrl (unsigned long msr, unsigned long long val) |
+{ |
+ unsigned long lo, hi; |
+ lo = (unsigned long) val; |
+ hi = val >> 32; |
+ wrmsr (msr, lo, hi); |
+} |
+ |
+#define rdtsc(low,high) \ |
+ __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high)) |
+ |
+#define rdtscl(low) \ |
+ __asm__ __volatile__("rdtsc" : "=a" (low) : : "edx") |
+ |
+#define rdtscll(val) \ |
+ __asm__ __volatile__("rdtsc" : "=A" (val)) |
+ |
+#define write_tsc(val1,val2) wrmsr(0x10, val1, val2) |
+ |
+#define rdpmc(counter,low,high) \ |
+ __asm__ __volatile__("rdpmc" \ |
+ : "=a" (low), "=d" (high) \ |
+ : "c" (counter)) |
+ |
+/* symbolic names for some interesting MSRs */ |
+/* Intel defined MSRs. */ |
+#define MSR_IA32_P5_MC_ADDR 0 |
+#define MSR_IA32_P5_MC_TYPE 1 |
+#define MSR_IA32_PLATFORM_ID 0x17 |
+#define MSR_IA32_EBL_CR_POWERON 0x2a |
+ |
+#define MSR_IA32_APICBASE 0x1b |
+#define MSR_IA32_APICBASE_BSP (1<<8) |
+#define MSR_IA32_APICBASE_ENABLE (1<<11) |
+#define MSR_IA32_APICBASE_BASE (0xfffff<<12) |
+ |
+#define MSR_IA32_UCODE_WRITE 0x79 |
+#define MSR_IA32_UCODE_REV 0x8b |
+ |
+#define MSR_P6_PERFCTR0 0xc1 |
+#define MSR_P6_PERFCTR1 0xc2 |
+ |
+#define MSR_IA32_BBL_CR_CTL 0x119 |
+ |
+#define MSR_IA32_SYSENTER_CS 0x174 |
+#define MSR_IA32_SYSENTER_ESP 0x175 |
+#define MSR_IA32_SYSENTER_EIP 0x176 |
+ |
+#define MSR_IA32_MCG_CAP 0x179 |
+#define MSR_IA32_MCG_STATUS 0x17a |
+#define MSR_IA32_MCG_CTL 0x17b |
+ |
+/* P4/Xeon+ specific */ |
+#define MSR_IA32_MCG_EAX 0x180 |
+#define MSR_IA32_MCG_EBX 0x181 |
+#define MSR_IA32_MCG_ECX 0x182 |
+#define MSR_IA32_MCG_EDX 0x183 |
+#define MSR_IA32_MCG_ESI 0x184 |
+#define MSR_IA32_MCG_EDI 0x185 |
+#define MSR_IA32_MCG_EBP 0x186 |
+#define MSR_IA32_MCG_ESP 0x187 |
+#define MSR_IA32_MCG_EFLAGS 0x188 |
+#define MSR_IA32_MCG_EIP 0x189 |
+#define MSR_IA32_MCG_RESERVED 0x18A |
+ |
+#define MSR_P6_EVNTSEL0 0x186 |
+#define MSR_P6_EVNTSEL1 0x187 |
+ |
+#define MSR_IA32_PERF_STATUS 0x198 |
+#define MSR_IA32_PERF_CTL 0x199 |
+ |
+#define MSR_IA32_THERM_CONTROL 0x19a |
+#define MSR_IA32_THERM_INTERRUPT 0x19b |
+#define MSR_IA32_THERM_STATUS 0x19c |
+#define MSR_IA32_MISC_ENABLE 0x1a0 |
+ |
+#define MSR_IA32_DEBUGCTLMSR 0x1d9 |
+#define MSR_IA32_LASTBRANCHFROMIP 0x1db |
+#define MSR_IA32_LASTBRANCHTOIP 0x1dc |
+#define MSR_IA32_LASTINTFROMIP 0x1dd |
+#define MSR_IA32_LASTINTTOIP 0x1de |
+ |
+#define MSR_IA32_MC0_CTL 0x400 |
+#define MSR_IA32_MC0_STATUS 0x401 |
+#define MSR_IA32_MC0_ADDR 0x402 |
+#define MSR_IA32_MC0_MISC 0x403 |
+ |
+/* Pentium IV performance counter MSRs */ |
+#define MSR_P4_BPU_PERFCTR0 0x300 |
+#define MSR_P4_BPU_PERFCTR1 0x301 |
+#define MSR_P4_BPU_PERFCTR2 0x302 |
+#define MSR_P4_BPU_PERFCTR3 0x303 |
+#define MSR_P4_MS_PERFCTR0 0x304 |
+#define MSR_P4_MS_PERFCTR1 0x305 |
+#define MSR_P4_MS_PERFCTR2 0x306 |
+#define MSR_P4_MS_PERFCTR3 0x307 |
+#define MSR_P4_FLAME_PERFCTR0 0x308 |
+#define MSR_P4_FLAME_PERFCTR1 0x309 |
+#define MSR_P4_FLAME_PERFCTR2 0x30a |
+#define MSR_P4_FLAME_PERFCTR3 0x30b |
+#define MSR_P4_IQ_PERFCTR0 0x30c |
+#define MSR_P4_IQ_PERFCTR1 0x30d |
+#define MSR_P4_IQ_PERFCTR2 0x30e |
+#define MSR_P4_IQ_PERFCTR3 0x30f |
+#define MSR_P4_IQ_PERFCTR4 0x310 |
+#define MSR_P4_IQ_PERFCTR5 0x311 |
+#define MSR_P4_BPU_CCCR0 0x360 |
+#define MSR_P4_BPU_CCCR1 0x361 |
+#define MSR_P4_BPU_CCCR2 0x362 |
+#define MSR_P4_BPU_CCCR3 0x363 |
+#define MSR_P4_MS_CCCR0 0x364 |
+#define MSR_P4_MS_CCCR1 0x365 |
+#define MSR_P4_MS_CCCR2 0x366 |
+#define MSR_P4_MS_CCCR3 0x367 |
+#define MSR_P4_FLAME_CCCR0 0x368 |
+#define MSR_P4_FLAME_CCCR1 0x369 |
+#define MSR_P4_FLAME_CCCR2 0x36a |
+#define MSR_P4_FLAME_CCCR3 0x36b |
+#define MSR_P4_IQ_CCCR0 0x36c |
+#define MSR_P4_IQ_CCCR1 0x36d |
+#define MSR_P4_IQ_CCCR2 0x36e |
+#define MSR_P4_IQ_CCCR3 0x36f |
+#define MSR_P4_IQ_CCCR4 0x370 |
+#define MSR_P4_IQ_CCCR5 0x371 |
+#define MSR_P4_ALF_ESCR0 0x3ca |
+#define MSR_P4_ALF_ESCR1 0x3cb |
+#define MSR_P4_BPU_ESCR0 0x3b2 |
+#define MSR_P4_BPU_ESCR1 0x3b3 |
+#define MSR_P4_BSU_ESCR0 0x3a0 |
+#define MSR_P4_BSU_ESCR1 0x3a1 |
+#define MSR_P4_CRU_ESCR0 0x3b8 |
+#define MSR_P4_CRU_ESCR1 0x3b9 |
+#define MSR_P4_CRU_ESCR2 0x3cc |
+#define MSR_P4_CRU_ESCR3 0x3cd |
+#define MSR_P4_CRU_ESCR4 0x3e0 |
+#define MSR_P4_CRU_ESCR5 0x3e1 |
+#define MSR_P4_DAC_ESCR0 0x3a8 |
+#define MSR_P4_DAC_ESCR1 0x3a9 |
+#define MSR_P4_FIRM_ESCR0 0x3a4 |
+#define MSR_P4_FIRM_ESCR1 0x3a5 |
+#define MSR_P4_FLAME_ESCR0 0x3a6 |
+#define MSR_P4_FLAME_ESCR1 0x3a7 |
+#define MSR_P4_FSB_ESCR0 0x3a2 |
+#define MSR_P4_FSB_ESCR1 0x3a3 |
+#define MSR_P4_IQ_ESCR0 0x3ba |
+#define MSR_P4_IQ_ESCR1 0x3bb |
+#define MSR_P4_IS_ESCR0 0x3b4 |
+#define MSR_P4_IS_ESCR1 0x3b5 |
+#define MSR_P4_ITLB_ESCR0 0x3b6 |
+#define MSR_P4_ITLB_ESCR1 0x3b7 |
+#define MSR_P4_IX_ESCR0 0x3c8 |
+#define MSR_P4_IX_ESCR1 0x3c9 |
+#define MSR_P4_MOB_ESCR0 0x3aa |
+#define MSR_P4_MOB_ESCR1 0x3ab |
+#define MSR_P4_MS_ESCR0 0x3c0 |
+#define MSR_P4_MS_ESCR1 0x3c1 |
+#define MSR_P4_PMH_ESCR0 0x3ac |
+#define MSR_P4_PMH_ESCR1 0x3ad |
+#define MSR_P4_RAT_ESCR0 0x3bc |
+#define MSR_P4_RAT_ESCR1 0x3bd |
+#define MSR_P4_SAAT_ESCR0 0x3ae |
+#define MSR_P4_SAAT_ESCR1 0x3af |
+#define MSR_P4_SSU_ESCR0 0x3be |
+#define MSR_P4_SSU_ESCR1 0x3bf /* guess: not defined in manual */ |
+#define MSR_P4_TBPU_ESCR0 0x3c2 |
+#define MSR_P4_TBPU_ESCR1 0x3c3 |
+#define MSR_P4_TC_ESCR0 0x3c4 |
+#define MSR_P4_TC_ESCR1 0x3c5 |
+#define MSR_P4_U2L_ESCR0 0x3b0 |
+#define MSR_P4_U2L_ESCR1 0x3b1 |
+ |
+/* AMD Defined MSRs */ |
+#define MSR_K6_EFER 0xC0000080 |
+#define MSR_K6_STAR 0xC0000081 |
+#define MSR_K6_WHCR 0xC0000082 |
+#define MSR_K6_UWCCR 0xC0000085 |
+#define MSR_K6_EPMR 0xC0000086 |
+#define MSR_K6_PSOR 0xC0000087 |
+#define MSR_K6_PFIR 0xC0000088 |
+ |
+#define MSR_K7_EVNTSEL0 0xC0010000 |
+#define MSR_K7_EVNTSEL1 0xC0010001 |
+#define MSR_K7_EVNTSEL2 0xC0010002 |
+#define MSR_K7_EVNTSEL3 0xC0010003 |
+#define MSR_K7_PERFCTR0 0xC0010004 |
+#define MSR_K7_PERFCTR1 0xC0010005 |
+#define MSR_K7_PERFCTR2 0xC0010006 |
+#define MSR_K7_PERFCTR3 0xC0010007 |
+#define MSR_K7_HWCR 0xC0010015 |
+#define MSR_K7_CLK_CTL 0xC001001b |
+#define MSR_K7_FID_VID_CTL 0xC0010041 |
+#define MSR_K7_FID_VID_STATUS 0xC0010042 |
+ |
+/* Centaur-Hauls/IDT defined MSRs. */ |
+#define MSR_IDT_FCR1 0x107 |
+#define MSR_IDT_FCR2 0x108 |
+#define MSR_IDT_FCR3 0x109 |
+#define MSR_IDT_FCR4 0x10a |
+ |
+#define MSR_IDT_MCR0 0x110 |
+#define MSR_IDT_MCR1 0x111 |
+#define MSR_IDT_MCR2 0x112 |
+#define MSR_IDT_MCR3 0x113 |
+#define MSR_IDT_MCR4 0x114 |
+#define MSR_IDT_MCR5 0x115 |
+#define MSR_IDT_MCR6 0x116 |
+#define MSR_IDT_MCR7 0x117 |
+#define MSR_IDT_MCR_CTRL 0x120 |
+ |
+/* VIA Cyrix defined MSRs*/ |
+#define MSR_VIA_FCR 0x1107 |
+#define MSR_VIA_LONGHAUL 0x110a |
+#define MSR_VIA_RNG 0x110b |
+#define MSR_VIA_BCR2 0x1147 |
+ |
+/* Transmeta defined MSRs */ |
+#define MSR_TMTA_LONGRUN_CTRL 0x80868010 |
+#define MSR_TMTA_LONGRUN_FLAGS 0x80868011 |
+#define MSR_TMTA_LRTI_READOUT 0x80868018 |
+#define MSR_TMTA_LRTI_VOLT_MHZ 0x8086801a |
+ |
+#endif /* __ASM_MSR_H */ |
Index: linuxc26/include/asm/segment.h |
=================================================================== |
--- linuxc26/include/asm/segment.h (nonexistent) |
+++ linuxc26/include/asm/segment.h (revision 422) |
@@ -0,0 +1,98 @@ |
+#ifndef _ASM_SEGMENT_H |
+#define _ASM_SEGMENT_H |
+ |
+/* |
+ * The layout of the per-CPU GDT under Linux: |
+ * |
+ * 0 - null |
+ * 1 - reserved |
+ * 2 - reserved |
+ * 3 - reserved |
+ * |
+ * 4 - unused <==== new cacheline |
+ * 5 - unused |
+ * |
+ * ------- start of TLS (Thread-Local Storage) segments: |
+ * |
+ * 6 - TLS segment #1 [ glibc's TLS segment ] |
+ * 7 - TLS segment #2 [ Wine's %fs Win32 segment ] |
+ * 8 - TLS segment #3 |
+ * 9 - reserved |
+ * 10 - reserved |
+ * 11 - reserved |
+ * |
+ * ------- start of kernel segments: |
+ * |
+ * 12 - kernel code segment <==== new cacheline |
+ * 13 - kernel data segment |
+ * 14 - default user CS |
+ * 15 - default user DS |
+ * 16 - TSS |
+ * 17 - LDT |
+ * 18 - PNPBIOS support (16->32 gate) |
+ * 19 - PNPBIOS support |
+ * 20 - PNPBIOS support |
+ * 21 - PNPBIOS support |
+ * 22 - PNPBIOS support |
+ * 23 - APM BIOS support |
+ * 24 - APM BIOS support |
+ * 25 - APM BIOS support |
+ * |
+ * 26 - unused |
+ * 27 - unused |
+ * 28 - unused |
+ * 29 - unused |
+ * 30 - unused |
+ * 31 - TSS for double fault handler |
+ */ |
+#define GDT_ENTRY_TLS_ENTRIES 3 |
+#define GDT_ENTRY_TLS_MIN 6 |
+#define GDT_ENTRY_TLS_MAX (GDT_ENTRY_TLS_MIN + GDT_ENTRY_TLS_ENTRIES - 1) |
+ |
+#define TLS_SIZE (GDT_ENTRY_TLS_ENTRIES * 8) |
+ |
+#define GDT_ENTRY_DEFAULT_USER_CS 14 |
+#define __USER_CS (GDT_ENTRY_DEFAULT_USER_CS * 8 + 3) |
+ |
+#define GDT_ENTRY_DEFAULT_USER_DS 15 |
+#define __USER_DS (GDT_ENTRY_DEFAULT_USER_DS * 8 + 3) |
+ |
+#define GDT_ENTRY_KERNEL_BASE 12 |
+ |
+#define GDT_ENTRY_KERNEL_CS (GDT_ENTRY_KERNEL_BASE + 0) |
+#define __KERNEL_CS (GDT_ENTRY_KERNEL_CS * 8) |
+ |
+#define GDT_ENTRY_KERNEL_DS (GDT_ENTRY_KERNEL_BASE + 1) |
+#define __KERNEL_DS (GDT_ENTRY_KERNEL_DS * 8) |
+ |
+#define GDT_ENTRY_TSS (GDT_ENTRY_KERNEL_BASE + 4) |
+#define GDT_ENTRY_LDT (GDT_ENTRY_KERNEL_BASE + 5) |
+ |
+#define GDT_ENTRY_PNPBIOS_BASE (GDT_ENTRY_KERNEL_BASE + 6) |
+#define GDT_ENTRY_APMBIOS_BASE (GDT_ENTRY_KERNEL_BASE + 11) |
+ |
+#define GDT_ENTRY_DOUBLEFAULT_TSS 31 |
+ |
+/* |
+ * The GDT has 32 entries |
+ */ |
+#define GDT_ENTRIES 32 |
+ |
+#define GDT_SIZE (GDT_ENTRIES * 8) |
+ |
+/* Simple and small GDT entries for booting only */ |
+ |
+#define GDT_ENTRY_BOOT_CS 2 |
+#define __BOOT_CS (GDT_ENTRY_BOOT_CS * 8) |
+ |
+#define GDT_ENTRY_BOOT_DS (GDT_ENTRY_BOOT_CS + 1) |
+#define __BOOT_DS (GDT_ENTRY_BOOT_DS * 8) |
+ |
+/* |
+ * The interrupt descriptor table has room for 256 idt's, |
+ * the global descriptor table is dependent on the number |
+ * of tasks we can have.. |
+ */ |
+#define IDT_ENTRIES 256 |
+ |
+#endif |
Index: linuxc26/include/asm/types.h |
=================================================================== |
--- linuxc26/include/asm/types.h (nonexistent) |
+++ linuxc26/include/asm/types.h (revision 422) |
@@ -0,0 +1,70 @@ |
+#ifndef _I386_TYPES_H |
+#define _I386_TYPES_H |
+ |
+#ifndef __ASSEMBLY__ |
+ |
+typedef unsigned short umode_t; |
+ |
+/* |
+ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the |
+ * header files exported to user space |
+ */ |
+ |
+typedef __signed__ char __s8; |
+typedef unsigned char __u8; |
+ |
+typedef __signed__ short __s16; |
+typedef unsigned short __u16; |
+ |
+typedef __signed__ int __s32; |
+typedef unsigned int __u32; |
+ |
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__) |
+typedef __signed__ long long __s64; |
+typedef unsigned long long __u64; |
+#endif |
+ |
+#endif /* __ASSEMBLY__ */ |
+ |
+/* |
+ * These aren't exported outside the kernel to avoid name space clashes |
+ */ |
+#ifdef __KERNEL__ |
+ |
+#define BITS_PER_LONG 32 |
+ |
+#ifndef __ASSEMBLY__ |
+ |
+#include <linux/config.h> |
+ |
+typedef signed char s8; |
+typedef unsigned char u8; |
+ |
+typedef signed short s16; |
+typedef unsigned short u16; |
+ |
+typedef signed int s32; |
+typedef unsigned int u32; |
+ |
+typedef signed long long s64; |
+typedef unsigned long long u64; |
+ |
+/* DMA addresses come in generic and 64-bit flavours. */ |
+ |
+#ifdef CONFIG_HIGHMEM64G |
+typedef u64 dma_addr_t; |
+#else |
+typedef u32 dma_addr_t; |
+#endif |
+typedef u64 dma64_addr_t; |
+ |
+#ifdef CONFIG_LBD |
+typedef u64 sector_t; |
+#define HAVE_SECTOR_T |
+#endif |
+ |
+#endif /* __ASSEMBLY__ */ |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif |
Index: linuxc26/include/asm/genapic.h |
=================================================================== |
--- linuxc26/include/asm/genapic.h (nonexistent) |
+++ linuxc26/include/asm/genapic.h (revision 422) |
@@ -0,0 +1,112 @@ |
+#ifndef _ASM_GENAPIC_H |
+#define _ASM_GENAPIC_H 1 |
+ |
+/* |
+ * Generic APIC driver interface. |
+ * |
+ * An straight forward mapping of the APIC related parts of the |
+ * x86 subarchitecture interface to a dynamic object. |
+ * |
+ * This is used by the "generic" x86 subarchitecture. |
+ * |
+ * Copyright 2003 Andi Kleen, SuSE Labs. |
+ */ |
+ |
+struct mpc_config_translation; |
+struct mpc_config_bus; |
+struct mp_config_table; |
+struct mpc_config_processor; |
+ |
+struct genapic { |
+ char *name; |
+ int (*probe)(void); |
+ |
+ int (*apic_id_registered)(void); |
+ cpumask_t (*target_cpus)(void); |
+ int int_delivery_mode; |
+ int int_dest_mode; |
+ int apic_broadcast_id; |
+ int esr_disable; |
+ unsigned long (*check_apicid_used)(physid_mask_t bitmap, int apicid); |
+ unsigned long (*check_apicid_present)(int apicid); |
+ int no_balance_irq; |
+ int no_ioapic_check; |
+ void (*init_apic_ldr)(void); |
+ physid_mask_t (*ioapic_phys_id_map)(physid_mask_t map); |
+ |
+ void (*clustered_apic_check)(void); |
+ int (*multi_timer_check)(int apic, int irq); |
+ int (*apicid_to_node)(int logical_apicid); |
+ int (*cpu_to_logical_apicid)(int cpu); |
+ int (*cpu_present_to_apicid)(int mps_cpu); |
+ physid_mask_t (*apicid_to_cpu_present)(int phys_apicid); |
+ int (*mpc_apic_id)(struct mpc_config_processor *m, |
+ struct mpc_config_translation *t); |
+ void (*setup_portio_remap)(void); |
+ int (*check_phys_apicid_present)(int boot_cpu_physical_apicid); |
+ void (*enable_apic_mode)(void); |
+ |
+ /* mpparse */ |
+ void (*mpc_oem_bus_info)(struct mpc_config_bus *, char *, |
+ struct mpc_config_translation *); |
+ void (*mpc_oem_pci_bus)(struct mpc_config_bus *, |
+ struct mpc_config_translation *); |
+ |
+ /* When one of the next two hooks returns 1 the genapic |
+ is switched to this. Essentially they are additional probe |
+ functions. */ |
+ int (*mps_oem_check)(struct mp_config_table *mpc, char *oem, |
+ char *productid); |
+ int (*acpi_madt_oem_check)(char *oem_id, char *oem_table_id); |
+ |
+ unsigned (*get_apic_id)(unsigned long x); |
+ unsigned long apic_id_mask; |
+ unsigned int (*cpu_mask_to_apicid)(cpumask_const_t cpumask); |
+ |
+ /* ipi */ |
+ void (*send_IPI_mask)(cpumask_t mask, int vector); |
+ void (*send_IPI_allbutself)(int vector); |
+ void (*send_IPI_all)(int vector); |
+}; |
+ |
+#define APICFUNC(x) .x = x |
+ |
+#define APIC_INIT(aname, aprobe) { \ |
+ .name = aname, \ |
+ .probe = aprobe, \ |
+ .int_delivery_mode = INT_DELIVERY_MODE, \ |
+ .int_dest_mode = INT_DEST_MODE, \ |
+ .apic_broadcast_id = APIC_BROADCAST_ID, \ |
+ .no_balance_irq = NO_BALANCE_IRQ, \ |
+ .no_ioapic_check = NO_IOAPIC_CHECK, \ |
+ APICFUNC(apic_id_registered), \ |
+ APICFUNC(target_cpus), \ |
+ APICFUNC(check_apicid_used), \ |
+ APICFUNC(check_apicid_present), \ |
+ APICFUNC(init_apic_ldr), \ |
+ APICFUNC(ioapic_phys_id_map), \ |
+ APICFUNC(clustered_apic_check), \ |
+ APICFUNC(multi_timer_check), \ |
+ APICFUNC(apicid_to_node), \ |
+ APICFUNC(cpu_to_logical_apicid), \ |
+ APICFUNC(cpu_present_to_apicid), \ |
+ APICFUNC(apicid_to_cpu_present), \ |
+ APICFUNC(mpc_apic_id), \ |
+ APICFUNC(setup_portio_remap), \ |
+ APICFUNC(check_phys_apicid_present), \ |
+ APICFUNC(mpc_oem_bus_info), \ |
+ APICFUNC(mpc_oem_pci_bus), \ |
+ APICFUNC(mps_oem_check), \ |
+ APICFUNC(get_apic_id), \ |
+ .apic_id_mask = APIC_ID_MASK, \ |
+ APICFUNC(cpu_mask_to_apicid), \ |
+ APICFUNC(acpi_madt_oem_check), \ |
+ APICFUNC(send_IPI_mask), \ |
+ APICFUNC(send_IPI_allbutself), \ |
+ APICFUNC(send_IPI_all), \ |
+ APICFUNC(enable_apic_mode), \ |
+ } |
+ |
+extern struct genapic *genapic; |
+ |
+#endif |
Index: linuxc26/include/asm/xor.h |
=================================================================== |
--- linuxc26/include/asm/xor.h (nonexistent) |
+++ linuxc26/include/asm/xor.h (revision 422) |
@@ -0,0 +1,860 @@ |
+/* |
+ * include/asm-i386/xor.h |
+ * |
+ * Optimized RAID-5 checksumming functions for MMX and SSE. |
+ * |
+ * 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. |
+ * |
+ * You should have received a copy of the GNU General Public License |
+ * (for example /usr/src/linux/COPYING); if not, write to the Free |
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
+ */ |
+ |
+/* |
+ * High-speed RAID5 checksumming functions utilizing MMX instructions. |
+ * Copyright (C) 1998 Ingo Molnar. |
+ */ |
+ |
+#define LD(x,y) " movq 8*("#x")(%1), %%mm"#y" ;\n" |
+#define ST(x,y) " movq %%mm"#y", 8*("#x")(%1) ;\n" |
+#define XO1(x,y) " pxor 8*("#x")(%2), %%mm"#y" ;\n" |
+#define XO2(x,y) " pxor 8*("#x")(%3), %%mm"#y" ;\n" |
+#define XO3(x,y) " pxor 8*("#x")(%4), %%mm"#y" ;\n" |
+#define XO4(x,y) " pxor 8*("#x")(%5), %%mm"#y" ;\n" |
+ |
+#include <asm/i387.h> |
+ |
+static void |
+xor_pII_mmx_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) |
+{ |
+ unsigned long lines = bytes >> 7; |
+ |
+ kernel_fpu_begin(); |
+ |
+ __asm__ __volatile__ ( |
+#undef BLOCK |
+#define BLOCK(i) \ |
+ LD(i,0) \ |
+ LD(i+1,1) \ |
+ LD(i+2,2) \ |
+ LD(i+3,3) \ |
+ XO1(i,0) \ |
+ ST(i,0) \ |
+ XO1(i+1,1) \ |
+ ST(i+1,1) \ |
+ XO1(i+2,2) \ |
+ ST(i+2,2) \ |
+ XO1(i+3,3) \ |
+ ST(i+3,3) |
+ |
+ " .align 32 ;\n" |
+ " 1: ;\n" |
+ |
+ BLOCK(0) |
+ BLOCK(4) |
+ BLOCK(8) |
+ BLOCK(12) |
+ |
+ " addl $128, %1 ;\n" |
+ " addl $128, %2 ;\n" |
+ " decl %0 ;\n" |
+ " jnz 1b ;\n" |
+ : "+r" (lines), |
+ "+r" (p1), "+r" (p2) |
+ : |
+ : "memory"); |
+ |
+ kernel_fpu_end(); |
+} |
+ |
+static void |
+xor_pII_mmx_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3) |
+{ |
+ unsigned long lines = bytes >> 7; |
+ |
+ kernel_fpu_begin(); |
+ |
+ __asm__ __volatile__ ( |
+#undef BLOCK |
+#define BLOCK(i) \ |
+ LD(i,0) \ |
+ LD(i+1,1) \ |
+ LD(i+2,2) \ |
+ LD(i+3,3) \ |
+ XO1(i,0) \ |
+ XO1(i+1,1) \ |
+ XO1(i+2,2) \ |
+ XO1(i+3,3) \ |
+ XO2(i,0) \ |
+ ST(i,0) \ |
+ XO2(i+1,1) \ |
+ ST(i+1,1) \ |
+ XO2(i+2,2) \ |
+ ST(i+2,2) \ |
+ XO2(i+3,3) \ |
+ ST(i+3,3) |
+ |
+ " .align 32 ;\n" |
+ " 1: ;\n" |
+ |
+ BLOCK(0) |
+ BLOCK(4) |
+ BLOCK(8) |
+ BLOCK(12) |
+ |
+ " addl $128, %1 ;\n" |
+ " addl $128, %2 ;\n" |
+ " addl $128, %3 ;\n" |
+ " decl %0 ;\n" |
+ " jnz 1b ;\n" |
+ : "+r" (lines), |
+ "+r" (p1), "+r" (p2), "+r" (p3) |
+ : |
+ : "memory"); |
+ |
+ kernel_fpu_end(); |
+} |
+ |
+static void |
+xor_pII_mmx_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3, unsigned long *p4) |
+{ |
+ unsigned long lines = bytes >> 7; |
+ |
+ kernel_fpu_begin(); |
+ |
+ __asm__ __volatile__ ( |
+#undef BLOCK |
+#define BLOCK(i) \ |
+ LD(i,0) \ |
+ LD(i+1,1) \ |
+ LD(i+2,2) \ |
+ LD(i+3,3) \ |
+ XO1(i,0) \ |
+ XO1(i+1,1) \ |
+ XO1(i+2,2) \ |
+ XO1(i+3,3) \ |
+ XO2(i,0) \ |
+ XO2(i+1,1) \ |
+ XO2(i+2,2) \ |
+ XO2(i+3,3) \ |
+ XO3(i,0) \ |
+ ST(i,0) \ |
+ XO3(i+1,1) \ |
+ ST(i+1,1) \ |
+ XO3(i+2,2) \ |
+ ST(i+2,2) \ |
+ XO3(i+3,3) \ |
+ ST(i+3,3) |
+ |
+ " .align 32 ;\n" |
+ " 1: ;\n" |
+ |
+ BLOCK(0) |
+ BLOCK(4) |
+ BLOCK(8) |
+ BLOCK(12) |
+ |
+ " addl $128, %1 ;\n" |
+ " addl $128, %2 ;\n" |
+ " addl $128, %3 ;\n" |
+ " addl $128, %4 ;\n" |
+ " decl %0 ;\n" |
+ " jnz 1b ;\n" |
+ : "+r" (lines), |
+ "+r" (p1), "+r" (p2), "+r" (p3), "+r" (p4) |
+ : |
+ : "memory"); |
+ |
+ kernel_fpu_end(); |
+} |
+ |
+ |
+static void |
+xor_pII_mmx_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3, unsigned long *p4, unsigned long *p5) |
+{ |
+ unsigned long lines = bytes >> 7; |
+ |
+ kernel_fpu_begin(); |
+ |
+ /* need to save/restore p4/p5 manually otherwise gcc's 10 argument |
+ limit gets exceeded (+ counts as two arguments) */ |
+ __asm__ __volatile__ ( |
+ " pushl %4\n" |
+ " pushl %5\n" |
+#undef BLOCK |
+#define BLOCK(i) \ |
+ LD(i,0) \ |
+ LD(i+1,1) \ |
+ LD(i+2,2) \ |
+ LD(i+3,3) \ |
+ XO1(i,0) \ |
+ XO1(i+1,1) \ |
+ XO1(i+2,2) \ |
+ XO1(i+3,3) \ |
+ XO2(i,0) \ |
+ XO2(i+1,1) \ |
+ XO2(i+2,2) \ |
+ XO2(i+3,3) \ |
+ XO3(i,0) \ |
+ XO3(i+1,1) \ |
+ XO3(i+2,2) \ |
+ XO3(i+3,3) \ |
+ XO4(i,0) \ |
+ ST(i,0) \ |
+ XO4(i+1,1) \ |
+ ST(i+1,1) \ |
+ XO4(i+2,2) \ |
+ ST(i+2,2) \ |
+ XO4(i+3,3) \ |
+ ST(i+3,3) |
+ |
+ " .align 32 ;\n" |
+ " 1: ;\n" |
+ |
+ BLOCK(0) |
+ BLOCK(4) |
+ BLOCK(8) |
+ BLOCK(12) |
+ |
+ " addl $128, %1 ;\n" |
+ " addl $128, %2 ;\n" |
+ " addl $128, %3 ;\n" |
+ " addl $128, %4 ;\n" |
+ " addl $128, %5 ;\n" |
+ " decl %0 ;\n" |
+ " jnz 1b ;\n" |
+ " popl %5\n" |
+ " popl %4\n" |
+ : "+r" (lines), |
+ "+r" (p1), "+r" (p2), "+r" (p3) |
+ : "r" (p4), "r" (p5) |
+ : "memory"); |
+ |
+ kernel_fpu_end(); |
+} |
+ |
+#undef LD |
+#undef XO1 |
+#undef XO2 |
+#undef XO3 |
+#undef XO4 |
+#undef ST |
+#undef BLOCK |
+ |
+static void |
+xor_p5_mmx_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) |
+{ |
+ unsigned long lines = bytes >> 6; |
+ |
+ kernel_fpu_begin(); |
+ |
+ __asm__ __volatile__ ( |
+ " .align 32 ;\n" |
+ " 1: ;\n" |
+ " movq (%1), %%mm0 ;\n" |
+ " movq 8(%1), %%mm1 ;\n" |
+ " pxor (%2), %%mm0 ;\n" |
+ " movq 16(%1), %%mm2 ;\n" |
+ " movq %%mm0, (%1) ;\n" |
+ " pxor 8(%2), %%mm1 ;\n" |
+ " movq 24(%1), %%mm3 ;\n" |
+ " movq %%mm1, 8(%1) ;\n" |
+ " pxor 16(%2), %%mm2 ;\n" |
+ " movq 32(%1), %%mm4 ;\n" |
+ " movq %%mm2, 16(%1) ;\n" |
+ " pxor 24(%2), %%mm3 ;\n" |
+ " movq 40(%1), %%mm5 ;\n" |
+ " movq %%mm3, 24(%1) ;\n" |
+ " pxor 32(%2), %%mm4 ;\n" |
+ " movq 48(%1), %%mm6 ;\n" |
+ " movq %%mm4, 32(%1) ;\n" |
+ " pxor 40(%2), %%mm5 ;\n" |
+ " movq 56(%1), %%mm7 ;\n" |
+ " movq %%mm5, 40(%1) ;\n" |
+ " pxor 48(%2), %%mm6 ;\n" |
+ " pxor 56(%2), %%mm7 ;\n" |
+ " movq %%mm6, 48(%1) ;\n" |
+ " movq %%mm7, 56(%1) ;\n" |
+ |
+ " addl $64, %1 ;\n" |
+ " addl $64, %2 ;\n" |
+ " decl %0 ;\n" |
+ " jnz 1b ;\n" |
+ : "+r" (lines), |
+ "+r" (p1), "+r" (p2) |
+ : |
+ : "memory"); |
+ |
+ kernel_fpu_end(); |
+} |
+ |
+static void |
+xor_p5_mmx_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3) |
+{ |
+ unsigned long lines = bytes >> 6; |
+ |
+ kernel_fpu_begin(); |
+ |
+ __asm__ __volatile__ ( |
+ " .align 32,0x90 ;\n" |
+ " 1: ;\n" |
+ " movq (%1), %%mm0 ;\n" |
+ " movq 8(%1), %%mm1 ;\n" |
+ " pxor (%2), %%mm0 ;\n" |
+ " movq 16(%1), %%mm2 ;\n" |
+ " pxor 8(%2), %%mm1 ;\n" |
+ " pxor (%3), %%mm0 ;\n" |
+ " pxor 16(%2), %%mm2 ;\n" |
+ " movq %%mm0, (%1) ;\n" |
+ " pxor 8(%3), %%mm1 ;\n" |
+ " pxor 16(%3), %%mm2 ;\n" |
+ " movq 24(%1), %%mm3 ;\n" |
+ " movq %%mm1, 8(%1) ;\n" |
+ " movq 32(%1), %%mm4 ;\n" |
+ " movq 40(%1), %%mm5 ;\n" |
+ " pxor 24(%2), %%mm3 ;\n" |
+ " movq %%mm2, 16(%1) ;\n" |
+ " pxor 32(%2), %%mm4 ;\n" |
+ " pxor 24(%3), %%mm3 ;\n" |
+ " pxor 40(%2), %%mm5 ;\n" |
+ " movq %%mm3, 24(%1) ;\n" |
+ " pxor 32(%3), %%mm4 ;\n" |
+ " pxor 40(%3), %%mm5 ;\n" |
+ " movq 48(%1), %%mm6 ;\n" |
+ " movq %%mm4, 32(%1) ;\n" |
+ " movq 56(%1), %%mm7 ;\n" |
+ " pxor 48(%2), %%mm6 ;\n" |
+ " movq %%mm5, 40(%1) ;\n" |
+ " pxor 56(%2), %%mm7 ;\n" |
+ " pxor 48(%3), %%mm6 ;\n" |
+ " pxor 56(%3), %%mm7 ;\n" |
+ " movq %%mm6, 48(%1) ;\n" |
+ " movq %%mm7, 56(%1) ;\n" |
+ |
+ " addl $64, %1 ;\n" |
+ " addl $64, %2 ;\n" |
+ " addl $64, %3 ;\n" |
+ " decl %0 ;\n" |
+ " jnz 1b ;\n" |
+ : "+r" (lines), |
+ "+r" (p1), "+r" (p2), "+r" (p3) |
+ : |
+ : "memory" ); |
+ |
+ kernel_fpu_end(); |
+} |
+ |
+static void |
+xor_p5_mmx_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3, unsigned long *p4) |
+{ |
+ unsigned long lines = bytes >> 6; |
+ |
+ kernel_fpu_begin(); |
+ |
+ __asm__ __volatile__ ( |
+ " .align 32,0x90 ;\n" |
+ " 1: ;\n" |
+ " movq (%1), %%mm0 ;\n" |
+ " movq 8(%1), %%mm1 ;\n" |
+ " pxor (%2), %%mm0 ;\n" |
+ " movq 16(%1), %%mm2 ;\n" |
+ " pxor 8(%2), %%mm1 ;\n" |
+ " pxor (%3), %%mm0 ;\n" |
+ " pxor 16(%2), %%mm2 ;\n" |
+ " pxor 8(%3), %%mm1 ;\n" |
+ " pxor (%4), %%mm0 ;\n" |
+ " movq 24(%1), %%mm3 ;\n" |
+ " pxor 16(%3), %%mm2 ;\n" |
+ " pxor 8(%4), %%mm1 ;\n" |
+ " movq %%mm0, (%1) ;\n" |
+ " movq 32(%1), %%mm4 ;\n" |
+ " pxor 24(%2), %%mm3 ;\n" |
+ " pxor 16(%4), %%mm2 ;\n" |
+ " movq %%mm1, 8(%1) ;\n" |
+ " movq 40(%1), %%mm5 ;\n" |
+ " pxor 32(%2), %%mm4 ;\n" |
+ " pxor 24(%3), %%mm3 ;\n" |
+ " movq %%mm2, 16(%1) ;\n" |
+ " pxor 40(%2), %%mm5 ;\n" |
+ " pxor 32(%3), %%mm4 ;\n" |
+ " pxor 24(%4), %%mm3 ;\n" |
+ " movq %%mm3, 24(%1) ;\n" |
+ " movq 56(%1), %%mm7 ;\n" |
+ " movq 48(%1), %%mm6 ;\n" |
+ " pxor 40(%3), %%mm5 ;\n" |
+ " pxor 32(%4), %%mm4 ;\n" |
+ " pxor 48(%2), %%mm6 ;\n" |
+ " movq %%mm4, 32(%1) ;\n" |
+ " pxor 56(%2), %%mm7 ;\n" |
+ " pxor 40(%4), %%mm5 ;\n" |
+ " pxor 48(%3), %%mm6 ;\n" |
+ " pxor 56(%3), %%mm7 ;\n" |
+ " movq %%mm5, 40(%1) ;\n" |
+ " pxor 48(%4), %%mm6 ;\n" |
+ " pxor 56(%4), %%mm7 ;\n" |
+ " movq %%mm6, 48(%1) ;\n" |
+ " movq %%mm7, 56(%1) ;\n" |
+ |
+ " addl $64, %1 ;\n" |
+ " addl $64, %2 ;\n" |
+ " addl $64, %3 ;\n" |
+ " addl $64, %4 ;\n" |
+ " decl %0 ;\n" |
+ " jnz 1b ;\n" |
+ : "+r" (lines), |
+ "+r" (p1), "+r" (p2), "+r" (p3), "+r" (p4) |
+ : |
+ : "memory"); |
+ |
+ kernel_fpu_end(); |
+} |
+ |
+static void |
+xor_p5_mmx_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3, unsigned long *p4, unsigned long *p5) |
+{ |
+ unsigned long lines = bytes >> 6; |
+ |
+ kernel_fpu_begin(); |
+ |
+ /* need to save p4/p5 manually to not exceed gcc's 10 argument limit */ |
+ __asm__ __volatile__ ( |
+ " pushl %4\n" |
+ " pushl %5\n" |
+ " .align 32,0x90 ;\n" |
+ " 1: ;\n" |
+ " movq (%1), %%mm0 ;\n" |
+ " movq 8(%1), %%mm1 ;\n" |
+ " pxor (%2), %%mm0 ;\n" |
+ " pxor 8(%2), %%mm1 ;\n" |
+ " movq 16(%1), %%mm2 ;\n" |
+ " pxor (%3), %%mm0 ;\n" |
+ " pxor 8(%3), %%mm1 ;\n" |
+ " pxor 16(%2), %%mm2 ;\n" |
+ " pxor (%4), %%mm0 ;\n" |
+ " pxor 8(%4), %%mm1 ;\n" |
+ " pxor 16(%3), %%mm2 ;\n" |
+ " movq 24(%1), %%mm3 ;\n" |
+ " pxor (%5), %%mm0 ;\n" |
+ " pxor 8(%5), %%mm1 ;\n" |
+ " movq %%mm0, (%1) ;\n" |
+ " pxor 16(%4), %%mm2 ;\n" |
+ " pxor 24(%2), %%mm3 ;\n" |
+ " movq %%mm1, 8(%1) ;\n" |
+ " pxor 16(%5), %%mm2 ;\n" |
+ " pxor 24(%3), %%mm3 ;\n" |
+ " movq 32(%1), %%mm4 ;\n" |
+ " movq %%mm2, 16(%1) ;\n" |
+ " pxor 24(%4), %%mm3 ;\n" |
+ " pxor 32(%2), %%mm4 ;\n" |
+ " movq 40(%1), %%mm5 ;\n" |
+ " pxor 24(%5), %%mm3 ;\n" |
+ " pxor 32(%3), %%mm4 ;\n" |
+ " pxor 40(%2), %%mm5 ;\n" |
+ " movq %%mm3, 24(%1) ;\n" |
+ " pxor 32(%4), %%mm4 ;\n" |
+ " pxor 40(%3), %%mm5 ;\n" |
+ " movq 48(%1), %%mm6 ;\n" |
+ " movq 56(%1), %%mm7 ;\n" |
+ " pxor 32(%5), %%mm4 ;\n" |
+ " pxor 40(%4), %%mm5 ;\n" |
+ " pxor 48(%2), %%mm6 ;\n" |
+ " pxor 56(%2), %%mm7 ;\n" |
+ " movq %%mm4, 32(%1) ;\n" |
+ " pxor 48(%3), %%mm6 ;\n" |
+ " pxor 56(%3), %%mm7 ;\n" |
+ " pxor 40(%5), %%mm5 ;\n" |
+ " pxor 48(%4), %%mm6 ;\n" |
+ " pxor 56(%4), %%mm7 ;\n" |
+ " movq %%mm5, 40(%1) ;\n" |
+ " pxor 48(%5), %%mm6 ;\n" |
+ " pxor 56(%5), %%mm7 ;\n" |
+ " movq %%mm6, 48(%1) ;\n" |
+ " movq %%mm7, 56(%1) ;\n" |
+ |
+ " addl $64, %1 ;\n" |
+ " addl $64, %2 ;\n" |
+ " addl $64, %3 ;\n" |
+ " addl $64, %4 ;\n" |
+ " addl $64, %5 ;\n" |
+ " decl %0 ;\n" |
+ " jnz 1b ;\n" |
+ " popl %5\n" |
+ " popl %4\n" |
+ : "+g" (lines), |
+ "+r" (p1), "+r" (p2), "+r" (p3) |
+ : "r" (p4), "r" (p5) |
+ : "memory"); |
+ |
+ kernel_fpu_end(); |
+} |
+ |
+static struct xor_block_template xor_block_pII_mmx = { |
+ .name = "pII_mmx", |
+ .do_2 = xor_pII_mmx_2, |
+ .do_3 = xor_pII_mmx_3, |
+ .do_4 = xor_pII_mmx_4, |
+ .do_5 = xor_pII_mmx_5, |
+}; |
+ |
+static struct xor_block_template xor_block_p5_mmx = { |
+ .name = "p5_mmx", |
+ .do_2 = xor_p5_mmx_2, |
+ .do_3 = xor_p5_mmx_3, |
+ .do_4 = xor_p5_mmx_4, |
+ .do_5 = xor_p5_mmx_5, |
+}; |
+ |
+/* |
+ * Cache avoiding checksumming functions utilizing KNI instructions |
+ * Copyright (C) 1999 Zach Brown (with obvious credit due Ingo) |
+ */ |
+ |
+#define XMMS_SAVE do { \ |
+ preempt_disable(); \ |
+ __asm__ __volatile__ ( \ |
+ "movl %%cr0,%0 ;\n\t" \ |
+ "clts ;\n\t" \ |
+ "movups %%xmm0,(%1) ;\n\t" \ |
+ "movups %%xmm1,0x10(%1) ;\n\t" \ |
+ "movups %%xmm2,0x20(%1) ;\n\t" \ |
+ "movups %%xmm3,0x30(%1) ;\n\t" \ |
+ : "=&r" (cr0) \ |
+ : "r" (xmm_save) \ |
+ : "memory"); \ |
+} while(0) |
+ |
+#define XMMS_RESTORE do { \ |
+ __asm__ __volatile__ ( \ |
+ "sfence ;\n\t" \ |
+ "movups (%1),%%xmm0 ;\n\t" \ |
+ "movups 0x10(%1),%%xmm1 ;\n\t" \ |
+ "movups 0x20(%1),%%xmm2 ;\n\t" \ |
+ "movups 0x30(%1),%%xmm3 ;\n\t" \ |
+ "movl %0,%%cr0 ;\n\t" \ |
+ : \ |
+ : "r" (cr0), "r" (xmm_save) \ |
+ : "memory"); \ |
+ preempt_enable(); \ |
+} while(0) |
+ |
+#define ALIGN16 __attribute__((aligned(16))) |
+ |
+#define OFFS(x) "16*("#x")" |
+#define PF_OFFS(x) "256+16*("#x")" |
+#define PF0(x) " prefetchnta "PF_OFFS(x)"(%1) ;\n" |
+#define LD(x,y) " movaps "OFFS(x)"(%1), %%xmm"#y" ;\n" |
+#define ST(x,y) " movaps %%xmm"#y", "OFFS(x)"(%1) ;\n" |
+#define PF1(x) " prefetchnta "PF_OFFS(x)"(%2) ;\n" |
+#define PF2(x) " prefetchnta "PF_OFFS(x)"(%3) ;\n" |
+#define PF3(x) " prefetchnta "PF_OFFS(x)"(%4) ;\n" |
+#define PF4(x) " prefetchnta "PF_OFFS(x)"(%5) ;\n" |
+#define PF5(x) " prefetchnta "PF_OFFS(x)"(%6) ;\n" |
+#define XO1(x,y) " xorps "OFFS(x)"(%2), %%xmm"#y" ;\n" |
+#define XO2(x,y) " xorps "OFFS(x)"(%3), %%xmm"#y" ;\n" |
+#define XO3(x,y) " xorps "OFFS(x)"(%4), %%xmm"#y" ;\n" |
+#define XO4(x,y) " xorps "OFFS(x)"(%5), %%xmm"#y" ;\n" |
+#define XO5(x,y) " xorps "OFFS(x)"(%6), %%xmm"#y" ;\n" |
+ |
+ |
+static void |
+xor_sse_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) |
+{ |
+ unsigned long lines = bytes >> 8; |
+ char xmm_save[16*4] ALIGN16; |
+ int cr0; |
+ |
+ XMMS_SAVE; |
+ |
+ __asm__ __volatile__ ( |
+#undef BLOCK |
+#define BLOCK(i) \ |
+ LD(i,0) \ |
+ LD(i+1,1) \ |
+ PF1(i) \ |
+ PF1(i+2) \ |
+ LD(i+2,2) \ |
+ LD(i+3,3) \ |
+ PF0(i+4) \ |
+ PF0(i+6) \ |
+ XO1(i,0) \ |
+ XO1(i+1,1) \ |
+ XO1(i+2,2) \ |
+ XO1(i+3,3) \ |
+ ST(i,0) \ |
+ ST(i+1,1) \ |
+ ST(i+2,2) \ |
+ ST(i+3,3) \ |
+ |
+ |
+ PF0(0) |
+ PF0(2) |
+ |
+ " .align 32 ;\n" |
+ " 1: ;\n" |
+ |
+ BLOCK(0) |
+ BLOCK(4) |
+ BLOCK(8) |
+ BLOCK(12) |
+ |
+ " addl $256, %1 ;\n" |
+ " addl $256, %2 ;\n" |
+ " decl %0 ;\n" |
+ " jnz 1b ;\n" |
+ : "+r" (lines), |
+ "+r" (p1), "+r" (p2) |
+ : |
+ : "memory"); |
+ |
+ XMMS_RESTORE; |
+} |
+ |
+static void |
+xor_sse_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3) |
+{ |
+ unsigned long lines = bytes >> 8; |
+ char xmm_save[16*4] ALIGN16; |
+ int cr0; |
+ |
+ XMMS_SAVE; |
+ |
+ __asm__ __volatile__ ( |
+#undef BLOCK |
+#define BLOCK(i) \ |
+ PF1(i) \ |
+ PF1(i+2) \ |
+ LD(i,0) \ |
+ LD(i+1,1) \ |
+ LD(i+2,2) \ |
+ LD(i+3,3) \ |
+ PF2(i) \ |
+ PF2(i+2) \ |
+ PF0(i+4) \ |
+ PF0(i+6) \ |
+ XO1(i,0) \ |
+ XO1(i+1,1) \ |
+ XO1(i+2,2) \ |
+ XO1(i+3,3) \ |
+ XO2(i,0) \ |
+ XO2(i+1,1) \ |
+ XO2(i+2,2) \ |
+ XO2(i+3,3) \ |
+ ST(i,0) \ |
+ ST(i+1,1) \ |
+ ST(i+2,2) \ |
+ ST(i+3,3) \ |
+ |
+ |
+ PF0(0) |
+ PF0(2) |
+ |
+ " .align 32 ;\n" |
+ " 1: ;\n" |
+ |
+ BLOCK(0) |
+ BLOCK(4) |
+ BLOCK(8) |
+ BLOCK(12) |
+ |
+ " addl $256, %1 ;\n" |
+ " addl $256, %2 ;\n" |
+ " addl $256, %3 ;\n" |
+ " decl %0 ;\n" |
+ " jnz 1b ;\n" |
+ : "+r" (lines), |
+ "+r" (p1), "+r"(p2), "+r"(p3) |
+ : |
+ : "memory" ); |
+ |
+ XMMS_RESTORE; |
+} |
+ |
+static void |
+xor_sse_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3, unsigned long *p4) |
+{ |
+ unsigned long lines = bytes >> 8; |
+ char xmm_save[16*4] ALIGN16; |
+ int cr0; |
+ |
+ XMMS_SAVE; |
+ |
+ __asm__ __volatile__ ( |
+#undef BLOCK |
+#define BLOCK(i) \ |
+ PF1(i) \ |
+ PF1(i+2) \ |
+ LD(i,0) \ |
+ LD(i+1,1) \ |
+ LD(i+2,2) \ |
+ LD(i+3,3) \ |
+ PF2(i) \ |
+ PF2(i+2) \ |
+ XO1(i,0) \ |
+ XO1(i+1,1) \ |
+ XO1(i+2,2) \ |
+ XO1(i+3,3) \ |
+ PF3(i) \ |
+ PF3(i+2) \ |
+ PF0(i+4) \ |
+ PF0(i+6) \ |
+ XO2(i,0) \ |
+ XO2(i+1,1) \ |
+ XO2(i+2,2) \ |
+ XO2(i+3,3) \ |
+ XO3(i,0) \ |
+ XO3(i+1,1) \ |
+ XO3(i+2,2) \ |
+ XO3(i+3,3) \ |
+ ST(i,0) \ |
+ ST(i+1,1) \ |
+ ST(i+2,2) \ |
+ ST(i+3,3) \ |
+ |
+ |
+ PF0(0) |
+ PF0(2) |
+ |
+ " .align 32 ;\n" |
+ " 1: ;\n" |
+ |
+ BLOCK(0) |
+ BLOCK(4) |
+ BLOCK(8) |
+ BLOCK(12) |
+ |
+ " addl $256, %1 ;\n" |
+ " addl $256, %2 ;\n" |
+ " addl $256, %3 ;\n" |
+ " addl $256, %4 ;\n" |
+ " decl %0 ;\n" |
+ " jnz 1b ;\n" |
+ : "+r" (lines), |
+ "+r" (p1), "+r" (p2), "+r" (p3), "+r" (p4) |
+ : |
+ : "memory" ); |
+ |
+ XMMS_RESTORE; |
+} |
+ |
+static void |
+xor_sse_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3, unsigned long *p4, unsigned long *p5) |
+{ |
+ unsigned long lines = bytes >> 8; |
+ char xmm_save[16*4] ALIGN16; |
+ int cr0; |
+ |
+ XMMS_SAVE; |
+ |
+ /* need to save p4/p5 manually to not exceed gcc's 10 argument limit */ |
+ __asm__ __volatile__ ( |
+ " pushl %4\n" |
+ " pushl %5\n" |
+#undef BLOCK |
+#define BLOCK(i) \ |
+ PF1(i) \ |
+ PF1(i+2) \ |
+ LD(i,0) \ |
+ LD(i+1,1) \ |
+ LD(i+2,2) \ |
+ LD(i+3,3) \ |
+ PF2(i) \ |
+ PF2(i+2) \ |
+ XO1(i,0) \ |
+ XO1(i+1,1) \ |
+ XO1(i+2,2) \ |
+ XO1(i+3,3) \ |
+ PF3(i) \ |
+ PF3(i+2) \ |
+ XO2(i,0) \ |
+ XO2(i+1,1) \ |
+ XO2(i+2,2) \ |
+ XO2(i+3,3) \ |
+ PF4(i) \ |
+ PF4(i+2) \ |
+ PF0(i+4) \ |
+ PF0(i+6) \ |
+ XO3(i,0) \ |
+ XO3(i+1,1) \ |
+ XO3(i+2,2) \ |
+ XO3(i+3,3) \ |
+ XO4(i,0) \ |
+ XO4(i+1,1) \ |
+ XO4(i+2,2) \ |
+ XO4(i+3,3) \ |
+ ST(i,0) \ |
+ ST(i+1,1) \ |
+ ST(i+2,2) \ |
+ ST(i+3,3) \ |
+ |
+ |
+ PF0(0) |
+ PF0(2) |
+ |
+ " .align 32 ;\n" |
+ " 1: ;\n" |
+ |
+ BLOCK(0) |
+ BLOCK(4) |
+ BLOCK(8) |
+ BLOCK(12) |
+ |
+ " addl $256, %1 ;\n" |
+ " addl $256, %2 ;\n" |
+ " addl $256, %3 ;\n" |
+ " addl $256, %4 ;\n" |
+ " addl $256, %5 ;\n" |
+ " decl %0 ;\n" |
+ " jnz 1b ;\n" |
+ " popl %5\n" |
+ " popl %4\n" |
+ : "+r" (lines), |
+ "+r" (p1), "+r" (p2), "+r" (p3) |
+ : "r" (p4), "r" (p5) |
+ : "memory"); |
+ |
+ XMMS_RESTORE; |
+} |
+ |
+static struct xor_block_template xor_block_pIII_sse = { |
+ .name = "pIII_sse", |
+ .do_2 = xor_sse_2, |
+ .do_3 = xor_sse_3, |
+ .do_4 = xor_sse_4, |
+ .do_5 = xor_sse_5, |
+}; |
+ |
+/* Also try the generic routines. */ |
+#include <asm-generic/xor.h> |
+ |
+#undef XOR_TRY_TEMPLATES |
+#define XOR_TRY_TEMPLATES \ |
+ do { \ |
+ xor_speed(&xor_block_8regs); \ |
+ xor_speed(&xor_block_8regs_p); \ |
+ xor_speed(&xor_block_32regs); \ |
+ xor_speed(&xor_block_32regs_p); \ |
+ if (cpu_has_xmm) \ |
+ xor_speed(&xor_block_pIII_sse); \ |
+ if (cpu_has_mmx) { \ |
+ xor_speed(&xor_block_pII_mmx); \ |
+ xor_speed(&xor_block_p5_mmx); \ |
+ } \ |
+ } while (0) |
+ |
+/* We force the use of the SSE xor block because it can write around L2. |
+ We may also be able to load into the L1 only depending on how the cpu |
+ deals with a load to a line that is being prefetched. */ |
+#define XOR_SELECT_TEMPLATE(FASTEST) \ |
+ (cpu_has_xmm ? &xor_block_pIII_sse : FASTEST) |
Index: linuxc26/include/asm/floppy.h |
=================================================================== |
--- linuxc26/include/asm/floppy.h (nonexistent) |
+++ linuxc26/include/asm/floppy.h (revision 422) |
@@ -0,0 +1,319 @@ |
+/* |
+ * Architecture specific parts of the Floppy driver |
+ * |
+ * 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) 1995 |
+ */ |
+#ifndef __ASM_I386_FLOPPY_H |
+#define __ASM_I386_FLOPPY_H |
+ |
+#include <linux/vmalloc.h> |
+ |
+ |
+/* |
+ * The DMA channel used by the floppy controller cannot access data at |
+ * addresses >= 16MB |
+ * |
+ * Went back to the 1MB limit, as some people had problems with the floppy |
+ * driver otherwise. It doesn't matter much for performance anyway, as most |
+ * floppy accesses go through the track buffer. |
+ */ |
+#define _CROSS_64KB(a,s,vdma) \ |
+(!(vdma) && ((unsigned long)(a)/K_64 != ((unsigned long)(a) + (s) - 1) / K_64)) |
+ |
+#define CROSS_64KB(a,s) _CROSS_64KB(a,s,use_virtual_dma & 1) |
+ |
+ |
+#define SW fd_routine[use_virtual_dma&1] |
+#define CSW fd_routine[can_use_virtual_dma & 1] |
+ |
+ |
+#define fd_inb(port) inb_p(port) |
+#define fd_outb(port,value) outb_p(port,value) |
+ |
+#define fd_request_dma() CSW._request_dma(FLOPPY_DMA,"floppy") |
+#define fd_free_dma() CSW._free_dma(FLOPPY_DMA) |
+#define fd_enable_irq() enable_irq(FLOPPY_IRQ) |
+#define fd_disable_irq() disable_irq(FLOPPY_IRQ) |
+#define fd_free_irq() free_irq(FLOPPY_IRQ, NULL) |
+#define fd_get_dma_residue() SW._get_dma_residue(FLOPPY_DMA) |
+#define fd_dma_mem_alloc(size) SW._dma_mem_alloc(size) |
+#define fd_dma_setup(addr, size, mode, io) SW._dma_setup(addr, size, mode, io) |
+ |
+#define FLOPPY_CAN_FALLBACK_ON_NODMA |
+ |
+static int virtual_dma_count; |
+static int virtual_dma_residue; |
+static char *virtual_dma_addr; |
+static int virtual_dma_mode; |
+static int doing_pdma; |
+ |
+static irqreturn_t floppy_hardint(int irq, void *dev_id, struct pt_regs * regs) |
+{ |
+ register unsigned char st; |
+ |
+#undef TRACE_FLPY_INT |
+#define NO_FLOPPY_ASSEMBLER |
+ |
+#ifdef TRACE_FLPY_INT |
+ static int calls=0; |
+ static int bytes=0; |
+ static int dma_wait=0; |
+#endif |
+ if (!doing_pdma) |
+ return floppy_interrupt(irq, dev_id, regs); |
+ |
+#ifdef TRACE_FLPY_INT |
+ if(!calls) |
+ bytes = virtual_dma_count; |
+#endif |
+ |
+#ifndef NO_FLOPPY_ASSEMBLER |
+ __asm__ ( |
+ "testl %1,%1" |
+ "je 3f" |
+"1: inb %w4,%b0" |
+ "andb $160,%b0" |
+ "cmpb $160,%b0" |
+ "jne 2f" |
+ "incw %w4" |
+ "testl %3,%3" |
+ "jne 4f" |
+ "inb %w4,%b0" |
+ "movb %0,(%2)" |
+ "jmp 5f" |
+"4: movb (%2),%0" |
+ "outb %b0,%w4" |
+"5: decw %w4" |
+ "outb %0,$0x80" |
+ "decl %1" |
+ "incl %2" |
+ "testl %1,%1" |
+ "jne 1b" |
+"3: inb %w4,%b0" |
+"2: " |
+ : "=a" ((char) st), |
+ "=c" ((long) virtual_dma_count), |
+ "=S" ((long) virtual_dma_addr) |
+ : "b" ((long) virtual_dma_mode), |
+ "d" ((short) virtual_dma_port+4), |
+ "1" ((long) virtual_dma_count), |
+ "2" ((long) virtual_dma_addr)); |
+#else |
+ { |
+ register int lcount; |
+ register char *lptr; |
+ |
+ st = 1; |
+ for(lcount=virtual_dma_count, lptr=virtual_dma_addr; |
+ lcount; lcount--, lptr++) { |
+ st=inb(virtual_dma_port+4) & 0xa0 ; |
+ if(st != 0xa0) |
+ break; |
+ if(virtual_dma_mode) |
+ outb_p(*lptr, virtual_dma_port+5); |
+ else |
+ *lptr = inb_p(virtual_dma_port+5); |
+ } |
+ virtual_dma_count = lcount; |
+ virtual_dma_addr = lptr; |
+ st = inb(virtual_dma_port+4); |
+ } |
+#endif |
+ |
+#ifdef TRACE_FLPY_INT |
+ calls++; |
+#endif |
+ if(st == 0x20) |
+ return IRQ_HANDLED; |
+ if(!(st & 0x20)) { |
+ virtual_dma_residue += virtual_dma_count; |
+ virtual_dma_count=0; |
+#ifdef TRACE_FLPY_INT |
+ printk("count=%x, residue=%x calls=%d bytes=%d dma_wait=%d\n", |
+ virtual_dma_count, virtual_dma_residue, calls, bytes, |
+ dma_wait); |
+ calls = 0; |
+ dma_wait=0; |
+#endif |
+ doing_pdma = 0; |
+ floppy_interrupt(irq, dev_id, regs); |
+ return IRQ_HANDLED; |
+ } |
+#ifdef TRACE_FLPY_INT |
+ if(!virtual_dma_count) |
+ dma_wait++; |
+#endif |
+ return IRQ_HANDLED; |
+} |
+ |
+static void fd_disable_dma(void) |
+{ |
+ if(! (can_use_virtual_dma & 1)) |
+ disable_dma(FLOPPY_DMA); |
+ doing_pdma = 0; |
+ virtual_dma_residue += virtual_dma_count; |
+ virtual_dma_count=0; |
+} |
+ |
+static int vdma_request_dma(unsigned int dmanr, const char * device_id) |
+{ |
+ return 0; |
+} |
+ |
+static void vdma_nop(unsigned int dummy) |
+{ |
+} |
+ |
+ |
+static int vdma_get_dma_residue(unsigned int dummy) |
+{ |
+ return virtual_dma_count + virtual_dma_residue; |
+} |
+ |
+ |
+static int fd_request_irq(void) |
+{ |
+ if(can_use_virtual_dma) |
+ return request_irq(FLOPPY_IRQ, floppy_hardint,SA_INTERRUPT, |
+ "floppy", NULL); |
+ else |
+ return request_irq(FLOPPY_IRQ, floppy_interrupt, |
+ SA_INTERRUPT|SA_SAMPLE_RANDOM, |
+ "floppy", NULL); |
+ |
+} |
+ |
+static unsigned long dma_mem_alloc(unsigned long size) |
+{ |
+ return __get_dma_pages(GFP_KERNEL,get_order(size)); |
+} |
+ |
+ |
+static unsigned long vdma_mem_alloc(unsigned long size) |
+{ |
+ return (unsigned long) vmalloc(size); |
+ |
+} |
+ |
+#define nodma_mem_alloc(size) vdma_mem_alloc(size) |
+ |
+static void _fd_dma_mem_free(unsigned long addr, unsigned long size) |
+{ |
+ if((unsigned int) addr >= (unsigned int) high_memory) |
+ return vfree((void *)addr); |
+ else |
+ free_pages(addr, get_order(size)); |
+} |
+ |
+#define fd_dma_mem_free(addr, size) _fd_dma_mem_free(addr, size) |
+ |
+static void _fd_chose_dma_mode(char *addr, unsigned long size) |
+{ |
+ if(can_use_virtual_dma == 2) { |
+ if((unsigned int) addr >= (unsigned int) high_memory || |
+ isa_virt_to_bus(addr) >= 0x1000000 || |
+ _CROSS_64KB(addr, size, 0)) |
+ use_virtual_dma = 1; |
+ else |
+ use_virtual_dma = 0; |
+ } else { |
+ use_virtual_dma = can_use_virtual_dma & 1; |
+ } |
+} |
+ |
+#define fd_chose_dma_mode(addr, size) _fd_chose_dma_mode(addr, size) |
+ |
+ |
+static int vdma_dma_setup(char *addr, unsigned long size, int mode, int io) |
+{ |
+ doing_pdma = 1; |
+ virtual_dma_port = io; |
+ virtual_dma_mode = (mode == DMA_MODE_WRITE); |
+ virtual_dma_addr = addr; |
+ virtual_dma_count = size; |
+ virtual_dma_residue = 0; |
+ return 0; |
+} |
+ |
+static int hard_dma_setup(char *addr, unsigned long size, int mode, int io) |
+{ |
+#ifdef FLOPPY_SANITY_CHECK |
+ if (CROSS_64KB(addr, size)) { |
+ printk("DMA crossing 64-K boundary %p-%p\n", addr, addr+size); |
+ return -1; |
+ } |
+#endif |
+ /* actual, physical DMA */ |
+ doing_pdma = 0; |
+ clear_dma_ff(FLOPPY_DMA); |
+ set_dma_mode(FLOPPY_DMA,mode); |
+ set_dma_addr(FLOPPY_DMA,isa_virt_to_bus(addr)); |
+ set_dma_count(FLOPPY_DMA,size); |
+ enable_dma(FLOPPY_DMA); |
+ return 0; |
+} |
+ |
+struct fd_routine_l { |
+ int (*_request_dma)(unsigned int dmanr, const char * device_id); |
+ void (*_free_dma)(unsigned int dmanr); |
+ int (*_get_dma_residue)(unsigned int dummy); |
+ unsigned long (*_dma_mem_alloc) (unsigned long size); |
+ int (*_dma_setup)(char *addr, unsigned long size, int mode, int io); |
+} fd_routine[] = { |
+ { |
+ request_dma, |
+ free_dma, |
+ get_dma_residue, |
+ dma_mem_alloc, |
+ hard_dma_setup |
+ }, |
+ { |
+ vdma_request_dma, |
+ vdma_nop, |
+ vdma_get_dma_residue, |
+ vdma_mem_alloc, |
+ vdma_dma_setup |
+ } |
+}; |
+ |
+ |
+static int FDC1 = 0x3f0; |
+static int FDC2 = -1; |
+ |
+/* |
+ * Floppy types are stored in the rtc's CMOS RAM and so rtc_lock |
+ * is needed to prevent corrupted CMOS RAM in case "insmod floppy" |
+ * coincides with another rtc CMOS user. Paul G. |
+ */ |
+#define FLOPPY0_TYPE ({ \ |
+ unsigned long flags; \ |
+ unsigned char val; \ |
+ spin_lock_irqsave(&rtc_lock, flags); \ |
+ val = (CMOS_READ(0x10) >> 4) & 15; \ |
+ spin_unlock_irqrestore(&rtc_lock, flags); \ |
+ val; \ |
+}) |
+ |
+#define FLOPPY1_TYPE ({ \ |
+ unsigned long flags; \ |
+ unsigned char val; \ |
+ spin_lock_irqsave(&rtc_lock, flags); \ |
+ val = CMOS_READ(0x10) & 15; \ |
+ spin_unlock_irqrestore(&rtc_lock, flags); \ |
+ val; \ |
+}) |
+ |
+#define N_FDC 2 |
+#define N_DRIVE 8 |
+ |
+#define FLOPPY_MOTOR_MASK 0xf0 |
+ |
+#define AUTO_DMA |
+ |
+#define EXTRA_FLOPPY_PARAMS |
+ |
+#endif /* __ASM_I386_FLOPPY_H */ |
Index: linuxc26/include/asm/linkage.h |
=================================================================== |
--- linuxc26/include/asm/linkage.h (nonexistent) |
+++ linuxc26/include/asm/linkage.h (revision 422) |
@@ -0,0 +1,12 @@ |
+#ifndef __ASM_LINKAGE_H |
+#define __ASM_LINKAGE_H |
+ |
+#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0))) |
+#define FASTCALL(x) x __attribute__((regparm(3))) |
+ |
+#ifdef CONFIG_X86_ALIGNMENT_16 |
+#define __ALIGN .align 16,0x90 |
+#define __ALIGN_STR ".align 16,0x90" |
+#endif |
+ |
+#endif |
Index: linuxc26/include/asm/ipc.h |
=================================================================== |
--- linuxc26/include/asm/ipc.h (nonexistent) |
+++ linuxc26/include/asm/ipc.h (revision 422) |
@@ -0,0 +1,32 @@ |
+#ifndef __i386_IPC_H__ |
+#define __i386_IPC_H__ |
+ |
+/* |
+ * These are used to wrap system calls on x86. |
+ * |
+ * See arch/i386/kernel/sys_i386.c 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 |
Index: linuxc26/include/asm/desc.h |
=================================================================== |
--- linuxc26/include/asm/desc.h (nonexistent) |
+++ linuxc26/include/asm/desc.h (revision 422) |
@@ -0,0 +1,128 @@ |
+#ifndef __ARCH_DESC_H |
+#define __ARCH_DESC_H |
+ |
+#include <asm/ldt.h> |
+#include <asm/segment.h> |
+ |
+#ifndef __ASSEMBLY__ |
+ |
+#include <linux/preempt.h> |
+#include <linux/smp.h> |
+ |
+#include <asm/mmu.h> |
+ |
+extern struct desc_struct cpu_gdt_table[NR_CPUS][GDT_ENTRIES]; |
+ |
+struct Xgt_desc_struct { |
+ unsigned short size; |
+ unsigned long address __attribute__((packed)); |
+ unsigned short pad; |
+} __attribute__ ((packed)); |
+ |
+extern struct Xgt_desc_struct idt_descr, cpu_gdt_descr[NR_CPUS]; |
+ |
+#define load_TR_desc() __asm__ __volatile__("ltr %%ax"::"a" (GDT_ENTRY_TSS*8)) |
+#define load_LDT_desc() __asm__ __volatile__("lldt %%ax"::"a" (GDT_ENTRY_LDT*8)) |
+ |
+/* |
+ * This is the ldt that every process will get unless we need |
+ * something other than this. |
+ */ |
+extern struct desc_struct default_ldt[]; |
+extern void set_intr_gate(unsigned int irq, void * addr); |
+ |
+#define _set_tssldt_desc(n,addr,limit,type) \ |
+__asm__ __volatile__ ("movw %w3,0(%2)\n\t" \ |
+ "movw %%ax,2(%2)\n\t" \ |
+ "rorl $16,%%eax\n\t" \ |
+ "movb %%al,4(%2)\n\t" \ |
+ "movb %4,5(%2)\n\t" \ |
+ "movb $0,6(%2)\n\t" \ |
+ "movb %%ah,7(%2)\n\t" \ |
+ "rorl $16,%%eax" \ |
+ : "=m"(*(n)) : "a" (addr), "r"(n), "ir"(limit), "i"(type)) |
+ |
+static inline void __set_tss_desc(unsigned int cpu, unsigned int entry, void *addr) |
+{ |
+ _set_tssldt_desc(&cpu_gdt_table[cpu][entry], (int)addr, 235, 0x89); |
+} |
+ |
+#define set_tss_desc(cpu,addr) __set_tss_desc(cpu, GDT_ENTRY_TSS, addr) |
+ |
+static inline void set_ldt_desc(unsigned int cpu, void *addr, unsigned int size) |
+{ |
+ _set_tssldt_desc(&cpu_gdt_table[cpu][GDT_ENTRY_LDT], (int)addr, ((size << 3)-1), 0x82); |
+} |
+ |
+#define LDT_entry_a(info) \ |
+ ((((info)->base_addr & 0x0000ffff) << 16) | ((info)->limit & 0x0ffff)) |
+ |
+#define LDT_entry_b(info) \ |
+ (((info)->base_addr & 0xff000000) | \ |
+ (((info)->base_addr & 0x00ff0000) >> 16) | \ |
+ ((info)->limit & 0xf0000) | \ |
+ (((info)->read_exec_only ^ 1) << 9) | \ |
+ ((info)->contents << 10) | \ |
+ (((info)->seg_not_present ^ 1) << 15) | \ |
+ ((info)->seg_32bit << 22) | \ |
+ ((info)->limit_in_pages << 23) | \ |
+ ((info)->useable << 20) | \ |
+ 0x7000) |
+ |
+#define LDT_empty(info) (\ |
+ (info)->base_addr == 0 && \ |
+ (info)->limit == 0 && \ |
+ (info)->contents == 0 && \ |
+ (info)->read_exec_only == 1 && \ |
+ (info)->seg_32bit == 0 && \ |
+ (info)->limit_in_pages == 0 && \ |
+ (info)->seg_not_present == 1 && \ |
+ (info)->useable == 0 ) |
+ |
+#if TLS_SIZE != 24 |
+# error update this code. |
+#endif |
+ |
+static inline void load_TLS(struct thread_struct *t, unsigned int cpu) |
+{ |
+#define C(i) cpu_gdt_table[cpu][GDT_ENTRY_TLS_MIN + i] = t->tls_array[i] |
+ C(0); C(1); C(2); |
+#undef C |
+} |
+ |
+static inline void clear_LDT(void) |
+{ |
+ int cpu = get_cpu(); |
+ |
+ set_ldt_desc(cpu, &default_ldt[0], 5); |
+ load_LDT_desc(); |
+ put_cpu(); |
+} |
+ |
+/* |
+ * load one particular LDT into the current CPU |
+ */ |
+static inline void load_LDT_nolock(mm_context_t *pc, int cpu) |
+{ |
+ void *segments = pc->ldt; |
+ int count = pc->size; |
+ |
+ if (likely(!count)) { |
+ segments = &default_ldt[0]; |
+ count = 5; |
+ } |
+ |
+ set_ldt_desc(cpu, segments, count); |
+ load_LDT_desc(); |
+} |
+ |
+static inline void load_LDT(mm_context_t *pc) |
+{ |
+ int cpu = get_cpu(); |
+ load_LDT_nolock(pc, cpu); |
+ put_cpu(); |
+} |
+ |
+#endif /* !__ASSEMBLY__ */ |
+ |
+#endif |
Index: linuxc26/include/asm/semaphore.h |
=================================================================== |
--- linuxc26/include/asm/semaphore.h (nonexistent) |
+++ linuxc26/include/asm/semaphore.h (revision 422) |
@@ -0,0 +1,217 @@ |
+#ifndef _I386_SEMAPHORE_H |
+#define _I386_SEMAPHORE_H |
+ |
+#include <linux/linkage.h> |
+ |
+#ifdef __KERNEL__ |
+ |
+/* |
+ * SMP- and interrupt-safe semaphores.. |
+ * |
+ * (C) Copyright 1996 Linus Torvalds |
+ * |
+ * Modified 1996-12-23 by Dave Grothe <dave@gcom.com> to fix bugs in |
+ * the original code and to make semaphore waits |
+ * interruptible so that processes waiting on |
+ * semaphores can be killed. |
+ * Modified 1999-02-14 by Andrea Arcangeli, split the sched.c helper |
+ * functions in asm/sempahore-helper.h while fixing a |
+ * potential and subtle race discovered by Ulrich Schmid |
+ * in down_interruptible(). Since I started to play here I |
+ * also implemented the `trylock' semaphore operation. |
+ * 1999-07-02 Artur Skawina <skawina@geocities.com> |
+ * Optimized "0(ecx)" -> "(ecx)" (the assembler does not |
+ * do this). Changed calling sequences from push/jmp to |
+ * traditional call/ret. |
+ * Modified 2001-01-01 Andreas Franck <afranck@gmx.de> |
+ * Some hacks to ensure compatibility with recent |
+ * GCC snapshots, to avoid stack corruption when compiling |
+ * with -fomit-frame-pointer. It's not sure if this will |
+ * be fixed in GCC, as our previous implementation was a |
+ * bit dubious. |
+ * |
+ * If you would like to see an analysis of this implementation, please |
+ * ftp to gcom.com and download the file |
+ * /pub/linux/src/semaphore/semaphore-2.0.24.tar.gz. |
+ * |
+ */ |
+ |
+#include <asm/system.h> |
+#include <asm/atomic.h> |
+#include <linux/wait.h> |
+#include <linux/rwsem.h> |
+ |
+struct semaphore { |
+ atomic_t count; |
+ int sleepers; |
+ wait_queue_head_t wait; |
+#ifdef WAITQUEUE_DEBUG |
+ long __magic; |
+#endif |
+}; |
+ |
+#ifdef WAITQUEUE_DEBUG |
+# define __SEM_DEBUG_INIT(name) \ |
+ , (int)&(name).__magic |
+#else |
+# define __SEM_DEBUG_INIT(name) |
+#endif |
+ |
+#define __SEMAPHORE_INITIALIZER(name,count) \ |
+{ ATOMIC_INIT(count), 0, __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \ |
+ __SEM_DEBUG_INIT(name) } |
+ |
+#define __MUTEX_INITIALIZER(name) \ |
+ __SEMAPHORE_INITIALIZER(name,1) |
+ |
+#define __DECLARE_SEMAPHORE_GENERIC(name,count) \ |
+ struct semaphore name = __SEMAPHORE_INITIALIZER(name,count) |
+ |
+#define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1) |
+#define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0) |
+ |
+static inline void sema_init (struct semaphore *sem, int val) |
+{ |
+/* |
+ * *sem = (struct semaphore)__SEMAPHORE_INITIALIZER((*sem),val); |
+ * |
+ * i'd rather use the more flexible initialization above, but sadly |
+ * GCC 2.7.2.3 emits a bogus warning. EGCS doesn't. Oh well. |
+ */ |
+ atomic_set(&sem->count, val); |
+ sem->sleepers = 0; |
+ init_waitqueue_head(&sem->wait); |
+#ifdef WAITQUEUE_DEBUG |
+ sem->__magic = (int)&sem->__magic; |
+#endif |
+} |
+ |
+static inline void init_MUTEX (struct semaphore *sem) |
+{ |
+ sema_init(sem, 1); |
+} |
+ |
+static inline void init_MUTEX_LOCKED (struct semaphore *sem) |
+{ |
+ sema_init(sem, 0); |
+} |
+ |
+asmlinkage void __down_failed(void /* special register calling convention */); |
+asmlinkage int __down_failed_interruptible(void /* params in registers */); |
+asmlinkage int __down_failed_trylock(void /* params in registers */); |
+asmlinkage void __up_wakeup(void /* special register calling convention */); |
+ |
+asmlinkage void __down(struct semaphore * sem); |
+asmlinkage int __down_interruptible(struct semaphore * sem); |
+asmlinkage int __down_trylock(struct semaphore * sem); |
+asmlinkage void __up(struct semaphore * sem); |
+ |
+/* |
+ * This is ugly, but we want the default case to fall through. |
+ * "__down_failed" is a special asm handler that calls the C |
+ * routine that actually waits. See arch/i386/kernel/semaphore.c |
+ */ |
+static inline void down(struct semaphore * sem) |
+{ |
+#ifdef WAITQUEUE_DEBUG |
+ CHECK_MAGIC(sem->__magic); |
+#endif |
+ might_sleep(); |
+ __asm__ __volatile__( |
+ "# atomic down operation\n\t" |
+ LOCK "decl %0\n\t" /* --sem->count */ |
+ "js 2f\n" |
+ "1:\n" |
+ LOCK_SECTION_START("") |
+ "2:\tcall __down_failed\n\t" |
+ "jmp 1b\n" |
+ LOCK_SECTION_END |
+ :"=m" (sem->count) |
+ :"c" (sem) |
+ :"memory"); |
+} |
+ |
+/* |
+ * Interruptible try to acquire a semaphore. If we obtained |
+ * it, return zero. If we were interrupted, returns -EINTR |
+ */ |
+static inline int down_interruptible(struct semaphore * sem) |
+{ |
+ int result; |
+ |
+#ifdef WAITQUEUE_DEBUG |
+ CHECK_MAGIC(sem->__magic); |
+#endif |
+ might_sleep(); |
+ __asm__ __volatile__( |
+ "# atomic interruptible down operation\n\t" |
+ LOCK "decl %1\n\t" /* --sem->count */ |
+ "js 2f\n\t" |
+ "xorl %0,%0\n" |
+ "1:\n" |
+ LOCK_SECTION_START("") |
+ "2:\tcall __down_failed_interruptible\n\t" |
+ "jmp 1b\n" |
+ LOCK_SECTION_END |
+ :"=a" (result), "=m" (sem->count) |
+ :"c" (sem) |
+ :"memory"); |
+ return result; |
+} |
+ |
+/* |
+ * Non-blockingly attempt to down() a semaphore. |
+ * Returns zero if we acquired it |
+ */ |
+static inline int down_trylock(struct semaphore * sem) |
+{ |
+ int result; |
+ |
+#ifdef WAITQUEUE_DEBUG |
+ CHECK_MAGIC(sem->__magic); |
+#endif |
+ |
+ __asm__ __volatile__( |
+ "# atomic interruptible down operation\n\t" |
+ LOCK "decl %1\n\t" /* --sem->count */ |
+ "js 2f\n\t" |
+ "xorl %0,%0\n" |
+ "1:\n" |
+ LOCK_SECTION_START("") |
+ "2:\tcall __down_failed_trylock\n\t" |
+ "jmp 1b\n" |
+ LOCK_SECTION_END |
+ :"=a" (result), "=m" (sem->count) |
+ :"c" (sem) |
+ :"memory"); |
+ return result; |
+} |
+ |
+/* |
+ * Note! This is subtle. We jump to wake people up only if |
+ * the semaphore was negative (== somebody was waiting on it). |
+ * The default case (no contention) will result in NO |
+ * jumps for both down() and up(). |
+ */ |
+static inline void up(struct semaphore * sem) |
+{ |
+#ifdef WAITQUEUE_DEBUG |
+ CHECK_MAGIC(sem->__magic); |
+#endif |
+ __asm__ __volatile__( |
+ "# atomic up operation\n\t" |
+ LOCK "incl %0\n\t" /* ++sem->count */ |
+ "jle 2f\n" |
+ "1:\n" |
+ LOCK_SECTION_START("") |
+ "2:\tcall __up_wakeup\n\t" |
+ "jmp 1b\n" |
+ LOCK_SECTION_END |
+ ".subsection 0\n" |
+ :"=m" (sem->count) |
+ :"c" (sem) |
+ :"memory"); |
+} |
+ |
+#endif |
+#endif |
Index: linuxc26/include/asm/pc9800.h |
=================================================================== |
--- linuxc26/include/asm/pc9800.h (nonexistent) |
+++ linuxc26/include/asm/pc9800.h (revision 422) |
@@ -0,0 +1,27 @@ |
+/* |
+ * PC-9800 machine types. |
+ * |
+ * Copyright (C) 1999 TAKAI Kosuke <tak@kmc.kyoto-u.ac.jp> |
+ * (Linux/98 Project) |
+ */ |
+ |
+#ifndef _ASM_PC9800_H_ |
+#define _ASM_PC9800_H_ |
+ |
+#include <asm/pc9800_sca.h> |
+#include <asm/types.h> |
+ |
+#define __PC9800SCA(type, pa) (*(type *) phys_to_virt(pa)) |
+#define __PC9800SCA_TEST_BIT(pa, n) \ |
+ ((__PC9800SCA(u8, pa) & (1U << (n))) != 0) |
+ |
+#define PC9800_HIGHRESO_P() __PC9800SCA_TEST_BIT(PC9800SCA_BIOS_FLAG, 3) |
+#define PC9800_8MHz_P() __PC9800SCA_TEST_BIT(PC9800SCA_BIOS_FLAG, 7) |
+ |
+ /* 0x2198 is 98 21 on memory... */ |
+#define PC9800_9821_P() (__PC9800SCA(u16, PC9821SCA_ROM_ID) == 0x2198) |
+ |
+/* Note PC9821_...() are valid only when PC9800_9821_P() was true. */ |
+#define PC9821_IDEIF_DOUBLE_P() __PC9800SCA_TEST_BIT(PC9821SCA_ROM_FLAG4, 4) |
+ |
+#endif |
Index: linuxc26/include/asm/sections.h |
=================================================================== |
--- linuxc26/include/asm/sections.h (nonexistent) |
+++ linuxc26/include/asm/sections.h (revision 422) |
@@ -0,0 +1,7 @@ |
+#ifndef _I386_SECTIONS_H |
+#define _I386_SECTIONS_H |
+ |
+/* nothing to see, move along */ |
+#include <asm-generic/sections.h> |
+ |
+#endif |
Index: linuxc26/include/asm/rtc.h |
=================================================================== |
--- linuxc26/include/asm/rtc.h (nonexistent) |
+++ linuxc26/include/asm/rtc.h (revision 422) |
@@ -0,0 +1,10 @@ |
+#ifndef _I386_RTC_H |
+#define _I386_RTC_H |
+ |
+/* |
+ * x86 uses the default access methods for the RTC. |
+ */ |
+ |
+#include <asm-generic/rtc.h> |
+ |
+#endif |
Index: linuxc26/include/asm/div64.h |
=================================================================== |
--- linuxc26/include/asm/div64.h (nonexistent) |
+++ linuxc26/include/asm/div64.h (revision 422) |
@@ -0,0 +1,48 @@ |
+#ifndef __I386_DIV64 |
+#define __I386_DIV64 |
+ |
+/* |
+ * do_div() is NOT a C function. It wants to return |
+ * two values (the quotient and the remainder), but |
+ * since that doesn't work very well in C, what it |
+ * does is: |
+ * |
+ * - modifies the 64-bit dividend _in_place_ |
+ * - returns the 32-bit remainder |
+ * |
+ * This ends up being the most efficient "calling |
+ * convention" on x86. |
+ */ |
+#define do_div(n,base) ({ \ |
+ unsigned long __upper, __low, __high, __mod, __base; \ |
+ __base = (base); \ |
+ asm("":"=a" (__low), "=d" (__high):"A" (n)); \ |
+ __upper = __high; \ |
+ if (__high) { \ |
+ __upper = __high % (__base); \ |
+ __high = __high / (__base); \ |
+ } \ |
+ asm("divl %2":"=a" (__low), "=d" (__mod):"rm" (__base), "0" (__low), "1" (__upper)); \ |
+ asm("":"=A" (n):"a" (__low),"d" (__high)); \ |
+ __mod; \ |
+}) |
+ |
+/* |
+ * (long)X = ((long long)divs) / (long)div |
+ * (long)rem = ((long long)divs) % (long)div |
+ * |
+ * Warning, this will do an exception if X overflows. |
+ */ |
+#define div_long_long_rem(a,b,c) div_ll_X_l_rem(a,b,c) |
+ |
+extern inline long |
+div_ll_X_l_rem(long long divs, long div, long *rem) |
+{ |
+ long dum2; |
+ __asm__("divl %2":"=a"(dum2), "=d"(*rem) |
+ : "rm"(div), "A"(divs)); |
+ |
+ return dum2; |
+ |
+} |
+#endif |
Index: linuxc26/include/asm/hpet.h |
=================================================================== |
--- linuxc26/include/asm/hpet.h (nonexistent) |
+++ linuxc26/include/asm/hpet.h (revision 422) |
@@ -0,0 +1,115 @@ |
+ |
+#ifndef _I386_HPET_H |
+#define _I386_HPET_H |
+ |
+#ifdef CONFIG_HPET_TIMER |
+ |
+#include <linux/errno.h> |
+#include <linux/module.h> |
+#include <linux/sched.h> |
+#include <linux/kernel.h> |
+#include <linux/param.h> |
+#include <linux/string.h> |
+#include <linux/mm.h> |
+#include <linux/interrupt.h> |
+#include <linux/time.h> |
+#include <linux/delay.h> |
+#include <linux/init.h> |
+#include <linux/smp.h> |
+ |
+#include <asm/io.h> |
+#include <asm/smp.h> |
+#include <asm/irq.h> |
+#include <asm/msr.h> |
+#include <asm/delay.h> |
+#include <asm/mpspec.h> |
+#include <asm/uaccess.h> |
+#include <asm/processor.h> |
+ |
+#include <linux/timex.h> |
+#include <linux/config.h> |
+ |
+#include <asm/fixmap.h> |
+ |
+/* |
+ * Documentation on HPET can be found at: |
+ * http://www.intel.com/ial/home/sp/pcmmspec.htm |
+ * ftp://download.intel.com/ial/home/sp/mmts098.pdf |
+ */ |
+ |
+#define HPET_MMAP_SIZE 1024 |
+ |
+#define HPET_ID 0x000 |
+#define HPET_PERIOD 0x004 |
+#define HPET_CFG 0x010 |
+#define HPET_STATUS 0x020 |
+#define HPET_COUNTER 0x0f0 |
+#define HPET_T0_CFG 0x100 |
+#define HPET_T0_CMP 0x108 |
+#define HPET_T0_ROUTE 0x110 |
+#define HPET_T1_CFG 0x120 |
+#define HPET_T1_CMP 0x128 |
+#define HPET_T1_ROUTE 0x130 |
+#define HPET_T2_CFG 0x140 |
+#define HPET_T2_CMP 0x148 |
+#define HPET_T2_ROUTE 0x150 |
+ |
+#define HPET_ID_VENDOR 0xffff0000 |
+#define HPET_ID_LEGSUP 0x00008000 |
+#define HPET_ID_NUMBER 0x00001f00 |
+#define HPET_ID_REV 0x000000ff |
+ |
+#define HPET_ID_VENDOR_SHIFT 16 |
+#define HPET_ID_VENDOR_8086 0x8086 |
+ |
+#define HPET_CFG_ENABLE 0x001 |
+#define HPET_CFG_LEGACY 0x002 |
+ |
+#define HPET_TN_ENABLE 0x004 |
+#define HPET_TN_PERIODIC 0x008 |
+#define HPET_TN_PERIODIC_CAP 0x010 |
+#define HPET_TN_SETVAL 0x040 |
+#define HPET_TN_32BIT 0x100 |
+ |
+/* Use our own asm for 64 bit multiply/divide */ |
+#define ASM_MUL64_REG(eax_out,edx_out,reg_in,eax_in) \ |
+ __asm__ __volatile__("mull %2" \ |
+ :"=a" (eax_out), "=d" (edx_out) \ |
+ :"r" (reg_in), "0" (eax_in)) |
+ |
+#define ASM_DIV64_REG(eax_out,edx_out,reg_in,eax_in,edx_in) \ |
+ __asm__ __volatile__("divl %2" \ |
+ :"=a" (eax_out), "=d" (edx_out) \ |
+ :"r" (reg_in), "0" (eax_in), "1" (edx_in)) |
+ |
+#define KERNEL_TICK_USEC (1000000UL/HZ) /* tick value in microsec */ |
+/* Max HPET Period is 10^8 femto sec as in HPET spec */ |
+#define HPET_MAX_PERIOD (100000000UL) |
+/* |
+ * Min HPET period is 10^5 femto sec just for safety. If it is less than this, |
+ * then 32 bit HPET counter wrapsaround in less than 0.5 sec. |
+ */ |
+#define HPET_MIN_PERIOD (100000UL) |
+ |
+extern unsigned long hpet_period; /* fsecs / HPET clock */ |
+extern unsigned long hpet_tick; /* hpet clks count per tick */ |
+extern unsigned long hpet_address; /* hpet memory map physical address */ |
+ |
+extern int hpet_rtc_timer_init(void); |
+extern int hpet_enable(void); |
+extern int is_hpet_enabled(void); |
+extern int is_hpet_capable(void); |
+extern int hpet_readl(unsigned long a); |
+extern void hpet_writel(unsigned long d, unsigned long a); |
+ |
+#ifdef CONFIG_HPET_EMULATE_RTC |
+extern int hpet_mask_rtc_irq_bit(unsigned long bit_mask); |
+extern int hpet_set_rtc_irq_bit(unsigned long bit_mask); |
+extern int hpet_set_alarm_time(unsigned char hrs, unsigned char min, unsigned char sec); |
+extern int hpet_set_periodic_freq(unsigned long freq); |
+extern int hpet_rtc_dropped_irq(void); |
+extern int hpet_rtc_timer_init(void); |
+extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs); |
+#endif /* CONFIG_HPET_EMULATE_RTC */ |
+#endif /* CONFIG_HPET_TIMER */ |
+#endif /* _I386_HPET_H */ |
Index: linuxc26/include/asm/cache.h |
=================================================================== |
--- linuxc26/include/asm/cache.h (nonexistent) |
+++ linuxc26/include/asm/cache.h (revision 422) |
@@ -0,0 +1,15 @@ |
+/* |
+ * include/asm-i386/cache.h |
+ */ |
+#ifndef __ARCH_I386_CACHE_H |
+#define __ARCH_I386_CACHE_H |
+ |
+#include <linux/config.h> |
+ |
+/* L1 cache line size */ |
+#define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT) |
+#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) |
+ |
+#define L1_CACHE_SHIFT_MAX 7 /* largest L1 which this arch supports */ |
+ |
+#endif |
Index: linuxc26/include/asm/pgtable-3level.h |
=================================================================== |
--- linuxc26/include/asm/pgtable-3level.h (nonexistent) |
+++ linuxc26/include/asm/pgtable-3level.h (revision 422) |
@@ -0,0 +1,126 @@ |
+#ifndef _I386_PGTABLE_3LEVEL_H |
+#define _I386_PGTABLE_3LEVEL_H |
+ |
+/* |
+ * Intel Physical Address Extension (PAE) Mode - three-level page |
+ * tables on PPro+ CPUs. |
+ * |
+ * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com> |
+ */ |
+ |
+/* |
+ * PGDIR_SHIFT determines what a top-level page table entry can map |
+ */ |
+#define PGDIR_SHIFT 30 |
+#define PTRS_PER_PGD 4 |
+ |
+/* |
+ * PMD_SHIFT determines the size of the area a middle-level |
+ * page table can map |
+ */ |
+#define PMD_SHIFT 21 |
+#define PTRS_PER_PMD 512 |
+ |
+/* |
+ * entries per page directory level |
+ */ |
+#define PTRS_PER_PTE 512 |
+ |
+#define pte_ERROR(e) \ |
+ printk("%s:%d: bad pte %p(%08lx%08lx).\n", __FILE__, __LINE__, &(e), (e).pte_high, (e).pte_low) |
+#define pmd_ERROR(e) \ |
+ printk("%s:%d: bad pmd %p(%016Lx).\n", __FILE__, __LINE__, &(e), pmd_val(e)) |
+#define pgd_ERROR(e) \ |
+ printk("%s:%d: bad pgd %p(%016Lx).\n", __FILE__, __LINE__, &(e), pgd_val(e)) |
+ |
+static inline int pgd_none(pgd_t pgd) { return 0; } |
+static inline int pgd_bad(pgd_t pgd) { return 0; } |
+static inline int pgd_present(pgd_t pgd) { return 1; } |
+ |
+/* Rules for using set_pte: the pte being assigned *must* be |
+ * either not present or in a state where the hardware will |
+ * not attempt to update the pte. In places where this is |
+ * not possible, use pte_get_and_clear to obtain the old pte |
+ * value and then use set_pte to update it. -ben |
+ */ |
+static inline void set_pte(pte_t *ptep, pte_t pte) |
+{ |
+ ptep->pte_high = pte.pte_high; |
+ smp_wmb(); |
+ ptep->pte_low = pte.pte_low; |
+} |
+#define set_pte_atomic(pteptr,pteval) \ |
+ set_64bit((unsigned long long *)(pteptr),pte_val(pteval)) |
+#define set_pmd(pmdptr,pmdval) \ |
+ set_64bit((unsigned long long *)(pmdptr),pmd_val(pmdval)) |
+#define set_pgd(pgdptr,pgdval) \ |
+ set_64bit((unsigned long long *)(pgdptr),pgd_val(pgdval)) |
+ |
+/* |
+ * Pentium-II erratum A13: in PAE mode we explicitly have to flush |
+ * the TLB via cr3 if the top-level pgd is changed... |
+ * We do not let the generic code free and clear pgd entries due to |
+ * this erratum. |
+ */ |
+static inline void pgd_clear (pgd_t * pgd) { } |
+ |
+#define pgd_page(pgd) \ |
+((unsigned long) __va(pgd_val(pgd) & PAGE_MASK)) |
+ |
+/* Find an entry in the second-level page table.. */ |
+#define pmd_offset(dir, address) ((pmd_t *) pgd_page(*(dir)) + \ |
+ pmd_index(address)) |
+ |
+static inline pte_t ptep_get_and_clear(pte_t *ptep) |
+{ |
+ pte_t res; |
+ |
+ /* xchg acts as a barrier before the setting of the high bits */ |
+ res.pte_low = xchg(&ptep->pte_low, 0); |
+ res.pte_high = ptep->pte_high; |
+ ptep->pte_high = 0; |
+ |
+ return res; |
+} |
+ |
+static inline int pte_same(pte_t a, pte_t b) |
+{ |
+ return a.pte_low == b.pte_low && a.pte_high == b.pte_high; |
+} |
+ |
+#define pte_page(x) pfn_to_page(pte_pfn(x)) |
+ |
+static inline int pte_none(pte_t pte) |
+{ |
+ return !pte.pte_low && !pte.pte_high; |
+} |
+ |
+static inline unsigned long pte_pfn(pte_t pte) |
+{ |
+ return (pte.pte_low >> PAGE_SHIFT) | |
+ (pte.pte_high << (32 - PAGE_SHIFT)); |
+} |
+ |
+static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot) |
+{ |
+ pte_t pte; |
+ |
+ pte.pte_high = page_nr >> (32 - PAGE_SHIFT); |
+ pte.pte_low = (page_nr << PAGE_SHIFT) | pgprot_val(pgprot); |
+ return pte; |
+} |
+ |
+static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot) |
+{ |
+ return __pmd(((unsigned long long)page_nr << PAGE_SHIFT) | pgprot_val(pgprot)); |
+} |
+ |
+/* |
+ * Bits 0, 6 and 7 are taken in the low part of the pte, |
+ * put the 32 bits of offset into the high part. |
+ */ |
+#define pte_to_pgoff(pte) ((pte).pte_high) |
+#define pgoff_to_pte(off) ((pte_t) { _PAGE_FILE, (off) }) |
+#define PTE_FILE_MAX_BITS 32 |
+ |
+#endif /* _I386_PGTABLE_3LEVEL_H */ |
Index: linuxc26/include/asm/ipcbuf.h |
=================================================================== |
--- linuxc26/include/asm/ipcbuf.h (nonexistent) |
+++ linuxc26/include/asm/ipcbuf.h (revision 422) |
@@ -0,0 +1,29 @@ |
+#ifndef __i386_IPCBUF_H__ |
+#define __i386_IPCBUF_H__ |
+ |
+/* |
+ * The ipc64_perm structure for i386 architecture. |
+ * Note extra padding because this structure is passed back and forth |
+ * between kernel and user space. |
+ * |
+ * Pad space is left for: |
+ * - 32-bit mode_t and seq |
+ * - 2 miscellaneous 32-bit values |
+ */ |
+ |
+struct ipc64_perm |
+{ |
+ __kernel_key_t key; |
+ __kernel_uid32_t uid; |
+ __kernel_gid32_t gid; |
+ __kernel_uid32_t cuid; |
+ __kernel_gid32_t cgid; |
+ __kernel_mode_t mode; |
+ unsigned short __pad1; |
+ unsigned short seq; |
+ unsigned short __pad2; |
+ unsigned long __unused1; |
+ unsigned long __unused2; |
+}; |
+ |
+#endif /* __i386_IPCBUF_H__ */ |
Index: linuxc26/include/asm/pci.h |
=================================================================== |
--- linuxc26/include/asm/pci.h (nonexistent) |
+++ linuxc26/include/asm/pci.h (revision 422) |
@@ -0,0 +1,99 @@ |
+#ifndef __i386_PCI_H |
+#define __i386_PCI_H |
+ |
+#include <linux/config.h> |
+ |
+#ifdef __KERNEL__ |
+#include <linux/mm.h> /* for struct page */ |
+ |
+/* Can be used to override the logic in pci_scan_bus for skipping |
+ already-configured bus numbers - to be used for buggy BIOSes |
+ or architectures with incomplete PCI setup by the loader */ |
+ |
+#ifdef CONFIG_PCI |
+extern unsigned int pcibios_assign_all_busses(void); |
+#else |
+#define pcibios_assign_all_busses() 0 |
+#endif |
+ |
+extern unsigned long pci_mem_start; |
+#define PCIBIOS_MIN_IO 0x1000 |
+#define PCIBIOS_MIN_MEM (pci_mem_start) |
+ |
+#define PCIBIOS_MIN_CARDBUS_IO 0x4000 |
+ |
+void pcibios_config_init(void); |
+struct pci_bus * pcibios_scan_root(int bus); |
+ |
+void pcibios_set_master(struct pci_dev *dev); |
+void pcibios_penalize_isa_irq(int irq); |
+struct irq_routing_table *pcibios_get_irq_routing_table(void); |
+int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq); |
+ |
+/* Dynamic DMA mapping stuff. |
+ * i386 has everything mapped statically. |
+ */ |
+ |
+#include <linux/types.h> |
+#include <linux/slab.h> |
+#include <asm/scatterlist.h> |
+#include <linux/string.h> |
+#include <asm/io.h> |
+ |
+struct pci_dev; |
+ |
+/* The PCI address space does equal the physical memory |
+ * address space. The networking and block device layers use |
+ * this boolean for bounce buffer decisions. |
+ */ |
+#define PCI_DMA_BUS_IS_PHYS (1) |
+ |
+/* pci_unmap_{page,single} is a nop so... */ |
+#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) |
+#define DECLARE_PCI_UNMAP_LEN(LEN_NAME) |
+#define pci_unmap_addr(PTR, ADDR_NAME) (0) |
+#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0) |
+#define pci_unmap_len(PTR, LEN_NAME) (0) |
+#define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) |
+ |
+/* This is always fine. */ |
+#define pci_dac_dma_supported(pci_dev, mask) (1) |
+ |
+static __inline__ dma64_addr_t |
+pci_dac_page_to_dma(struct pci_dev *pdev, struct page *page, unsigned long offset, int direction) |
+{ |
+ return ((dma64_addr_t) page_to_phys(page) + |
+ (dma64_addr_t) offset); |
+} |
+ |
+static __inline__ struct page * |
+pci_dac_dma_to_page(struct pci_dev *pdev, dma64_addr_t dma_addr) |
+{ |
+ return pfn_to_page(dma_addr >> PAGE_SHIFT); |
+} |
+ |
+static __inline__ unsigned long |
+pci_dac_dma_to_offset(struct pci_dev *pdev, dma64_addr_t dma_addr) |
+{ |
+ return (dma_addr & ~PAGE_MASK); |
+} |
+ |
+static __inline__ void |
+pci_dac_dma_sync_single(struct pci_dev *pdev, dma64_addr_t dma_addr, size_t len, int direction) |
+{ |
+ flush_write_buffers(); |
+} |
+ |
+#define HAVE_PCI_MMAP |
+extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, |
+ enum pci_mmap_state mmap_state, int write_combine); |
+ |
+#endif /* __KERNEL__ */ |
+ |
+/* implement the pci_ DMA API in terms of the generic device dma_ one */ |
+#include <asm-generic/pci-dma-compat.h> |
+ |
+/* generic pci stuff */ |
+#include <asm-generic/pci.h> |
+ |
+#endif /* __i386_PCI_H */ |
Index: linuxc26/include/asm/signal.h |
=================================================================== |
--- linuxc26/include/asm/signal.h (nonexistent) |
+++ linuxc26/include/asm/signal.h (revision 422) |
@@ -0,0 +1,225 @@ |
+#ifndef _ASMi386_SIGNAL_H |
+#define _ASMi386_SIGNAL_H |
+ |
+#include <linux/types.h> |
+#include <linux/linkage.h> |
+#include <linux/time.h> |
+ |
+/* Avoid too many header ordering problems. */ |
+struct siginfo; |
+ |
+#ifdef __KERNEL__ |
+/* Most things should be clean enough to redefine this at will, if care |
+ is taken to make libc match. */ |
+ |
+#define _NSIG 64 |
+#define _NSIG_BPW 32 |
+#define _NSIG_WORDS (_NSIG / _NSIG_BPW) |
+ |
+typedef unsigned long old_sigset_t; /* at least 32 bits */ |
+ |
+typedef struct { |
+ unsigned long sig[_NSIG_WORDS]; |
+} sigset_t; |
+ |
+#else |
+/* Here we must cater to libcs that poke about in kernel headers. */ |
+ |
+#define NSIG 32 |
+typedef unsigned long sigset_t; |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#define SIGHUP 1 |
+#define SIGINT 2 |
+#define SIGQUIT 3 |
+#define SIGILL 4 |
+#define SIGTRAP 5 |
+#define SIGABRT 6 |
+#define SIGIOT 6 |
+#define SIGBUS 7 |
+#define SIGFPE 8 |
+#define SIGKILL 9 |
+#define SIGUSR1 10 |
+#define SIGSEGV 11 |
+#define SIGUSR2 12 |
+#define SIGPIPE 13 |
+#define SIGALRM 14 |
+#define SIGTERM 15 |
+#define SIGSTKFLT 16 |
+#define SIGCHLD 17 |
+#define SIGCONT 18 |
+#define SIGSTOP 19 |
+#define SIGTSTP 20 |
+#define SIGTTIN 21 |
+#define SIGTTOU 22 |
+#define SIGURG 23 |
+#define SIGXCPU 24 |
+#define SIGXFSZ 25 |
+#define SIGVTALRM 26 |
+#define SIGPROF 27 |
+#define SIGWINCH 28 |
+#define SIGIO 29 |
+#define SIGPOLL SIGIO |
+/* |
+#define SIGLOST 29 |
+*/ |
+#define SIGPWR 30 |
+#define SIGSYS 31 |
+#define SIGUNUSED 31 |
+ |
+/* These should not be considered constants from userland. */ |
+#define SIGRTMIN 32 |
+#define SIGRTMAX _NSIG |
+ |
+/* |
+ * SA_FLAGS values: |
+ * |
+ * SA_ONSTACK indicates that a registered stack_t will be used. |
+ * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the |
+ * SA_RESTART flag to get restarting signals (which were the default long ago) |
+ * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. |
+ * SA_RESETHAND clears the handler when the signal is delivered. |
+ * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. |
+ * SA_NODEFER prevents the current signal from being masked in the handler. |
+ * |
+ * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single |
+ * Unix names RESETHAND and NODEFER respectively. |
+ */ |
+#define SA_NOCLDSTOP 0x00000001u |
+#define SA_NOCLDWAIT 0x00000002u |
+#define SA_SIGINFO 0x00000004u |
+#define SA_ONSTACK 0x08000000u |
+#define SA_RESTART 0x10000000u |
+#define SA_NODEFER 0x40000000u |
+#define SA_RESETHAND 0x80000000u |
+ |
+#define SA_NOMASK SA_NODEFER |
+#define SA_ONESHOT SA_RESETHAND |
+#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */ |
+ |
+#define SA_RESTORER 0x04000000 |
+ |
+/* |
+ * sigaltstack controls |
+ */ |
+#define SS_ONSTACK 1 |
+#define SS_DISABLE 2 |
+ |
+#define MINSIGSTKSZ 2048 |
+#define SIGSTKSZ 8192 |
+ |
+#ifdef __KERNEL__ |
+ |
+/* |
+ * These values of sa_flags are used only by the kernel as part of the |
+ * irq handling routines. |
+ * |
+ * SA_INTERRUPT is also used by the irq handling routines. |
+ * SA_SHIRQ is for shared interrupt support on PCI and EISA. |
+ */ |
+#define SA_PROBE SA_ONESHOT |
+#define SA_SAMPLE_RANDOM SA_RESTART |
+#define SA_SHIRQ 0x04000000 |
+#endif |
+ |
+#define SIG_BLOCK 0 /* for blocking signals */ |
+#define SIG_UNBLOCK 1 /* for unblocking signals */ |
+#define SIG_SETMASK 2 /* for setting the signal mask */ |
+ |
+/* Type of a signal handler. */ |
+typedef void (*__sighandler_t)(int); |
+ |
+#define SIG_DFL ((__sighandler_t)0) /* default signal handling */ |
+#define SIG_IGN ((__sighandler_t)1) /* ignore signal */ |
+#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */ |
+ |
+#ifdef __KERNEL__ |
+struct old_sigaction { |
+ __sighandler_t sa_handler; |
+ old_sigset_t sa_mask; |
+ unsigned long sa_flags; |
+ void (*sa_restorer)(void); |
+}; |
+ |
+struct sigaction { |
+ __sighandler_t sa_handler; |
+ unsigned long sa_flags; |
+ void (*sa_restorer)(void); |
+ sigset_t sa_mask; /* mask last for extensibility */ |
+}; |
+ |
+struct k_sigaction { |
+ struct sigaction sa; |
+}; |
+#else |
+/* Here we must cater to libcs that poke about in kernel headers. */ |
+ |
+struct sigaction { |
+ union { |
+ __sighandler_t _sa_handler; |
+ void (*_sa_sigaction)(int, struct siginfo *, void *); |
+ } _u; |
+ sigset_t sa_mask; |
+ unsigned long sa_flags; |
+ void (*sa_restorer)(void); |
+}; |
+ |
+#define sa_handler _u._sa_handler |
+#define sa_sigaction _u._sa_sigaction |
+ |
+#endif /* __KERNEL__ */ |
+ |
+typedef struct sigaltstack { |
+ void *ss_sp; |
+ int ss_flags; |
+ size_t ss_size; |
+} stack_t; |
+ |
+#ifdef __KERNEL__ |
+#include <asm/sigcontext.h> |
+ |
+#define __HAVE_ARCH_SIG_BITOPS |
+ |
+static __inline__ void sigaddset(sigset_t *set, int _sig) |
+{ |
+ __asm__("btsl %1,%0" : "=m"(*set) : "Ir"(_sig - 1) : "cc"); |
+} |
+ |
+static __inline__ void sigdelset(sigset_t *set, int _sig) |
+{ |
+ __asm__("btrl %1,%0" : "=m"(*set) : "Ir"(_sig - 1) : "cc"); |
+} |
+ |
+static __inline__ int __const_sigismember(sigset_t *set, int _sig) |
+{ |
+ unsigned long sig = _sig - 1; |
+ return 1 & (set->sig[sig / _NSIG_BPW] >> (sig % _NSIG_BPW)); |
+} |
+ |
+static __inline__ int __gen_sigismember(sigset_t *set, int _sig) |
+{ |
+ int ret; |
+ __asm__("btl %2,%1\n\tsbbl %0,%0" |
+ : "=r"(ret) : "m"(*set), "Ir"(_sig-1) : "cc"); |
+ return ret; |
+} |
+ |
+#define sigismember(set,sig) \ |
+ (__builtin_constant_p(sig) ? \ |
+ __const_sigismember((set),(sig)) : \ |
+ __gen_sigismember((set),(sig))) |
+ |
+static __inline__ int sigfindinword(unsigned long word) |
+{ |
+ __asm__("bsfl %1,%0" : "=r"(word) : "rm"(word) : "cc"); |
+ return word; |
+} |
+ |
+struct pt_regs; |
+extern int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset)); |
+#define ptrace_signal_deliver(regs, cookie) do { } while (0) |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif |
Index: linuxc26/include/asm/ptrace.h |
=================================================================== |
--- linuxc26/include/asm/ptrace.h (nonexistent) |
+++ linuxc26/include/asm/ptrace.h (revision 422) |
@@ -0,0 +1,62 @@ |
+#ifndef _I386_PTRACE_H |
+#define _I386_PTRACE_H |
+ |
+#define EBX 0 |
+#define ECX 1 |
+#define EDX 2 |
+#define ESI 3 |
+#define EDI 4 |
+#define EBP 5 |
+#define EAX 6 |
+#define DS 7 |
+#define ES 8 |
+#define FS 9 |
+#define GS 10 |
+#define ORIG_EAX 11 |
+#define EIP 12 |
+#define CS 13 |
+#define EFL 14 |
+#define UESP 15 |
+#define SS 16 |
+#define FRAME_SIZE 17 |
+ |
+/* this struct defines the way the registers are stored on the |
+ stack during a system call. */ |
+ |
+struct pt_regs { |
+ long ebx; |
+ long ecx; |
+ long edx; |
+ long esi; |
+ long edi; |
+ long ebp; |
+ long eax; |
+ int xds; |
+ int xes; |
+ long orig_eax; |
+ long eip; |
+ int xcs; |
+ long eflags; |
+ long esp; |
+ int xss; |
+}; |
+ |
+/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ |
+#define PTRACE_GETREGS 12 |
+#define PTRACE_SETREGS 13 |
+#define PTRACE_GETFPREGS 14 |
+#define PTRACE_SETFPREGS 15 |
+#define PTRACE_GETFPXREGS 18 |
+#define PTRACE_SETFPXREGS 19 |
+ |
+#define PTRACE_OLDSETOPTIONS 21 |
+ |
+#define PTRACE_GET_THREAD_AREA 25 |
+#define PTRACE_SET_THREAD_AREA 26 |
+ |
+#ifdef __KERNEL__ |
+#define user_mode(regs) ((VM_MASK & (regs)->eflags) || (3 & (regs)->xcs)) |
+#define instruction_pointer(regs) ((regs)->eip) |
+#endif |
+ |
+#endif |
Index: linuxc26/include/asm/highmem.h |
=================================================================== |
--- linuxc26/include/asm/highmem.h (nonexistent) |
+++ linuxc26/include/asm/highmem.h (revision 422) |
@@ -0,0 +1,70 @@ |
+/* |
+ * highmem.h: virtual kernel memory mappings for high memory |
+ * |
+ * Used in CONFIG_HIGHMEM systems for memory pages which |
+ * are not addressable by direct kernel virtual addresses. |
+ * |
+ * Copyright (C) 1999 Gerhard Wichert, Siemens AG |
+ * Gerhard.Wichert@pdb.siemens.de |
+ * |
+ * |
+ * Redesigned the x86 32-bit VM architecture to deal with |
+ * up to 16 Terabyte physical memory. With current x86 CPUs |
+ * we now support up to 64 Gigabytes physical RAM. |
+ * |
+ * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com> |
+ */ |
+ |
+#ifndef _ASM_HIGHMEM_H |
+#define _ASM_HIGHMEM_H |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/config.h> |
+#include <linux/interrupt.h> |
+#include <linux/threads.h> |
+#include <asm/kmap_types.h> |
+#include <asm/tlbflush.h> |
+ |
+/* declarations for highmem.c */ |
+extern unsigned long highstart_pfn, highend_pfn; |
+ |
+extern pte_t *kmap_pte; |
+extern pgprot_t kmap_prot; |
+extern pte_t *pkmap_page_table; |
+ |
+extern void kmap_init(void); |
+ |
+/* |
+ * Right now we initialize only a single pte table. It can be extended |
+ * easily, subsequent pte tables have to be allocated in one physical |
+ * chunk of RAM. |
+ */ |
+#if NR_CPUS <= 32 |
+#define PKMAP_BASE (0xff800000UL) |
+#else |
+#define PKMAP_BASE (0xff600000UL) |
+#endif |
+#ifdef CONFIG_X86_PAE |
+#define LAST_PKMAP 512 |
+#else |
+#define LAST_PKMAP 1024 |
+#endif |
+#define LAST_PKMAP_MASK (LAST_PKMAP-1) |
+#define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT) |
+#define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) |
+ |
+extern void * FASTCALL(kmap_high(struct page *page)); |
+extern void FASTCALL(kunmap_high(struct page *page)); |
+ |
+void *kmap(struct page *page); |
+void kunmap(struct page *page); |
+void *kmap_atomic(struct page *page, enum km_type type); |
+void kunmap_atomic(void *kvaddr, enum km_type type); |
+struct page *kmap_atomic_to_page(void *ptr); |
+ |
+#define flush_cache_kmaps() do { } while (0) |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* _ASM_HIGHMEM_H */ |
Index: linuxc26/include/asm/timer.h |
=================================================================== |
--- linuxc26/include/asm/timer.h (nonexistent) |
+++ linuxc26/include/asm/timer.h (revision 422) |
@@ -0,0 +1,47 @@ |
+#ifndef _ASMi386_TIMER_H |
+#define _ASMi386_TIMER_H |
+ |
+/** |
+ * struct timer_ops - used to define a timer source |
+ * |
+ * @init: Probes and initializes the timer. Takes clock= override |
+ * string as an argument. Returns 0 on success, anything else on failure. |
+ * @mark_offset: called by the timer interrupt |
+ * @get_offset: called by gettimeofday(). Returns the number of ms since the |
+ * last timer intruupt. |
+ */ |
+struct timer_opts{ |
+ int (*init)(char *override); |
+ void (*mark_offset)(void); |
+ unsigned long (*get_offset)(void); |
+ unsigned long long (*monotonic_clock)(void); |
+ void (*delay)(unsigned long); |
+}; |
+ |
+#define TICK_SIZE (tick_nsec / 1000) |
+ |
+extern struct timer_opts* select_timer(void); |
+extern void clock_fallback(void); |
+ |
+/* Modifiers for buggy PIT handling */ |
+ |
+extern int pit_latch_buggy; |
+ |
+extern struct timer_opts *cur_timer; |
+extern int timer_ack; |
+ |
+/* list of externed timers */ |
+extern struct timer_opts timer_none; |
+extern struct timer_opts timer_pit; |
+extern struct timer_opts timer_tsc; |
+#ifdef CONFIG_X86_CYCLONE_TIMER |
+extern struct timer_opts timer_cyclone; |
+#endif |
+ |
+extern unsigned long calibrate_tsc(void); |
+#ifdef CONFIG_HPET_TIMER |
+extern struct timer_opts timer_hpet; |
+extern unsigned long calibrate_tsc_hpet(unsigned long *tsc_hpet_quotient_ptr); |
+#endif |
+ |
+#endif |
Index: linuxc26/include/asm/pgalloc.h |
=================================================================== |
--- linuxc26/include/asm/pgalloc.h (nonexistent) |
+++ linuxc26/include/asm/pgalloc.h (revision 422) |
@@ -0,0 +1,55 @@ |
+#ifndef _I386_PGALLOC_H |
+#define _I386_PGALLOC_H |
+ |
+#include <linux/config.h> |
+#include <asm/processor.h> |
+#include <asm/fixmap.h> |
+#include <linux/threads.h> |
+#include <linux/mm.h> /* for struct page */ |
+ |
+#define pmd_populate_kernel(mm, pmd, pte) \ |
+ set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(pte))) |
+ |
+static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *pte) |
+{ |
+ set_pmd(pmd, __pmd(_PAGE_TABLE + |
+ ((unsigned long long)page_to_pfn(pte) << |
+ (unsigned long long) PAGE_SHIFT))); |
+} |
+/* |
+ * Allocate and free page tables. |
+ */ |
+ |
+extern pgd_t *pgd_alloc(struct mm_struct *); |
+extern void pgd_free(pgd_t *pgd); |
+ |
+extern pte_t *pte_alloc_one_kernel(struct mm_struct *, unsigned long); |
+extern struct page *pte_alloc_one(struct mm_struct *, unsigned long); |
+ |
+static inline void pte_free_kernel(pte_t *pte) |
+{ |
+ free_page((unsigned long)pte); |
+} |
+ |
+static inline void pte_free(struct page *pte) |
+{ |
+ __free_page(pte); |
+} |
+ |
+ |
+#define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte)) |
+ |
+/* |
+ * allocating and freeing a pmd is trivial: the 1-entry pmd is |
+ * inside the pgd, so has no extra memory associated with it. |
+ * (In the PAE case we free the pmds as part of the pgd.) |
+ */ |
+ |
+#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); }) |
+#define pmd_free(x) do { } while (0) |
+#define __pmd_free_tlb(tlb,x) do { } while (0) |
+#define pgd_populate(mm, pmd, pte) BUG() |
+ |
+#define check_pgt_cache() do { } while (0) |
+ |
+#endif /* _I386_PGALLOC_H */ |
Index: linuxc26/include/asm/mca_dma.h |
=================================================================== |
--- linuxc26/include/asm/mca_dma.h (nonexistent) |
+++ linuxc26/include/asm/mca_dma.h (revision 422) |
@@ -0,0 +1,202 @@ |
+#ifndef MCA_DMA_H |
+#define MCA_DMA_H |
+ |
+#include <asm/io.h> |
+#include <linux/ioport.h> |
+ |
+/* |
+ * Microchannel specific DMA stuff. DMA on an MCA machine is fairly similar to |
+ * standard PC dma, but it certainly has its quirks. DMA register addresses |
+ * are in a different place and there are some added functions. Most of this |
+ * should be pretty obvious on inspection. Note that the user must divide |
+ * count by 2 when using 16-bit dma; that is not handled by these functions. |
+ * |
+ * Ramen Noodles are yummy. |
+ * |
+ * 1998 Tymm Twillman <tymm@computer.org> |
+ */ |
+ |
+/* |
+ * Registers that are used by the DMA controller; FN is the function register |
+ * (tell the controller what to do) and EXE is the execution register (how |
+ * to do it) |
+ */ |
+ |
+#define MCA_DMA_REG_FN 0x18 |
+#define MCA_DMA_REG_EXE 0x1A |
+ |
+/* |
+ * Functions that the DMA controller can do |
+ */ |
+ |
+#define MCA_DMA_FN_SET_IO 0x00 |
+#define MCA_DMA_FN_SET_ADDR 0x20 |
+#define MCA_DMA_FN_GET_ADDR 0x30 |
+#define MCA_DMA_FN_SET_COUNT 0x40 |
+#define MCA_DMA_FN_GET_COUNT 0x50 |
+#define MCA_DMA_FN_GET_STATUS 0x60 |
+#define MCA_DMA_FN_SET_MODE 0x70 |
+#define MCA_DMA_FN_SET_ARBUS 0x80 |
+#define MCA_DMA_FN_MASK 0x90 |
+#define MCA_DMA_FN_RESET_MASK 0xA0 |
+#define MCA_DMA_FN_MASTER_CLEAR 0xD0 |
+ |
+/* |
+ * Modes (used by setting MCA_DMA_FN_MODE in the function register) |
+ * |
+ * Note that the MODE_READ is read from memory (write to device), and |
+ * MODE_WRITE is vice-versa. |
+ */ |
+ |
+#define MCA_DMA_MODE_XFER 0x04 /* read by default */ |
+#define MCA_DMA_MODE_READ 0x04 /* same as XFER */ |
+#define MCA_DMA_MODE_WRITE 0x08 /* OR with MODE_XFER to use */ |
+#define MCA_DMA_MODE_IO 0x01 /* DMA from IO register */ |
+#define MCA_DMA_MODE_16 0x40 /* 16 bit xfers */ |
+ |
+ |
+/** |
+ * mca_enable_dma - channel to enable DMA on |
+ * @dmanr: DMA channel |
+ * |
+ * Enable the MCA bus DMA on a channel. This can be called from |
+ * IRQ context. |
+ */ |
+ |
+static __inline__ void mca_enable_dma(unsigned int dmanr) |
+{ |
+ outb(MCA_DMA_FN_RESET_MASK | dmanr, MCA_DMA_REG_FN); |
+} |
+ |
+/** |
+ * mca_disble_dma - channel to disable DMA on |
+ * @dmanr: DMA channel |
+ * |
+ * Enable the MCA bus DMA on a channel. This can be called from |
+ * IRQ context. |
+ */ |
+ |
+static __inline__ void mca_disable_dma(unsigned int dmanr) |
+{ |
+ outb(MCA_DMA_FN_MASK | dmanr, MCA_DMA_REG_FN); |
+} |
+ |
+/** |
+ * mca_set_dma_addr - load a 24bit DMA address |
+ * @dmanr: DMA channel |
+ * @a: 24bit bus address |
+ * |
+ * Load the address register in the DMA controller. This has a 24bit |
+ * limitation (16Mb). |
+ */ |
+ |
+static __inline__ void mca_set_dma_addr(unsigned int dmanr, unsigned int a) |
+{ |
+ outb(MCA_DMA_FN_SET_ADDR | dmanr, MCA_DMA_REG_FN); |
+ outb(a & 0xff, MCA_DMA_REG_EXE); |
+ outb((a >> 8) & 0xff, MCA_DMA_REG_EXE); |
+ outb((a >> 16) & 0xff, MCA_DMA_REG_EXE); |
+} |
+ |
+/** |
+ * mca_get_dma_addr - load a 24bit DMA address |
+ * @dmanr: DMA channel |
+ * |
+ * Read the address register in the DMA controller. This has a 24bit |
+ * limitation (16Mb). The return is a bus address. |
+ */ |
+ |
+static __inline__ unsigned int mca_get_dma_addr(unsigned int dmanr) |
+{ |
+ unsigned int addr; |
+ |
+ outb(MCA_DMA_FN_GET_ADDR | dmanr, MCA_DMA_REG_FN); |
+ addr = inb(MCA_DMA_REG_EXE); |
+ addr |= inb(MCA_DMA_REG_EXE) << 8; |
+ addr |= inb(MCA_DMA_REG_EXE) << 16; |
+ |
+ return addr; |
+} |
+ |
+/** |
+ * mca_set_dma_count - load a 16bit transfer count |
+ * @dmanr: DMA channel |
+ * @count: count |
+ * |
+ * Set the DMA count for this channel. This can be up to 64Kbytes. |
+ * Setting a count of zero will not do what you expect. |
+ */ |
+ |
+static __inline__ void mca_set_dma_count(unsigned int dmanr, unsigned int count) |
+{ |
+ count--; /* transfers one more than count -- correct for this */ |
+ |
+ outb(MCA_DMA_FN_SET_COUNT | dmanr, MCA_DMA_REG_FN); |
+ outb(count & 0xff, MCA_DMA_REG_EXE); |
+ outb((count >> 8) & 0xff, MCA_DMA_REG_EXE); |
+} |
+ |
+/** |
+ * mca_get_dma_residue - get the remaining bytes to transfer |
+ * @dmanr: DMA channel |
+ * |
+ * This function returns the number of bytes left to transfer |
+ * on this DMA channel. |
+ */ |
+ |
+static __inline__ unsigned int mca_get_dma_residue(unsigned int dmanr) |
+{ |
+ unsigned short count; |
+ |
+ outb(MCA_DMA_FN_GET_COUNT | dmanr, MCA_DMA_REG_FN); |
+ count = 1 + inb(MCA_DMA_REG_EXE); |
+ count += inb(MCA_DMA_REG_EXE) << 8; |
+ |
+ return count; |
+} |
+ |
+/** |
+ * mca_set_dma_io - set the port for an I/O transfer |
+ * @dmanr: DMA channel |
+ * @io_addr: an I/O port number |
+ * |
+ * Unlike the ISA bus DMA controllers the DMA on MCA bus can transfer |
+ * with an I/O port target. |
+ */ |
+ |
+static __inline__ void mca_set_dma_io(unsigned int dmanr, unsigned int io_addr) |
+{ |
+ /* |
+ * DMA from a port address -- set the io address |
+ */ |
+ |
+ outb(MCA_DMA_FN_SET_IO | dmanr, MCA_DMA_REG_FN); |
+ outb(io_addr & 0xff, MCA_DMA_REG_EXE); |
+ outb((io_addr >> 8) & 0xff, MCA_DMA_REG_EXE); |
+} |
+ |
+/** |
+ * mca_set_dma_mode - set the DMA mode |
+ * @dmanr: DMA channel |
+ * @mode: mode to set |
+ * |
+ * The DMA controller supports several modes. The mode values you can |
+ * set are : |
+ * |
+ * %MCA_DMA_MODE_READ when reading from the DMA device. |
+ * |
+ * %MCA_DMA_MODE_WRITE to writing to the DMA device. |
+ * |
+ * %MCA_DMA_MODE_IO to do DMA to or from an I/O port. |
+ * |
+ * %MCA_DMA_MODE_16 to do 16bit transfers. |
+ * |
+ */ |
+ |
+static __inline__ void mca_set_dma_mode(unsigned int dmanr, unsigned int mode) |
+{ |
+ outb(MCA_DMA_FN_SET_MODE | dmanr, MCA_DMA_REG_FN); |
+ outb(mode, MCA_DMA_REG_EXE); |
+} |
+ |
+#endif /* MCA_DMA_H */ |
Index: linuxc26/include/asm/shmbuf.h |
=================================================================== |
--- linuxc26/include/asm/shmbuf.h (nonexistent) |
+++ linuxc26/include/asm/shmbuf.h (revision 422) |
@@ -0,0 +1,42 @@ |
+#ifndef _I386_SHMBUF_H |
+#define _I386_SHMBUF_H |
+ |
+/* |
+ * The shmid64_ds structure for i386 architecture. |
+ * Note extra padding because this structure is passed back and forth |
+ * between kernel and user space. |
+ * |
+ * Pad space is left for: |
+ * - 64-bit time_t to solve y2038 problem |
+ * - 2 miscellaneous 32-bit values |
+ */ |
+ |
+struct shmid64_ds { |
+ struct ipc64_perm shm_perm; /* operation perms */ |
+ size_t shm_segsz; /* size of segment (bytes) */ |
+ __kernel_time_t shm_atime; /* last attach time */ |
+ unsigned long __unused1; |
+ __kernel_time_t shm_dtime; /* last detach time */ |
+ unsigned long __unused2; |
+ __kernel_time_t shm_ctime; /* last change time */ |
+ unsigned long __unused3; |
+ __kernel_pid_t shm_cpid; /* pid of creator */ |
+ __kernel_pid_t shm_lpid; /* pid of last operator */ |
+ unsigned long shm_nattch; /* no. of current attaches */ |
+ unsigned long __unused4; |
+ unsigned long __unused5; |
+}; |
+ |
+struct shminfo64 { |
+ unsigned long shmmax; |
+ unsigned long shmmin; |
+ unsigned long shmmni; |
+ unsigned long shmseg; |
+ unsigned long shmall; |
+ unsigned long __unused1; |
+ unsigned long __unused2; |
+ unsigned long __unused3; |
+ unsigned long __unused4; |
+}; |
+ |
+#endif /* _I386_SHMBUF_H */ |
Index: linuxc26/include/asm/node.h |
=================================================================== |
--- linuxc26/include/asm/node.h (nonexistent) |
+++ linuxc26/include/asm/node.h (revision 422) |
@@ -0,0 +1,24 @@ |
+#ifndef _ASM_I386_NODE_H_ |
+#define _ASM_I386_NODE_H_ |
+ |
+#include <linux/device.h> |
+#include <linux/mmzone.h> |
+#include <linux/node.h> |
+#include <linux/topology.h> |
+ |
+struct i386_node { |
+ struct node node; |
+}; |
+extern struct i386_node node_devices[MAX_NUMNODES]; |
+ |
+static inline int arch_register_node(int num){ |
+ int p_node = parent_node(num); |
+ struct node *parent = NULL; |
+ |
+ if (p_node != num) |
+ parent = &node_devices[p_node].node; |
+ |
+ return register_node(&node_devices[num].node, num, parent); |
+} |
+ |
+#endif /* _ASM_I386_NODE_H_ */ |
Index: linuxc26/include/asm/posix_types.h |
=================================================================== |
--- linuxc26/include/asm/posix_types.h (nonexistent) |
+++ linuxc26/include/asm/posix_types.h (revision 422) |
@@ -0,0 +1,82 @@ |
+#ifndef __ARCH_I386_POSIX_TYPES_H |
+#define __ARCH_I386_POSIX_TYPES_H |
+ |
+/* |
+ * This file is generally used by user-level software, so you need to |
+ * be a little careful about namespace pollution etc. Also, we cannot |
+ * assume GCC is being used. |
+ */ |
+ |
+typedef unsigned long __kernel_ino_t; |
+typedef unsigned short __kernel_mode_t; |
+typedef unsigned short __kernel_nlink_t; |
+typedef long __kernel_off_t; |
+typedef int __kernel_pid_t; |
+typedef unsigned short __kernel_ipc_pid_t; |
+typedef unsigned short __kernel_uid_t; |
+typedef unsigned short __kernel_gid_t; |
+typedef unsigned int __kernel_size_t; |
+typedef int __kernel_ssize_t; |
+typedef int __kernel_ptrdiff_t; |
+typedef long __kernel_time_t; |
+typedef long __kernel_suseconds_t; |
+typedef long __kernel_clock_t; |
+typedef int __kernel_timer_t; |
+typedef int __kernel_clockid_t; |
+typedef int __kernel_daddr_t; |
+typedef char * __kernel_caddr_t; |
+typedef unsigned short __kernel_uid16_t; |
+typedef unsigned short __kernel_gid16_t; |
+typedef unsigned int __kernel_uid32_t; |
+typedef unsigned int __kernel_gid32_t; |
+ |
+typedef unsigned short __kernel_old_uid_t; |
+typedef unsigned short __kernel_old_gid_t; |
+typedef unsigned short __kernel_old_dev_t; |
+ |
+#ifdef __GNUC__ |
+typedef long long __kernel_loff_t; |
+#endif |
+ |
+typedef struct { |
+#if defined(__KERNEL__) || defined(__USE_ALL) |
+ int val[2]; |
+#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */ |
+ int __val[2]; |
+#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */ |
+} __kernel_fsid_t; |
+ |
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) |
+ |
+#undef __FD_SET |
+#define __FD_SET(fd,fdsetp) \ |
+ __asm__ __volatile__("btsl %1,%0": \ |
+ "=m" (*(__kernel_fd_set *) (fdsetp)):"r" ((int) (fd))) |
+ |
+#undef __FD_CLR |
+#define __FD_CLR(fd,fdsetp) \ |
+ __asm__ __volatile__("btrl %1,%0": \ |
+ "=m" (*(__kernel_fd_set *) (fdsetp)):"r" ((int) (fd))) |
+ |
+#undef __FD_ISSET |
+#define __FD_ISSET(fd,fdsetp) (__extension__ ({ \ |
+ unsigned char __result; \ |
+ __asm__ __volatile__("btl %1,%2 ; setb %0" \ |
+ :"=q" (__result) :"r" ((int) (fd)), \ |
+ "m" (*(__kernel_fd_set *) (fdsetp))); \ |
+ __result; })) |
+ |
+#undef __FD_ZERO |
+#define __FD_ZERO(fdsetp) \ |
+do { \ |
+ int __d0, __d1; \ |
+ __asm__ __volatile__("cld ; rep ; stosl" \ |
+ :"=m" (*(__kernel_fd_set *) (fdsetp)), \ |
+ "=&c" (__d0), "=&D" (__d1) \ |
+ :"a" (0), "1" (__FDSET_LONGS), \ |
+ "2" ((__kernel_fd_set *) (fdsetp)) : "memory"); \ |
+} while (0) |
+ |
+#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */ |
+ |
+#endif |
Index: linuxc26/include/asm/parport.h |
=================================================================== |
--- linuxc26/include/asm/parport.h (nonexistent) |
+++ linuxc26/include/asm/parport.h (revision 422) |
@@ -0,0 +1,18 @@ |
+/* |
+ * parport.h: ia32-specific parport initialisation |
+ * |
+ * Copyright (C) 1999, 2000 Tim Waugh <tim@cyberelk.demon.co.uk> |
+ * |
+ * This file should only be included by drivers/parport/parport_pc.c. |
+ */ |
+ |
+#ifndef _ASM_I386_PARPORT_H |
+#define _ASM_I386_PARPORT_H 1 |
+ |
+static int __devinit parport_pc_find_isa_ports (int autoirq, int autodma); |
+static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma) |
+{ |
+ return parport_pc_find_isa_ports (autoirq, autodma); |
+} |
+ |
+#endif /* !(_ASM_I386_PARPORT_H) */ |
Index: linuxc26/include/asm/socket.h |
=================================================================== |
--- linuxc26/include/asm/socket.h (nonexistent) |
+++ linuxc26/include/asm/socket.h (revision 422) |
@@ -0,0 +1,64 @@ |
+#ifndef _ASM_SOCKET_H |
+#define _ASM_SOCKET_H |
+ |
+#include <asm/sockios.h> |
+ |
+/* For setsockopt(2) */ |
+#define SOL_SOCKET 1 |
+ |
+#define SO_DEBUG 1 |
+#define SO_REUSEADDR 2 |
+#define SO_TYPE 3 |
+#define SO_ERROR 4 |
+#define SO_DONTROUTE 5 |
+#define SO_BROADCAST 6 |
+#define SO_SNDBUF 7 |
+#define SO_RCVBUF 8 |
+#define SO_KEEPALIVE 9 |
+#define SO_OOBINLINE 10 |
+#define SO_NO_CHECK 11 |
+#define SO_PRIORITY 12 |
+#define SO_LINGER 13 |
+#define SO_BSDCOMPAT 14 |
+/* To add :#define SO_REUSEPORT 15 */ |
+#define SO_PASSCRED 16 |
+#define SO_PEERCRED 17 |
+#define SO_RCVLOWAT 18 |
+#define SO_SNDLOWAT 19 |
+#define SO_RCVTIMEO 20 |
+#define SO_SNDTIMEO 21 |
+ |
+/* Security levels - as per NRL IPv6 - don't actually do anything */ |
+#define SO_SECURITY_AUTHENTICATION 22 |
+#define SO_SECURITY_ENCRYPTION_TRANSPORT 23 |
+#define SO_SECURITY_ENCRYPTION_NETWORK 24 |
+ |
+#define SO_BINDTODEVICE 25 |
+ |
+/* Socket filtering */ |
+#define SO_ATTACH_FILTER 26 |
+#define SO_DETACH_FILTER 27 |
+ |
+#define SO_PEERNAME 28 |
+#define SO_TIMESTAMP 29 |
+#define SCM_TIMESTAMP SO_TIMESTAMP |
+ |
+#define SO_ACCEPTCONN 30 |
+ |
+/* Nasty libc5 fixup - bletch */ |
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) |
+/* Socket types. */ |
+#define SOCK_STREAM 1 /* stream (connection) socket */ |
+#define SOCK_DGRAM 2 /* datagram (conn.less) socket */ |
+#define SOCK_RAW 3 /* raw socket */ |
+#define SOCK_RDM 4 /* reliably-delivered message */ |
+#define SOCK_SEQPACKET 5 /* sequential packet socket */ |
+#define SOCK_PACKET 10 /* linux specific way of */ |
+ /* getting packets at the dev */ |
+ /* level. For writing rarp and */ |
+ /* other similar things on the */ |
+ /* user level. */ |
+#define SOCK_MAX (SOCK_PACKET+1) |
+#endif |
+ |
+#endif /* _ASM_SOCKET_H */ |
Index: linuxc26/include/linuxcomp.h |
=================================================================== |
--- linuxc26/include/linuxcomp.h (nonexistent) |
+++ linuxc26/include/linuxcomp.h (revision 422) |
@@ -0,0 +1,15 @@ |
+#ifndef __LINUX_COMP__ |
+#define __LINUX_COMP__ |
+ |
+#define CONFIG_M386 |
+ |
+#define va_list void* |
+ |
+#define CONFIG_X86_L1_CACHE_SHIFT 6 |
+ |
+#define CONFIG_X86_CMPXCHG |
+ |
+#define NR_IRQS 15 |
+#define NR_IRQ_VECTORS 15 |
+ |
+#endif |
Index: linuxc26/include/asm-generic/dma-mapping.h |
=================================================================== |
--- linuxc26/include/asm-generic/dma-mapping.h (nonexistent) |
+++ linuxc26/include/asm-generic/dma-mapping.h (revision 422) |
@@ -0,0 +1,157 @@ |
+/* Copyright (C) 2002 by James.Bottomley@HansenPartnership.com |
+ * |
+ * Implements the generic device dma API via the existing pci_ one |
+ * for unconverted architectures |
+ */ |
+ |
+#ifndef _ASM_GENERIC_DMA_MAPPING_H |
+#define _ASM_GENERIC_DMA_MAPPING_H |
+ |
+/* we implement the API below in terms of the existing PCI one, |
+ * so include it */ |
+#include <linux/pci.h> |
+/* need struct page definitions */ |
+#include <linux/mm.h> |
+ |
+static inline int |
+dma_supported(struct device *dev, u64 mask) |
+{ |
+ BUG_ON(dev->bus != &pci_bus_type); |
+ |
+ return pci_dma_supported(to_pci_dev(dev), mask); |
+} |
+ |
+static inline int |
+dma_set_mask(struct device *dev, u64 dma_mask) |
+{ |
+ BUG_ON(dev->bus != &pci_bus_type); |
+ |
+ return pci_set_dma_mask(to_pci_dev(dev), dma_mask); |
+} |
+ |
+static inline void * |
+dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, |
+ int flag) |
+{ |
+ BUG_ON(dev->bus != &pci_bus_type); |
+ |
+ return pci_alloc_consistent(to_pci_dev(dev), size, dma_handle); |
+} |
+ |
+static inline void |
+dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, |
+ dma_addr_t dma_handle) |
+{ |
+ BUG_ON(dev->bus != &pci_bus_type); |
+ |
+ pci_free_consistent(to_pci_dev(dev), size, cpu_addr, dma_handle); |
+} |
+ |
+static inline dma_addr_t |
+dma_map_single(struct device *dev, void *cpu_addr, size_t size, |
+ enum dma_data_direction direction) |
+{ |
+ BUG_ON(dev->bus != &pci_bus_type); |
+ |
+ return pci_map_single(to_pci_dev(dev), cpu_addr, size, (int)direction); |
+} |
+ |
+static inline void |
+dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, |
+ enum dma_data_direction direction) |
+{ |
+ BUG_ON(dev->bus != &pci_bus_type); |
+ |
+ pci_unmap_single(to_pci_dev(dev), dma_addr, size, (int)direction); |
+} |
+ |
+static inline dma_addr_t |
+dma_map_page(struct device *dev, struct page *page, |
+ unsigned long offset, size_t size, |
+ enum dma_data_direction direction) |
+{ |
+ BUG_ON(dev->bus != &pci_bus_type); |
+ |
+ return pci_map_page(to_pci_dev(dev), page, offset, size, (int)direction); |
+} |
+ |
+static inline void |
+dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, |
+ enum dma_data_direction direction) |
+{ |
+ BUG_ON(dev->bus != &pci_bus_type); |
+ |
+ pci_unmap_page(to_pci_dev(dev), dma_address, size, (int)direction); |
+} |
+ |
+static inline int |
+dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, |
+ enum dma_data_direction direction) |
+{ |
+ BUG_ON(dev->bus != &pci_bus_type); |
+ |
+ return pci_map_sg(to_pci_dev(dev), sg, nents, (int)direction); |
+} |
+ |
+static inline void |
+dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, |
+ enum dma_data_direction direction) |
+{ |
+ BUG_ON(dev->bus != &pci_bus_type); |
+ |
+ pci_unmap_sg(to_pci_dev(dev), sg, nhwentries, (int)direction); |
+} |
+ |
+static inline void |
+dma_sync_single(struct device *dev, dma_addr_t dma_handle, size_t size, |
+ enum dma_data_direction direction) |
+{ |
+ BUG_ON(dev->bus != &pci_bus_type); |
+ |
+ pci_dma_sync_single(to_pci_dev(dev), dma_handle, size, (int)direction); |
+} |
+ |
+static inline void |
+dma_sync_sg(struct device *dev, struct scatterlist *sg, int nelems, |
+ enum dma_data_direction direction) |
+{ |
+ BUG_ON(dev->bus != &pci_bus_type); |
+ |
+ pci_dma_sync_sg(to_pci_dev(dev), sg, nelems, (int)direction); |
+} |
+ |
+/* Now for the API extensions over the pci_ one */ |
+ |
+#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
+#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
+#define dma_is_consistent(d) (1) |
+ |
+static inline int |
+dma_get_cache_alignment(void) |
+{ |
+ /* no easy way to get cache size on all processors, so return |
+ * the maximum possible, to be safe */ |
+ return (1 << L1_CACHE_SHIFT_MAX); |
+} |
+ |
+static inline void |
+dma_sync_single_range(struct device *dev, dma_addr_t dma_handle, |
+ unsigned long offset, size_t size, |
+ enum dma_data_direction direction) |
+{ |
+ /* just sync everything, that's all the pci API can do */ |
+ dma_sync_single(dev, dma_handle, offset+size, direction); |
+} |
+ |
+static inline void |
+dma_cache_sync(void *vaddr, size_t size, |
+ enum dma_data_direction direction) |
+{ |
+ /* could define this in terms of the dma_cache ... operations, |
+ * but if you get this on a platform, you should convert the platform |
+ * to using the generic device DMA API */ |
+ BUG(); |
+} |
+ |
+#endif |
+ |
Index: linuxc26/include/asm-generic/local.h |
=================================================================== |
--- linuxc26/include/asm-generic/local.h (nonexistent) |
+++ linuxc26/include/asm-generic/local.h (revision 422) |
@@ -0,0 +1,118 @@ |
+#ifndef _ASM_GENERIC_LOCAL_H |
+#define _ASM_GENERIC_LOCAL_H |
+ |
+#include <linux/config.h> |
+#include <linux/percpu.h> |
+#include <asm/types.h> |
+#include <asm/hardirq.h> |
+ |
+/* An unsigned long type for operations which are atomic for a single |
+ * CPU. Usually used in combination with per-cpu variables. */ |
+ |
+#if BITS_PER_LONG == 32 && !defined(CONFIG_SPARC32) |
+/* Implement in terms of atomics. */ |
+ |
+/* Don't use typedef: don't want them to be mixed with atomic_t's. */ |
+typedef struct |
+{ |
+ atomic_t a; |
+} local_t; |
+ |
+#define LOCAL_INIT(i) { ATOMIC_INIT(i) } |
+ |
+#define local_read(l) ((unsigned long)atomic_read(&(l)->a)) |
+#define local_set(l,i) atomic_set((&(l)->a),(i)) |
+#define local_inc(l) atomic_inc(&(l)->a) |
+#define local_dec(l) atomic_dec(&(l)->a) |
+#define local_add(i,l) atomic_add((i),(&(l)->a)) |
+#define local_sub(i,l) atomic_sub((i),(&(l)->a)) |
+ |
+/* Non-atomic variants, ie. preemption disabled and won't be touched |
+ * in interrupt, etc. Some archs can optimize this case well. */ |
+#define __local_inc(l) local_set((l), local_read(l) + 1) |
+#define __local_dec(l) local_set((l), local_read(l) - 1) |
+#define __local_add(i,l) local_set((l), local_read(l) + (i)) |
+#define __local_sub(i,l) local_set((l), local_read(l) - (i)) |
+ |
+#else /* ... can't use atomics. */ |
+/* Implement in terms of three variables. |
+ Another option would be to use local_irq_save/restore. */ |
+ |
+typedef struct |
+{ |
+ /* 0 = in hardirq, 1 = in softirq, 2 = usermode. */ |
+ unsigned long v[3]; |
+} local_t; |
+ |
+#define _LOCAL_VAR(l) ((l)->v[!in_interrupt() + !in_irq()]) |
+ |
+#define LOCAL_INIT(i) { { (i), 0, 0 } } |
+ |
+static inline unsigned long local_read(local_t *l) |
+{ |
+ return l->v[0] + l->v[1] + l->v[2]; |
+} |
+ |
+static inline void local_set(local_t *l, unsigned long v) |
+{ |
+ l->v[0] = v; |
+ l->v[1] = l->v[2] = 0; |
+} |
+ |
+static inline void local_inc(local_t *l) |
+{ |
+ preempt_disable(); |
+ _LOCAL_VAR(l)++; |
+ preempt_enable(); |
+} |
+ |
+static inline void local_dec(local_t *l) |
+{ |
+ preempt_disable(); |
+ _LOCAL_VAR(l)--; |
+ preempt_enable(); |
+} |
+ |
+static inline void local_add(unsigned long v, local_t *l) |
+{ |
+ preempt_disable(); |
+ _LOCAL_VAR(l) += v; |
+ preempt_enable(); |
+} |
+ |
+static inline void local_sub(unsigned long v, local_t *l) |
+{ |
+ preempt_disable(); |
+ _LOCAL_VAR(l) -= v; |
+ preempt_enable(); |
+} |
+ |
+/* Non-atomic variants, ie. preemption disabled and won't be touched |
+ * in interrupt, etc. Some archs can optimize this case well. */ |
+#define __local_inc(l) ((l)->v[0]++) |
+#define __local_dec(l) ((l)->v[0]--) |
+#define __local_add(i,l) ((l)->v[0] += (i)) |
+#define __local_sub(i,l) ((l)->v[0] -= (i)) |
+ |
+#endif /* Non-atomic implementation */ |
+ |
+/* Use these for per-cpu local_t variables: on some archs they are |
+ * much more efficient than these naive implementations. Note they take |
+ * a variable (eg. mystruct.foo), not an address. |
+ */ |
+#define cpu_local_read(v) local_read(&__get_cpu_var(v)) |
+#define cpu_local_set(v, i) local_set(&__get_cpu_var(v), (i)) |
+#define cpu_local_inc(v) local_inc(&__get_cpu_var(v)) |
+#define cpu_local_dec(v) local_dec(&__get_cpu_var(v)) |
+#define cpu_local_add(i, v) local_add((i), &__get_cpu_var(v)) |
+#define cpu_local_sub(i, v) local_sub((i), &__get_cpu_var(v)) |
+ |
+/* Non-atomic increments, ie. preemption disabled and won't be touched |
+ * in interrupt, etc. Some archs can optimize this case well. |
+ */ |
+#define __cpu_local_inc(v) __local_inc(&__get_cpu_var(v)) |
+#define __cpu_local_dec(v) __local_dec(&__get_cpu_var(v)) |
+#define __cpu_local_add(i, v) __local_add((i), &__get_cpu_var(v)) |
+#define __cpu_local_sub(i, v) __local_sub((i), &__get_cpu_var(v)) |
+ |
+#endif /* _ASM_GENERIC_LOCAL_H */ |
Index: linuxc26/include/asm-generic/cpumask_arith.h |
=================================================================== |
--- linuxc26/include/asm-generic/cpumask_arith.h (nonexistent) |
+++ linuxc26/include/asm-generic/cpumask_arith.h (revision 422) |
@@ -0,0 +1,48 @@ |
+#ifndef __ASM_GENERIC_CPUMASK_ARITH_H |
+#define __ASM_GENERIC_CPUMASK_ARITH_H |
+ |
+/* |
+ * Arithmetic type -based cpu bitmaps. A single unsigned long is used |
+ * to contain the whole cpu bitmap. |
+ */ |
+ |
+#define cpu_set(cpu, map) set_bit(cpu, &(map)) |
+#define cpu_clear(cpu, map) clear_bit(cpu, &(map)) |
+#define cpu_isset(cpu, map) test_bit(cpu, &(map)) |
+#define cpu_test_and_set(cpu, map) test_and_set_bit(cpu, &(map)) |
+ |
+#define cpus_and(dst,src1,src2) do { dst = (src1) & (src2); } while (0) |
+#define cpus_or(dst,src1,src2) do { dst = (src1) | (src2); } while (0) |
+#define cpus_clear(map) do { map = 0; } while (0) |
+#define cpus_complement(map) do { map = ~(map); } while (0) |
+#define cpus_equal(map1, map2) ((map1) == (map2)) |
+#define cpus_empty(map) ((map) == 0) |
+ |
+#if BITS_PER_LONG == 32 |
+#define cpus_weight(map) hweight32(map) |
+#elif BITS_PER_LONG == 64 |
+#define cpus_weight(map) hweight64(map) |
+#endif |
+ |
+#define cpus_shift_right(dst, src, n) do { dst = (src) >> (n); } while (0) |
+#define cpus_shift_left(dst, src, n) do { dst = (src) << (n); } while (0) |
+ |
+#define any_online_cpu(map) \ |
+({ \ |
+ cpumask_t __tmp__; \ |
+ cpus_and(__tmp__, map, cpu_online_map); \ |
+ __tmp__ ? first_cpu(__tmp__) : NR_CPUS; \ |
+}) |
+ |
+#define CPU_MASK_ALL (~((cpumask_t)0) >> (8*sizeof(cpumask_t) - NR_CPUS)) |
+#define CPU_MASK_NONE ((cpumask_t)0) |
+ |
+/* only ever use this for things that are _never_ used on large boxen */ |
+#define cpus_coerce(map) ((unsigned long)(map)) |
+#define cpus_promote(map) ({ map; }) |
+#define cpumask_of_cpu(cpu) ({ ((cpumask_t)1) << (cpu); }) |
+ |
+#define first_cpu(map) __ffs(map) |
+#define next_cpu(cpu, map) find_next_bit(&(map), NR_CPUS, cpu + 1) |
+ |
+#endif /* __ASM_GENERIC_CPUMASK_ARITH_H */ |
Index: linuxc26/include/asm-generic/pci-dma-compat.h |
=================================================================== |
--- linuxc26/include/asm-generic/pci-dma-compat.h (nonexistent) |
+++ linuxc26/include/asm-generic/pci-dma-compat.h (revision 422) |
@@ -0,0 +1,87 @@ |
+/* include this file if the platform implements the dma_ DMA Mapping API |
+ * and wants to provide the pci_ DMA Mapping API in terms of it */ |
+ |
+#ifndef _ASM_GENERIC_PCI_DMA_COMPAT_H |
+#define _ASM_GENERIC_PCI_DMA_COMPAT_H |
+ |
+#include <linux/dma-mapping.h> |
+ |
+/* note pci_set_dma_mask isn't here, since it's a public function |
+ * exported from drivers/pci, use dma_supported instead */ |
+ |
+static inline int |
+pci_dma_supported(struct pci_dev *hwdev, u64 mask) |
+{ |
+ return dma_supported(hwdev == NULL ? NULL : &hwdev->dev, mask); |
+} |
+ |
+static inline void * |
+pci_alloc_consistent(struct pci_dev *hwdev, size_t size, |
+ dma_addr_t *dma_handle) |
+{ |
+ return dma_alloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, dma_handle, GFP_ATOMIC); |
+} |
+ |
+static inline void |
+pci_free_consistent(struct pci_dev *hwdev, size_t size, |
+ void *vaddr, dma_addr_t dma_handle) |
+{ |
+ dma_free_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, vaddr, dma_handle); |
+} |
+ |
+static inline dma_addr_t |
+pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction) |
+{ |
+ return dma_map_single(hwdev == NULL ? NULL : &hwdev->dev, ptr, size, (enum dma_data_direction)direction); |
+} |
+ |
+static inline void |
+pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, |
+ size_t size, int direction) |
+{ |
+ dma_unmap_single(hwdev == NULL ? NULL : &hwdev->dev, dma_addr, size, (enum dma_data_direction)direction); |
+} |
+ |
+static inline dma_addr_t |
+pci_map_page(struct pci_dev *hwdev, struct page *page, |
+ unsigned long offset, size_t size, int direction) |
+{ |
+ return dma_map_page(hwdev == NULL ? NULL : &hwdev->dev, page, offset, size, (enum dma_data_direction)direction); |
+} |
+ |
+static inline void |
+pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address, |
+ size_t size, int direction) |
+{ |
+ dma_unmap_page(hwdev == NULL ? NULL : &hwdev->dev, dma_address, size, (enum dma_data_direction)direction); |
+} |
+ |
+static inline int |
+pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, |
+ int nents, int direction) |
+{ |
+ return dma_map_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nents, (enum dma_data_direction)direction); |
+} |
+ |
+static inline void |
+pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg, |
+ int nents, int direction) |
+{ |
+ dma_unmap_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nents, (enum dma_data_direction)direction); |
+} |
+ |
+static inline void |
+pci_dma_sync_single(struct pci_dev *hwdev, dma_addr_t dma_handle, |
+ size_t size, int direction) |
+{ |
+ dma_sync_single(hwdev == NULL ? NULL : &hwdev->dev, dma_handle, size, (enum dma_data_direction)direction); |
+} |
+ |
+static inline void |
+pci_dma_sync_sg(struct pci_dev *hwdev, struct scatterlist *sg, |
+ int nelems, int direction) |
+{ |
+ dma_sync_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nelems, (enum dma_data_direction)direction); |
+} |
+ |
+#endif |
Index: linuxc26/include/asm-generic/ide_iops.h |
=================================================================== |
--- linuxc26/include/asm-generic/ide_iops.h (nonexistent) |
+++ linuxc26/include/asm-generic/ide_iops.h (revision 422) |
@@ -0,0 +1,38 @@ |
+/* Generic I/O and MEMIO string operations. */ |
+ |
+#define __ide_insw insw |
+#define __ide_insl insl |
+#define __ide_outsw outsw |
+#define __ide_outsl outsl |
+ |
+static __inline__ void __ide_mm_insw(unsigned long port, void *addr, u32 count) |
+{ |
+ while (count--) { |
+ *(u16 *)addr = readw(port); |
+ addr += 2; |
+ } |
+} |
+ |
+static __inline__ void __ide_mm_insl(unsigned long port, void *addr, u32 count) |
+{ |
+ while (count--) { |
+ *(u32 *)addr = readl(port); |
+ addr += 4; |
+ } |
+} |
+ |
+static __inline__ void __ide_mm_outsw(unsigned long port, void *addr, u32 count) |
+{ |
+ while (count--) { |
+ writew(*(u16 *)addr, port); |
+ addr += 2; |
+ } |
+} |
+ |
+static __inline__ void __ide_mm_outsl(unsigned long port, void *addr, u32 count) |
+{ |
+ while (count--) { |
+ writel(*(u32 *)addr, port); |
+ addr += 4; |
+ } |
+} |
Index: linuxc26/include/asm-generic/div64.h |
=================================================================== |
--- linuxc26/include/asm-generic/div64.h (nonexistent) |
+++ linuxc26/include/asm-generic/div64.h (revision 422) |
@@ -0,0 +1,58 @@ |
+#ifndef _ASM_GENERIC_DIV64_H |
+#define _ASM_GENERIC_DIV64_H |
+/* |
+ * Copyright (C) 2003 Bernardo Innocenti <bernie@develer.com> |
+ * Based on former asm-ppc/div64.h and asm-m68knommu/div64.h |
+ * |
+ * The semantics of do_div() are: |
+ * |
+ * uint32_t do_div(uint64_t *n, uint32_t base) |
+ * { |
+ * uint32_t remainder = *n % base; |
+ * *n = *n / base; |
+ * return remainder; |
+ * } |
+ * |
+ * NOTE: macro parameter n is evaluated multiple times, |
+ * beware of side effects! |
+ */ |
+ |
+#include <linux/types.h> |
+#include <linux/compiler.h> |
+ |
+#if BITS_PER_LONG == 64 |
+ |
+# define do_div(n,base) ({ \ |
+ uint32_t __base = (base); \ |
+ uint32_t __rem; \ |
+ __rem = ((uint64_t)(n)) % __base; \ |
+ (n) = ((uint64_t)(n)) / __base; \ |
+ __rem; \ |
+ }) |
+ |
+#elif BITS_PER_LONG == 32 |
+ |
+extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor); |
+ |
+/* The unnecessary pointer compare is there |
+ * to check for type safety (n must be 64bit) |
+ */ |
+# define do_div(n,base) ({ \ |
+ uint32_t __base = (base); \ |
+ uint32_t __rem; \ |
+ (void)(((typeof((n)) *)0) == ((uint64_t *)0)); \ |
+ if (likely(((n) >> 32) == 0)) { \ |
+ __rem = (uint32_t)(n) % __base; \ |
+ (n) = (uint32_t)(n) / __base; \ |
+ } else \ |
+ __rem = __div64_32(&(n), __base); \ |
+ __rem; \ |
+ }) |
+ |
+#else /* BITS_PER_LONG == ?? */ |
+ |
+# error do_div() does not yet support the C64 |
+ |
+#endif /* BITS_PER_LONG */ |
+ |
+#endif /* _ASM_GENERIC_DIV64_H */ |
Index: linuxc26/include/asm-generic/errno-base.h |
=================================================================== |
--- linuxc26/include/asm-generic/errno-base.h (nonexistent) |
+++ linuxc26/include/asm-generic/errno-base.h (revision 422) |
@@ -0,0 +1,39 @@ |
+#ifndef _ASM_GENERIC_ERRNO_BASE_H |
+#define _ASM_GENERIC_ERRNO_BASE_H |
+ |
+#define EPERM 1 /* Operation not permitted */ |
+#define ENOENT 2 /* No such file or directory */ |
+#define ESRCH 3 /* No such process */ |
+#define EINTR 4 /* Interrupted system call */ |
+#define EIO 5 /* I/O error */ |
+#define ENXIO 6 /* No such device or address */ |
+#define E2BIG 7 /* Argument list too long */ |
+#define ENOEXEC 8 /* Exec format error */ |
+#define EBADF 9 /* Bad file number */ |
+#define ECHILD 10 /* No child processes */ |
+#define EAGAIN 11 /* Try again */ |
+#define ENOMEM 12 /* Out of memory */ |
+#define EACCES 13 /* Permission denied */ |
+#define EFAULT 14 /* Bad address */ |
+#define ENOTBLK 15 /* Block device required */ |
+#define EBUSY 16 /* Device or resource busy */ |
+#define EEXIST 17 /* File exists */ |
+#define EXDEV 18 /* Cross-device link */ |
+#define ENODEV 19 /* No such device */ |
+#define ENOTDIR 20 /* Not a directory */ |
+#define EISDIR 21 /* Is a directory */ |
+#define EINVAL 22 /* Invalid argument */ |
+#define ENFILE 23 /* File table overflow */ |
+#define EMFILE 24 /* Too many open files */ |
+#define ENOTTY 25 /* Not a typewriter */ |
+#define ETXTBSY 26 /* Text file busy */ |
+#define EFBIG 27 /* File too large */ |
+#define ENOSPC 28 /* No space left on device */ |
+#define ESPIPE 29 /* Illegal seek */ |
+#define EROFS 30 /* Read-only file system */ |
+#define EMLINK 31 /* Too many links */ |
+#define EPIPE 32 /* Broken pipe */ |
+#define EDOM 33 /* Math argument out of domain of func */ |
+#define ERANGE 34 /* Math result not representable */ |
+ |
+#endif |
Index: linuxc26/include/asm-generic/siginfo.h |
=================================================================== |
--- linuxc26/include/asm-generic/siginfo.h (nonexistent) |
+++ linuxc26/include/asm-generic/siginfo.h (revision 422) |
@@ -0,0 +1,287 @@ |
+#ifndef _ASM_GENERIC_SIGINFO_H |
+#define _ASM_GENERIC_SIGINFO_H |
+ |
+#include <linux/compiler.h> |
+#include <linux/types.h> |
+ |
+typedef union sigval { |
+ int sival_int; |
+ void *sival_ptr; |
+} sigval_t; |
+ |
+/* |
+ * This is the size (including padding) of the part of the |
+ * struct siginfo that is before the union. |
+ */ |
+#ifndef __ARCH_SI_PREAMBLE_SIZE |
+#define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int)) |
+#endif |
+ |
+#define SI_MAX_SIZE 128 |
+#ifndef SI_PAD_SIZE |
+#define SI_PAD_SIZE ((SI_MAX_SIZE - __ARCH_SI_PREAMBLE_SIZE) / sizeof(int)) |
+#endif |
+ |
+#ifndef __ARCH_SI_UID_T |
+#define __ARCH_SI_UID_T uid_t |
+#endif |
+ |
+#ifndef __ARCH_SI_BAND_T |
+#define __ARCH_SI_BAND_T int |
+#endif |
+ |
+#ifndef HAVE_ARCH_SIGINFO_T |
+ |
+typedef struct siginfo { |
+ int si_signo; |
+ int si_errno; |
+ int si_code; |
+ |
+ union { |
+ int _pad[SI_PAD_SIZE]; |
+ |
+ /* kill() */ |
+ struct { |
+ pid_t _pid; /* sender's pid */ |
+ __ARCH_SI_UID_T _uid; /* sender's uid */ |
+ } _kill; |
+ |
+ /* POSIX.1b timers */ |
+ struct { |
+ timer_t _tid; /* timer id */ |
+ int _overrun; /* overrun count */ |
+ char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)]; |
+ sigval_t _sigval; /* same as below */ |
+ int _sys_private; /* not to be passed to user */ |
+ } _timer; |
+ |
+ /* POSIX.1b signals */ |
+ struct { |
+ pid_t _pid; /* sender's pid */ |
+ __ARCH_SI_UID_T _uid; /* sender's uid */ |
+ sigval_t _sigval; |
+ } _rt; |
+ |
+ /* SIGCHLD */ |
+ struct { |
+ pid_t _pid; /* which child */ |
+ __ARCH_SI_UID_T _uid; /* sender's uid */ |
+ int _status; /* exit code */ |
+ clock_t _utime; |
+ clock_t _stime; |
+ } _sigchld; |
+ |
+ /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ |
+ struct { |
+ void *_addr; /* faulting insn/memory ref. */ |
+#ifdef __ARCH_SI_TRAPNO |
+ int _trapno; /* TRAP # which caused the signal */ |
+#endif |
+ } _sigfault; |
+ |
+ /* SIGPOLL */ |
+ struct { |
+ __ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */ |
+ int _fd; |
+ } _sigpoll; |
+ } _sifields; |
+} siginfo_t; |
+ |
+#endif |
+ |
+/* |
+ * How these fields are to be accessed. |
+ */ |
+#define si_pid _sifields._kill._pid |
+#define si_uid _sifields._kill._uid |
+#define si_tid _sifields._timer._tid |
+#define si_overrun _sifields._timer._overrun |
+#define si_sys_private _sifields._timer._sys_private |
+#define si_status _sifields._sigchld._status |
+#define si_utime _sifields._sigchld._utime |
+#define si_stime _sifields._sigchld._stime |
+#define si_value _sifields._rt._sigval |
+#define si_int _sifields._rt._sigval.sival_int |
+#define si_ptr _sifields._rt._sigval.sival_ptr |
+#define si_addr _sifields._sigfault._addr |
+#ifdef __ARCH_SI_TRAPNO |
+#define si_trapno _sifields._sigfault._trapno |
+#endif |
+#define si_band _sifields._sigpoll._band |
+#define si_fd _sifields._sigpoll._fd |
+ |
+#ifdef __KERNEL__ |
+#define __SI_MASK 0xffff0000u |
+#define __SI_KILL (0 << 16) |
+#define __SI_TIMER (1 << 16) |
+#define __SI_POLL (2 << 16) |
+#define __SI_FAULT (3 << 16) |
+#define __SI_CHLD (4 << 16) |
+#define __SI_RT (5 << 16) |
+#define __SI_CODE(T,N) ((T) | ((N) & 0xffff)) |
+#else |
+#define __SI_KILL 0 |
+#define __SI_TIMER 0 |
+#define __SI_POLL 0 |
+#define __SI_FAULT 0 |
+#define __SI_CHLD 0 |
+#define __SI_RT 0 |
+#define __SI_CODE(T,N) (N) |
+#endif |
+ |
+/* |
+ * si_code values |
+ * Digital reserves positive values for kernel-generated signals. |
+ */ |
+#define SI_USER 0 /* sent by kill, sigsend, raise */ |
+#define SI_KERNEL 0x80 /* sent by the kernel from somewhere */ |
+#define SI_QUEUE -1 /* sent by sigqueue */ |
+#define SI_TIMER __SI_CODE(__SI_TIMER,-2) /* sent by timer expiration */ |
+#define SI_MESGQ -3 /* sent by real time mesq state change */ |
+#define SI_ASYNCIO -4 /* sent by AIO completion */ |
+#define SI_SIGIO -5 /* sent by queued SIGIO */ |
+#define SI_TKILL -6 /* sent by tkill system call */ |
+#define SI_DETHREAD -7 /* sent by execve() killing subsidiary threads */ |
+ |
+#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0) |
+#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0) |
+ |
+#ifndef HAVE_ARCH_SI_CODES |
+/* |
+ * SIGILL si_codes |
+ */ |
+#define ILL_ILLOPC (__SI_FAULT|1) /* illegal opcode */ |
+#define ILL_ILLOPN (__SI_FAULT|2) /* illegal operand */ |
+#define ILL_ILLADR (__SI_FAULT|3) /* illegal addressing mode */ |
+#define ILL_ILLTRP (__SI_FAULT|4) /* illegal trap */ |
+#define ILL_PRVOPC (__SI_FAULT|5) /* privileged opcode */ |
+#define ILL_PRVREG (__SI_FAULT|6) /* privileged register */ |
+#define ILL_COPROC (__SI_FAULT|7) /* coprocessor error */ |
+#define ILL_BADSTK (__SI_FAULT|8) /* internal stack error */ |
+#define NSIGILL 8 |
+ |
+/* |
+ * SIGFPE si_codes |
+ */ |
+#define FPE_INTDIV (__SI_FAULT|1) /* integer divide by zero */ |
+#define FPE_INTOVF (__SI_FAULT|2) /* integer overflow */ |
+#define FPE_FLTDIV (__SI_FAULT|3) /* floating point divide by zero */ |
+#define FPE_FLTOVF (__SI_FAULT|4) /* floating point overflow */ |
+#define FPE_FLTUND (__SI_FAULT|5) /* floating point underflow */ |
+#define FPE_FLTRES (__SI_FAULT|6) /* floating point inexact result */ |
+#define FPE_FLTINV (__SI_FAULT|7) /* floating point invalid operation */ |
+#define FPE_FLTSUB (__SI_FAULT|8) /* subscript out of range */ |
+#define NSIGFPE 8 |
+ |
+/* |
+ * SIGSEGV si_codes |
+ */ |
+#define SEGV_MAPERR (__SI_FAULT|1) /* address not mapped to object */ |
+#define SEGV_ACCERR (__SI_FAULT|2) /* invalid permissions for mapped object */ |
+#define NSIGSEGV 2 |
+ |
+/* |
+ * SIGBUS si_codes |
+ */ |
+#define BUS_ADRALN (__SI_FAULT|1) /* invalid address alignment */ |
+#define BUS_ADRERR (__SI_FAULT|2) /* non-existant physical address */ |
+#define BUS_OBJERR (__SI_FAULT|3) /* object specific hardware error */ |
+#define NSIGBUS 3 |
+ |
+/* |
+ * SIGTRAP si_codes |
+ */ |
+#define TRAP_BRKPT (__SI_FAULT|1) /* process breakpoint */ |
+#define TRAP_TRACE (__SI_FAULT|2) /* process trace trap */ |
+#define NSIGTRAP 2 |
+ |
+/* |
+ * SIGCHLD si_codes |
+ */ |
+#define CLD_EXITED (__SI_CHLD|1) /* child has exited */ |
+#define CLD_KILLED (__SI_CHLD|2) /* child was killed */ |
+#define CLD_DUMPED (__SI_CHLD|3) /* child terminated abnormally */ |
+#define CLD_TRAPPED (__SI_CHLD|4) /* traced child has trapped */ |
+#define CLD_STOPPED (__SI_CHLD|5) /* child has stopped */ |
+#define CLD_CONTINUED (__SI_CHLD|6) /* stopped child has continued */ |
+#define NSIGCHLD 6 |
+ |
+/* |
+ * SIGPOLL si_codes |
+ */ |
+#define POLL_IN (__SI_POLL|1) /* data input available */ |
+#define POLL_OUT (__SI_POLL|2) /* output buffers available */ |
+#define POLL_MSG (__SI_POLL|3) /* input message available */ |
+#define POLL_ERR (__SI_POLL|4) /* i/o error */ |
+#define POLL_PRI (__SI_POLL|5) /* high priority input available */ |
+#define POLL_HUP (__SI_POLL|6) /* device disconnected */ |
+#define NSIGPOLL 6 |
+ |
+#endif |
+ |
+/* |
+ * sigevent definitions |
+ * |
+ * It seems likely that SIGEV_THREAD will have to be handled from |
+ * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the |
+ * thread manager then catches and does the appropriate nonsense. |
+ * However, everything is written out here so as to not get lost. |
+ */ |
+#define SIGEV_SIGNAL 0 /* notify via signal */ |
+#define SIGEV_NONE 1 /* other notification: meaningless */ |
+#define SIGEV_THREAD 2 /* deliver via thread creation */ |
+#define SIGEV_THREAD_ID 4 /* deliver to thread */ |
+ |
+#define SIGEV_MAX_SIZE 64 |
+#ifndef SIGEV_PAD_SIZE |
+#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3) |
+#endif |
+ |
+#ifndef HAVE_ARCH_SIGEVENT_T |
+ |
+typedef struct sigevent { |
+ sigval_t sigev_value; |
+ int sigev_signo; |
+ int sigev_notify; |
+ union { |
+ int _pad[SIGEV_PAD_SIZE]; |
+ int _tid; |
+ |
+ struct { |
+ void (*_function)(sigval_t); |
+ void *_attribute; /* really pthread_attr_t */ |
+ } _sigev_thread; |
+ } _sigev_un; |
+} sigevent_t; |
+ |
+#endif |
+ |
+#define sigev_notify_function _sigev_un._sigev_thread._function |
+#define sigev_notify_attributes _sigev_un._sigev_thread._attribute |
+#define sigev_notify_thread_id _sigev_un._tid |
+ |
+#ifdef __KERNEL__ |
+ |
+struct siginfo; |
+void do_schedule_next_timer(struct siginfo *info); |
+ |
+#ifndef HAVE_ARCH_COPY_SIGINFO |
+ |
+#include <linux/string.h> |
+ |
+static inline void copy_siginfo(struct siginfo *to, struct siginfo *from) |
+{ |
+ if (from->si_code < 0) |
+ memcpy(to, from, sizeof(*to)); |
+ else |
+ /* _sigchld is currently the largest know union member */ |
+ memcpy(to, from, __ARCH_SI_PREAMBLE_SIZE + sizeof(from->_sifields._sigchld)); |
+} |
+ |
+#endif |
+ |
+extern int copy_siginfo_to_user(struct siginfo __user *to, struct siginfo *from); |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif |
Index: linuxc26/include/asm-generic/percpu.h |
=================================================================== |
--- linuxc26/include/asm-generic/percpu.h (nonexistent) |
+++ linuxc26/include/asm-generic/percpu.h (revision 422) |
@@ -0,0 +1,42 @@ |
+#ifndef _ASM_GENERIC_PERCPU_H_ |
+#define _ASM_GENERIC_PERCPU_H_ |
+#include <linux/compiler.h> |
+ |
+#define __GENERIC_PER_CPU |
+#ifdef CONFIG_SMP |
+ |
+extern unsigned long __per_cpu_offset[NR_CPUS]; |
+ |
+/* Separate out the type, so (int[3], foo) works. */ |
+#define DEFINE_PER_CPU(type, name) \ |
+ __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name |
+ |
+/* var is in discarded region: offset to particular copy we want */ |
+#define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu])) |
+#define __get_cpu_var(var) per_cpu(var, smp_processor_id()) |
+ |
+/* A macro to avoid #include hell... */ |
+#define percpu_modcopy(pcpudst, src, size) \ |
+do { \ |
+ unsigned int __i; \ |
+ for (__i = 0; __i < NR_CPUS; __i++) \ |
+ if (cpu_possible(__i)) \ |
+ memcpy((pcpudst)+__per_cpu_offset[__i], \ |
+ (src), (size)); \ |
+} while (0) |
+#else /* ! SMP */ |
+ |
+#define DEFINE_PER_CPU(type, name) \ |
+ __typeof__(type) per_cpu__##name |
+ |
+#define per_cpu(var, cpu) ((void)cpu, per_cpu__##var) |
+#define __get_cpu_var(var) per_cpu__##var |
+ |
+#endif /* SMP */ |
+ |
+#define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name |
+ |
+#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var) |
+#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var) |
+ |
+#endif /* _ASM_GENERIC_PERCPU_H_ */ |
Index: linuxc26/include/asm-generic/rmap.h |
=================================================================== |
--- linuxc26/include/asm-generic/rmap.h (nonexistent) |
+++ linuxc26/include/asm-generic/rmap.h (revision 422) |
@@ -0,0 +1,90 @@ |
+#ifndef _GENERIC_RMAP_H |
+#define _GENERIC_RMAP_H |
+/* |
+ * linux/include/asm-generic/rmap.h |
+ * |
+ * Architecture dependent parts of the reverse mapping code, |
+ * this version should work for most architectures with a |
+ * 'normal' page table layout. |
+ * |
+ * We use the struct page of the page table page to find out |
+ * the process and full address of a page table entry: |
+ * - page->mapping points to the process' mm_struct |
+ * - page->index has the high bits of the address |
+ * - the lower bits of the address are calculated from the |
+ * offset of the page table entry within the page table page |
+ * |
+ * For CONFIG_HIGHPTE, we need to represent the address of a pte in a |
+ * scalar pte_addr_t. The pfn of the pte's page is shifted left by PAGE_SIZE |
+ * bits and is then ORed with the byte offset of the pte within its page. |
+ * |
+ * For CONFIG_HIGHMEM4G, the pte_addr_t is 32 bits. 20 for the pfn, 12 for |
+ * the offset. |
+ * |
+ * For CONFIG_HIGHMEM64G, the pte_addr_t is 64 bits. 52 for the pfn, 12 for |
+ * the offset. |
+ */ |
+#include <linux/mm.h> |
+ |
+static inline void pgtable_add_rmap(struct page * page, struct mm_struct * mm, unsigned long address) |
+{ |
+#ifdef BROKEN_PPC_PTE_ALLOC_ONE |
+ /* OK, so PPC calls pte_alloc() before mem_map[] is setup ... ;( */ |
+ extern int mem_init_done; |
+ |
+ if (!mem_init_done) |
+ return; |
+#endif |
+ page->mapping = (void *)mm; |
+ page->index = address & ~((PTRS_PER_PTE * PAGE_SIZE) - 1); |
+ inc_page_state(nr_page_table_pages); |
+} |
+ |
+static inline void pgtable_remove_rmap(struct page * page) |
+{ |
+ page->mapping = NULL; |
+ page->index = 0; |
+ dec_page_state(nr_page_table_pages); |
+} |
+ |
+static inline struct mm_struct * ptep_to_mm(pte_t * ptep) |
+{ |
+ struct page * page = kmap_atomic_to_page(ptep); |
+ return (struct mm_struct *) page->mapping; |
+} |
+ |
+static inline unsigned long ptep_to_address(pte_t * ptep) |
+{ |
+ struct page * page = kmap_atomic_to_page(ptep); |
+ unsigned long low_bits; |
+ low_bits = ((unsigned long)ptep & ~PAGE_MASK) * PTRS_PER_PTE; |
+ return page->index + low_bits; |
+} |
+ |
+#ifdef CONFIG_HIGHPTE |
+static inline pte_addr_t ptep_to_paddr(pte_t *ptep) |
+{ |
+ pte_addr_t paddr; |
+ paddr = ((pte_addr_t)page_to_pfn(kmap_atomic_to_page(ptep))) << PAGE_SHIFT; |
+ return paddr + (pte_addr_t)((unsigned long)ptep & ~PAGE_MASK); |
+} |
+#else |
+static inline pte_addr_t ptep_to_paddr(pte_t *ptep) |
+{ |
+ return (pte_addr_t)ptep; |
+} |
+#endif |
+ |
+#ifndef CONFIG_HIGHPTE |
+static inline pte_t *rmap_ptep_map(pte_addr_t pte_paddr) |
+{ |
+ return (pte_t *)pte_paddr; |
+} |
+ |
+static inline void rmap_ptep_unmap(pte_t *pte) |
+{ |
+ return; |
+} |
+#endif |
+ |
+#endif /* _GENERIC_RMAP_H */ |
Index: linuxc26/include/asm-generic/bitops.h |
=================================================================== |
--- linuxc26/include/asm-generic/bitops.h (nonexistent) |
+++ linuxc26/include/asm-generic/bitops.h (revision 422) |
@@ -0,0 +1,81 @@ |
+#ifndef _ASM_GENERIC_BITOPS_H_ |
+#define _ASM_GENERIC_BITOPS_H_ |
+ |
+/* |
+ * For the benefit of those who are trying to port Linux to another |
+ * architecture, here are some C-language equivalents. You should |
+ * recode these in the native assembly language, if at all possible. |
+ * To guarantee atomicity, these routines call cli() and sti() to |
+ * disable interrupts while they operate. (You have to provide inline |
+ * routines to cli() and sti().) |
+ * |
+ * Also note, these routines assume that you have 32 bit longs. |
+ * You will have to change this if you are trying to port Linux to the |
+ * Alpha architecture or to a Cray. :-) |
+ * |
+ * C language equivalents written by Theodore Ts'o, 9/26/92 |
+ */ |
+ |
+extern __inline__ int set_bit(int nr,long * addr) |
+{ |
+ int mask, retval; |
+ |
+ addr += nr >> 5; |
+ mask = 1 << (nr & 0x1f); |
+ cli(); |
+ retval = (mask & *addr) != 0; |
+ *addr |= mask; |
+ sti(); |
+ return retval; |
+} |
+ |
+extern __inline__ int clear_bit(int nr, long * addr) |
+{ |
+ int mask, retval; |
+ |
+ addr += nr >> 5; |
+ mask = 1 << (nr & 0x1f); |
+ cli(); |
+ retval = (mask & *addr) != 0; |
+ *addr &= ~mask; |
+ sti(); |
+ return retval; |
+} |
+ |
+extern __inline__ int test_bit(int nr, long * addr) |
+{ |
+ int mask; |
+ |
+ addr += nr >> 5; |
+ mask = 1 << (nr & 0x1f); |
+ return ((mask & *addr) != 0); |
+} |
+ |
+/* |
+ * fls: find last bit set. |
+ */ |
+ |
+#define fls(x) generic_fls(x) |
+ |
+#ifdef __KERNEL__ |
+ |
+/* |
+ * ffs: find first bit set. This is defined the same way as |
+ * the libc and compiler builtin ffs routines, therefore |
+ * differs in spirit from the above ffz (man ffs). |
+ */ |
+ |
+#define ffs(x) generic_ffs(x) |
+ |
+/* |
+ * hweightN: returns the hamming weight (i.e. the number |
+ * of bits set) of a N-bit word |
+ */ |
+ |
+#define hweight32(x) generic_hweight32(x) |
+#define hweight16(x) generic_hweight16(x) |
+#define hweight8(x) generic_hweight8(x) |
+ |
+#endif /* __KERNEL__ */ |
+ |
+#endif /* _ASM_GENERIC_BITOPS_H */ |
Index: linuxc26/include/asm-generic/cpumask_array.h |
=================================================================== |
--- linuxc26/include/asm-generic/cpumask_array.h (nonexistent) |
+++ linuxc26/include/asm-generic/cpumask_array.h (revision 422) |
@@ -0,0 +1,53 @@ |
+#ifndef __ASM_GENERIC_CPUMASK_ARRAY_H |
+#define __ASM_GENERIC_CPUMASK_ARRAY_H |
+ |
+/* |
+ * Array-based cpu bitmaps. An array of unsigned longs is used to contain |
+ * the bitmap, and then contained in a structure so it may be passed by |
+ * value. |
+ */ |
+ |
+#define CPU_ARRAY_SIZE BITS_TO_LONGS(NR_CPUS) |
+ |
+#define cpu_set(cpu, map) set_bit(cpu, (map).mask) |
+#define cpu_clear(cpu, map) clear_bit(cpu, (map).mask) |
+#define cpu_isset(cpu, map) test_bit(cpu, (map).mask) |
+#define cpu_test_and_set(cpu, map) test_and_set_bit(cpu, (map).mask) |
+ |
+#define cpus_and(dst,src1,src2) bitmap_and((dst).mask,(src1).mask, (src2).mask, NR_CPUS) |
+#define cpus_or(dst,src1,src2) bitmap_or((dst).mask, (src1).mask, (src2).mask, NR_CPUS) |
+#define cpus_clear(map) bitmap_clear((map).mask, NR_CPUS) |
+#define cpus_complement(map) bitmap_complement((map).mask, NR_CPUS) |
+#define cpus_equal(map1, map2) bitmap_equal((map1).mask, (map2).mask, NR_CPUS) |
+#define cpus_empty(map) bitmap_empty(map.mask, NR_CPUS) |
+#define cpus_weight(map) bitmap_weight((map).mask, NR_CPUS) |
+#define cpus_shift_right(d, s, n) bitmap_shift_right((d).mask, (s).mask, n, NR_CPUS) |
+#define cpus_shift_left(d, s, n) bitmap_shift_left((d).mask, (s).mask, n, NR_CPUS) |
+#define first_cpu(map) find_first_bit((map).mask, NR_CPUS) |
+#define next_cpu(cpu, map) find_next_bit((map).mask, NR_CPUS, cpu + 1) |
+ |
+/* only ever use this for things that are _never_ used on large boxen */ |
+#define cpus_coerce(map) ((map).mask[0]) |
+#define cpus_promote(map) ({ cpumask_t __cpu_mask = CPU_MASK_NONE;\ |
+ __cpu_mask.mask[0] = map; \ |
+ __cpu_mask; \ |
+ }) |
+#define cpumask_of_cpu(cpu) ({ cpumask_t __cpu_mask = CPU_MASK_NONE;\ |
+ cpu_set(cpu, __cpu_mask); \ |
+ __cpu_mask; \ |
+ }) |
+#define any_online_cpu(map) \ |
+({ \ |
+ cpumask_t __tmp__; \ |
+ cpus_and(__tmp__, map, cpu_online_map); \ |
+ find_first_bit(__tmp__.mask, NR_CPUS); \ |
+}) |
+ |
+ |
+/* |
+ * um, these need to be usable as static initializers |
+ */ |
+#define CPU_MASK_ALL { {[0 ... CPU_ARRAY_SIZE-1] = ~0UL} } |
+#define CPU_MASK_NONE { {[0 ... CPU_ARRAY_SIZE-1] = 0UL} } |
+ |
+#endif /* __ASM_GENERIC_CPUMASK_ARRAY_H */ |
Index: linuxc26/include/asm-generic/statfs.h |
=================================================================== |
--- linuxc26/include/asm-generic/statfs.h (nonexistent) |
+++ linuxc26/include/asm-generic/statfs.h (revision 422) |
@@ -0,0 +1,37 @@ |
+#ifndef _GENERIC_STATFS_H |
+#define _GENERIC_STATFS_H |
+ |
+#ifndef __KERNEL_STRICT_NAMES |
+# include <linux/types.h> |
+typedef __kernel_fsid_t fsid_t; |
+#endif |
+ |
+struct statfs { |
+ __u32 f_type; |
+ __u32 f_bsize; |
+ __u32 f_blocks; |
+ __u32 f_bfree; |
+ __u32 f_bavail; |
+ __u32 f_files; |
+ __u32 f_ffree; |
+ __kernel_fsid_t f_fsid; |
+ __u32 f_namelen; |
+ __u32 f_frsize; |
+ __u32 f_spare[5]; |
+}; |
+ |
+struct statfs64 { |
+ __u32 f_type; |
+ __u32 f_bsize; |
+ __u64 f_blocks; |
+ __u64 f_bfree; |
+ __u64 f_bavail; |
+ __u64 f_files; |
+ __u64 f_ffree; |
+ __kernel_fsid_t f_fsid; |
+ __u32 f_namelen; |
+ __u32 f_frsize; |
+ __u32 f_spare[5]; |
+}; |
+ |
+#endif |
Index: linuxc26/include/asm-generic/cpumask_const_value.h |
=================================================================== |
--- linuxc26/include/asm-generic/cpumask_const_value.h (nonexistent) |
+++ linuxc26/include/asm-generic/cpumask_const_value.h (revision 422) |
@@ -0,0 +1,21 @@ |
+#ifndef __ASM_GENERIC_CPUMASK_CONST_VALUE_H |
+#define __ASM_GENERIC_CPUMASK_CONST_VALUE_H |
+ |
+typedef const cpumask_t cpumask_const_t; |
+ |
+#define mk_cpumask_const(map) ((cpumask_const_t)(map)) |
+#define cpu_isset_const(cpu, map) cpu_isset(cpu, map) |
+#define cpus_and_const(dst,src1,src2) cpus_and(dst, src1, src2) |
+#define cpus_or_const(dst,src1,src2) cpus_or(dst, src1, src2) |
+#define cpus_equal_const(map1, map2) cpus_equal(map1, map2) |
+#define cpus_empty_const(map) cpus_empty(map) |
+#define cpus_copy_const(map1, map2) do { map1 = (cpumask_t)map2; } while (0) |
+#define cpus_weight_const(map) cpus_weight(map) |
+#define first_cpu_const(map) first_cpu(map) |
+#define next_cpu_const(cpu, map) next_cpu(cpu, map) |
+ |
+/* only ever use this for things that are _never_ used on large boxen */ |
+#define cpus_coerce_const(map) cpus_coerce(map) |
+#define any_online_cpu_const(map) any_online_cpu(map) |
+ |
+#endif /* __ASM_GENERIC_CPUMASK_CONST_VALUE_H */ |
Index: linuxc26/include/asm-generic/unaligned.h |
=================================================================== |
--- linuxc26/include/asm-generic/unaligned.h (nonexistent) |
+++ linuxc26/include/asm-generic/unaligned.h (revision 422) |
@@ -0,0 +1,20 @@ |
+#ifndef _ASM_GENERIC_UNALIGNED_H_ |
+#define _ASM_GENERIC_UNALIGNED_H_ |
+ |
+/* |
+ * For the benefit of those who are trying to port Linux to another |
+ * architecture, here are some C-language equivalents. |
+ */ |
+ |
+#include <asm/string.h> |
+ |
+ |
+#define get_unaligned(ptr) \ |
+ ({ __typeof__(*(ptr)) __tmp; memcpy(&__tmp, (ptr), sizeof(*(ptr))); __tmp; }) |
+ |
+#define put_unaligned(val, ptr) \ |
+ ({ __typeof__(*(ptr)) __tmp = (val); \ |
+ memcpy((ptr), &__tmp, sizeof(*(ptr))); \ |
+ (void)0; }) |
+ |
+#endif /* _ASM_GENERIC_UNALIGNED_H */ |
Index: linuxc26/include/asm-generic/cpumask_up.h |
=================================================================== |
--- linuxc26/include/asm-generic/cpumask_up.h (nonexistent) |
+++ linuxc26/include/asm-generic/cpumask_up.h (revision 422) |
@@ -0,0 +1,58 @@ |
+#ifndef __ASM_GENERIC_CPUMASK_UP_H |
+#define __ASM_GENERIC_CPUMASK_UP_H |
+ |
+#define cpus_coerce(map) (map) |
+ |
+#define cpu_set(cpu, map) do { (void)(cpu); cpus_coerce(map) = 1UL; } while (0) |
+#define cpu_clear(cpu, map) do { (void)(cpu); cpus_coerce(map) = 0UL; } while (0) |
+#define cpu_isset(cpu, map) ((void)(cpu), cpus_coerce(map) != 0UL) |
+#define cpu_test_and_set(cpu, map) ((void)(cpu), test_and_set_bit(0, &(map))) |
+ |
+#define cpus_and(dst, src1, src2) \ |
+ do { \ |
+ if (cpus_coerce(src1) && cpus_coerce(src2)) \ |
+ cpus_coerce(dst) = 1UL; \ |
+ else \ |
+ cpus_coerce(dst) = 0UL; \ |
+ } while (0) |
+ |
+#define cpus_or(dst, src1, src2) \ |
+ do { \ |
+ if (cpus_coerce(src1) || cpus_coerce(src2)) \ |
+ cpus_coerce(dst) = 1UL; \ |
+ else \ |
+ cpus_coerce(dst) = 0UL; \ |
+ } while (0) |
+ |
+#define cpus_clear(map) do { cpus_coerce(map) = 0UL; } while (0) |
+ |
+#define cpus_complement(map) \ |
+ do { \ |
+ cpus_coerce(map) = !cpus_coerce(map); \ |
+ } while (0) |
+ |
+#define cpus_equal(map1, map2) (cpus_coerce(map1) == cpus_coerce(map2)) |
+#define cpus_empty(map) (cpus_coerce(map) == 0UL) |
+#define cpus_weight(map) (cpus_coerce(map) ? 1UL : 0UL) |
+#define cpus_shift_right(d, s, n) do { cpus_coerce(d) = 0UL; } while (0) |
+#define cpus_shift_left(d, s, n) do { cpus_coerce(d) = 0UL; } while (0) |
+#define first_cpu(map) (cpus_coerce(map) ? 0 : 1) |
+#define next_cpu(cpu, map) 1 |
+ |
+/* only ever use this for things that are _never_ used on large boxen */ |
+#define cpus_promote(map) \ |
+ ({ \ |
+ cpumask_t __tmp__; \ |
+ cpus_coerce(__tmp__) = map; \ |
+ __tmp__; \ |
+ }) |
+#define cpumask_of_cpu(cpu) ((void)(cpu), cpus_promote(1)) |
+#define any_online_cpu(map) (cpus_coerce(map) ? 0 : 1) |
+ |
+/* |
+ * um, these need to be usable as static initializers |
+ */ |
+#define CPU_MASK_ALL 1UL |
+#define CPU_MASK_NONE 0UL |
+ |
+#endif /* __ASM_GENERIC_CPUMASK_UP_H */ |
Index: linuxc26/include/asm-generic/xor.h |
=================================================================== |
--- linuxc26/include/asm-generic/xor.h (nonexistent) |
+++ linuxc26/include/asm-generic/xor.h (revision 422) |
@@ -0,0 +1,718 @@ |
+/* |
+ * include/asm-generic/xor.h |
+ * |
+ * Generic optimized RAID-5 checksumming functions. |
+ * |
+ * 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. |
+ * |
+ * You should have received a copy of the GNU General Public License |
+ * (for example /usr/src/linux/COPYING); if not, write to the Free |
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
+ */ |
+ |
+#include <asm/processor.h> |
+ |
+static void |
+xor_8regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8; |
+ |
+ do { |
+ p1[0] ^= p2[0]; |
+ p1[1] ^= p2[1]; |
+ p1[2] ^= p2[2]; |
+ p1[3] ^= p2[3]; |
+ p1[4] ^= p2[4]; |
+ p1[5] ^= p2[5]; |
+ p1[6] ^= p2[6]; |
+ p1[7] ^= p2[7]; |
+ p1 += 8; |
+ p2 += 8; |
+ } while (--lines > 0); |
+} |
+ |
+static void |
+xor_8regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8; |
+ |
+ do { |
+ p1[0] ^= p2[0] ^ p3[0]; |
+ p1[1] ^= p2[1] ^ p3[1]; |
+ p1[2] ^= p2[2] ^ p3[2]; |
+ p1[3] ^= p2[3] ^ p3[3]; |
+ p1[4] ^= p2[4] ^ p3[4]; |
+ p1[5] ^= p2[5] ^ p3[5]; |
+ p1[6] ^= p2[6] ^ p3[6]; |
+ p1[7] ^= p2[7] ^ p3[7]; |
+ p1 += 8; |
+ p2 += 8; |
+ p3 += 8; |
+ } while (--lines > 0); |
+} |
+ |
+static void |
+xor_8regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3, unsigned long *p4) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8; |
+ |
+ do { |
+ p1[0] ^= p2[0] ^ p3[0] ^ p4[0]; |
+ p1[1] ^= p2[1] ^ p3[1] ^ p4[1]; |
+ p1[2] ^= p2[2] ^ p3[2] ^ p4[2]; |
+ p1[3] ^= p2[3] ^ p3[3] ^ p4[3]; |
+ p1[4] ^= p2[4] ^ p3[4] ^ p4[4]; |
+ p1[5] ^= p2[5] ^ p3[5] ^ p4[5]; |
+ p1[6] ^= p2[6] ^ p3[6] ^ p4[6]; |
+ p1[7] ^= p2[7] ^ p3[7] ^ p4[7]; |
+ p1 += 8; |
+ p2 += 8; |
+ p3 += 8; |
+ p4 += 8; |
+ } while (--lines > 0); |
+} |
+ |
+static void |
+xor_8regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3, unsigned long *p4, unsigned long *p5) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8; |
+ |
+ do { |
+ p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0]; |
+ p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1]; |
+ p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2]; |
+ p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3]; |
+ p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4]; |
+ p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5]; |
+ p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6]; |
+ p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7]; |
+ p1 += 8; |
+ p2 += 8; |
+ p3 += 8; |
+ p4 += 8; |
+ p5 += 8; |
+ } while (--lines > 0); |
+} |
+ |
+static void |
+xor_32regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8; |
+ |
+ do { |
+ register long d0, d1, d2, d3, d4, d5, d6, d7; |
+ d0 = p1[0]; /* Pull the stuff into registers */ |
+ d1 = p1[1]; /* ... in bursts, if possible. */ |
+ d2 = p1[2]; |
+ d3 = p1[3]; |
+ d4 = p1[4]; |
+ d5 = p1[5]; |
+ d6 = p1[6]; |
+ d7 = p1[7]; |
+ d0 ^= p2[0]; |
+ d1 ^= p2[1]; |
+ d2 ^= p2[2]; |
+ d3 ^= p2[3]; |
+ d4 ^= p2[4]; |
+ d5 ^= p2[5]; |
+ d6 ^= p2[6]; |
+ d7 ^= p2[7]; |
+ p1[0] = d0; /* Store the result (in bursts) */ |
+ p1[1] = d1; |
+ p1[2] = d2; |
+ p1[3] = d3; |
+ p1[4] = d4; |
+ p1[5] = d5; |
+ p1[6] = d6; |
+ p1[7] = d7; |
+ p1 += 8; |
+ p2 += 8; |
+ } while (--lines > 0); |
+} |
+ |
+static void |
+xor_32regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8; |
+ |
+ do { |
+ register long d0, d1, d2, d3, d4, d5, d6, d7; |
+ d0 = p1[0]; /* Pull the stuff into registers */ |
+ d1 = p1[1]; /* ... in bursts, if possible. */ |
+ d2 = p1[2]; |
+ d3 = p1[3]; |
+ d4 = p1[4]; |
+ d5 = p1[5]; |
+ d6 = p1[6]; |
+ d7 = p1[7]; |
+ d0 ^= p2[0]; |
+ d1 ^= p2[1]; |
+ d2 ^= p2[2]; |
+ d3 ^= p2[3]; |
+ d4 ^= p2[4]; |
+ d5 ^= p2[5]; |
+ d6 ^= p2[6]; |
+ d7 ^= p2[7]; |
+ d0 ^= p3[0]; |
+ d1 ^= p3[1]; |
+ d2 ^= p3[2]; |
+ d3 ^= p3[3]; |
+ d4 ^= p3[4]; |
+ d5 ^= p3[5]; |
+ d6 ^= p3[6]; |
+ d7 ^= p3[7]; |
+ p1[0] = d0; /* Store the result (in bursts) */ |
+ p1[1] = d1; |
+ p1[2] = d2; |
+ p1[3] = d3; |
+ p1[4] = d4; |
+ p1[5] = d5; |
+ p1[6] = d6; |
+ p1[7] = d7; |
+ p1 += 8; |
+ p2 += 8; |
+ p3 += 8; |
+ } while (--lines > 0); |
+} |
+ |
+static void |
+xor_32regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3, unsigned long *p4) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8; |
+ |
+ do { |
+ register long d0, d1, d2, d3, d4, d5, d6, d7; |
+ d0 = p1[0]; /* Pull the stuff into registers */ |
+ d1 = p1[1]; /* ... in bursts, if possible. */ |
+ d2 = p1[2]; |
+ d3 = p1[3]; |
+ d4 = p1[4]; |
+ d5 = p1[5]; |
+ d6 = p1[6]; |
+ d7 = p1[7]; |
+ d0 ^= p2[0]; |
+ d1 ^= p2[1]; |
+ d2 ^= p2[2]; |
+ d3 ^= p2[3]; |
+ d4 ^= p2[4]; |
+ d5 ^= p2[5]; |
+ d6 ^= p2[6]; |
+ d7 ^= p2[7]; |
+ d0 ^= p3[0]; |
+ d1 ^= p3[1]; |
+ d2 ^= p3[2]; |
+ d3 ^= p3[3]; |
+ d4 ^= p3[4]; |
+ d5 ^= p3[5]; |
+ d6 ^= p3[6]; |
+ d7 ^= p3[7]; |
+ d0 ^= p4[0]; |
+ d1 ^= p4[1]; |
+ d2 ^= p4[2]; |
+ d3 ^= p4[3]; |
+ d4 ^= p4[4]; |
+ d5 ^= p4[5]; |
+ d6 ^= p4[6]; |
+ d7 ^= p4[7]; |
+ p1[0] = d0; /* Store the result (in bursts) */ |
+ p1[1] = d1; |
+ p1[2] = d2; |
+ p1[3] = d3; |
+ p1[4] = d4; |
+ p1[5] = d5; |
+ p1[6] = d6; |
+ p1[7] = d7; |
+ p1 += 8; |
+ p2 += 8; |
+ p3 += 8; |
+ p4 += 8; |
+ } while (--lines > 0); |
+} |
+ |
+static void |
+xor_32regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3, unsigned long *p4, unsigned long *p5) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8; |
+ |
+ do { |
+ register long d0, d1, d2, d3, d4, d5, d6, d7; |
+ d0 = p1[0]; /* Pull the stuff into registers */ |
+ d1 = p1[1]; /* ... in bursts, if possible. */ |
+ d2 = p1[2]; |
+ d3 = p1[3]; |
+ d4 = p1[4]; |
+ d5 = p1[5]; |
+ d6 = p1[6]; |
+ d7 = p1[7]; |
+ d0 ^= p2[0]; |
+ d1 ^= p2[1]; |
+ d2 ^= p2[2]; |
+ d3 ^= p2[3]; |
+ d4 ^= p2[4]; |
+ d5 ^= p2[5]; |
+ d6 ^= p2[6]; |
+ d7 ^= p2[7]; |
+ d0 ^= p3[0]; |
+ d1 ^= p3[1]; |
+ d2 ^= p3[2]; |
+ d3 ^= p3[3]; |
+ d4 ^= p3[4]; |
+ d5 ^= p3[5]; |
+ d6 ^= p3[6]; |
+ d7 ^= p3[7]; |
+ d0 ^= p4[0]; |
+ d1 ^= p4[1]; |
+ d2 ^= p4[2]; |
+ d3 ^= p4[3]; |
+ d4 ^= p4[4]; |
+ d5 ^= p4[5]; |
+ d6 ^= p4[6]; |
+ d7 ^= p4[7]; |
+ d0 ^= p5[0]; |
+ d1 ^= p5[1]; |
+ d2 ^= p5[2]; |
+ d3 ^= p5[3]; |
+ d4 ^= p5[4]; |
+ d5 ^= p5[5]; |
+ d6 ^= p5[6]; |
+ d7 ^= p5[7]; |
+ p1[0] = d0; /* Store the result (in bursts) */ |
+ p1[1] = d1; |
+ p1[2] = d2; |
+ p1[3] = d3; |
+ p1[4] = d4; |
+ p1[5] = d5; |
+ p1[6] = d6; |
+ p1[7] = d7; |
+ p1 += 8; |
+ p2 += 8; |
+ p3 += 8; |
+ p4 += 8; |
+ p5 += 8; |
+ } while (--lines > 0); |
+} |
+ |
+static void |
+xor_8regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8 - 1; |
+ prefetchw(p1); |
+ prefetch(p2); |
+ |
+ do { |
+ prefetchw(p1+8); |
+ prefetch(p2+8); |
+ once_more: |
+ p1[0] ^= p2[0]; |
+ p1[1] ^= p2[1]; |
+ p1[2] ^= p2[2]; |
+ p1[3] ^= p2[3]; |
+ p1[4] ^= p2[4]; |
+ p1[5] ^= p2[5]; |
+ p1[6] ^= p2[6]; |
+ p1[7] ^= p2[7]; |
+ p1 += 8; |
+ p2 += 8; |
+ } while (--lines > 0); |
+ if (lines == 0) |
+ goto once_more; |
+} |
+ |
+static void |
+xor_8regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8 - 1; |
+ prefetchw(p1); |
+ prefetch(p2); |
+ prefetch(p3); |
+ |
+ do { |
+ prefetchw(p1+8); |
+ prefetch(p2+8); |
+ prefetch(p3+8); |
+ once_more: |
+ p1[0] ^= p2[0] ^ p3[0]; |
+ p1[1] ^= p2[1] ^ p3[1]; |
+ p1[2] ^= p2[2] ^ p3[2]; |
+ p1[3] ^= p2[3] ^ p3[3]; |
+ p1[4] ^= p2[4] ^ p3[4]; |
+ p1[5] ^= p2[5] ^ p3[5]; |
+ p1[6] ^= p2[6] ^ p3[6]; |
+ p1[7] ^= p2[7] ^ p3[7]; |
+ p1 += 8; |
+ p2 += 8; |
+ p3 += 8; |
+ } while (--lines > 0); |
+ if (lines == 0) |
+ goto once_more; |
+} |
+ |
+static void |
+xor_8regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3, unsigned long *p4) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8 - 1; |
+ |
+ prefetchw(p1); |
+ prefetch(p2); |
+ prefetch(p3); |
+ prefetch(p4); |
+ |
+ do { |
+ prefetchw(p1+8); |
+ prefetch(p2+8); |
+ prefetch(p3+8); |
+ prefetch(p4+8); |
+ once_more: |
+ p1[0] ^= p2[0] ^ p3[0] ^ p4[0]; |
+ p1[1] ^= p2[1] ^ p3[1] ^ p4[1]; |
+ p1[2] ^= p2[2] ^ p3[2] ^ p4[2]; |
+ p1[3] ^= p2[3] ^ p3[3] ^ p4[3]; |
+ p1[4] ^= p2[4] ^ p3[4] ^ p4[4]; |
+ p1[5] ^= p2[5] ^ p3[5] ^ p4[5]; |
+ p1[6] ^= p2[6] ^ p3[6] ^ p4[6]; |
+ p1[7] ^= p2[7] ^ p3[7] ^ p4[7]; |
+ p1 += 8; |
+ p2 += 8; |
+ p3 += 8; |
+ p4 += 8; |
+ } while (--lines > 0); |
+ if (lines == 0) |
+ goto once_more; |
+} |
+ |
+static void |
+xor_8regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3, unsigned long *p4, unsigned long *p5) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8 - 1; |
+ |
+ prefetchw(p1); |
+ prefetch(p2); |
+ prefetch(p3); |
+ prefetch(p4); |
+ prefetch(p5); |
+ |
+ do { |
+ prefetchw(p1+8); |
+ prefetch(p2+8); |
+ prefetch(p3+8); |
+ prefetch(p4+8); |
+ prefetch(p5+8); |
+ once_more: |
+ p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0]; |
+ p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1]; |
+ p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2]; |
+ p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3]; |
+ p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4]; |
+ p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5]; |
+ p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6]; |
+ p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7]; |
+ p1 += 8; |
+ p2 += 8; |
+ p3 += 8; |
+ p4 += 8; |
+ p5 += 8; |
+ } while (--lines > 0); |
+ if (lines == 0) |
+ goto once_more; |
+} |
+ |
+static void |
+xor_32regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8 - 1; |
+ |
+ prefetchw(p1); |
+ prefetch(p2); |
+ |
+ do { |
+ register long d0, d1, d2, d3, d4, d5, d6, d7; |
+ |
+ prefetchw(p1+8); |
+ prefetch(p2+8); |
+ once_more: |
+ d0 = p1[0]; /* Pull the stuff into registers */ |
+ d1 = p1[1]; /* ... in bursts, if possible. */ |
+ d2 = p1[2]; |
+ d3 = p1[3]; |
+ d4 = p1[4]; |
+ d5 = p1[5]; |
+ d6 = p1[6]; |
+ d7 = p1[7]; |
+ d0 ^= p2[0]; |
+ d1 ^= p2[1]; |
+ d2 ^= p2[2]; |
+ d3 ^= p2[3]; |
+ d4 ^= p2[4]; |
+ d5 ^= p2[5]; |
+ d6 ^= p2[6]; |
+ d7 ^= p2[7]; |
+ p1[0] = d0; /* Store the result (in bursts) */ |
+ p1[1] = d1; |
+ p1[2] = d2; |
+ p1[3] = d3; |
+ p1[4] = d4; |
+ p1[5] = d5; |
+ p1[6] = d6; |
+ p1[7] = d7; |
+ p1 += 8; |
+ p2 += 8; |
+ } while (--lines > 0); |
+ if (lines == 0) |
+ goto once_more; |
+} |
+ |
+static void |
+xor_32regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8 - 1; |
+ |
+ prefetchw(p1); |
+ prefetch(p2); |
+ prefetch(p3); |
+ |
+ do { |
+ register long d0, d1, d2, d3, d4, d5, d6, d7; |
+ |
+ prefetchw(p1+8); |
+ prefetch(p2+8); |
+ prefetch(p3+8); |
+ once_more: |
+ d0 = p1[0]; /* Pull the stuff into registers */ |
+ d1 = p1[1]; /* ... in bursts, if possible. */ |
+ d2 = p1[2]; |
+ d3 = p1[3]; |
+ d4 = p1[4]; |
+ d5 = p1[5]; |
+ d6 = p1[6]; |
+ d7 = p1[7]; |
+ d0 ^= p2[0]; |
+ d1 ^= p2[1]; |
+ d2 ^= p2[2]; |
+ d3 ^= p2[3]; |
+ d4 ^= p2[4]; |
+ d5 ^= p2[5]; |
+ d6 ^= p2[6]; |
+ d7 ^= p2[7]; |
+ d0 ^= p3[0]; |
+ d1 ^= p3[1]; |
+ d2 ^= p3[2]; |
+ d3 ^= p3[3]; |
+ d4 ^= p3[4]; |
+ d5 ^= p3[5]; |
+ d6 ^= p3[6]; |
+ d7 ^= p3[7]; |
+ p1[0] = d0; /* Store the result (in bursts) */ |
+ p1[1] = d1; |
+ p1[2] = d2; |
+ p1[3] = d3; |
+ p1[4] = d4; |
+ p1[5] = d5; |
+ p1[6] = d6; |
+ p1[7] = d7; |
+ p1 += 8; |
+ p2 += 8; |
+ p3 += 8; |
+ } while (--lines > 0); |
+ if (lines == 0) |
+ goto once_more; |
+} |
+ |
+static void |
+xor_32regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3, unsigned long *p4) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8 - 1; |
+ |
+ prefetchw(p1); |
+ prefetch(p2); |
+ prefetch(p3); |
+ prefetch(p4); |
+ |
+ do { |
+ register long d0, d1, d2, d3, d4, d5, d6, d7; |
+ |
+ prefetchw(p1+8); |
+ prefetch(p2+8); |
+ prefetch(p3+8); |
+ prefetch(p4+8); |
+ once_more: |
+ d0 = p1[0]; /* Pull the stuff into registers */ |
+ d1 = p1[1]; /* ... in bursts, if possible. */ |
+ d2 = p1[2]; |
+ d3 = p1[3]; |
+ d4 = p1[4]; |
+ d5 = p1[5]; |
+ d6 = p1[6]; |
+ d7 = p1[7]; |
+ d0 ^= p2[0]; |
+ d1 ^= p2[1]; |
+ d2 ^= p2[2]; |
+ d3 ^= p2[3]; |
+ d4 ^= p2[4]; |
+ d5 ^= p2[5]; |
+ d6 ^= p2[6]; |
+ d7 ^= p2[7]; |
+ d0 ^= p3[0]; |
+ d1 ^= p3[1]; |
+ d2 ^= p3[2]; |
+ d3 ^= p3[3]; |
+ d4 ^= p3[4]; |
+ d5 ^= p3[5]; |
+ d6 ^= p3[6]; |
+ d7 ^= p3[7]; |
+ d0 ^= p4[0]; |
+ d1 ^= p4[1]; |
+ d2 ^= p4[2]; |
+ d3 ^= p4[3]; |
+ d4 ^= p4[4]; |
+ d5 ^= p4[5]; |
+ d6 ^= p4[6]; |
+ d7 ^= p4[7]; |
+ p1[0] = d0; /* Store the result (in bursts) */ |
+ p1[1] = d1; |
+ p1[2] = d2; |
+ p1[3] = d3; |
+ p1[4] = d4; |
+ p1[5] = d5; |
+ p1[6] = d6; |
+ p1[7] = d7; |
+ p1 += 8; |
+ p2 += 8; |
+ p3 += 8; |
+ p4 += 8; |
+ } while (--lines > 0); |
+ if (lines == 0) |
+ goto once_more; |
+} |
+ |
+static void |
+xor_32regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, |
+ unsigned long *p3, unsigned long *p4, unsigned long *p5) |
+{ |
+ long lines = bytes / (sizeof (long)) / 8 - 1; |
+ |
+ prefetchw(p1); |
+ prefetch(p2); |
+ prefetch(p3); |
+ prefetch(p4); |
+ prefetch(p5); |
+ |
+ do { |
+ register long d0, d1, d2, d3, d4, d5, d6, d7; |
+ |
+ prefetchw(p1+8); |
+ prefetch(p2+8); |
+ prefetch(p3+8); |
+ prefetch(p4+8); |
+ prefetch(p5+8); |
+ once_more: |
+ d0 = p1[0]; /* Pull the stuff into registers */ |
+ d1 = p1[1]; /* ... in bursts, if possible. */ |
+ d2 = p1[2]; |
+ d3 = p1[3]; |
+ d4 = p1[4]; |
+ d5 = p1[5]; |
+ d6 = p1[6]; |
+ d7 = p1[7]; |
+ d0 ^= p2[0]; |
+ d1 ^= p2[1]; |
+ d2 ^= p2[2]; |
+ d3 ^= p2[3]; |
+ d4 ^= p2[4]; |
+ d5 ^= p2[5]; |
+ d6 ^= p2[6]; |
+ d7 ^= p2[7]; |
+ d0 ^= p3[0]; |
+ d1 ^= p3[1]; |
+ d2 ^= p3[2]; |
+ d3 ^= p3[3]; |
+ d4 ^= p3[4]; |
+ d5 ^= p3[5]; |
+ d6 ^= p3[6]; |
+ d7 ^= p3[7]; |
+ d0 ^= p4[0]; |
+ d1 ^= p4[1]; |
+ d2 ^= p4[2]; |
+ d3 ^= p4[3]; |
+ d4 ^= p4[4]; |
+ d5 ^= p4[5]; |
+ d6 ^= p4[6]; |
+ d7 ^= p4[7]; |
+ d0 ^= p5[0]; |
+ d1 ^= p5[1]; |
+ d2 ^= p5[2]; |
+ d3 ^= p5[3]; |
+ d4 ^= p5[4]; |
+ d5 ^= p5[5]; |
+ d6 ^= p5[6]; |
+ d7 ^= p5[7]; |
+ p1[0] = d0; /* Store the result (in bursts) */ |
+ p1[1] = d1; |
+ p1[2] = d2; |
+ p1[3] = d3; |
+ p1[4] = d4; |
+ p1[5] = d5; |
+ p1[6] = d6; |
+ p1[7] = d7; |
+ p1 += 8; |
+ p2 += 8; |
+ p3 += 8; |
+ p4 += 8; |
+ p5 += 8; |
+ } while (--lines > 0); |
+ if (lines == 0) |
+ goto once_more; |
+} |
+ |
+static struct xor_block_template xor_block_8regs = { |
+ .name = "8regs", |
+ .do_2 = xor_8regs_2, |
+ .do_3 = xor_8regs_3, |
+ .do_4 = xor_8regs_4, |
+ .do_5 = xor_8regs_5, |
+}; |
+ |
+static struct xor_block_template xor_block_32regs = { |
+ .name = "32regs", |
+ .do_2 = xor_32regs_2, |
+ .do_3 = xor_32regs_3, |
+ .do_4 = xor_32regs_4, |
+ .do_5 = xor_32regs_5, |
+}; |
+ |
+static struct xor_block_template xor_block_8regs_p = { |
+ .name = "8regs_prefetch", |
+ .do_2 = xor_8regs_p_2, |
+ .do_3 = xor_8regs_p_3, |
+ .do_4 = xor_8regs_p_4, |
+ .do_5 = xor_8regs_p_5, |
+}; |
+ |
+static struct xor_block_template xor_block_32regs_p = { |
+ .name = "32regs_prefetch", |
+ .do_2 = xor_32regs_p_2, |
+ .do_3 = xor_32regs_p_3, |
+ .do_4 = xor_32regs_p_4, |
+ .do_5 = xor_32regs_p_5, |
+}; |
+ |
+#define XOR_TRY_TEMPLATES \ |
+ do { \ |
+ xor_speed(&xor_block_8regs); \ |
+ xor_speed(&xor_block_8regs_p); \ |
+ xor_speed(&xor_block_32regs); \ |
+ xor_speed(&xor_block_32regs_p); \ |
+ } while (0) |
Index: linuxc26/include/asm-generic/pci.h |
=================================================================== |
--- linuxc26/include/asm-generic/pci.h (nonexistent) |
+++ linuxc26/include/asm-generic/pci.h (revision 422) |
@@ -0,0 +1,25 @@ |
+/* |
+ * linux/include/asm-generic/pci.h |
+ * |
+ * Copyright (C) 2003 Russell King |
+ */ |
+#ifndef _ASM_GENERIC_PCI_H |
+#define _ASM_GENERIC_PCI_H |
+ |
+/** |
+ * pcibios_resource_to_bus - convert resource to PCI bus address |
+ * @dev: device which owns this resource |
+ * @region: converted bus-centric region (start,end) |
+ * @res: resource to convert |
+ * |
+ * Convert a resource to a PCI device bus address or bus window. |
+ */ |
+static inline void |
+pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, |
+ struct resource *res) |
+{ |
+ region->start = res->start; |
+ region->end = res->end; |
+} |
+ |
+#endif |
Index: linuxc26/include/asm-generic/topology.h |
=================================================================== |
--- linuxc26/include/asm-generic/topology.h (nonexistent) |
+++ linuxc26/include/asm-generic/topology.h (revision 422) |
@@ -0,0 +1,59 @@ |
+/* |
+ * linux/include/asm-generic/topology.h |
+ * |
+ * Written by: Matthew Dobson, IBM Corporation |
+ * |
+ * Copyright (C) 2002, IBM Corp. |
+ * |
+ * 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, GOOD TITLE or |
+ * NON INFRINGEMENT. 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. |
+ * |
+ * Send feedback to <colpatch@us.ibm.com> |
+ */ |
+#ifndef _ASM_GENERIC_TOPOLOGY_H |
+#define _ASM_GENERIC_TOPOLOGY_H |
+ |
+/* Other architectures wishing to use this simple topology API should fill |
+ in the below functions as appropriate in their own <asm/topology.h> file. */ |
+#ifndef cpu_to_node |
+#define cpu_to_node(cpu) (0) |
+#endif |
+#ifndef memblk_to_node |
+#define memblk_to_node(memblk) (0) |
+#endif |
+#ifndef parent_node |
+#define parent_node(node) (0) |
+#endif |
+#ifndef node_to_cpumask |
+#define node_to_cpumask(node) (cpu_online_map) |
+#endif |
+#ifndef node_to_first_cpu |
+#define node_to_first_cpu(node) (0) |
+#endif |
+#ifndef node_to_memblk |
+#define node_to_memblk(node) (0) |
+#endif |
+#ifndef pcibus_to_cpumask |
+#define pcibus_to_cpumask(bus) (cpu_online_map) |
+#endif |
+ |
+/* Cross-node load balancing interval. */ |
+#ifndef NODE_BALANCE_RATE |
+#define NODE_BALANCE_RATE 10 |
+#endif |
+ |
+#endif /* _ASM_GENERIC_TOPOLOGY_H */ |
Index: linuxc26/include/asm-generic/pgtable.h |
=================================================================== |
--- linuxc26/include/asm-generic/pgtable.h (nonexistent) |
+++ linuxc26/include/asm-generic/pgtable.h (revision 422) |
@@ -0,0 +1,43 @@ |
+#ifndef _ASM_GENERIC_PGTABLE_H |
+#define _ASM_GENERIC_PGTABLE_H |
+ |
+static inline int ptep_test_and_clear_young(pte_t *ptep) |
+{ |
+ pte_t pte = *ptep; |
+ if (!pte_young(pte)) |
+ return 0; |
+ set_pte(ptep, pte_mkold(pte)); |
+ return 1; |
+} |
+ |
+static inline int ptep_test_and_clear_dirty(pte_t *ptep) |
+{ |
+ pte_t pte = *ptep; |
+ if (!pte_dirty(pte)) |
+ return 0; |
+ set_pte(ptep, pte_mkclean(pte)); |
+ return 1; |
+} |
+ |
+static inline pte_t ptep_get_and_clear(pte_t *ptep) |
+{ |
+ pte_t pte = *ptep; |
+ pte_clear(ptep); |
+ return pte; |
+} |
+ |
+static inline void ptep_set_wrprotect(pte_t *ptep) |
+{ |
+ pte_t old_pte = *ptep; |
+ set_pte(ptep, pte_wrprotect(old_pte)); |
+} |
+ |
+static inline void ptep_mkdirty(pte_t *ptep) |
+{ |
+ pte_t old_pte = *ptep; |
+ set_pte(ptep, pte_mkdirty(old_pte)); |
+} |
+ |
+#define pte_same(A,B) (pte_val(A) == pte_val(B)) |
+ |
+#endif /* _ASM_GENERIC_PGTABLE_H */ |
Index: linuxc26/include/asm-generic/tlb.h |
=================================================================== |
--- linuxc26/include/asm-generic/tlb.h (nonexistent) |
+++ linuxc26/include/asm-generic/tlb.h (revision 422) |
@@ -0,0 +1,144 @@ |
+/* asm-generic/tlb.h |
+ * |
+ * Generic TLB shootdown code |
+ * |
+ * Copyright 2001 Red Hat, Inc. |
+ * Based on code from mm/memory.c Copyright Linus Torvalds and others. |
+ * |
+ * 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 _ASM_GENERIC__TLB_H |
+#define _ASM_GENERIC__TLB_H |
+ |
+#include <linux/config.h> |
+#include <linux/swap.h> |
+#include <asm/tlbflush.h> |
+ |
+/* |
+ * For UP we don't need to worry about TLB flush |
+ * and page free order so much.. |
+ */ |
+#ifdef CONFIG_SMP |
+ #define FREE_PTE_NR 506 |
+ #define tlb_fast_mode(tlb) ((tlb)->nr == ~0U) |
+#else |
+ #define FREE_PTE_NR 1 |
+ #define tlb_fast_mode(tlb) 1 |
+#endif |
+ |
+/* struct mmu_gather is an opaque type used by the mm code for passing around |
+ * any data needed by arch specific code for tlb_remove_page. This structure |
+ * can be per-CPU or per-MM as the page table lock is held for the duration of |
+ * TLB shootdown. |
+ */ |
+struct mmu_gather { |
+ struct mm_struct *mm; |
+ unsigned int nr; /* set to ~0U means fast mode */ |
+ unsigned int need_flush;/* Really unmapped some ptes? */ |
+ unsigned int fullmm; /* non-zero means full mm flush */ |
+ unsigned long freed; |
+ struct page * pages[FREE_PTE_NR]; |
+}; |
+ |
+/* Users of the generic TLB shootdown code must declare this storage space. */ |
+DECLARE_PER_CPU(struct mmu_gather, mmu_gathers); |
+ |
+/* tlb_gather_mmu |
+ * Return a pointer to an initialized struct mmu_gather. |
+ */ |
+static inline struct mmu_gather * |
+tlb_gather_mmu(struct mm_struct *mm, unsigned int full_mm_flush) |
+{ |
+ struct mmu_gather *tlb = &per_cpu(mmu_gathers, smp_processor_id()); |
+ |
+ tlb->mm = mm; |
+ |
+ /* Use fast mode if only one CPU is online */ |
+ tlb->nr = num_online_cpus() > 1 ? 0U : ~0U; |
+ |
+ tlb->fullmm = full_mm_flush; |
+ tlb->freed = 0; |
+ |
+ return tlb; |
+} |
+ |
+static inline void |
+tlb_flush_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end) |
+{ |
+ if (!tlb->need_flush) |
+ return; |
+ tlb->need_flush = 0; |
+ tlb_flush(tlb); |
+ if (!tlb_fast_mode(tlb)) { |
+ free_pages_and_swap_cache(tlb->pages, tlb->nr); |
+ tlb->nr = 0; |
+ } |
+} |
+ |
+/* tlb_finish_mmu |
+ * Called at the end of the shootdown operation to free up any resources |
+ * that were required. The page table lock is still held at this point. |
+ */ |
+static inline void |
+tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end) |
+{ |
+ int freed = tlb->freed; |
+ struct mm_struct *mm = tlb->mm; |
+ int rss = mm->rss; |
+ |
+ if (rss < freed) |
+ freed = rss; |
+ mm->rss = rss - freed; |
+ tlb_flush_mmu(tlb, start, end); |
+ |
+ /* keep the page table cache within bounds */ |
+ check_pgt_cache(); |
+} |
+ |
+ |
+/* tlb_remove_page |
+ * Must perform the equivalent to __free_pte(pte_get_and_clear(ptep)), while |
+ * handling the additional races in SMP caused by other CPUs caching valid |
+ * mappings in their TLBs. |
+ */ |
+static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) |
+{ |
+ tlb->need_flush = 1; |
+ if (tlb_fast_mode(tlb)) { |
+ free_page_and_swap_cache(page); |
+ return; |
+ } |
+ tlb->pages[tlb->nr++] = page; |
+ if (tlb->nr >= FREE_PTE_NR) |
+ tlb_flush_mmu(tlb, 0, 0); |
+} |
+ |
+/** |
+ * tlb_remove_tlb_entry - remember a pte unmapping for later tlb invalidation. |
+ * |
+ * Record the fact that pte's were really umapped in ->need_flush, so we can |
+ * later optimise away the tlb invalidate. This helps when userspace is |
+ * unmapping already-unmapped pages, which happens quite a lot. |
+ */ |
+#define tlb_remove_tlb_entry(tlb, ptep, address) \ |
+ do { \ |
+ tlb->need_flush = 1; \ |
+ __tlb_remove_tlb_entry(tlb, ptep, address); \ |
+ } while (0) |
+ |
+#define pte_free_tlb(tlb, ptep) \ |
+ do { \ |
+ tlb->need_flush = 1; \ |
+ __pte_free_tlb(tlb, ptep); \ |
+ } while (0) |
+ |
+#define pmd_free_tlb(tlb, pmdp) \ |
+ do { \ |
+ tlb->need_flush = 1; \ |
+ __pmd_free_tlb(tlb, pmdp); \ |
+ } while (0) |
+ |
+#endif /* _ASM_GENERIC__TLB_H */ |
Index: linuxc26/include/asm-generic/vmlinux.lds.h |
=================================================================== |
--- linuxc26/include/asm-generic/vmlinux.lds.h (nonexistent) |
+++ linuxc26/include/asm-generic/vmlinux.lds.h (revision 422) |
@@ -0,0 +1,53 @@ |
+#ifndef LOAD_OFFSET |
+#define LOAD_OFFSET 0 |
+#endif |
+ |
+#define RODATA \ |
+ .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ |
+ *(.rodata) *(.rodata.*) \ |
+ *(__vermagic) /* Kernel version magic */ \ |
+ } \ |
+ \ |
+ .rodata1 : AT(ADDR(.rodata1) - LOAD_OFFSET) { \ |
+ *(.rodata1) \ |
+ } \ |
+ \ |
+ /* Kernel symbol table: Normal symbols */ \ |
+ __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \ |
+ __start___ksymtab = .; \ |
+ *(__ksymtab) \ |
+ __stop___ksymtab = .; \ |
+ } \ |
+ \ |
+ /* Kernel symbol table: GPL-only symbols */ \ |
+ __ksymtab_gpl : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) { \ |
+ __start___ksymtab_gpl = .; \ |
+ *(__ksymtab_gpl) \ |
+ __stop___ksymtab_gpl = .; \ |
+ } \ |
+ \ |
+ /* Kernel symbol table: Normal symbols */ \ |
+ __kcrctab : AT(ADDR(__kcrctab) - LOAD_OFFSET) { \ |
+ __start___kcrctab = .; \ |
+ *(__kcrctab) \ |
+ __stop___kcrctab = .; \ |
+ } \ |
+ \ |
+ /* Kernel symbol table: GPL-only symbols */ \ |
+ __kcrctab_gpl : AT(ADDR(__kcrctab_gpl) - LOAD_OFFSET) { \ |
+ __start___kcrctab_gpl = .; \ |
+ *(__kcrctab_gpl) \ |
+ __stop___kcrctab_gpl = .; \ |
+ } \ |
+ \ |
+ /* Kernel symbol table: strings */ \ |
+ __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \ |
+ *(__ksymtab_strings) \ |
+ } |
+ |
+#define SECURITY_INIT \ |
+ .security_initcall.init : { \ |
+ __security_initcall_start = .; \ |
+ *(.security_initcall.init) \ |
+ __security_initcall_end = .; \ |
+ } |
Index: linuxc26/include/asm-generic/errno.h |
=================================================================== |
--- linuxc26/include/asm-generic/errno.h (nonexistent) |
+++ linuxc26/include/asm-generic/errno.h (revision 422) |
@@ -0,0 +1,100 @@ |
+#ifndef _ASM_GENERIC_ERRNO_H |
+#define _ASM_GENERIC_ERRNO_H |
+ |
+#include <asm-generic/errno-base.h> |
+ |
+#define EDEADLK 35 /* Resource deadlock would occur */ |
+#define ENAMETOOLONG 36 /* File name too long */ |
+#define ENOLCK 37 /* No record locks available */ |
+#define ENOSYS 38 /* Function not implemented */ |
+#define ENOTEMPTY 39 /* Directory not empty */ |
+#define ELOOP 40 /* Too many symbolic links encountered */ |
+#define EWOULDBLOCK EAGAIN /* Operation would block */ |
+#define ENOMSG 42 /* No message of desired type */ |
+#define EIDRM 43 /* Identifier removed */ |
+#define ECHRNG 44 /* Channel number out of range */ |
+#define EL2NSYNC 45 /* Level 2 not synchronized */ |
+#define EL3HLT 46 /* Level 3 halted */ |
+#define EL3RST 47 /* Level 3 reset */ |
+#define ELNRNG 48 /* Link number out of range */ |
+#define EUNATCH 49 /* Protocol driver not attached */ |
+#define ENOCSI 50 /* No CSI structure available */ |
+#define EL2HLT 51 /* Level 2 halted */ |
+#define EBADE 52 /* Invalid exchange */ |
+#define EBADR 53 /* Invalid request descriptor */ |
+#define EXFULL 54 /* Exchange full */ |
+#define ENOANO 55 /* No anode */ |
+#define EBADRQC 56 /* Invalid request code */ |
+#define EBADSLT 57 /* Invalid slot */ |
+ |
+#define EDEADLOCK EDEADLK |
+ |
+#define EBFONT 59 /* Bad font file format */ |
+#define ENOSTR 60 /* Device not a stream */ |
+#define ENODATA 61 /* No data available */ |
+#define ETIME 62 /* Timer expired */ |
+#define ENOSR 63 /* Out of streams resources */ |
+#define ENONET 64 /* Machine is not on the network */ |
+#define ENOPKG 65 /* Package not installed */ |
+#define EREMOTE 66 /* Object is remote */ |
+#define ENOLINK 67 /* Link has been severed */ |
+#define EADV 68 /* Advertise error */ |
+#define ESRMNT 69 /* Srmount error */ |
+#define ECOMM 70 /* Communication error on send */ |
+#define EPROTO 71 /* Protocol error */ |
+#define EMULTIHOP 72 /* Multihop attempted */ |
+#define EDOTDOT 73 /* RFS specific error */ |
+#define EBADMSG 74 /* Not a data message */ |
+#define EOVERFLOW 75 /* Value too large for defined data type */ |
+#define ENOTUNIQ 76 /* Name not unique on network */ |
+#define EBADFD 77 /* File descriptor in bad state */ |
+#define EREMCHG 78 /* Remote address changed */ |
+#define ELIBACC 79 /* Can not access a needed shared library */ |
+#define ELIBBAD 80 /* Accessing a corrupted shared library */ |
+#define ELIBSCN 81 /* .lib section in a.out corrupted */ |
+#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ |
+#define ELIBEXEC 83 /* Cannot exec a shared library directly */ |
+#define EILSEQ 84 /* Illegal byte sequence */ |
+#define ERESTART 85 /* Interrupted system call should be restarted */ |
+#define ESTRPIPE 86 /* Streams pipe error */ |
+#define EUSERS 87 /* Too many users */ |
+#define ENOTSOCK 88 /* Socket operation on non-socket */ |
+#define EDESTADDRREQ 89 /* Destination address required */ |
+#define EMSGSIZE 90 /* Message too long */ |
+#define EPROTOTYPE 91 /* Protocol wrong type for socket */ |
+#define ENOPROTOOPT 92 /* Protocol not available */ |
+#define EPROTONOSUPPORT 93 /* Protocol not supported */ |
+#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ |
+#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ |
+#define EPFNOSUPPORT 96 /* Protocol family not supported */ |
+#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ |
+#define EADDRINUSE 98 /* Address already in use */ |
+#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ |
+#define ENETDOWN 100 /* Network is down */ |
+#define ENETUNREACH 101 /* Network is unreachable */ |
+#define ENETRESET 102 /* Network dropped connection because of reset */ |
+#define ECONNABORTED 103 /* Software caused connection abort */ |
+#define ECONNRESET 104 /* Connection reset by peer */ |
+#define ENOBUFS 105 /* No buffer space available */ |
+#define EISCONN 106 /* Transport endpoint is already connected */ |
+#define ENOTCONN 107 /* Transport endpoint is not connected */ |
+#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ |
+#define ETOOMANYREFS 109 /* Too many references: cannot splice */ |
+#define ETIMEDOUT 110 /* Connection timed out */ |
+#define ECONNREFUSED 111 /* Connection refused */ |
+#define EHOSTDOWN 112 /* Host is down */ |
+#define EHOSTUNREACH 113 /* No route to host */ |
+#define EALREADY 114 /* Operation already in progress */ |
+#define EINPROGRESS 115 /* Operation now in progress */ |
+#define ESTALE 116 /* Stale NFS file handle */ |
+#define EUCLEAN 117 /* Structure needs cleaning */ |
+#define ENOTNAM 118 /* Not a XENIX named type file */ |
+#define ENAVAIL 119 /* No XENIX semaphores available */ |
+#define EISNAM 120 /* Is a named type file */ |
+#define EREMOTEIO 121 /* Remote I/O error */ |
+#define EDQUOT 122 /* Quota exceeded */ |
+ |
+#define ENOMEDIUM 123 /* No medium found */ |
+#define EMEDIUMTYPE 124 /* Wrong medium type */ |
+ |
+#endif |
Index: linuxc26/include/asm-generic/sections.h |
=================================================================== |
--- linuxc26/include/asm-generic/sections.h (nonexistent) |
+++ linuxc26/include/asm-generic/sections.h (revision 422) |
@@ -0,0 +1,12 @@ |
+#ifndef _ASM_GENERIC_SECTIONS_H_ |
+#define _ASM_GENERIC_SECTIONS_H_ |
+ |
+/* References to section boundaries */ |
+ |
+extern char _text[], _stext[], _etext[]; |
+extern char _data[], _sdata[], _edata[]; |
+extern char __bss_start[]; |
+extern char __init_begin[], __init_end[]; |
+extern char _sinittext[], _einittext[]; |
+ |
+#endif /* _ASM_GENERIC_SECTIONS_H_ */ |
Index: linuxc26/include/asm-generic/cpumask_const_reference.h |
=================================================================== |
--- linuxc26/include/asm-generic/cpumask_const_reference.h (nonexistent) |
+++ linuxc26/include/asm-generic/cpumask_const_reference.h (revision 422) |
@@ -0,0 +1,29 @@ |
+#ifndef __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H |
+#define __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H |
+ |
+struct cpumask_ref { |
+ const cpumask_t *val; |
+}; |
+ |
+typedef const struct cpumask_ref cpumask_const_t; |
+ |
+#define mk_cpumask_const(map) ((cpumask_const_t){ &(map) }) |
+#define cpu_isset_const(cpu, map) cpu_isset(cpu, *(map).val) |
+ |
+#define cpus_and_const(dst,src1,src2) cpus_and(dst,*(src1).val,*(src2).val) |
+#define cpus_or_const(dst,src1,src2) cpus_or(dst,*(src1).val,*(src2).val) |
+ |
+#define cpus_equal_const(map1, map2) cpus_equal(*(map1).val, *(map2).val) |
+ |
+#define cpus_copy_const(map1, map2) bitmap_copy((map1).mask, (map2).val->mask, NR_CPUS) |
+ |
+#define cpus_empty_const(map) cpus_empty(*(map).val) |
+#define cpus_weight_const(map) cpus_weight(*(map).val) |
+#define first_cpu_const(map) first_cpu(*(map).val) |
+#define next_cpu_const(cpu, map) next_cpu(cpu, *(map).val) |
+ |
+/* only ever use this for things that are _never_ used on large boxen */ |
+#define cpus_coerce_const(map) cpus_coerce(*(map).val) |
+#define any_online_cpu_const(map) any_online_cpu(*(map).val) |
+ |
+#endif /* __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H */ |
Index: linuxc26/include/asm-generic/rtc.h |
=================================================================== |
--- linuxc26/include/asm-generic/rtc.h (nonexistent) |
+++ linuxc26/include/asm-generic/rtc.h (revision 422) |
@@ -0,0 +1,213 @@ |
+/* |
+ * inclue/asm-generic/rtc.h |
+ * |
+ * Author: Tom Rini <trini@mvista.com> |
+ * |
+ * Based on: |
+ * drivers/char/rtc.c |
+ * |
+ * Please read the COPYING file for all license details. |
+ */ |
+ |
+#ifndef __ASM_RTC_H__ |
+#define __ASM_RTC_H__ |
+ |
+#ifdef __KERNEL__ |
+ |
+#include <linux/mc146818rtc.h> |
+#include <linux/rtc.h> |
+#include <linux/bcd.h> |
+ |
+#define RTC_PIE 0x40 /* periodic interrupt enable */ |
+#define RTC_AIE 0x20 /* alarm interrupt enable */ |
+#define RTC_UIE 0x10 /* update-finished interrupt enable */ |
+ |
+/* some dummy definitions */ |
+#define RTC_BATT_BAD 0x100 /* battery bad */ |
+#define RTC_SQWE 0x08 /* enable square-wave output */ |
+#define RTC_DM_BINARY 0x04 /* all time/date values are BCD if clear */ |
+#define RTC_24H 0x02 /* 24 hour mode - else hours bit 7 means pm */ |
+#define RTC_DST_EN 0x01 /* auto switch DST - works f. USA only */ |
+ |
+/* |
+ * Returns true if a clock update is in progress |
+ */ |
+static inline unsigned char rtc_is_updating(void) |
+{ |
+ unsigned char uip; |
+ |
+ spin_lock_irq(&rtc_lock); |
+ uip = (CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP); |
+ spin_unlock_irq(&rtc_lock); |
+ return uip; |
+} |
+ |
+static inline unsigned int get_rtc_time(struct rtc_time *time) |
+{ |
+ unsigned long uip_watchdog = jiffies; |
+ unsigned char ctrl; |
+#ifdef CONFIG_DECSTATION |
+ unsigned int real_year; |
+#endif |
+ |
+ /* |
+ * read RTC once any update in progress is done. The update |
+ * can take just over 2ms. We wait 10 to 20ms. There is no need to |
+ * to poll-wait (up to 1s - eeccch) for the falling edge of RTC_UIP. |
+ * If you need to know *exactly* when a second has started, enable |
+ * periodic update complete interrupts, (via ioctl) and then |
+ * immediately read /dev/rtc which will block until you get the IRQ. |
+ * Once the read clears, read the RTC time (again via ioctl). Easy. |
+ */ |
+ |
+ if (rtc_is_updating() != 0) |
+ while (jiffies - uip_watchdog < 2*HZ/100) { |
+ barrier(); |
+ cpu_relax(); |
+ } |
+ |
+ /* |
+ * Only the values that we read from the RTC are set. We leave |
+ * tm_wday, tm_yday and tm_isdst untouched. Even though the |
+ * RTC has RTC_DAY_OF_WEEK, we ignore it, as it is only updated |
+ * by the RTC when initially set to a non-zero value. |
+ */ |
+ spin_lock_irq(&rtc_lock); |
+ time->tm_sec = CMOS_READ(RTC_SECONDS); |
+ time->tm_min = CMOS_READ(RTC_MINUTES); |
+ time->tm_hour = CMOS_READ(RTC_HOURS); |
+ time->tm_mday = CMOS_READ(RTC_DAY_OF_MONTH); |
+ time->tm_mon = CMOS_READ(RTC_MONTH); |
+ time->tm_year = CMOS_READ(RTC_YEAR); |
+#ifdef CONFIG_DECSTATION |
+ real_year = CMOS_READ(RTC_DEC_YEAR); |
+#endif |
+ ctrl = CMOS_READ(RTC_CONTROL); |
+ spin_unlock_irq(&rtc_lock); |
+ |
+ if (!(ctrl & RTC_DM_BINARY) || RTC_ALWAYS_BCD) |
+ { |
+ BCD_TO_BIN(time->tm_sec); |
+ BCD_TO_BIN(time->tm_min); |
+ BCD_TO_BIN(time->tm_hour); |
+ BCD_TO_BIN(time->tm_mday); |
+ BCD_TO_BIN(time->tm_mon); |
+ BCD_TO_BIN(time->tm_year); |
+ } |
+ |
+#ifdef CONFIG_DECSTATION |
+ time->tm_year += real_year - 72; |
+#endif |
+ |
+ /* |
+ * Account for differences between how the RTC uses the values |
+ * and how they are defined in a struct rtc_time; |
+ */ |
+ if (time->tm_year <= 69) |
+ time->tm_year += 100; |
+ |
+ time->tm_mon--; |
+ |
+ return RTC_24H; |
+} |
+ |
+/* Set the current date and time in the real time clock. */ |
+static inline int set_rtc_time(struct rtc_time *time) |
+{ |
+ unsigned char mon, day, hrs, min, sec; |
+ unsigned char save_control, save_freq_select; |
+ unsigned int yrs; |
+#ifdef CONFIG_DECSTATION |
+ unsigned int real_yrs, leap_yr; |
+#endif |
+ |
+ yrs = time->tm_year; |
+ mon = time->tm_mon + 1; /* tm_mon starts at zero */ |
+ day = time->tm_mday; |
+ hrs = time->tm_hour; |
+ min = time->tm_min; |
+ sec = time->tm_sec; |
+ |
+ if (yrs > 255) /* They are unsigned */ |
+ return -EINVAL; |
+ |
+ spin_lock_irq(&rtc_lock); |
+#ifdef CONFIG_DECSTATION |
+ real_yrs = yrs; |
+ leap_yr = ((!((yrs + 1900) % 4) && ((yrs + 1900) % 100)) || |
+ !((yrs + 1900) % 400)); |
+ yrs = 72; |
+ |
+ /* |
+ * We want to keep the year set to 73 until March |
+ * for non-leap years, so that Feb, 29th is handled |
+ * correctly. |
+ */ |
+ if (!leap_yr && mon < 3) { |
+ real_yrs--; |
+ yrs = 73; |
+ } |
+#endif |
+ /* These limits and adjustments are independent of |
+ * whether the chip is in binary mode or not. |
+ */ |
+ if (yrs > 169) { |
+ spin_unlock_irq(&rtc_lock); |
+ return -EINVAL; |
+ } |
+ |
+ if (yrs >= 100) |
+ yrs -= 100; |
+ |
+ if (!(CMOS_READ(RTC_CONTROL) & RTC_DM_BINARY) |
+ || RTC_ALWAYS_BCD) { |
+ BIN_TO_BCD(sec); |
+ BIN_TO_BCD(min); |
+ BIN_TO_BCD(hrs); |
+ BIN_TO_BCD(day); |
+ BIN_TO_BCD(mon); |
+ BIN_TO_BCD(yrs); |
+ } |
+ |
+ save_control = CMOS_READ(RTC_CONTROL); |
+ CMOS_WRITE((save_control|RTC_SET), RTC_CONTROL); |
+ save_freq_select = CMOS_READ(RTC_FREQ_SELECT); |
+ CMOS_WRITE((save_freq_select|RTC_DIV_RESET2), RTC_FREQ_SELECT); |
+ |
+#ifdef CONFIG_DECSTATION |
+ CMOS_WRITE(real_yrs, RTC_DEC_YEAR); |
+#endif |
+ CMOS_WRITE(yrs, RTC_YEAR); |
+ CMOS_WRITE(mon, RTC_MONTH); |
+ CMOS_WRITE(day, RTC_DAY_OF_MONTH); |
+ CMOS_WRITE(hrs, RTC_HOURS); |
+ CMOS_WRITE(min, RTC_MINUTES); |
+ CMOS_WRITE(sec, RTC_SECONDS); |
+ |
+ CMOS_WRITE(save_control, RTC_CONTROL); |
+ CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT); |
+ |
+ spin_unlock_irq(&rtc_lock); |
+ |
+ return 0; |
+} |
+ |
+static inline unsigned int get_rtc_ss(void) |
+{ |
+ struct rtc_time h; |
+ |
+ get_rtc_time(&h); |
+ return h.tm_sec; |
+} |
+ |
+static inline int get_rtc_pll(struct rtc_pll_info *pll) |
+{ |
+ return -EINVAL; |
+} |
+static inline int set_rtc_pll(struct rtc_pll_info *pll) |
+{ |
+ return -EINVAL; |
+} |
+ |
+#endif /* __KERNEL__ */ |
+#endif /* __ASM_RTC_H__ */ |