Commit 5ac16be8 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://kernel.bkbits.net/davem/net-2.6

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 2ce6c0f5 c2d26a96
...@@ -94,6 +94,10 @@ static struct crypto_alg cipher_null = { ...@@ -94,6 +94,10 @@ static struct crypto_alg cipher_null = {
.cia_decrypt = null_decrypt } } .cia_decrypt = null_decrypt } }
}; };
MODULE_ALIAS("compress_null");
MODULE_ALIAS("digest_null");
MODULE_ALIAS("cipher_null");
static int __init init(void) static int __init init(void)
{ {
int ret = 0; int ret = 0;
......
...@@ -385,6 +385,15 @@ config ATM_FORE200E_SBA_FW ...@@ -385,6 +385,15 @@ config ATM_FORE200E_SBA_FW
not have to supply an alternative one. They just say Y to "Use not have to supply an alternative one. They just say Y to "Use
default SBA-200E firmware", above. default SBA-200E firmware", above.
config ATM_FORE200E_USE_TASKLET
bool "Defer interrupt work to a tasklet"
depends on (PCI || SBUS) && (ATM_FORE200E_PCA || ATM_FORE200E_SBA)
default n
help
This defers work to be done by the interrupt handler to a
tasklet instead of hanlding everything at interrupt time. This
may improve the responsive of the host.
config ATM_FORE200E_TX_RETRY config ATM_FORE200E_TX_RETRY
int "Maximum number of tx retries" int "Maximum number of tx retries"
depends on (PCI || SBUS) && (ATM_FORE200E_PCA || ATM_FORE200E_SBA) depends on (PCI || SBUS) && (ATM_FORE200E_PCA || ATM_FORE200E_SBA)
......
This diff is collapsed.
...@@ -23,19 +23,21 @@ ...@@ -23,19 +23,21 @@
#define BUFFER_S2_SIZE SMALL_BUFFER_SIZE /* size of small buffers, scheme 2 */ #define BUFFER_S2_SIZE SMALL_BUFFER_SIZE /* size of small buffers, scheme 2 */
#define BUFFER_L2_SIZE LARGE_BUFFER_SIZE /* size of large buffers, scheme 2 */ #define BUFFER_L2_SIZE LARGE_BUFFER_SIZE /* size of large buffers, scheme 2 */
#define BUFFER_S1_NBR (RBD_BLK_SIZE * 2) #define BUFFER_S1_NBR (RBD_BLK_SIZE * 6)
#define BUFFER_L1_NBR (RBD_BLK_SIZE * 2) #define BUFFER_L1_NBR (RBD_BLK_SIZE * 4)
#define BUFFER_S2_NBR (RBD_BLK_SIZE * 2) #define BUFFER_S2_NBR (RBD_BLK_SIZE * 6)
#define BUFFER_L2_NBR (RBD_BLK_SIZE * 2) #define BUFFER_L2_NBR (RBD_BLK_SIZE * 4)
#define QUEUE_SIZE_CMD 16 /* command queue capacity */ #define QUEUE_SIZE_CMD 16 /* command queue capacity */
#define QUEUE_SIZE_RX 64 /* receive queue capacity */ #define QUEUE_SIZE_RX 64 /* receive queue capacity */
#define QUEUE_SIZE_TX 256 /* transmit queue capacity */ #define QUEUE_SIZE_TX 256 /* transmit queue capacity */
#define QUEUE_SIZE_BS 16 /* buffer supply queue capacity */ #define QUEUE_SIZE_BS 32 /* buffer supply queue capacity */
#define NBR_CONNECT 1024 /* number of ATM connections */ #define FORE200E_VPI_BITS 0
#define FORE200E_VCI_BITS 10
#define NBR_CONNECT (1 << (FORE200E_VPI_BITS + FORE200E_VCI_BITS)) /* number of connections */
#define TSD_FIXED 2 #define TSD_FIXED 2
...@@ -207,6 +209,7 @@ typedef struct tpd_haddr { ...@@ -207,6 +209,7 @@ typedef struct tpd_haddr {
) )
} tpd_haddr_t; } tpd_haddr_t;
#define TPD_HADDR_SHIFT 5 /* addr aligned on 32 byte boundary */
/* cp resident transmit queue entry */ /* cp resident transmit queue entry */
...@@ -517,13 +520,15 @@ typedef struct cp_cmdq_entry { ...@@ -517,13 +520,15 @@ typedef struct cp_cmdq_entry {
/* host resident transmit queue entry */ /* host resident transmit queue entry */
typedef struct host_txq_entry { typedef struct host_txq_entry {
struct cp_txq_entry* cp_entry; /* addr of cp resident tx queue entry */ struct cp_txq_entry* cp_entry; /* addr of cp resident tx queue entry */
enum status* status; /* addr of host resident status */ enum status* status; /* addr of host resident status */
struct tpd* tpd; /* addr of transmit PDU descriptor */ struct tpd* tpd; /* addr of transmit PDU descriptor */
u32 tpd_dma; /* DMA address of tpd */ u32 tpd_dma; /* DMA address of tpd */
struct sk_buff* skb; /* related skb */ struct sk_buff* skb; /* related skb */
struct atm_vcc* vcc; /* related vcc */ void* data; /* copy of misaligned data */
void* data; /* copy of misaligned data */ unsigned long incarn; /* vc_map incarnation when submitted for tx */
struct fore200e_vc_map* vc_map;
} host_txq_entry_t; } host_txq_entry_t;
...@@ -576,6 +581,10 @@ typedef struct buffer { ...@@ -576,6 +581,10 @@ typedef struct buffer {
enum buffer_scheme scheme; /* buffer scheme */ enum buffer_scheme scheme; /* buffer scheme */
enum buffer_magn magn; /* buffer magnitude */ enum buffer_magn magn; /* buffer magnitude */
struct chunk data; /* data buffer */ struct chunk data; /* data buffer */
#ifdef FORE200E_BSQ_DEBUG
unsigned long index; /* buffer # in queue */
int supplied; /* 'buffer supplied' flag */
#endif
} buffer_t; } buffer_t;
...@@ -602,6 +611,7 @@ typedef struct host_cmdq { ...@@ -602,6 +611,7 @@ typedef struct host_cmdq {
typedef struct host_txq { typedef struct host_txq {
struct host_txq_entry host_entry[ QUEUE_SIZE_TX ]; /* host resident tx queue entries */ struct host_txq_entry host_entry[ QUEUE_SIZE_TX ]; /* host resident tx queue entries */
int head; /* head of tx queue */ int head; /* head of tx queue */
int tail; /* tail of tx queue */
struct chunk tpd; /* array of tpds */ struct chunk tpd; /* array of tpds */
struct chunk status; /* arry of completion status */ struct chunk status; /* arry of completion status */
int txing; /* number of pending PDUs in tx queue */ int txing; /* number of pending PDUs in tx queue */
...@@ -626,8 +636,8 @@ typedef struct host_bsq { ...@@ -626,8 +636,8 @@ typedef struct host_bsq {
struct chunk rbd_block; /* array of rbds */ struct chunk rbd_block; /* array of rbds */
struct chunk status; /* array of completion status */ struct chunk status; /* array of completion status */
struct buffer* buffer; /* array of rx buffers */ struct buffer* buffer; /* array of rx buffers */
int free; /* index of first free rx buffer */ struct buffer* freebuf; /* list of free rx buffers */
volatile int count; /* count of supplied rx buffers */ volatile int freebuf_count; /* count of free rx buffers */
} host_bsq_t; } host_bsq_t;
...@@ -847,6 +857,17 @@ typedef struct fore200e_bus { ...@@ -847,6 +857,17 @@ typedef struct fore200e_bus {
#endif #endif
/* vc mapping */
typedef struct fore200e_vc_map {
struct atm_vcc* vcc; /* vcc entry */
unsigned long incarn; /* vcc incarnation number */
} fore200e_vc_map_t;
#define FORE200E_VC_MAP(fore200e, vpi, vci) \
(& (fore200e)->vc_map[ ((vpi) << FORE200E_VCI_BITS) | (vci) ])
/* per-device data */ /* per-device data */
typedef struct fore200e { typedef struct fore200e {
...@@ -880,20 +901,29 @@ typedef struct fore200e { ...@@ -880,20 +901,29 @@ typedef struct fore200e {
struct stats* stats; /* last snapshot of the stats */ struct stats* stats; /* last snapshot of the stats */
struct semaphore rate_sf; /* protects rate reservation ops */ struct semaphore rate_sf; /* protects rate reservation ops */
struct tasklet_struct tasklet; /* performs interrupt work */ spinlock_t q_lock; /* protects queue ops */
#ifdef FORE200E_USE_TASKLET
struct tasklet_struct tx_tasklet; /* performs tx interrupt work */
struct tasklet_struct rx_tasklet; /* performs rx interrupt work */
#endif
unsigned long tx_sat; /* tx queue saturation count */
unsigned long incarn_count;
struct fore200e_vc_map vc_map[ NBR_CONNECT ]; /* vc mapping */
} fore200e_t; } fore200e_t;
/* per-vcc data */ /* per-vcc data */
typedef struct fore200e_vcc { typedef struct fore200e_vcc {
enum buffer_scheme scheme; /* rx buffer scheme */ enum buffer_scheme scheme; /* rx buffer scheme */
struct tpd_rate rate; /* tx rate control data */ struct tpd_rate rate; /* tx rate control data */
int rx_min_pdu; /* size of smallest PDU received */ int rx_min_pdu; /* size of smallest PDU received */
int rx_max_pdu; /* size of largest PDU received */ int rx_max_pdu; /* size of largest PDU received */
int tx_min_pdu; /* size of smallest PDU transmitted */ int tx_min_pdu; /* size of smallest PDU transmitted */
int tx_max_pdu; /* size of largest PDU transmitted */ int tx_max_pdu; /* size of largest PDU transmitted */
unsigned long tx_pdu; /* nbr of tx pdus */
unsigned long rx_pdu; /* nbr of rx pdus */
} fore200e_vcc_t; } fore200e_vcc_t;
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <linux/types.h> /* for "__kernel_caddr_t" et al */ #include <linux/types.h> /* for "__kernel_caddr_t" et al */
#include <linux/socket.h> /* for "struct sockaddr" et al */ #include <linux/socket.h> /* for "struct sockaddr" et al */
#include <linux/compiler.h> /* for "__user" et al */
#define IFNAMSIZ 16 #define IFNAMSIZ 16
#include <linux/hdlc/ioctl.h> #include <linux/hdlc/ioctl.h>
......
...@@ -98,9 +98,10 @@ enum ...@@ -98,9 +98,10 @@ enum
TCPDIAG_NONE, TCPDIAG_NONE,
TCPDIAG_MEMINFO, TCPDIAG_MEMINFO,
TCPDIAG_INFO, TCPDIAG_INFO,
TCPDIAG_VEGASINFO,
}; };
#define TCPDIAG_MAX TCPDIAG_INFO #define TCPDIAG_MAX TCPDIAG_VEGASINFO
/* TCPDIAG_MEM */ /* TCPDIAG_MEM */
...@@ -113,4 +114,14 @@ struct tcpdiag_meminfo ...@@ -113,4 +114,14 @@ struct tcpdiag_meminfo
__u32 tcpdiag_tmem; __u32 tcpdiag_tmem;
}; };
/* TCPDIAG_VEGASINFO */
struct tcpvegas_info {
__u32 tcpv_enabled;
__u32 tcpv_rttcnt;
__u32 tcpv_rtt;
__u32 tcpv_minrtt;
};
#endif /* _TCP_DIAG_H_ */ #endif /* _TCP_DIAG_H_ */
...@@ -50,6 +50,7 @@ static int tcpdiag_fill(struct sk_buff *skb, struct sock *sk, ...@@ -50,6 +50,7 @@ static int tcpdiag_fill(struct sk_buff *skb, struct sock *sk,
struct nlmsghdr *nlh; struct nlmsghdr *nlh;
struct tcp_info *info = NULL; struct tcp_info *info = NULL;
struct tcpdiag_meminfo *minfo = NULL; struct tcpdiag_meminfo *minfo = NULL;
struct tcpvegas_info *vinfo = NULL;
unsigned char *b = skb->tail; unsigned char *b = skb->tail;
nlh = NLMSG_PUT(skb, pid, seq, TCPDIAG_GETSOCK, sizeof(*r)); nlh = NLMSG_PUT(skb, pid, seq, TCPDIAG_GETSOCK, sizeof(*r));
...@@ -59,6 +60,9 @@ static int tcpdiag_fill(struct sk_buff *skb, struct sock *sk, ...@@ -59,6 +60,9 @@ static int tcpdiag_fill(struct sk_buff *skb, struct sock *sk,
minfo = TCPDIAG_PUT(skb, TCPDIAG_MEMINFO, sizeof(*minfo)); minfo = TCPDIAG_PUT(skb, TCPDIAG_MEMINFO, sizeof(*minfo));
if (ext & (1<<(TCPDIAG_INFO-1))) if (ext & (1<<(TCPDIAG_INFO-1)))
info = TCPDIAG_PUT(skb, TCPDIAG_INFO, sizeof(*info)); info = TCPDIAG_PUT(skb, TCPDIAG_INFO, sizeof(*info));
if (tcp_is_vegas(tp) && (ext & (1<<(TCPDIAG_VEGASINFO-1))))
vinfo = TCPDIAG_PUT(skb, TCPDIAG_VEGASINFO, sizeof(*vinfo));
} }
r->tcpdiag_family = sk->sk_family; r->tcpdiag_family = sk->sk_family;
r->tcpdiag_state = sk->sk_state; r->tcpdiag_state = sk->sk_state;
...@@ -196,6 +200,13 @@ static int tcpdiag_fill(struct sk_buff *skb, struct sock *sk, ...@@ -196,6 +200,13 @@ static int tcpdiag_fill(struct sk_buff *skb, struct sock *sk,
info->tcpi_reordering = tp->reordering; info->tcpi_reordering = tp->reordering;
} }
if (vinfo) {
vinfo->tcpv_enabled = tp->vegas.doing_vegas_now;
vinfo->tcpv_rttcnt = tp->vegas.cntRTT;
vinfo->tcpv_rtt = tp->vegas.baseRTT;
vinfo->tcpv_minrtt = tp->vegas.minRTT;
}
nlh->nlmsg_len = skb->tail - b; nlh->nlmsg_len = skb->tail - b;
return skb->len; return skb->len;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment