X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Flinux%2Fatmdev.h;fp=include%2Flinux%2Fatmdev.h;h=9f374cfa1b05ac7afe0495f87939dd4511341e80;hb=f7f1b0f1e2fbadeab12d24236000e778aa9b1ead;hp=bc701ddb88e4a8663734694127a3d967bc7e35c9;hpb=e3f6fb6212a7102bdb56ba38fa1e98fe72950475;p=linux-2.6.git diff --git a/include/linux/atmdev.h b/include/linux/atmdev.h index bc701ddb8..9f374cfa1 100644 --- a/include/linux/atmdev.h +++ b/include/linux/atmdev.h @@ -30,9 +30,6 @@ #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 */ \ @@ -281,6 +278,8 @@ enum { #define ATM_ATMOPT_CLP 1 /* set CLP bit */ struct atm_vcc { + /* struct sock has to be the first member of atm_vcc */ + struct sock sk; unsigned long flags; /* VCC flags (ATM_VF_*) */ short vpi; /* VPI and VCI (types must be equal */ /* with sockaddr) */ @@ -297,7 +296,6 @@ struct atm_vcc { 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; @@ -310,6 +308,20 @@ struct atm_vcc { /* by CLIP and sch_atm. */ }; +static inline struct atm_vcc *atm_sk(struct sock *sk) +{ + return (struct atm_vcc *)sk; +} + +static inline struct atm_vcc *ATM_SD(struct socket *sock) +{ + return atm_sk(sock->sk); +} + +static inline struct sock *sk_atm(struct atm_vcc *vcc) +{ + return (struct sock *)vcc; +} struct atm_dev_addr { struct sockaddr_atmsvc addr; /* ATM address */ @@ -410,20 +422,20 @@ static inline int atm_guess_pdu2truesize(int size) static inline void atm_force_charge(struct atm_vcc *vcc,int truesize) { - atomic_add(truesize, &vcc->sk->sk_rmem_alloc); + atomic_add(truesize, &sk_atm(vcc)->sk_rmem_alloc); } static inline void atm_return(struct atm_vcc *vcc,int truesize) { - atomic_sub(truesize, &vcc->sk->sk_rmem_alloc); + atomic_sub(truesize, &sk_atm(vcc)->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; + return (size + atomic_read(&sk_atm(vcc)->sk_wmem_alloc)) < + sk_atm(vcc)->sk_sndbuf; }